OrderCheck() Вопросы - страница 3

 
Yedelkin:
Да, так и стараюсь делать. OrderCheck() решил ввести, чтобы поменьше грузить торговый сервер, если запрос по каким-либо причинам окажется некорректным.
Чтобы меньше сервер грузить Вы сделайте корректную обработку ошибки, например, если рынок закрыт - ждать, если реквота - попробовать еще пару раз, затем пауза, если неверные стопы много раз - прекратить работу и сообщить (если не на чемпионате) и т.п. Чтобы не было зацикливания при возникновении ошибки.
 
mrProF:

Ну я бы не сказал что это ошибка, в описании написано:

В случае нехватки средств или ошибочно заполненных параметров функция возвращает false. В случае успешной базовой проверки структур (проверка указателей) возвращается true – это не является свидетельством того, что запрашиваемая торговая операция непременно выполнится успешно. Для получения подробного описания результата выполнения функции следует анализировать поля структуры result.

Так что это функция так, для виду, последнее слово за сервером.

Я не сказал что ошибка - недоработка.

Связи с сервером то может и не быть, да и запрет на автоматическую торговлю в терминале (кнопкой) никто не отменял...

PS

Хотя если рассматривать функцию только для корректности заполнения структур...

 
Interesting:

Хотя если рассматривать функцию только для корректности заполнения структур...


По сути она таковой и является. Именно это и написано в справке.

 
alexvd:


По сути она таковой и является. Именно это и написано в справке.

А почему к примеру не позволить ей проводить дополнительную проверку, к примеру контролировать есть или нет соедиение с сервером?

Коды то это позволяют...

Я конечно понимаю что проверить закрыт ли рынок, есть или нет соединение с сервером (да и многое другое) можно другими способами.

Но тут вся проверка будет комплексной...

 

MetaTrader 5 Client Terminal build 321


...
12. MQL5:  Исправлена работа функции OrderCheck.
...

https://www.mql5.com/ru/forum/23/page8/#comment_18067 

Об исправлении какой именно ошибки идёт речь?

Список изменений в билдах MetaTrader 5 Client Terminal
Список изменений в билдах MetaTrader 5 Client Terminal
  • www.mql5.com
Автоматическое обновление доступно через систему LiveUpdate:.
 
Yedelkin:

MetaTrader 5 Client Terminal build 321


...
12. MQL5:  Исправлена работа функции OrderCheck.
...

https://www.mql5.com/ru/forum/23/page8/#comment_18067 

Об исправлении какой именно ошибки идёт речь?

Неправильно срабатывала проверка при работе с отложенными ордерами.
 

Здравствуйте, уважаемые форумчане! Столкнулся с проблемой обработки запроса. Получаю код 10013- неправильный запрос. Уже голову сломал- не могу найти ошибку. Может кто поможет. Вот сам запрос:

MqlTradeRequest req;
MqlTradeCheckResult res;
MqlTick tick;
SymbolInfoTick(_Symbol,tick);
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = Lots/m;
req.price = tick.bid;
req.sl=0;
req.tp=0;
req.deviation = 20;
req.type = ORDER_TYPE_SELL;
req.type_filling = ORDER_FILLING_IOC;
  bool result1 = OrderCheck(req,res);
int ret=res.retcode;
  Print(" result1 = ",result1," код ошибки ---- ", ret, res.comment);
   

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

Здравствуйте, уважаемые форумчане! Столкнулся с проблемой обработки запроса. Получаю код 10013- неправильный запрос. Уже голову сломал- не могу найти ошибку. Может кто поможет. Вот сам запрос:

MqlTradeRequest req;
MqlTradeCheckResult res;
MqlTick tick;
SymbolInfoTick(_Symbol,tick);
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = Lots/m;
req.price = tick.bid;
req.sl=0;
req.tp=0;
req.deviation = 20;
req.type = ORDER_TYPE_SELL;
req.type_filling = ORDER_FILLING_IOC;
  bool result1 = OrderCheck(req,res);
int ret=res.retcode;
  Print(" result1 = ",result1," код ошибки ---- ", ret, res.comment);
   

У меня так работатет.Свери что тебе не так.

   MqlTradeRequest request = {0};
   MqlTradeResult result   = {0};

   request.type         = ORDER_TYPE_SELL;
   request.price        = SymbolInfoDouble(symbol, SYMBOL_BID);
   request.action       = TRADE_ACTION_DEAL;
   request.symbol       = symbol;
   request.volume       = volume;
   request.sl           = StopLoss;
   request.tp           = Takeprofit;
   request.magic        = Magic;
   request.deviation    = 0;
   request.type_filling = ORDER_FILLING_FOK;
   request.type_time    = ORDER_TIME_GTC;
   request.expiration   = 0;
   string word          = "";
   StringConcatenate(word,
                     "<<< ============ SellPositionOpen(): SellPositionOpen    ",
                     symbol," ============ >>>");
   Print(word);

   if(!OrderSend(request,result) || result.deal==0)
     {
      Print("Open Sell error =", GetLastError());
     }
Ну и провер как все переменние-в виде лот и слипидж,правилно ли инициализировани.

 

 
rusland1962Получаю код 10013- неправильный запрос.   

 1. С некоторых пор переменные типа MqlTradeRequest желательно обнулять:

MqlTradeRequest req={0};

2. Значение объёма также желательно нормализовывать:

req.volume = NormalizeDouble(Lots/m,_Digits);

 

 
Yedelkin:

2. Значение объёма также желательно нормализовывать:

А еще желательно не советовать новичкам писать неправильный код.

Объем нормализуется с учетом LotStep и Min Max Lot, но никак не _Digits.