Помогите посчитать количество убыточных подряд. Если последняя профитная то х=0. Вот что есть, что то не так.
if(OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY))
Спасибо, всё, вроде бы считает, но если первый убыток то х==1, de=1.2 потом профит de=1.1 всё правильно а если снова убыток, то de=1.4 как будто х==2.
Нужно обнулять перед итерацией переменную de=0;
Нужно обнулять перед итерацией переменную de=0;
Понятно, почему то х всегда стал равен 0
int x=0;de=0; for(int trade=OrdersHistoryTotal()-1;trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderProfit()<0) {x++;} if (OrderProfit()>0) {x=0;break;} } } else Print("OrderSelect - ", GetLastError()); }
int GET_CONSECUTIVE_LOSSES() { int LOSSES=0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("ERROR IN HISTORY!"); break; } // || (OrderMagicNumber()<=MAGIC_NUMBER || OrderMagicNumber()>MAGIC_NUMBER+5) if(OrderSymbol()!=_Symbol || OrderType()>1) continue; if(OrderProfit()+OrderSwap()+OrderCommission()>0) break; if(OrderProfit()+OrderSwap()+OrderCommission()<0) LOSSES++; } return(LOSSES); }
При работе с историей есть несколько нюансов, один из них в том, что на запуске терминала ордера упорядочены по времени открытия, а в процессе работы новые добавляются по мере их закрытия (то есть упорядочиваются по времени закрытия). Поэтому предложенные выше функции вряд ли будут работать правильно всегда.
Нужно делать свой массив и в него укладывать тикеты упорядочивая их по времени открытия или закрытия (смотря что нужно), тогда можно быть уверенным, что все будет работать правильно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите посчитать количество убыточных подряд. Если последняя профитная то х=0. Вот что есть, что то не так.