Автор |
Сообщение |
OlegRC2
Зарегистрирован: 18.02.2016
Сообщения: 10
|
Добрый вечер. Появилась проблема с тестом и я не могу понять как ее решить. Ситуация такая, есть индикатор, который дает сигнал по закрытию свечи. В этот момент надо выставить 2 отложенные заявки, одну на покупку по максимуму этой свечи, другую на продажу по минимуму этой свечи. Соответственно при пробое одного из уровня должна открыться либо длинная, либо короткая позиция. Выход по стоп-лоссу или тейк-профиту. Пробой может произойти как на следующей свече так и через несколько свечей. Проблема в том, что в тесте вход осуществляется только на следующей свече, и если на следующей свече пробоя не было, то снова идет поиск нового сигнала вместо ожидания пробоя.
Вот код, в чем ошибка?
Код: |
Cond1 = Ref (сигнал от индикатора, -1); //Сигнал получен на предыдущей свече
HH = Ref (H, -1); //Записали максимум предыдущей свечи
LL = Ref (L, -1); //Записали минимум предыдущей свечи
CondBuy = H > HH; //Текущий максимум больше установленного
CondShort = L < LL; //Текущий минимум меньше установленного
Buy = Cond1 AND CondBuy; //Покупка
BuyPrice = HH; //По цене установленного максимума
Short = Cond1 AND CondShort; //Продажа
ShortPrice = LL; //По цене установленного минимума
Sell = 0;
Cover = 0;
TP = 730;
ApplyStop (1,2,TP,1,False,0); //Выход по тейк-профиту
SL = 570;
ApplyStop (0,2,SL,1,False,0); //Выход по стоп-лоссу
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сделай вот так
Код: |
HH1 = Ref (H, -1); //Записали максимум предыдущей свечи
HH = ValueWhen(Cond1, HH1);
|
И точно так-же для Low. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
OlegRC2
Зарегистрирован: 18.02.2016
Сообщения: 10
|
Поменял, вообще ничего не изменилось. |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если все правильно сделал, то этого не может быть.
Сравни эти 2 индикатора.
Код: |
Cond1 = Ref (сигнал от индикатора, -1); //Сигнал получен на предыдущей свече
HH = Ref (H, -1); //Записали максимум предыдущей свечи
Plot(C, "", colorBlack, styleCandle);
Plot(HH, "", colorRed);
|
Код: |
Cond1 = Ref (сигнал от индикатора, -1); //Сигнал получен на предыдущей свече
HH1 = Ref (H, -1); //Записали максимум предыдущей свечи
HH = ValueWhen(Cond1, HH1);
Plot(C, "", colorBlack, styleCandle);
Plot(HH, "", colorRed);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
OlegRC2
Зарегистрирован: 18.02.2016
Сообщения: 10
|
Да, графики разные получились, но у меня в тесте ничего не меняется. Вот начальный код.
Код: |
Cond1 = Ref (A < 0 AND B > 0, -1); //Сигнал получен на предыдущей свече
HH = Ref (H, -1); //Записали максимум предыдущей свечи
LL = Ref (L, -1); //Записали минимум предыдущей свечи
CondBuy = H > HH; //Текущий максимум больше установленного
CondShort = L < LL; //Текущий минимум меньше установленного
Buy = Cond1 AND CondBuy; //Покупка
BuyPrice = HH; //По цене установленного максимума
Short = Cond1 AND CondShort; //Продажа
ShortPrice = LL; //По цене установленного минимума
Sell = 0;
Cover = 0;
TP = 730;
ApplyStop (1,2,TP,1,False,0); //Выход по тейк-профиту
SL = 570;
ApplyStop (0,2,SL,1,False,0); //Выход по стоп-лоссу
|
Вот измененный.
Код: |
Cond1 = Ref (A < 0 AND B > 0, -1); //Сигнал получен на предыдущей свече
HH1 = Ref (H, -1); //Записали максимум предыдущей свечи
HH = ValueWhen(Cond1, HH1);
LL1 = Ref (L, -1); //Записали минимум предыдущей свечи
LL = ValueWhen(Cond1, LL1);
CondBuy = H > HH; //Текущий максимум больше установленного
CondShort = L < LL; //Текущий минимум меньше установленного
Buy = Cond1 AND CondBuy; //Покупка
BuyPrice = HH; //По цене установленного максимума
Short = Cond1 AND CondShort; //Продажа
ShortPrice = LL; //По цене установленного минимума
Sell = 0;
Cover = 0;
TP = 730;
ApplyStop (1,2,TP,1,False,0); //Выход по тейк-профиту
SL = 570;
ApplyStop (0,2,SL,1,False,0); //Выход по стоп-лоссу
|
При тесте этих 2 программ абсолютно одинаковые результаты. Вот скрин с описанием.
Первый сигнал от индикатора был получен на закрытии свечи 1, соответственно должны установиться 2 уровня: покупка по максимуму свечи 1 и продажа по минимуму. На свече 2 произошел пробой верхнего уровня и открылась длинная позиция, на свече 3 выход по тейк-профиту. Все как и задумано. Далее на закрытии той же третьей свечи появляется сигнал и снова устанавливаются 2 уровня, на максимуме и на минимуме 3 свечи. На 4 свече открывается короткая позиция по пробитому минимуму. На свече 5 выход по стоп-лоссу. Тоже все как и задумано. Вот далее вырисовывается проблема. На закрытии свечи 6 появляется сигнал, должны установиться 2 уровня по аналогии с предыдущими. На свече 7 пробоя не происходит, но он появляется на свече 8 по максимуму свечи 6, вот тут должна открыться длинная позиция, но этого не происходит. На 9 свече есть сигнал, но он должен игнорироваться, т.к. позиция открытая на свече 8 еще не закрыта. Но так как на свече 8 ничего не открылось, то открывается позиция по аналогии с предыдущими на свече 10. Т.е. вход в сделки осуществляется только на следующей свече после сигнала. Почему так происходит? Где в коде я ошибся? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну так нарисуй эти 2 уровня. Типа
Код: |
Cond1 = Ref (A < 0 AND B > 0, -1); //Сигнал получен на предыдущей свече
HH1 = Ref (H, -1); //Записали максимум предыдущей свечи
HH = ValueWhen(Cond1, HH1);
LL1 = Ref (L, -1); //Записали минимум предыдущей свечи
LL = ValueWhen(Cond1, LL1);
Plot(C, "", ColorWhite, StyleCandle);
Plot(HH, "HH ", ColorGreen);
Plot(LL, "LL", ColorRed);
|
и посмотри. Если с уровнями все ок, то начинай разбираться почему не открывается сделка.
Включи в настройках тестера Detailed log, ищи этот бар в отчете и смотри что пишут. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|