Помогите найти ошибку

 

Всем добрый вечер!

Написал функцию трала для совы, вроде ничего особенного в ней нет, просто тралит на определенном расстоянии и всё. Ошибок никаких в журнал не пишет и вроде бы всё зашибись, НО! функция OrderModifi() не всегда срабатывает. 

Все условия проверял - работают. Написал принт перед модифи - работает а модифи  НЕТ!!! и в журнале тишина, что делать уже незнаю.

int Bezub() 
   {  
   double SL;
      for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
         {
         if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()&& OrderMagicNumber() ==Martinmagic )
            {  
               if (OrderType()== OP_SELL)
                  {
                  if (CalkZero(OP_SELL,Martinmagic)-Ask>trallpips*Point )
                     {
                     if((OrderStopLoss()>Ask+(trallpips+trailingstep)*Point) || OrderStopLoss()==0)
                        { 
                           SL=NormalizeDouble(Ask+trallpips*Point,Digits);
                         
                           if(OrderStopLoss()!=SL) { Print(OrderStopLoss(),";  ",SL); OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Red);}
                        }
                      }
                   }
              
               if (OrderType()== OP_BUY)
                  {
                  if(Bid-CalkZero(OP_BUY,Martinmagic)>trallpips*Point)
                     {
                     if((OrderStopLoss()<Bid -(trallpips+trailingstep)*Point) || OrderStopLoss()==0)
                        {
                        SL=NormalizeDouble(Bid-trallpips*Point,Digits);
                        if(OrderStopLoss()!=SL){ Print(OrderStopLoss(),";  ",SL); OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Red);}
                        }
                     }
                  }
            }
          }
   }
      
 
Начните с поиска закономерности, при каких обстоятельствах тралит, а при каких - не тралит. И код гораздо удобней читать, если его с помощью Ctrl+Alt+M вставлять.
 
evillive:
Начните с поиска закономерности, при каких обстоятельствах тралит, а при каких - не тралит. И код гораздо удобней читать, если его с помощью Ctrl+Alt+M вставлять.

согласен, не каждый может переходить в телепатический режим.. 

в коде есть загадочная  CalkZero()

сомнительно чтобы она могла давать корректную цену, если все нужные цены есть в ордере, кроме того Ask и Bid могут быть не актуальны на момент расчетов..   

Причина обращения: