- scripts/data_platform/_archive/legacy/: 归档20个独立探针/诊断/旧降级脚本(零引用验证) - docs/archive/data/: 归档17个数据相关旧设计/plan/report(保留fusion spec作深读) - docs/data-platform/README.md: 数据层单一权威记录(8节:架构/布局/源/管线/铁律/API/缺口/待办) - 删除 _mootdx_depth_result.txt - Phase2待办: 15m灌库链+旧回填import链(有测试/wrapper依赖,VPS schtask确认后归档)
7.3 KiB
A股静态数据全量缓存到 VPS — 设计与采集计划
2026-07-19 立。目标:全市场 A股静态/基本面/参考数据全量缓存到 VPS 本地(parquet),作选股(基本面)与回测数据源。
原则(用户钦定)
- 尽量多缓存——能下的全下,避免限流/网络依赖。
- 串行可,等待长可接受——不追求并发速度,稳定性优先。
- 准确性第一——下错不如不下,每类数据必须验证。
- 建立每日自动更新——历史一次灌满 + 每日增量。
- 用途:基本面选股 + 回测。盘中实时当日数据(实盘)未来再做。
为什么缓存优于实时取(背景)
历史静态数据(含"日频"的历史部分)永不改变。本地缓存:秒级读盘/零网络依赖/可复现快照/不触发限流。实时取历史:慢/不稳/不可复现/反复触发封 IP。唯一非静态是"今天未收盘/未公布"的部分,日终收盘后即变静态。
范围(全量 ~2GB)
| 组 | 类别 | 频率 | 源 | 估算 |
|---|---|---|---|---|
| A 基础元数据 | 基础信息(代码/名称/交易所/板块/上市退市/状态) | 静态 | baostock | 1MB |
| 行业分类(申万/中信/概念) | 静态 | akshare | 30MB | |
| 指数成分+权重(300/500/1000/国证2000) | 月 | akshare | 50MB | |
| B 财务 | 三大报表(资产/利润/现金流) | 季 | baostock | 150MB |
| 季频衍生指标(ROE/EPS/毛利率/净利增速/负债率/杜邦) | 季 | baostock | 200MB | |
| 业绩预告/快报 | 季事件 | akshare | 30MB | |
| C 股本/公司行为 | 股本结构变动 | 事件 | akshare | 50MB |
| 十大股东+十大流通股东 | 季 | akshare | 250MB | |
| 分红送转配股 | 事件 | baostock | 40MB | |
| 限售解禁 | 事件 | akshare | 20MB | |
| D 估值/复权(日频) | 估值快照(PE/PB/PS/PF/股息率/市值/流通市值) | 日 | akshare | 300MB |
| 复权因子(qfq/hfq) | 日 | baostock | 150MB | |
| E 市场参考(日频,可选) | 龙虎榜/大宗交易/融资融券/北向/ST停复牌 | 日 | akshare | ~360MB |
存储格式与目录
parquet(每类一个目录),VPS C:\sanguo_vnpy_v2\data\static\<type>\。匹配现有 15min/daily parquet 模式,回测 pandas 直读,增量 append/overwrite 幂等。
data/static/
basic/ 基础信息(全量刷新,1文件 or per-stock)
industry/ 行业分类
index_const/ 指数成分
balance/ 资产负债表(per-stock parquet)
income/ 利润表
cashflow/ 现金流量表
indicator/ 季频财务指标(ROE/EPS/...)
forecast/ 业绩预告/快报
share_capital/ 股本结构
top_holders/ 十大股东
dividend/ 分红送转
lockup_release/ 限售解禁
valuation/ 估值日频(PE/PB/市值)
adjust_factor/ 复权因子
dragon_tiger/ 龙虎榜
block_trade/ 大宗交易
margin/ 融资融券
northbound/ 北向资金
数据源映射 + 串行约束(关键)
| 源 | 数据 | 并发约束 |
|---|---|---|
| baostock | 基础信息/复权因子/分红/季频指标/三表 | 单登录串行,跟15min共用登录→必须等15min跑完才能开(并发=IP封6-24h) |
| akshare | 估值/龙虎榜/大宗/融资融券/北向/指数成分/行业/股本/十大股东/解禁/业绩预告 | 不同源,可与baostock错峰;东财源要限速防反爬 |
准确性协议(每类数据强制)
- 断点续传 marker + 失败/空数据区分(复用 15min 的 empty-vs-failed 修复)
- 下载后抽样验证(≥10只):字段完整 / 日期覆盖(回溯到2020) / 值合理性(PE>0、ROE合理区间、volume≥0、OHLC 自洽)
- 行数 + 覆盖率统计写入日志
- 幂等写入(per-stock parquet overwrite;INSERT OR REPLACE 若入 DB),staging 隔离→验证→合并(用户铁律:绝不直写主库/主目录未验)
- (可选)跨源抽检:baostock 季频财务 vs miniQMT PershareIndex 抽几只对一对
每日自动更新机制
Windows schtask sanguo-static-daily,每日盘后 16:30 跑 daily_update_static.py:
- 日频类(估值/龙虎榜/大宗/融资融券/北向):追加当日(或近N日补漏)
- 小表全量刷新:基础信息/行业/指数成分/分红(事件少,全量省得算增量)
- 财报季(4/8/10月底后):追加新季报(三表/季频/十大股东)
- 复权因子:每日刷新(除权事件会改累计因子)
- 失败告警 + 断点续传 + 绝不破坏既有数据(只 append/replace 单日单股)
- 串行 baostock 部分 + 限速 akshare 部分,单进程跑完
执行阶段
- Phase 0(进行中):15min baostock,ETA 07-19 ~22:30
- Phase 1:baostock 静态下载脚本(基础/复权/分红/季频/三表)— 构建 now,运行须等15min完
- Phase 2:akshare 静态下载脚本(估值/龙虎榜/大宗/融资融券/北向/指数成分/行业/股本/十大股东/解禁/业绩预告)— 构建+可now起(不同源)
- Phase 3:每类抽样验证 → 修问题
- Phase 4:每日更新 schtask + 验证增量
akshare 调查结果(2026-07-19 确认,15类端点实证)
15类中 11 类端点直接可用,4 类有替代。财务类全部"单股一次拉全历史"(完美绕开 baostock per-quarter 百万调用)。全量 ~2.5-3GB,单线程 17-22h(可挂机,不同源可与 baostock 并行)。
确认端点(4种模式):
- per-stock(5500股×1调用):估值
stock_value_em/ 北向stock_hsgt_individual_em/ 股本stock_share_change_cninfo/ 十大流通stock_gdfx_free_top_10_em(×20报告期) / 三大报表stock_balance/profit/cash_flow_sheet_by_report_em(319/203/254列全历史) / 财务摘要stock_financial_abstract - per-date(交易日×1调用):龙虎榜
stock_lhb_detail_em/ 大宗stock_dzjy_mrmx(symbol="A股")/ 融资融券沪stock_margin_detail_sse/ 解禁stock_restricted_release_detail_em - per-period(报告期×1调用):业绩预告
stock_yjyg_em/ 业绩快报stock_yjkb_em - one-shot:指数成分
index_stock_cons_csindex(300/500/1000) / 行业sw_index_first_info(申万,东财stock_board_industry_name_emConnectionError 弃用)
有问题/替代:stock_margin_detail_szse(深融资融券)超时频繁→先跳过;stock_gdfx_holding_detail_em(date)按日全市场超时→改个股循环;stock_a_indicator_lg新版删→用stock_value_em。
大小明细:估值150MB / 三大报表1.2GB / 财务摘要300MB / 北向120MB / 融资融券500MB / 十大流通60MB / 其余<100MB各。总~2.5-3GB。
优先级:P0 三大报表+财务摘要(~1.5GB,~10h,核心财务)→ P1 估值+北向+融资融券(~770MB,~3h)→ P2 龙虎榜/大宗/解禁/业绩预告/股本/指数/行业(~300MB,~1h)。
部署架构(自愈链,2026-07-19)
- 15min baostock:schtask
sanguo-bs15min+ 自愈.bat(ping-sleep 30min重试)。2026-07-19 12:00 baostock全球故障(Mac+VPS同挂10002007),自愈中,恢复即续 from marker 2847。 - baostock静态:schtask
sanguo-bs-static+ 自愈.bat(wait15等15min "ALL DONE" → 自动接力 → ping-sleep自愈)。脚本baostock_static_download.py已部署(basic/adjust_factor/dividend,rs.fields动态取字段)。 - akshare静态:schtask
sanguo-bs-akshare(待建)+ 自愈.bat。脚本构建中。不同源,可与baostock并行。 - 监控:cron 779cbb71 每30min probe_all + 异常自修 + 完成报告。caffeinate防睡眠。
- .bat sleep 用
ping -n N 127.0.0.1(timeout.exe在SYSTEM schtask下失效,见 memory schtasks-system-bat-gotchas)。