Коды возврата 10008 и 10009 при работе с отложенными ордерами

 

Встретил уже несколько мнений по поводу этих двух кодов:

1) "Код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен, а код 10008 показывает, что ордер помещен в очередь на исполнение" (https://www.mql5.com/ru/articles/100);

2) код 10008 "просто сообщает клиенту (торговому терминалу) об успешном размещении ордера" (https://www.mql5.com/ru/forum/1111/page123/#comment_18372); 

3) "...не совсем понятно, что значит "10008: Ордер размещен", ведь когда ордер поставлен в очередь на сервере, то ему присваивается тикет и возвращается код "10009: TRADE_RETCODE_DONE: Заявка выполнена"" (https://www.mql5.com/ru/forum/1111/page123/#comment_18376);

4) код 10009 - "заявка может относиться к разным вещам (рыночные операции, модификации и т.д)", код 10008 - "речь идет об установке именно ордера. Причем, по логике вещей, именно об установке нового ордера" (https://www.mql5.com/ru/forum/1111/page124/#comment_18377);

5) код 10009 "касается ордеров направленных на немедленное испoлнение по рынку", код 10008 "касается отложенных ордеров" (https://www.mql5.com/ru/forum/1111/page124/#comment_18381);

6)  код 10009 "касается не только ордеров исполненных по рынку, ну и любых модификаций ордеров и позиций" (https://www.mql5.com/ru/forum/1111/page124/#comment_18383).

Как нетрудно заметить, мнения расходятся.

Что касается кода 10009 "Заявка выполнена", то в Справочнике термин "заявка" вообще употребляется в отношении только биржевых инструментов ("Виды заявок в стакане цен").

Поэтому прошу разработчиков объяснить следующие моменты:

а) Может ли при обработке запросов, связанных с  форексными отложенными ордерами, появиться код 10009 "Заявка выполнена"?

б) Может ли при обработке запросов, связанных с  форексными позициями, появиться код 10009 "Заявка выполнена"?

в) Какой код предназначен к возврату при удачной установке форексного отложенного ордера?

г) Какой код предназначен к возврату при удачной модификации параметров ранее установленного форексного отложенного ордера?

д) Какой код предназначен к возврату при удачном удалении форексного отложенного ордера?

е) Какой код предназначен к возврату при удачной модификации уровней форексной позиции?  

Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 

Прошло более суток. В чём причина молчания? Вопросы-то не праздные. Если необходимо, попробую переформулировать.

...Или при удачной обработке запросов, связанных с  форексными отложенными ордерами,  вообще не надо поверять значение retcode?  Ведь в Справочнике говорится про необходимость проверки значения retcode только в случае выставления рыночного ордера:

"Следует иметь в виду при выставлении рыночного ордера, что успешное окончание работы метода OrderSend() не всегда означает успешное совершение сделки. Необходимо проверять в возвращаемой структуре результата result значение retcode, содержащее код возврата торгового сервера...

 Зачем тогда в статьях предлагают проверять значение retcode в случае успешности выполнения функции orderSend()?

 

Кстати, в продолжение темы различных мнений насчёт кодов 10008-10009: https://www.mql5.com/ru/forum/1111/page128/#comment_18941 

Вопросы от пользователей продолжают поступать.

 
Yedelkin:

Встретил уже несколько мнений по поводу этих двух кодов:


Поэтому прошу разработчиков объяснить следующие моменты:

а) Может ли при обработке запросов, связанных с  форексными отложенными ордерами, появиться код 10009 "Заявка выполнена"?

б) Может ли при обработке запросов, связанных с  форексными позициями, появиться код 10009 "Заявка выполнена"?

в) Какой код предназначен к возврату при удачной установке форексного отложенного ордера?

г) Какой код предназначен к возврату при удачной модификации параметров ранее установленного форексного отложенного ордера?

д) Какой код предназначен к возврату при удачном удалении форексного отложенного ордера?

е) Какой код предназначен к возврату при удачной модификации уровней форексной позиции?  

OrderSend() предназначена для отправки торговому серверу торговых запросов. Что такое торговый запрос - это некий торговый приказ:

  • совершить покупку или продажу немедленно по рынку (заявка может быть выполнена или нет в зависимости от типа приказа и условий исполнения по данному инструменту/приказу);
  • разместить отложенный приказ на покупку или продажу по условию (отложенные Stop и Limit ордера) - ордер может быть размещен или отвергнут;
  • отменить ранее размещенный приказ на покупку или продажу по условию (удалить отложенные Stop и Limit ордера) - приказ на отмену может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе;
  • модифицировать уровни отложенных ордеров (Open price, Stop Loss и Take Profit) - приказ на модифиикацию может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе;
  • модифицировать уровни Stop Loss и Take Profit для открытых позиций - приказ на модифиикацию может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе.

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

Если Вы обнаружите неправильный код ответа при каких-то торговых операциях - пишите в Сервисдеск. Детально разжевывать здесь ничего не требуется.

 
Rosh:

...

Спасибо большое за ответ!

С его помощью удалось устранить пробелы, порожденные прочтением Справочника и Руководства по терминалу. Итак:

 ==============================================================================================

 а) Может ли при обработке запросов, связанных с  форексными отложенными ордерами, появиться код 10009 "Заявка выполнена"?

Ответ: Да, может, в зависимости от вида  торгового запроса (см. ниже).

б) Может ли при обработке запросов, связанных с  форексными позициями, появиться код 10009 "Заявка выполнена"?

Ответ: Да, может (см. ниже).  

в) Какой код предназначен к возврату при удачной установке форексного отложенного ордера?

Ответ: при удачной  установке форексного отложенного ордера возвращается код

10008 TRADE_RETCODE_PLACED "Ордер размещен".

г) Какой код предназначен к возврату при удачной модификации параметров ранее установленного форексного отложенного ордера?

Ответ:  при удачной модификации параметров ранее установленного форексного отложенного ордера возвращается код

10009 TRADE_RETCODE_DONE "Запрос выполнен".

д) Какой код предназначен к возврату при удачном удалении форексного отложенного ордера?

Ответ:  при удачном удалении форексного отложенного ордера возвращается код 10009 TRADE_RETCODE_DONE "Запрос выполнен".

е) Какой код предназначен к возврату при удачной модификации уровней форексной позиции?

Ответ:  при удачной модификации уровней форексной позиции возвращается код 10009 TRADE_RETCODE_DONE "Запрос выполнен".

==================================================================================================

 

Извините, что иногда отнимаю Ваше время. Зато теперь многие пользователи смогут правильно проанализировать получаемые коды возврата.

 

Помогите расшифровать записи в лог-файле агента! Первый блок записей таков:

FH 0   Trade           16:50:36  2011.01.05 06:58:00  buy stop 0.10 EURUSD at 1.32913 sl: 1.32786 tp: 1.35913 (1.32672 / 1.32686 / 1.32672)
RI 0   Ye00 (EURGBP,M1) 16:50:36   2011.01.05 06:58:00   CTrade::OrderOpen: buy stop 0.10 EURUSD at 1.32913 sl: 1.32786 tp: 1.35913 [done]
JK 0   Ye00 (EURGBP,M1) 16:50:36   2011.01.05 06:58:00   CTrade::OrderOpen: sell stop 0.10 EURUSD at 1.32654 sl: 1.32800 tp: 1.29654 [invalid stops]
RM 0   Trade            16:50:36   2011.01.05 06:58:02   sell stop 0.10 EURUSD at 1.32650 sl: 1.32800 tp: 1.29650 (1.32668 / 1.32682 / 1.32668)
PL 0   Ye00 (EURGBP,M1) 16:50:36   2011.01.05 06:58:02   CTrade::OrderOpen: sell stop 0.10 EURUSD at 1.32650 sl: 1.32800 tp: 1.29650 [done]

 По всей видимости, первая и четвёртая строчки содержат сообщения сервера о том, что отложенные ордера buy stop и sell stop успешно размещены. Правильно?

По второй строчке вижу, что торговый класс CTrade из Стандартной библиотеки отчитался о том, что при размещении отложенного ордера buy stop был получен код возврата TRADE_RETCODE_DONE. Но почему TRADE_RETCODE_DONE, а не TRADE_RETCODE_PLACED? Аналогичный вопрос и по пятой строчке. И вообще, эксперт у меня выставляет stop ордера, торговый класс CTrade предусматривает указание в квадратных скобках слова "placed":

      case TRADE_RETCODE_PLACED            : str="placed";                          break;

но в лог-файле фраза "[placed]" ни разу не появляется.. Это что получается, при размещении отложенных ордеров надо ориентироваться не на код возврата TRADE_RETCODE_PLACED, а на  TRADE_RETCODE_DONE?? Вроде год назад Rosh писал, что при приказе

  • разместить отложенный приказ на покупку или продажу по условию (отложенные Stop и Limit ордера) - ордер может быть размещен или отвергнут;
  •  
    Техническое сообщение. Для stop и limit ордеров код 10008 не несёт никакой полезной нагрузки.
     
    Yedelkin:
    Техническое сообщение. Для stop и limit ордеров код 10008 не несёт никакой полезной нагрузки.
    Это самостоятельный вывод или в Сервисдеске уточнили?
     
    tol64:
    Это самостоятельный вывод или в Сервисдеске уточнили?

    От СД дождёшься нужного ответа :) Вывод - самостоятельный. 

     
    Yedelkin:

    От СД дождёшься нужного ответа :) Вывод - самостоятельный. 

    )) А со Стаканом цен разобрались? То есть, пробовали может тестировать эксперта с типом исполнения EXCHANGE? Там тоже код возврата 10008 фигурирует, а функции из стандартного торгового класса, что-то косячат при этом типе исполнения. )))
    Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
    Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
    • www.mql5.com
    Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
     
    tol64:
    )) А со Стаканом цен разобрались? То есть, пробовали может тестировать эксперта с типом исполнения EXCHANGE? Там тоже код возврата 10008 фигурирует, а функции из стандартного торгового класса, что-то косячат при этом типе исполнения. ))) 

    То техническое сообщение было сформулировано в ходе подготовки к чемпионату, проверки кодов, которые возвращает валютный эксперт, и просмотра документации. "Стакан цен" и "тип исполнения эксчейндж" - это вроде как понятия биржевой торговли. С биржевыми же инструментами не работал.

    Насчёт стандартного класса. А Вы посмотрите используемый код из класса. Скорее всего, там всё просто и понятно. Поэтому, может, это и не косяки вовсе.

    Причина обращения: