Creating an Averaging Plus Strategy EA Template in MQL4

Answered using ChatGPT 4o by ChatGPT4o

Question:

buatkan code mq4 untuk EA template dengan strategi averaging plus.

Answer:

Membuat Expert Advisor (EA) di MetaTrader 4 (MT4) dengan strategi averaging plus memerlukan pemahaman yang baik tentang bahasa pemrograman MQL4. Strategi averaging plus biasanya melibatkan penambahan posisi baru pada interval tertentu ketika harga bergerak melawan posisi awal, dengan harapan bahwa harga akan kembali ke arah yang diinginkan dan semua posisi dapat ditutup dengan keuntungan.

Berikut adalah template dasar untuk EA dengan strategi averaging plus. Harap dicatat bahwa ini adalah template dasar dan Anda mungkin perlu menyesuaikannya lebih lanjut sesuai dengan kebutuhan spesifik Anda.

//+------------------------------------------------------------------+
//|                                                      AveragingPlusEA.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property strict

// Input parameters
input double LotSize = 0.1;          // Initial lot size
input double Step = 50;              // Distance in points to open new position
input double TakeProfit = 100;       // Take profit in points
input double StopLoss = 200;         // Stop loss in points
input int MagicNumber = 123456;      // Magic number for the EA

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // Initialization code
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // Deinitialization code
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // Check for open positions
   int totalOrders = OrdersTotal();
   double lastOrderPrice = 0;
   int lastOrderType = -1;
   
   for(int i = totalOrders - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == MagicNumber)
           {
            lastOrderPrice = OrderOpenPrice();
            lastOrderType = OrderType();
            break;
           }
        }
     }
   
   // If no open positions, open initial position
   if(lastOrderType == -1)
     {
      OpenPosition();
     }
   else
     {
      // Check if we need to open a new averaging position
      double currentPrice = (lastOrderType == OP_BUY) ? Ask : Bid;
      if(MathAbs(currentPrice - lastOrderPrice) >= Step * Point)
        {
         OpenPosition();
        }
     }
  }
//+------------------------------------------------------------------+
//| Function to open a new position                                  |
//+------------------------------------------------------------------+
void OpenPosition()
  {
   double lotSize = LotSize;
   double price = Ask;
   int type = OP_BUY;
   
   if(OrdersTotal() > 0)
     {
      if(OrderSelect(OrdersTotal() - 1, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderType() == OP_BUY)
           {
            price = Bid;
            type = OP_SELL;
           }
         else
           {
            price = Ask;
            type = OP_BUY;
           }
        }
     }
   
   int ticket = OrderSend(Symbol(), type, lotSize, price, 3, 0, 0, "Averaging Plus", MagicNumber, 0, Blue);
   if(ticket < 0)
     {
      Print("Error opening order: ", GetLastError());
     }
  }
//+------------------------------------------------------------------+

Penjelasan:

  1. Input Parameters: Parameter input yang dapat disesuaikan seperti ukuran lot awal, jarak dalam poin untuk membuka posisi baru, take profit, stop loss, dan magic number.
  2. OnInit(): Fungsi inisialisasi EA.
  3. OnDeinit(): Fungsi deinisialisasi EA.
  4. OnTick(): Fungsi utama yang dipanggil setiap kali ada tick baru. Di sini, EA memeriksa posisi terbuka dan memutuskan apakah perlu membuka posisi baru berdasarkan strategi averaging plus.
  5. OpenPosition(): Fungsi untuk membuka posisi baru.

Template ini adalah dasar dan mungkin memerlukan penyesuaian lebih lanjut untuk memenuhi kebutuhan spesifik Anda, seperti manajemen risiko yang lebih baik, penanganan kesalahan, dan optimasi lainnya. Pastikan untuk menguji EA ini di akun demo sebelum menggunakannya di