MT5指标编译通过 · EX5 33KB 自动发布 38 0

多周期布林带突破马丁策略EA

litongxue·8 天前发布

H4/H1/M30/M15 共振 + M5 突破布林中轨开仓,布林带动态止损 + 固定止盈,马丁加仓

多周期布林带突破马丁策略EA

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

MultiTimeframeBollingerMartingale_EA.mq5260 行
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
#property copyright "XAUOF指标工坊"
#property version   "1.00"
#property strict

#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//| 可调参数                                                            |
//+------------------------------------------------------------------+
input int      BB_Period       = 20;         // 布林带周期
input double   BB_Deviation    = 2.0;        // 布林带标准差倍数
input int      MagicNumber     = 888888;     // 魔术号(用于识别本EA的订单)
input double   InitialLot      = 0.01;       // 初始手数
input double   MartinStep      = 0.01;       // 每次止损后增加的手数
input int      TakeProfitPoints= 7000;       // 固定止盈点数(对黄金 7000点 = 70美元)
input string   CommentText     = "MultiBB";  // 订单备注

//+------------------------------------------------------------------+
//| 全局变量                                                            |
//+------------------------------------------------------------------+
CTrade trade;

// 各周期布林带句柄
int handle_BB_H4;
int handle_BB_H1;
int handle_BB_M30;
int handle_BB_M15;
int handle_BB_M5;

// 马丁计数器(记录连续止损次数)
int MartinCount = 0;

// 缓冲区数组
double bb_middle_h4[], bb_middle_h1[], bb_middle_m30[], bb_middle_m15[];
double bb_middle_m5[], bb_upper_m5[], bb_lower_m5[];
double close_h4[], close_h1[], close_m30[], close_m15[], close_m5[];

// 上一次检查的K线时间,避免同一根K线重复开仓
datetime LastBarTime = 0;

//+------------------------------------------------------------------+
//| 初始化函数                                                          |
//+------------------------------------------------------------------+
int OnInit()
{
   // 创建各周期布林带指标句柄
   handle_BB_H4  = iBands(_Symbol, PERIOD_H4,  BB_Period, 0, BB_Deviation, PRICE_CLOSE);
   handle_BB_H1  = iBands(_Symbol, PERIOD_H1,  BB_Period, 0, BB_Deviation, PRICE_CLOSE);
   handle_BB_M30 = iBands(_Symbol, PERIOD_M30, BB_Period, 0, BB_Deviation, PRICE_CLOSE);
   handle_BB_M15 = iBands(_Symbol, PERIOD_M15, BB_Period, 0, BB_Deviation, PRICE_CLOSE);
   handle_BB_M5  = iBands(_Symbol, PERIOD_M5,  BB_Period, 0, BB_Deviation, PRICE_CLOSE);
   
   // 检查句柄是否有效
   if(handle_BB_H4 == INVALID_HANDLE || handle_BB_H1 == INVALID_HANDLE || 
      handle_BB_M30 == INVALID_HANDLE || handle_BB_M15 == INVALID_HANDLE || 
      handle_BB_M5 == INVALID_HANDLE)
   {
      Print("布林带指标创建失败!");
      return INIT_FAILED;
   }
   
   // 设置魔术号和订单备注
   trade.SetExpertMagicNumber(MagicNumber);
   
   // 从全局变量加载马丁计数(重启EA后保持连续性)
   if(GlobalVariableCheck("MultiBB_MartinCount"))
      MartinCount = (int)GlobalVariableGet("MultiBB_MartinCount");
   else
      MartinCount = 0;
   
   Print("多周期布林带马丁EA初始化成功,当前马丁计数: ", MartinCount);
   
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 清理函数                                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 释放指标句柄
   IndicatorRelease(handle_BB_H4);
   IndicatorRelease(handle_BB_H1);
   IndicatorRelease(handle_BB_M30);
   IndicatorRelease(handle_BB_M15);
   IndicatorRelease(handle_BB_M5);
   
   // 保存马丁计数到全局变量
   GlobalVariableSet("MultiBB_MartinCount", MartinCount);
   
   Print("EA已卸载,马丁计数已保存: ", MartinCount);
}

//+------------------------------------------------------------------+
//| 主循环函数                                                          |
//+------------------------------------------------------------------+
void OnTick()
{
   // 检查数据是否准备好
   if(BarsCalculated(handle_BB_H4) < 2 || BarsCalculated(handle_BB_H1) < 2 ||
      BarsCalculated(handle_BB_M30) < 2 || BarsCalculated(handle_BB_M15) < 2 ||
      BarsCalculated(handle_BB_M5) < 2)
      return;
   
   // 先检查已有持仓的止损止盈
   CheckOpenPositions();
   
   // 避免同一根M5 K线重复开仓
   datetime currentBarTime = iTime(_Symbol, PERIOD_M5, 0);
   if(currentBarTime == LastBarTime)
      return;
   
   // 如果已有持仓,不再开新单
   if(PositionSelect(_Symbol))
      return;
   
   // 复制布林带中轨数据(各周期)
   if(CopyBuffer(handle_BB_H4, 0, 0, 3, bb_middle_h4) < 3) return;
   if(CopyBuffer(handle_BB_H1, 0, 0, 3, bb_middle_h1) < 3) return;
   if(CopyBuffer(handle_BB_M30, 0, 0, 3, bb_middle_m30) < 3) return;
   if(CopyBuffer(handle_BB_M15, 0, 0, 3, bb_middle_m15) < 3) return;
   if(CopyBuffer(handle_BB_M5, 0, 0, 3, bb_middle_m5) < 3) return;
   if(CopyBuffer(handle_BB_M5, 1, 0, 3, bb_upper_m5) < 3) return;  // 上轨
   if(CopyBuffer(handle_BB_M5, 2, 0, 3, bb_lower_m5) < 3) return;  // 下轨
   
   // 复制收盘价数据
   if(CopyClose(_Symbol, PERIOD_H4, 0, 3, close_h4) < 3) return;
   if(CopyClose(_Symbol, PERIOD_H1, 0, 3, close_h1) < 3) return;
   if(CopyClose(_Symbol, PERIOD_M30, 0, 3, close_m30) < 3) return;
   if(CopyClose(_Symbol, PERIOD_M15, 0, 3, close_m15) < 3) return;
   if(CopyClose(_Symbol, PERIOD_M5, 0, 3, close_m5) < 3) return;
   
   // 当前值索引:数组默认索引0=最老,最新=2
   int curr = 2;  // 当前K线(最新完成的K线)
   int prev = 1;  // 前一根K线
   
   // 判断大周期是否都在中轨上方(做多)或下方(做空)
   bool bigTF_AboveMiddle = (close_h4[curr] > bb_middle_h4[curr]) &&
                             (close_h1[curr] > bb_middle_h1[curr]) &&
                             (close_m30[curr] > bb_middle_m30[curr]) &&
                             (close_m15[curr] > bb_middle_m15[curr]);
   
   bool bigTF_BelowMiddle = (close_h4[curr] < bb_middle_h4[curr]) &&
                             (close_h1[curr] < bb_middle_h1[curr]) &&
                             (close_m30[curr] < bb_middle_m30[curr]) &&
                             (close_m15[curr] < bb_middle_m15[curr]);
   
   // 判断 M5 是否突破中轨
   bool m5_BreakAbove = (close_m5[prev] <= bb_middle_m5[prev]) && (close_m5[curr] > bb_middle_m5[curr]);
   bool m5_BreakBelow = (close_m5[prev] >= bb_middle_m5[prev]) && (close_m5[curr] < bb_middle_m5[curr]);
   
   // 计算当前马丁手数
   double currentLot = InitialLot + MartinCount * MartinStep;
   currentLot = NormalizeDouble(currentLot, 2);
   
   // 做多信号
   if(bigTF_AboveMiddle && m5_BreakAbove)
   {
      double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      double tp = ask + TakeProfitPoints * _Point;
      
      if(trade.Buy(currentLot, _Symbol, ask, 0, tp, CommentText))
      {
         Print("做多开仓成功,手数: ", currentLot, " 马丁计数: ", MartinCount);
         LastBarTime = currentBarTime;
      }
   }
   
   // 做空信号
   if(bigTF_BelowMiddle && m5_BreakBelow)
   {
      double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      double tp = bid - TakeProfitPoints * _Point;
      
      if(trade.Sell(currentLot, _Symbol, bid, 0, tp, CommentText))
      {
         Print("做空开仓成功,手数: ", currentLot, " 马丁计数: ", MartinCount);
         LastBarTime = currentBarTime;
      }
   }
}

//+------------------------------------------------------------------+
//| 检查持仓并执行动态止损                                                |
//+------------------------------------------------------------------+
void CheckOpenPositions()
{
   if(!PositionSelect(_Symbol))
      return;
   
   // 检查是否是本EA的订单
   if(PositionGetInteger(POSITION_MAGIC) != MagicNumber)
      return;
   
   // 获取持仓信息
   ulong ticket = PositionGetInteger(POSITION_TICKET);
   long posType = PositionGetInteger(POSITION_TYPE);
   double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
   double currentProfit = PositionGetDouble(POSITION_PROFIT);
   
   // 复制 M5 布林带数据
   double bb_upper[], bb_lower[];
   ArraySetAsSeries(bb_upper, true);
   ArraySetAsSeries(bb_lower, true);
   if(CopyBuffer(handle_BB_M5, 1, 0, 3, bb_upper) < 3) return;
   if(CopyBuffer(handle_BB_M5, 2, 0, 3, bb_lower) < 3) return;
   
   double currentBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   double currentAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   
   bool shouldClose = false;
   bool isStopLoss = false;
   
   // 多头持仓:检查是否触及下轨
   if(posType == POSITION_TYPE_BUY)
   {
      // 当前价格触及或跌破 M5 下轨,触发止损
      if(currentBid <= bb_lower[0])
      {
         shouldClose = true;
         isStopLoss = true;
         Print("多头触及布林下轨,执行止损");
      }
   }
   
   // 空头持仓:检查是否触及上轨
   if(posType == POSITION_TYPE_SELL)
   {
      // 当前价格触及或突破 M5 上轨,触发止损
      if(currentAsk >= bb_upper[0])
      {
         shouldClose = true;
         isStopLoss = true;
         Print("空头触及布林上轨,执行止损");
      }
   }
   
   // 执行平仓
   if(shouldClose)
   {
      if(trade.PositionClose(ticket))
      {
         if(isStopLoss)
         {
            MartinCount++;  // 止损后马丁计数+1
            Print("止损平仓成功,马丁计数增加至: ", MartinCount);
         }
         else
         {
            MartinCount = 0;  // 止盈后重置马丁计数
            Print("止盈平仓成功,马丁计数重置为: 0");
         }
         
         // 保存马丁计数
         GlobalVariableSet("MultiBB_MartinCount", MartinCount);
      }
   }
}

//+------------------------------------------------------------------+
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
多周期布林带突破马丁策略EA 在 MT5 上的真实截图

作品说明

好的,我来为您编写这个多周期布林带突破 + 马丁策略的 EA。

核心逻辑识别:

  • 使用 H4、H1、M30、M15、M5 五个周期的布林带
  • 开多条件:大周期(H4/H1/M30/M15)K线都在各自中轨上方,且 M5 收盘价向上突破 M5 中轨
  • 开空条件:大周期K线都在各自中轨下方,且 M5 收盘价向下突破 M5 中轨
  • 止损:M5 触及布林下轨(多)或上轨(空)
  • 止盈:固定 7000 点
  • 马丁:每次止损后手数 +0.01,初始 0.01 手

使用说明

安装步骤:

  1. 将代码保存为 MultiTimeframeBollingerMartingale_EA.mq5
  2. 放入 MT5 数据文件夹的 MQL5\Experts\ 目录
  3. 在 MetaEditor 中编译(F7)
  4. 重启 MT5 或刷新导航器,在"Expert Advisors"中找到该 EA
  5. 拖到黄金(XAUUSD)图表上,勾选"允许算法交易"

参数说明:

  • BB_Period:布林带周期,默认 20,适用于所有时间周期
  • BB_Deviation:布林带标准差倍数,默认 2.0,调大则通道更宽、信号更少
  • MagicNumber:魔术号,用于区分不同 EA 的订单,不要与其他 EA 冲突
  • InitialLot:初始手数 0.01,建议小资金从最小手数开始
  • MartinStep:每次止损后增加的手数,默认 0.01
  • TakeProfitPoints:固定止盈点数 7000(对黄金 = 70 美元),可根据波动调整
  • CommentText:订单备注,方便在历史记录中识别

交易信号:

  • 做多:H4、H1、M30、M15 四个周期收盘价全部在各自布林带中轨上方,且 M5 收盘价向上突破 M5 中轨
  • 做空:四个大周期收盘价全部在各自中轨下方,且 M5 收盘价向下突破 M5 中轨
  • 止损:M5 价格触及布林带下轨(多头)或上轨(空头)时立即平仓
  • 止盈:达到固定 7000 点止盈(由 MT5 自动执行)

重要注意事项:

  1. 马丁风险:连续止损会导致手数快速增加,建议设置最大马丁次数或账户余额警戒线
  2. 滑点影响:布林带止损是动态监测,实际平仓价可能因滑点略有偏差
  3. 资金管理:初始 0.01 手建议账户至少 1000 美元,能承受 5-10 次马丁加仓
  4. 回测验证:上实盘前务必在策略测试器中回测至少 3 个月数据,检查最大回撤和胜率
  5. 多周期共振:该策略要求 4 个大周期同时满足方向条件,信号相对较少但质量较高
  6. VPS 推荐:EA 需要 24 小时运行监测止损,建议使用 VPS 挂机
  7. 马丁计数持久化:EA 使用全局变量保存马丁计数,重启 MT5 后会自动恢复,避免计数丢失

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

这是什么

这是一个 MT5 自动交易程序(EA),通过五个时间周期的布林带指标共振来判断趋势方向,在 M5 图突破布林带中轨时开仓。止损由 M5 布林带上下轨动态控制,止盈固定 7000 点;每次止损后自动增加手数(马丁策略),适合黄金等波动品种的趋势捕捉。

逻辑原理

开仓信号:EA 同时监测 H4、H1、M30、M15、M5 五个周期的布林带。做多需要 H4/H1/M30/M15 四个大周期的收盘价全部站在各自布林带中轨上方,且 M5 收盘价向上突破 M5 中轨(前一根 K 线收盘价在中轨下方或等于中轨,当前 K 线收盘价突破到中轨上方);做空反之,四个大周期收盘价全部在中轨下方,M5 向下突破中轨。这种多周期共振设计减少假信号,只在大趋势明确时进场。

止损机制:持仓后每个 Tick 检查 M5 实时价格。多头持仓时,如果当前卖价(Bid)触及或跌破 M5 布林带下轨,立即市价平仓止损;空头持仓时,如果当前买价(Ask)触及或突破 M5 布林带上轨,立即平仓。这是动态止损,布林带宽度随波动调整,行情平静时止损收紧,波动加大时止损放宽。

止盈与马丁:止盈固定 7000 点(对黄金约 70 美元),由 MT5 订单自动执行。每次触发止损后,马丁计数器加 1,下次开仓手数增加 0.01 手(从初始 0.01 开始);触发止盈后计数器清零,恢复初始手数。马丁计数存储在 MT5 全局变量中,重启 EA 或 MT5 后会自动加载,不会丢失连续性。

参数说明

  • BB_Period(默认 20):布林带计算周期,值越大通道越平滑但反应越慢。建议保持 20,这是经典设置;短周期交易可降至 10-15,但假信号会增多。
  • BB_Deviation(默认 2.0):布林带标准差倍数。默认 2.0 涵盖约 95% 价格波动;调大至 2.5-3.0 通道更宽、触发止损和开仓信号更少,适合过滤震荡;调小至 1.5-1.8 信号更频繁但假突破增多。
  • MagicNumber(默认 888888):魔术号,用于区分不同 EA 的订单。如果同时运行多个 EA,每个必须设置不同的魔术号,否则会互相干扰持仓判断和马丁计数。
  • InitialLot(默认 0.01):初始手数。黄金 0.01 手约 1 美元/点波动,7000 点止盈对应 70 美元收益。小资金(1000 美元以下)建议保持 0.01;更大资金可按 1% 风险原则调整(例如 5000 美元账户,承受 50 美元单次亏损,初始手数 0.01-0.02)。
  • MartinStep(默认 0.01):每次止损后增加的手数。默认每次加 0.01,连续 5 次止损后手数达到 0.06。这个值越大马丁效果越激进,回本速度快但爆仓风险高;建议不超过初始手数的 50%(初始 0.01 则 MartinStep 不超过 0.005)。
  • TakeProfitPoints(默认 7000):固定止盈点数(MT5 的点数,黄金 1 点 = 0.01 美元)。7000 点约 70 美元,适合 H1-H4 级别趋势;日内短线可降至 3000-5000 点,波段交易可提高至 10000-15000 点。注意调整后需重新评估风险收益比。
  • CommentText(默认 "MultiBB"):订单备注,仅用于在 MT5 交易历史中识别该 EA 的单子,不影响交易逻辑。

怎么用

  1. 将代码保存为 .mq5 文件,放入 MT5 数据文件夹的 MQL5\Experts\ 目录(打开 MT5,菜单栏"文件"→"打开数据文件夹"可快速定位)。
  2. 在 MetaEditor 中打开文件,按 F7 编译,确保没有错误。
  3. 回到 MT5,在导航器窗口刷新或重启软件,"Expert Advisors"列表中会出现该 EA。
  4. 打开黄金(XAUUSD)图表,任意周期皆可(EA 会自动读取各周期数据),将 EA 拖到图表上。
  5. 在弹出的参数窗口中调整参数(建议先用默认值回测),勾选"常用"选项卡中的"允许算法交易"和"允许 DLL 导入"(如果是手动交易账户还需勾选"允许实时自动交易")。
  6. 点击确定,右上角出现笑脸图标表示 EA 正常运行。图表上不会画任何线或箭头,开仓信号只会在满足条件时自动执行,可在"工具箱"→"交易"查看持仓和挂单。

适用场景

适合的品种:黄金(XAUUSD)是代码默认针对的品种,因为点数和手数参数按黄金标准设置。也可用于其他波动大、趋势性强的品种(原油、外汇主要货币对如 EURUSD),但需根据品种的点值和波动特性重新调整 TakeProfitPoints 和手数参数。

适合的周期与行情:EA 在图表上可挂任意周期,它会自动读取 H4/H1/M30/M15/M5 数据。最适合中长线趋势行情(单边上涨或下跌持续数小时至数天),此时四个大周期共振条件容易满足,M5 突破中轨后价格有足够空间达到 7000 点止盈。震荡行情(价格在布林带中轨附近反复横盘)会频繁触发开仓和止损,导致马丁计数快速累积、手数失控。

不适合的情况:剧烈双向震荡(例如重要数据公布前后)、流动性极低的时段(周末跳空、亚洲盘深夜)、以及趋势反转初期(四个大周期方向尚未统一)。此外,连续多次止损后马丁手数可能超出账户承受能力,必须设置手动止损或最大马丁次数限制(代码中未实现,需自行添加风险控制逻辑)。

风险提示

马丁策略的爆仓风险:这是该 EA 的核心风险。每次止损后手数递增,连续 10 次止损手数会达到 0.11(假设初始 0.01、步长 0.01),单次亏损金额是初始的 11 倍。如果行情持续震荡或遭遇黑天鹅事件(闪崩、跳空),账户可能在几小时内爆仓。代码中没有最大马丁次数限制、没有最大手数上限、没有账户余额预警,实盘使用前必须自行添加这些保护机制,或严格控制初始手数和账户规模。

动态止损的滞后与滑点:布林带止损每个 Tick 检查,但市场价格可能瞬间穿透止损位(尤其是快速行情或流动性差时)。实际平仓价可能比布林带轨道差几个点甚至十几个点,导致亏损超出预期。此外,布林带是滞后指标,行情反转时可能在亏损扩大后才触及轨道。

多周期共振的信号稀缺性:四个大周期必须同时满足方向条件才能开仓,这在震荡市可能导致长时间无信号,但一旦开仓后立即遭遇反转,依然会触发止损。回测时需检查信号频率是否过低(每月少于 5 次可能不足以覆盖点差和滑点成本)。

固定止盈的局限性:7000 点止盈不会随行情强度调整。强趋势中可能在价格继续大幅运行前就止盈离场,错过更大利润;弱趋势中 7000 点可能难以达到,反而在震荡中被止损。建议结合回测优化止盈参数,或改用移动止盈逻辑。

无重绘与无未来函数:代码使用 CopyBuffer 和 CopyClose 读取历史数据,索引 curr=2 对应最新完成的 K 线,不会重绘。但开仓判断基于 K 线收盘价突破,如果 M5 K 线收盘前价格剧烈波动,可能在收盘瞬间触发信号但实际入场价已经偏离。

VPS 与断线风险:EA 需要 24 小时运行监测止损,如果电脑关机或网络中断,持仓将失去保护。强烈建议使用 VPS(虚拟专用服务器)挂机,确保 EA 不间断运行。即使重启 MT5,马丁计数会从全局变量恢复,但如果中断期间持仓已被止损,计数可能与实际情况不同步。

点差与佣金:代码中止盈和止损计算未考虑点差。黄金点差通常 20-50 点(0.2-0.5 美元),高点差会侵蚀盈利空间。使用前确认经纪商点差水平,必要时将止盈上调 100-200 点以补偿成本。

常见问题

这个EA会重绘吗?信号会不会在历史回测和实盘中不一致?
不会重绘。代码使用已完成K线的收盘价判断(索引curr=2),开仓信号基于历史确定数据,回测和实盘逻辑一致。但注意MT5回测质量取决于历史数据精度,建议用真实Tick数据回测验证。
连续止损多少次会爆仓?账户需要多少资金?
这取决于初始手数、MartinStep和账户杠杆。假设初始0.01手、步长0.01、黄金保证金500美元/手(杠杆100),连续10次止损后手数0.11、保证金需求55美元,但累计亏损可能超过账户余额。建议至少1000美元账户起步,承受5-8次马丁,并自行添加最大次数限制。
可以用在XAUUSD以外的品种吗?
可以,但必须调整参数。TakeProfitPoints的7000对黄金约70美元,对EURUSD(1点=0.0001美元)7000点只有0.7美元,需改为70-100点;对原油等品种也需按点值重新计算。同时检查品种的布林带波动特性,某些品种可能需要调整BB_Period或BB_Deviation。
MT4能用这个EA吗?
不能直接用。这是MQL5代码,仅适用于MT5平台。MT4使用MQL4语言,函数和语法差异较大(如iBands句柄、CTrade类等在MT4中不存在)。如需MT4版本,需将代码重写为MQL4。
参数默认值适合什么周期和行情?回测用什么周期?
参数默认值(布林带20周期、偏差2.0、止盈7000点)适合H1-H4级别的中长线趋势行情,单边运行持续6小时以上的走势效果最好。EA挂到图表上可以是任意周期,它会自动读取各周期数据。回测时建议用M5或M15图表,时间跨度至少3-6个月,模式选择"每个点"或"真实点"以获得准确结果。

Multi-Timeframe Bollinger Bands Breakout Martingale EA for MT5

An MT5 expert advisor using 5-timeframe Bollinger Bands confluence (H4/H1/M30/M15) and M5 middle band breakout for entry, with dynamic Bollinger stop-loss, fixed 7000-point take-profit, and martingale position sizing after losses. Designed for XAUUSD trend trading.

Source code is shown above. Compiled EX5 files are available to VIP members.

评论

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

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