请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
EA

RegimeRouter — 基于每种策略胜率记录的趋势/区间分类器 - MetaTrader 5EA

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist 在  Freelance
  • 巴基斯坦
  • 1596
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| Chinese English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
显示:
8
等级:
(2)
已发布:
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

RegimeRouter — 带“每种行情模式”胜率记录的趋势/区间分类器


问题

趋势跟踪策略在区间震荡中会亏损,均值回归策略在趋势行情中则会遭受重创。大多数专家顾问(EA)只能二选一,并寄希望于市场配合。通常的解决方法是添加一个 ADX 过滤器。但 ADX 仅衡量单一指标——趋势强度,却无法说明收益究竟是具有持续性还是会均值回归。

其分类原理

在每个收盘K线处,它会测量近期价格序列的三个独立属性。

  • ADX —— 经典的方向强度指标。
  • 赫斯特指数 —— 对对数收益率进行重新标度范围(R/S)分析。大于0.5时,序列具有持续性;小于0.5时,序列具有反持续性;等于0.5时,则为随机游走。
  • 滞后1自相关 —— 价格变动之后往往是同向的后续变动,还是反向回调。

每项指标均计为一票:趋势为+1,震荡为-1,无法判断为0。将所有票数相加,若总和 在 任一方向 上 超过 InpMinVotes 阈 值,则市场状态为“趋势”或“震荡”;否则为“中性”,EA将完全不进行交易。 如果这三者中任何一个无法计算,则不参与投票,该K线被判定为“中性”。关键在于要求指标之间达成一致。仅凭单一指标进行判断,无异于在抛硬币时增加了额外步骤。

交易路由机制

市场状态 模块
趋势 突破N根K线的高点或低点,且仅在快慢EMA已指向的同一方向上有效。
区间 根据价格相对于其自身移动平均线的拉伸Z值进行反向操作。在低尾部买入,在高尾部卖出。
中性 无操作。

账本

每个仓位开仓时都会使用由 InpMagicBase 加上 市场状态 ID 组成的“魔术号”,因此产生该交易的市場状态会被标记在交易记录上。启动时,EA 会遍历交易历史,按仓位 ID 对交易进行分组,并重建记录。该记录在重启后仍会保留,且在迁移至其他交易终端时也不会丢失。

对于每个模块,它会报告原始胜率、威尔逊95%下限、由该模块自身平均盈利和平均亏损推算出的盈亏平衡胜率、利润因子以及评估结论。

TREND 96 笔交易 38 笔盈利 原始胜率 39.6% 威尔逊95%下限 30.4% 盈亏平衡胜率 34.2% 利润因子 1.26 净收益 +734.84 [未经验证]

中间的两个数字才是关键。对于2R的趋势跟随策略,胜率在34%左右以上即可盈利。 而1R的逆势交易则需要超过50%的胜率。此外,仅基于六笔交易的原始胜率并不能证明任何问题。最终结论仅仅在于下限是否能突破盈亏平衡点——这才是小样本情况下“该模块有效”的唯一有效验证标准。

A/B切换

InpForceRegime 会禁用 路由器,并强制所有交易通过同一个模块。对同一股票代码和同一时间段进行三次测试——先是 AUTO,接着是 ALWAYS_TREND,最后是 ALWAYS_RANGE——这样就能直接衡量分类器是否带来了实际价值。 在强制运行中,这三组读数仍会被记录下来,因此你可以看到,在路由器本会拒绝的K线中,强制运行的模块表现如何。

在信任该策略之前请务必进行此操作。路由机制本身是一个假设,而非最终结果。

回测

H1 · 2026年1月1日至2026年9月20日 · 10 000 USD · 启用随机延迟 · 所有参数均采用默认值。两个交易品种,均显示结果。

EURUSD H1

指标 数值
总净利润 +900.42
总盈利/总亏损 3 712.84 / 2 812.42
利润率 1.32
预期收益 9.00
回收系数 1.71
交易总数 100
最大账户余额回撤 505.32 (4.56%)
最大权益回撤 527.80(4.76%)
模块 交易 获利交易 原始 威尔逊95%低位 净
趋势 96 38 39.6% 30.4% +734.84
区间 4 4 100.0% 51.0% +165.58

96 + 4 = 100笔交易,且+734.84 + 165.58 = +900.42,因此账簿与测试报告完全吻合。

XAUUSD H1 — 同一EA、相同设置、同一时间段

指标 数值
总净利润 −1 554.11
期末余额 8 445.89
交易总数 85
模块 交易 获利 原始 威尔逊95%低位 净
趋势 78 26 33.3% 23.9% −1 576.33
范围 7 4 57.1% 25.0% +22.22

78 + 7 = 85笔交易,−1 576.33 + 22.22 = −1 554.11。这笔交易亏损了。我特意将其与盈利交易并列展示,因为如果列表中只显示了盈利的交易代码,你根本无法了解该EA的真实情况。

该结果所反映与未反映的内容

使用前请阅读此部分。

  • TREND模块在上述两种交易品种上均未经过验证。 在EURUSD上, 其平均盈利为93.35,平均亏损为48.49,因此仅为达到收支平衡,就需要约34.2%的交易获利。其实际获利率为39.6%。 但根据威尔逊95%下限法计算,该胜率的下限为30.4%,低于盈亏平衡点。以当前样本量来看,该结果表明该策略完全不具备优势。 在XAUUSD上,同一模块的原始胜率为33.3%,下限胜率为23.9%,且该交易出现了亏损。这两种情况得出的结论相同:目前证据尚不充分。
  • 若按 欧元兑美元(EURUSD) 的 胜率 计算, 大约需要进行320笔交易,其下限值才能达到盈亏平衡。一个交易品种在H1时间框架下约九个月内产生了100的收益,因此这是组合配置问题,而非回测周期过短的问题。
  • RANGE模块基本上未经测试。 在EURUSD 上有4笔 交易,在XAUUSD上有7笔交易。EURUSD上100%的胜率毫无意义,这正是“威尔逊”专栏存在的理由。
  • 没有进行样本外测试。 仅有一个 周期、一个时间框架、两个交易品种。
  • 建模采用的是“每 tick”数据,而非真实 tick 数据。 平仓 由经纪商的止损(SL)和止盈(TP)决定,因此单根K线内的价格走势至关重要。在得出结论前,请务必使用真实 tick 数据重新运行测试。

我之所以发布此内容,是因为其测量机制本身具有参考价值,而非为了向您兜售经过验证的交易优势。请进行A/B测试。如果该算法在您的交易品种上未能跑赢其自身的两个模块,这一点同样值得关注。

执行说明

  • 信号在K线收盘时进行评估,因此该模型适用于M15及以上时间周期。
  • 仓位开仓时不设置止损,随后根据实际成交价设置止损。基于交易前快照计算的止损位,在订单成交时可能已经失效。
  • 如果设置止损失败,头寸将立即平仓,而非处于无保护状态。
  • 止损距离受限于该交易品种自身的止损水平和冻结水平。
  • 平仓操作遵循经纪商的止损(SL)和止盈(TP)设置。不支持手动定时强制平仓。
  • 趋势交易可选 ATR 追踪止损,每根K线最多应用一次,且绝不在入场K线上应用。
  • 每次仅持有一笔头寸。在净额结算账户中,针对同一交易品种的第二笔订单将并入现有头寸,而非形成独立交易——否则会悄无声息地破坏账目记录。
  • 基于风险的手数设定、每日亏损限额、每日交易上限、点差过滤器、最小止盈与点差比率,以及可选的交易时段过滤器。

主要输入参数

输入 默认值 功能说明
InpForceRegime 自动 强制使用一个模块,对分类器进行 A/B 测试
InpMinVotes 2 需要三票中的两票才能确定采用某种机制
InpADXTrendLevel / InpADXRangeLevel 25 / 20 ADX投票阈值
InpHurstBars 256 赫斯特估计值之后的历史回报数据柱数
InpHurstAdaptive 关闭 根据赫斯特估计值自身的分布进行评估,而非固定阈值
InpAutoCorrThreshold 0.05 自相关值必须高于此阈值才能进行投票
InpBreakoutBars 20 趋势模块:需突破N根K线的高点/低点
InpRangeZEntry 2.0 区间模块:进行反向操作的z值
InpRiskPercent 0.5 每笔交易的风险,占账户余额的百分比
InpMagicBase 772000 此处已添加状态标识符

关于赫斯特阈值的说明

有一个名为 InpHurstAdaptive 的 输入参数,默认处于关闭状态。

赫斯特指数的教科书趋势/区间线为0.5。但在实际应用中,该线的位置并不准确。R/S估计量在有限样本下存在向上偏差,因此对普通序列进行的256根K线估计值会远高于0.5。 在欧元兑美元(EURUSD)H1图表上测得,该指标的平均值为0.568,在419个观测值中仅有两次跌破0.45。若采用固定的0.45/0.55区间,该投票机制实际上无法衡量任何信息。这几乎等同于对“趋势”(TREND)的永久性支持。

启用 InpHurstAdaptive 功能后, 将取消绝对尺度,转而提出一个相对问题:该序列的持续性是否强于该交易品种近期表现?系统将保留最近 N 个读数,并根据该历史数据的百分位数进行投票,而非基于 0.5。

此举的代价是切实存在的。根据设计,无论市场走势如何,该投票器都会针对固定比例的K线对“范围”进行投票。因此这只是一个开关,而非重写。默认情况下该功能处于关闭状态,因为上述回测是在关闭该功能的情况下进行的,而且我不希望发布时的默认设置是一个我没有相关测试结果的选项。

没有任何策略能保证盈利。这为你提供了一个内置衡量标准的测试框架,但并不能给你带来优势。

— Ali Rajput


由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/77535

一键交易管理器——基于风险的手数设置,一键完成入场、止损和止盈 一键交易管理器——基于风险的手数设置,一键完成入场、止损和止盈

根据您的风险比例和止损距离计算出交易手数,然后在已设置止损和止盈的情况下开仓。绝不会自行进行交易。

QuadArb Monitor — four-corner basis dashboard QuadArb Monitor — four-corner basis dashboard

Read-only panel watching two four-corner basis groups: live divergence in pips, with only real edges flagged.

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

离散 离散

离散技术指标由价格和交易量的变化决定。