Close All pending order, When one order take the SL

 

Hi, I write a code that open one order and four pending order, at the MA's cross.

But I want, that when for example, the BUY order take the SL, the other pending will close.

I write this code, but didn't work, help??

//+------------------------------------------------------------------+
//|                                                      CrossMA.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern int pmedia=50;
extern int smedia=8;
extern int dist=1000;
extern int TP=400;
extern int SL=400;

void OpenOrder()
{
double Pmedia,Pmedia1;
double Smedia,Smedia1;

Pmedia= iMA(Symbol(),0,pmedia,0,MODE_SMA,PRICE_CLOSE,0);
Smedia= iMA(Symbol(),0,smedia,0,MODE_SMA,PRICE_CLOSE,0);
Pmedia1= iMA(Symbol(),0,pmedia,0,MODE_SMA,PRICE_CLOSE,1);
Smedia1= iMA(Symbol(),0,smedia,0,MODE_SMA,PRICE_CLOSE,1);

if(OrdersTotal()==0)
{

  for( int pos = OrdersTotal()-1; pos >= 0 ; pos-- )
      {
      if( OrderSelect(pos, SELECT_BY_POS) )
         {
          
         if( OrderMagicNumber() == 300 &&  OrderSymbol() == Symbol() )
            {   
             
            if (OrderClosePrice() <= OrderStopLoss())
           {
       
       for(int i=0;i<OrdersTotal();i++)
   {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if(OrderType()==OP_BUY)
     {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
      continue;
     }
    if(OrderType()==OP_SELL)
     {
      OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      continue;
     }
    if(OrderType()==OP_BUYSTOP||OP_BUYLIMIT)
     {
      OrderDelete(OrderTicket());
      continue;
     }
   }
     }     
           }
      }
   }
   
if(Smedia1<Pmedia1 && Smedia>Pmedia)
{
double price= Ask+dist*Point;

  int ticket= OrderSend(Symbol(),OP_BUY,0.10,Ask,3,Bid-SL*Point,Bid+TP*Point,"compra",300,0,0);
 int ticket1= OrderSend(Symbol(),OP_BUYSTOP,0.10,price,3,(price-dist*Point),price+TP*Point,"compra",301,0,0);//x4times
  return;
}
/*if(Smedia1>Pmedia1&&Smedia<Pmedia)
{
double price= Bid-distanza*Point;
  int ticket=OrderSend(Symbol(),OP_SELL,0.10,Bid,3,Ask+SL*Point,Ask-TP*Point,"vendere",302,0,0); 
  return;
}*/




 
} 
}
void OnTick()
  {
  OpenOrder();
  }
//+------------------------------------------------------------------+
 

Hello friend,

Why you comment it out the first time that you realize it may not work?

if(Smedia1<Pmedia1 && Smedia>Pmedia)
{
double price= Ask+dist*Point;

  int ticket= OrderSend(Symbol(),OP_BUY,0.10,Ask,3,Bid-SL*Point,Bid+TP*Point,"compra",300,0,0);
 int ticket1= OrderSend(Symbol(),OP_BUYSTOP,0.10,price,3,(price-dist*Point),price+TP*Point,"compra",301,0,0);//x4times
  return;
}
/*if(Smedia1>Pmedia1&&Smedia<Pmedia)
{
double price= Bid-distanza*Point;
  int ticket=OrderSend(Symbol(),OP_SELL,0.10,Bid,3,Ask+SL*Point,Ask-TP*Point,"vendere",302,0,0); 
  return;
}*/

Also "void" doesn't return a value.

 
TotOrders = OrdersTotal();

if (PreviousOrder>TotOrders) CloseALL();

PreviousOrder = TotOrders;
Reason: