การคำนวณขนาด Lot แบบ Martingale

IUX Markets Bonus

ฟังก์ชันสำหรับการคำนวณขนาด Lot แบบ Martingale

Martingale เป็นกลยุทธ์ที่เพิ่มขนาดการเทรดหลังจากการขาดทุน โดยมีแนวคิดว่าการชนะครั้งต่อไปจะครอบคลุมการขาดทุนที่ผ่านมาทั้งหมดและสร้างกำไร แม้ว่ากลยุทธ์นี้จะมีความเสี่ยงสูง แต่ก็เป็นที่นิยมในหมู่นักเทรดบางกลุ่ม

การเขียน function martingale lot
การเขียน function martingale lot

ต่อไปนี้เป็นฟังก์ชันสำหรับคำนวณขนาด Lot แบบ Martingale

 

ฟังก์ชันนี้คำนวณขนาด Lot โดยใช้หลักการ Martingale ดังนี้:



double CalculateMartingaleLotSize(double initialLot, int consecutiveLosses, double multiplier, double maxLot)
{
    double lotSize = initialLot * MathPow(multiplier, consecutiveLosses);
    
    // ตรวจสอบขนาด Lot ขั้นต่ำและสูงสุดที่โบรกเกอร์อนุญาต
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxAllowedLot = MathMin(maxLot, MarketInfo(Symbol(), MODE_MAXLOT));
    
    // ปรับขนาด Lot ให้อยู่ในช่วงที่อนุญาต
    lotSize = MathMax(minLot, MathMin(lotSize, maxAllowedLot));
    
    // ปรับขนาด Lot ให้เป็นทวีคูณของ Lot Step
    double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
    lotSize = NormalizeDouble(lotSize / lotStep, 0) * lotStep;
    
    return lotSize;
}


  1. รับพารามิเตอร์:
    • initialLot: ขนาด Lot เริ่มต้น
    • consecutiveLosses: จำนวนการขาดทุนติดต่อกัน
    • multiplier: ตัวคูณสำหรับเพิ่มขนาด Lot หลังจากขาดทุน
    • maxLot: ขนาด Lot สูงสุดที่อนุญาตให้ใช้
  2. คำนวณขนาด Lot: ใช้สูตร initialLot * (multiplier ^ consecutiveLosses)
  3. ตรวจสอบข้อจำกัดของโบรกเกอร์:
    • ดึงค่าขนาด Lot ขั้นต่ำและสูงสุดที่โบรกเกอร์อนุญาต
    • ปรับขนาด Lot ให้อยู่ในช่วงที่อนุญาต
  4. ปรับให้เป็นทวีคูณของ Lot Step: ปรับขนาด Lot ให้สอดคล้องกับ Lot Step ของโบรกเกอร์
  5. ส่งคืนค่า: ส่งคืนขนาด Lot ที่คำนวณได้

การใช้งานฟังก์ชันนี้:



void OnTick()
{
    static int consecutiveLosses = 0;
    static double initialLot = 0.01;
    double multiplier = 2.0;
    double maxLot = 5.0;
    
    // ตรวจสอบผลการเทรดล่าสุด และปรับ consecutiveLosses ตามนั้น
    // ...

    double lotSize = CalculateMartingaleLotSize(initialLot, consecutiveLosses, multiplier, maxLot);
    
    Print("Next trade lot size: ", lotSize);
    
    // ใช้ lotSize ในการเปิดออเดอร์
    // ...
}


 

ข้อควรระวังเมื่อใช้ Martingale Strategy:

  1. ความเสี่ยงสูง: การเพิ่มขนาด Lot หลังจากขาดทุนอาจนำไปสู่การสูญเสียเงินทุนอย่างรวดเร็ว
  2. ต้องการเงินทุนมาก: เนื่องจากขนาด Lot เพิ่มขึ้นเรื่อยๆ หลังจากขาดทุน
  3. ไม่มีการรับประกันการชนะ: การเพิ่มขนาด Lot ไม่ได้รับประกันว่าจะชนะในการเทรดครั้งต่อไป
  4. ข้อจำกัดของโบรกเกอร์: บางโบรกเกอร์อาจมีข้อจำกัดในการเพิ่มขนาด Lot อย่างรวดเร็ว

การปรับปรุงและใช้งานอย่างรับผิดชอบ:

  1. กำหนดขนาด Lot สูงสุดที่ยอมรับได้ (maxLot) เพื่อจำกัดความเสี่ยง
  2. พิจารณาใช้ multiplier ที่น้อยกว่า 2 เพื่อลดอัตราการเพิ่มของขนาด Lot
  3. ตั้งค่า Stop Loss ที่เหมาะสมเพื่อจำกัดการขาดทุนในแต่ละการเทรด
  4. ทดสอบกลยุทธ์อย่างละเอียดบนข้อมูลย้อนหลังและบัญชีทดลองก่อนใช้กับเงินจริง
  5. พิจารณาใช้ร่วมกับกลยุทธ์การจัดการความเสี่ยงอื่นๆ เช่น การจำกัดการขาดทุนรายวันหรือรายสัปดาห์

โปรดจำไว้ว่า Martingale Strategy มีความเสี่ยงสูงมาก และไม่เหมาะสำหรับนักลงทุนทุกคน ควรใช้ด้วยความระมัดระวังและเข้าใจความเสี่ยงที่เกี่ยวข้องอย่างถ่องแท้

ตัวอย่าง EA

 YWO Promotion

 


//+------------------------------------------------------------------+
//|                                             Simple Martingale EA |
//|                                      Developed by: Your Name Here |
//|                                                                  |
//| WARNING: This EA uses the Martingale strategy which carries high |
//| risk. Use at your own risk and only with proper risk management. |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property link      "http://www.yourwebsite.com"
#property version   "1.00"
#property strict

// Input parameters
input double InitialLot = 0.01;      // Initial lot size
input double Multiplier = 2.0;       // Lot multiplier after loss
input int StopLoss = 50;             // Stop Loss in pips
input int TakeProfit = 100;          // Take Profit in pips
input int MaxTrades = 5;             // Maximum number of trades

// Global variables
int ticket = 0;
double currentLot = InitialLot;
int consecutiveLosses = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    // Initialization code here
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // Deinitialization code here
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    // Check if we have an open position
    if(ticket > 0)
    {
        // Check if the position is still open
        if(OrderSelect(ticket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
        {
            return; // Position is still open, do nothing
        }
        else
        {
            // Position is closed, check the result
            double profit = OrderProfit();
            if(profit < 0)
            {
                // Loss, increase lot size
                consecutiveLosses++;
                currentLot *= Multiplier;
            }
            else
            {
                // Win, reset lot size and consecutive losses
                currentLot = InitialLot;
                consecutiveLosses = 0;
            }
            ticket = 0; // Reset ticket
        }
    }

    // Check if we can open a new position
    if(ticket == 0 && consecutiveLosses < MaxTrades) { // Simple condition: Buy if MA5 > MA20, Sell otherwise
        double ma5 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0);
        double ma20 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

        int cmd = (ma5 > ma20) ? OP_BUY : OP_SELL;
        double price = (cmd == OP_BUY) ? Ask : Bid;
        double sl = (cmd == OP_BUY) ? price - StopLoss * Point : price + StopLoss * Point;
        double tp = (cmd == OP_BUY) ? price + TakeProfit * Point : price - TakeProfit * Point;

        ticket = OrderSend(Symbol(), cmd, currentLot, price, 3, sl, tp, "Martingale EA", 0, 0, clrGreen);
        
        if(ticket < 0)
        {
            Print("OrderSend failed with error #", GetLastError());
        }
    }
}


คำอธิบายการทำงานของ EA:

  1. Input Parameters:
    • InitialLot: ขนาด lot เริ่มต้น
    • Multiplier: ตัวคูณสำหรับเพิ่มขนาด lot หลังจากขาดทุน
    • StopLoss และ TakeProfit: ระยะ SL และ TP ในหน่วย pips
    • MaxTrades: จำนวนการเทรดติดต่อกันสูงสุดที่อนุญาต
  2. OnTick Function:
    • ตรวจสอบว่ามีตำแหน่งที่เปิดอยู่หรือไม่
    • ถ้าตำแหน่งปิดแล้ว ตรวจสอบผลลัพธ์:
      • ถ้าขาดทุน เพิ่มขนาด lot ตาม Multiplier
      • ถ้ากำไร รีเซ็ตขนาด lot กลับเป็นค่าเริ่มต้น
    • เปิดตำแหน่งใหม่ถ้าไม่มีตำแหน่งที่เปิดอยู่และยังไม่เกิน MaxTrades
    • ใช้เงื่อนไขง่ายๆ ในการตัดสินใจ Buy/Sell: Buy ถ้า MA5 > MA20, Sell ในกรณีอื่นๆ

ข้อควรระวังเมื่อใช้ Martingale Strategy:

  1. ความเสี่ยงสูง: การเพิ่มขนาด lot หลังจากขาดทุนอาจนำไปสู่การสูญเสียเงินทุนอย่างรวดเร็ว
  2. ต้องการเงินทุนมาก: เนื่องจากขนาด lot เพิ่มขึ้นเรื่อยๆ หลังจากขาดทุน จึงต้องการเงินทุนสำรองจำนวนมาก
  3. ไม่มีการรับประกันการชนะ: แม้ว่าจะเพิ่มขนาด lot แต่ก็ไม่ได้รับประกันว่าจะชนะในการเทรดครั้งต่อไป
  4. ข้อจำกัดของโบรกเกอร์: บางโบรกเกอร์อาจมีข้อจำกัดในการเพิ่มขนาด lot อย่างรวดเร็ว
  5. ผลกระทบทางจิตวิทยา: การขาดทุนติดต่อกันหลายครั้งอาจส่งผลเสียต่อสภาพจิตใจของนักเทรด

การปรับปรุง EA:

  1. เพิ่มการจัดการความเสี่ยง เช่น กำหนดการขาดทุนสูงสุดต่อวันหรือต่อสัปดาห์
  2. ใช้เงื่อนไขการเข้าเทรดที่ซับซ้อนขึ้น เช่น ใช้หลายตัวบ่งชี้ร่วมกัน
  3. ปรับ Multiplier ให้น้อยลงเพื่อลดความเสี่ยง
  4. เพิ่มฟังก์ชันการหยุดเทรดชั่วคราวหลังจากการขาดทุนติดต่อกันหลายครั้ง
 Exness Promotion
PNFPB Install PWA using share icon

For IOS and IPAD browsers, Install PWA using add to home screen in ios safari browser or add to dock option in macos safari browser