AdaptiveTrader_Pro_Final_EA
该EA使用RSI超买超卖信号,配合双周期移动平均线趋势过滤,在M5图表上入场交易。它具有通过暴力回测进行自适应参数优化、基于ATR的仓位管理和移动止损,以及根据历史胜率动态调整风险比例的功能。系统会定期重新优化RSI周期、ATR倍数和移动止损/止盈倍数。
打开交互版(权益曲线、切换品种)基本信息
回测结果(H1,约 1 年)
| 品种 | 盈亏 | 年化 | 最大回撤 | 交易数 | 胜率 | 夏普 | 恢复因子 | 最长连亏 | 每笔期望 | 状态 |
|---|---|---|---|---|---|---|---|---|---|---|
| EURUSD | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | 零交易 |
| GBPUSD | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | 零交易 |
| USDJPY | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | 零交易 |
| XAUUSD | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | 零交易 |
这个 EA 从未交易的原因:开仓要求同一根 K 线上既出现信号、又出现极端的震荡指标读数,一年的小时线里一次都没碰上。
由 MQL5 自动转换为 Python,所有 EA 使用同一套规则回测:按 MT5 手数计仓(外汇每手 10 万单位、黄金每手 100 盎司),1:100 杠杆,同一时间只有一张挂单,净值跌破初始资金 10% 时强平。夏普比率按权益曲线计算。标为不可靠的结果仅供参考。
爆仓风险: 未发现爆仓模式
代码里没有发现常见的爆仓模式,回测中账户也没有爆仓。但这不是保证,任何 EA 都可能亏钱。
高:回测中爆仓,或使用马丁/网格加仓且不设止损。偏高:马丁或网格加仓但有止损,或不设止损且可同时持有多个仓位。 标签的含义和我们的发现 →
策略分析
策略概念是基于多周期趋势确认的均值回归思路,在M5周期使用RSI识别超买超卖区域,同时要求价格在M5和H1两个周期的移动平均线同侧才能入场。买入条件为RSI低于30且价格高于M5和H1的SMA均线,卖出条件为RSI高于70且价格低于两周期SMA均线。出场条件包括基于ATR倍数的固定止盈止损,以及三档渐进式移动止损——当浮盈超过2倍ATR时将止损移至价格-1.5倍ATR,超过1倍ATR时移至价格-1倍ATR,否则保持0.5倍ATR距离。仓位管理使用账户余额乘以风险百分比除以ATR止损距离来计算手数,并遵守品种的最小/最大手数和手数步长约束。资金管理方面,系统每4小时根据各品种的胜率动态调整风险比例——胜率低于40%时降低0.05%,高于60%时提高0.05%,但不超过初始设定的最大风险比例。此外,每小时进行一次参数暴力优化,遍历RSI周期和各ATR倍数的组合以寻找最优参数集。
优势
- 多周期趋势确认(M5+H1)减少了逆势交易的风险
- ATR-based动态仓位管理和止损使风险适应市场波动性
- 根据历史胜率动态调整风险比例,具有一定的自适应风控能力
- 包含点差过滤和新闻回避机制,避免不利市场环境入场
- 指标句柄在OnDeinit中正确释放,避免资源泄漏
劣势
- 回测函数BacktestWithParameters是空壳占位符,参数优化实际上没有任何效果,所有参数组合的评分都是0
- ApplyTrailingStop中没有遍历持仓,直接使用PositionGetInteger但未先选择持仓,会导致获取到错误或未定义的持仓数据
- tradeActive标志只在开仓时设为true但从未重置为false,导致每个品种只能开一次仓后再也无法交易
- BreakEvenMultiplier和PartialTakeProfitPercent参数定义了但从未在代码中使用
- 新闻检查函数IsHighImpactNewsUpcoming是占位符,始终返回false,新闻回避功能形同虚设
- OnTick中每次tick都调用LogInfo打印日志,在高频品种上会产生大量冗余日志影响性能
改进建议
- 实现真正的回测逻辑或使用MQL5的OnTester框架,使参数优化能产生有效结果;或者移除优化功能避免误导用户
- 在ApplyTrailingStop中使用PositionSelect或遍历所有持仓来正确选择对应品种的持仓,并在持仓关闭时将tradeActive重置为false
- 实现BreakEvenMultiplier和PartialTakeProfitPercent的实际逻辑,或删除这些未使用的参数以减少混淆
风险评估
总体风险: 中等
- 参数优化功能完全无效(回测占位符),可能导致用户误信已优化而实际使用默认参数
- tradeActive永不重置导致品种锁死,但在锁死前可能因移动止损逻辑错误而修改错误持仓的止损
- 缺少新K线检测,每个tick都执行信号检查和止损修改,可能在同一根K线上多次开仓或频繁修改止损
- 止损和止盈使用ATR绝对值而非点数,未考虑品种报价精度,可能导致止损距离不合理
评估得分
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
MaxRiskPercent | 0.2 | 每笔交易的风险百分比 |
OptimizationInterval | 3600 | 参数优化间隔(秒) |
InpMagicNumber | 121300 | EA交易的魔术号 |
MaxSimultaneousTrades | 1 | 允许同时持有的最大交易数 |
TrendPeriod | 20 | M5周期趋势均线周期 |
BreakEvenMultiplier | 1.5 | 达到此ATR倍数后移动止损到保本 |
PartialTakeProfitPercent | 0.5 | 在第一止盈位平仓的仓位比例 |
PerformanceCheckInterval | 14400 | 性能检查间隔(秒) |
MaxSpreadPoints | 20 | 允许开仓的最大点差 |
NewsAvoidanceMinutes | 30 | 高风险新闻前后的回避时间(分钟) |
HigherTimeframe | PERIOD_H1 | 高周期趋势确认的时间框架 |
HigherTimeframeTrendPeriod | 50 | 高周期趋势均线周期 |
RSI_Min_Period | 8 | RSI优化最小周期 |
RSI_Max_Period | 14 | RSI优化最大周期 |
ATR_Min_Multiplier | 1.0 | ATR倍数优化最小值 |
ATR_Max_Multiplier | 2.0 | ATR倍数优化最大值 |
TrailingStop_Min_Multiplier | 1.0 | 移动止损倍数优化最小值 |
TrailingStop_Max_Multiplier | 2.0 | 移动止损倍数优化最大值 |
TrailingTP_Min_Multiplier | 1.0 | 移动止盈倍数优化最小值 |
TrailingTP_Max_Multiplier | 2.0 | 移动止盈倍数优化最大值 |
同类 EA:多周期
回测是历史模拟,不代表未来收益,不构成投资建议。