

extern int     Delta       = 140;
extern int     CurLoDist   = 70;
extern int     PrevHiDist  = 30;
extern int     SL          = 60;
extern int     TP          = 100;

int            PrevBarHiLo, LastDayTrade;
int            JT_SL,                                 // Jumlah Trades Sell Limit
               JT_BL,                                 // Jumlah Trades Buy Limit
               JT_SS,                                 // Jumlah Trades Sell Stop
               JT_BS,                                 // Jumlah Trades Buy Stop
               JT_OS,                                 // Jumlah Trades Open Sell
               JT_OB;                                 // Jumlah Trades Open Buy

int start()
{
   PrevBarHiLo = (High[1]-Low[1])/Point;
   if (PrevBarHiLo >= Delta)                          // Req.#1
   {
      if (Open[1]>Close[1])                           // Sell Direction
      {
         if ((Low[1]-Bid)/Point>=PrevHiDist)          // Req.#2
         {
            if ((High[0]-Bid)/Point>=CurLoDist)       // Req.#3
            {
               if (OrdersTotal()<=0 && TimeDayOfYear(CurTime())!=LastDayTrade)
               {
                  LastDayTrade=TimeDayOfYear(CurTime());
                  OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+(SL*Point),Bid-(TP*Point),"Sell",0,0,Red);
               }
            }
         }
      }
      
      if (Open[1]<Close[1])                           // Buy Direction
      {
         if ((Ask-High[1])/Point>=PrevHiDist)         // Req.#2
         {
            if ((Ask-Low[0])/Point>=CurLoDist)        // Req.#3
            {
               if (OrdersTotal()<=0 && TimeDayOfYear(CurTime())!=LastDayTrade)
               {
                  LastDayTrade=TimeDayOfYear(CurTime());
                  OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-(SL*Point),Ask+(TP*Point),"Buy",0,0,Blue);
               }
            }
         }
      }
   }
   ChkAllTrd();
   if (JT_OS>0 || JT_OB>0)
   {
      SetSLtoBEP();
      if (TimeHour(CurTime())==23 && TimeMinute(CurTime())==30)
      {
         TutupOpenPosisi();
      }
   }
   return(0);
}

void ChkAllTrd()
{
   int ecnt, total;
   JT_SL=0;
   JT_BL=0;
   JT_SS=0;
   JT_BS=0;
   JT_OS=0;
   JT_OB=0;
   total=OrdersTotal();
   for (ecnt=0;ecnt<total;ecnt++)
   {
      OrderSelect(ecnt,SELECT_BY_POS, MODE_TRADES);
      if       (OrderType()==OP_SELLLIMIT && OrderSymbol()==Symbol())
         JT_SL++;
      else if  (OrderType()==OP_BUYLIMIT  && OrderSymbol()==Symbol())
         JT_BL++;         
      else if  (OrderType()==OP_SELLSTOP  && OrderSymbol()==Symbol())
         JT_SS++;
      else if  (OrderType()==OP_BUYSTOP   && OrderSymbol()==Symbol())
         JT_BS++;         
      else if  (OrderType()==OP_SELL      && OrderSymbol()==Symbol())
         JT_OS++;
      else if  (OrderType()==OP_BUY       && OrderSymbol()==Symbol())
         JT_OB++;         
   }
}

void TutupOpenPosisi()
{
   int total=OrdersTotal();
   int ecnt;
   for (ecnt=0;ecnt<total;ecnt++)
   {
      OrderSelect(ecnt,SELECT_BY_POS, MODE_TRADES);
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Indigo);
   }
}

void SetSLtoBEP()
{
   int total=OrdersTotal();
   int ecnt;
   for (ecnt=0;ecnt<total;ecnt++)
   {
      OrderSelect(ecnt,SELECT_BY_POS, MODE_TRADES);
      if (OrderProfit()/10>=30)
      {
         OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Brown);
      }
   }
}