Странное поведение функций iBarShift, OrderCloseTime в тестере. Кто-нибудь сталкивался с подобным?
- Проблема с повторным открытием ордеров
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
- функция перебора ордеров
Вам нужно искать время не OrderCloseTime(), а время бара ближайшего к OrderCloseTime().
Проверил, правда странно ведёт пример кода по функции iBarShift не работает а подправленный пожалуйста:
оригинал как в справке
datetime some_time=D'2009.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
после правки
datetime some_time=D'2009.03.21 12:00'; int shift=iBarShift(NULL,0,some_time); Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
это уже к метаквотам.
Все намного проще - сначпла фильтруете ордера по времени закрытия - получаете время в абсолюте потом сравниваете его с временем открытия последнего бара, и так уже решаете что делать
и iBarShift() тут советшенно не причем ....
bool ifLastOrderCloseBar(int tf=0,int magic=0){int time; for(int i=0;i<OrdersHistoryTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==magic){ if(OrderCloseTime()>time){ time=OrderCloseTime(); } } } } } if(time!=0){ if(time>iTime(Symbol(),tf,0)){return(true);} } return(false); }