CheckTraling not working properly pleease help

 

Hi

I create simple EA using 2 iMA and add trailing stop function to sell and buy orders. but it is no trailing properly. please help. Also there is no coding errors.

Thank you.

This is my code.

#include<Trade\Trade.mqh>
CTrade trade;

int buy = 0;
int sell = 0;

input int SmallMovingAverage = 20;
input int BigMOvingAverage = 50;
input int TimePeriod = 30;

int buyTicket;
int sellTicket;

void OnTick(){

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);   

   MqlRates PriceInfo[];
   
   int PriceData = CopyRates(_Symbol,_Period,0,3,PriceInfo);
   
   int NumberOfCandles = Bars(Symbol(),Period());
   
   string NumberOfCandlesText = IntegerToString(NumberOfCandles);
   
   string signal="";
   
  double SmallMovingAverageArray[],BigMOvingAverageArray[];
  int SmallMovingAverageDifinition = iMA(_Symbol,_Period,SmallMovingAverage,0,MODE_SMA,PRICE_CLOSE);
  int BigMOvingAverageDifinition = iMA(_Symbol,_Period,BigMOvingAverage,0,MODE_SMA,PRICE_CLOSE);
  
  CopyBuffer(SmallMovingAverageDifinition,0,0,3,SmallMovingAverageArray);
  CopyBuffer(BigMOvingAverageDifinition,0,0,3,BigMOvingAverageArray);
  
  if(BigMOvingAverageArray[1]>SmallMovingAverageArray[1]){
      if(BigMOvingAverageArray[2]<SmallMovingAverageArray[2]){
         signal = "buy";
         ObjectCreate(_Symbol,NumberOfCandlesText,OBJ_ARROW_BUY,0,TimeCurrent(),(PriceInfo[0].low));
      }
  }
  
  if(BigMOvingAverageArray[1]<SmallMovingAverageArray[1]){
      if(BigMOvingAverageArray[2]>SmallMovingAverageArray[2]){
         signal = "sell";
         ObjectCreate(_Symbol,NumberOfCandlesText,OBJ_ARROW_SELL,0,TimeCurrent(),(PriceInfo[0].high));
      }
  }
  
  if((signal=="sell")&&(PositionsTotal()<1)){
      sell++;
      trade.Sell(0.01,NULL,Bid,0,(Bid-150*_Point),NULL);
     CheckTralingStopSell(Bid);
  }
  
  if((signal=="buy")&&(PositionsTotal()<1)){
      buy++;
      trade.Buy(0.01,NULL,Ask,0,(Ask+150*_Point),NULL);
      CheckTralingStopBuy(Ask);
  } 
}

void CheckTralingStopBuy(double Ask){
   
   double SL = NormalizeDouble(Ask-150* _Point,_Digits);
   
   for(int i=PositionsTotal()-1;i>=0;i--){
      string symbol = PositionGetSymbol(i);
      if(_Symbol==symbol){
         ulong PositionTicket = PositionGetInteger(POSITION_TICKET);
         double CurrentStopLoss = PositionGetDouble(POSITION_SL);
         if(CurrentStopLoss<SL){
            trade.PositionModify(PositionTicket,(CurrentStopLoss+10*_Point),0); 
         }
      }
   }
}

void CheckTralingStopSell(double Bid){
   Comment("CheckTralingStopSell");
   double SL = NormalizeDouble(Bid+10* _Point,_Digits);
   
   for(int i=PositionsTotal() - 1;i>=0;i--){
      string symbol = PositionGetSymbol(i);
      if(_Symbol==symbol){
         if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL){
         
            ulong PositionTicket = PositionGetInteger(POSITION_TICKET);
            double CurrentStopLoss = PositionGetDouble(POSITION_SL);
         
         if(CurrentStopLoss>SL){
            trade.PositionModify(PositionTicket,(Bid-10*_Point),0);
            Comment((Bid+10*_Point),"   ",Bid);
         } 
         }
        
      }
   }
}
Reason: