Sabtu, 31 Oktober 2020

Membuat EA Dengan Pola Candle (HOLC)

Jumpa lagi gaess.. Kali ini aku mau posting bagaimana cara membuat expert advisor (EA) atau robot trading dengan menggunakan pola candlestick, yaitu pola HOLC ( High Open Low Close ) ,berikut codingnya dan semoga bermanfaat.

//+------------------------------------------------------------------+
//
//                   Copyright ©2020, RalindhaBlogspot.com
//                        http://www.ralindhablogspot.com
//                                  Version 20
//+------------------------------------------------------------------+

extern string Expert_Advisor_By="Tony Koes";
extern int Magic_Number=10010;
extern int MaxSpread  =25;
extern string Time_Filter="Trading Time";
extern bool UseTimer = true;
extern int StartTime=1;
extern int EndTime=23;
extern double Lots =0.01;
extern double StopLoss=50;
extern double TakeProfit=0;
extern int TrailingStop=25;
extern int Slippage=3;


//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+

int start()
{   
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
//+------------------------------------------------------------------+
//+    spread filter
//+------------------------------------------------------------------+
  double SymSpread = MarketInfo(Symbol(), MODE_SPREAD);
  if(MaxSpread > 0 && MaxSpread <= SymSpread  )    
     {
     Print("Spread is greater than Maximum allowed Spread");
     return;
     } 
 //+------------------------------------------------------------------+ 
 //+  Time Filter   
 //+------------------------------------------------------------------+
     datetime CurrentTime;
     if(UseTimer == true)
       {
         CurrentTime = TimeLocal();
         int GetHour = TimeHour(CurrentTime);
         if(GetHour > StartTime && GetHour < EndTime )
            {
            bool TradeAllowed = true;
            }
         else TradeAllowed = false;
        }         
 //+-------------------------------------------------------------------+
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
//--------------------------------------------------------------------------------------------+
//  BUY ORDER OPENED
//--------------------------------------------------------------------------------------------+
     int result=0;
       if(Close[1]>Open[1]&&Bid>High[1]&& TradeAllowed == true) 
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Tony_Koes_Buy",Magic_Number,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
//--------------------------------------------------------------------------------------------+
//  SELL ORDER OPENED
//--------------------------------------------------------------------------------------------+     

       if(Close[1]>Open[1]&& Ask<Low[1]&& TradeAllowed == true)
    {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Tony_Koes_Sell",Magic_Number,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==Magic_Number 
         )  
        {
         if(OrderType()==OP_BUY)  
          {
 //-------------------------------------------------------------------------------------------+
 //   BUY ORDER CLOSE
 //-------------------------------------------------------------------------------------------+
     //     if(iSAR(NULL,0,Step,Max,0)>Close[1]&& Ask<Low[1]&& TradeAllowed == true) 
     //         {
     //              OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
     //         }
 //-------------------------------------------------------------------------------------------+
 //   BUY TRAILING STOP
 //-------------------------------------------------------------------------------------------+
            if(Ask<Low[1]&&TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {

 //------------------------------------------------------------------------------------------+
 // SELL ORDER CLOSE
 //------------------------------------------------------------------------------------------+
      //         {
      //        if((iSAR(NULL,0,Step,Max,0)<Close[1])&&Bid>High[2]&& TradeAllowed == true)
      //            OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
      //         }
 //------------------------------------------------------------------------------------------+
 // SELL TRAILING STOP
 //-------------------------------------------------------------------------------------------+
 
            if(Bid>High[1]&&TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}
int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==Magic_Number) result++;
   }
  return (result);
}

Berikut Hasil penampakan Backtestnya TF H4 Pair XAUUSD :

Test Report :



 


Tidak ada komentar:

Posting Komentar

ALIGATOR EXPERT ADVISOR

Gunakan Time Frame H1 //------------------------------------------------------------- //  Etasoft Inc. Forex EA and Script Generator version...