Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай принцип работы Торговых Сигналов для MetaTrader
Pavel Ipatov
279
Pavel Ipatov 2015.04.30 21:24 

Сделал робота, в котором есть необходимость выставлять "одновременно" два отложенных встречных ордера.

Yury Kirillov
3118
Yury Kirillov 2015.04.30 21:27  
И что дальше?
Pavel Ipatov
279
Pavel Ipatov 2015.05.01 19:48  
Yury Kirillov:
И что дальше?

Ну, в том смысле что конструкция типа

{

 TICV=OrderSend(Symbol(),4,Lots,Ask+(Raz1/6)*Point,0,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер байстоп
 TICN=OrderSend(Symbol(),5,Lots,Bid-(Raz1/6)*Point,0,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер селстоп


   }

не выполняется в один проход. Сначала выставляется только первый.

А по логике робота он  удаляется на новом проходе.

В итоге у меня выставляется например селстоп, затем он удаляется и выставляется бай стоп.  На новом баре этот байстоп удаляется и выставляется селстоп. И процесс повторяется с каждым новым баром, а мне надо выставить оба, тогда удалений одного из них не будет.

Не знаю как обойти эту заморочку.

Pavel Ipatov
279
Pavel Ipatov 2015.05.01 19:52  

По логике я использую отсутствие отложенного ордера как факт того, что он перешел в разряд активированного.

Может есть другой способ отслеживания события срабатывания отложенного ордера?

Dmitry Fedoseev
42374
Dmitry Fedoseev 2015.05.01 23:12  
Pavel Ipatov:

По логике я использую отсутствие отложенного ордера как факт того, что он перешел в разряд активированного.

Может есть другой способ отслеживания события срабатывания отложенного ордера?

Можно проверить, существует ли рыночный ордер. Если рыночного нет, значит начальная стадия. Если есть рыночный, тогда удаляем.
Pavel Ipatov
279
Pavel Ipatov 2015.05.02 06:35  
Dmitry Fedoseev:
Можно проверить, существует ли рыночный ордер. Если рыночного нет, значит начальная стадия. Если есть рыночный, тогда удаляем.

Рыночных нет только в самом начале работы робота и после того как рыночных ордеров накопится 80 штук встречных и они будут взаимно закрыты.

Число рыночных постоянно повышается, при этом отложенных всегда должно быть по одному в разных направлениях, только с разным размером лота.

Alexey Volchanskiy
16172
Alexey Volchanskiy 2015.05.02 16:36  
Pavel Ipatov:

Ну, в том смысле что конструкция типа

{

 TICV=OrderSend(Symbol(),4,Lots,Ask+(Raz1/6)*Point,0,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер байстоп
 TICN=OrderSend(Symbol(),5,Lots,Bid-(Raz1/6)*Point,0,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер селстоп


   }

не выполняется в один проход. Сначала выставляется только первый.

А по логике робота он  удаляется на новом проходе.

В итоге у меня выставляется например селстоп, затем он удаляется и выставляется бай стоп.  На новом баре этот байстоп удаляется и выставляется селстоп. И процесс повторяется с каждым новым баром, а мне надо выставить оба, тогда удалений одного из них не будет.

Не знаю как обойти эту заморочку.

Может сделать задержку 50 мс? Некоторые ДЦ шалят даже с мгновенной установкой ТП и СЛ после установки рыночного, сам сталкивался.
Artem Gulturyan
280
Artem Gulturyan 2015.05.02 17:28  
Pavel Ipatov:

Ну, в том смысле что конструкция типа

{

 TICV=OrderSend(Symbol(),4,Lots,Ask+(Raz1/6)*Point,0,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер байстоп
 TICN=OrderSend(Symbol(),5,Lots,Bid-(Raz1/6)*Point,0,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер селстоп


   }

не выполняется в один проход. Сначала выставляется только первый.

А по логике робота он  удаляется на новом проходе.

В итоге у меня выставляется например селстоп, затем он удаляется и выставляется бай стоп.  На новом баре этот байстоп удаляется и выставляется селстоп. И процесс повторяется с каждым новым баром, а мне надо выставить оба, тогда удалений одного из них не будет.

Не знаю как обойти эту заморочку.



В любом случае, при торговле на реале следует выполнить проверку: установлен ли первый ордер ??нет, значит нужно повторить это децствие ))
Первый выставлен, ок выставляем второй. И тоже выполнить проерку

Тем более, что ваш случай никак не сможет вам сказать почем3 он не выставил отложку. Запросите код ошибки после первой строки:

if ( TICV <= 0 ) { Print ( " скрытая ошибка ::: #### ", GetLastError () );}
Dmitry Fedoseev
42374
Dmitry Fedoseev 2015.05.02 17:57  
Pavel Ipatov:

Рыночных нет только в самом начале работы робота и после того как рыночных ордеров накопится 80 штук встречных и они будут взаимно закрыты.

Число рыночных постоянно повышается, при этом отложенных всегда должно быть по одному в разных направлениях, только с разным размером лота.

Значит надо как-то метить парочку. Через комментарий или глобальными переменными.

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

Vladimir Zubov
4160
Vladimir Zubov 2015.05.05 20:45  
Sleep (100);
RefreshRates(); 

Попробуйте между установкой ордеров добавить это.

{

TICV=OrderSend(Symbol(),4,Lots,Ask+(Raz1/6)*Point,0,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер байстоп
Sleep (100);
RefreshRates();  
TICN=OrderSend(Symbol(),5,Lots,Bid-(Raz1/6)*Point,0,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер селстоп

} // Так у меня работает
Alexey Busygin
6435
Alexey Busygin 2015.05.09 06:25  
Pavel Ipatov:

Ну, в том смысле что конструкция типа

{

 TICV=OrderSend(Symbol(),4,Lots,Ask+(Raz1/6)*Point,0,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер байстоп
 TICN=OrderSend(Symbol(),5,Lots,Bid-(Raz1/6)*Point,0,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);//устанавливаем отложенный ордер селстоп


   }

не выполняется в один проход. Сначала выставляется только первый.

А по логике робота он  удаляется на новом проходе.

В итоге у меня выставляется например селстоп, затем он удаляется и выставляется бай стоп.  На новом баре этот байстоп удаляется и выставляется селстоп. И процесс повторяется с каждым новым баром, а мне надо выставить оба, тогда удалений одного из них не будет.

Не знаю как обойти эту заморочку.

Правильно и поочередно, выстроить логику. Только так, можно обойти эту заморочку.

Самое смешное, проблема у вас, видимо заключается в критерии удалении отложек, а вы опубликовали код открытия пары ордеров

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий