MQL5中的自动化交易策略(第七部分):构建具备仓位动态调整功能的网格交易EA(基础篇)
「网格EA里的动态仓位该怎么调」
在 MT5 里写网格策略,最容易被忽略的是仓位随净值浮动这件事。固定手数网格遇到单边行情,浮亏会按层数线性放大,账户回撤速度远超多数人预期。 原文给出的第七部分示例里,每加一层网格不是吃固定 0.01,而是按当前权益的 0.5% 风险预算倒推手数,这样净值回撤时新单层风险自动缩水。 外汇与贵金属杠杆高,网格在极端跳空下可能触发连环止损,实盘前务必用 MT5 策略测试器跑至少 2020 年以来的多品种历史数据验证。 下面是核心的仓位计算片段,手数随权益走而不是写死:
class="type">class="kw">double CalculateLot(class="type">class="kw">double riskPercent, class="type">class="kw">double stopLossPoints) { class="type">class="kw">double balance = AccountInfoDouble(ACCOUNT_EQUITY); class="type">class="kw">double riskMoney = balance * riskPercent / class="num">100.0; class="type">class="kw">double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE); class="type">class="kw">double lot = riskMoney / (stopLossPoints * tickValue); class="kw">return NormalizeDouble(lot, class="num">2); }
从订单块到网格:本篇要落地的东西
上篇我们用 MQL5 搭了一套自动识别订单块的模块,这一篇把重心移到网格交易:以固定价格间隔挂单,再叠加动态仓位缩放来调风险回报。 动态缩放的核心不是每格都下同样手数,而是按市况把仓位大小拉开梯度,让单边延伸时亏损暴露可控、回归时回血更快。外汇和贵金属杠杆高,网格在剧烈单边里可能快速放大浮亏,实盘前必须用 MT5 策略测试器跑一遍。 本篇会依次给到策略具体实现、MQL5 代码、回测结果,读完你应能拼出一个带动态缩放的网格 EA 骨架,直接丢进 MT5 测。
◍ 网格系统的五个构件怎么落进EA
网格交易本质是在预设价格间隔上挂买卖单,靠区间来回波动吃饭,不要求你提前猜准趋势方向。原文给出的实现框架把这套逻辑拆成五块:网格间距、入场执行、动态仓位、交易管理、退出逻辑。 网格结构先定单子之间的价格距离;入场规则用移动平均线加固定间距触发开仓,而不是随机撒网。动态仓位缩放会按账户余额、波动率或前几笔结果改手数,这是和普通马丁最不同的地方。 交易管理要接止损、止盈和可选保本;退出逻辑则基于盈利目标、风险上限或趋势反转平仓。把这五块写进一个EA,就能在MT5里跑出可验证的网格行为。外汇和贵金属杠杆高,网格在单边行情里浮亏扩张很快,实盘前务必用策略测试器看最大回撤。
「MT5里把网格策略跑起来的代码骨架」
打开 MetaEditor,在导航器里定位“指标”文件夹点新建,生成文件后先铺全局变量。用 #include 挂上 Trade/Trade.mqh 并实例化 obj_Trade 处理下单;定义 ClosureMode 枚举区分两种平仓逻辑,用户输入留了 closureMode 与 breakevenPoints,再声明止盈、初始手数、网格间距、动态缩放变量及均线数据数组。 函数原型先列清楚:CheckAndCloseProfitTargets 盯总盈利平仓,ExecuteInitialTrade 开首单,ManageGridPositions 按网格补单,UpdateMovingAverage 刷指标,IsNewBar 防同根 K 线重复交易,CalculateWeightedBreakevenPrice 算加权成本,CheckBreakevenClose 做保本退出,CloseAllPositions 清场。 OnInit 里用 iMA 建周期 21、SMA、收盘价均线;句柄若等于 INVALID_HANDLE 就打印错误并返回 INIT_FAILED,否则 ArraySetAsSeries(maData) 排好序回 INIT_SUCCEEDED。OnTick 首行调 IsNewBar,新 K 线才把 isTradeAllowed 置 true,再刷均线值。 无持仓时 PositionsTotal 为 0,LotSize 重置回 initialLotsize;用 iLow/iHigh 抓前两根 K 线高低点,SymbolInfoDouble 取 ask/bid 并 NormalizeDouble。允许交易且空仓就调 ExecuteInitialTrade:前一根低高于 maData 且再前一根低低于它则买,gridSize 落 ask 下方、TP 加 takeProfitPts;反向则卖,gridSize 落 bid 上方、TP 减点。 有仓后每 tick 调 ManageGridPositions,逆序遍历持仓,BUY 仓且 ask 触及/破 gridSize 就手数翻倍再买一单、gridSize 下移;SELL 仓对称处理。closureMode 为 CLOSE_BY_PROFIT 时累计 profitTotal_inCurrency 达标就 CloseAllPositions;为 CLOSE_BY_POINTS 时算加权保本价,BUY 看 bid≥加权价+breakevenPoints、SELL 看 ask≤加权价-breakevenPoints 才全平。 外汇与贵金属网格加仓属高风险玩法,翻倍手数在单边行情中可能快速放大浮亏,上述逻辑仅能在 MT5 策略测试器验证,实盘前务必用历史数据回测。代码头部声明见下,版权与版本信息原样保留便于你直接贴进 MetaEditor 对照。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Copyright class="num">2025, Forex Algo-Trader, Allan. | class=class="str">"cmt">//| "https://t.me/Forex_Algo_Trader" | class=class="str">"cmt">//+------------------------------------------------------------------+ class="macro">#class="kw">property copyright "Forex Algo-Trader, Allan" class="macro">#class="kw">property link "https:class=class="str">"cmt">//t.me/Forex_Algo_Trader" class="macro">#class="kw">property version "class="num">1.00" class="macro">#class="kw">property description "This EA trades based on Grid Strategy" class="macro">#class="kw">property strict