Ошибка или новое требование

 

По выходным обычно занимаюсь оптимизацией советников. Решил прогнать очередной раз и офигел. Все советники выдают 0 сделок. Начал копать и обнаружил 

что "начала сбоить" функция OrderCheck. Раньше всегда работало

   

ZeroMemory (mrequest);

mrequest.action = TRADE_ACTION_DEAL;

mrequest.symbol = _Symbol;

mrequest.volume = lot;

if (type > 0) { mrequest.type = ORDER_TYPE_BUY; mrequest.price = SymbolInfoDouble (_Symbol, SYMBOL_ASK); }

if (type < 0) { mrequest.type = ORDER_TYPE_SELL;  mrequest.price = SymbolInfoDouble (_Symbol, SYMBOL_BID); }

if ((!OrderCheck (mrequest, mcheck) || (mcheck.margin_free < 0))) return false;

теперь стало выдавать ошибку 

10030

TRADE_RETCODE_INVALID_FILL

Указан неподдерживаемый тип исполнения ордера по остатку


и после соответствующей правки (выделено ниже) заработало


ZeroMemory (mrequest);

mrequest.action = TRADE_ACTION_DEAL;

mrequest.symbol = _Symbol;

mrequest.volume = lot;

mrequest.type_filling = ORDER_FILLING_FOK;

if (type > 0) { mrequest.type = ORDER_TYPE_BUY; mrequest.price = SymbolInfoDouble (_Symbol, SYMBOL_ASK); }

if (type < 0) { mrequest.type = ORDER_TYPE_SELL;  mrequest.price = SymbolInfoDouble (_Symbol, SYMBOL_BID); }

if ((!OrderCheck (mrequest, mcheck) || (mcheck.margin_free < 0))) return false;

Так вот возник вопрос. Это ошибка в новом билде (build 1643) или так надо? Зачем менять такие вещи. Может я что-то не понимаю, но зачем при проверки достаточность средств для совершения требуемой торговой операции (так написано в мануале) нужно задавать политику исполнения?

PS: раньше такой ошибки небыло. Терминал обновился 30.07.2017 


 

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