14 KiB
14 KiB
突破交易策略
基础概念
- 平台:MQL5
- 品种:XAU黄金
- 1美金:4100与4101之间相差1美金
- 1美金 = 100点
辅助指标
- 移动平均线(Moving Average)
- 周期默认设置为:14
核心概念
- 突破K线:开盘价在均线下方,收盘价在均线上方,称之为多单突破K线,反之亦然
- 极值点:相邻两根突破K线之间所有K线(包括突破K线)中的最高价或最低价称之为极值点
- 有效波段:相邻两个极值点的价差达到波段阈值点数,且两极值之间至少包含 3 根 K 线(含两端极值所在 K),期间所有 K 线组成有效波段
开仓逻辑
- 识别最新有效波段后,在波段高点挂 BUY STOP、波段低点挂 SELL STOP(突破触发)
- 挂单时一并设置 SL/TP(固定止损/止盈点数)
- 该逻辑仅适用最新的一个有效波段;换波段时撤销旧挂单并重挂
- 价格已越过极值(无法挂 STOP)时暂不挂单,等高/低侧标记使用后等待新波段
- 浮盈达到止损点数对应距离后,即可将止损移动至成本价
- 已经开仓后,继续监控新的有效波段突破,每单开仓后就与有效波段无关了
参数默认值对照表
| 分组 | 参数 | 默认 |
|---|---|---|
| 波段 | K线周期 / MA周期 | M1 / 14 |
| 波段 | 最小/最大波段% | 0.1 / 10 |
| 波段 | 反向突破容忍度% / 最少K线 | 0 / 3 |
| 风险 | 止损/止盈点数 | 200 / 300 |
| 风险 | 移动止损 | true |
| 仓位 | 手数模式 | 结余风险比例 |
| 仓位 | 固定手数 / 风险% | 0.01 / 5 |
| 仓位 | 单笔最大手数 / 最大持仓笔数 | 99 / 99 |
| 仓位 | 单方向最多一单 | true |
| 保护 | 连亏冷冻次数 / 冷冻K线 | 3 / 60 |
| 调试 | 调试信息 / 极值标记 / Magic / 禁手工单 | false / true / 20260516 / true |
参数设置
波段识别参数
- K线周期:支持参数设置,不跟随图表,默认 1 Minute
- MA周期:默认 14
- 最小波段阈值百分比:默认 0.1%
- 最大波段阈值百分比:默认 10%
- 有效波段范围:0.1% - 10%
- 有效波段最少 K 线数:默认 3
- 反向突破容忍度:默认 0%
风险管理参数
- 止损点数:默认 200
- 止盈点数:默认 300
- 使用移动止损:默认 true(浮盈达止损点数后移至成本价)
仓位管理参数
- 手数模式:默认 结余风险比例 RiskPercent(可选固定手数)
- 固定手数:默认 0.01手
- 每笔风险占结余%:默认 5%
- 单笔最大手数:默认 99手
- 最大持仓笔数:默认 99
- 单方向最多持有一单:默认 true
RiskPercent 手数公式:
风险金额 = 结余 × 风险%;手数 = 风险金额 ÷ (止损点数对应的每手亏损)
连续亏损保护参数
- 连续亏损次数触发冷冻:默认 3
- 冷冻K线根数:默认 60
调试选项
- 显示调试信息:默认 false
- 显示极值点标记:默认 true
- EA魔术号:默认 20260516
- 禁止手工单:默认 true
补充说明
突破K线处理
- 如果出现多个多单突破K线,仅保留最低价更低的那个K线,反之亦然
- 多头有效波段之间,仅允许出现一个多单突破K线和一个空单突破K线,反之亦然
有效波段规则
- 相邻极值点价差须在最小~最大波段阈值范围内
- 两极值点之间(含两端极值所在 K)至少 3 根 K 线,否则不构成有效波段
- 一个有效波段只能开一单(无论是高点还是低点)
- 开仓后该波段立即失效
- 必须等新的有效波段形成才能再次开仓
单方向持仓限制
此参数用于控制同一方向的持仓数量,避免单边风险过大。
参数说明:
- false:允许同方向开多单,仅受「单笔最大手数」「最大持仓笔数」限制
- true(默认):每个方向最多持有 1 单(最多 1 多 + 1 空)
使用场景:
-
保守型交易者:建议设置为 true
- 严格控制风险敞口
- 避免单边持仓过重
- 适合波动较大的行情
-
激进型交易者:可设置为 false
- 允许同方向加仓
- 在强趋势行情中获取更多盈利
- 但需要配合"最大开仓手数"参数控制总风险
示例:
设置:单方向最多持有一单 = true
场景1:当前持有1个多单
- 新的多单信号出现 → ❌ 被忽略(已有多单)
- 新的空单信号出现 → ✅ 可以开仓(空单方向无持仓)
场景2:当前持有1个多单 + 1个空单
- 新的多单信号出现 → ❌ 被忽略(已有多单)
- 新的空单信号出现 → ❌ 被忽略(已有空单)
连续亏损保护功能 ⭐
此功能用于在连续亏损后自动暂停交易,避免在不利行情中持续亏损。
核心机制:
- 实时监控每笔交易的盈亏结果(通过
OnTradeTransaction事件) - 当连续亏损达到设定次数时,自动进入"冷冻期"
- 冷冻期内禁止开新仓,直到指定数量的K线走完
- 冷冻期结束后自动解除,连续亏损计数器重置为0
参数说明:
-
连续亏损次数触发冷冻:默认
3- 设置为
0:功能完全禁用 - 设置为
3:连续亏损3笔后触发冷冻(推荐值) - 任何盈利单都会将计数器归零
- 设置为
-
冷冻K线根数:默认
60- 设置为
0:功能完全禁用 - 设置为
60:冷冻期间禁止开仓,直到60根K线走完(M1周期约1小时) - K线周期取决于"K线周期"参数设置
- 设置为
工作流程:
步骤1:监控交易结果
- 订单平仓后,检测盈亏(包含手续费和隔夜利息)
- 亏损 → 连续亏损计数器 +1
- 盈利 → 连续亏损计数器归零
步骤2:触发冷冻条件
- 当连续亏损计数器 >= 设定次数时
- 记录当前K线数量
- 计算冷冻结束K线数 = 当前K线数 + 冷冻K线根数
- 打印冷冻提示信息
步骤3:冷冻期检查
- 每次开仓前检查是否处于冷冻期
- 如果当前K线数 < 冷冻结束K线数 → 拒绝开仓
- 如果当前K线数 >= 冷冻结束K线数 → 解除冷冻,重置计数器
步骤4:冷冻解除
- 自动打印解除提示
- 连续亏损计数器重置为0
- 恢复正常交易
使用场景:
-
震荡行情保护(默认配置)
- 设置:连续亏损3次 + 冷冻60根K线
- 效果:在频繁假突破的震荡行情中,连续亏损3次后暂停1小时(M1周期)
- 避免在不利行情中持续开仓亏损
-
回测优化
- 通过历史数据测试不同参数组合
- 找到最佳的连续亏损阈值和冷冻时长
- 提高策略整体盈利能力
-
风险控制
- 配合"最大开仓手数"和"单方向持仓限制"
- 多层次控制交易风险
- 保守型交易者建议启用
示例:
参数设置:
- 连续亏损次数触发冷冻 = 3
- 冷冻K线根数 = 10
- K线周期 = M1
交易流程:
时间 09:00 → 开仓多单 → 止损平仓(亏损)→ 连续亏损计数 = 1
时间 09:05 → 开仓空单 → 止损平仓(亏损)→ 连续亏损计数 = 2
时间 09:10 → 开仓多单 → 止损平仓(亏损)→ 连续亏损计数 = 3
触发冷冻!
- 当前K线数:150
- 冷冻至K线数:160(150 + 10)
- 打印:=== 触发交易冷冻 ===
冷冻期内(09:10 - 09:20):
- 所有开仓信号被忽略
- 调试模式下打印:交易冷冻中 - 剩余K线数: X
时间 09:20(K线数达到160):
- 自动解除冷冻
- 打印:=== 交易冷冻解除 ===
- 连续亏损计数器重置为0
- 恢复正常交易
注意事项:
-
功能启用条件
- 两个参数都必须 > 0 才会启用
- 任一参数为 0,功能完全禁用
-
计数逻辑
- 仅统计"净亏损"(盈亏 + 手续费 + 隔夜利息)
- 盈亏持平(净盈利约等于0)不会重置计数器
- 任何盈利单(净盈利 > 0)立即重置计数器
-
冷冻期计算
- 基于K线根数,不是绝对时间
- 周末或节假日市场休市时,K线不增加,冷冻期相应延长
- 建议根据具体交易品种和周期调整参数
-
与其他功能的关系
- 冷冻期内不影响已有持仓的管理(止损、止盈、移动止损仍正常工作)
- 仅阻止新开仓,不会强制平仓现有持仓
- 可配合"单方向持仓限制"等功能使用
禁止手工单功能说明 ⭐
问题背景: 在EA自动交易过程中,手工开单可能会干扰EA的整体策略逻辑和风险管理,导致:
- 破坏EA的仓位管理计划
- 影响资金管理和风险控制
- 与EA策略产生冲突
功能说明:
- 启用后,EA会自动检测并平掉所有手工单(magic number = 0的订单)
- 仅处理当前品种(_Symbol)的手工单
- 平仓后会在日志中打印详细信息
识别原理: 在MQL5中,订单都有一个magic number(魔术号)属性:
- 手工单:magic number = 0(默认值)
- EA开单:magic number = EA设定的值(本策略默认20260516)
参数说明:
-
true(默认):启用保护,自动平掉手工单
- 每个Tick检查一次
- 发现手工单立即平仓
- 打印平仓日志:
【禁止手工单】已平掉手工单 - Ticket:xxx 类型:多单/空单
-
false:允许手工单与EA单共存
- 手工单和EA单可以同时存在
- 手工单不会被EA管理(不会移动止损等)
- 适合需要手工干预的场景
使用场景:
-
完全自动化交易(推荐设置:true)
- 避免误操作影响EA策略
- 确保严格执行EA逻辑
- 防止情绪化交易
-
半自动化交易(设置:false)
- 允许手工单和EA单并存
- 可以手工补仓或对冲
- 需要手动管理手工单的风险
示例:
参数设置:禁止手工单 = true
情况1:用户在MT5手动开了1个多单
- EA在下一个Tick检测到该订单的magic=0
- 自动平掉该订单
- 打印:【禁止手工单】已平掉手工单 - Ticket:12345 类型:多单
情况2:EA自动开了1个多单(magic=20260516)
- EA检测到magic != 0,确认是EA自己开的单
- 不会平仓,正常管理(移动止损等)
情况3:其他EA开的单(magic=99999)
- EA检测到magic != 0,确认不是手工单
- 不会平仓,但也不会管理
注意事项:
-
仅处理当前品种
- 只平掉当前EA运行品种的手工单
- 不会影响其他品种的手工单
-
实时检测
- 每个Tick都会检查
- 手工单会在极短时间内被平掉
-
与其他功能的关系
- 不影响EA自身的开仓逻辑
- 不影响EA的风险管理功能
- 可配合所有其他参数使用
-
平仓失败处理
- 如果平仓失败(网络问题等),会打印错误日志
- 下一个Tick会继续尝试平仓
反向突破容忍度(新功能)⭐
问题背景: 在趋势行情中,可能会出现反向突破K线(回调),导致原本完整的波段被"切断",使策略无法识别出肉眼可见的有效波段。
示例:
价格从2600上涨到2650(涨幅50点)
中间出现一根空单突破K线(回调到2640)
原有逻辑:
- 波段被切断为:2600→2640 和 2640→2650
- 每段都不足1000点,无法识别为有效波段 ✗
容忍模式(设置30%):
- 回调10点 ÷ 波段50点 = 20% < 30%
- 回撤在容忍范围内,继续计算完整波段
- 识别出2600→2650的有效波段 ✓
参数说明:
- 0%(默认):不容忍任何反向突破,保持原有逻辑
- 10-20%:容忍小幅回调,适合短期趋势
- 30-40%:容忍中等回调,适合日内波段
- 50%以上:容忍大幅回调,可能识别出更大的波段(但也可能误判)
推荐设置:
- 保守型:0-10%
- 标准型:20-30%
- 激进型:30-50%
注意事项:
- 设置为0时,完全保持原有逻辑,不影响现有回测结果
- 容忍度越高,识别的波段越大,但也可能包含更多噪音
- 建议先回测不同容忍度,找到最适合的数值
- 容忍度只影响波段识别,不影响止损止盈等其他逻辑
波段阈值范围说明
本策略使用波段范围筛选机制,只交易特定大小的波段:
为什么需要波段范围?
- 单一阈值的问题:传统策略只设置最小阈值(如0.1%),导致0.1%的小波段和5%的大波段都交易,风险收益特征差异巨大
- 范围筛选的优势:通过设置最小和最大阈值,只交易特定大小的波段,风险更可控
计算方式
- 以前一个极值点价格为基准,按百分比计算阈值范围
- 动态适应不同价格水平
示例说明
假设设置:
- 最小阈值:0.1%
- 最大阈值:10%
- 当前价格:2600
价格2600时的阈值范围:
- 最小阈值 = 2600 × 0.1% = 2.6美元(260点)
- 最大阈值 = 2600 × 10% = 260美元(26000点)
波段筛选结果:
- 波段 2.0美元(200点):< 最小阈值 → ❌ 不交易(波段太小)
- 波段 5.2美元(520点):在范围内 → ✅ 有效波段,可交易
- 波段 15美元(1500点):在范围内 → ✅ 有效波段,可交易
- 波段 30美元(3000点):> 最大阈值 → ❌ 不交易(波段太大)
价格4700时的阈值范围:
- 最小阈值 = 4700 × 0.1% = 4.7美元(470点)
- 最大阈值 = 4700 × 10% = 470美元(47000点)
参数调整建议
- 保守型:0.15% - 0.5%
- 标准型:0.1% - 10%(默认)
- 激进型:0.08% - 15%
止损止盈说明
- 止损:开仓价(或挂单触发价)± 止损点数 × Point
- 止盈:开仓价(或挂单触发价)± 止盈点数 × Point
- 移动止损(可选):浮盈 ≥ 止损点数对应的价格距离时,将止损移至成本价(仅一次)
示例(多单,触发价 2610,止损 200 点、止盈 300 点):
- 止损价 ≈ 2610 − 2.00 = 2608.00(黄金 2 位小数时按品种 Point 换算)
- 止盈价 ≈ 2610 + 3.00 = 2613.00