//+------------------------------------------------------------------+
//| 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;
}