Sabtu, 31 Oktober 2020

Membuat Ea Dengan Exponential Moving Average

Berikut adalah cara membuat Expert Advisor (EA) menggunakan Indicator Exponential Moving Average :
//+------------------------------------------------------------------+
//
//                   Copyright ©2020, RalindhaBlogspot.com
//                        http://www.ralindhablogspot.com
//                                  Version 20
//+------------------------------------------------------------------+

extern string Expert_Advisor_By="Tony Koes";
extern int Magic_Number=10020;
extern int MaxSpread  =30;
extern string Time_Filter="Trading Time";
extern bool UseTimer = true;
extern int StartTime=1;
extern int EndTime=23;
extern int Ema_Periode =21;
extern double Lots =0.1;
extern double StopLoss=100;
extern double TakeProfit=1000;
extern int TrailingStop=70;
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(iSAR(NULL,0,Step2,Max,0)>iSAR(NULL,0,Step1,Max,0)&& TradeAllowed == true) 
     if(Close[1]<Low[3]&&Bid>High[1]&& Close[2]>iMA(NULL,0,Ema_Periode,0,MODE_EMA,PRICE_CLOSE,0)&&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(iSAR(NULL,0,Step2,Max,0)<iSAR(NULL,0,Step1,Max,0)&& TradeAllowed == true) 
     if(Close[1]>High[3]&&Ask<Low[1]&& Close[2]<iMA(NULL,0,Ema_Periode,0,MODE_EMA,PRICE_CLOSE,0)&&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,Step2,Max,0)<iSAR(NULL,0,Step1,Max,0)&& TradeAllowed == true) 
    //          {
    //               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
    //          }
 //-------------------------------------------------------------------------------------------+
 //   BUY TRAILING STOP
 //-------------------------------------------------------------------------------------------+
            if(Ask<Low[2]&&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,Step2,Max,0)>iSAR(NULL,0,Step1,Max,0)&& TradeAllowed == true) 
     //          {
     //         if(Ask>Close[1]&& TradeAllowed == true)
     //             OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
     //          }
 //------------------------------------------------------------------------------------------+
 // SELL TRAILING STOP
 //-------------------------------------------------------------------------------------------+
 
            if(Bid>High[2]&&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);
}

Hasil Back Test di Time Frame H4 Pair GBPUSD adalah sbb :


Test Report :













Tidak ada komentar:

Posting Komentar

ALIGATOR EXPERT ADVISOR

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