马丁格尔网格加仓EA
支持多空分离、20档可调间距加仓、手数倍增、两种平仓模式、共用止损
MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子
#property copyright "XAUUSD EA Workshop"
#property version "1.02"
#property description "马丁格尔网格EA - 先开仓后修改止损,规避Invalid stops错误"
#include <Trade\Trade.mqh>
CTrade trade;
// ========== 入场参数 ==========
input double InitialLots = 0.1; // 初始手数(第1笔)
input double LotMultiplier = 2.0; // 手数倍数系数(每笔翻倍倍数,如2表示翻倍)
input int MaxPositions = 5; // 最多加仓笔数(1-20)
input int StopLoss = 500; // 止损点数(所有头寸共用)
// ========== 加仓间距参数(单位:点,逗号分隔,最多20个) ==========
input string GridDistances = "100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000";
// ========== 平仓参数 ==========
input int CloseProfitMode = 0; // 平仓模式:0=模式A(全部盈利后全平),1=模式B(按间距逐笔平)
input int CloseProfitPoints = 100; // 平仓目标点数
// ========== 交易控制 ==========
input bool TradeOnlyBuy = true; // 启用多头
input bool TradeOnlySell = true; // 启用空头
input int MagicNumber = 20240101; // 魔幻数
input bool EnableDebugLog = true; // 启用调试日志
// ========== 全局变量 ==========
int gridDistances[20];
int gridCount = 0;
int maxPositionsActual = 5;
int barIndex = 0;
//+------------------------------------------------------------------+
//| 字符串分割函数 |
已显示前 35 行,共 405 行。完整源码仅对 xauusd.team VIP 开放查看与复制。
开通 VIP 查看完整源码作品说明
我明白了 — 那段代码片段我是作为说明写的,不是完整代码。编译器把它当成了真实代码。
问题根源:止损设置无效。我重写完整的 EA,采用先开仓、后修改止损的方式,规避 Invalid stops 错误:
使用说明
- 编译并挂图表:复制为
Martin_EA.mq5,放入MT5\Experts,MetaEditor 编译通过后挂图表。
- 止损修复:代码改为先开仓(不设止损)→ 然后立即用
PositionModify修改止损,规避 Invalid stops 错误。
- 参数配置:
GridDistances:加仓间距,如"100,200,300,400,500"InitialLots:首单手数,如 0.1MaxPositions:最多加仓笔数,如 5StopLoss:止损点数,如 500
- 查看日志:启用
EnableDebugLog=true,在 MT5「日志」窗口查看开仓是否成功。
- 平仓模式:0=全部盈利后全平,1=逐笔盈利后平。
- 多空独立:
TradeOnlyBuy和TradeOnlySell可分别启用。
✅ 自动修复后已通过服务器编译校验(共修 1 轮)。
AI 解读根据源码逐行分析写成,供参考,以实际运行为准
这是什么
这是一个马丁格尔网格加仓EA。它在你设定的价格间距处自动加仓,每加一笔头寸就按倍数增加手数,所有头寸共用一个止损点数。适合有时间盯盘或想体验网格策略的交易者,但要明白它的风险。
逻辑原理
开仓逻辑:
- 多头:第1笔按 Ask 价开入 InitialLots 手,之后每次价格下跌达到对应间距就加仓一笔
- 空头:第1笔按 Bid 价开入 InitialLots 手,之后每次价格上涨达到对应间距就加仓一笔
- 手数计算:第 n 笔 = InitialLots × LotMultiplier^(n-1),例如初始0.1、倍数2,则依次 0.1、0.2、0.4、0.8…
加仓间距:最多20档,单位为点,逗号分隔。例如默认 "100,200,300…" 表示首单和第2笔相隔100点,第2笔和第3笔相隔200点,以此类推。每档之间累加,不是平均间距。
止损:所有多头头寸共用一个止损点数(StopLoss),所有空头也共用一个。止损在开仓后立即用 PositionModify 修改,多头止损在开价下方 StopLoss 点,空头在开价上方 StopLoss 点。
平仓模式A(CloseProfitMode=0):等所有头寸总盈利达到 CloseProfitPoints 点以上,才一次性全平。
平仓模式B(CloseProfitMode=1):逐笔判断,每笔头寸只要盈利达到 CloseProfitPoints 点,就立即平掉,不等其他头寸。
多空分离:TradeOnlyBuy 和 TradeOnlySell 可分别打开或关闭,互不干扰。
参数说明
- InitialLots(0.1):第1笔的手数,后续加仓手数会自动乘以倍数
- LotMultiplier(2.0):每笔加仓的手数倍数;设为2表示翻倍,设为1.5表示每笔增加50%
- MaxPositions(5):最多加仓多少笔;超过这个数就不再加仓,即使价格继续走反
- StopLoss(500):止损点数,对所有头寸统一应用
- GridDistances("100,200,300…"):加仓间距字符串,最多20档,单位点;需按逗号分隔、可含空格
- CloseProfitMode(0):平仓模式,0=全部盈利后全平,1=按笔逐个达标后逐笔平
- CloseProfitPoints(100):平仓目标点数
- TradeOnlyBuy(true):启用多头交易
- TradeOnlySell(true):启用空头交易
- MagicNumber(20240101):魔幻数,用来识别本EA开的单;改这个可以和其他EA共存
- EnableDebugLog(true):启用日志输出,方便看开仓、加仓、平仓的过程
怎么用
- 复制源码:保存为
Martin_EA.mq5,放入 MT5 的 Experts 文件夹 - 编译:在 MetaEditor 打开,按 F7 或点编译,确保无报错
- 挂图表:在任意货币对、任意周期的图表上,右键 → 专家顾问 → 选这个EA
- 参数调整:在弹出的参数窗口里改 GridDistances、InitialLots、StopLoss 等,然后确定
- 监控日志:打开 MT5 的 日志 / 专家 标签页,看开仓、加仓、平仓的记录
- 测试:先用模拟账户或小手数试一段时间,确认逻辑符合预期再加大
适用场景
适合:
- 震荡行情,价格在一定范围内来回波动时最稳定
- 有时间看盘的交易者,或配合 MT5 的远程执行功能
- 想体验网格策略但不想手工加仓的人
- 风险承受能力强的账户,因为加仓到后期手数会很大
不适合:
- 单边强势行情,特别是不利方向猛冲的时候,会快速加仓直到触发止损或撑爆账户
- 低流动性品种,加仓时可能滑点严重
- 账户资金不足,手数倍增到后面会占用大量保证金
风险提示
- 马丁格尔的本质风险:越往下加仓,亏损越深。如果行情单边运动,止损被击中时账户可能大幅回撤,甚至爆仓。没有绝对「兜底」的机制。
- 手数倍增爆炸:假设初始0.1、倍数2、20档,到第20笔手数将是 0.1 × 2^19 ≈ 52428.8 手,保证金和亏损会巨大。务必根据账户余额和风险承受度严格限制 MaxPositions。
- 止损可能延迟:如果价格瞬间跳空越过止损价,实际止损点数会超过设定值;高波动时段要特别小心。
- 平仓模式的坑:模式A 要等所有头寸一起赚,可能要等很久;模式B 可能分散平仓,留下的尾单还要继续扛止损。
- 重绘风险低:因为开仓逻辑只在新 K 线才触发(barIndex 判断),但平仓逻辑每个 Tick 都检查一遍,如果平仓边界恰好在 K 线末尾可能看起来有疑似重绘的感觉。
- 服务器卡顿:加仓和平仓都需要下单,网络延迟、服务器繁忙或滑点可能导致实际成交价与预期偏离。
FAQ
[{"q":"这个EA会不会重绘","a":"开仓逻辑只在新K线触发,不会重绘。但平仓逻辑每个Tick检查,如果平仓价在K线末尾可能看起来像重绘,实际是正常的。"},{"q":"可以用在XAUUSD以外的品种吗","a":"可以。代码里没有限制品种,只要是MT5支持的任何货币对、贵金属、大宗商品都行。但不同品种的点值、点差、波动性不同,需要自己调参数。"},{"q":"GridDistances最多能设多少档","a":"代码里最多20档。超过20个数字会被截断。"},{"q":"参数默认值适合什么周期","a":"代码里没有周期限制,任何周期都能挂。但不同周期下行情特征不同,需自行测试。通常周期越小波动越频繁,容易快速加仓;周期越大需要等待时间越长。"},{"q":"如果止损被击中,剩下的头寸怎么办","a":"所有头寸共用一个止损点数,所以会全部一起被止损平掉。这是这个EA的设计,无法改变。"}]
MT5 Martingale Grid Scaling EA with 20-Level Adjustable Spacing
An automated EA for MetaTrader 5 that implements grid-based position scaling with configurable spacing, lot multiplier, and shared stop loss. Supports independent buy/sell modes and two close strategies: all-at-once or individual profit targets.
A short source preview is shown above for visitors; full source, copy and compiled EX5 files are available to VIP members.
评论
还没有人评论,来抢个沙发。