MQL4 Code for Martingale EA Template with 10 Levels

Answered using ChatGPT 4o by ChatGPT4o

Question:

Tolong saya dibuatkan code mql4 untuk EA template dengan trategi martingale sampai 10 level

Answer:

Tentu, berikut adalah contoh kode MQL4 untuk Expert Advisor (EA) dengan strategi Martingale hingga 10 level. Harap diingat bahwa strategi Martingale bisa sangat berisiko karena melibatkan peningkatan ukuran lot setelah setiap kerugian, yang bisa mengakibatkan kerugian besar jika pasar bergerak melawan posisi Anda.

//+------------------------------------------------------------------+
//|                                                      Martingale.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp.  |
//|                                       https://www.mql5.com        |
//+------------------------------------------------------------------+
#property strict

// Input parameters
input double LotSize = 0.1;          // Initial lot size
input double Multiplier = 2.0;       // Lot size multiplier
input int MaxLevels = 10;            // Maximum Martingale levels
input double TakeProfit = 50;        // Take profit in points
input double StopLoss = 50;          // Stop loss in points

// Global variables
int OrdersCount = 0;
double LastOrderPrice = 0.0;

//+------------------------------------------------------------------+
//| 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 existing orders
   OrdersCount = CountOrders();
   
   // If no orders, open initial order
   if (OrdersCount == 0)
     {
      OpenOrder(ORDER_BUY, LotSize);
     }
   else
     {
      // Check if last order is in loss
      double currentPrice = Bid;
      if (OrdersCount < MaxLevels && currentPrice < LastOrderPrice - StopLoss * Point)
        {
         double newLotSize = LotSize * MathPow(Multiplier, OrdersCount);
         OpenOrder(ORDER_BUY, newLotSize);
        }
     }
  }
//+------------------------------------------------------------------+
//| Function to count the number of open orders                      |
//+------------------------------------------------------------------+
int CountOrders()
  {
   int count = 0;
   for (int i = 0; i < OrdersTotal(); i++)
     {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == 0)
           {
            count++;
            LastOrderPrice = OrderOpenPrice();
           }
        }
     }
   return count;
  }
//+------------------------------------------------------------------+
//| Function to open an order                                        |
//+------------------------------------------------------------------+
void OpenOrder(int type, double lots)
  {
   double price = (type == ORDER_BUY) ? Ask : Bid;
   double sl = (type == ORDER_BUY) ? price - StopLoss * Point : price + StopLoss * Point;
   double tp = (type == ORDER_BUY) ? price + TakeProfit * Point : price - TakeProfit * Point;
   
   int ticket = OrderSend(Symbol(), type, lots, price, 3, sl, tp, "Martingale EA", 0, 0, clrGreen);
   if (ticket < 0)
     {
      Print("Error opening order: ", ErrorDescription(GetLastError()));
     }
  }
//+------------------------------------------------------------------+

Penjelasan singkat:

  1. LotSize adalah ukuran lot awal.
  2. Multiplier adalah pengali ukuran lot untuk setiap level Martingale.
  3. MaxLevels adalah jumlah maksimum level Martingale.
  4. TakeProfit dan StopLoss adalah jarak dalam poin untuk take profit dan stop loss.

EA ini akan membuka order BUY pertama kali dan kemudian memeriksa apakah order tersebut mengalami kerugian. Jika ya, EA akan membuka order baru dengan ukuran lot yang lebih besar sesuai dengan strategi Martingale hingga mencapai level maksimum yang ditentukan.

Harap diingat bahwa ini adalah template dasar dan Anda mungkin perlu menyesuaikannya lebih lanjut sesuai dengan kebutuhan dan strategi trading Anda. Pastikan untuk menguji EA ini di akun demo sebelum menggunakannya di akun live untuk memahami risiko yang terlibat.