变更统计: - 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式交叉引用)
280 行
15 KiB
Markdown
280 行
15 KiB
Markdown
# tradehk 信号评分引擎
|
||
|
||
> 返回:[tradehk 文档中心](./README.md)
|
||
> 源函数:`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)
|
||
|
||
```typescript
|
||
{
|
||
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 阈值过滤完整流程](../../12_信号系统优化/EWO阈值过滤完整落地流程.md)
|
||
|
||
## 关键设计决策
|
||
|
||
**为什么 EWO 穿越给 +2 而不是 +1?**
|
||
|
||
EWO 是 tradehk 的核心指标,代表中短期动量的根本转变。穿越零轴意味着 EMA5 和 EMA35 的关系发生逆转,是趋势转换的重要信号,因此权重高于其他指标。
|
||
|
||
**为什么动态阈值?**
|
||
|
||
固定阈值在只开 2 个指标时太难触发,开 6 个指标时又太容易触发。动态阈值确保无论用户开了多少指标,信号质量保持一致。
|
||
|
||
**为什么 ADX > 25 才计算 DMI?**
|
||
|
||
ADX < 25 表示市场处于震荡状态,DMI 的 +DI/-DI 交叉在震荡市中产生大量假信号。只在强趋势(ADX > 25)时才使用 DMI,可以显著提高信号质量。
|
||
|
||
## 相关文档
|
||
|
||
- [指标引擎详解](./指标引擎详解.md) — 各指标计算原理
|
||
- [大周期偏向判定](./大周期偏向判定.md) — 趋势过滤机制
|
||
- [EWO转换检测机制](./EWO转换检测机制.md) — EWO 专项通知
|
||
- [类型系统参考](./类型系统参考.md) — 完整类型定义
|
||
|
||
---
|
||
|
||
## 附录:数据说明与补充
|
||
|
||
本附录旨在对信号评分引擎中涉及的关键指标、数据结构及核心概念进行详细阐述,以提升文档的完整性与专业性。内容涵盖了计算公式、应用场景、参数参考、数据格式规范、内部链接及常见误区,旨在帮助使用者更深刻地理解并有效运用该评分系统。
|
||
|
||
### 一、核心指标深度解析
|
||
|
||
信号评分引擎的有效性建立在对多个技术指标的综合运用之上。下表详细说明了各核心指标的计算方法、数据特性及数据来源,为策略的精细化调整与二次开发提供依据。
|
||
|
||
| 指标名称 | 计算公式 (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` 为动向。*
|
||
|
||
### 二、核心概念应用场景
|
||
|
||
理解各知识点在实际量化交易中的应用,是连接理论与实践的桥梁。
|
||
|
||
- **多指标共振评分机制**
|
||
1. **趋势确认过滤**:在趋势跟踪策略中,仅当多个趋势指标(如 [MA排列](../../wiki/名词解释/MA排列.md)、[SuperTrend](../../wiki/名词解释/SuperTrend.md))同时指向同一方向时,才接受入场信号,有效过滤掉由单一指标在震荡行情中产生的毛刺信号。
|
||
2. **动量增强识别**:对于突破策略,可以将“强信号”(STRONG)作为核心入场条件。例如,当价格突破关键阻力位时,若同时获得 `STRONG BUY` 信号,表明突破动能充足,成功率更高。
|
||
|
||
- **动态强度阈值**
|
||
1. **策略回测与最优化**:在进行参数优化时,研究员可以增减可选指标组合,动态阈值机制能够确保不同组合下的信号强度具有可比性,从而更客观地评估不同指标对策略的贡献度。
|
||
2. **用户自定义策略面板**:在提供给终端用户的交易仪表盘中,允许用户根据个人偏好启用或禁用某些指标。动态阈值可以自动适配用户的选择,确保信号质量的稳定性,避免因用户误操作导致信号泛滥或枯竭。
|
||
|
||
- **ADX > 25 的 DMI 应用**
|
||
1. **趋势/震荡市识别**:构建一个市场状态分类器,当 [ADX](../../wiki/名词解释/ADX.md) 低于25时,启用网格交易或均值回归策略;当 ADX 高于25时,则切换至趋势跟踪策略,并使用 [DMI](../../wiki/名词解释/DMI.md) 的金叉/死叉作为主要入场依据。
|
||
2. **趋势末端预警**:在一段由 ADX > 25 确认的强趋势行情中,若 ADX 开始从高位回落并跌破25,即使 +DI 与 -DI 尚未交叉,也可将其视为趋势可能即将结束或进入盘整的预警信号,应考虑减仓或收紧止损。
|
||
|
||
### 三、可配置参数参考表
|
||
|
||
系统内置了行业标准的指标参数,但针对不同交易品种和时间周期,进行适当调整可能获得更优效果。下表整理了所有核心指标的可配置参数及其推荐值。
|
||
|
||
| 指标 | 参数 | 推荐值 | 取值范围 | 说明 |
|
||
| :--- | :--- | :--- | :--- | :--- |
|
||
| **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线](../../wiki/名词解释/K线.md) 数组,其中每个 `Candle` 对象应遵循以下格式:
|
||
```json
|
||
{
|
||
"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`)**
|
||
函数成功执行后返回的信号对象,其结构定义如下:
|
||
```json
|
||
{
|
||
"id": "Abc123Xyz",
|
||
"timestamp": 1678086600000, // {number} 信号生成时间的UNIX毫秒时间戳
|
||
"symbol": "BTCUSDT",
|
||
"interval": "10m",
|
||
"type": "BUY",
|
||
"strength": "STRONG",
|
||
"price": 22389.88,
|
||
"indicators": { ... },
|
||
"reasons": ["EWO上穿零轴", "MACD金叉"],
|
||
"isActive": true
|
||
}
|
||
```
|
||
|
||
### 五、常见误区与正确理解
|
||
|
||
1. **误区:信号评分越高,盈利概率越大。**
|
||
**正确理解**:信号得分衡量的是**多空技术形态的共振强度**,而非直接的盈利概率。一个 `STRONG` 信号表示多个指标在当前 [K线](../../wiki/名词解释/K线.md) 上同时发出了强烈的看涨或看跌信号,这通常意味着一个显著的技术事件发生。它应该被视为一个高质量的“关注”或“入场考虑”点,但最终的交易决策还需结合仓位管理、风险报酬比以及[大周期偏向判定](../../wiki/tradehk/大周期偏向判定.md)来综合判断。
|
||
|
||
2. **误区:WEAK(弱)信号没有交易价值。**
|
||
**正确理解**:弱信号虽然不适合作为主要的开仓依据,但它可以作为**仓位调整和风险管理的有效工具**。例如,在持有多头仓位时,若连续出现 `WEAK SELL` 信号,可能预示着上涨动能正在衰减,应考虑部分止盈或将止损位上移。反之,在空头趋势中出现 `WEAK BUY` 信号,可作为潜在的回调结束、趋势延续的信号。
|
||
|
||
3. **误区:指标参数使用默认值即可。**
|
||
**正确理解**:默认参数(如 MACD 的 12, 26, 9)是基于传统日线级别市场统计得出的,具有广泛适用性,但不一定对所有交易品种和时间周期都是最优的。例如,对于波动性极高的新兴加密资产或在1分钟这样的超短周期上,可能需要更短的参数来提高指标的灵敏度。专业的量化交易者应对核心策略所涉及的品种和周期进行**参数回测与优化**,以找到最适合当前市场的参数组合。
|
||
|
||
4. **误区:信号一旦生成,就应立即执行。**
|
||
**正确理解**:`generateSignal` 函数是在每根 K 线**收线时**进行计算的。信号的生成点是确定的,但执行点可以根据策略进行优化。例如,对于突破信号,可以等待价格小幅回调至突破位附近再入场,以获得更好的风险报酬比。对于趋势信号,可以结合盘口深度或订单流数据,选择在流动性较好的时机执行,以减少滑点成本。
|
||
|
||
5. **误区:可以完全依赖评分引擎,无需人工干预。**
|
||
**正确理解**:任何自动化交易系统都是基于历史数据的统计规律构建的,无法预见所有未来的市场极端情况(如“黑天鹅”事件)。该评分引擎是一个强大的决策**辅助**工具,而非全自动“印钞机”。建议将其作为半自动交易系统的核心,由交易员对 `STRONG` 级别的信号进行二次确认,并结合宏观经济日历、市场情绪等非结构化数据进行最终决策,实现人机结合的最佳效果。
|