ExpHAWaves
该EA基于Heiken Ashi蜡烛方向与StepUpDown趋势过滤器(由快速SMA(2)和慢速SMMA(30)关系推导)的共振信号进行交易。当两个指标同时确认上升趋势时开多仓,同时确认下降趋势时开空仓,支持可配置的移动止损、基于风险的仓位计算和反向信号平仓功能。
打开交互版(权益曲线、切换品种)基本信息
回测结果(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 都可能亏钱。
高:回测中爆仓,或使用马丁/网格加仓且不设止损。偏高:马丁或网格加仓但有止损,或不设止损且可同时持有多个仓位。 标签的含义和我们的发现 →
策略分析
策略概念基于Heiken Ashi平滑K线与StepUpDown趋势指标的双重确认,属于典型的趋势跟踪系统。入场条件为:Heiken Ashi蜡烛方向(haOpen<haClose为多头,haOpen>haClose为空头)与StepUpDown趋势方向(基于SMA(2)与SMMA(30)的偏离及高低点位置判断)必须一致才开仓。出场条件包括三种方式:反向信号平仓(CloseByOppositeSignal)、移动止损(TrailingStop)跟踪出场、以及无移动止损时基于盈利和反向StepUpDown信号的获利平仓。仓位管理支持固定手数和动态手数两种模式,动态手数根据账户余额、风险百分比、杠杆和合约大小计算,并除以持仓数量+1进行分配。资金管理通过RiskPercentage参数控制每笔交易的风险比例,止损距离由资金风险公式计算得出,止盈设为止损的TPvsSLRatio倍数,最低止损距离为38个点。此外EA还设置了同一小时内不重复开仓的限制,通过检查历史订单关闭时间来避免过度交易。
优势
- 双指标共振确认机制降低了虚假信号入场的概率
- 支持动态手数计算和风险百分比控制,资金管理较为完善
- 提供移动止损功能,能有效锁定盈利并跟踪趋势
- 设置了同小时不开重复仓的限制,避免过度交易
- 止损距离有最低38点保护,防止止损过小被扫损
劣势
- SMA(2)周期极短,StepUpDown趋势判断容易产生频繁的虚假反转信号
- 定时器每分钟触发但交易逻辑依赖分钟变化,在快速行情中可能反应滞后
- 对象指针(CTrade等)在OnTimer中每分钟new但从未delete,存在内存泄漏
- ModifySLTP中使用break跳出循环,只修改第一个符合条件的持仓,多仓场景下处理不完整
- CheckOrderCloseTime中HistoryOrderGetInteger使用order_ID作为ticket参数,存在逻辑错误
- ClosePosition中PositionGetInteger在循环外调用,可能获取到错误的持仓信息
改进建议
- 修复内存泄漏:将CTrade等对象的创建移至OnInit,或在使用后及时delete
- 优化StepUpDown趋势判断逻辑,增加SMA周期或添加趋势强度过滤条件以减少虚假信号
- 修复CheckOrderCloseTime中HistoryOrderGetInteger的错误参数传递
- ModifySLTP中移除break语句,使其能遍历并修改所有符合条件的持仓
- 添加点差过滤和滑点保护,避免在高点差环境下开仓
风险评估
总体风险: 中等
- SMA(2)周期过短导致趋势判断不稳定,可能频繁产生虚假信号造成连续亏损
- 内存泄漏问题长期运行会导致资源耗尽
- CheckOrderCloseTime中的逻辑错误可能导致同小时重复开仓限制失效
- 移动止损仅10点(1pip)过于紧密,在波动市中容易被触发
评估得分
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
TimeFrames | PERIOD_H1 | 专家顾问运行的时间周期 |
RiskPercentage | 3.0 | 风险百分比,用于计算每笔交易的风险金额 |
TPvsSLRatio | 3.0 | 止盈与止损的倍数比率 |
MoneyManagementType | DynamicLotSize | 资金管理类型:固定手数或动态手数 |
TradeLotSize | 0.1 | 固定手数模式下手动输入的手数 |
CloseByOppositeSignal | Yes | 是否在反向信号时平仓 |
UseTrailingStop | Yes | 是否使用移动止损 |
Trailing_FixedPipsSL | 10 | 移动止损值(以点为单位) |
Magic | 1234 | 专家顾问标识号(最多8位数字) |
同类 EA:趋势跟踪
回测是历史模拟,不代表未来收益,不构成投资建议。