Skip to Content

EA GoldBreakout

//+------------------------------------------------------------------+

//|                                               GoldBreakoutEA.mq5 |

//|       Breakout EA สำหรับทองคำ (XAUUSD) - พร้อมใช้งาน 100%      |

//+------------------------------------------------------------------+

#property copyright "AlgoEye 2025"

#property version   "1.02"

#property strict


//--- Input Parameters

input double LotSize     = 0.1;

input int    StopLoss    = 300;        // จุดทศนิยม (ทอง = 0.01)

input int    TakeProfit  = 500;

input int    Slippage    = 20;

input ulong  MagicNumber = 20251005;

input int    StartHour   = 19;         // ชั่วโมงเริ่มเทรด (Server time)

input int    EndHour     = 23;         // ชั่วโมงหยุดเทรด


//--- Global Variables

datetime lastTradeBarTime = 0;


//+------------------------------------------------------------------+

//| Expert Tick Function                                             |

//+------------------------------------------------------------------+

void OnTick()

{

    // ตรวจสอบว่า Symbol นี้คือทองคำ

    if(StringFind(_Symbol, "XAU") < 0) return;


    // ตรวจสอบว่าอยู่ในช่วงเวลาที่กำหนด

    datetime now = TimeCurrent();

    int currentHour = TimeHour(now);

    if(currentHour < StartHour || currentHour >= EndHour) return;


    // ตรวจสอบว่าไม่มี Position ค้างอยู่

    if(PositionSelect(_Symbol)) return;


    // ตรวจสอบว่าไม่ส่งคำสั่งซ้ำในแท่งเทียนเดียวกัน

    datetime currentBarTime[1];

    if(CopyTime(_Symbol, _Period, 0, 1, currentBarTime) < 1)

        return;

    if(currentBarTime[0] == lastTradeBarTime)

        return;


    // ดึงค่า High / Low ของแท่งก่อนหน้า

    double highPrev[1], lowPrev[1];

    if(CopyHigh(_Symbol, _Period, 1, 1, highPrev) < 1 ||

       CopyLow(_Symbol, _Period, 1, 1, lowPrev) < 1)

        return;


    double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

    double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);


    // Breakout Buy

    if(ask > highPrev[0])

    {

        if(OpenOrder(ORDER_TYPE_BUY))

            lastTradeBarTime = currentBarTime[0];

    }

    // Breakout Sell

    else if(bid < lowPrev[0])

    {

        if(OpenOrder(ORDER_TYPE_SELL))

            lastTradeBarTime = currentBarTime[0];

    }

}


//+------------------------------------------------------------------+

//| Function to Open Buy/Sell Orders                                |

//+------------------------------------------------------------------+

bool OpenOrder(int order_type)

{

    double price = (order_type == ORDER_TYPE_BUY)

                 ? SymbolInfoDouble(_Symbol, SYMBOL_ASK)

                 : SymbolInfoDouble(_Symbol, SYMBOL_BID);


    double sl = (order_type == ORDER_TYPE_BUY)

              ? price - StopLoss * _Point

              : price + StopLoss * _Point;


    double tp = (order_type == ORDER_TYPE_BUY)

              ? price + TakeProfit * _Point

              : price - TakeProfit * _Point;


    MqlTradeRequest request = {};

    MqlTradeResult  result  = {};


    request.action        = TRADE_ACTION_DEAL;

    request.symbol        = _Symbol;

    request.volume        = LotSize;

    request.type          = (ENUM_ORDER_TYPE)order_type;

    request.price         = NormalizeDouble(price, _Digits);

    request.sl            = NormalizeDouble(sl, _Digits);

    request.tp            = NormalizeDouble(tp, _Digits);

    request.deviation     = Slippage;

    request.magic         = MagicNumber;

    request.type_filling  = ORDER_FILLING_FOK;

    request.comment       = "Gold Breakout EA";


    if(!OrderSend(request, result))

    {

        Print("❌ ส่งคำสั่งล้มเหลว: ", GetLastError());

        return false;

    }


    if(result.retcode != TRADE_RETCODE_DONE)

    {

        Print("❌ คำสั่งถูกส่ง แต่ไม่สำเร็จ: ", result.retcode);

        return false;

    }


    Print("✅ คำสั่งสำเร็จ: ", (order_type == ORDER_TYPE_BUY ? "BUY" : "SELL"));

    return true;

}


แชร์โพสต์นี้
แท็ก
คลังเก็บเอกสารสำคัญ
โค้ด EA