MT5指标编译通过 · EX5 36KB 80 0

黄金布林带马丁格尔EA·突破回归版

litongxue·1 个月前发布

价格突破布林带上下轨时反向开仓,期待回归,1倍ATR移动止损,亏损递增回本重置

黄金布林带马丁格尔EA·突破回归版

MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子

XAUUSD_Bollinger_Martingale_v2.mq5预览 35 / 430 行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#property copyright "XAUOF 指标工坊"
#property version   "2.00"
#property strict

#include <Trade\Trade.mqh>

// ==================== 输入参数 ====================

input int    InpBollPeriod       = 20;      // 布林带周期(推荐20)

input double InpBollDeviation    = 2.0;     // 布林带标准差倍数(推荐2.0)

input int    InpAtrPeriod        = 14;      // ATR周期,用于移动止损(推荐14)

input double InpAtrMultiplier    = 1.0;     // ATR倍数,止损距离=ATR*倍数(推荐1.0)

input double InpBaseLot          = 0.01;    // 初始开仓手数(推荐0.01)

input double InpLotStep          = 0.01;    // 每次亏损后增加的手数(推荐0.01)

input int    InpMaxPositions     = 1;       // 最大同时持仓单数(推荐1,保守策略)

input double InpTakeProfitPoints = 3500;    // 固定止盈点数(推荐3500点=35美元,0表示禁用)

input ulong  InpMagicNumber      = 20241001;// EA魔术编号,区分不同EA订单


// ==================== 全局变量 ====================

CTrade         trade;            // MT5标准交易类对象

int            bollHandle;       // 布林带指标句柄

int            atrHandle;        // ATR指标句柄

double         g_totalLoss;      // 记录连续亏损的总金额(正数),用于判断是否回本

int            g_lossCount;      // 连续亏损次数,用于计算当前手数


//+------------------------------------------------------------------+

//| EA初始化函数,启动时执行一次                                        |

//+------------------------------------------------------------------+

int OnInit()
{
   // 第一步:创建指标句柄(MQL5中iBands返回的是句柄而不是数值)

   // 使用 PERIOD_CURRENT 让EA自动适配所挂载的图表周期

   bollHandle = iBands(_Symbol, PERIOD_CURRENT, InpBollPeriod, 0, InpBollDeviation, PRICE_CLOSE);
   atrHandle = iATR(_Symbol, PERIOD_CURRENT, InpAtrPeriod);

   // 验证句柄是否创建成功

已显示前 35 行,共 430 行。完整源码仅对 xauusd.team VIP 开放查看与复制。

开通 VIP 查看完整源码
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
黄金布林带马丁格尔EA·突破回归版 在 MT5 上的真实截图

作品说明

使用说明

1. 怎么安装

  • 打开 MetaTrader 5,点击菜单栏「文件」->「打开数据文件夹」。
  • 进入 MQL5\Experts\ 目录,新建文本文件,将上方代码完整粘贴进去,保存并重命名为 XAUUSD_Bollinger_Martingale_v2.mq5。
  • 回到 MT5,在「导航器」面板右键点击「智能交易系统(EA)」选择「刷新」,双击该 EA 即可加载。

2. 参数怎么调

  • 标的与周期:请将图表切换到 XAUUSD(黄金)。支持任何周期(M5、M15、H1等)。
  • 布林带参数:默认周期20,标准差2.0(经典设置)。
  • ATR参数:默认周期14,倍数1.0。止损距离 = 1倍ATR。
  • 固定止盈点数:默认3500点(=35美元)。设为0可禁用固定止盈,只保留移动止损和回本止盈。
  • 最大持仓:默认1单,保守策略。
  • 初始手数 / 递增量:默认均为0.01。

3. 止盈策略(本次修改核心 - 三层止盈机制)

现在EA有三种止盈方式,优先级从高到低:

第一优先级:固定止盈(新增)

  • 每个Tick检查持仓盈利是否达到3500点(35美元)
  • 多单:当前价 - 开仓价 ≥ 3500点,立即平仓
  • 空单:开仓价 - 当前价 ≥ 3500点,立即平仓
  • 优点:确保盈利能及时兑现,不会因为行情反转而回吐利润
  • 可调整:修改参数 InpTakeProfitPoints 可自定义止盈点数(如改为5000点=50美元)

第二优先级:移动止损

  • 持仓后,止损会跟随价格移动,始终保持1倍ATR的距离
  • 当价格回撤超过1倍ATR时触发止损
  • 优点:在固定止盈未达到时,可以保护浮盈

第三优先级:回本止盈(马丁格尔机制)

  • 如果之前有累计亏损,当前所有持仓的总浮盈 ≥ 累计亏损时,立即全部平仓
  • 优点:即使单笔盈利不大,只要能覆盖之前亏损就止盈

举例完整流程: ``` 第1单:0.01手突破下轨做多

  • 浮盈达到35美元(3500点) → 固定止盈触发,平仓
  • 累计盈利35美元,马丁格尔状态重置

第2单:0.01手突破上轨做空

  • 浮盈20美元(未达到35美元)
  • 价格反弹,回撤超过1倍ATR → 移动止损触发,平仓盈利20美元
  • 累计盈利55美元,马丁格尔状态保持重置

第3单:0.01手突破下轨做多

  • 浮盈10美元,价格回撤 → 移动止损触发,亏损5美元
  • 累计亏损5美元,下次手数变为0.02手

第4单:0.02手突破上轨做空

```

  • 浮盈7美元(所有持仓总浮盈7美元 > 累计亏损5美元)
  • 回本止盈触发,平仓
  • 累计盈利2美元(7-5),马丁格尔状态重置

4. 注意事项

  • 3500点的含义:在黄金(XAUUSD)中,1点 = 0.01美元(0.01手),所以3500点 = 35美元的浮盈(基于0.01手)。如果开仓手数是0.02手,则3500点 = 70美元。
  • 固定止盈 vs 移动止损:固定止盈优先触发。如果行情直接走出35美元盈利,会在达到35美元时立即平仓,不会等移动止损。
  • 禁用固定止盈:如果想只保留移动止损和回本止盈,可以把参数 InpTakeProfitPoints 设为0。
  • 均值回归策略:这是典型的逆势交易,适合震荡行情。在单边趋势行情中可能连续止损,务必控制仓位。
  • 回测建议:强烈建议先在 MT5「策略测试器」中使用"每个Tick基于真实Tick"模式回测至少 1 年的 XAUUSD 数据,观察固定止盈对盈亏比的影响。
  • 必须允许自动交易:挂载 EA 后,请确保 MT5 顶部工具栏的「算法交易」按钮处于按下(启用)状态。

AI 解读根据源码逐行分析写成,供参考,以实际运行为准

这是什么

这是一个给 MT5 用的自动交易 EA,专门盯着布林带的突破信号做反向单。逻辑是:价格突破布林带上轨时它判断超买,开空单等回落;突破下轨时判断超卖,开多单等反弹。止损用 1 倍 ATR 跟着价格走,止盈有三层:固定 3500 点、移动止损触发、或者总浮盈覆盖之前亏损。如果止损了,下次开仓手数会递增(马丁格尔),直到盈利后重置。

逻辑原理

入场信号:每个 Tick 检查已完成的 K 线,如果前一根收盘价突破布林带上轨(且再前一根没突破),就在当前价做空;突破下轨就做多。这里用的是反向逻辑,赌价格会回到布林带中轨附近。

开仓止损:开仓时立即设置固定止损,距离是开仓价加减 1 倍 ATR。比如做多,止损 = 开仓价 - ATR × 1.0 × 点值;做空反过来。

三层止盈:

  1. 固定止盈(优先级最高):每个 Tick 检查持仓盈利点数,多单达到 bid - 开仓价 ≥ 3500 点就平,空单达到 开仓价 - ask ≥ 3500 点就平。对 0.01 手来说 3500 点约等于 35 美元浮盈。
  2. 移动止损:持仓后止损会跟着价格走,始终保持 1 倍 ATR 的距离。多单止损只能往上抬(bid - ATR),空单止损只能往下降(ask + ATR)。价格回撤超过 ATR 时触发止损出场。
  3. 回本止盈:如果之前有累计亏损(g_totalLoss > 0),EA 会持续计算所有持仓的总净盈亏(包括隔夜利息和手续费)。一旦总浮盈 ≥ 累计亏损,立即全部平仓,马丁格尔状态重置。

马丁格尔机制:每次平仓后,OnTradeTransaction 函数会判断这单是盈是亏。亏损就把金额累加到 g_totalLoss,亏损次数 +1,下次开仓手数变成 初始手数 + 亏损次数 × 手数步长(默认 0.01 + 次数 × 0.01)。盈利或回本后,累计亏损和次数清零,重新从 0.01 手开始。

持仓限制:参数 InpMaxPositions 默认是 1,也就是同一时间最多只有 1 个持仓,不会同时持有多空或多个同向单。

参数说明

  • InpBollPeriod(默认 20):布林带的周期,标准设置是 20 根 K 线。周期越大布林带越平滑,突破信号越少。
  • InpBollDeviation(默认 2.0):布林带的标准差倍数,决定上下轨的宽度。2.0 是经典设置,改小会增加信号频率但假突破也多。
  • InpAtrPeriod(默认 14):ATR 指标的周期,用来计算止损距离。14 是常见选择。
  • InpAtrMultiplier(默认 1.0):ATR 的倍数,止损距离 = ATR × 这个倍数。改成 1.5 止损会更宽松,改成 0.8 会更紧。
  • InpBaseLot(默认 0.01):第一单的开仓手数。0.01 手是最小手数,适合小资金测试。
  • InpLotStep(默认 0.01):每次亏损后增加的手数。如果连亏 3 次,第四单手数是 0.01 + 3 × 0.01 = 0.04 手。
  • InpMaxPositions(默认 1):最多同时持有几个仓位。默认 1 是保守策略,改成 2 或 3 可以在震荡中多次进场,但风险也成倍增加。
  • InpTakeProfitPoints(默认 3500):固定止盈的点数。黄金 1 点 = 0.01 美元(0.01 手),3500 点对应 35 美元浮盈。设为 0 可以禁用固定止盈,只保留移动止损和回本止盈。
  • InpMagicNumber(默认 20241001):魔术编号,用来区分不同 EA 的订单,一般不用改。

怎么用

  1. 打开 MT5,按 F4 或菜单「文件 → 打开数据文件夹」,进入 MQL5\Experts\ 目录,新建文本文件粘贴源码,保存为 .mq5 文件(比如 BollingerMartingale.mq5)。
  2. 回到 MT5,在导航器窗口右键「智能交易系统」选择「刷新」,就能看到这个 EA。
  3. 打开黄金(XAUUSD)图表,任意周期都行(M5、M15、H1 等),把 EA 拖到图表上。
  4. 弹出参数窗口,可以按需调整上面那些参数,然后勾选「允许自动交易」,点确定。
  5. 图表右上角会显示 EA 名称和一个笑脸图标,说明 EA 已启动。之后它会自动监控布林带突破并开仓。
  6. 信号在图上看不到,EA 是在后台计算的。可以打开「工具箱 → 交易」标签页查看持仓和历史订单。

适用场景

适合:震荡行情,价格在一个区间内反复波动,突破布林带后大概率回归。黄金(XAUUSD)在没有重大消息时经常出现这种走势。任何周期都能用,但 M15 或 H1 信号质量相对稳定,M5 信号多但噪音也多。

不适合:单边趋势行情。如果黄金开启强势上涨或下跌,价格突破布林带后会继续走,反向开仓会一直被止损,马丁格尔加仓会让亏损快速放大。重大新闻(比如非农、美联储决议)发布时也不建议用,波动太大容易连续触发止损。

品种方面,代码里没有硬性限制必须是黄金,理论上其他品种也能用,但参数(尤其是 3500 点止盈)是按黄金波动特性设计的,换品种需要重新测试和调整。

风险提示

马丁格尔风险:这是最大的坑。连续亏损后手数会递增,虽然参数限制了最大持仓数为 1(不会同时持有多个加仓单),但每次开仓的手数本身在增大。如果遇到持续单边行情,亏损 → 加仓 → 再亏损的循环会让账户权益快速缩水。小资金账户可能扛不过 5-6 次连亏。

反向交易逻辑:突破布林带做反向本质是在接飞刀,赌价格会回头。如果趋势延续,你会一直站在市场对面。这个策略在震荡市能赚小钱,但一次趋势行情可能吃掉之前所有利润。

固定止盈过小:3500 点(35 美元)对黄金来说不算大,波动稍微大一点就能达到。好处是容易止盈,坏处是可能截断盈利——价格本来能走得更远,但你在 35 美元就出场了。

移动止损被扫:1 倍 ATR 的止损距离在震荡中可能偏紧,价格小幅回撤就会触发止损,然后又继续朝你预期的方向走。这会导致频繁止损,手续费和滑点累积起来也是成本。

回测与实盘差异:代码里用的是 ORDER_FILLING_IOC(立即全部成交或取消),在流动性差或滑点大的时候可能拒单。实盘中的隔夜利息(swap)、点差波动、服务器延迟都会影响实际表现,回测数据只能参考,不能当真。

没有时间和波动率过滤:EA 不分时段和行情状态,只要有布林带突破信号就开仓。重大新闻期间或者周一开盘、周五收盘这种特殊时段,信号可靠性会下降。

常见问题

这个 EA 会重绘吗?
不会。代码里用的是已完成的 K 线(索引 1 和 2)来判断突破,不是当前未完成的 K 线,所以信号确认后不会消失。
可以用在黄金以外的品种吗?
代码没有硬性限制品种,但 3500 点的固定止盈是按黄金波动设计的。换成欧美、镑美等品种需要重新调整参数,并且要自己测试效果。
MT4 能用吗?
不能。这是 MQL5 代码,只能在 MetaTrader 5 上运行。MT4 用的是 MQL4 语言,语法和函数库都不一样。
参数默认值适合什么周期?
代码用的 PERIOD_CURRENT 会自动适配你挂载的图表周期。布林带周期 20、标准差 2.0 是经典参数,M15 和 H1 周期信号相对稳定,M5 信号多但假突破也多,需要根据实际回测调整。
马丁格尔最多会加仓到多少手?
代码里没有设置手数上限,只受限于你账户的保证金和品种的最大手数(SYMBOL_VOLUME_MAX)。如果初始 0.01 手、步长 0.01,连亏 10 次后下一单是 0.11 手,连亏 20 次是 0.21 手。建议自己设置一个心理止损线,连亏超过几次就手动停掉 EA。

Bollinger Bands Martingale Reversal EA for MT5

An MT5 Expert Advisor that opens counter-trend positions when price breaks Bollinger Bands (sell on upper break, buy on lower break), expecting mean reversion. Features 1x ATR trailing stop, fixed 3500-point take profit, and martingale lot increase after losses. Designed for range-bound gold (XAUUSD) markets.

A short source preview is shown above for visitors; full source, copy and compiled EX5 files are available to VIP members.

评论

后可以留言,比如反馈用着怎么样、想加什么功能。

还没有人评论,来抢个沙发。