OrderSend() Вопросы - страница 7

 

Отличаются ли поля которые требуется заполнить при

SYMBOL_TRADE_EXECUTION_EXCHANGE

Биржевое исполнение

от полей при

SYMBOL_TRADE_EXECUTION_MARKET

Исполнение ордеров по рынку

???

в справке есть пример лишь для маркет

Market Execution

Торговый ордер на открытие позиции в режиме Market Execution (режим исполнения торговых приказов по рынку). Требуется указание 5 полей:

  • action
  • symbol
  • volume
  • type
  • type_filling

Можно также задать значения полей magic и comment.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Прочитал документацию, поискал в форуме... совсем запутался. Пожалуйста, если не затруднит, объясните в N+1 раз.

1. Отправляю торговый запрос с помощью OrderSend. Данная функция возвращает true.

2. Анализируем retcode (MqlTradeResult). Переменная имеет значение TRADE_RETCODE_DONE.

Эта ситуация гарантирует фактическое исполнение ордера на сервере? Или же ещё требуется выполнять какие-либо проверки в OnTrade, OnTradeTransaction? Тогда на кой ляд анализировать retcode, если от него никакого проку?

 

Т.е. потребность в OnTrade, OnTradeTransaction при использовании OrderSendAsync() мне понятна.

Нужны ли они при использовании функции OrderSend()? Дожидается ли она безусловно исполнения/отклонения ордера на сервере перед передачей исполнения последующего кода эксперта?

 
voix_kas:

...

Нужны ли они при использовании OrderSend()? Дожидается ли она безусловно исполнения/отклонения ордера на сервере перед передачей исполнения последующего кода эксперта?

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

Возвращаемое значение

В случае успешной базовой проверки структур (проверка указателей) возвращается true - это не свидетельствует об успешном выполнении торговой операции. Для получения более подробного описания результата выполнения функции следует анализировать поля структуры result.
 
voix_kas: 1. Отправляю торговый запрос с помощью OrderSend. Данная функция возвращает true.

2. Анализируем retcode (MqlTradeResult). Переменная имеет значение TRADE_RETCODE_DONE.

Эта ситуация гарантирует фактическое исполнение ордера на сервере? 

 retcode может вернуть не только RETCODE_DONE :) Но если торговый сервер возвращает именно TRADE_RETCODE_DONE (Заявка выполнена), то зачем ещё что-либо проверять? По-моему скромному мнению, в данной ситуации функции OnTrade, OnTradeTransaction будут просто дублировать retcode.
 
fyords:

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

В таком случае, одного лишь "true" было бы достаточно. Но разработчики предусмотрели retcode, в котором по замыслу должен хранится "Код возврата торгового сервера".

Т.е. после того как отработает функция OrderSend(), второй строкой кода эксперта я вижу TRADE_RETCODE_DONE, третьей строкой кода пытаюсь, например, изменить только что открытую позицию (которая, по логике, должна существовать). Однако, PositionSelect возвращает false. Итерация повторяется. В итоге ошибочна открыта позиция в двойном объёме.

Как застраховать себя от подобной ситуации?

1. Руководствоваться только retcode и "забить" на OnTrade?

2. Руководствоваться только OnTrade и "забить" на retcode?

 
Yedelkin:
 retcode может вернуть не только RETCODE_DONE :) Но если торговый сервер возвращает именно TRADE_RETCODE_DONE (Заявка выполнена), то зачем ещё что-либо проверять? По-моему скромному мнению, в данной ситуации функции OnTrade, OnTradeTransaction будут просто дублировать retcode.

Судя по перечню "Кодов возврата торгового сервера", в режиме исполнения запросов по рынку возможна только одна неопределённость: TRADE_RETCODE_LOCKED. И здесь, пожалуй, без OnTrade не обойтись.

Позвольте поинтересоваться, какую связку лично Вы используете?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера - Документация по MQL5
 
voix_kas: Судя по перечню "Кодов возврата торгового сервера", в режиме исполнения запросов по рынку возможна только одна неопределённость: TRADE_RETCODE_LOCKED. И здесь, пожалуй, без OnTrade не обойтись.

Позвольте поинтересоваться, какую связку лично Вы используете?

  Есть ещё "Placed". Именно их (Placed/Done) я и проверяю с точки зрения успешности отправления запроса.
 
Можете привести конкретный код?
 
voix_kas:  Можете привести конкретный код?   
 Нет, привести конкретный код я не могу. Во-первых, он запечатан в классах с год назад, во-вторых - его надо искать. ..Вы поинтересовались - Какую связку я использую? - Я искренне ответил.
 
voix_kas:

Как застраховать себя от подобной ситуации?

1. Руководствоваться только retcode и "забить" на OnTrade?

2. Руководствоваться только OnTrade и "забить" на retcode?

Надежнее всего руководствоваться OnTrade-ом, но можно и без него - анализируйте совершенную сделку (ResultDeal()).

Скоро будет статья именно на эту тему. 

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