การคำนวณขนาด 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

HFM Market 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. เพิ่มฟังก์ชันการหยุดเทรดชั่วคราวหลังจากการขาดทุนติดต่อกันหลายครั้ง
FOREXDUCK Logo

FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง

HFM Promotion