The RSI Engine v2.1
RSI Engine是一个基于RSI多信号的智能交易系统,通过看涨/看跌背离和超买超卖反转信号进行交易,支持中心线确认过滤。集成了动态仓位管理的风险管理、移动止损、每日盈亏限制、新闻过滤和可配置交易时段功能。该EA同时只持有一个仓位,通过RSI水平穿越或移动止损管理出场。
打开交互版(权益曲线、切换品种)基本信息
回测结果(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 从未交易的原因:转换后没有留下任何开仓规则。
由 MQL5 自动转换为 Python,所有 EA 使用同一套规则回测:按 MT5 手数计仓(外汇每手 10 万单位、黄金每手 100 盎司),1:100 杠杆,同一时间只有一张挂单,净值跌破初始资金 10% 时强平。夏普比率按权益曲线计算。标为不可靠的结果仅供参考。
爆仓风险: 未发现爆仓模式
代码里没有发现常见的爆仓模式,回测中账户也没有爆仓。但这不是保证,任何 EA 都可能亏钱。
高:回测中爆仓,或使用马丁/网格加仓且不设止损。偏高:马丁或网格加仓但有止损,或不设止损且可同时持有多个仓位。 标签的含义和我们的发现 →
策略分析
策略核心是基于RSI指标的均值回归交易,利用价格与RSI之间的背离现象捕捉潜在反转机会。入场条件有两种:一是RSI背离信号(价格创新低但RSI未创新低为看涨背离,价格创新高但RSI未创新高为看跌背离),二是超买超卖反转信号(RSI从超卖区上穿或从超买区下穿)。可选的50中心线确认要求RSI穿越50水平后才入场,提高信号可靠性。出场条件包括RSI到达对立极端区域时平仓,以及移动止损在利润达到触发阈值后跟踪价格保护利润。仓位管理支持固定手数和基于风险百分比的动态手数计算,根据权益和止损距离自动确定交易量。资金管理方面设有每日盈亏限制,达到目标利润或亏损上限后停止当日交易,同时具备新闻时段过滤和交易时间过滤来规避高风险时段。
优势
- 多信号融合:结合RSI背离、超买超卖反转和中心线确认,提高信号质量
- 风险管理体系完善:包含动态仓位计算、每日盈亏限制、移动止损和保证金检查
- 过滤机制全面:新闻时段过滤和交易时间过滤有效规避高风险时段
- 代码结构清晰:函数模块化设计,逻辑分层明确,易于维护和扩展
- 新K线检测机制:避免同一根K线内重复交易,减少不必要的信号触发
劣势
- 背离检测逻辑过于简单:仅比较前后半段最低/最高点,可能产生大量假信号
- 只支持单仓位交易:无法同时持有多单和空单,限制了策略灵活性
- IsPositionOpen仅检查魔术号不检查品种:多品种运行时可能冲突
- 新闻过滤只支持单一新闻事件时间,无法处理一天内的多个重要新闻
- 每日盈亏计算仅累加第一个匹配魔术号的持仓浮动盈亏,忽略多仓位场景
- 缺少点差过滤:作为均值回归策略在低流动性时段入场可能因高点差受损
改进建议
- 改进背离检测算法:引入RSI局部极值点识别和趋势线拟合,而非简单的前后半段最高/最低比较
- 添加点差过滤:在入场前检查当前点差是否超过阈值,避免高成本交易
- 支持多仓位管理和多品种符号检查,使IsPositionOpen和每日盈亏计算更准确
- 增强新闻过滤功能:支持多个新闻事件时间点或接入经济日历API
- 添加最大滑点控制和订单重试机制,提高订单执行的鲁棒性
风险评估
总体风险: 中等
- 背离检测算法过于简化,可能产生频繁的虚假信号导致不必要的亏损交易
- 超买超卖反转信号在强趋势市场中会持续逆势入场,可能造成连续亏损
- 每日盈亏计算中浮动盈亏仅取第一个匹配仓位,多仓位时统计不准确
- 缺少点差过滤,低流动性时段入场可能导致实际成本远超预期
- ManageOpenTrades使用SelectByMagic仅选中第一个匹配仓位,多仓位时其他仓位无法管理
评估得分
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
InpUseRiskManagement | false | 是否启用基于风险的动态仓位计算 |
InpRiskPercent | 1.0 | 每笔交易的风险占权益的百分比 |
InpLots | 0.1 | 固定交易手数(风险管理模式禁用时使用) |
InpStopLossPoints | 300 | 止损点数(风险管理模式下必填) |
InpTakeProfitPoints | 300 | 止盈点数 |
InpMagicNumber | 1901 | EA交易唯一标识号 |
InpUseTrailingStop | true | 是否启用移动止损 |
InpTrailingStopTrigger | 3000 | 触发移动止损的利润点数 |
InpTrailingStopStep | 50 | 移动止损距当前价格的跟踪距离(点数) |
InpRSI_Period | 14 | RSI指标周期 |
InpRSI_Overbought | 70 | 超买水平 |
InpRSI_Oversold | 30 | 超卖水平 |
InpRSI_Centerline | 50 | 中心线水平 |
InpUse_Divergence_Signal | true | 是否使用RSI背离作为主信号 |
InpUse_OverboughtOversold_Reversal | true | 是否使用超买超卖反转作为主信号 |
InpUse_Centerline_Confirmation | true | 是否等待RSI穿越50确认入场 |
InpUse_RSI_Level_Exit | false | 是否在RSI到达对立极端时平仓 |
InpDivergence_Lookback_Bars | 60 | 背离检测的回溯K线数量 |
EnableDailyLimits | true | 是否启用每日盈亏限制 |
DailyProfitTarget | 10000.0 | 每日盈利目标(达到后停止交易) |
DailyLossLimit | 5000.0 | 每日亏损限额(达到后停止交易) |
InpUseNewsFilter | false | 是否启用新闻过滤 |
InpNewsTimeHour | 15 | 新闻事件时间(小时) |
InpNewsTimeMinute | 30 | 新闻事件时间(分钟) |
InpMinutesBeforeNews | 10 | 新闻前停止交易的分钟数 |
InpMinutesAfterNews | 10 | 新闻后恢复交易的分钟数 |
EnableTimeFilter | false | 是否启用交易时段过滤 |
CloseAtEndTime | false | 交易时段结束时是否平仓 |
同类 EA:均值回归
回测是历史模拟,不代表未来收益,不构成投资建议。