2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 134
1

Не работают инкременты

09.06.2016, 08:24. Показов 741. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему number, StartInaquality и tmpStartValueLWMA1 не инкрементится, если верить файлу лога.
Концовка лога:
StartInaquality=36
number | StartInaquality | tmpStartValueLWMA1 | tmpStartValueLWMA2 | CandleNumber | Intersection
1 | 30 | 50 | 20 | 476 | 11 |
1 | 30 | 50 | 21 | 953 | 23 |
1 | 30 | 50 | 22 | 1430 | 35 |
1 | 30 | 50 | 23 | 1907 | 47 |
1 | 30 | 50 | 24 | 2384 | 59 |
1 | 30 | 50 | 25 | 2861 | 71 |
The End
Кусок кода python:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# -*- coding: utf-8 -*-
 
 
def lwma1(tmpStartValueLWMA1):
    # вычисление первого значения Moving Average. Происходит если количество свеч равно периоду МА1 и ранее первое значение  МА1 не вычислялось
    print(tmpStartValueLWMA1)
    global firstMA1Number, MA1Number, MALineBuffer1, firstMA1Number
    if ((CandleNumber - 1) == tmpStartValueLWMA1) and (firstMA1Number == False):
        weightsum = 0
        firstValue1 = 0
        i = 0
        while i < StartValueLWMA1:
            k = StartValueLWMA1 - i
            firstValue1 += CloseBuffer[i] * k
            weightsum += k
            i += 1
 
        firstValue1 = firstValue1 / weightsum
        MALineBuffer1.append(round(firstValue1, 5))
 
        MA1 = MALineBuffer1[MA1Number]
        MA1Number += 1
        firstMA1Number = True
        print("MA1=", MA1)
 
    if (CandleNumber - 1) > StartValueLWMA1:
        # тест_стандартная формула расчета МА
        MAincr = 1
        weightsum = 0
        firstValue1 = 0
        i1 = CandleNumber - StartValueLWMA1
        while i1 < CandleNumber:
            k = MAincr
            firstValue1 += CloseBuffer[i1] * k
            weightsum += MAincr
            MAincr += -1
            i1 += 1
 
        firstValue1 = firstValue1 / weightsum
        MALineBuffer1.append(round(firstValue1, 5))
        MA1 = MALineBuffer1[MA1Number]
        MA1Number += 1
        print("MA1=", MA1)
        print("Control:MA1Number=", MA1Number)
        print("Control:MALineBuffer1=", MALineBuffer1[len(MALineBuffer1) - 1])
        return MA1
 
 
def lwma2(tmpStartValueLWMA2):
    # вычисление второго значения Moving Average. Происходит если количество свеч равно периоду МА1 и ранее первое значение  МА1 не вычислялось
    print(tmpStartValueLWMA2)
    global firstMA2Number, MA2Number, MALineBuffer2, firstMA2Number
    if ((CandleNumber - 1) == StartValueLWMA2) and (firstMA2Number == False):
        weightsum = 0
        firstValue2 = 0
        i = 0
        while i < tmpStartValueLWMA2:
            k = StartValueLWMA2 - i
            firstValue2 += CloseBuffer[i] * k
            weightsum += k
            i += 1
 
        firstValue2 = firstValue2 / weightsum
        MALineBuffer2.append(round(firstValue2, 5))
 
        MA2 = MALineBuffer2[MA2Number]
        MA2Number += 1
        firstMA2Number = True
        print("MA2=", MA2)
 
    if (CandleNumber - 1) > tmpStartValueLWMA2:
        # тест_стандартная формула расчета МА
        MAincr2 = 1
        weightsum2 = 0
        firstValue2 = 0
        i2 = CandleNumber - StartValueLWMA2
        while i2 < CandleNumber:
            k2 = MAincr2
            firstValue2 += CloseBuffer[i2] * k2
            weightsum2 += MAincr2
            MAincr2 += -1
            i2 += 1
 
        firstValue2 = firstValue2 / weightsum2
        MALineBuffer2.append(round(firstValue2, 5))
        MA2 = MALineBuffer2[MA2Number]
        MA2Number += 1
        print("MA2=", MA2)
        print("Control:MA2Number=", MA2Number)
        print("Control:MALineBuffer2=", MALineBuffer2[len(MALineBuffer2) - 1])
        return MA2
 
 
StartValueLWMA1 = input('ВВедите старотовое значение для перебора расчётов первой LWMA:')
print(StartValueLWMA1)
StartValueLWMA1 = int(StartValueLWMA1)
print(StartValueLWMA1)
EndValueLWMA1 = int(input('ВВедите конечное значение для перебора расчётов первой LWMA:'))
print(EndValueLWMA1)
StartValueLWMA2 = int(input('ВВедите старотовое значение для перебора расчётов второй LWMA:'))
print(StartValueLWMA2)
EndValueLWMA2 = int(input('ВВедите конечное значение для перебора расчётов второй LWMA:'))
print(EndValueLWMA2)
StartInaquality = int(input('ВВедите старотовое значение для расчётов свеч:'))
print(StartInaquality)
EndInaquality = int(input('ВВедите конечное значение для расчётов свеч:'))
print(EndInaquality)
# перебираем построчно файл с тиками и загоняем значения в список
Ticks = []
 
for line in open('ticks.txt'):
    # print(line)
    Ticks.append(float(line))
    # t = len(Ticks)
    # print (t)
f = open("log.txt", "w")
Stats = []
number = 1
 
# начинаем перебор всех вариантов свеч со скользящими с подсчетом количества свеч и количества пересечений скользиящими друг друга
# в этом цикле while перебираем варианты высот свеч в заданном в начале программы диапазоне
while StartInaquality <= EndInaquality:
    tmpStartValueLWMA1 = StartValueLWMA1
    tmpStartValueLWMA2 = StartValueLWMA2
    # в этом цикле while перебираем варианты периодов первой скользящей средней в заданном диапазоне в начале программы
    while tmpStartValueLWMA1 <= EndValueLWMA1:
        # в этом цикле while перебираем варианты периодов второй скользящей средней в заданном диапазоне в начале программы
        print("Control:1")
        TicksCounter = 0
        inaquality = float(StartInaquality) * 0.00001
        OpenBuffer = []
        HighBuffer = []
        LowBuffer = []
        CloseBuffer = []
        CandleNumber = 0
        FirstStart = True
        MALineBuffer1 = []
        MA1Number = 0
        MALineBuffer2 = []
        MA2Number = 0
        firstMA1Number = False
        firstMA2Number = False
        f.write("____________________________________" + '\n')
        f.write("____________________________________" + '\n')
 
        MaInaquality = []
        Intersection = 0
        MaInaqualityNumber = 1
        MaInaquality.append(0)
        while tmpStartValueLWMA2 <= EndValueLWMA2:
            print("Control:2")
            if tmpStartValueLWMA2 > tmpStartValueLWMA1:
                print("tmpStartValueLWMA2=",tmpStartValueLWMA2)
                print("tmpStartValueLWMA1=",tmpStartValueLWMA1)
                print("tmpStartValueLWMA2 > tmpStartValueLWMA1:Continue")
                continue
            FirstMA1Number = False
            # перебераем список с тиками и производим расчёты свеч и скользящих средних
            for CurrentTick in Ticks:
 
                TicksCounter += 1
                # print("Control:3")
                if FirstStart:
                    print("Control:4")
                    # текущая котировка будет являться ценой открытия свечи
                    OpenBuffer.append(CurrentTick)
                    # текущая котировка будет являться максимальной ценой свечи
                    HighBuffer.append(CurrentTick)
                    # текущая котировка будет являться минимальной ценой свечи
                    LowBuffer.append(CurrentTick)
                    # текущая котировка пока является ценой закрытия текущей свечи
                    CloseBuffer.append(CurrentTick)
 
                    FirstStart = False
 
 
                    continue
                else:
                    # print("Control:5")
                    # print("StartValueLWMA1=", StartValueLWMA1)
                    # print("StartValueLWMA2=", StartValueLWMA2)
                    if (HighBuffer[CandleNumber] - LowBuffer[CandleNumber]) < inaquality:
                        CloseBuffer[CandleNumber] = CurrentTick
                        if CurrentTick > HighBuffer[CandleNumber]: HighBuffer[CandleNumber] = CurrentTick
                        if CurrentTick < LowBuffer[CandleNumber]: LowBuffer[CandleNumber] = CurrentTick
                        CurrentInaquality = HighBuffer[CandleNumber] - LowBuffer[CandleNumber]
 
                    if (HighBuffer[CandleNumber] - LowBuffer[CandleNumber]) >= inaquality:
                        CurrentInaquality = (HighBuffer[CandleNumber] - LowBuffer[CandleNumber])
                        CloseBuffer[CandleNumber] = CurrentTick
                        MA1 = lwma1(tmpStartValueLWMA1)
                        MA2 = lwma2(tmpStartValueLWMA2)
                        print("MA1_after=", MA1)
                        print("MA2_after=", MA2)
 
                        #Рассчитываем разницу между текущими значениями двух скользящих средних
                        if (MA1 and MA2) !=None:
                            MaInaquality.append(round((MA1-MA2), 5))
                            f.write("MaInaquality=" + str(MaInaquality[MaInaqualityNumber]) + '\n')
                            f.write("MaInaqualityNumber=" + str(MaInaqualityNumber) + '\n')
                            #проверяем на наличие пересечений между двумя скользящими средними, если есть пересечение,
                            # инкрементим количество пересечений на единицу
                            print("MaInaquality[MaInaqualityNumber - 1]=",MaInaquality[MaInaqualityNumber - 1])
                            print("MaInaquality[MaInaqualityNumber]=",MaInaquality[MaInaqualityNumber])
                            if ((MaInaquality[MaInaqualityNumber - 1] < 0 and MaInaquality[MaInaqualityNumber] > 0) or (
                                MaInaquality[MaInaqualityNumber - 1] > 0 and MaInaquality[MaInaqualityNumber] < 0)):
                                Intersection += 1
                                f.write("Intersection=" + str(Intersection) + '\n')
                            MaInaqualityNumber += 1
                        CandleNumber += 1
 
                        # print("CandleNumber", CandleNumber)
                        OpenBuffer.append(CurrentTick)
                        HighBuffer.append(CurrentTick)
                        LowBuffer.append(CurrentTick)
                        CloseBuffer.append(CurrentTick)
                        CurrentInaquality = (HighBuffer[CandleNumber] - LowBuffer[CandleNumber])
                        f.write("CandleNumber=" + str(CandleNumber) + '\n')
                        f.write("OpenBuffer[CandleNumber]=" + str(OpenBuffer[CandleNumber]) + '\n')
                        f.write("HighBuffer[CandleNumber]=" + str(HighBuffer[CandleNumber]) + '\n')
                        f.write("LowBuffer[CandleNumber]=" + str(LowBuffer[CandleNumber]) + '\n')
                        f.write("CloseBuffer[CandleNumber]=" + str(CloseBuffer[CandleNumber]) + '\n')
                        f.write("MA1=" + str(MA1) + '\n')
                        f.write("MA2=" + str(MA2) + '\n')
                        # input()
            f.write("tmpStartValueLWMA2=" + str(tmpStartValueLWMA2) + '\n')
 
            Stats.append([number,StartInaquality,tmpStartValueLWMA1,tmpStartValueLWMA2,CandleNumber,Intersection])
 
            number =+ 1
 
            tmpStartValueLWMA2 += 1
            print ("RESULTS")
 
        tmpStartValueLWMA1 += 1
        f.write("tmpStartValueLWMA1=" + str(tmpStartValueLWMA1) + '\n')
        StartInaquality += 1
    f.write("StartInaquality=" + str(StartInaquality) + '\n')
    # for MA1 in MALineBuffer1:
    # print(MA1)
print("End of computing")
f.write("number" + "   |   " +  "StartInaquality" + "   |   " + "tmpStartValueLWMA1" + "   |   " +  "tmpStartValueLWMA2" + "   |   " + "CandleNumber" + "   |   " + "Intersection" + "\n")
for i in Stats:
    for j in i:
        f.write(str(j) + "   |   ")
    f.write("\n")
print (" END RESULTS")
print("The End")
f.write("The End")
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2016, 08:24
Ответы с готовыми решениями:

Инкременты
Всем привет, с помощью ida pro изучаю поведение компилятора Visual Studio 2010 (дизассемблирую...

Инкременты
Вопрос по инкрементам - почему если я бы писал в методах, которые перегружают ++ и -- для...

Циклы инкременты и тормоза
Хьюстон, у меня проблемы. Внутри функции есть цикл for()for(){.....}. В нем есть инкременты и...

Префиксный и постфиксный инкременты
Приветствую всех. Экспериментом установил, что префиксный инкремент переменной стандартного типа...

1
dondublon
09.06.2016, 10:21     Не работают инкременты
  #2

Не по теме:


Интересно, будет ли кто-то этот код разбирать. Да ещё с глобалками.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2016, 10:21

Добавить данные в таблицу содержащую только инкременты других таблиц
Здравствуйте, имеется таблица Камеры, она содержит только ID других таблиц, те в свою очередь...

Win 7 64, периодически не работают порты USB. Перезагрузив раза 2-3 комп, работают
Привет! у меня тоже проблема - в win 7 64 периодически не работают порты USB. Перезагрузив раза 2-3...

Кнопки регулировки громкости на клавиатуре иногда не работают и/или работают некорректно
Здравствуйте, у меня возникает некая неполадка/баг со звуком. Пользуюсь я данной клавиатурой, как...

СМА LG WD-80480S не работают исполнительные механизмы, не работают клапана ,мотор,насос
Стиралка LG WD-80480S по включении программы блокирует люк и стоит .Воду не набирает,барабан не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru