Files
usa/docs/INDICATORS_WALLSTREET_RETALIATION.md
2026-03-06 14:20:18 +08:00

70 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 华尔街财团投入指数 & 反击情绪指数:更新逻辑与波动说明
## 一、数据流概览
```
爬虫提取 (extractor_ai / extractor_dashscope)
→ retaliation_sentiment / wall_street_value (0100按单篇报道)
→ db_merge.merge(extracted)
→ SQLite: retaliation_current, retaliation_history, wall_street_trend
→ server/situationData.js getSituation()
→ 前端: iranForces.retaliationSentiment(History), usForces.wallStreetInvestmentTrend
→ 组件: RetaliationGauge, InvestmentTrendChart回放: useReplaySituation 插值
```
## 二、当前写入逻辑crawler/db_merge.py
### 1. 华尔街财团投入指数 (wall_street_trend)
- **表**`wall_street_trend(id, time, value)`,前端用整表做 `wallStreetInvestmentTrend` 折线。
- **写入**:每次爬虫产出 `extracted["wall_street"]` 时:
-`value` 做限幅 `[1, 99]`**不做任何平滑**
- 直接 `INSERT INTO wall_street_trend (time, value) VALUES (?, ?)`
- 表保留最近 `WALL_STREET_TREND_MAX_ROWS`200条。
- **波动原因**
- 每条报道一个点,爬虫频繁时点很密;
- 不同报道提取值差异大(如 30 / 80 / 45曲线会剧烈锯齿
- 无“与上一点平滑”,无时间间隔限制,易受单条 0/100 或异常值影响(虽已夹到 199
### 2. 反击情绪指数 (retaliation_current + retaliation_history)
- **表**`retaliation_current(id=1, value)` 当前值;`retaliation_history(id, time, value)` 历史曲线。
- **写入**:每次爬虫产出 `extracted["retaliation"]` 时:
- 当前值平滑:`new_val = 0.6 * current + 0.4 * raw`,再夹到 [1, 99]
- `retaliation_current` 更新为该 `new_val`
- `retaliation_history` 追加一条 `(time, new_val)`
- 历史表保留最近 `RETALIATION_HISTORY_MAX_ROWS`300条。
- **波动原因**
- 多条新闻短时间连续写入时,每次都用新的 raw 更新 current连续多步 0.6/0.4 仍会快速漂移;
- history 每写一次就一个点,点过密且 raw 差异大时折线仍会明显抖动;
- 单步无“最大变化幅度”限制,极端 raw 仍会导致单次跳动较大。
## 三、爬虫侧产出形态
- **extractor_ai / extractor_dashscope**:仅当报道涉及对应维度时才输出:
- `retaliation_sentiment`0100
- `wall_street_value`0100。
- 每条报道独立一个值,多篇报道会多次调用 `merge()`,因此**波动确实主要由爬虫数据更新频率和单条取值差异导致**。
## 四、稳定化思路(计算模块)
1. **华尔街**
- 与**上一点**做平滑再写入:例如 `value = alpha * last_value + (1-alpha) * raw`,再限幅;
- 可选:仅当距上一条时间超过一定间隔(如 1530 分钟)才 INSERT减少密集点带来的锯齿。
2. **反击情绪**
- 加强平滑例如提高当前值权重0.8 * current + 0.2 * raw
- 单步变化上限:例如 `new_val` 相对 `current` 最多 ±N如 5
- 历史记录:可对 history 做同样限幅或间隔写入,避免曲线过密抖动。
实现位置:**crawler/indicator_smooth.py**,在 `db_merge.merge()` 中调用,仍写回现有表,前端与 API 契约不变。
### 已实现参数(可调)
| 指标 | 参数 | 默认 | 说明 |
|------|------|------|------|
| 华尔街 | `WALL_STREET_NEW_WEIGHT` | 0.35 | 新 raw 权重,越小曲线越平滑 |
| 华尔街 | `WALL_STREET_MIN_INTERVAL_MINUTES` | 20 | 两笔趋势最小间隔(分钟),不足则本条不写入 |
| 反击情绪 | `RETALIATION_CURRENT_WEIGHT` | 0.8 | 当前值权重,越大越平滑 |
| 反击情绪 | `RETALIATION_MAX_STEP` | 5 | 单次相对当前值最大变化幅度(点) |