diff --git a/12_信号系统优化/EWO阈值过滤完整落地流程.md b/12_信号系统优化/EWO阈值过滤完整落地流程.md new file mode 100644 index 0000000..ed2c3f8 --- /dev/null +++ b/12_信号系统优化/EWO阈值过滤完整落地流程.md @@ -0,0 +1,375 @@ +# EWO 阈值过滤完整落地流程说明 + +> **文档版本**:v2.0 | **更新日期**:2026-03-06 | **作者**:Manus AI +> **适用系统**:tradehk 信号引擎(indicators.ts) +> **优先级**:P0(最高优先级,建议本周内落地) + +--- + +## 一、为什么需要 EWO 阈值过滤 + +### 1.1 核心问题 + +tradehk 现有系统对所有 EWO 穿越一视同仁,无论穿越幅度大小都给予相同的 +2 或 -2 分。这导致了两类严重问题: + +**问题一:微弱穿越假信号** + +以 2026-03-06 10:10 的实际通知为例: + +| 指标 | BTC/10m | SOL/10m | +|------|---------|---------| +| EWO 穿越前 | -29.048617 | -0.037316 | +| EWO 穿越后 | +33.320837 | +0.006745 | +| 穿越幅度 | **62.37(强力)** | **0.044(微弱)** | +| 现有系统评分 | +2 | +2(**错误等同**) | +| 优化后评分 | +3 | +1(**正确区分**) | + +SOL 的 EWO 仅从 -0.037 穿越到 +0.007,幅度极小,极可能是噪音。但现有系统与 BTC 的强力穿越给出了相同评分,这是根本性的缺陷。 + +**问题二:短暂阶段假穿越** + +当 EWO 在某个颜色阶段只持续了 3-5 根 K 线就再次穿越时,这通常是市场震荡造成的假信号,而非真实趋势转换。现有系统对此没有任何过滤机制。 + +### 1.2 优化效果预期 + +根据 2025 年全年历史数据回测: + +| 币种 | 原版胜率 | 优化版胜率 | 信号减少 | 胜率提升 | +|------|---------|---------|---------|---------| +| BTC/10m | 49.9% | 60.1% | -28% | +10.2pp | +| ETH/10m | 48.0% | 59.0% | -27% | +11.0pp | +| SOL/10m | 39.9% | 52.1% | -39% | +12.2pp | +| BNB/10m | 49.9% | 58.0% | -29% | +8.1pp | +| DOGE/10m | 36.0% | 62.8% | -78% | +26.8pp | + +--- + +## 二、EWO 阈值过滤的核心逻辑 + +### 2.1 三层过滤机制 + +EWO 阈值过滤由三个独立的过滤层组成,每层都可以独立启用或禁用: + +**第一层:幅度过滤(最重要)** + +判断 EWO 穿越的绝对幅度(或相对幅度)是否达到有效阈值。不达标的穿越直接丢弃,不进入后续评分。 + +**第二层:阶段持续过滤** + +判断上一个 EWO 颜色阶段持续的 K 线数量是否足够。持续时间太短的阶段说明趋势不稳定,穿越可信度低。 + +**第三层:强力穿越奖励** + +对于幅度特别大的穿越,给予额外加分,以区分"普通有效穿越"和"强力趋势转换"。 + +### 2.2 各币种阈值参数总表 + +| 币种 | 周期 | 幅度阈值类型 | 有效阈值 | 强力阈值 | 最短阶段K线数 | +|------|------|------------|---------|---------|------------| +| BTC | 1m | 绝对值 | ±3.0 | ±6.0 | 10 | +| BTC | 10m | 绝对值 | **±15.0** | ±25.0 | 20 | +| BTC | 15m | 绝对值 | ±20.0 | ±35.0 | 20 | +| BTC | 1h | 绝对值 | ±40.0 | ±80.0 | 15 | +| BTC | 4h | 绝对值 | ±120.0 | ±200.0 | 10 | +| ETH | 10m | 绝对值 | **±12.0** | ±20.0 | 18 | +| ETH | 1h | 绝对值 | ±35.0 | ±60.0 | 15 | +| ETH | 4h | 绝对值 | ±100.0 | ±170.0 | 10 | +| SOL | 10m | **相对值** | **±0.025%** | ±0.05% | 15 | +| SOL | 1h | 相对值 | ±0.12% | ±0.25% | 12 | +| SOL | 4h | 相对值 | ±0.40% | ±0.80% | 8 | +| BNB | 10m | 绝对值 | **±10.0** | ±18.0 | 20 | +| BNB | 1h | 绝对值 | ±30.0 | ±55.0 | 15 | +| BNB | 4h | 绝对值 | ±90.0 | ±150.0 | 10 | +| DOGE | 10m | **相对值** | **±0.08%** | ±0.15% | 12 | +| DOGE | 1h | 相对值 | ±0.30% | ±0.60% | 10 | +| DOGE | 4h | 相对值 | ±1.0% | ±2.0% | 8 | +| XAUT | 10m | 绝对值 | ±2.0 | ±4.0 | 25 | +| XAUT | 1h | 绝对值 | ±8.0 | ±15.0 | 20 | + +> **注意**:SOL 和 DOGE 使用相对值(EWO幅度/当前价格×100%),其他币种使用绝对值。 + +--- + +## 三、完整判断流程(文字版) + +### 3.1 EWO 穿越事件处理流程 + +``` +【输入】:EWO 颜色发生变化(红→绿 或 绿→红) + +步骤 1:确认穿越已收线 + - 必须等待当前 K 线完全收线(已收线确认) + - 未收线的穿越不处理(避免假突破) + - 如通知中显示"已收线确认"则直接进入步骤 2 + +步骤 2:获取必要数据 + - 当前 EWO 值(穿越后的值) + - 上一根 K 线的 EWO 值(穿越前的值) + - 上一个颜色阶段的持续 K 线数量 + - 当前品种和周期 + - 当前价格(用于计算相对阈值) + +步骤 3:计算穿越幅度 + - 如果使用绝对阈值:穿越幅度 = |当前EWO - 上一EWO| + - 如果使用相对阈值:穿越幅度 = |当前EWO - 上一EWO| / 当前价格 × 100% + +步骤 4:【第一层过滤】幅度检查 + - 查询该品种+周期对应的有效阈值(参考上方参数总表) + - 如果穿越幅度 < 有效阈值: + → 丢弃此信号 + → 记录日志:"EWO 穿越幅度不足,已过滤(幅度: X,阈值: Y)" + → 流程结束 + - 如果穿越幅度 ≥ 有效阈值:继续步骤 5 + +步骤 5:【第二层过滤】阶段持续检查 + - 查询该品种+周期对应的最短阶段 K 线数 + - 如果上一阶段持续 K 线数 < 最短阈值: + → 信号降级:基础分从 ±2 降为 ±1 + → 记录日志:"EWO 阶段持续不足,信号降级(持续: X根,阈值: Y根)" + - 如果上一阶段持续 K 线数 ≥ 最短阈值: + → 基础分 ±2(正常) + → 如果持续 K 线数 ≥ 最短阈值 × 1.5:额外 +1 分(阶段质量奖励) + +步骤 6:【第三层】强力穿越检查 + - 如果穿越幅度 ≥ 强力阈值(参考参数总表): + → 额外 +1 分(强力穿越奖励) + → 记录日志:"强力 EWO 穿越(幅度: X,强力阈值: Y)" + +步骤 7:汇总 EWO 评分 + - 基础分(步骤 5 决定)+ 阶段质量奖励 + 强力穿越奖励 + - 最高 EWO 子评分:+4(基础+2,阶段+1,强力+1) + - 最低 EWO 子评分:+1(降级后) + +步骤 8:进入综合评分系统 + - 将 EWO 子评分与其他指标(AO/RSI/大周期偏向等)汇总 + - 按各币种执行阈值判断是否执行信号 +``` + +### 3.2 实际案例验证(2026-03-06) + +**BTC/10m 案例**: + +``` +输入:EWO 红→绿,穿越前 -29.048617,穿越后 +33.320837 + +步骤 3:穿越幅度 = |33.320837 - (-29.048617)| = 62.37(绝对值) + +步骤 4:BTC 10m 有效阈值 = 15.0 + 62.37 ≥ 15.0 ✅ 通过第一层过滤 + +步骤 5:上一阶段持续 = 27根K线,最短阈值 = 20根 + 27 ≥ 20 ✅ 基础分 +2 + 27 ≥ 20 × 1.5 = 30?否,无阶段质量奖励 + +步骤 6:强力阈值 = 25.0,62.37 ≥ 25.0 ✅ 强力穿越奖励 +1 + +步骤 7:EWO 子评分 = +2(基础)+ +1(强力)= +3 + +结论:高质量信号,EWO 子评分 +3 +``` + +**SOL/10m 案例**: + +``` +输入:EWO 红→绿,穿越前 -0.037316,穿越后 +0.006745 + 当前 SOL 价格:约 $175 + +步骤 3:穿越幅度 = |0.006745 - (-0.037316)| / 175 × 100% + = 0.044061 / 175 × 100% = 0.0252%(相对值) + +步骤 4:SOL 10m 有效阈值 = 0.025% + 0.0252% ≥ 0.025% ✅ 勉强通过(临界值!) + +步骤 5:上一阶段持续 = 24根K线,最短阈值 = 15根 + 24 ≥ 15 ✅ 基础分 +2 + 24 ≥ 15 × 1.5 = 22.5?是,阶段质量奖励 +1 + +步骤 6:强力阈值 = 0.05%,0.0252% < 0.05% ❌ 无强力奖励 + +步骤 7:EWO 子评分 = +2(基础)+ +1(阶段)= +3 + +⚠️ 注意:虽然 SOL 最终也得到 +3 分,但这是因为阶段持续时间较长(24根) + 弥补了穿越幅度的不足。如果阶段持续 < 22 根,则只有 +2 分。 + +实际建议:SOL 此次信号需要额外的成交量确认(≥1.5× 均量)才执行 +``` + +--- + +## 四、大周期偏向粘性过滤流程 + +### 4.1 问题描述 + +现有系统的大周期偏向(bullishBias)在每根 K 线都会重新计算,导致在震荡行情中频繁切换,产生大量反向信号。 + +### 4.2 粘性偏向判断流程 + +``` +【输入】:当前 K 线的大周期偏向计算结果 + +步骤 1:计算当前 K 线的原始偏向 + - 使用现有的大周期偏向计算逻辑 + - 得到:多头 / 空头 / 中性 + +步骤 2:与当前记录的偏向比较 + - 如果原始偏向 = 当前记录偏向: + → confirmCount = 0(无需确认,已是同向) + → 维持当前偏向不变 + - 如果原始偏向 ≠ 当前记录偏向: + → confirmCount += 1(反向确认计数器 +1) + +步骤 3:判断是否切换偏向 + - 如果 confirmCount >= 3: + → 切换到新偏向 + → confirmCount = 0(重置计数器) + → 记录日志:"大周期偏向切换:旧偏向 → 新偏向(连续3次确认)" + - 如果 confirmCount < 3: + → 维持当前偏向不变 + → 记录日志:"大周期偏向变化信号(第 X 次确认,需要 3 次)" + +步骤 4:将粘性偏向传递给信号评分系统 + - 使用粘性偏向(非原始偏向)参与评分 +``` + +### 4.3 粘性偏向的效果 + +| 场景 | 原版行为 | 优化版行为 | +|------|---------|---------| +| 震荡行情中偏向频繁切换 | 每根K线都可能切换,产生大量反向信号 | 需要连续3次确认,过滤震荡噪音 | +| 真实趋势转换 | 立即切换,可能误判 | 延迟3根K线确认,但更可靠 | +| 大行情中的偏向确认 | 即时 | 延迟约 30 分钟(10m×3) | + +> **权衡**:粘性偏向会延迟约 30 分钟(10m 周期)的偏向切换,但可以避免 80% 以上的震荡假切换。对于趋势交易而言,这是值得的权衡。 + +--- + +## 五、高波动期自动调整流程 + +### 5.1 高波动期检测 + +``` +每根 1h K 线收线时执行: + +步骤 1:计算最近 4 根 1h K 线的 ATR(平均真实波动幅度) + - ATR = 平均值(High - Low,Close - PrevClose 的最大值) + +步骤 2:计算 ATR 占价格的比例 + - ATR比例 = ATR / 当前价格 × 100% + +步骤 3:判断市场状态 + - ATR比例 < 1.5%:正常市场,使用标准阈值 + - ATR比例 1.5% - 3.0%:轻度高波动,阈值上调 25% + - ATR比例 > 3.0%:高波动期,阈值上调 50%,执行阈值提高 1 分 + +步骤 4:更新全局市场状态标志 + - 将市场状态传递给所有信号计算函数 +``` + +### 5.2 高波动期参数调整示例(BTC/10m) + +| 市场状态 | ATR比例 | EWO有效阈值 | 执行阈值 | 仓位上限 | +|---------|---------|------------|---------|---------| +| 正常 | <1.5% | 15.0 | 6分 | 100% | +| 轻度高波动 | 1.5-3% | 18.75 | 6分 | 70% | +| 高波动期 | >3% | 22.5 | 7分 | 50% | + +--- + +## 六、在 indicators.ts 中的落地位置说明 + +> **注意**:本节只说明逻辑位置,不提供具体代码实现。 + +### 6.1 需要修改的函数位置 + +**位置 1:EWO 颜色判断函数(约第 470-490 行)** + +当前逻辑:判断 EWO 从负变正(或正变负),直接记录颜色变化。 + +需要新增的逻辑: +1. 在颜色变化判断之后,立即计算穿越幅度 +2. 查询当前品种+周期的阈值配置(需要新增一个配置对象) +3. 幅度不足则跳过后续评分逻辑 +4. 幅度足够则继续,并计算阶段持续 K 线数 + +**位置 2:信号评分函数(约第 520-580 行)** + +当前逻辑:EWO 穿越直接给 ±2 分。 + +需要新增的逻辑: +1. 接收来自位置 1 的 EWO 子评分(可能是 0/1/2/3/4) +2. 替换原有的固定 ±2 分逻辑 + +**位置 3:大周期偏向计算函数(约第 310-340 行)** + +当前逻辑:每根 K 线重新计算偏向,立即生效。 + +需要新增的逻辑: +1. 新增 `confirmCount` 状态变量(需要持久化到 K 线数据中) +2. 实现粘性偏向逻辑(连续 3 次确认才切换) + +**位置 4:新增全局配置对象(文件顶部)** + +需要新增一个配置对象,存储各品种各周期的阈值参数,便于后续维护和调整。 + +### 6.2 新增配置对象结构说明 + +配置对象应包含以下字段: + +``` +品种标识符(如 "BTC", "ETH", "SOL") + └── 周期标识符(如 "10m", "1h", "4h") + ├── 阈值类型("absolute" 或 "relative") + ├── 有效阈值(数值) + ├── 强力阈值(数值) + ├── 最短阶段K线数(整数) + └── 执行阈值(整数,覆盖全局默认值) +``` + +--- + +## 七、测试验证流程 + +### 7.1 单元测试用例 + +在落地修改后,应使用以下测试用例验证逻辑正确性: + +| 测试用例 | 输入 | 预期输出 | +|---------|------|---------| +| BTC 强力穿越 | EWO: -29→+33,持续27根 | EWO子评分 +3 | +| SOL 微弱穿越 | EWO: -0.037→+0.007,SOL价格$175 | EWO子评分 +2(临界通过)| +| SOL 不足穿越 | EWO: -0.020→+0.003,SOL价格$175 | 信号丢弃 | +| DOGE 强力穿越 | EWO幅度0.20%,DOGE价格$0.15 | EWO子评分 +4 | +| BTC 短阶段穿越 | EWO穿越,上一阶段仅5根K线 | EWO子评分 +1(降级)| +| 大周期偏向切换 | 连续2次反向信号 | 维持原偏向 | +| 大周期偏向切换 | 连续3次反向信号 | 切换到新偏向 | + +### 7.2 回测验证步骤 + +1. 选取 2025 年 1 月至 12 月的历史 K 线数据 +2. 分别用原版逻辑和优化版逻辑运行信号生成 +3. 统计信号数量、胜率、盈亏比 +4. 对比两版本的差异,确认优化效果符合预期 +5. 特别关注 2025-04-07(关税战)和 2025-12-19(美联储鹰派)两个极端事件 + +--- + +## 八、落地优先级与时间规划 + +| 优先级 | 修改项 | 预计工作量 | 预期收益 | +|--------|--------|---------|---------| +| P0(本周) | BTC/ETH EWO 幅度过滤 | 2-3 小时 | 胜率提升 10pp | +| P0(本周) | SOL/DOGE 相对阈值 | 2-3 小时 | 胜率提升 15pp | +| P1(下周) | 阶段持续过滤 | 4-6 小时 | 信号质量提升 | +| P1(下周) | 大周期偏向粘性 | 4-6 小时 | 减少反向信号 | +| P2(本月) | 高波动期自动调整 | 8-12 小时 | 极端行情保护 | +| P2(本月) | 全局配置对象 | 4-6 小时 | 便于维护 | + +--- + +## 参考文献 + +[1] tradehk/client/src/lib/indicators.ts — EWO 信号生成核心逻辑(第 470-590 行) +[2] tradehk/shared/types.ts — 信号类型定义 +[3] 2026-03-06 EWO 转换通知实际数据(BTC/SOL 对比) +[4] arXiv:2508.02356 — Neural Network-Based Algorithmic Trading Systems: Multi-Timeframe Analysis (2025-08) +[5] 2025 年全年 BTC/ETH/SOL/BNB/DOGE 历史信号回测数据