//+------------------------------------------------------------------+
//|                      Break Out [Previous Candle] High Low EA.mq4 |
//+------------------------------------------------------------------+
#property copyright    "Ricky Syam"
#property description  "Empower Your Heart. Think Positively"
#property description  "Empower Your Life. Give Generously"

//---- input parameters
extern double    TP           = 10;
extern double    SL           = 10;
extern double    RangePoint   = 0;
extern double    LotSize      = 0.1;
extern int       MagicNumber  = 123456789;
extern bool      DelOpposite  = false;

#define slip 2
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*point();
   double tik = iVolume(NULL,0,0);
   int exp = TimeCurrent() + (Period()*59);
   double buyPrice, sellPrice;
   
   if(High[1]-Ask < stoplevel) buyPrice = Ask + RangePoint*point();
   else buyPrice = High[1];
   
   if(Bid-Low[1] < stoplevel) sellPrice = Bid - RangePoint*point();
   else sellPrice = Low[1];
   
   
   if(OrdersTotal() == 0)
   {
      if(tik <= 2)
      {
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL*point(), buyPrice+TP*point(),"_Buy_",MagicNumber,exp,Navy);
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL*point(), sellPrice-TP*point(),"_Sell_",MagicNumber,exp,Crimson);   
      }   
   }
   
   if(OrdersTotal () == 2)
   {
      for (int i=0;i<OrdersTotal();i++)
      {
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber)
         {
            if(DelOpposite) delPending(OP_SELLSTOP,MagicNumber);
         }
         
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
         {
            if(DelOpposite) delPending(OP_BUYSTOP,MagicNumber);
         }
      }
   
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

void openOrder(string simbol, int trade, double lotsize, double price, double sl, double tp,string pesan, int magic, int exp, color warna) 
{                     
  int tiket=OrderSend(simbol,trade,lotsize,price,slip,sl,tp,pesan,magic,exp,warna);                              
      if(tiket>0)
      {  
         if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) OrderPrint(); 
      }
         else Print("Cannot send order because of : ",GetLastError());        
}

void delPending(int trade, int MagicNumber1)
{  
    for(int i=0;i<OrdersTotal();i++)
    {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
       if (OrderType()==trade && OrderMagicNumber()==MagicNumber)
       if (OrderDelete(OrderTicket(),CLR_NONE))continue;
    }   
}

double point()
{
   double p;
   if(Digits==5 || Digits==3) p = Point*10;
   else p = Point;
   
   return(p);
}