Помогите понять в чем ошибка плиз!

 

Хочу от функции чтоб перебирала все закрытые ордера, отлавливала с определенным магиком и пока профит у них отрицательный - накапливала параметр и выдавала множитель для лота, и соответственно чтоб останавливалась как только найдет положительный профит. Использовать хочу для удвоения лота при лосе.

int DoubleGetSizeLot(int num) { 
   int TotalOrd, TekOrd, b=0; 
   datetime a=9999999999999;
   if (OrdersHistoryTotal()==0) return(1);
   TotalOrd = OrdersHistoryTotal();
   for(TekOrd = 0; TekOrd < TotalOrd; TekOrd++) { OrderSelect(TekOrd, SELECT_BY_POS, MODE_HISTORY);
         if (OrderMagicNumber()==num && OrderSymbol()==Symbol() && OrderCloseTime()<a && OrderProfit()<0) {
            a=OrderCloseTime(); 
            b=b+1;
            }
         if (OrderMagicNumber()==num && OrderSymbol()==Symbol() && OrderCloseTime()<a && OrderProfit()>0) break; 
   }
   if (b==1) return(2);
   if (b==2) return(4);
   if (b==3) return(8);
   if (b==4) return(16);
   if (b==5) return(32);
   return(1);
}
Сейчас как только лось появился хоть один в истории - выдает все время один и тот же множитель - 2.
 
Поменяйте условие цикла на : for(TekOrd = TotalOrd-1; TekOrd >=0; TekOrd--), должно помочь.
 
Ты перечисляешь ордера в истории от начала. На первом же лоссе переменная "а" получает меньшее значение и потом уже условие OrderCloseTime()<a

никогда не выполняется. Наверное, надо считать с конца.

 
Roger:
Ты перечисляешь ордера в истории от начала. На первом же лоссе переменная "а" получает меньшее значение и потом уже условие OrderCloseTime()<a

никогда не выполняется. Наверное, надо считать с конца.


Спасибо, заработало. Где можно посмотреть последовательность открытия ордеров как для истории так и для текущих ?
 
В метаэдиторе выдели OrderSelect() и нажми F1
Причина обращения: