網格交易 EA(Grid Trading)完整原理與 MQL5 實作
📌 本文重點:網格交易策略原理、MQL5 網格 EA 實作(含掛單管理)、風險控制要點。
什麼是網格交易?
網格交易在當前價格上下等距設置多個限價掛單,讓市場震盪時自動獲利。不需預測方向,只需市場有足夠波動。適合:橫盤震盪市場。風險:強趨勢市場可能持續虧損。
基礎網格 EA
input double InpLotSize = 0.01; // 每格手數
input int InpGridStep = 50; // 網格間距(點數)
input int InpGridLevels = 5; // 上下各幾格
input double InpTP = 50; // 每格止盈(點數)
input int InpMagic = 99999;
bool g_initialized = false;
int OnInit() { return INIT_SUCCEEDED; }
void OnTick()
{
if (!g_initialized)
{
BuildGrid();
g_initialized = true;
}
}
void BuildGrid()
{
double basePrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double pt = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double step = InpGridStep * pt;
double tp = InpTP * pt;
for (int i = 1; i <= InpGridLevels; i++)
{
// 買入掛單(低於現價)
double buyPx = basePrice - i * step;
PlacePending(ORDER_TYPE_BUY_LIMIT, buyPx, buyPx + tp);
// 賣出掛單(高於現價)
double sellPx = basePrice + i * step;
PlacePending(ORDER_TYPE_SELL_LIMIT, sellPx, sellPx - tp);
}
}
bool PlacePending(ENUM_ORDER_TYPE type, double price, double tp)
{
MqlTradeRequest req = {};
MqlTradeResult res = {};
req.action = TRADE_ACTION_PENDING;
req.symbol = _Symbol;
req.volume = InpLotSize;
req.type = type;
req.price = NormalizeDouble(price, _Digits);
req.tp = NormalizeDouble(tp, _Digits);
req.magic = InpMagic;
return OrderSend(req, res);
}
風險管理要點
⚠️ 重要:網格交易在強趨勢市場中風險極高。務必設定最大持倉限制,並使用小手數測試。
- 設定最大同時持倉數量
- 總浮虧超過帳戶X%時停止新倉
- 避開重大新聞公布時段
- 結合趨勢指標過濾
進階版本請參考:MQL5 網格交易 EA 完整實作
本文由 James Lee 撰寫。