辅助数据源
概述
除四大主源(腾讯/TDX/东财/新浪)外,本项目还接入了多个垂直领域权威源,覆盖法定信息披露、行业分类、涨跌停统计、定性 F10 解读等场景。这些数据源通常不承担行情/估值主源职责,但在各自领域具有不可替代性。
数据源一览
| 数据源 | 角色 | 核心数据 | 风控 |
|---|---|---|---|
| 巨潮 cninfo | 法定披露平台 | 公告/大宗/两融/沪深港通/债券/摇号 | curl_cffi 伪装,0.5s 限流 |
| 申万 sw_official | 行业分类权威 | 一级 31 + 二级 124 行业清单/成分股/指数日线 | TLS 证书链特殊处理,~150 次后 403 |
| 金十 JRJ | 涨跌停温度计 | 涨跌停概览/一字板/历史/分钟线 + 大盘云图行业树 | curl_cffi 伪装,逆向自 Nuxt.js |
| 同花顺 THS F10 | 定性补充 | 龙虎榜/两融/大宗 + F10 九大子页 | 旧版 SSR 免 Cookie,不封 IP |
| 上交所 SSE | 官方权威 | 股票列表/市场概览/行业统计 | 分页截断陷阱(pageSize 须够大) |
| 深交所 SZSE | 官方权威 | 同上 | 全站阻断风险(熔断冷却 600s) |
| 中证指数 CSIndex | 官方权威 | 成分权重/估值/指数档案/调样公告 | — |
| 金十宏观 | 补充 | 工业增加值/进出口/外汇储备/财新 PMI | datacenter-api 不可达时跳过 |
巨潮 cninfo
概述
巨潮(www.cninfo.com.cn)是证监会指定法定信息披露平台,提供公告全文、大宗交易统计/明细、融资融券汇总、沪深港通余额、可转债、摇号抽签等数据。
实现位置
| 文件 | 职责 |
|---|---|
data_sources/cninfo_client.py | HTTP 客户端(curl_cffi TLS 伪装 + 0.5s 限流 + orgId 缓存) |
data_manager/downloaders/cninfo.py | 下载器(13 张 RAW 表) |
API 接口
GET http://www.cninfo.com.cn/new/data/szse_stock.json # 全量 A 股列表
POST https://www.cninfo.com.cn/new/hisAnnouncement/query # 公告全文检索(26 类)
POST https://www.cninfo.com.cn/data20/ints/statistics # 大宗交易统计
POST https://www.cninfo.com.cn/data20/ints/detail # 大宗交易明细
POST https://www.cninfo.com.cn/data20/marginTrading/market # 融资融券汇总
POST https://www.cninfo.com.cn/data20/balanceTrend/stockConnect # 沪深港通余额
POST https://www.cninfo.com.cn/data20/balanceTrend/stockConnectActive # 沪深港通活跃个股
POST https://www.cninfo.com.cn/new/information/getPrbookInfo # 预约披露时间表
POST https://www.cninfo.com.cn/new/bond/queryBondList # 可转债列表
POST https://www.cninfo.com.cn/new/lottery/query + /detailQuery # 摇号抽签
落库表(13 张 RAW)
CninfoStockBaseInfo / CninfoPeriodicReport / CninfoDividendDetail / CninfoShareChange / CninfoShareholderMeeting / CninfoBlockTradeStat / CninfoBlockTradeDetail / CninfoMarginTrading / CninfoStockConnect / CninfoStockConnectActive / CninfoDisclosureSchedule / CninfoBond / CninfoLottery
注意事项
- data20 端点滞后一天:大宗/两融/沪深港通等
data20系列数据常滞后一天发布,下载器自动回退一天取数 - 公告类型推断:API 的
announcementTypeName常为 None,由标题关键词推断兜底 - curl_cffi 伪装:规避 403 风控,TLS 指纹模拟 Chrome 120
申万行业分类(sw_official)
概述
申万宏源研究官方(www.swsresearch.com)是行业分类体系权威源,提供一级 31 + 二级 124 行业清单、成分股(含权重)、全历史日线(1999 年起)。
实现位置
| 文件 | 职责 |
|---|---|
data_sources/sw_official.py | HTTP 客户端(TLS 证书链合并 + 退避重试) |
data_manager/downloaders/sw_industry.py | 下载器(sw_index_meta + sw_index_constituent) |
API 接口
GET https://www.swsresearch.com/institute-sw/api/index_publish/current/
?page=1&page_size=300&indextype=一级行业|二级行业 # 行业清单
GET https://www.swsresearch.com/institute-sw/api/index_publish/details/component_stocks/
?swindexcode=801010 # 成分股(含权重%)
GET https://www.swsresearch.com/institute-sw/api/index_publish/trend/
?swindexcode=801010&period=DAY # 全历史日线(1999-12-30 起)
落库表
| 表 | 内容 | 更新频率 |
|---|---|---|
sw_index_meta | 行业清单(code/name/level/parent) | 周级 |
sw_index_constituent | 成分股(code/weight/industry_code) | 周级 |
fox_industry_index_daily | 行业指数日线(由 sw_industry_sync 16:10 融合) | 日频 |
注意事项
- TLS 证书链特殊处理:官网不回传中间证书,需运行时合并 certifi + 仓库自带 GeoTrust 中间证书生成 bundle
- ~150 次请求后 403:内置指数退避重试,全市场覆盖约需 160 次请求
- 二级行业父级推导:代码段启发式不可用(22/124 不成立),由成分股归属反推父级
- 全历史无日期参数:
trend接口不支持日期区间,返回全量历史(1999 起),增量窗口 10 天 - 全量覆盖写入:先删后插,确保成分股变动及时反映
金十 JRJ
概述
金十(gateway.jrj.com)提供涨跌停温度计与大盘云图行业树,是市场情绪与行业轮动的关键数据源。接口逆向自 Nuxt.js 前端 JS bundle(module 45 + 1031)。
实现位置
| 文件 | 职责 |
|---|---|
data_sources/jrj_client.py | HTTP 客户端(curl_cffi 伪装) |
data_manager/downloaders/jrj.py | 下载器(4 张 RAW 表) |
API 接口
# 涨跌停(需 productId=6000021 头)
GET https://gateway.jrj.com/quot-dc/zdt/v1/market # 概览(涨跌停/炸板家数)
GET https://gateway.jrj.com/quot-dc/zdt/yzzdt # 一字涨跌停
GET https://gateway.jrj.com/quot-dc/zdt/market_history # 历史(日频)
GET https://gateway.jrj.com/quot-dc/zdt/v1/market_timeline # 分钟线(盘中时序)
# 大盘云图(不需要 productId)
GET https://gateway.jrj.com/quot-dpyt/v1/market # 行业三层树
GET https://gateway.jrj.com/quot-dpyt/v1/hq # 6 列行情快照
落库表
| 表 | 内容 | 定时任务 |
|---|---|---|
jrj_market_summary | 涨跌停概览 | fox_daily_sync → market_daily |
jrj_yzzdt | 一字涨跌停 | fox_daily_sync → market_daily |
jrj_market_history | 涨跌停历史 | fox_daily_sync → market_daily |
jrj_market_timeline | 涨跌停分钟线 | fox_daily_sync → market_daily |
fox_market_dpyt | 大盘云图行业树(DWD) | fox_daily_sync → market_dpyt |
注意事项
- 涨跌停接口需 productId 头:
productId=6000021,dpyt 接口不需要 - 逆向自 Nuxt.js:接口未公开文档,由前端 JS bundle 逆向得出,可能随版本更新变动
- 大盘云图 6 列行情:
chg/chgw/chgm/chgy/netin/pefwd(涨跌幅/周涨跌/月涨跌/年涨跌/净流入/前瞻 PE)
同花顺 THS F10
概述
同花顺 F10(basic.10jqka.com.cn)提供定性 F10 补充数据,强于文字解读(财务变动原因/资本运作事件),与东财数值行情互补。旧版 SSR 页面免 Cookie 不封 IP。
实现位置
| 文件 | 职责 |
|---|---|
data_sources/ths_f10.py | F10 九大子页 HTML 解析(GBK 编码) |
data_sources/ths_kuaixun.py | 7x24 快讯备用源(JSONP 格式) |
data_sources/ths_limitup_reason.py | 涨停原因揭秘(唯一可行源) |
data_manager/downloaders/ths_f10.py | 下载器(3 张事件表 + 9 张快照表) |
数据覆盖
| 子页 | URL 路径 | 内容 |
|---|---|---|
| company | /{code}/ | 公司概况 |
| finance | /{code}/finance.html | 财务分析 |
| holder | /{code}/holder.html | 股东研究 |
| operate | /{code}/operate.html | 经营矩阵 |
| bonus | /{code}/bonus.html | 分红历史 |
| worth | /{code}/worth.html | 估值分析 |
| equity | /{code}/equity.html | 股权结构 |
| capital | /{code}/capital.html | 资本运作 |
| news | /{code}/news.html | 公司新闻 |
事件数据(与东财互补)
| 数据 | URL | 落库表 | 定时任务 |
|---|---|---|---|
| 龙虎榜 | data.10jqka.com.cn/market/lhbgg/code/{code}/ | ths_f10_lhb | ths_f10_events_sync 21:00 |
| 两融 | data.10jqka.com.cn/market/rzrqgg/code/{code}/ | ths_f10_rzrq | ths_f10_events_sync 21:00 |
| 大宗 | data.10jqka.com.cn/market/dzjy/ | ths_f10_dzjy | ths_f10_events_sync 21:00 |
| 涨停原因 | zx.10jqka.com.cn/event/api/getharden | ths_limitup_reason | limitup_reason_sync 18:05 |
| 7x24 快讯 | stock.10jqka.com.cn/thsgd/realtimenews.js | em_stock_news(备用) | news_sync 17:00 |
注意事项
- 旧版 SSR 免 Cookie:
basic.10jqka.com.cn旧版页面不封 IP,新版 SPA(astockpc/concept.html)需 JS 渲染不可接入 - GBK 编码:HTML 页面为 GBK 编码,解析时须显式指定
- 涨停原因唯一源:东财无对应免登录接口,THS 是唯一可行源
- 候选池限制:
ths_f10_events_sync只拉取近 7 天东财主源事件表出现过的代码(同花顺只为确有事件出页,全市场轮询 90%+ 是空请求) - 空返回不落覆盖:候选池无数据时落
[]尝试标记,已有数据的行绝不用空覆盖
交易所官方数据(SSE / SZSE)
概述
上交所(query.sse.com.cn)与深交所(www.szse.cn)是法定权威数据源,提供股票列表、市场概览、行业统计等官方数据,用于交叉验证 DWD 层。
实现位置
| 文件 | 职责 |
|---|---|
data_sources/sse_client.py | 上交所客户端(分页守卫) |
data_sources/szse_client.py | 深交所客户端(IPv4 钉定 + 熔断冷却) |
data_manager/exchange_fusion.py | 融合器(SSE + SZSE → fox_exchange_*) |
落库表(DWD)
| 表 | 内容 | 融合逻辑 |
|---|---|---|
fox_exchange_stock_list | 官方股票清单 | SSE + SZSE 合并 |
fox_exchange_market_overview | 市场概览(总市值/成交额/PE/PB) | 单边数据不写合计行 |
fox_exchange_industry_stat | 行业统计(成交额/市值) | 降级源单位换算(元→亿元) |
注意事项
- SSE 分页截断:
commonQuery.do系列端点忽略pageNo,只尊重pageSize——必须一次给足(page_size=2000, max_pages=1) - SZSE 全站阻断:2026-09-21 实测本机被全站拒绝(
Empty reply from server),需钉定 IPv4 + 轮换候补 IP + 连续 5 次失败后 600s 熔断冷却 - 单边不写合计:
fuse_market_overview的合计行判据为and(单边时不写合计行,缺哪侧写进totalSkipped) - 降级源单位换算:腾讯行业快照是元/手,写入
fox_exchange_industry_stat前须 ÷1e8 / ÷1e6 归一为亿元/亿股 - fuse_recent(10):
exchange_sync18:10 末尾调用,把最近 10 个交易日 RAW 融进 DWD(逐日幂等,防止 DWD 静默停更)
其他补充源
| 数据源 | 文件 | 角色 | 核心数据 |
|---|---|---|---|
| 中证指数 CSIndex | csindex_sources.py | 官方权威 | 成分权重(.xls)/估值指标/指数档案/调样公告 |
| 金十宏观 | macro_jin10.py | 补充 | 工业增加值/进出口/外汇储备/财新 PMI |
| 央视财经 | cctv_news.py | 补充 | 政策新闻 |
| 宏观中国 | macro_china.py | 补充 | GDP/CPI/PMI/M2/社融/LPR(东财 datacenter-web) |
| 中国货币网 | macro_sources.py | 官方权威 | FR/FDR 定盘利率/Shibor(CSV 直下载) |
| 央行官方 | policy_rate_sync | 官方权威 | LPR/准备金率/存贷款基准利率(公告口径手工维护) |
备用与交叉校验源(2026-10-06 新增)
这组源与上面「垂直领域权威源」定位不同:它们不承担主链路职责,而是补主链路
拿不到的维度,或给已有指标提供独立第三方口径用于对账。页面入口 /alt-sources。
| 数据源 | 文件 | 定位 | 核心数据 |
|---|---|---|---|
| 集思录 jisilu | jisilu_client.py | 能力扩展 | 转债债性:到期收益率(YTM)/下修次数/距强赎空间 |
| 乐咕乐股 legulegu | legulegu_client.py | 交叉校验 | A股 PE/PB 中位数与等权平均、破净股、市场拥挤度 |
| AAStocks | hk_ipo_client.py | 能力扩展 | 港股新股:超额认购倍数/每手股数/中签率/首日与累计表现 |
| 东财港股首发 | hk_ipo_client.py | 补源 | 港股 IPO 募资总额/实际发行总数/关键日期 |
| 雪球私募 | xueqiu_private_client.py | 能力扩展 | 私募净值/回撤/夏普(需 XUEQIU_COOKIE) |
集思录:转债债性维度
双低策略只看「债价 + 转股溢价率」,回答的是贵不贵,回答不了跌得下去吗。
东财 RPT_BOND_CB_LIST 全字段实测只有 RATING,没有 YTM / 下修次数 / 距强赎空间,
这块只能靠集思录补。
接口:POST https://www.jisilu.cn/data/cbnew/cb_list_new/(表单,免登录)
响应里 warn 字段会写明「游客仅显示前 30 条,请登录查看完整列表数据」,
page / rp / filter / sort 全部被服务端忽略(实测传不同值返回完全一致的
30 条)—— 不要写分页。这 30 条默认按转股溢价率升序(实测 0→13.3% 单调),
恰是债性分析最有价值的一批,故本项目定位为「低溢价精选池的债性体检」,
不得宣称全市场。响应带 coverage 字段说明实际覆盖范围。
三个必须知道的字段陷阱(照字面理解会得出错误结论):
| 字段 | 直觉含义 | 实测真相 |
|---|---|---|
sqflag | 强赎标志 | 不是。30/30 恒为 'Y'(含正股价仅达转股价 109%、根本没触发强赎的)。强赎风险须用「正股价 vs 强赎触发价」自行判定 |
bond_value | 纯债价值 | 不是。是'buy' 申赎状态字符串 |
option_value / put_ytm_rt | 期权价值 / 回售收益率 | 游客态全为 None → 纯债价值、期权价值、回售收益率取不到,故这三项及其派生指标不产出(宁可不给,不给假数) |
补充:force_redeem_price 实测恒等于 convert_price × 1.3(30/30 命中),
可作字段自洽校验;ytm_rt 30/30 非空,是最核心的债性字段。
债底安全边际分
cb_bond_analytics_service.py 把上述字段加权成 0~100 的安全分:
| 维度 | 权重 | 映射 |
|---|---|---|
| 到期收益率 YTM | 35% | -10%→0,0%→50,+10%→100,超界截断 |
| 信用评级 | 25% | AAA 100 … CCC 1(未知评级返回 None 不返回 0) |
| 转股溢价率 | 25% | ≤0→100,20%→50,≥40%→0 |
| 剩余年限 | 15% | 0 年→100,≥6 年→0 |
缺失维度按剩余维度重新归一权重,不做默认填充——填 0 会把「缺数据」伪装成
「极差数据」。四维全缺返回 None(页面显示「数据不足」)而非 0 分。
乐咕乐股:交叉校验而非替代
本仓已自算 ERP(fox_erp_daily,盈利收益率 - 10年国债)与拥挤度
(fox_market_liquidity_daily 的「前5%成交额占比」分位)。乐咕提供独立第三方
口径用于对账——两者显著背离往往说明本仓样本范围或剔除规则有问题,
是排查自身口径 bug 的参照系,不是重复建设。
/api/stock-data/* → 404、/api/s/base-info → 301→404。现改为服务端渲染 HTML,
本项目走 get_text + 正则解析。三个解析坑(不核实就会出错):
- 页面首列是「说明」正文,位置法解析会错位;拥挤度页必须按表头名映射列 (表头:日期 | 收盘价 | 前5%成交额 | 全部A股成交额 | 拥挤度%), 否则会把收盘价 3842.19 当成拥挤度
滚动市盈率等权平均标签没有(TTM)后缀,按字面写正则一条都匹配不到- 破净股表格没有股票代码列(「序号」是行号不是代码)→ 只返回名称+行业+财务指标,
code不臆造
/stockdata/a-pe 与 /stockdata/a-risk-premium 页面只有说明文字没有数值,
别指望从它们取 PE 分位或 ERP。
港股新股:量化派已死,替代方案
参考项目用的 api2.lianghuaipo.com 已失效(实测 502,DNS 解析但无后端),
故改用两个实测可用的源:
| 源 | 用途 | 关键点 |
|---|---|---|
https://www.aastocks.com/tc/stocks/market/ipo/listedipo.aspx?page=N | 列表(主源) | 不需要 selenium(参考项目当年用它是权宜之计,现 curl -L 直接可读);分页参数只能叫 page(pageindex/p/pg 均返回空表),每页 20 条 |
https://emweb.securities.eastmoney.com/PC_HKF10/CorporateEvents/PageAjax?code=XXXXX | 补源(单股 JSON) | 免登录免 Referer;两源超购倍数实测一致(AAStocks 3545.9 vs 东财 3547,四舍五入差) |
东财 datacenter 无港股 IPO 报表——实测 10+ 种 reportName 全部返回
报表配置不存在 (code 9501)。
两个免费源确实拿不到的字段(故接口与页面都不产出,别用假数据填):
暗盘价(AAStocks JS 字典里有「暗盤」字样但表格无此列)与
保荐人/主承销商(东财 JSON 多为 '--',而网页版有值——渲染不一致)。
雪球私募:需凭据
接口 https://xueqiu.com/private_fund/v3/rank/list.json 强制要求登录态:
匿名请求(仅 acw_tc 会话)返回 {"message":"query rank error.","success":false}。
注意路由已迁移,/private_fund/list、/private_fund/rank 均为 404。
配置 XUEQIU_COOKIE 环境变量(形如 xq_a_token=...; u=...)后自动生效,
详见 .env.example。未配置时属预期不可用,接口返回
available: false + need_credential: true,页面展示引导文案而非错误弹窗。
本仓不硬编码任何凭据(参考项目当年把雪球 token 明文写在 config.json,
本项目改为环境变量注入)。
统一的源状态契约
三个源各自独立成败,一个挂了不影响其余两个。响应统一用 available 显式区分
「取不到」与「确实没有数据」—— 把源故障渲染成空表格是最容易误导排查的做法。
/alt-sources/overview 一次性返回三源状态摘要(可用 / 需凭据 / 不可用 + 原因)。