Skill9.5k repo starsupdated 4d ago
a-stock-data
当任务需要写代码实际获取A股数据时使用——拉取行情/K线(mootdx+腾讯+百度)、研报(东财+同花顺+iwencai)、信号(热点/北向/龙虎榜/解禁/行业)、资金面(融资融券/大宗/股东户数/分红/资金流)、新闻、财务三表/F10、公告(巨潮)、打板(涨停池/连板/炸板率/重点监控池/日内异动)、ETF期权(T型报价/希腊字母/IV)、舆情互动(互动易/热榜/人气榜)、筹码分布(获利比例/成本区间)、复权因子、估值历史(PE/PB/PS+换手率+ST)、申万行业变迁史、宏观(社融/PMI)等真实数据。十一层数据源·54端点(含3官方备胎)·内嵌全部可运行代码,自包含零依赖外部文件;优先用通达信(mootdx)/腾讯(不封IP),东财接口已内置限流防封,主源被封可查「备用源速查」降级。仅在需要调用数据接口取数时使用:A股概念解释、投资观点讨论、策略问答等无需取数的话题不要加载本skill。
Install in Claude Code
Copygit clone https://github.com/simonlin1212/a-stock-data ~/.claude/skills/a-stock-dataThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
> 📦 项目主页:https://github.com/simonlin1212/a-stock-data — 更新、反馈、支持作者
>
> 作者:Simon 林 · X [@linsizhen](https://x.com/linsizhen) · 邮箱:simonlin0423@gmail.com
# A股全栈数据工具包 V3.7.1
十一层数据架构,54 个端点实测可用(51 主端点 + 3 官方备胎,2026-08 验证),覆盖主板/中小板/科创板/ST。每类数据在「备用源速查」列有独立备胎,主源被封时可降级。
> **V3.7.1(后缀路由修复,2026-08-20):**`get_prefix()` 认显式前缀(`sh000016`)却不认等价的后缀写法(`000016.SH`)——而 `norm_ticker()` 文档明文支持后缀式,且 `em_market_code()`/`em_secid()`(V3.7.0 新增)把**未归一化的原串**直接喂给 `get_prefix()`:`000016.SH` 以 `0` 开头落到默认深市分支,secid 拼成 `0.000016`(深康佳A)而非 `1.000016`(上证50 指数),**静默返回另一只标的的数据**。已在 `get_prefix()` 开头加后缀识别分支(`.sh/.sz/.bj` 与显式前缀等价透传),号段推断与沪指数白名单逻辑不变。⚠️ 走「前缀+原串拼接」的端点(`tencent_quote()`、新浪财报等)仍只认纯 6 位或前缀式——后缀式会把 `.SH` 拼进请求串,**先过 `norm_ticker()` 再传**的总原则不变。
>
> **V3.7.0(宏观层 + 筹码分布 + 复权因子 + 估值历史,2026-08-19):**新增 **1 个数据层、7 个端点、4 个数据源**(baostock / 申万 / 人民银行 / 国家统计局,全部零注册零 key)。全部端点于 2026-08-19 实跑验证。
>
> - **§4.6 筹码分布 CYQ** — 补上本层名实不符的窟窿:Layer 4 叫「资金面 / **筹码**层」但 §4.1~§4.5 全是资金面数据,一直没有真正的筹码分布。**东财没有公开 CYQ 接口**(实测 `push2`/`push2his` 的 `cyq/get` 均 404),本端点用 OHLC + 换手率**本地推演**,零新增数据源。输出获利比例 / 平均成本 / 90-70 成本区间与集中度 / 筹码峰。⚠️ 初始筹码**播种为首日全部流通盘**——从全零起步会把窗口前的存量持仓一笔勾销(两个 1% 换手日会被算成 50/50,真实应约 99%/1%)。
> - **§6.5 估值历史** — §1.2 腾讯只有**当日**估值快照,本端点给**日频历史序列**(实测茅台 2016-01-04 起 2581 行),并一次补齐此前完全缺失的四项:**换手率**(筹码分布的必需输入)、**停牌状态**、**ST 标记**(实测 000004 有 276 天 isST=1)、历史 PE/PB/PS/PCF。⚠️ **baostock 不支持北交所**,服务端报 `10004011`,本实现在**登录前**就拦掉抛 `ValueError`。
> - **§1.4 复权因子** — §1.1 通达信 `bars()` 是**不复权**数据,跨除权日直接比价必错。新浪 qfq/hfq 因子序列一次 HTTP 约 1.8KB。⚠️ 响应末尾挂着 `/* base64 */` 注释块,**不能用 `$` 锚定正则**,须用 `raw_decode`。
> - **§6.6 上市/退市日** — 唯一能拿到**退市日期**的零鉴权源,配合 §1.2 `is_stale` 可在筛选阶段剔除僵尸标的。
> - **§6.7 申万行业变迁史** — §3.7 东财只有**当前**行业归属,用它做历史研究是**前视偏差**。本端点给每只股票的行业变迁(实测 12,893 行 / 5,905 只 / 38 个一级行业;有标的历史变更过 10 次)。⚠️ 申万官方只发代码不发中文名。
> - **§11.1/§11.2 宏观层(新)** — 人民银行社融(月度 12 列)+ 国家统计局 PMI。⚠️ 社融链路是三级跳,未发布月份**整行丢弃**而非返回 NaN(否则调用方会把 12 行当 12 个月真数据);PMI 正文是全角括号**内带空格**,空白必须**整个删掉**才匹配得到。
> **V3.6.1(龙虎榜空窗口崩溃修复,2026-08-09 · #45):**`dragon_tiger_board()` 在回看窗口内无上榜记录时抛 `UnboundLocalError`——而大市值 / 低换手率标的(如贵州茅台)常态无上榜,等于**调用即崩**,调用方还无法区分「无数据」与「接口异常」。已修,空窗口返回语义一致的空结构。
>
> **V3.6.0(静默失败修复 + 重点监控池/日内异动,2026-07-31 · #15):**
> - **🔴 北交所老号段(43/83/87)会返回僵尸数据且不报错**:实测在市 342 只中 **336 只已迁至 `920xxx`**(锦波生物 `832982`→`920982`、贝特瑞 `835185`→`920185`),老码在东财研报静默返回 **0 篇**、在腾讯行情返回**定格报价**(成交量 0,价差达 17%~100%+)却仍是 HTTP 200。新增全局警告章节;`tencent_quote()` 增加 `is_stale`/`stale_reason` 标志(实测老码 2/2 命中、正常票 4/4 无误报);`eastmoney_reports()` 遇老码**抛 ValueError 而非返回空**。
> - **🔴 §2.1/§2.2 研报层 ticker 未归一化(静默空)**:`eastmoney_reports("SH600519")` / `"600519.SH"` 一律返回 **0 篇**(reportapi 只认纯 6 位),而文档「Ticker 格式归一化」明文承诺全接口支持带前缀写法——**承诺与实现不符,且失败方式是静默空**,调用方会误读成「该标的无研报覆盖」。新增 `norm_ticker()` 实现(解析失败抛 ValueError,绝不返回空串),`eastmoney_reports()` / `ths_eps_forecast()` 接入。
> - **§8.4 `em_stock_monitor()` 东财重点监控池新增(#15)**:交易所风险警示 / 重点监控名单 + 生效时间窗,零鉴权静态 JSON。
> - **§8.5 `em_price_anomaly()` / `em_price_anomaly_count()` 日内异动池新增(#15)**:交易所「严重异常波动」口径的异动明细与按标的聚合统计,含 12 条异动规则码全解释。⚠️ 必须带 `team=h5` 等固定参数,缺失返回 `unknow team`——已做 `result!=0` 冒泡而非静默返回空。
> - **§2.1 行业研报去硬编码日期**:`begin` 默认由固定的 `2024-01-01` 改为「相对今天往前两年」,避免时间窗越用越旧。
> - 端点 44 → 47。实测 24/24 通过(含前缀格式 4/4、老号段拦截、新端点真数据、异动接口拒绝冒泡)。
>
> **V3.5.0(板块资金流向,2026-07-23 · #37):**
> - **§3.8 `board_fund_flow()` 板块资金流向新增**:补上此前缺失的**板块级资金流**——行业/概念/地域三类板块 × 今日/5日/10日三周期,主力净流入额/净占比 + 超大/大/中/小单四档明细 + 领涨股。与 §3.7 板块排名**同源同接口**(东财 push2 `clist`),此前只请求了价格/涨跌家数字段,本版补请求 `f62/f184/f66...` 资金流字段即覆盖。走 `em_get` 限流防封。端点 43 → 44。
> - 实测(2026-07-23):行业今日 100 个板块主力净额降序(电力设备 64.66亿 = 超大 43.55亿 + 大 21.11亿)、概念 5 日、地域 10 日均真实返回;参数校验拒绝非法 board_type/period。
>
> **V3.4.1(前缀路由 + mootdx 验活修复,2026-07-23):**
> - **§1.2/§市场前缀规则 前缀路由修复(#40 #41)**:`5` 开头沪市 ETF(`510300`/`588200` 等)、沪深指数(`000300`/`000016` 等)此前落到 `else → sz`,腾讯接口返回空**或错票**(`000016` 被误判为 `sz000016` *ST康佳A,静默返回不相干标的的数据,比返空更危险)。`get_prefix()` 与 `tencent_quote()` 两处同步修复:`5x→sh`、沪指数白名单、支持显式前缀(`sh000001`/`sz000001`)透传解决 `000001`(上证指数 vs 平安银行)歧义。
> - **§1.1 `tdx_client()` 真实取数验活(#43)**:`_probe()` 仅做 TCP 握手,握手成功 ≠ 能取数——坏服务器可握手通过却回 2 字节空 body,导致**静默返回空 DataFrame 或连接崩溃**且走不到 fallback。新增 `_validate()`:每个候选 server 必须真实拉一根 K 线成功才采用,并对 `factory()` 连接异常做 try/except 跳过,全部失败才抛明确错误。
> - **备用源速查 K线行新增腾讯 m5 分钟 K 线(#43)**:同花顺 K 线备胎只有 30/60 分,mootdx 一挂就无 5 分钟源。补腾讯 `ifzq.gtimg.cn` 分钟 K(m1/m5/m15/m30/m60,零鉴权不封 IP)。⚠️ 第 7 字段是**换手率基点**不是成交额(差 3 个数量级),成交额需自算。
>
> **V3.4.0(接口质量 + 备用源韧性,2026-07-11):**
> - **§5.2 财联社快讯复活**:旧 nodeapi 2026-05 下线后,改走官方 `v1/roll/get_roll_list` + 本地签名(`sign=md5(sha1(排序query))`,零 key),V3.2 移除的全市场电报能力恢复,与东财 7×24 互为独立备份。实测 errno=0。
> - **新增「备用源速查 & 降级策略」章节**:十层主源→独立备胎速查表(不同域名/不同风控面)+ 3 个实测备胎函数——`dragon_tiger_backup()`(沪深交易所官方龙虎榜,含营业部席位)、`fund_flow_backup()`(新浪日度资金流)、`announcements_backup()`(深市深交所官方/沪市东财公告+PDF)。端点 40 → 43,数据源 13 → 15(新增沪深交易所官方)。
> - **§3.6 解禁字段修复**:东财 `RPT_LIFT_STAGE` 改列名致 `type`/`shares` 恒空 → 改 `FREE_SHARES_TYPE`/`FREE_SHARES`,并新增 `able_shares`(实际可流通股数,更贴近真实抛压)。
> - **§3.7 行业排名排序修复**:clist 请求补 `fid=f3`,`top`/`bottom` 现按涨跌幅真实排序(此前缺排序字段,切片结果非涨幅序)。
> - **§3.2 深股通标注**:北向盘中披露收紧后 sgt 分钟序列不可靠(hgt 可用),权威北向用 HKEX 官方日统计(见备用源速查)。
> - **体验**:顶部新增「端点路由速查」总表(§→函数→用途→源,可按需局部读取);FAQ 新增东财被封对策 / 财联社复活 / mootdx 库烂尾说明。
>
> **V3.2.3(行业研报新增):**
> - **§2.1 东财行业研报 `eastmoney_industry_reports()`**:研报层补上行业研报端点(此前只有个股研报)。与个股研报**同端点** `reportapi.eastmoney.com/report/list`,仅 `qType=1`;`industry_code="*"` 拉全行业、传东财行业码(如 `1238`=IT服务Ⅱ)精确过滤,PDF 复用 `download_pdf()`,走 `em_get` 限流。端点数 27 → 28。
> - 实测(2026-06-20):全行业 `hits=47928`、按行业码 `1238` 过滤 `hits=1863`,首篇 PDF `H3_{infoCode}_1.pdf` 下载成功(2.5MB,`%PDF` 头);行业码表端点(`bxpa` 等)404 不存在,用 `"*"` 拉取后从结果反查行业码。
> **V3.2.2(失效接口替换 + 隐藏 Bug 修复):**
> - **§3.3 概念板块归属(#18)**:百度 PAE `getrelatedblock` 失效(`ResultCode 10003` + 空数组)→ 改用东财 `slist`(`spt=3`)`eastmoney_concept_blocks()`,一次请求拿全个股所属板块(行业/概念/地域 + BK码 + 涨跌幅 + 龙头股),零鉴权走 `em_get` 限流。
> - **§7.1 巨潮公告 orgId(#19)**:硬编码 `gssx0{code}` 致大量 601xxx 股票 `totalAnnouncement=0` → 新增 `_cninfo_orgid()` 动态查官方映射表 `szse_stock.json`(6198 只股,模块级缓存),硬编码降为 fallback。
> - **综合示例修复**:示例仍调用 v3.1 已删的 `baidu_fund_flow_history` →