Тестер в Exel

  • Автор темы V8
  • Дата начала

V8

New member
Программирование, даже на VBA, штука достаточно гибкая, простор для творчества безграничен ;)

Application.ScreenUpdating = False
'Application.Calculation = xlCalculationManual
'Application.EnableEvents = False

n = 2 - это начало строки
i = n ' начало строки
m = 60 ' - это регулировачное число которым можно варьировать МТС
lot = 10 ' - это число торгуемых лотов
komisia = 0.01
x_lotov = 0
dengi = 0
Do While i < m + n
'Лист1.Cells(i, 13).FormulaLocal = "=D" & i & " - МАКС(C" & i & ";F" & i & ")" 'тень HIGH
'Лист1.Cells(i, 14).FormulaLocal = "=-E" & i & " + МИН(C" & i & ";F" & i & ")" 'тень MIN
i = i + 1 ' цикл для сдвига начала чтобы возможно было подсчитать минимумы максимумы
Loop
Do While i < 32250
Application.ScreenUpdating = True
Лист1.Cells(1, 21) = i 'на какой мы строке
Application.ScreenUpdating = False
'Лист1.Cells(i, 13).FormulaLocal = "=D" & i & " - МАКС(C" & i & ";F" & i & ")" 'тень HIGH
'Лист1.Cells(i, 14).FormulaLocal = "=-E" & i & " + МИН(C" & i & ";F" & i & ")" 'тень MIN
'Range("M" & i).FormulaLocal = "=MATRIX(D" & m & ":D1)"
'Лист1.Cells(i, 9).FormulaLocal = "=MATRIX(D" & i - 1 & ":D" & i - m & ")" 'МАКС HIGH
'Лист1.Cells(i, 10).FormulaLocal = "=MATRIX(C" & i - 1 & ":C" & i - m & ";F" & i - 1 & ":F" & i - m & ")" 'MATRIX
'Лист1.Cells(i, 11).FormulaLocal = "=MATRIX(C" & i - 1 & ":C" & i - m & ";F" & i - 1 & ":F" & i - m & ")" 'MATRIX
'Лист1.Cells(i, 12).FormulaLocal = "=MATRIX(E" & i - 1 & ":E" & i - m & ")" 'MATRIX LOW
'Лист1.Cells(i, 15).FormulaLocal = "=MATRIXЧ(M" & i & ":M" & i - m & ")*1,8" 'MATRIX HIGH
'Лист1.Cells(i, 16).FormulaLocal = "=MATRIXЧ(N" & i & ":N" & i - m & ")*1,8" MATRIX LOW --- это сам алгоритм нахождения места входа в рынок

If Лист1.Cells(i, 6) > Лист1.Cells(i, 10) Then
lng = 1 ' это сигнал на лонг
razmer_stopa = Лист1.Cells(i, 3) - Лист1.Cells(i, 16) ' сдвиг стопа для лонга
End If
If Лист1.Cells(i, 6) < Лист1.Cells(i, 11) Then
srt = 1 ' это сигнал на шорт
razmer_stopa = Лист1.Cells(i, 3) + Лист1.Cells(i, 15) ' сдвиг стопа для шорта
End If

If Лист1.Cells(i - 1, 17) = 0 And Лист1.Cells(i, 17) = 1 And x_lotov > 0 Then
If Лист1.Cells(i, 3) - razmer_stopa < 0 Or Лист1.Cells(i, 6) - razmer_stopa < 0 Then
zigzag = -1 ' это сигнал на переворот если сразу выбило без бара
End If
If Лист1.Cells(i, 3) >= Лист1.Cells(i, 6) Then razmer_stopa = Лист1.Cells(i, 3) + Лист1.Cells(i, 15) ' сдвиг стопа при перевороте из лонга в шорт, условие переворота выше
If Лист1.Cells(i, 6) > Лист1.Cells(i, 3) Then razmer_stopa = Лист1.Cells(i, 6) + Лист1.Cells(i, 15)
End If

If Лист1.Cells(i - 1, 18) = 0 And Лист1.Cells(i, 18) = 1 And x_lotov < 0 Then
If Лист1.Cells(i, 3) - razmer_stopa > 0 Or Лист1.Cells(i, 6) - razmer_stopa > 0 Then
zigzag = 1 ' 'это есть переворот из шорт в лонг
End If
If Лист1.Cells(i, 3) <= Лист1.Cells(i, 6) Then razmer_stopa = Лист1.Cells(i, 3) - Лист1.Cells(i, 16) ' сдвиг стопа при перевороте из шортa, условие переворота выше
If Лист1.Cells(i, 6) < Лист1.Cells(i, 3) Then razmer_stopa = Лист1.Cells(i, 6) - Лист1.Cells(i, 16)
End If

If x_lotov > 0 Then
If Лист1.Cells(i, 3) - razmer_stopa < 0 Or Лист1.Cells(i, 6) - razmer_stopa < 0 Then
stp = -1 ' выход из лонга
End If
End If

If x_lotov < 0 Then
If Лист1.Cells(i, 3) - razmer_stopa > 0 Or Лист1.Cells(i, 6) - razmer_stopa > 0 Then
stp = 1 ' выход из шорта
End If
End If

i = i + 1
'то что здесь: на опене след.бара можем открыть позу и проверять на стоп и возможность перевернуться
Лист1.Cells(i, 17) = lng
Лист1.Cells(i, 18) = srt
Лист1.Cells(i, 23) = razmer_stopa
Лист1.Cells(i, 19) = zigzag
Лист1.Cells(i, 20) = stp

If lng = 1 And x_lotov = 0 Then
otpravka = -1 * Лист1.Cells(i, 3) 'по этой котировке на открытии бара купим лоты поэтому и минус
x_lotov = x_lotov + lot 'число лотов купленных
Лист1.Cells(i, 24) = x_lotov
dengi = dengi + otpravka * lot + otpravka * lot * komisia / 100 'позиция по деньгам
Лист1.Cells(i, 25) = dengi
Лист1.Cells(i, 22) = otpravka
End If
If srt = 1 And x_lotov = 0 Then
otpravka = Лист1.Cells(i, 3)
x_lotov = x_lotov - lot
Лист1.Cells(i, 24) = x_lotov
dengi = dengi + otpravka * lot - otpravka * lot * komisia / 100
Лист1.Cells(i, 25) = dengi 'а это вход в шорт на опене след. бара
Лист1.Cells(i, 22) = otpravka
End If
If zigzag = -1 Then
otpravka = Лист1.Cells(i, 3) 'переворот из лонга в шорт на опене след.бара
x_lotov = x_lotov + zigzag * 2 * lot
dengi = dengi + otpravka * 2 * lot - otpravka * 2 * lot * komisia / 100
Лист1.Cells(i, 24) = x_lotov
Лист1.Cells(i, 25) = dengi
Лист1.Cells(i, 22) = otpravka
'zigzag = 0
End If
If zigzag = 1 Then
otpravka = -1 * Лист1.Cells(i, 3) 'переворот из шорта в лонг на опене след.бара
x_lotov = x_lotov + zigzag * 2 * lot
dengi = dengi + otpravka * 2 * lot + otpravka * 2 * lot * komisia / 100
Лист1.Cells(i, 24) = x_lotov
Лист1.Cells(i, 25) = dengi
Лист1.Cells(i, 22) = otpravka
'zigzag = 0
End If
If stp = -1 And zigzag = 0 Then
otpravka = Лист1.Cells(i, 3)
x_lotov = x_lotov + stp * lot
dengi = dengi + otpravka * lot - otpravka * lot * komisia / 100
Лист1.Cells(i, 24) = x_lotov
Лист1.Cells(i, 25) = dengi
Лист1.Cells(i, 22) = otpravka
'stp = 0
End If
If stp = 1 And zigzag = 0 Then
otpravka = -1 * Лист1.Cells(i, 3)
x_lotov = x_lotov + stp * lot
dengi = dengi + otpravka * lot + otpravka * lot * komisia / 100
Лист1.Cells(i, 24) = x_lotov
Лист1.Cells(i, 25) = dengi
Лист1.Cells(i, 22) = otpravka
'stp = 0
End If
lng = 0
srt = 0
stp = 0
zigzag = 0
Лист1.Cells(i, 24) = x_lotov
Лист1.Cells(i, 25) = dengi
Loop
'Application.Calculation = xlCalculationAutomatic
'Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub



Потом выяснив момент со скоростью, я зделал мнемокод и прочол про массивы, но ещё момент в мнемокодах:
- переворот я обзываю zigzaq, он присваивается переменной если был сигнал на close бара, то наследующем open баре я open смотрю по стопам то если до этого не было баров BarGo>0 те баров в моем направлении то сразу иду в переворот ---- эдакая инверсия которая себя оправдала в реальной торговле;

- потом пришлось учесть плавающего лося для zigzaq ,
т.к. если zigzaq не было, то система идёт по плавющему лосю который задается только подтвержденными барами, не так как в zigzaq каждым баром до того момента как выйдет по лосю плавающему, естественно на повторный zigzaq система не встёт и соответственно продожает идти по барам до нужного момента входа в рынок либо лонг либо шорт и опять проверка на стоп, зигзаг и так по кругу

- после такого улучшайзинга вот мнемокод и вроде чёта не очень охота уже делать без гоу-ту как в коде выше :

МНЕМОКОД




ВОТ стали бы вы камрады, переделывать без гоу -ту , а то опять по времени можно так и до пенсии делать ?
Гоу ту -- влияет на скорость, или код "поперхнуться" на ошибку может -?
 

ASFedor

New member
Порадовали смайлики :)

Только я так и не понял, нафига ты сюда код выложил?

Ты про гоу ту спросил, тебе ответили. Если не можешь обойтись без него (лично я его использовал только при вызове обработчика ошибок), значит делай с ним. К красоте и лаконичности кода стремиться, конечно же, желательно, но мощности современных компьютеров позволяют не уделять особого внимания таким мелочам ;) Главное, чтобы ты получил то, что тебе нужно. Работает и ладно. Внесение "усовершенствований" в работющий код только увеличивает время на поиск ошибок.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху