OrderCheck() Вопросы

 

Вопрос 1.  Из описания структуры результатов проверки торгового запроса (MqlTradeCheckResult) следует, что поле retcode предназначено для отражения кодов возврата торгового сервера. При этом в описании поля retcode ссылка на коды возврата торгового сервера содержится без каких-либо оговорок, из чего можно сделать вывод, что после выполнения функции OrderCheck() в поле retcode может быть отражен любой код из перечня имеющихся кодов возврата торгового сервера.

Но если функция OrderCheck() предназначена всего лишь для проверки достаточности средств для совершения требуемой торговой операции (а также для проверки правильности заполненных параметров в переменной типа структуры MqlTradeRequest), и не предназначена для отправки торговых запросов на торговый сервер, то каким образом в поле retcode могут быть отражены такие коды, как 10008 (Ордер размещен), 10009 (Заявка выполнена), 10010 (Заявка выполнена частично) и т.д.?

Иными словами, все ли имеющиеся коды возврата торгового сервера могут быть фактически отражены в поле retcode у переменной типа структуры MqlTradeCheckResult? И если в этом поле не могут быть отражены те или иные коды возврата, то какие именно?

 
Yedelkin:

Вопрос 1.  Из описания структуры результатов проверки торгового запроса (MqlTradeCheckResult) следует, что поле retcode предназначено для отражения кодов возврата торгового сервера. При этом в описании поля retcode ссылка на коды возврата торгового сервера содержится без каких-либо оговорок, из чего можно сделать вывод, что после выполнения функции OrderCheck() в поле retcode может быть отражен любой код из перечня имеющихся кодов возврата торгового сервера.

Но если функция OrderCheck() предназначена всего лишь для проверки достаточности средств для совершения требуемой торговой операции (а также для проверки правильности заполненных параметров в переменной типа структуры MqlTradeRequest), и не предназначена для отправки торговых запросов на торговый сервер, то каким образом в поле retcode могут быть отражены такие коды, как 10008 (Ордер размещен), 10009 (Заявка выполнена), 10010 (Заявка выполнена частично) и т.д.?

Иными словами, все ли имеющиеся коды возврата торгового сервера могут быть фактически отражены в поле retcode у переменной типа структуры MqlTradeCheckResult? И если в этом поле не могут быть отражены те или иные коды возврата, то какие именно?

Можно попробовать проверить обращается ли терминал к серверу во время вызова этой функции, отсюда судить о кодах ответа.
Ну а лучше узнать у разработчиков, но они наверно в отпуске, давно не видно было:)
 

Проверил, не обращается к серверу, OrderCheck() работает даже без соединения с сервером:

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                             ProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "ProF"
#property link      "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
        MqlTradeRequest req;
        MqlTradeCheckResult res;
        MqlTick tick;
        SymbolInfoTick(_Symbol,tick);
        req.action = TRADE_ACTION_DEAL;
        req.magic = 123;
        req.symbol = _Symbol;
        req.volume = 0.1;
        req.price = tick.ask;
        req.sl = 0;
        req.tp = 0;
        req.deviation = 20;
        req.type = ORDER_TYPE_BUY;
        req.type_filling = ORDER_FILLING_AON;
   bool result = OrderCheck(req,res);
  }
//+------------------------------------------------------------------+

Так, что большая часть кодов ответа скорее всего не используется.:)
Проверил какие коды смогу получить: 10014,10016(при не правильной стопах и цене(!) - хотя при цене должна быть ошибка 10015) и 0 (если нет ошибки)

 
mrProF:

Проверил, не обращается к серверу, OrderCheck() работает даже без соединения с сервером:

Так, что большая часть кодов ответа скорее всего не используется.:)

Тут скорей всего нет, а вот в других местах да. Да и отвечает скорей всего не сервер (в данном случае), а функция...
 
Я имел ввиду что большая часть кодов ответа не используется в поле retcode структуры MqlTradeCheckResult. :)
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результатов проверки торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результатов проверки торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результатов проверки торгового запроса - Документация по MQL5
 
mrProF:
Я имел ввиду что большая часть кодов ответа не используется в поле retcode структуры MqlTradeCheckResult. :)
Это понятно...
 
mrProF:
Я имел ввиду что большая часть кодов ответа не используется в поле retcode структуры MqlTradeCheckResult. :)

ОК. Если разработчики не опровергнут этот вывод, то остаётся вопрос: какие именно коды возврата не предназначены для отражения в поле retcode у переменной типа структуры MqlTradeCheckResult?

 
Yedelkin:

ОК. Если разработчики не опровергнут этот вывод, то остаётся вопрос: какие именно коды возврата не предназначены для отражения в поле retcode у переменной типа структуры MqlTradeCheckResult?

"Проверил какие коды смогу получить: 10014,10016(при не правильной стопах и цене(!) - хотя при цене должна быть ошибка 10015) и 0 (если нет ошибки)" и наверно 10019 (не уверен)

Остальные мне не встречались...

 
mrProF:

"Проверил какие коды смогу получить: 10014,10016(при не правильной стопах и цене(!) - хотя при цене должна быть ошибка 10015) и 0 (если нет ошибки)" и наверно 10019 (не уверен)

Кстати, в перечислении ENUM_TRADE_RETURN_CODES, описывающем все коды возврата торгового сервера, код 0 отсутствует. Откуда он взялся и что означает (о каких ошибках идёт речь)?
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера - Документация по MQL5
 
Yedelkin:
Кстати, в перечислении ENUM_TRADE_RETURN_CODES, описывающем все коды возврата торгового сервера, код 0 отсутствует. Откуда он взялся и что означает (о каких ошибках идёт речь)?
Когда OrderCheck() возвращает true - в retcode - "0".
 
mrProF:
Когда OrderCheck() возвращает true - в retcode - "0".

Понял. Спасибо большое!

Прихожу к выводу, что описание поля retcode у переменной типа структуры MqlTradeCheckResult далеко от совершенства.

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