- 显示:
- 8
- 等级:
- 已发布:
-
需要基于此代码的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
Read-only panel watching two four-corner basis groups: live divergence in pips, with only real edges flagged.
