feat: 题材涨幅前20存历史(原前10)

- daily_collector TOP_THEME_LIMIT 10 → 20
- 同步 routes/collector 注释与 spec/plan 文档
- 实测 2026-08-10 题材前20入库 20 条,themes/history 返回 20 条

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Sakurasan
2026-08-10 21:27:54 +08:00
co-authored by Claude
parent 1c434a208a
commit 23644a9c77
5 changed files with 20 additions and 20 deletions
@@ -7,7 +7,7 @@
为数据分析和发掘积累历史数据,并提供活跃核心股的滚动展示:
1. 每个交易日收盘后,采集**核心股前 100**(当日全部股票按涨幅降序取前 100)及其**所属题材**,保存历史。
2. 每个交易日收盘后,采集**题材(概念)板块涨幅前 10**,保存历史。
2. 每个交易日收盘后,采集**题材(概念)板块涨幅前 20**,保存历史。
3. 新展示页:**活跃核心股 × 最近 10 个 A 股交易日**涨幅矩阵表格;新核心股加入,**超过 10 个 A 股交易日未出现则踢出**。
## 2. 已确认的决策
@@ -15,7 +15,7 @@
| 决策点 | 选择 |
|---|---|
| 核心股口径 | 当日全部股票按涨幅(f3)降序取前 100(不限覆盖题材数) |
| 板块口径 | 题材/概念板块,按涨幅(bf3)降序取前 10 |
| 板块口径 | 题材/概念板块,按涨幅(bf3)降序取前 20 |
| 采集触发 | 方案 A:asyncio 后台任务,每日收盘后自动采集 |
| 表格布局 | 股票 × 最近 10 个 A 股交易日列矩阵 |
| 10 日窗口 | 10 个 A 股交易日(跳过节假/周末) |
@@ -53,7 +53,7 @@ CREATE TABLE daily_top_themes (
theme_name TEXT NOT NULL,
bf3 REAL, -- 题材涨幅%
hot_rank INTEGER, -- 热度排名
rank INTEGER, -- 当日板块涨幅排名 1-10
rank INTEGER, -- 当日板块涨幅排名 1-20
created_at TEXT DEFAULT (datetime('now','localtime')),
UNIQUE(trade_date, theme_code)
);
@@ -74,14 +74,14 @@ CREATE TABLE daily_top_themes (
1. **核心股前 100**:调用 `fetch_theme_list(1, False)``fetch_theme_graph` 得到当日全部股票,按 `f3` 降序取前 100。若不足 100 只,存实际数量。
2. **所属题材**:以热点穿透采样的 `themeCodes` 为主存入 `daily_core_stock_themes`
3. **题材前 10**:从 `fetch_theme_list(1, False)``bf3` 降序前 10,连同 `themeName`/`hotRank` 存入 `daily_top_themes`
3. **题材前 20**:从 `fetch_theme_list(1, False)``bf3` 降序前 20,连同 `themeName`/`hotRank` 存入 `daily_top_themes`
4. 同一交易日重复触发不重复写入(UNIQUE 去重 + 检查)。
5. 采集失败(东财 403/网络)→ 跳过当日,下轮重试;记录日志。
### 4.3 补全(折中方案)
- 东财压力允许时,对核心股调用个股题材接口尽力补全。
- 优先保证核心股前 100 与题材前 10 的完整性,补全为附加增强,失败不影响主流程。
- 优先保证核心股前 100 与题材前 20 的完整性,补全为附加增强,失败不影响主流程。
## 5. 新接口(`backend/routes/`
@@ -89,7 +89,7 @@ CREATE TABLE daily_top_themes (
|---|---|
| `GET /api/core-stocks/active` | 活跃核心股 + 最近 10 日涨幅矩阵 |
| `GET /api/core-stocks/history?date=` | 指定交易日的核心股(含所属题材) |
| `GET /api/themes/history?date=` | 指定交易日的题材前 10 |
| `GET /api/themes/history?date=` | 指定交易日的题材前 20 |
### active 接口返回结构