Mql4 Code for EA Average orders problem in modifying TP

 

Dears

I am writing a code for EA entering the first order with simple indicators, it works very fine now on Demo, I am trying to add backup strategy if price goes against trade by using average strategy. the code working good to place average orders but fail on modifying Take profit. i do not know what the problem. I am attaching the code of average orders if any one can help on this i will appreciate. I am placing here the case of sell orders buy case will be the same. 

//---Average System  Parameters--------------------------------------------------------

input string AVXXxx="------------------";     //-----------Average Oders Setting-------

input bool AverageOrder=false;                //Average Orders 

input int AVorderDs=3000;                     //Average Order Distance

input int AVorderNo=3;                        //Average Orders Total Numbers

input int AVtakeProfitr=250;                  //Average Take Profit

input int MartStart=0;                        //Oder Start Martingale

input int MartFactor=1;                       //Martingale Factor


//---------------------------------End of First Order Entery--------------------------------------------+

 //+------------------------------------------------------------------+

//| Average Orders Strategy                                          |

//+------------------------------------------------------------------+  

 

 

   if (AverageOrder==true)

    {

   //-------------------

    double buy_order_lots=0,sell_order_lots=0,BuyLotprice=0,SellLotprice=0,BUY_L=0,SELL_L=0,tp=0;

   double last_buy_price=0,last_sell_price=0;

   double NewAverageBUYprice, NewAverageSELLprice,price;

   int i,cnt1=0,cnt2=0,Ticket,buy,sell;

   int buytickets[],selltickets[],ticket;

   bool result;

   //-------------------------------------

         

   double AVSellPrice; 

   double AVLot=0.01;

   //int ticket;

   int Error=GetLastError(); 

   int TotalOrderonchart=OpenOrderthisChart(Symbol());

   //-----------------------------------------

            

         bool SelectFirst = OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

        

         if((OpenOrderthisChart(Symbol())<AVorderNo) && OrderSymbol() == Symbol() && OrderMagicNumber()==MagNumber)

         if(MartStart<2) AVLot=OrderLots();

        // if(MartStart>1 && n>=MartStart) AVLot=OrderLots()*MartFactor;  

         

      //+---------------FIND LAST ORDER PRICE---------------------------------------------------+    

          for(i=1,cnt1,cnt2;i<=AVorderNo-1;i++,cnt1++,cnt2++)                                                                 

          

      {                                                                                   

      if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)

      {                                        

      if((OrderType()==OP_BUY)&& OrderSymbol() == Symbol() && (OrderMagicNumber()== MagNumber))                         

         {                                                                             

            last_buy_price=OrderOpenPrice();                                           

           cnt1++;                                                                   

         }                                                                             

      if((OrderType()==OP_SELL)&&OrderSymbol() == Symbol() && (OrderMagicNumber()== MagNumber))                   

         {                                                                             

      

            last_sell_price=OrderOpenPrice();                                          

              cnt2++;                                                                   

         }  }                                                                          

      }                                                                                  

   //--------------------------End FIND LAST ORDER PRICE-------------------------------------------------------      

         

   //+----------- check threshold and place sell order and find new average sell price-------------------------

   

     if(last_sell_price<(NormalizeDouble((Bid-Point*AVorderDs),Digits)) && (OpenOrderthisChart(Symbol())<AVorderNo))

      {Print("total sell order is ",cnt2);

        switch(cnt2)

            {

            case 1: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 2: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 3: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 4: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 5: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 6: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 7: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 8: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 9: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            case 10: RefreshRates();while(!IsTradeAllowed()) Sleep(100);Ticket=OrderSend(Symbol(),OP_SELL,AVLot,Bid,5,0,0,"Mihyar-1",MagNumber,0,Red);

            if(Ticket<1)Print("Order send fail error #",GetLastError());break;

            }  

            

            //+------------------------------------+

         //| recalculate the average sell price  |

         //+------------------------------------+   

        //cnt2=0; // new sell order is placed so release the number of sell orders to calculate again 

         for(i=1;i<=OpenOrderthisChart(Symbol());i++)

            {

            if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true){

               if((OrderType()==OP_SELL)&& OrderSymbol() == Symbol() && (OrderMagicNumber()==MagNumber))

                  {

                  RefreshRates();

                     while(!IsTradeAllowed()) Sleep(1000);

                  int TotalOrderonchart=OpenOrderthisChart(Symbol());

                  Print (TotalOrderonchart);

                  last_sell_price = OrderOpenPrice(); 

                  Print (last_sell_price);

                  /*SELL_L=OrderLots();

                  SellLotprice+=(SELL_L*OrderOpenPrice());

                  sell_order_lots+=SELL_L;*/

                  

                  //cnt2++;   //get the latest number of sell orders

                  }

         

               }

            }

         //NewAverageSELLprice=SellLotprice/sell_order_lots;

         tp=NormalizeDouble(OrderOpenPrice() - ((AVorderDs/2)*(TotalOrderonchart-1)-AVtakeProfitr)*Point,Digits);

         //+------------------------------------+

         //| set new take profit levels         |

         //+------------------------------------+   

      

         for(i=1;i<=TotalOrderonchart;i++)

            {

               if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true){

               if((OrderType()==OP_SELL) && OrderSymbol() == Symbol() && (OrderMagicNumber()==MagNumber))

                  {

                     RefreshRates();

                     while(!IsTradeAllowed()) Sleep(1000);

                     result=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);

                    if (result==true) Print (result);

                    else Print("Sell Modify error is  ",GetLastError());      

                  }

            }   }  

      }