Files
sanguo_vnpy_v2/docs/static_data_gaps_design.md
T
claude_dev 774170ec05 feat(data): 数据源融合 P0 补全 + 每日增量脚本
采集层(多源各下):
- baostock: 日线全字段全量(baostock_daily_fullmarket) + 15min全市场 + 静态(基础/复权/分红/季频/三表) + 成份股
- akshare: 静态(估值/龙虎榜/大宗/融资融券/北向/指数成分/行业/股本/解禁/业绩预告)
- xtdata(miniQMT): build_daily_from_xtdata + daily_update_xtdata

数据补全 P0:
- ETF全市场: universe 扩展 沪深A股∪ETF∪基金(7414), dividend_type='front' 前复权
- 历史成份股(治幸存者偏差): index_const_hist_download 深证/国证 adjust_cni 4指数 + 中证1000/2000快照 + 新浪交叉校验
- 退市K线: baostock_delisted_download + import_delisted_to_db(实证 Day1 fetch_all_stocks 已含退市)

灌库:
- import_baostock_to_db: daily_baostock_full(5537股/1826万行,18字段)+ bs_index_constituent + bs_adjust_factor
- INSERT OR REPLACE 幂等, WAL+busy_timeout, dbbardata 不碰

每日增量 #7(用户决策A: VPS直跑):
- daily_update_static: login探针防黑名单graceful skip + LOOKBACK7 + query_stock_basic含退市 + INSERT OR REPLACE + QUERY_COUNT守48000/天

设计文档: spec(13节三层融合) + P0 plan + 数据gap设计
2026-07-22 10:34:22 +08:00

3.3 KiB

静态数据 3 个真缺口 — 补充设计(2026-07-19 记录,待当前下载完再动手)

当前下载(15min Mac补全 + akshare static + baostock static)跑完后再继续本设计。先记录存底。

数据现状实测(VPS quant_trading.db + data/ 目录,非推理)

  • DB dbbardata: 15m(2025-072026-07,1年,xt_tacitdata源)/5m(1年)/**d日线(20102026,16年,5205 symbols,OHLCV+amount)**。dbbardata schema 有 turnover(=成交额amount),无换手率/涨跌幅列
  • parquet data/raw + data/qfq: 各 59816,O H L C V 6列,16年(xtdata建,build_daily_from_xtdata)。
  • data/static/: akshare balance 跑着(4300+ parquet)。
  • 实测缺口:
    1. 日线缺换手率+涨跌幅(amount已在DB 16年)
    2. ETF不在daily universe(5205 symbols大概率纯股票,518880等海外ETF缺)
    3. 指数成分历史(含被踢)完全无(全项目无脚本,akshare只当前快照)

3 缺口设计(派生方案,避开数据混乱+接口限流)

缺口1:日线换手/涨跌 → 派生,不新下载

  • pct_chg = (close今 - close昨)/close昨,从 qfq close 算(16年,避免除权跳空)。
  • 换手率 = volume / 流通股本。volume在DB;流通股本在 akshare valuation(stock_value_em,排队P1,8.5年)
  • amount:DB已有(16年)。
  • 不开 daily_extra 新目录,读取层派生 或 DB加列 → 不加剧"四套口径分裂" + 零新东财负载

缺口2:ETF日线 → 加进现有 xtdata universe

  • ETF清单:海外 518880(黄金)/513100(纳指)/513030(德国)/164824(石油)/159866(有色) + 主 510300/510500/159915等,maintain成config。
  • 加进 build_daily_from_xtdata 的 universe → 走现有 xtdata 本地管线(miniQMT),不碰东财,无限流

缺口3:指数成分历史(含被踢) → csindex 抓取,先 spike

  • 范围:hs300(000300)/zz500(000905)/zz50(000016)/中小综指(399101)/创业板指(399006)。
  • 先派 agent spike 调研源:akshare 有无历史成分API(index_stock_cons_weight_csindex带日期?fund_portfolio_hold_em?)、csindex.cn 历史成分xlsx URL规律+反爬、深证399101/399006 巨潮/szse 源。
  • B档(务实,先行):抓全部历史调仓成分→并集(曾经入选集),消灭幸存者偏差。output data/index_const_hist/<indexcode>.parquet
  • A档(精确,后做):时间序列(指数,生效日,成分,加/剔)。
  • csindex 独立源,串行单线程抓,限流风险低

风险结论(为何用派生方案)

  • 原设计(akshare daily_extra) 有双风险:① 数据混乱——日线口径第四处(DB/parquet raw/parquet qfq/daily_extra),回测不知读哪;② 接口限流——daily_fields_akshare 并发 akshare_static = 第二股东财流量→东财封(同 baostock 黑名单原理)。
  • 派生方案:缺口1 两风险全消(不下载/不开新目录);ETF走xtdata无限流;csindex独立源串行低风险。
  • 唯一仍调外部API:缺口3(csindex)+ 已排队的 akshare static 本身——保持串行+限速,不新增并发。

决策与顺序(下载完后)

  1. 派生换手/涨跌(读取层工具 或 DB加列)——缺口1
  2. ETF 入 xtdata daily universe——缺口2
  3. csindex spike 调研 → 定 B档抓取脚本——缺口3
  4. (远期)A档精确成分时间序列

关联

  • 主计划:docs/static_data_cache_plan.md
  • 现状memory:baostock-15min-vps-deploy-plan / db-primary-parquet-fallback / data-download-architecture