[MQL4] Simple Code EA Robot Indikator ADX

admin
0

Indikator ADX (Average Directional Index) adalah indikator forex yang digunakan untuk mempelajari dan menghasilkan data tentang tren yang sedang berlangsung. Data tersebut berupa identifikasi dari arah dan kekuatan tren.

Indikator ADX terdiri dari gabungan dua indikator arah +DI dan -DI. Kedua indikator tersebut melengkapi ADX sebagai petunjuk aran tren. Petunjuk tersebut berasal dari perhitungan sederhana dari pergerakan arah market.

Baca juga: Indikator ADX Sebagai Pengukur Kekuatan Tren


Strategi Robot EA ADX

Strategi yang digunakan apabila garis +DI diatas -DI dan garis ADX berada di atas nilai 25, maka open posisi BUY. Begitu juga selaliknya untuk kondisi SELL garis -DI diatas +DI dan garis ADX berada di atas level 25. Apabila garis ADX dibawah level 25 maka akan dilakukan menutup semua posisi trading.

Berikut kode sederhana Robot Expert Advisor yang menggunakan indikator ADX.



//-- ADX INDICATOR
input int                  ADXPeriod         = 14;
input int                  ADXLevel          = 25;
input ENUM_APPLIED_PRICE   ADX_AppliedPrice  = PRICE_CLOSE;

//-- TPSL
input int   TP       = 100;
input int   SL       = 500;

//-- STANDARD INPUT
input double   Lot            = 0.01;
input int      MagicNumber    = 6489716;
input string   TradeComment   = __FILE__;

//-- VARIABLE
datetime    BarTime     = 0;


// Fungsi untuk mengambil nilai ADX
double GetADX()
{
   double adx = iADX(_Symbol, 0, ADXPeriod, ADX_AppliedPrice, MODE_MAIN, 0);
   return adx;
}

void OnTick()
{
   OnEveryNewBar();
}

void OnEveryNewBar()
{
   if (BarTime != Time[0])
   {
      Trade();
      BarTime = Time[0];
   }
}

int GetOrdersTotal()
{
   int total = OrdersTotal();
   int Count = 0;
   for (int i = total - 1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            Count++;
         }
      }
   }   
   return Count;
}

void Trade()
{
   double minusDI   = iADX(_Symbol,0,ADXPeriod,ADX_AppliedPrice,MODE_MINUSDI,0);
   double plusDI    = iADX(_Symbol,0,ADXPeriod,ADX_AppliedPrice,MODE_PLUSDI,0);
   
   if (GetADX() > ADXLevel) {
      if (GetOrdersTotal() == 0) {
         if (minusDI > plusDI)
         {
            OpenOrder("SELL");
         }else
         {
            OpenOrder("BUY");
         }
      }
   }else{
      CloseAllPositions();
   }
}

void OpenOrder(string OrderPosition)
{
   double tpPrice, slPrice,  OpenPrice;
   ENUM_ORDER_TYPE orderType;
   
   if (OrderPosition == "BUY") {
      OpenPrice      = Ask;
      tpPrice        = NormalizeDouble(OpenPrice+TP*Point, Digits());
      if (SL > 0) {
         slPrice  = NormalizeDouble(OpenPrice-SL*Point, Digits());
      }else{
         slPrice  = 0;
      }
      orderType      = OP_BUY;
   }else
   if (OrderPosition == "SELL") {
      OpenPrice      = Bid;   
      tpPrice        = NormalizeDouble(OpenPrice-TP*Point, Digits());
      if (SL > 0) {
         slPrice     = NormalizeDouble(OpenPrice+SL*Point, Digits());
      }else{
         slPrice     = 0;
      }
      orderType      = OP_SELL;
   }
   
   int orderTicket = OrderSend(Symbol(),orderType,Lot,OpenPrice,3,slPrice,tpPrice,TradeComment,MagicNumber);
}

void CloseAllPositions()
{
   int total = OrdersTotal();
   for (int i = total - 1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            int ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, White);
         }
      }
   }
}

Posting Komentar

0Komentar

Posting Komentar (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !