EA-16886 · 马丁格尔
DoubleUp2
该EA使用CCI和MACD指标在两者均超过±230阈值时生成买卖信号。它采用马丁格尔仓位管理方案,在每次亏损后加倍手数,并在达到最小价格距离后关闭盈利仓位。
打开交互版(权益曲线、切换品种)基本信息
回测结果(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% 时强平。夏普比率按权益曲线计算。标为不可靠的结果仅供参考。
爆仓风险: 高
- 亏损后加大仓位(马丁格尔)
- 没有止损,也没有移动止损
高:回测中爆仓,或使用马丁/网格加仓且不设止损。偏高:马丁或网格加仓但有止损,或不设止损且可同时持有多个仓位。 标签的含义和我们的发现 →
策略分析
策略概念基于CCI和MACD两个动量指标的组合信号,当两者同时超过230阈值时触发交易。入场条件为CCI>230且MACD>230时卖出,CCI<-230且MACD<-230时买入,这是一种极端超买超卖的逆势策略。出场条件分两种:一是在开反向仓位时关闭反向持仓(closeAll函数),二是当持仓盈利且价格偏离开仓价超过120点时平仓(close函数)。仓位管理采用典型的马丁格尔策略,通过m_pos计数器追踪连续亏损次数,新仓位手数为基础手数乘以2的m_pos次方,即每次亏损后手数翻倍。资金管理方面,基础手数根据账户余额动态计算(余额/50001),最低0.1手,但缺乏止损设置,所有交易的止损和止盈均为0,这意味着亏损只能通过反向信号或马丁格尔机制来处理。
优势
- 双指标确认减少假信号,CCI和MACD同时超阈值才入场
- 动态手数计算与账户余额挂钩,有一定资金管理意识
- 反向信号时先平掉对向持仓,避免对冲占用保证金
劣势
- 马丁格尔仓位翻倍策略在连续亏损时会导致手数指数级增长,极端行情下可能爆仓
- 所有交易无止损设置(SL=0, TP=0),风险完全敞口
- close()函数使用OrdersTotal()遍历但用m_position.SelectByIndex()选择,这是严重的逻辑错误,OrdersTotal返回挂单数而非持仓数
- m_pos计数器在close()中递增逻辑混乱,盈利时m_pos+=2而非归零,与马丁格尔理论矛盾
- 无新K线检查,每个tick都会尝试开仓,可能导致重复交易
改进建议
- 添加止损保护,至少设置基于ATR或固定点数的止损,避免单笔亏损无限扩大
- 修复close()函数中OrdersTotal与SelectByIndex的逻辑错误,应使用PositionsTotal代替OrdersTotal
- 添加最大马丁格尔层数限制和新K线检查,防止手数无限增长和重复开仓
风险评估
总体风险: 危险
- 马丁格尔加倍策略无层数上限,连续亏损可导致手数指数级增长直至爆仓
- 所有仓位无止损保护,极端行情下单笔亏损无上限
- close()函数存在严重逻辑Bug,使用OrdersTotal遍历持仓会导致平仓功能失效
- 无新K线检查,每tick可能重复开仓
评估得分
代码质量2.0
策略逻辑2.0
风险管理1.0
稳健性1.0
创新性1.0
文档1.0
综合1.3
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
Inp_ma_period_CCI | 8 | CCI指标平均周期 |
Inp_fast_ema_period_MACD | 13 | MACD快线EMA周期 |
Inp_slow_ema_period_MACD | 33 | MACD慢线EMA周期 |
同类 EA:马丁格尔
回测是历史模拟,不代表未来收益,不构成投资建议。