Так последний ордер, или все ордера, какой тип результата должна возвращать функция?
Последний. Или иными словами как давно не в позиции.
Возвращать True\False.
Логика примерно седующая: Если последний ордер закрыт на промежутке времени n-баров назад, то...
bool LastOrderClosedIn(int bars) { if ( последний ордер был закрыт в пределах bars баров назад ) return True; return False; }
Что-то типа этого.
Я тут подумал. Возможно, универсальней была бы функция без параметров просто возвращающая "сколько баров назад была закрыта позиция"
int LastOrderClosedIn() { if (OrdersTotal() > 0 ) return(0); // всё ещё в позиции. // вычислить и вернуть значение... }
int 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){ return(iBarShift(Symbol(),tf,time,false); } return(-1); }
Большое спасибо!
Там в ретурне одну скобку забыли закрыть...
В итоге я сделал так:
int LastOrderCloseBar(int tf=0,int magic=0){int time; if(OrdersTotal()>0) return(0); // Ещё в позиции 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){ return(iBarShift(Symbol(),tf,time,false)); } return(-1); }
Опрометчиво, а если есть ордера по другим инструментам? тогда проверка не пройдет, и не такаа уж больша функци, чтобы серьезно машину тормозила
Мда, действительно. Спасиб ещё раз (:
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нужно проверить был ли закрыт последний ордер на прошлых n-барах (свечках).
То есть есть момент, когда OrdersTotal() стал равен нулю и надо проверить было ли закрытие последнего n-баров назад.
Помогите написать функцию, что-то я совсем не дотягиваю ):