Как выбрать закрытые ордера по покупке/продаже

 

Коллеги, прошу помочь разобраться. Вот часть кода:

 int OrdClosed = OrdersHistoryTotal();
      if (OrderSelect(OrdClosed,SELECT_BY_TICKET,MODE_HISTORY)==true)
        {
         if (OrderType()==0)
           {
            double CPb=OrderClosePrice();
            datetime CTb=OrderCloseTime();
            int x=(CPb/CPb)*2;
            if ((x-1)>iBarShift("EURUSD",0,CTb))
               y=false;
            else
               y=true
           }
         if (OrderType()==1)
           {
            double CPs=OrderClosePrice();
            datetime CTs=OrderCloseTime();
            int v=(CPs/CPs)*2;
            if ((v-1)>iBarShift("EURUSD",0,CTs))
               z=false;
            else
               z=true;

Идея заключается в том, чтобы получить значения bool-переменной y или z в зависимости от того, какой ордер закрылся последним. Но получается так, что если последним ордером был Buy, то z все равно будет считаться, т.к. CPb=CPs, а CTb=CTs. Ошибку осознаю, но не знаю как исправить.

Вопрос: каким образом нужно исправить код так, чтобы если мы выбрали закрытые ордера по покупке, то OrderClosePrice и OrderCloseTime и другие характеристики считались именно по покупке (продаже).

 
Pavlik20:

получается так, что если последним ордером был Buy, то z все равно будет считаться,


С чего это он будет считаться? Логически все построено правильно, правда я ни разу не видел такого странного способа определения нулевого бара. И готовьтесь, в реальной торговле номер тикета никогда не будет соответствовать количеству ордеров в истории.
 

Доброго дня. Попробуйте следующий цикл перебора ордеров:

         for ( i=OrdersHistoryTotal()-1; i>=0; i-- )       //Цикл по всем закрытым ордерам,..     
            {                  
               if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
                  {
                     if( OrderType() == OP_BUY)//Для ордеров по покупке
                        {
                             //Ваши действия
                        }                                                                              
                  }                                                                                                                     
            } 
Причина обращения: