变更统计: - 70个文件变更 (39个新增 + 31个修改) - 新增 6554 行内容 优化内容: 1. 30个核心文档增加附录(数据说明/计算公式/参数表/使用场景/常见误区) - 第一批: 量化基础/技术指标/策略/信号/品种/数据流/回测/风控/链上/EWO - 第二批: AI/案例复盘/多Agent/Hyperliquid/KOL/期权/RWA/券商/BTC/主流币 - 第三批: ETH/SOL/BNB_DOGE/XAUT/代币化美股/信号优化/tradehk系统 2. 新增38个名词解释wiki条目(Delta对冲/Gamma/Theta/Vega/IV/VaR/CVaR等) 3. 更新全局术语表索引(79个术语/12大类/知识图谱/学习路径) 4. 新增内部链接体系(wiki式交叉引用)
15 KiB
tradehk 信号评分引擎
返回:tradehk 文档中心 源函数:
generateSignal()—client/src/lib/indicators.ts第 454-747 行
概述
generateSignal 是 tradehk 的核心信号生成函数。它采用多指标共振评分机制:对每根已收线的 K 线,计算各指标的多空得分,根据总分判断信号类型(BUY/SELL/NEUTRAL)和强度(STRONG/MODERATE/WEAK)。
函数签名
generateSignal(
candles: Candle[], // K线数组(至少需要35根)
symbol: string, // 交易对(如 "BTCUSDT")
interval: TimeInterval, // 时间周期(如 "10m")
params?: IndicatorParams // 可选指标参数
) → TradingSignal | null
评分机制
常开指标评分表
| 指标 | 触发条件 | 分值 | 方向 |
|---|---|---|---|
| EWO | 上穿零轴(红→绿) | +2 | 多头 |
| EWO | 下穿零轴(绿→红) | +2 | 空头 |
| EWO | 在零轴上方(未穿越) | +1 | 多头 |
| EWO | 在零轴下方(未穿越) | +1 | 空头 |
| MACD | 金叉(MACD上穿信号线) | +2 | 多头 |
| MACD | 死叉(MACD下穿信号线) | +2 | 空头 |
| MACD柱 | 柱状图>0且扩大 | +1 | 多头 |
| MACD柱 | 柱状图<0且扩大 | +1 | 空头 |
| AO | 上穿零轴 | +1 | 多头 |
| AO | 下穿零轴 | +1 | 空头 |
| MA排列 | 价格>MA10>MA100 | +1 | 多头 |
| MA排列 | 价格<MA10<MA100 | +1 | 空头 |
常开指标最高可得分:多头最高 7 分(EWO穿越2 + MACD金叉2 + MACD柱1 + AO穿越1 + MA排列1)
可选指标评分表
| 指标 | 触发条件 | 分值 | 方向 | 开关 |
|---|---|---|---|---|
| RSI | RSI < 超卖线(默认30) | +1 | 多头 | signalUseRsi |
| RSI | RSI > 超买线(默认70) | +1 | 空头 | signalUseRsi |
| RSI | 从超卖区回升穿越30 | +1 | 多头 | signalUseRsi |
| RSI | 从超买区回落穿越70 | +1 | 空头 | signalUseRsi |
| KDJ | 低位金叉(K<30时K上穿D) | +2 | 多头 | signalUseKdj |
| KDJ | 普通金叉 | +1 | 多头 | signalUseKdj |
| KDJ | 高位死叉(K>70时K下穿D) | +2 | 空头 | signalUseKdj |
| KDJ | 普通死叉 | +1 | 空头 | signalUseKdj |
| Stoch | K<20且D<20 | +1 | 多头 | signalUseStoch |
| Stoch | K>80且D>80 | +1 | 空头 | signalUseStoch |
| 布林带 | 价格触及下轨 | +1 | 多头 | signalUseBollinger |
| 布林带 | 价格触及上轨 | +1 | 空头 | signalUseBollinger |
| SuperTrend | 方向由空转多 | +2 | 多头 | signalUseSuperTrend |
| SuperTrend | 多头趋势中 | +1 | 多头 | signalUseSuperTrend |
| SuperTrend | 方向由多转空 | +2 | 空头 | signalUseSuperTrend |
| SuperTrend | 空头趋势中 | +1 | 空头 | signalUseSuperTrend |
| DMI/ADX | ADX>25时+DI上穿-DI | +2 | 多头 | signalUseDmi |
| DMI/ADX | ADX>25时+DI>-DI | +1 | 多头 | signalUseDmi |
| DMI/ADX | ADX>25时-DI上穿+DI | +2 | 空头 | signalUseDmi |
| DMI/ADX | ADX>25时-DI>+DI | +1 | 空头 | signalUseDmi |
强度判定阈值(动态)
强度阈值根据已启用的可选指标数量动态调整,避免指标越多越容易触发强信号:
activeOptionalCount = 已启用的可选指标组数(0-6)
strongThreshold = 5 + floor(activeOptionalCount × 0.5)
moderateThreshold = 3 + floor(activeOptionalCount × 0.3)
| 启用可选指标数 | STRONG 阈值 | MODERATE 阈值 |
|---|---|---|
| 0(仅常开) | 5 分 | 3 分 |
| 2 个可选 | 6 分 | 3 分 |
| 4 个可选 | 7 分 | 4 分 |
| 6 个可选(全开) | 8 分 | 4 分 |
信号类型判定
if (bullishCount > bearishCount):
type = BUY
if bullishCount >= strongThreshold: strength = STRONG
elif bullishCount >= moderateThreshold: strength = MODERATE
else: strength = WEAK
elif (bearishCount > bullishCount):
type = SELL
(同上逻辑)
else:
return null(多空平衡,不产生信号)
输出结构(TradingSignal)
{
id: string, // nanoid 生成的唯一 ID
timestamp: number, // 信号时间戳(毫秒)
symbol: string, // 交易对
interval: TimeInterval, // K线周期
type: 'BUY' | 'SELL', // 信号方向
strength: 'STRONG' | 'MODERATE' | 'WEAK', // 信号强度
price: number, // 当前收盘价
indicators: { // 当前指标值快照
ma10, ma100, ewo, macd, macdSignal, macdHistogram, ao
},
reasons: string[], // 触发原因列表(中文)
isActive: boolean // 是否活跃
}
实际案例分析
案例:2026-03-06 BTC/10m EWO 红→绿
输入:
- EWO 前值:-29.048617(红色)
- EWO 当前:+33.320837(绿色)
- 假设 MACD 金叉、AO 上穿、MA 多头排列
评分计算:
EWO 穿越:+2(bullishCount)
MACD 金叉:+2
MACD 柱扩大:+1
AO 上穿:+1
MA 多头排列:+1
bullishCount = 7
强度判定(仅常开指标,strongThreshold=5):
7 >= 5 → STRONG(强信号)
案例:2026-03-06 SOL/10m EWO 红→绿
输入:
- EWO 前值:-0.037316(红色)
- EWO 当前:+0.006745(绿色)
- 穿越幅度极小(0.044061)
问题:当前系统对 BTC(穿越幅度62.37)和 SOL(穿越幅度0.044)给出相同的 +2 分,无法区分信号质量。
优化方案:→ EWO 阈值过滤完整流程
关键设计决策
为什么 EWO 穿越给 +2 而不是 +1?
EWO 是 tradehk 的核心指标,代表中短期动量的根本转变。穿越零轴意味着 EMA5 和 EMA35 的关系发生逆转,是趋势转换的重要信号,因此权重高于其他指标。
为什么动态阈值?
固定阈值在只开 2 个指标时太难触发,开 6 个指标时又太容易触发。动态阈值确保无论用户开了多少指标,信号质量保持一致。
为什么 ADX > 25 才计算 DMI?
ADX < 25 表示市场处于震荡状态,DMI 的 +DI/-DI 交叉在震荡市中产生大量假信号。只在强趋势(ADX > 25)时才使用 DMI,可以显著提高信号质量。
相关文档
附录:数据说明与补充
本附录旨在对信号评分引擎中涉及的关键指标、数据结构及核心概念进行详细阐述,以提升文档的完整性与专业性。内容涵盖了计算公式、应用场景、参数参考、数据格式规范、内部链接及常见误区,旨在帮助使用者更深刻地理解并有效运用该评分系统。
一、核心指标深度解析
信号评分引擎的有效性建立在对多个技术指标的综合运用之上。下表详细说明了各核心指标的计算方法、数据特性及数据来源,为策略的精细化调整与二次开发提供依据。
| 指标名称 | 计算公式 (LaTeX) | 数据范围 | 单位 | 精度要求 | 数据来源 |
|---|---|---|---|---|---|
| EWO | EMA(close, 5) - EMA(close, 35) |
(-∞, +∞) | 点 | 8位小数 | K线收盘价 close |
| MACD | EMA(close, 12) - EMA(close, 26) |
(-∞, +∞) | 点 | 8位小数 | K线收盘价 close |
| AO | SMA(median, 5) - SMA(median, 34) |
(-∞, +∞) | 点 | 8位小数 | K线中间价 (H+L)/2 |
| MA | SMA(close, N) |
(0, +∞) | 点 | 8位小数 | K线收盘价 close |
| RSI | 100 - (100 / (1 + RS)) |
[0, 100] | % | 2位小数 | K线收盘价 close |
| KDJ (K) | SMA(RSV, 3) |
[0, 100] | % | 2位小数 | K线 H, L, C |
| SuperTrend | (H+L)/2 ± (Multiplier × ATR) |
(0, +∞) | 点 | 8位小数 | K线 H, L, C |
| DMI (+DI/-DI) | SMA(±DM, 14) / SMA(TR, 14) |
[0, 100] | % | 2位小数 | K线 H, L, C |
注:EMA 为指数移动平均,SMA 为简单移动平均,RS 为相对强度,RSV 为未成熟随机值,ATR 为平均真实波幅,TR 为真实波幅,DM 为动向。
二、核心概念应用场景
理解各知识点在实际量化交易中的应用,是连接理论与实践的桥梁。
-
多指标共振评分机制
- 趋势确认过滤:在趋势跟踪策略中,仅当多个趋势指标(如 MA排列、SuperTrend)同时指向同一方向时,才接受入场信号,有效过滤掉由单一指标在震荡行情中产生的毛刺信号。
- 动量增强识别:对于突破策略,可以将“强信号”(STRONG)作为核心入场条件。例如,当价格突破关键阻力位时,若同时获得
STRONG BUY信号,表明突破动能充足,成功率更高。
-
动态强度阈值
- 策略回测与最优化:在进行参数优化时,研究员可以增减可选指标组合,动态阈值机制能够确保不同组合下的信号强度具有可比性,从而更客观地评估不同指标对策略的贡献度。
- 用户自定义策略面板:在提供给终端用户的交易仪表盘中,允许用户根据个人偏好启用或禁用某些指标。动态阈值可以自动适配用户的选择,确保信号质量的稳定性,避免因用户误操作导致信号泛滥或枯竭。
-
ADX > 25 的 DMI 应用
三、可配置参数参考表
系统内置了行业标准的指标参数,但针对不同交易品种和时间周期,进行适当调整可能获得更优效果。下表整理了所有核心指标的可配置参数及其推荐值。
| 指标 | 参数 | 推荐值 | 取值范围 | 说明 |
|---|---|---|---|---|
| EWO | fast, slow |
5, 35 | 2-200 | 快慢速指数移动平均线周期 |
| MACD | fast, slow, signal |
12, 26, 9 | 2-200 | 快、慢速EMA及信号线周期 |
| MA排列 | short, long |
10, 100 | 5-400 | 短期与长期均线周期 |
| RSI | period, oversold, overbought |
14, 30, 70 | 7-30, 10-40, 60-90 | RSI计算周期及超买超卖阈值 |
| KDJ | n, m1, m2 |
9, 3, 3 | 5-30 | RSV, K值, D值的计算周期 |
| SuperTrend | period, multiplier |
10, 3 | 7-20, 1.5-5.0 | ATR计算周期和波动率乘数 |
| DMI/ADX | adx, di |
14, 14 | 7-30 | ADX 和 DI 的计算周期 |
| 布林带 | period, stddev |
20, 2 | 10-50, 1.0-3.0 | 均线周期和标准差倍数 |
四、数据格式规范
为确保系统各模块间的数据交互无误,特此明确核心数据对象的结构与格式。
-
K线数据 (
Candle[]) 输入给generateSignal函数的 K线 数组,其中每个Candle对象应遵循以下格式:{ "timestamp": 1678086000000, // {number} K线开盘时间的UNIX毫秒时间戳 "open": 22345.67, // {number} 开盘价 "high": 22398.12, // {number} 最高价 "low": 22340.05, // {number} 最低价 "close": 22389.88, // {number} 收盘价 "volume": 1234.567 // {number} 成交量 } -
交易信号 (
TradingSignal) 函数成功执行后返回的信号对象,其结构定义如下:{ "id": "Abc123Xyz", "timestamp": 1678086600000, // {number} 信号生成时间的UNIX毫秒时间戳 "symbol": "BTCUSDT", "interval": "10m", "type": "BUY", "strength": "STRONG", "price": 22389.88, "indicators": { ... }, "reasons": ["EWO上穿零轴", "MACD金叉"], "isActive": true }
五、常见误区与正确理解
-
误区:信号评分越高,盈利概率越大。 正确理解:信号得分衡量的是多空技术形态的共振强度,而非直接的盈利概率。一个
STRONG信号表示多个指标在当前 K线 上同时发出了强烈的看涨或看跌信号,这通常意味着一个显著的技术事件发生。它应该被视为一个高质量的“关注”或“入场考虑”点,但最终的交易决策还需结合仓位管理、风险报酬比以及大周期偏向判定来综合判断。 -
误区:WEAK(弱)信号没有交易价值。 正确理解:弱信号虽然不适合作为主要的开仓依据,但它可以作为仓位调整和风险管理的有效工具。例如,在持有多头仓位时,若连续出现
WEAK SELL信号,可能预示着上涨动能正在衰减,应考虑部分止盈或将止损位上移。反之,在空头趋势中出现WEAK BUY信号,可作为潜在的回调结束、趋势延续的信号。 -
误区:指标参数使用默认值即可。 正确理解:默认参数(如 MACD 的 12, 26, 9)是基于传统日线级别市场统计得出的,具有广泛适用性,但不一定对所有交易品种和时间周期都是最优的。例如,对于波动性极高的新兴加密资产或在1分钟这样的超短周期上,可能需要更短的参数来提高指标的灵敏度。专业的量化交易者应对核心策略所涉及的品种和周期进行参数回测与优化,以找到最适合当前市场的参数组合。
-
误区:信号一旦生成,就应立即执行。 正确理解:
generateSignal函数是在每根 K 线收线时进行计算的。信号的生成点是确定的,但执行点可以根据策略进行优化。例如,对于突破信号,可以等待价格小幅回调至突破位附近再入场,以获得更好的风险报酬比。对于趋势信号,可以结合盘口深度或订单流数据,选择在流动性较好的时机执行,以减少滑点成本。 -
误区:可以完全依赖评分引擎,无需人工干预。 正确理解:任何自动化交易系统都是基于历史数据的统计规律构建的,无法预见所有未来的市场极端情况(如“黑天鹅”事件)。该评分引擎是一个强大的决策辅助工具,而非全自动“印钞机”。建议将其作为半自动交易系统的核心,由交易员对
STRONG级别的信号进行二次确认,并结合宏观经济日历、市场情绪等非结构化数据进行最终决策,实现人机结合的最佳效果。