Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Сделки открываются только на следующей свече Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
OlegRC2



Зарегистрирован: 18.02.2016
Сообщения: 10

СообщениеДобавлено: Пн Окт 10, 2016 9:25 pm Ответить с цитатой Вернуться к началу

Добрый вечер. Появилась проблема с тестом и я не могу понять как ее решить. Ситуация такая, есть индикатор, который дает сигнал по закрытию свечи. В этот момент надо выставить 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);   //Выход по стоп-лоссу
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Окт 10, 2016 10:32 pm Ответить с цитатой Вернуться к началу

Сделай вот так
Код:

HH1 = Ref (H, -1);      //Записали максимум предыдущей свечи
HH = ValueWhen(Cond1, HH1);

И точно так-же для Low.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
OlegRC2



Зарегистрирован: 18.02.2016
Сообщения: 10

СообщениеДобавлено: Пн Окт 10, 2016 10:52 pm Ответить с цитатой Вернуться к началу

Поменял, вообще ничего не изменилось.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Окт 11, 2016 8:01 am Ответить с цитатой Вернуться к началу

Если все правильно сделал, то этого не может быть.
Сравни эти 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
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
OlegRC2



Зарегистрирован: 18.02.2016
Сообщения: 10

СообщениеДобавлено: Вт Окт 11, 2016 9:50 pm Ответить с цитатой Вернуться к началу

Да, графики разные получились, но у меня в тесте ничего не меняется. Вот начальный код.

Код:
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 программ абсолютно одинаковые результаты. Вот скрин с описанием.

Image

Первый сигнал от индикатора был получен на закрытии свечи 1, соответственно должны установиться 2 уровня: покупка по максимуму свечи 1 и продажа по минимуму. На свече 2 произошел пробой верхнего уровня и открылась длинная позиция, на свече 3 выход по тейк-профиту. Все как и задумано. Далее на закрытии той же третьей свечи появляется сигнал и снова устанавливаются 2 уровня, на максимуме и на минимуме 3 свечи. На 4 свече открывается короткая позиция по пробитому минимуму. На свече 5 выход по стоп-лоссу. Тоже все как и задумано. Вот далее вырисовывается проблема. На закрытии свечи 6 появляется сигнал, должны установиться 2 уровня по аналогии с предыдущими. На свече 7 пробоя не происходит, но он появляется на свече 8 по максимуму свечи 6, вот тут должна открыться длинная позиция, но этого не происходит. На 9 свече есть сигнал, но он должен игнорироваться, т.к. позиция открытая на свече 8 еще не закрыта. Но так как на свече 8 ничего не открылось, то открывается позиция по аналогии с предыдущими на свече 10. Т.е. вход в сделки осуществляется только на следующей свече после сигнала. Почему так происходит? Где в коде я ошибся?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Окт 11, 2016 10:40 pm Ответить с цитатой Вернуться к началу

Ну так нарисуй эти 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
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen