feat: 新增 tradehk 专属 Wiki 文档体系(10个文档)

- 系统架构总览:技术栈、目录结构、数据流向
- 指标引擎详解:16个指标完整原理与参数(含源码行号)
- 信号评分引擎:多指标共振评分机制、动态阈值、案例分析
- 大周期偏向判定:assessBigTimeframeBias 完整说明
- EWO转换检测机制:evaluateEwoTurnForUser 逐步流程
- 飞书通知格式规范:三类通知完整格式模板
- 类型系统参考:所有 TypeScript 类型完整文档
- 数据库与存储:MySQL 表结构、缓存机制、维护指南
- 部署运维指南:Docker Compose、Nginx、飞书配置
- 开发历史与TODO:功能状态表、优先级路线图
- 优化建议汇总:9项优化建议含源码位置和预期效果
这个提交包含在:
Manus Quant Agent
2026-03-05 23:14:31 -05:00
父节点 624409055d
当前提交 baf10a9e91
修改 12 个文件,包含 2322 行新增0 行删除

查看文件

@@ -0,0 +1,174 @@
# 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 穿越:+2bullishCount
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) — 完整类型定义