feat: 20260519

This commit is contained in:
zhangyangbin
2026-05-19 19:48:22 +08:00
parent 4223070543
commit 0e5a5b055d
6 changed files with 1415 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+400
View File
@@ -0,0 +1,400 @@
# 突破交易策略
## 基础概念
- 平台:MQL5
- 品种:XAU黄金
- 1美金:4100与4101之间相差1美金
- 1美金 = 100点
## 辅助指标
- 移动平均线(Moving Average
- 周期默认设置为:14
## 核心概念
- 突破K线:开盘价在均线下方,收盘价在均线上方,称之为多单突破K线,反之亦然
- 极值点:相邻两根突破K线之间所有K线(包括突破K线)中的最高价或最低价称之为极值点
- 有效波段:相邻两个极值点的价差达到波段阈值点数时,期间的所有K线(包含突破K线本身)组成的行情,称之为有效波段
## 开仓逻辑
- 价格突破有效波段的高点开多单,价格突破有效波点的低点开空单
- 该开仓逻辑仅适用最新的一个有效波段
- 止损和止盈基于开仓价的百分比计算,止盈 = 止损金额 × 盈亏比
- 浮盈达到止损金额后,即可将止损移动至成本价
- 已经开仓后,继续监控新的有效波段突破,每单开仓后就与有效波段无关了
## 参数设置
### 波段识别参数
- K线周期:支持参数设置,不跟随图表,默认 **1 Minute**
- MA周期:默认 **14**
- **最小波段阈值百分比:默认 0.1%**(波段必须 >= 此值才可能是有效波段)
- **最大波段阈值百分比:默认 1.0%**(波段必须 <= 此值才可能是有效波段)
- **有效波段范围:0.1% - 1.0%**(只交易此范围内的波段)
- **反向突破容忍度:默认0.0%(新功能 - 详见下方说明)**
### 风险管理参数
- 止损百分比:默认 **0.05%**(基于开仓价计算,最小1美元/100点)
- 盈亏比:默认 **1.5**(止盈 = 止损金额 × 盈亏比)
- 使用移动止损:默认 **false**(禁用移动止损功能)
- 最大持仓时间:默认 **5分钟**
### 仓位管理参数
- 使用复利模式:默认 **true**(启用复利模式)
- 固定手数:默认 **0.01手**
- 每500$开仓手数:默认 **0.05手**(复利模式有效)
- 最大开仓手数:默认 **99手**
- 单方向最多持有一单:默认 **true**(每个方向最多持有1单)
### 连续亏损保护参数
- 连续亏损次数触发冷冻:默认 **3**(设为0可禁用该功能)
- 冷冻K线根数:默认 **60**(设为0可禁用该功能)
### 手工单管理参数
- 禁止手工单:默认 **true**(自动平掉所有手工单)
## 补充说明
### 突破K线处理
- 如果出现多个多单突破K线,仅保留最低价更低的那个K线,反之亦然
- 多头有效波段之间,仅允许出现一个多单突破K线和一个空单突破K线,反之亦然
### 有效波段规则
- 一个有效波段只能开一单(无论是高点还是低点)
- 开仓后该波段立即失效
- 必须等新的有效波段形成才能再次开仓
### 单方向持仓限制
此参数用于控制同一方向的持仓数量,避免单边风险过大。
**参数说明:**
- **false(默认)**:允许同方向开多单,仅受"最大开仓手数"限制
- 例如:最大开仓手数=3时,可以同时持有3个多单,或3个空单,或2多1空等
- **true**:每个方向最多持有1单
- 多单方向:最多持有1个多单
- 空单方向:最多持有1个空单
- 最多同时持有1多+1空=2单
**使用场景:**
- **保守型交易者**:建议设置为 **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:20K线数达到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%
- 最大阈值:1.0%
- 当前价格:2600
**价格2600时的阈值范围:**
- 最小阈值 = 2600 × 0.1% = 2.6美元(260点)
- 最大阈值 = 2600 × 1.0% = 26美元(2600点)
**波段筛选结果:**
- 波段 2.0美元(200点):< 最小阈值 → ❌ 不交易(波段太小)
- 波段 5.2美元(520点):在范围内 → ✅ 有效波段,可交易
- 波段 15美元(1500点):在范围内 → ✅ 有效波段,可交易
- 波段 30美元(3000点):> 最大阈值 → ❌ 不交易(波段太大)
**价格4700时的阈值范围:**
- 最小阈值 = 4700 × 0.1% = 4.7美元(470点)
- 最大阈值 = 4700 × 1.0% = 47美元(4700点)
#### 参数调整建议
- **保守型**0.15% - 0.5%(只交易中小波段)
- **标准型**0.1% - 1.0%(默认,覆盖大多数波段)
- **激进型**0.08% - 2.0%(交易范围更广)
### 止损止盈说明
本策略使用**百分比模式**计算止损和止盈:
- **止损计算**:止损金额 = MAX(开仓价 × 止损百分比, 1美元)
- 示例1(高价位):开仓价2600,止损0.05%,计算值 = 2600 × 0.05% = 1.3美元 > 1美元,使用1.3美元
- 多单止损价 = 2600 - 1.3 = 2598.7
- 空单止损价 = 2600 + 1.3 = 2601.3
- 示例2(低价位):开仓价1500,止损0.05%,计算值 = 1500 × 0.05% = 0.75美元 < 1美元,使用最小值1美元
- 多单止损价 = 1500 - 1 = 1499.0
- 空单止损价 = 1500 + 1 = 1501.0
- **止盈计算**:止盈金额 = 止损金额 × 盈亏比
- 示例1:止损金额1.3美元,盈亏比1.5,止盈金额 = 1.3 × 1.5 = 1.95美元
- 多单止盈价 = 2600 + 1.95 = 2601.95
- 空单止盈价 = 2600 - 1.95 = 2598.05
- 示例2:止损金额1美元,盈亏比1.5,止盈金额 = 1 × 1.5 = 1.5美元
- 多单止盈价 = 1500 + 1.5 = 1501.5
- 空单止盈价 = 1500 - 1.5 = 1498.5
- **移动止损**(可选功能,默认启用):
- **触发条件**:当浮盈 >= 止损金额时触发
- **移动目标**:将止损移至成本价(开仓价)
- **移动次数**:仅移动一次(保本策略)
- **示例**:开仓价2603.24,止损金额1.30美元
- 当价格涨至2604.54(浮盈1.30)时,止损从2601.94移至2603.24
- 之后价格无论涨到多高,止损都保持在2603.24
- 即使回调至成本价,也能保本离场,不会亏损
- **开关控制**:可通过参数"使用移动止损"关闭此功能
- **最小止损保护**:无论百分比设置多小,止损金额始终不低于1美元(100点),避免止损过小导致频繁触发
- **移动止损的作用**
- ✅ 启用时:浮盈达标后锁定盈亏平衡,避免盈利单变亏损
- ❌ 禁用时:止损始终保持在初始位置,追求更高止盈,但风险更大
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.