К разработчикам. OrderSelect - кривизна от рождения? 4105-Ошибка или просьба подождать. . .

 

Доброго времени суток господа!

Разрешите обратить ваше внимание на выдержку из Справочника MQL4:

int OrderTicket( )
Возвращает номер тикета для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции
OrderSelect().


int OrderTicket( )
Возвращает номер тикета для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Пример:
if(OrderSelect(12, SELECT_BY_POS)==true)
Print("Order #",OrderTicket()," profit: ", OrderTakeProfit());
else
Print("OrderSelect() вернул ошибку - ",GetLastError());


Значит таки вернул ошибку . . . через GetLastError() . . .

Из другого описания в том же справочнике


Остальные функции не меняют значение переменной last_error ни при каких условиях.
AccountBalance, AccountCompany, AccountCredit, AccountCurrency, AccountEquity, AccountFreeMargin, AccountLeverage, AccountMargin, AccountName, AccountNumber, AccountProfit, AccountServer, Alert, CharToStr, Comment, Day, DayOfWeek, DayOfYear, DoubleToStr, GetTickCount, HideTestIndicators, Hour, IndicatorCounted, IsConnected, IsDemo, IsDllsAllowed, IsExpertEnabled, IsLibrariesAllowed, IsOptimization, IsStopped, IsTesting, IsTradeAllowed, IsTradeContextBusy, IsVisualMode, MathAbs, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathMax, MathMin, MathPow, MathRand, MathRound, MathSin, MathSrand, MathTan, Minute, Month, NormalizeDouble, ObjectsDeleteAll, ObjectsTotal, OrderSelect, OrdersHistoryTotal, Period, Print, RefreshRates, Seconds, SetLevelStyle, StringConcatenate, StrToTime, StrToDouble, Symbol, TerminalCompany, TerminalName, TerminalPath, TimeCurrent, TimeDay, TimeDayOfWeek, TimeDayOfYear, TimeHour, TimeLocal, TimeMinute, TimeMonth, TimeSeconds, TimeToStr, TimeYear, UninitializeReason, WindowBarsPerChart, WindowFirstVisibleBar, WindowPriceOnDropped, WindowTimeOnDropped, WindowsTotal, WindowOnDropped, WindowRedraw, WindowXOnDropped, WindowYOnDropped, Year

Так приводит OrderSelect() к возникновению ошибки или нет ??? И самое главное как ее отловить если GetLastError() ее вроде бы не видит или видит. . . А вот еще такой вопрос - если возникает ошибка [4105-Ни один ордер не выбран] так откуда она все таки берется? Надо ли проверять (OrderSelect==TRUE) или нет - тоже неэффективно т.к. если он в цикле FOR - то его значение до конца текущего прохода цикла не изменится и если был (по какой-то причине) FALSE - то до следующего прохода FOR так  FALSE и останется - выходит странная ситуация. . .

Снова из описания MQL4

Некоторые функции меняют значение переменной last_error только в случае возникновения какой-либо ошибки.

OrderClosePrice ERR_NO_ORDER_SELECTED (4105)
OrderCloseTime ERR_NO_ORDER_SELECTED (4105)
OrderComment ERR_NO_ORDER_SELECTED (4105)
OrderCommission ERR_NO_ORDER_SELECTED (4105)
OrderExpiration ERR_NO_ORDER_SELECTED (4105)
OrderLots ERR_NO_ORDER_SELECTED (4105)
OrderMagicNumber ERR_NO_ORDER_SELECTED (4105)
OrderOpenPrice ERR_NO_ORDER_SELECTED (4105)
OrderOpenTime ERR_NO_ORDER_SELECTED (4105)
OrderPrint ERR_NO_ORDER_SELECTED (4105)
OrderProfit ERR_NO_ORDER_SELECTED (4105)
OrderStopLoss ERR_NO_ORDER_SELECTED (4105)
OrderSwap ERR_NO_ORDER_SELECTED (4105)
OrderSymbol ERR_NO_ORDER_SELECTED (4105)
OrderTakeProfit ERR_NO_ORDER_SELECTED (4105)
OrderTicket ERR_NO_ORDER_SELECTED (4105)
OrderType ERR_NO_ORDER_SELECTED (4105)

OrderSelect() здесь неупомятуто - становится совсем непонятно как это все работает . . . Через OrderTicket() что ли проверять каждое вхождение в Close или Modify - не пропал ли там ордер без вести или пока шло время между обработкой предыдущего ордера и текущего наш последний (текущий) уже закрылся по STOP уровню LOSS/PROFIT. . . Какой всетаки должна быть причина ошибки 4105 - чтобы на нее стоило обратить внимание и остановить  Советника. И при каких условиях ордер может НЕ выбраться (к примеру несколько раз подряд не выбираться) по вызову OrderSelect или других обработчиков ордеров.

Ваши комментарии плиз господа разработчики . . . Буду весьма признателен.

P.S. Чтобы у вас все было и вам за это ничего не было.

P.P.S. Спасибо господину Модератору за пояснение насчет функций запрещенных к использованию в тестере стратегии - очень многое узнал, как прочел нюансы работы на тест, демо, реал и оптимизаторе в учебнике и после учебника в статьях и на форуме.

 

4005 - На стеке нет памяти для передачи параметров - ERR_NOT_ENOUGH_STACK_FOR_PARAM

У вас зачем-то получилась безконечная рекурсия и стек кончился. Анализируйте код или побликуйте.