Помогите с кодом?!

 
//+------------------------------------------------------------------+
//| Open position control function                                   |
//+------------------------------------------------------------------+
int OpenPositionControl()
{
 int  PosCnt;
 bool Result;
 
 Total = OrdersTotal();
 PosCnt = 0;
 OpenPositionMode = 0;
 LastOpenPrice = 0.0;
 LastOpenTime = 0;
 AveragePrice = 0.0;
 SumLot = 0.0;
 TP = 0.0;
 
 for (i=0;i<Total;i++)
   {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Print("Ошибка при вызове OrderSelect в функции OpenPositionControl()");
       return (-1);
      }
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
    PosCnt++;
    if (OrderType() == OP_BUY) OpenPositionMode = 1;
    if (OrderType() == OP_SELL) OpenPositionMode = -1;
    if (OrderOpenTime() > LastOpenTime)
      {
       LastOpenTime = OrderOpenTime();
       LastOpenPrice = OrderOpenPrice();
       TP = OrderTakeProfit();
      }
    AveragePrice = AveragePrice + OrderOpenPrice() * OrderLots();
    SumLot = SumLot + OrderLots();
   }
 if(PosCnt>0) AveragePrice = NormalizeDouble(AveragePrice / SumLot, Digits);
 
 if (NeedModify && PosCnt > 1 && UseCommonSLTP)
   {
    if (OpenPositionMode == 1) 
      {
       TP = AveragePrice + TakeProfit * Point;
       SL = AveragePrice - StopLoss * Point;
      }
    if (OpenPositionMode == -1) 
      {
       TP = AveragePrice - TakeProfit * Point; 
       SL = AveragePrice + StopLoss * Point;
      }
    
    for (i=Total-1;i>=0;i--)
      {
       if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
          Print("Ошибка при 2-м вызове OrderSelect в функции OpenPositionControl");
          return (-1);
         }
       if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
       if(OrderStopLoss()==SL && OrderTakeProfit()==TP) continue;
       Print("AveragePrice = ",DoubleToStr(AveragePrice,Digits));
       Print("SL = ", DoubleToStr(SL,Digits), "; TP = ", DoubleToStr(TP,Digits));
       Result = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,DarkOrange);
       if (!Result) 
         {
          Print("Ошибка модификации ордера в функции OpenPositionControl(). Error #",
                GetLastError());
          return (-1);
         }
      }
    NeedModify = False;
   }
 
 return (PosCnt);   
}

bool TradingTime() 
{
 if (TimeHour(TimeCurrent()) >= OpenHour || TimeHour(TimeCurrent()) < CloseHour) return(True);
 return(False);
}
Здравствуйте! Господа программисты, помогите приравнять параметр AveragePrice к значению кратному 5, тоесть чтоб при выставлении стопа и тейка параметры были кратны 5.
 
После вычисления ТР и SL поставь:
TP=MathCell(TP*2)/2;
SL=MathCell(SL*2)/2;
 
СПАСИБО!! попробую!
 
Не учел, что пять знаков, исправляюсь:
TP=MathCell(TP/(Point*5))*(Point*5);
SL=MathCell(SL/(Point*5))*(Point*5);
 
блин :( не для 5 значных котировок, а для котировок где минимальный тик 5 пунктов а эксперт пытается выставить стоп по цене некратной 5, тоесть например 3235,5 надо выставить а ставит 3235,3 итог ошибка 130
 
Fx32 >>:
блин :( не для 5 значных котировок, а для котировок где минимальный тик 5 пунктов а эксперт пытается выставить стоп по цене некратной 5, тоесть например 3235,5 надо выставить а ставит 3235,3 итог ошибка 130

Универсальнее так:

double Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
TP = MathRound(TP/Tick)*Tick;
 
СПАСИБО!!
Причина обращения: