Прошло более суток. В чём причина молчания? Вопросы-то не праздные. Если необходимо, попробую переформулировать.
...Или при удачной обработке запросов, связанных с форексными отложенными ордерами, вообще не надо поверять значение retcode? Ведь в Справочнике говорится про необходимость проверки значения retcode только в случае выставления рыночного ордера:
"Следует иметь в виду при выставлении рыночного ордера, что успешное окончание работы метода OrderSend() не всегда означает успешное совершение сделки. Необходимо проверять в возвращаемой структуре результата result значение retcode, содержащее код возврата торгового сервера..."
Зачем тогда в статьях предлагают проверять значение retcode в случае успешности выполнения функции orderSend()?
Кстати, в продолжение темы различных мнений насчёт кодов 10008-10009: https://www.mql5.com/ru/forum/1111/page128/#comment_18941
Вопросы от пользователей продолжают поступать.
Встретил уже несколько мнений по поводу этих двух кодов:
Поэтому прошу разработчиков объяснить следующие моменты:
а) Может ли при обработке запросов, связанных с форексными отложенными ордерами, появиться код 10009 "Заявка выполнена"?
б) Может ли при обработке запросов, связанных с форексными позициями, появиться код 10009 "Заявка выполнена"?
в) Какой код предназначен к возврату при удачной установке форексного отложенного ордера?
г) Какой код предназначен к возврату при удачной модификации параметров ранее установленного форексного отложенного ордера?
д) Какой код предназначен к возврату при удачном удалении форексного отложенного ордера?
е) Какой код предназначен к возврату при удачной модификации уровней форексной позиции?
OrderSend() предназначена для отправки торговому серверу торговых запросов. Что такое торговый запрос - это некий торговый приказ:
- совершить покупку или продажу немедленно по рынку (заявка может быть выполнена или нет в зависимости от типа приказа и условий исполнения по данному инструменту/приказу);
- разместить отложенный приказ на покупку или продажу по условию (отложенные Stop и Limit ордера) - ордер может быть размещен или отвергнут;
- отменить ранее размещенный приказ на покупку или продажу по условию (удалить отложенные Stop и Limit ордера) - приказ на отмену может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе;
- модифицировать уровни отложенных ордеров (Open price, Stop Loss и Take Profit) - приказ на модифиикацию может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе;
- модифицировать уровни Stop Loss и Take Profit для открытых позиций - приказ на модифиикацию может быть выполнен или отвергнут ввиду блокировки ордера или ошибки в приказе.
Торговый сервер может отклонить полученный торговый приказ, если в нем есть ошибки или текущая ситуация не позволила обработать приказ. После получения приказа сервер проверяет его и возвращает один из кодов возврата торгового сервера. Анализируйет его в программе и в соответствие с ответом реализуйте дальнейшую работу эксперта.
Если Вы обнаружите неправильный код ответа при каких-то торговых операциях - пишите в Сервисдеск. Детально разжевывать здесь ничего не требуется.
Спасибо большое за ответ!
С его помощью удалось устранить пробелы, порожденные прочтением Справочника и Руководства по терминалу. Итак:
==============================================================================================
а) Может ли при обработке запросов, связанных с форексными отложенными ордерами, появиться код 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 ордеров код 10008 не несёт никакой полезной нагрузки.
Это самостоятельный вывод или в Сервисдеске уточнили?
От СД дождёшься нужного ответа :) Вывод - самостоятельный.
От СД дождёшься нужного ответа :) Вывод - самостоятельный.
- www.mql5.com
)) А со Стаканом цен разобрались? То есть, пробовали может тестировать эксперта с типом исполнения EXCHANGE? Там тоже код возврата 10008 фигурирует, а функции из стандартного торгового класса, что-то косячат при этом типе исполнения. )))
То техническое сообщение было сформулировано в ходе подготовки к чемпионату, проверки кодов, которые возвращает валютный эксперт, и просмотра документации. "Стакан цен" и "тип исполнения эксчейндж" - это вроде как понятия биржевой торговли. С биржевыми же инструментами не работал.
Насчёт стандартного класса. А Вы посмотрите используемый код из класса. Скорее всего, там всё просто и понятно. Поэтому, может, это и не косяки вовсе.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Встретил уже несколько мнений по поводу этих двух кодов:
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 "Заявка выполнена"?
в) Какой код предназначен к возврату при удачной установке форексного отложенного ордера?
г) Какой код предназначен к возврату при удачной модификации параметров ранее установленного форексного отложенного ордера?
д) Какой код предназначен к возврату при удачном удалении форексного отложенного ордера?
е) Какой код предназначен к возврату при удачной модификации уровней форексной позиции?