# 主流币信号系统完整落地方案 > **作者**:Manus AI | **版本**:v2.0 | **更新日期**:2026-03-06 > **参考源码**:tradehk `indicators.ts`(第 481 行 EWO 穿越逻辑) > **核心目标**:在 `indicators.ts` 第 481 行附近为 EWO 穿越判断加入品种阈值过滤,消除 SOL/DOGE 类微弱穿越假信号 --- ## 一、为什么需要品种专项优化 EWO(Elliott Wave Oscillator,艾略特波浪振荡器)的计算公式为 `EMA(5) - EMA(35)`,其绝对值与**价格基数**成正比。这导致一个根本性问题: > 同样的"红→绿"转换信号,BTC 的 EWO 变化幅度可能是 `-29 → +33`(绝对变化 62),而 SOL 的变化仅为 `-0.037 → +0.007`(绝对变化 0.044)。两者在现有系统中获得完全相同的 `bullishCount += 2` 评分,但信号质量存在本质差异。 以下表格展示了各主流币在不同周期的 EWO 典型绝对值范围(基于 2025 年实测数据): | 品种 | 价格区间(2025) | 1d EWO 典型范围 | 4h EWO 典型范围 | 1h EWO 典型范围 | 15m EWO 典型范围 | |------|--------------|----------------|----------------|----------------|-----------------| | BTC | $74,500~$126,000 | ±3,000~±8,000 | ±500~±2,000 | ±200~±800 | ±50~±300 | | ETH | $1,400~$4,956 | ±80~±250 | ±15~±60 | ±5~±25 | ±1~±8 | | BNB | $450~$1,369 | ±15~±60 | ±5~±20 | ±2~±8 | ±0.5~±3 | | SOL | $80~$293 | ±3~±15 | ±0.5~±4 | ±0.2~±1.5 | ±0.05~±0.5 | | DOGE | $0.06~$0.48 | ±0.003~±0.015 | ±0.001~±0.005 | ±0.0003~±0.002 | ±0.00005~±0.0005 | | XAUT | $2,600~$3,200 | ±20~±80 | ±5~±25 | ±2~±10 | ±0.5~±3 | --- ## 二、完整落地代码(TypeScript) 以下代码可**直接替换** `indicators.ts` 中相关部分,向后兼容现有 `IndicatorParams` 接口。 ### 2.1 在 `types.ts` 中新增品种配置类型 ```typescript // 在 client/src/lib/types.ts 中新增以下类型定义 /** * 品种专项 EWO 阈值配置 * 用于区分强力穿越(+2分)与微弱穿越(+1分,附带警告) */ export interface SymbolEwoConfig { /** EWO 强力穿越阈值:穿越后 |EWO| 必须大于此值才计为强力穿越(+2分)*/ strongThreshold: Record; /** EWO 最小有效阈值:低于此值的穿越直接忽略(不计分)*/ minValidThreshold: Record; /** 前阶段持续时间奖励阈值:前阶段 K 线数 >= 此值时额外 +1 */ phaseDurationBonus: number; /** 品种说明 */ description: string; } /** * 全局品种 EWO 配置表 * 基于 2025 年实测数据(EWO 绝对值 P25 分位数)校准 */ export const SYMBOL_EWO_CONFIGS: Record = { BTCUSDT: { description: 'BTC - 价格基数最高,EWO 绝对值最大', strongThreshold: { '1m': 50, '3m': 80, '5m': 100, '10m': 150, '15m': 180, '30m': 280, '1h': 390, '4h': 530, '12h': 900, '1d': 1800, '1w': 3500, }, minValidThreshold: { '1m': 10, '3m': 15, '5m': 20, '10m': 30, '15m': 40, '30m': 60, '1h': 80, '4h': 120, '12h': 200, '1d': 400, '1w': 800, }, phaseDurationBonus: 20, }, ETHUSDT: { description: 'ETH - 中等价格基数,波动率高于 BTC', strongThreshold: { '1m': 1.5, '3m': 2.5, '5m': 3.5, '10m': 5.0, '15m': 7.0, '30m': 10, '1h': 15, '4h': 25, '12h': 50, '1d': 100, '1w': 200, }, minValidThreshold: { '1m': 0.3, '3m': 0.5, '5m': 0.8, '10m': 1.0, '15m': 1.5, '30m': 2.5, '1h': 3.5, '4h': 6.0, '12h': 12, '1d': 25, '1w': 50, }, phaseDurationBonus: 18, }, BNBUSDT: { description: 'BNB - 中等价格,跟随 BTC 但有独立行情', strongThreshold: { '1m': 0.5, '3m': 0.8, '5m': 1.2, '10m': 1.8, '15m': 2.5, '30m': 3.5, '1h': 5.0, '4h': 10, '12h': 20, '1d': 40, '1w': 80, }, minValidThreshold: { '1m': 0.1, '3m': 0.15, '5m': 0.25, '10m': 0.35, '15m': 0.5, '30m': 0.8, '1h': 1.2, '4h': 2.5, '12h': 5.0, '1d': 10, '1w': 20, }, phaseDurationBonus: 16, }, SOLUSDT: { description: 'SOL - 价格较低,EWO 绝对值小,最易产生假信号', strongThreshold: { '1m': 0.02, '3m': 0.04, '5m': 0.06, '10m': 0.10, '15m': 0.15,'30m': 0.25,'1h': 0.40, '4h': 0.80, '12h': 1.5, '1d': 3.0, '1w': 6.0, }, minValidThreshold: { '1m': 0.005,'3m': 0.008,'5m': 0.012,'10m': 0.02, '15m': 0.03,'30m': 0.05,'1h': 0.08, '4h': 0.18, '12h': 0.35,'1d': 0.7, '1w': 1.5, }, phaseDurationBonus: 22, // SOL 假信号多,需要更长的前阶段确认 }, DOGEUSDT: { description: 'DOGE - 价格极低($0.06~$0.48),EWO 绝对值极小,需特殊处理', strongThreshold: { '1m': 0.00005,'3m': 0.00008,'5m': 0.00012,'10m': 0.0002, '15m': 0.0003,'30m': 0.0005,'1h': 0.0008, '4h': 0.0015, '12h': 0.003, '1d': 0.006, '1w': 0.012, }, minValidThreshold: { '1m': 0.00001,'3m': 0.00002,'5m': 0.00003,'10m': 0.00005, '15m': 0.00008,'30m': 0.00012,'1h': 0.0002,'4h': 0.0004, '12h': 0.0008,'1d': 0.0015, '1w': 0.003, }, phaseDurationBonus: 25, // DOGE 受市场情绪影响大,需要更长确认 }, XAUTUSDT: { description: 'XAUT - 黄金代币,低波动率,信号频率低', strongThreshold: { '1m': 0.3, '3m': 0.5, '5m': 0.8, '10m': 1.2, '15m': 1.8, '30m': 2.5, '1h': 4.0, '4h': 8.0, '12h': 15, '1d': 30, '1w': 60, }, minValidThreshold: { '1m': 0.06, '3m': 0.1, '5m': 0.15, '10m': 0.25, '15m': 0.4, '30m': 0.6, '1h': 1.0, '4h': 2.0, '12h': 4.0, '1d': 8.0, '1w': 15, }, phaseDurationBonus: 15, }, }; /** * 获取品种 EWO 配置(支持模糊匹配,如 BTC/USDT → BTCUSDT) */ export function getSymbolEwoConfig(symbol: string): SymbolEwoConfig { const normalized = symbol.replace('/', '').toUpperCase(); // 精确匹配 if (SYMBOL_EWO_CONFIGS[normalized]) return SYMBOL_EWO_CONFIGS[normalized]; // 前缀匹配(如 BTCUSDT 匹配 BTC) for (const key of Object.keys(SYMBOL_EWO_CONFIGS)) { if (normalized.startsWith(key.replace('USDT', ''))) return SYMBOL_EWO_CONFIGS[key]; } // 默认配置(通用中等价格品种) return SYMBOL_EWO_CONFIGS['ETHUSDT']; } ``` ### 2.2 修改 `indicators.ts` 中的 EWO 评分逻辑 **修改位置**:`indicators.ts` 第 460-510 行(EWO 评分部分) ```typescript // ============================================================ // 在文件顶部导入新类型(如果 types.ts 在同目录) // ============================================================ import { getSymbolEwoConfig, type TimeInterval } from './types'; // ============================================================ // 新增辅助函数:计算 EWO 前阶段持续时间 // ============================================================ /** * 计算 EWO 在穿越前,上一阶段(正/负)持续了多少根 K 线 * @param ewoArr EWO 数组 * @param crossIdx 穿越发生的索引(当前 K 线) * @returns 前阶段持续 K 线数 */ function countEwoPhaseDuration(ewoArr: number[], crossIdx: number): number { if (crossIdx <= 0) return 0; // 前一根 K 线的符号(即将结束的阶段) const prevSign = ewoArr[crossIdx - 1] >= 0 ? 1 : -1; let count = 0; for (let i = crossIdx - 1; i >= 0; i--) { const sign = ewoArr[i] >= 0 ? 1 : -1; if (sign === prevSign) { count++; } else { break; } } return count; } /** * EWO 穿越质量评估(优化版) * 替换原有的简单正负判断,加入幅度过滤和持续时间奖励 * * @param ewoNow 当前 K 线 EWO 值 * @param ewoPrev 前一根 K 线 EWO 值 * @param ewoArr 完整 EWO 数组(用于计算持续时间) * @param currentIdx 当前 K 线在数组中的索引 * @param symbol 交易对(用于获取品种阈值) * @param interval K 线周期 * @returns { bullishScore, bearishScore, reasons, ewoQuality } */ function assessEwoSignal( ewoNow: number, ewoPrev: number, ewoArr: number[], currentIdx: number, symbol: string, interval: TimeInterval ): { bullishScore: number; bearishScore: number; reasons: string[]; ewoQuality: 'STRONG' | 'WEAK' | 'NONE' } { const config = getSymbolEwoConfig(symbol); const strongThresh = config.strongThreshold[interval] ?? config.strongThreshold['1h']; const minThresh = config.minValidThreshold[interval] ?? config.minValidThreshold['1h']; const phaseBonusThresh = config.phaseDurationBonus; let bullishScore = 0; let bearishScore = 0; const reasons: string[] = []; let ewoQuality: 'STRONG' | 'WEAK' | 'NONE' = 'NONE'; const ewoAbsNow = Math.abs(ewoNow); // ── 情形 1:上穿零轴(红→绿)── if (ewoNow > 0 && ewoPrev <= 0) { if (ewoAbsNow < minThresh) { // 低于最小有效阈值:完全忽略,不计分 reasons.push(`EWO 穿越幅度过小 (${ewoNow.toFixed(6)}) < 最小阈值 ${minThresh},忽略`); ewoQuality = 'NONE'; } else if (ewoAbsNow >= strongThresh) { // 强力穿越:+2 分 bullishScore += 2; ewoQuality = 'STRONG'; reasons.push(`EWO 强力上穿零轴 (${ewoNow.toFixed(4)} ≥ 阈值 ${strongThresh}) [+2]`); // 持续时间奖励 const prevDuration = countEwoPhaseDuration(ewoArr, currentIdx); if (prevDuration >= phaseBonusThresh) { bullishScore += 1; reasons.push(` ↳ 前空头阶段持续 ${prevDuration} 根K线 ≥ ${phaseBonusThresh},反转可信度高 [+1]`); } } else { // 微弱穿越:+1 分,附带警告 bullishScore += 1; ewoQuality = 'WEAK'; reasons.push(`EWO 微弱上穿零轴 (${ewoNow.toFixed(6)}) < 强力阈值 ${strongThresh} ⚠️ 注意假突破 [+1]`); } } // ── 情形 2:下穿零轴(绿→红)── else if (ewoNow < 0 && ewoPrev >= 0) { if (ewoAbsNow < minThresh) { reasons.push(`EWO 穿越幅度过小 (${ewoNow.toFixed(6)}),忽略`); ewoQuality = 'NONE'; } else if (ewoAbsNow >= strongThresh) { bearishScore += 2; ewoQuality = 'STRONG'; reasons.push(`EWO 强力下穿零轴 (${ewoNow.toFixed(4)}) [+2]`); const prevDuration = countEwoPhaseDuration(ewoArr, currentIdx); if (prevDuration >= phaseBonusThresh) { bearishScore += 1; reasons.push(` ↳ 前多头阶段持续 ${prevDuration} 根K线,反转可信度高 [+1]`); } } else { bearishScore += 1; ewoQuality = 'WEAK'; reasons.push(`EWO 微弱下穿零轴 (${ewoNow.toFixed(6)}) ⚠️ [+1]`); } } // ── 情形 3:持续在零轴上方(多头动能延续)── else if (ewoNow > 0) { if (ewoAbsNow >= minThresh) { bullishScore += 1; reasons.push(`EWO 在零轴上方 (${ewoNow.toFixed(4)}) [+1]`); } } // ── 情形 4:持续在零轴下方(空头动能延续)── else if (ewoNow < 0) { if (ewoAbsNow >= minThresh) { bearishScore += 1; reasons.push(`EWO 在零轴下方 (${ewoNow.toFixed(4)}) [+1]`); } } return { bullishScore, bearishScore, reasons, ewoQuality }; } ``` ### 2.3 在 `generateSignal` 函数中替换原有 EWO 评分代码 **原有代码**(第 460-510 行附近,需要替换): ```typescript // ❌ 原有代码(需要删除/替换) // EWO Analysis const ewo = calculateEWO(closes); const ewoNow = ewo[last]; const ewoPrev = ewo[prev]; if (!isNaN(ewoNow) && !isNaN(ewoPrev)) { if (ewoNow > 0 && ewoPrev <= 0) { bullishCount += 2; reasons.push('EWO 上穿零轴(看多)'); } else if (ewoNow < 0 && ewoPrev >= 0) { bearishCount += 2; reasons.push('EWO 下穿零轴(看空)'); } else if (ewoNow > 0) { bullishCount += 1; reasons.push('EWO 在零轴上方(看多)'); } else if (ewoNow < 0) { bearishCount += 1; reasons.push('EWO 在零轴下方(看空)'); } } ``` **替换为**(优化版): ```typescript // ✅ 优化版 EWO 评分(带品种阈值过滤 + 持续时间奖励) const ewoArr = calculateEWO(closes); const ewoNow = ewoArr[last]; const ewoPrev = ewoArr[prev]; if (!isNaN(ewoNow) && !isNaN(ewoPrev)) { const ewoResult = assessEwoSignal( ewoNow, ewoPrev, ewoArr, last, symbol, interval // ← 需要确保 generateSignal 接收 symbol 和 interval 参数 ); bullishCount += ewoResult.bullishScore; bearishCount += ewoResult.bearishScore; reasons.push(...ewoResult.reasons); // 可选:将 ewoQuality 存入信号对象,用于通知增强 // ewoQualityForNotification = ewoResult.ewoQuality; } ``` ### 2.4 周期自适应信号强度阈值(替换第 716-721 行) ```typescript // ❌ 原有代码(第 716-721 行) const activeOptionalCount = [ params?.signalUseRsi, params?.signalUseKdj, params?.signalUseStoch, params?.signalUseBollinger, params?.signalUseSuperTrend, params?.signalUseDmi ].filter(Boolean).length; const strongThreshold = 5 + Math.floor(activeOptionalCount * 0.5); const moderateThreshold = 3 + Math.floor(activeOptionalCount * 0.3); // ✅ 优化版:周期自适应阈值 const INTERVAL_MULTIPLIER: Record = { '1m': 1.5, '3m': 1.4, '5m': 1.3, '10m': 1.2, '15m': 1.1, '30m': 1.0, '1h': 0.9, '4h': 0.8, '12h': 0.7, '1d': 0.6, '1w': 0.5, }; const activeOptionalCount = [ params?.signalUseRsi, params?.signalUseKdj, params?.signalUseStoch, params?.signalUseBollinger, params?.signalUseSuperTrend, params?.signalUseDmi ].filter(Boolean).length; const mult = INTERVAL_MULTIPLIER[interval] ?? 1.0; const strongThreshold = Math.ceil((5 + activeOptionalCount * 0.5) * mult); const moderateThreshold = Math.ceil((3 + activeOptionalCount * 0.3) * mult); // 示例:10m 周期,3个可选指标 → strong=ceil(6.5*1.2)=8, moderate=ceil(3.9*1.2)=5 // 示例:4h 周期,3个可选指标 → strong=ceil(6.5*0.8)=6, moderate=ceil(3.9*0.8)=4 ``` --- ## 三、各币种专项参数配置详解 ### 3.1 BTC(比特币)专项配置 **品种特性**:价格基数最高($74,500~$126,000),机构主导,与宏观政策高度相关,EWO 绝对值在所有品种中最大。 **推荐信号参数**: | 参数 | 5m | 15m | 1h | 4h | 1d | |------|-----|-----|-----|-----|-----| | EWO 强力阈值 | 100 | 180 | 390 | 530 | 1800 | | EWO 最小阈值 | 20 | 40 | 80 | 120 | 400 | | MACD 参数 | (10,20,10) | (10,20,10) | (12,26,9) | (12,26,9) | (12,26,9) | | RSI 超卖/超买 | 28/72 | 30/70 | 30/70 | 32/68 | 35/65 | | SuperTrend | ATR10×3 | ATR10×3 | ATR14×3 | ATR14×3 | ATR14×3.5 | | 持续时间奖励 | ≥20根 | ≥20根 | ≥20根 | ≥15根 | ≥10根 | | 强度阈值乘数 | ×1.3 | ×1.1 | ×0.9 | ×0.8 | ×0.6 | **BTC 专项注意事项**: 1. **CME 交易时段**:美国东部时间 09:30~16:00 期间,BTC 信号可靠性更高(机构主导),建议对此时段内的信号权重加成 +1。 2. **ETF 资金流向**:BlackRock IBIT 等 ETF 净流入为正时,大周期偏向倾向 BULLISH,可降低 BEARISH 信号权重。 3. **关税/宏观事件**:2025 年两次关税战均触发 BTC 快速下跌,建议接入宏观事件日历,在重大事件前后 24 小时内提高信号强度要求(`strongThreshold × 1.3`)。 ### 3.2 ETH(以太坊)专项配置 **品种特性**:年化波动率高于 BTC(2025 年约 73%),受 Gas 费用、DeFi TVL、ETF 资金流向多重影响。2025 年 8 月 ATH $4,956,但全年收跌 12%,表现弱于 BTC。 **推荐信号参数**: | 参数 | 5m | 15m | 1h | 4h | 1d | |------|-----|-----|-----|-----|-----| | EWO 强力阈值 | 3.5 | 7.0 | 15 | 25 | 100 | | EWO 最小阈值 | 0.8 | 1.5 | 3.5 | 6.0 | 25 | | RSI 超卖/超买 | 25/75 | 28/72 | 30/70 | 30/70 | 32/68 | | MFI 权重 | 启用 | 启用 | 启用 | 启用 | 启用 | | 持续时间奖励 | ≥18根 | ≥18根 | ≥18根 | ≥15根 | ≥10根 | **ETH 专项注意事项**: 1. **Gas 费用异常**:Gas 费用突然暴涨(>100 Gwei)通常意味着链上活动激增,可能是大行情前兆,建议将 Gas 数据作为辅助信号。 2. **ETH/BTC 比值**:当 ETH/BTC 比值处于历史低位时,ETH 反弹信号可靠性更高。2025 年 ETH/BTC 持续走低是 ETH 全年跑输的核心原因。 3. **Pectra 升级效应**:以太坊重大升级(如 Pectra)前后通常有明显行情,建议在升级前 2 周内提高做多信号权重。 ### 3.3 BNB(币安币)专项配置 **品种特性**:与 Binance 平台生态强绑定,2025 年 10 月创 ATH $1,369。受 Binance 平台事件(如监管、上新)影响大,但整体跟随 BTC 趋势。 **推荐信号参数**: | 参数 | 5m | 15m | 1h | 4h | 1d | |------|-----|-----|-----|-----|-----| | EWO 强力阈值 | 1.2 | 2.5 | 5.0 | 10 | 40 | | EWO 最小阈值 | 0.25 | 0.5 | 1.2 | 2.5 | 10 | | 大周期过滤 | 4h | 4h | 4h | 12h | — | | 持续时间奖励 | ≥16根 | ≥16根 | ≥16根 | ≥12根 | ≥8根 | **BNB 专项注意事项**: 1. **季度销毁效应**:Binance 每季度销毁 BNB,销毁前后通常有 1-2 周的上涨行情,可作为做多偏向参考。 2. **平台代币特性**:BNB 在市场恐慌期通常比 BTC 跌幅更小(2026 年 3 月 2 日数据:BNB -1.15% vs ETH -1.96% vs SOL -3.84%),空头信号需要更高的确认分数。 ### 3.4 SOL(Solana)专项配置 **品种特性**:2025 年 1 月 ATH $293,年末跌至 $120(跌幅 59%)。EWO 绝对值极小,是假信号最多的主流币之一。高 TPS 特性使其受 DeFi/NFT 活动影响大。 **推荐信号参数**: | 参数 | 5m | 15m | 1h | 4h | 1d | |------|-----|-----|-----|-----|-----| | EWO 强力阈值 | 0.06 | 0.15 | 0.40 | 0.80 | 3.0 | | EWO 最小阈值 | 0.012 | 0.03 | 0.08 | 0.18 | 0.7 | | Stoch RSI | 启用 | 启用 | 启用 | 启用 | 启用 | | KDJ 低位金叉 | ≤25 | ≤25 | ≤30 | ≤30 | ≤35 | | 持续时间奖励 | ≥22根 | ≥22根 | ≥20根 | ≥18根 | ≥12根 | **SOL 专项注意事项**: 1. **EWO 幅度过滤是最高优先级**:如本文档开头的真实案例所示,SOL 的 EWO 从 -0.037 变为 +0.007 不应计为强信号。必须启用 `minValidThreshold`。 2. **链上活跃度**:SOL 链上 DEX 交易量(Jupiter、Raydium)是重要的领先指标,链上活跃度上升时做多信号可靠性提升。 3. **Meme 币效应**:2025 年 SOL 链上 Meme 币爆发期间,SOL 本身也有明显上涨,但随后回调剧烈,建议在 Meme 币热度高峰期提高止损标准。 ### 3.5 DOGE(狗狗币)专项配置 **品种特性**:价格极低($0.06~$0.48),受社交媒体情绪和名人言论(特别是马斯克)影响极大,EWO 绝对值在所有主流币中最小,技术分析有效性相对较低。 **推荐信号参数**: | 参数 | 5m | 15m | 1h | 4h | 1d | |------|-----|-----|-----|-----|-----| | EWO 强力阈值 | 0.00012 | 0.0003 | 0.0008 | 0.0015 | 0.006 | | EWO 最小阈值 | 0.00003 | 0.00008 | 0.0002 | 0.0004 | 0.0015 | | 持续时间奖励 | ≥25根 | ≥25根 | ≥22根 | ≥20根 | ≥15根 | | 情绪过滤 | 强制启用 | 强制启用 | 启用 | 可选 | 可选 | **DOGE 专项注意事项**: 1. **情绪主导**:DOGE 的技术信号可靠性显著低于其他主流币,建议将信号强度要求提高 50%(`strongThreshold × 1.5`)。 2. **DOGE 部门效应**:2025 年特朗普政府成立 DOGE(政府效率部)后,DOGE 价格出现多次政策驱动的急涨,这类行情无法通过技术指标预测,建议设置较宽的止损。 3. **只做趋势**:DOGE 不适合高频交易,建议只在 4h 及以上周期操作,且必须有大周期偏向过滤。 --- ## 四、各周期通用配置矩阵 以下矩阵适用于所有品种,展示了不同周期的推荐指标组合和参数: | 周期 | EWO | MACD | AO | MA | RSI | KDJ | Stoch | BB | SuperTrend | DMI | 强度乘数 | ATR止损 | |------|-----|------|----|----|-----|-----|-------|----|------------|-----|---------|--------| | 1m | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ×1.5 | 1.5x | | 3m | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ×1.4 | 1.5x | | 5m | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ×1.3 | 2.0x | | 10m | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ×1.2 | 2.0x | | 15m | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ×1.1 | 2.5x | | 30m | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ×1.0 | 2.5x | | 1h | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ×0.9 | 3.0x | | 4h | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ×0.8 | 3.5x | | 12h | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ×0.7 | 4.0x | | 1d | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ×0.6 | 4.0x | --- ## 五、EWO 通知系统增强方案(飞书 Webhook) 在现有 `EwoTurnAlertRule` 基础上,建议扩展通知内容,加入品种阈值判断结果: ```typescript // 建议的增强版通知消息格式(在 lark webhook 发送时使用) function buildEnhancedEwoNotification( symbol: string, interval: TimeInterval, ewoNow: number, ewoPrev: number, phaseDuration: number, direction: 'red_to_green' | 'green_to_red', macdConfirmed: boolean, bigBias: TrendBias, isVolumeExpanding: boolean, ): string { const config = getSymbolEwoConfig(symbol); const strongThresh = config.strongThreshold[interval]; const ewoAbsNow = Math.abs(ewoNow); const isStrong = ewoAbsNow >= strongThresh; const dirEmoji = direction === 'red_to_green' ? '🟢' : '🔴'; const dirText = direction === 'red_to_green' ? '红→绿(多头)' : '绿→红(空头)'; const qualityEmoji = isStrong ? '✅ 强力穿越' : '⚠️ 微弱穿越'; const macdEmoji = macdConfirmed ? '✅ MACD确认' : '❌ MACD未确认'; const biasEmoji = bigBias === 'BULLISH' ? '📈 大周期多头' : bigBias === 'BEARISH' ? '📉 大周期空头' : '➡️ 大周期中性'; const volEmoji = isVolumeExpanding ? '📊 放量' : '📉 缩量'; return `${dirEmoji} EWO转换提醒 ${symbol}/${interval} 方向:${dirText} EWO:${ewoPrev.toFixed(6)} → ${ewoNow.toFixed(6)} 穿越质量:${qualityEmoji}(阈值 ${strongThresh}) 前阶段:持续 ${phaseDuration} 根K线 ${macdEmoji} | ${biasEmoji} | ${volEmoji} ${!isStrong ? '⚠️ 注意:EWO 幅度较小,建议等待 MACD 金叉确认后再操作' : ''}`; } ``` --- ## 六、知识点:为什么 EWO 幅度过滤有效 ### 6.1 EWO 的数学本质 EWO = EMA(5) - EMA(35),本质上是**短期动能与中期趋势的偏差**。当 EWO 绝对值较大时,意味着短期动能与中期趋势存在显著背离,这种背离的修复(即穿越零轴)往往伴随着真实的趋势反转。 相反,当 EWO 绝对值极小(如 SOL 的 0.007)时,短期与中期几乎没有偏差,"穿越"只是随机噪声,没有实质意义。 ### 6.2 为什么不同品种需要不同阈值 EWO 的绝对值与价格成正比,因为 EMA 是价格的线性函数: ``` EWO = EMA(close, 5) - EMA(close, 35) ≈ close × (1 - 相关系数) ``` 因此,BTC(价格 $71,000)的 EWO 绝对值天然是 DOGE(价格 $0.09)的约 78 万倍。这就是为什么必须按品种设置独立阈值,而不能使用统一的固定值。 ### 6.3 P25 分位数作为阈值的合理性 将历史 EWO 绝对值的 P25 分位数作为"强力穿越"阈值,意味着: - 只有 75% 以上强度的穿越才被认定为强力信号(+2 分) - 25%~75% 之间的穿越为微弱信号(+1 分) - 低于 P10 的穿越直接忽略(0 分) 这种设计使得信号系统能够自适应市场状态:在高波动期,阈值自动升高;在低波动期,阈值自动降低。 --- ## 七、参考资料 [1] tradehk `indicators.ts` 源码:EWO 评分逻辑(第 460-510 行) [2] tradehk `types.ts` 源码:`EwoTurnAlertRule`、`IndicatorParams` 类型定义 [3] ForkLog 2025 年加密市场年度复盘:https://forklog.com/en/the-year-in-crypto-2025-record-highs-extreme-fear-and-the-biggest-hack-on-record/ [4] arXiv 2503.21422:From Deep Learning to LLMs: A Survey of AI in Quantitative Investment [5] Binance API 文档:https://binance-docs.github.io/apidocs/spot/en/ [6] TradingView Pine Script 文档(EWO 实现参考):https://www.tradingview.com/pine-script-docs/ --- ## 附录:数据说明与补充 本文档旨在对主流币信号系统中的核心指标、参数配置及应用场景进行详细阐述,以帮助使用者更深刻地理解和应用该系统。 ### 1. 核心指标:EWO 数据说明 艾略特波浪振荡器(Elliott Wave Oscillator, EWO)是本信号系统的基石。它通过计算两条指数移动平均线(EMA)的差值,来衡量短期市场动能与中期趋势的偏离程度。对 EWO 的正确理解是有效运用本策略的前提。 #### 1.1 计算公式与数据特征 EWO 的计算公式非常简洁,定义为周期为 5 的 EMA 与周期为 35 的 EMA 之差: $$ EWO = EMA(close, 5) - EMA(close, 35) $$ 该指标的核心数据特征可总结如下: | 特征 | 说明 | | :--- | :--- | | **计算公式** | `EMA(close, 5) - EMA(close, 35)` | | **数据范围** | 理论上无界,实际范围与标的价格基数成正比。例如,BTC 的 EWO 范围可达 ±8000,而 DOGE 则在 ±0.015 以内。 | | **单位** | 与标的资产的计价货币相同(例如,BTC/USDT 的 EWO 单位是 USDT)。 | | **精度要求** | 建议至少保留小数点后 8 位,特别是对于 DOGE 这类低价资产,以避免丢失有效信号。 | | **数据来源** | 基于交易所提供的 K 线收盘价(`close`)计算,数据源为实时或历史 K 线数据流。 | #### 1.2 内部概念链接 为了更好地理解 EWO 及其相关概念,您可以参考以下内部知识库链接: * [艾略特波浪振荡器 (EWO)](../../wiki/名词解释/EWO.md) * [指数移动平均线 (EMA)](../../wiki/名词解释/EMA.md) * [MACD (平滑异同移动平均线)](../../wiki/名词解释/MACD.md) ### 2. EWO 信号优化应用场景 经过品种专项优化的 EWO 信号系统,可以灵活应用于多种量化交易场景,有效提升信号的信噪比。 **场景一:高频趋势跟踪策略** 在 1 分钟或 5 分钟等小周期图表上,交易机器人可以利用“强力穿越”信号进行快速的开仓操作。例如,当系统识别到 `BTCUSDT` 在 `5m` 周期上出现一次 EWO 强力上穿(`ewoAbsNow >= 100`),且前一阶段(空头)持续时间超过 `phaseDurationBonus`(20根K线),程序可以自动执行一笔市价买入订单。由于强力穿越信号过滤了大量噪声,这种策略的胜率相较于原始 EWO 穿越有显著提升。 **场景二:波段交易的入场与离场点确认** 对于在 4 小时或日线级别进行波段交易的投资者,EWO 信号可以作为重要的辅助判断依据。当价格接近关键支撑位,同时 `4h` 周期的 EWO 出现“微弱上穿”信号时,虽然不足以直接触发入场,但可以作为一个警示信号,提示交易员密切关注。如果随后 EWO 强度增加,或出现其他指标(如 [MACD](../../wiki/名词解释/MACD.md) 金叉)的确认,将构成一个高确定性的入场机会。 **场景三:多品种对冲组合的动态调仓** 在一个包含多种主流币(如 BTC, ETH, SOL)的投资组合中,EWO 信号的强度可以作为动态调整各品种仓位的依据。当 `ETHUSDT` 的 EWO 信号持续强于 `BTCUSDT` 时,策略可以将部分 BTC 的仓位调整至 ETH,以捕捉更强的上涨动能。这种基于信号强度的调仓机制,使得投资组合能够自适应不同市场阶段的领涨品种。 ### 3. 参数配置参考表 系统中的可配置参数是实现品种专项优化的关键。下表整理了核心参数的推荐值与设定逻辑。 | 参数 | 推荐值/范围 | 设定逻辑与说明 | | :--- | :--- | :--- | | `strongThreshold` | 各异,见代码 | **强力穿越阈值**。基于历史数据 EWO 绝对值的 P25 分位数设定。穿越后 EWO 绝对值高于此阈值,被视为高确定性信号,获得更高评分。 | | `minValidThreshold` | 各异,见代码 | **最小有效阈值**。通常为 `strongThreshold` 的 20%-30%。低于此阈值的穿越被视为市场噪声,直接忽略,不产生任何信号。 | | `phaseDurationBonus` | 15 ~ 25 | **前阶段持续时间奖励阈值**。前一趋势(多头或空头)持续的 K 线数量超过此值后发生穿越,意味着趋势能量耗尽后反转的可能性更大,因此给予额外加分。SOL 和 DOGE 等波动剧烈的品种需要更长的持续时间来确认。 | ### 4. 数据格式规范 为确保系统各模块间的数据交互无误,特此规范输入和输出的数据格式。 **输入数据:OHLCV K线数组** 系统依赖标准的 OHLCV 格式 K 线数据作为输入,通常以 JSON 数组形式提供。 ```json [ { "timestamp": 1677628800000, // UNIX 毫秒时间戳 "open": 23143.50, "high": 23150.00, "low": 23120.80, "close": 23135.20, "volume": 150.25 }, // ... more kline data ] ``` **输出数据:信号评估结果** `assessEwoSignal` 函数返回一个包含评分、原因和信号质量的对象。 ```json { "bullishScore": 3, "bearishScore": 0, "reasons": [ "EWO 强力上穿零轴 (315.78 ≥ 阈值 280) [+2]", " ↳ 前空头阶段持续 22 根K线 ≥ 20,反转可信度高 [+1]" ], "ewoQuality": "STRONG" } ``` ### 5. 常见误区与正确理解 1. **误区一:认为存在一个“万能”的 EWO 阈值。** * **正确理解**:EWO 的绝对值与价格基数严格相关。BTC 和 DOGE 的 EWO 值差异可达数万倍。因此,必须为不同价格区间的品种设定独立的、经过数据回测验证的阈值,这也是本优化方案的核心。 2. **误区二:将 EWO 穿越零轴视为一个独立的、可直接操作的买卖信号。** * **正确理解**:任何单一指标都存在局限性。EWO 穿越仅代表短期动能相对于中期趋势的变化,它应被视为一个“信号”而非“指令”。一个高质量的交易决策,需要结合穿越的**强度**(`strongThreshold`)、前序趋势的**持续时间**(`phaseDurationBonus`)以及其他辅助指标(如交易量、MACD)进行综合判断。 3. **误区三:忽略微弱穿越信号的价值。** * **正确理解**:虽然微弱穿越信号(`WEAK`)不足以支持开仓,但它并非毫无价值。这类信号可以作为潜在趋势反转的“预警”,提示交易员需要提高关注度。在某些情况下,连续的微弱穿越可能预示着一次强力突破的到来。 4. **误区四:认为 EWO 穿越后的绝对值越大越好。** * **正确理解**:虽然穿越强度很重要,但一个远超 `strongThreshold` 数倍的 EWO 值有时可能预示着市场的极端情绪或不可持续的“假突破”。策略上,超过强力阈值即可认为信号有效,无需过度追求极端的 EWO 数值。更重要的是趋势的确认和延续性。