Ожидание ответа сервера после посылки OrderSend()

[Удален]  

Открываю сделку в цикле следующим кодом:

if(OrderCheck(Request, Check))
         {
          if(Check retcode != 0) break;
          do
            {
             if(OrderSend(Request, Results)) Print(Symbols[i], " - trade result retcode = ", Results.retcode);
            }
          while(Results.retcode != 10009 && !IsStopped());
         }

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

Проблема в том, что, пока терминал получает ответ сервера, цикл успевает послать команду OrderSend() несколько раз.

Как можно заставить его ждать ответа? 

Alexandr Saprykin  
Oleg Shenker:

Открываю сделку в цикле следующим кодом:

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

Проблема в том, что, пока терминал получает ответ сервера, цикл успевает послать команду OrderSend() несколько раз.

Как можно заставить его ждать ответа? 

Попробуйте между посылкой запросов сделать паузу. Используйте функцию PauseBeforeTrade

Aleksey Vyazmikin  
Иногда сервер не отвечает вообще... это надо предусмотреть в коде - как то раз чуть не слил депо из-за этого безобразия.
Dmitry Fedoseev  
Alexandr Saprykin:

Попробуйте между посылкой запросов сделать паузу. Используйте функцию PauseBeforeTrade

Почему Before, а не After? Надо после OrderSend() спать секунду, чтобы история обновилась.
Dmitry Fedoseev  
-Aleks-:
Иногда сервер не отвечает вообще... это надо предусмотреть в коде - как то раз чуть не слил депо из-за этого безобразия.
Что было? Расскажите поподробней. 
Alexey Viktorov  
А почему-бы не следить за транзакциями? Событие OnTradeTransaction() прошло, анализируйте что случилось.
Vladimir Karputov  
Alexey Viktorov:
А почему-бы не следить за транзакциями? Событие OnTradeTransaction() прошло, анализируйте что случилось.
Не просто OnTradeTransaction(), а именно тип транзакции TRADE_TRANSACTION_DEAL_ADD - событие добавления сделки в историю.
Alexey Viktorov  
Karputov Vladimir:
Не просто OnTradeTransaction(), а именно тип транзакции TRADE_TRANSACTION_DEAL_ADD - событие добавления сделки в историю.
Владимир, это уже детали.
Vladimir Karputov  
Dmitry Fedoseev:
Разве событие OnTradeTransaction() произойдет, при неудачном OrderSend()?

Нет, OnTradeTransaction будет только при успешном выполнении:

OnTradeTransaction

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

·Отсылка торгового запроса любым MQL5-приложением в клиентском терминале при помощи функций OrderSend и OrderSendAsync и его последующее исполнение; 

А вот после OrderSend() (успешного) видимо нужно взводить флаги для ожидания - прождали более 2-3 секунд и не получили - OnTradeTransaction() , значит нужно делать задний ход.
Dmitry Fedoseev  
Для начала бы выскакивать из цикла по OrderSend()==true
Причина обращения: