daef609e8b
- QmtBridgeSource: provides 增加 index_daily,新增 fetch_index_daily 方法 - task_kline_index: 优先级改为 qmt_bridge → mairui → sina 三级降级 - task_kline_5min: 优先用 qmt_bridge,不可用时降级 mairui - task_kline_daily: 优先级加入 qmt_bridge(首位) - config: 新增 qmt_bridge_url 配置项 - registry: qmt_bridge 注册信息同步更新 - docs: 新增 DATASETS_AND_SOURCES.md,完整说明数据集与数据源依赖关系 - AGENTS.md: 同步更新指数数据源描述
8.4 KiB
8.4 KiB
数据集与数据源依赖说明
本文档列出项目同步的全部数据集、各数据集依赖的数据源及优先级, 以及数据集之间的上下游依赖关系。
一、数据集总览
项目目前定义 12 个同步数据集,按类型分为原始源(依赖外部 API)和衍生源(本地计算)。
1.1 原始源
| 数据集 ID | 目标表 | 说明 | 数据源与优先级 |
|---|---|---|---|
stock_basic |
market_data.stocks |
全市场 A 股代码/名称/交易所/上市状态 + 股本快照(雪球) | Baostock query_stock_basic(主)→ 麦蕊 /hslt/list(备) |
kline_daily |
market_data.kline_stock |
全市场日 K OHLCV | QMT Bridge /kline?period=1d(主)→ 麦蕊 hsstock/history/*/d/n → 雪球 kline → 新浪 getKLineData,per-stock 逐级 fallback |
kline_index |
market_data.kline_index + indices |
上证/深证/创业板/沪深300/中证500/中证1000 日线 | QMT Bridge /kline?period=1d(主)→ 麦蕊 hsindex/history → 新浪 指数日 K |
kline_5min |
market_data.kline_5min |
全市场 5 分钟 K 线 | QMT Bridge /kline?period=5m(主)→ 麦蕊 hsstock/history/*/5/n(备) |
tick_trade |
market_data.tick_trade |
当天逐笔成交(每日 21:00 发布) | 麦蕊 hsrl/zbjy(唯一) |
moneyflow |
market_data.moneyflow |
个股资金流(每日 21:30 发布,21:35 触发) | 麦蕊 hsstock/history/transaction(唯一) |
longhubang |
market_data.longhubang_daily + longhubang_seat |
龙虎榜聚合层 + 席位层(每日 22:00 触发) | akshare stock_lhb_detail_em + stock_lhb_stock_detail_em(东方财富封装,无替代源) |
stock_node |
market_data.node_categories + nodes + stock_node_map |
股票-指数/行业/概念映射(每周六 11:30) | 麦蕊 /hszg/{list,gg,zg}(唯一) |
mairui_indicators |
market_data.kline_stock_macd_daily + kdj_daily + boll_daily |
MACD/KDJ/BOLL 日频技术指标(每日 16:40 增量) | 麦蕊 /hsstock/history/{macd,kdj,boll}/{symbol}/d/n(唯一) |
share_snapshot |
market_data.stocks.total_share/float_share + share 表 |
全市场股本快照(雪球 quote_detail,需 XUEQIU_TOKEN) |
雪球 quote_detail(唯一) |
1.2 衍生源(本地计算,无外部接口)
| 数据集 ID | 目标表 | 说明 | 上游依赖 |
|---|---|---|---|
market_regime |
market_data.market_regime_daily |
涨跌家数 / advance_ratio / 恐慌标记 | kline_daily(本地 kline_stock 聚合) |
mairui_ma_daily |
market_data.kline_stock_ma_daily |
MA5/10/20/60 均线 | kline_daily(本地 kline_stock.close 计算) |
注:
mairui_ma_daily本可走麦蕊/hsdata端点,但免费 licence 返回"数据不存在",故改为本地计算。
二、数据源总览
项目注册了 6 个数据源,各有 credential 要求和提供的能力。
| 数据源 Key | 名称 | 需凭证 | 提供能力 | 特性 |
|---|---|---|---|---|
datasource_qmt_bridge |
QMT Bridge(本地行情桥) | 否 | kline_daily, kline_5min, index_daily |
本地 xtquant HTTP 桥,免限速,低延迟,局域网 |
datasource_mairui |
麦蕊智数(mairui.club) | 需 MAIRUI_LICENCE |
kline_daily, kline_5min, index_daily, stock_basic, moneyflow, tick_trade, stock_node, indicator_daily |
数据最全,免费 licence 1 分钟 300 次 |
datasource_xinlang |
新浪财经 | 否 | kline_daily, index_daily |
免费,RPS 3/s 限流 |
datasource_baostock |
Baostock | 否 | kline_daily, stock_basic, industry |
免费,基础信息 + 行业映射 |
datasource_xueqiu |
雪球 | 需 XUEQIU_TOKEN |
kline_daily, share |
股本快照 + K 线复核 |
datasource_akshare_lhb |
akshare 龙虎榜(东方财富) | 否 | longhubang_daily, longhubang_seat |
龙虎榜唯一源 |
三、数据依赖关系
3.1 依赖拓扑图
stock_basic (Baostock + 雪球)
├── kline_daily (QMT Bridge → 麦蕊 → 雪球 → 新浪)
│ ├── market_regime (衍生:本地 kline_stock 聚合)
│ └── mairui_ma_daily (衍生:本地 kline_stock.close 计算)
├── kline_5min (QMT Bridge → 麦蕊)
├── tick_trade (麦蕊)
├── moneyflow (麦蕊)
├── longhubang (akshare/东财)
├── stock_node (麦蕊)
└── share_snapshot (雪球)
kline_index (QMT Bridge → 麦蕊 → 新浪) — 独立,无上游依赖
3.2 依赖表
| 数据集 | 直接上游依赖 | 依赖说明 |
|---|---|---|
stock_basic |
无 | 根任务,提供股票代码列表 |
kline_daily |
stock_basic |
依赖股票列表决定拉取范围 |
kline_index |
无 | 独立运行,不依赖股票列表 |
kline_5min |
stock_basic |
依赖股票列表决定拉取范围 |
tick_trade |
stock_basic |
同上 |
moneyflow |
stock_basic |
同上 |
longhubang |
stock_basic |
同上 |
stock_node |
stock_basic |
同上 |
mairui_indicators |
stock_basic |
同上 |
share_snapshot |
stock_basic |
同上 |
market_regime |
kline_daily |
需 kline_stock 数据完整 |
mairui_ma_daily |
kline_daily |
需 kline_stock.close 数据完整 |
四、默认调度时间(工作日)
| 时间 | 数据集 | 备注 |
|---|---|---|
| 09:00 | stock_basic |
开盘前刷新 |
| 15:30 | kline_index |
指数日线 |
| 15:40 | kline_daily |
个股日线 |
| 16:00 | kline_5min |
5 分钟线 |
| 15:15 | market_regime |
市场情绪 |
| 16:30 | mairui_ma_daily |
MA 均线 |
| 16:40 | mairui_indicators |
MACD/KDJ/BOLL |
| 21:35 | moneyflow |
资金流(等 21:30 发布) |
| 22:00 | longhubang |
龙虎榜 |
| 周六 11:30 | stock_node |
节点映射 |
| 周六 11:30 | share_snapshot |
股本快照(周度) |
五、数据回填级联规则
上游数据被回填或修复后,下游依赖它的衍生数据集必须手动/自动重跑, 否则会出现"上游新、下游旧"的不一致。
| 上游任务/表 | 触发条件 | 必须重跑的下游任务 |
|---|---|---|
kline_daily / kline_stock |
回填历史 K 线、修复错误日线、补充漏掉的股票/日期 | market_regime、mairui_ma_daily |
stock_basic / stocks |
新上市/退市、代码变更、上市状态修正 | kline_daily、kline_5min、tick_trade、moneyflow、longhubang、stock_node、share_snapshot |
kline_stock(任意核心字段修复) |
close/volume 等核心字段修正 | market_regime、mairui_ma_daily |
操作建议:
- 单次少量回填(如几只股票、几天):用 CLI 参数指定
codes/start/end,然后按上表手动触发下游。 - 大量回填(如全市场、多月/多年历史):先跑上游,再按依赖链顺序跑下游;必要时禁用当日独立 timer,避免与 runall 并发。
- 每日巡检
bin/daily_sync_check.py已增加数据一致性检查:对比kline_stock与kline_stock_ma_daily、market_regime_daily的最新日期与缺失行数,发现缺口即告警。
六、数据源降级策略
各同步任务在代码中定义了具体的降级逻辑:
| 任务 | 降级链 | 降级触发条件 |
|---|---|---|
kline_daily |
QMT Bridge → 麦蕊 → 雪球 → 新浪 | per-stock 逐级 fallback,雪球失败自动降级到麦蕊/新浪 |
kline_index |
QMT Bridge → 麦蕊 → 新浪 | 选第一个 is_source_ready 通过的源 |
kline_5min |
QMT Bridge → 麦蕊 | bridge 不可用时检查 mairui 是否就绪 |
tick_trade |
仅麦蕊 | 外层 FETCH_HARD_TIMEOUT=120s 防止永久挂起 |
moneyflow |
仅麦蕊 | 唯一源 |
longhubang |
仅 akshare | 唯一源,无替代 |
stock_node |
仅麦蕊 | 唯一源 |
stock_basic |
Baostock(主)→ 麦蕊(备) | Baostock 失败时切换 |
mairui_indicators |
仅麦蕊 | 唯一源 |
七、数据源健康检查
系统通过 app/core/datasource/registry.py 维护数据源健康状态:
- 周期检查:后台线程每 30 分钟对所有注册数据源执行一次
health_check()。 is_source_ready():综合判断凭证是否配置 +is_available()是否通过 + 最近健康检查是否成功,返回(bool, reason)。pick_source(capability):遍历注册表,返回第一个is_source_ready()通过且提供该能力的数据源。