From 66e741b6bb7a137da61d7bfeae0358355d8bb2e9 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Wed, 2 Sep 2026 09:41:02 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=95=B0=E6=8D=AE=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=B4=BB=E6=96=87=E6=A1=A3=E5=8C=96+=C2=A715?= =?UTF-8?q?=20A=E6=A1=A3=E6=88=AA=E9=9D=A2=E6=95=B0=E6=8D=AE=E5=9F=9F?= =?UTF-8?q?=E5=A2=9E=E8=A1=A5=E2=80=94=E2=80=94=E7=94=A8=E6=88=B7=E7=BA=A6?= =?UTF-8?q?=E5=AE=9A(09-02):=E5=94=AF=E4=B8=80=E6=95=B0=E6=8D=AE=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E6=96=87=E6=A1=A3,=E6=AF=8F=E6=AC=A1=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E5=8F=98=E6=9B=B4=E5=90=8C=E6=89=B9=E6=9B=B4=E6=96=B0?= =?UTF-8?q?(=E9=98=B2=E9=95=BF=E6=9C=9F=E5=A4=B1=E4=BC=A0);=E5=86=B3?= =?UTF-8?q?=E7=AD=96=3D=E6=9B=B4=E6=96=B0=E5=8E=9F2026-07-21=E8=9E=8D?= =?UTF-8?q?=E5=90=88spec=E4=B8=8D=E6=96=B0=E5=BB=BA(=E4=B8=89=E5=B1=82?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E4=BB=8D=E6=88=90=E7=AB=8B/=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E9=93=BE=E4=B8=8D=E6=96=AD/=E5=B0=91=E4=B8=80?= =?UTF-8?q?=E4=BB=BD=E6=96=87=E6=A1=A3),=E5=A4=B4=E9=83=A8=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=BB=8E=E3=80=8C=E8=AE=BE=E8=AE=A1=E8=8D=89=E6=A1=88?= =?UTF-8?q?=E3=80=8D=E7=BF=BB=E4=B8=BA=E6=B4=BB=E6=96=87=E6=A1=A3=E5=A3=B0?= =?UTF-8?q?=E6=98=8E+=E6=9C=80=E5=90=8E=E6=9B=B4=E6=96=B0=E6=97=A5?= =?UTF-8?q?=E6=9C=9F;=C2=A715=E6=B2=BF=E7=94=A8=E3=80=8C=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=8A=82=E8=BF=BD=E5=8A=A0=E6=96=B0=E8=8A=82=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E6=97=A7=E8=8A=82=E3=80=8D=E6=83=AF=E4=BE=8B:15.1=E5=8D=95?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E7=BA=A2=E7=BA=BF=2015.2=E5=8D=81=E4=B8=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=9F=9F=E6=B8=85=E5=8D=95=E8=A1=A8(?= =?UTF-8?q?=E6=BA=90/=E9=9B=86=E7=BE=A4/=E8=B0=83=E5=BA=A6/=E8=A1=8C?= =?UTF-8?q?=E6=95=B0/=E5=9B=9E=E8=A1=A5=E8=83=BD=E5=8A=9B)=2015.3=E4=B8=9C?= =?UTF-8?q?=E8=B4=A2=E5=A2=99=E6=A8=A1=E5=9E=8B(=E6=AF=8FIP=E6=AF=8F~40min?= =?UTF-8?q?=E7=AA=97=E5=8F=A31=E5=8F=91/cyq=E6=95=B0=E5=AD=A6=E6=AD=BB/?= =?UTF-8?q?=E6=8D=A2=E5=9F=9F=E7=AD=94=E6=A1=88)=2015.4=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E4=B8=8E=E9=98=B2=E7=BA=BF(panel=5Fgap=5Fcheck=E4=B8=A4?= =?UTF-8?q?=E6=A1=A3+panel=E5=A5=91=E7=BA=A6)=2015.5=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E5=A5=91=E7=BA=A6(=E7=82=B8=E6=9D=BF=E7=8E=87=E5=8F=A3?= =?UTF-8?q?=E5=BE=84/=E5=88=97=E5=90=8Dschema)=20[nas]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-07-21-data-source-fusion-design.md | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md b/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md index 29a152f..ba0476a 100644 --- a/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md +++ b/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md @@ -1,7 +1,9 @@ # A 股多数据源融合层设计 -> 日期:2026-07-21 | 基于 brainstorming + 4 源全能力调查(akshare / baostock / miniQMT / csindex) -> 状态:设计草案,待用户评审 → writing-plans +> 日期:2026-07-21 创建 | 基于 brainstorming + 4 源全能力调查(akshare / baostock / miniQMT / csindex) +> **状态:活文档(唯一数据设计文档)** —— 2026-09-02 起用户钦定:本文件是数据架构唯一权威设计, +> 每次数据架构变更必须同批更新到最新状态;演进采用「日期节追加,新节覆盖旧节相关决策」模式。 +> 最后更新:2026-09-02(A 档截面数据域全量上生产,§15) --- @@ -292,6 +294,64 @@ baostock 单进程单登录,`DAILY_LIMIT=48000`,sleep 限速,login 探针 gracef ### 14.9 config 清理 VPS config 的 daily_dir/raw_dir/qfq_dir/minute_15_dir 改 `C:\sanguo_vnpy_v2\data\...`(当前 yaml 指 NAS /volume1,容器版遗留)。NAS config 保留作备份。read_parquet_daily 的 daily_dir 统一指向 qfq(消除 daily/ vs qfq/ 分叉)。 +## 15. 增补 2026-09-02:A 档截面数据域全量上生产(本节为最新,覆盖前文相关决策) + +> 背景:调研 [daily_stock_analysis](https://github.com/ZhuLinsen/daily_stock_analysis)(Gitea 镜像 `sanguo/daily_stock_analysis`) +> 的数据采集面,双机实验(Mac + VPS 生产 IP 49.232.102.198)后落地。四 commit +> db789d6→020d7cd→00cfd45→46a0569,CI#303 NAS 验证绿 + vps-deploy#304 绿,tag=46a0569。 + +### 15.1 架构红线:单脚本注册表,零新采集脚本(用户钦定) + +脚本按**数据源(栈)**分类恒定:akshare 栈唯一采集入口=`scripts/data_platform/akshare_static_download.py`, +baostock 栈=bs_* 系列,xtdata 栈=daily_update_xtdata,新浪指数=sina_index_eod。**新数据类型=注册表添行 ++一个 fetcher 函数+wrapper 加名字**,禁止每类型开新脚本。akshare 本身是聚合库(东财/新浪/同花顺都在内), +新浪/同花顺数据进 akshare 脚本=按栈分类,不算混源。 + +### 15.2 新数据域清单(全部落 data/static//,parquet+marker) + +| 数据域 | 类型 | 源/端点(集群) | 调度 | 行数 | 回补能力 | +|---|---|---|---|---|---| +| zt_pool 涨停池 | per-date | 东财 stock_zt_pool_em(push2ex) | ak-events 19:30 | ~83/日 | **30 交易日内可回补** | +| zt_pool_zbgc 炸板池 | per-date | 东财 zbgc_em(push2ex) | 同上 | ~6/日 | 同上 | +| zt_pool_dtgc 跌停池 | per-date | 东财 dtgc_em(push2ex) | 同上 | 0-2/日(空=当日真无跌停,写空+done) | 同上 | +| fund_flow_industry 行业资金流 | per-date 快照 | 新浪 stock_fund_flow_industry('即时') | 同上 | 90/日(净额/流入/流出/领涨股) | ❌无历史回补,洞即永久 | +| fund_flow_concept 概念资金流 | per-date 快照 | 新浪 fund_flow_concept | 同上 | ~387/日 | ❌ | +| ths_industry 行业榜 | per-date 快照 | 同花顺 board_industry_summary_ths | 同上 | 90×12列/日 | ❌ | +| ths_concept 概念名单 | per-date 快照 | 同花顺 board_concept_name_ths | 同上 | ~375/日 | ❌ | +| xueqiu_hot 雪球热度 | per-date 快照 | 雪球 stock_hot_follow_xq('最热门') | 同上 | ~5634/日 | ❌ | +| sina_sector 新浪行业 | per-date 快照 | 新浪 stock_sector_spot | 同上 | 49/日(ths_industry 对账源) | ❌ | +| hot_rank 东财人气榜 | per-date 快照 | 东财 stock_hot_rank_em(emappdata) | **fetcher 就位未挂载,待墙测量拍板** | ~100/日 | ❌ | +| gdhs 股东户数 | **per-period** | 东财 stock_zh_a_gdhs(datacenter) | **ak-weekly 周六** | ~5342/期 | marker 去重,无新期零网络 | + +- **ak-events 事件窗现状 13 类** = 上表前 9 + 原有 dragon_tiger/block_trade/margin_sse/restricted +- gdhs 形状特殊:`build_gdhs_units` 只枚举**距今>90 天的季度末**(披露守卫)——防未披露期拉空走「真空+done」 + 被 marker 锁死永不重拉;cyq 筹码判死后的筹码结构免费替代(策略侧共识) +- 快照族节假日拉到上一交易日态(端点无 date 参数无自日期列),接受重复,消费方按交易日历过滤 + +### 15.3 东财墙模型(实测,勿再踩) + +- **每 IP 每窗口(~30-60min)放 1 发**:push2 clist(行业/概念榜/资金流榜)、push2his(kline/cyq/个股资金流)、 + emappdata(人气榜)三集群同款;第二发必死、镜像(1./17./79.push2)共享、请求形状无关 + (dsa 的 efinance 四差异 http+IE11UA+无ut+fid=f12 全复刻也死)、失败重试不重置窗口 +- **datacenter 集群(三报表/gdhs/top_holders)独立健康**,不受 push2 惩罚波及;**push2ex(涨停池)独立稳定连打全绿** +- **cyq 筹码全市场=数学死**(5552×40min≈154 天);dsa 的答案是 tushare cyq_chips token 且免费档 15 次/天 +- **行业/概念榜+资金流的免费答案=换域**:同花顺(行业+概念榜)+新浪(资金流+行业)实测秒级零限流 + +### 15.4 语义与防线(全族统一) + +- 失败→返 None 不写不标保旧数据(次日重试);真空 df→写空+done;列名零清洗 akshare 原样落盘 +- **缺日防线**(static_vintage_check.py 09:00):panel_gap_check 每工作日应有 1 个 parquet(节假日空文件也算有); + 可回补族(zt_pool×3)洞≤42 日历日→告警+回补指引;快照族洞即永久→近窗洞告警查日志、旧洞只入 json 不刷告警 +- **vintage_status.json 的 panel 块**=策略守卫层消费契约:`panel.={n_files,first_date,holes_backfillable,holes_permanent}` + +### 15.5 消费契约(与策略 session 09-02 对齐) + +- **炸板率 = 炸板池行数/(涨停池+炸板池行数)**:涨停池=收盘仍封(「炸板次数」>0 行=炸过又回封),炸板池=触板未封, + 并集≈当日触板全集,分母无遗漏 +- 涨停池 16 列:封板资金/首次封板时间/最后封板时间/炸板次数/涨停统计/连板数/**所属行业**( + =免费当日热点行业分布信号,涨停行业集中度原料)/换手率/市值等 +- 温度计三支柱=涨跌停(hot_rank 待批)+雪球;情绪周期/打板/行业轮动因子原料自 2026-08 起逐日积累 + ## 参考(调查来源) - xtdata 官方:https://dict.thinktrader.net/nativeApi/xtdata.html