Обсуждение статьи "Торговые события в MetaTrader 5"

 

Опубликована статья Торговые события в MetaTrader 5:

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

Генерация торговых событий

Автор:  MetaQuotes

 

Хотелось бы уточнить несколько моментов.

1. Из статьи следует, что для первичной проверки запроса предназначена функция OrderCheck(),  при этом первичная проверка с помощью функции OrderCheck() осуществляется непосредственно  сервером (на стороне сервера), а не в терминале. Правильно?

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
Торговые функции / OrderCheck - Документация по MQL5
 

2. В справочнике указано, что для функции OrderSend() "в случае успешной базовой проверки структур возвращается true". Из этого можно сделать вывод, что true возвращается сразу после проверки запроса на корректность.

Но чуть ниже в примечании добавлено, что "при успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true". Из этого примечания следует, что true возвращается только после принятия ордера сервером.

Между тем, могут возникать ситуации, когда запрос уже проверен на корректность, но ещё не принят брокером. Поэтому прошу уточнить в какой именно момент функция OrderSend()  возвращает true -  сразу после проверки запроса на корректность или только после принятия ордера сервером?

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Yedelkin:

Хотелось бы уточнить несколько моментов.

1. Из статьи следует, что для первичной проверки запроса предназначена функция OrderCheck(),  при этом первичная проверка с помощью функции OrderCheck() осуществляется непосредственно  сервером (на стороне сервера), а не в терминале. Правильно?

Насколько я понимаю обработка ведется на стороне клиентского терминала.

Также это подтверждается следующим постом.

 

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

Как мы знаем, режим немедленного исполнения рыночных ордеров (Instant Execution) является одним из трёх режимов исполнения рыночных ордеров. Поэтому возникает вопрос, что происходит с рыночными ордерами при режимах исполнения Market Execution и Request Execution? Можно ли обобщающе сказать, что "принятые торговым сервером запросы хранятся в виде ордеров, которые могут быть отложенными или рыночными немедленного исполнения по рыночным ценам"?

 
Interesting:

Насколько я понимаю обработка ведется на стороне клиентского терминала.

Также это подтверждается следующим постом.

ОК, предлагаю дождаться официального ответа. Спасибо, как всегда, за дополнительную информацию. Я тоже так раньше полагал.

Дополнение. Я понял даже, что могдо меня смутить в этом вопросе. В статье словосочетание "первичная обработка" наделяется ссылкой на функцию OrderCheck(),  я и принял эту ссылку за чистую монету, без задней мысли.

 
Yedelkin:

Хотелось бы уточнить несколько моментов.

1. Из статьи следует, что для первичной проверки запроса предназначена функция OrderCheck(),  при этом первичная проверка с помощью функции OrderCheck() осуществляется непосредственно  сервером (на стороне сервера), а не в терминале. Правильно?

В статье же сказано, что первичная внутренняя проверка осуществляется в терминале. OrderCheck() также работает в терминале, ничего на сервер не отправляется.
 
Rosh:
В статье же сказано, что первичная проверка осуществляется в терминале. OrderCheck() также работает в терминале, ничего на сервер не отправляется.

В статье сказано: "после отправки запроса он поступает на сервер и проходит первичную проверку". 

Также меня смутило то, что в статье словосочетание "первичная обработка" наделяется ссылкой на функцию OrderCheck(),  я и принял эту ссылку за чистую монету, без задней мысли.

 
Yedelkin:

2.

Между тем, могут возникать ситуации, когда запрос уже проверен на корректность, но ещё не принят брокером. Поэтому прошу уточнить в какой именно момент функция OrderSend()  возвращает true -  сразу после проверки запроса на корректность или только после принятия ордера сервером?

Корректный запрос принимается сервером и ответ отправляется терминалу в поле retcode структуры MqlTradeResult - https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

Код

Идентификатор

Описание

10008

TRADE_RETCODE_PLACED

Ордер размещен

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

Корректный запрос принимается сервером и ответ отправляется терминалу в поле retcode структуры MqlTradeResult - https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

Код

Идентификатор

Описание

10008

TRADE_RETCODE_PLACED

Ордер размещен

Т.е. тем самым Вы хотите сказать, что функция OrderSend()  возвращает true только после принятия (размещения) ордера сервером?
 
Yedelkin:


Также меня смутило то, что в статье словосочетание "первичная обработка" наделяется ссылкой на функцию OrderCheck(),  я и принял эту ссылку за чистую монету, без задней мысли.

Вы и меня запутали. Убрал ссылку с сочетания "первичная проверка".
Причина обращения: