"Одновременное " выставление двух ордеров в МТ4

 

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

 
И что дальше?
 
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:

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

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

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

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

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

 
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 мс? Некоторые ДЦ шалят даже с мгновенной установкой ТП и СЛ после установки рыночного, сам сталкивался.
 
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 () );}
 
Pavel Ipatov:

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

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

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

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

 
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);//устанавливаем отложенный ордер селстоп

} // Так у меня работает
 
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);//устанавливаем отложенный ордер селстоп


   }

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

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

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

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

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

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