feat: 20260519
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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线数:160(150 + 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 类型:多单
|
||||
|
||||
情况2:EA自动开了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.
Reference in New Issue
Block a user