EA-1598 · 突破
NarrowestRangeSignal EA
该EA基于NarrowestRangeSignal指标识别窄幅价格区间后,在区间高低点两侧设置止损挂单(买止损和卖止损)。当一侧挂单成交后,删除另一侧挂单,实现窄幅整理后的OCO突破策略。
打开交互版(权益曲线、切换品种)基本信息
回测结果(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 都可能亏钱。
高:回测中爆仓,或使用马丁/网格加仓且不设止损。偏高:马丁或网格加仓但有止损,或不设止损且可同时持有多个仓位。 标签的含义和我们的发现 →
策略分析
策略概念基于窄幅整理突破,当NarrowestRangeSignal指标检测到指定周期内出现最窄K线范围时发出信号。入场条件为指标发出信号后,在区间最高价加上indent偏移处挂买止损单,在区间最低价减去indent偏移处挂卖止损单,形成双向突破挂单。出场条件依靠止盈参数平仓,止损设在区间对侧(买止损单的止损在最低价下方,卖止损单的止损在最高价上方)。仓位管理支持固定手数和固定百分比两种模式,百分比模式根据可用保证金和杠杆计算手数。资金管理方面,CalculateLot函数会检查最小最大手数限制并规范化手数精度,但缺少止损的独立风险控制,且没有追踪止损或移动止损机制。
优势
- 窄幅整理突破策略逻辑清晰,利用市场低波动期蓄势后的突破捕捉趋势
- OCO挂单机制合理,一侧成交后自动删除对侧挂单,避免双向持仓风险
- 支持固定手数和固定百分比两种仓位管理模式,灵活性较好
劣势
- 缺少追踪止损和保本机制,盈利仓位可能大幅回撤后才被止损出场
- 止损设在区间对侧但减去了indent偏移,实际止损可能过小或过大,未考虑ATR等动态指标
- DeletePendingOrders函数中使用static变量做新K线检查与CheckOrders中的逻辑重复且可能冲突,每tick都创建新的CTrade对象效率低下
改进建议
- 增加基于ATR的动态止损和追踪止损机制,替代固定偏移和固定止盈,使策略适应不同市场波动环境
- 优化代码结构,将CTrade对象声明为全局变量避免重复创建,统一新K线检查逻辑避免static变量冲突
风险评估
总体风险: 中等
- 止损计算不够稳健,区间对侧减去indent可能导致止损过窄容易被假突破打掉
- 没有最大持仓数量限制和单日最大亏损控制,连续信号可能频繁开仓造成资金损失
- DeletePendingOrders和CheckOrders中的static prev_time可能导致新K线判断不同步,存在逻辑漏洞
评估得分
代码质量3.0
策略逻辑3.0
风险管理2.0
稳健性3.0
创新性2.0
文档2.0
综合2.5
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
InpBarsInRange | 3 | 窄幅区间内的K线数量 |
InpCheckPeriod | 10 | 检查最窄范围的周期 |
InpIndent | 50 | 挂单距离高低点的偏移点数 |
InpTakeProfit | 500 | 止盈点数 |
InpMmMode | FIXED_LOT | 资金管理模式:固定手数或固定百分比 |
InpVolume | 1.0 | 交易量(手数或百分比) |
同类 EA:突破
回测是历史模拟,不代表未来收益,不构成投资建议。