網格交易 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 撰寫。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *