Files
zhangyangbin 6450b53084 feat: box
2026-05-30 10:42:53 +08:00
..
2026-05-30 10:42:53 +08:00
2026-05-24 16:17:00 +08:00
2026-05-18 20:03:21 +08:00
2026-05-18 09:17:40 +08:00
2026-05-18 20:03:21 +08:00
2026-05-19 09:10:22 +08:00

突破交易策略

基础概念

  • 平台: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

参数说明:

  1. 连续亏损次数触发冷冻:默认 3

    • 设置为 0:功能完全禁用
    • 设置为 3:连续亏损3笔后触发冷冻(推荐值)
    • 任何盈利单都会将计数器归零
  2. 冷冻K线根数:默认 60

    • 设置为 0:功能完全禁用
    • 设置为 60:冷冻期间禁止开仓,直到60根K线走完(M1周期约1小时)
    • K线周期取决于"K线周期"参数设置

工作流程:

步骤1:监控交易结果
- 订单平仓后,检测盈亏(包含手续费和隔夜利息)
- 亏损 → 连续亏损计数器 +1
- 盈利 → 连续亏损计数器归零

步骤2:触发冷冻条件
- 当连续亏损计数器 >= 设定次数时
- 记录当前K线数量
- 计算冷冻结束K线数 = 当前K线数 + 冷冻K线根数
- 打印冷冻提示信息

步骤3:冷冻期检查
- 每次开仓前检查是否处于冷冻期
- 如果当前K线数 < 冷冻结束K线数 → 拒绝开仓
- 如果当前K线数 >= 冷冻结束K线数 → 解除冷冻,重置计数器

步骤4:冷冻解除
- 自动打印解除提示
- 连续亏损计数器重置为0
- 恢复正常交易

使用场景:

  1. 震荡行情保护(默认配置)

    • 设置:连续亏损3次 + 冷冻60根K线
    • 效果:在频繁假突破的震荡行情中,连续亏损3次后暂停1小时(M1周期)
    • 避免在不利行情中持续开仓亏损
  2. 回测优化

    • 通过历史数据测试不同参数组合
    • 找到最佳的连续亏损阈值和冷冻时长
    • 提高策略整体盈利能力
  3. 风险控制

    • 配合"最大开仓手数"和"单方向持仓限制"
    • 多层次控制交易风险
    • 保守型交易者建议启用

示例:

参数设置:
- 连续亏损次数触发冷冻 = 3
- 冷冻K线根数 = 10
- K线周期 = M1

交易流程:
时间 09:00 → 开仓多单 → 止损平仓(亏损)→ 连续亏损计数 = 1
时间 09:05 → 开仓空单 → 止损平仓(亏损)→ 连续亏损计数 = 2
时间 09:10 → 开仓多单 → 止损平仓(亏损)→ 连续亏损计数 = 3

触发冷冻!
- 当前K线数:150
- 冷冻至K线数:160150 + 10)
- 打印:=== 触发交易冷冻 ===

冷冻期内(09:10 - 09:20):
- 所有开仓信号被忽略
- 调试模式下打印:交易冷冻中 - 剩余K线数: X

时间 09:20(K线数达到160):
- 自动解除冷冻
- 打印:=== 交易冷冻解除 ===
- 连续亏损计数器重置为0
- 恢复正常交易

注意事项:

  1. 功能启用条件

    • 两个参数都必须 > 0 才会启用
    • 任一参数为 0,功能完全禁用
  2. 计数逻辑

    • 仅统计"净亏损"(盈亏 + 手续费 + 隔夜利息)
    • 盈亏持平(净盈利约等于0)不会重置计数器
    • 任何盈利单(净盈利 > 0)立即重置计数器
  3. 冷冻期计算

    • 基于K线根数,不是绝对时间
    • 周末或节假日市场休市时,K线不增加,冷冻期相应延长
    • 建议根据具体交易品种和周期调整参数
  4. 与其他功能的关系

    • 冷冻期内不影响已有持仓的管理(止损、止盈、移动止损仍正常工作)
    • 仅阻止新开仓,不会强制平仓现有持仓
    • 可配合"单方向持仓限制"等功能使用

禁止手工单功能说明

问题背景: 在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管理(不会移动止损等)
    • 适合需要手工干预的场景

使用场景:

  1. 完全自动化交易(推荐设置:true

    • 避免误操作影响EA策略
    • 确保严格执行EA逻辑
    • 防止情绪化交易
  2. 半自动化交易(设置:false

    • 允许手工单和EA单并存
    • 可以手工补仓或对冲
    • 需要手动管理手工单的风险

示例:

参数设置:禁止手工单 = true

情况1:用户在MT5手动开了1个多单
- EA在下一个Tick检测到该订单的magic=0
- 自动平掉该订单
- 打印:【禁止手工单】已平掉手工单 - Ticket:12345 类型:多单

情况2EA自动开了1个多单(magic=20260516
- EA检测到magic != 0,确认是EA自己开的单
- 不会平仓,正常管理(移动止损等)

情况3:其他EA开的单(magic=99999
- EA检测到magic != 0,确认不是手工单
- 不会平仓,但也不会管理

注意事项:

  1. 仅处理当前品种

    • 只平掉当前EA运行品种的手工单
    • 不会影响其他品种的手工单
  2. 实时检测

    • 每个Tick都会检查
    • 手工单会在极短时间内被平掉
  3. 与其他功能的关系

    • 不影响EA自身的开仓逻辑
    • 不影响EA的风险管理功能
    • 可配合所有其他参数使用
  4. 平仓失败处理

    • 如果平仓失败(网络问题等),会打印错误日志
    • 下一个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%

注意事项:

  1. 设置为0时,完全保持原有逻辑,不影响现有回测结果
  2. 容忍度越高,识别的波段越大,但也可能包含更多噪音
  3. 建议先回测不同容忍度,找到最适合的数值
  4. 容忍度只影响波段识别,不影响止损止盈等其他逻辑

波段阈值范围说明

本策略使用波段范围筛选机制,只交易特定大小的波段:

为什么需要波段范围?

  • 单一阈值的问题:传统策略只设置最小阈值(如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