774170ec05
采集层(多源各下): - 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设计
106 lines
7.3 KiB
Markdown
106 lines
7.3 KiB
Markdown
# A股静态数据全量缓存到 VPS — 设计与采集计划
|
||
|
||
> 2026-07-19 立。目标:全市场 A股静态/基本面/参考数据全量缓存到 VPS 本地(parquet),作选股(基本面)与回测数据源。
|
||
|
||
## 原则(用户钦定)
|
||
1. **尽量多缓存**——能下的全下,避免限流/网络依赖。
|
||
2. **串行可,等待长可接受**——不追求并发速度,稳定性优先。
|
||
3. **准确性第一**——下错不如不下,每类数据必须验证。
|
||
4. **建立每日自动更新**——历史一次灌满 + 每日增量。
|
||
5. 用途:基本面选股 + 回测。盘中实时当日数据(实盘)未来再做。
|
||
|
||
## 为什么缓存优于实时取(背景)
|
||
历史静态数据(含"日频"的历史部分)永不改变。本地缓存:秒级读盘/零网络依赖/可复现快照/不触发限流。实时取历史:慢/不稳/不可复现/反复触发封 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错峰;东财源要限速防反爬 |
|
||
|
||
## 准确性协议(每类数据强制)
|
||
1. **断点续传 marker + 失败/空数据区分**(复用 15min 的 empty-vs-failed 修复)
|
||
2. **下载后抽样验证(≥10只)**:字段完整 / 日期覆盖(回溯到2020) / 值合理性(PE>0、ROE合理区间、volume≥0、OHLC 自洽)
|
||
3. **行数 + 覆盖率统计**写入日志
|
||
4. **幂等写入**(per-stock parquet overwrite;INSERT OR REPLACE 若入 DB),staging 隔离→验证→合并(用户铁律:绝不直写主库/主目录未验)
|
||
5. (可选)跨源抽检: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_em`ConnectionError 弃用)
|
||
|
||
**有问题/替代**:`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)。
|