跳到主要内容

新浪数据源

概述​

新浪(quotes.sina.cn / vip.stock.finance.sina.com.cn / finance.sina.com.cn / money.finance.sina.com.cn / hq.sinajs.cn)在本项目承担主源与兜底两类角色,覆盖 8+ 实现文件、横跨财报/行情/期货/跨市场四大领域。与东财、腾讯分属不同域名与风控面,是降级链中最可靠的兜底层(风控最宽松、历史最稳定)。

角色数据何时使用优先级
财报三表 + 关键指标利润表/资产负债表/现金流量表/gjzb主源(fin_statement_sync 20:30 全市场批量)主源
复权因子前复权/后复权因子主源("不复权价 + 因子"契约的因子来源)主源
北交所 K 线不复权日线主源(腾讯 fqkline 不覆盖北交所)主源
跨市场数据A50 期货 + 离岸人民币 (CNH)唯一源(腾讯全球目录无此品种)唯一源
国内期货主力合约行情主源(多品种并行拉取)主源
ETF 历史 K 线不复权日线(约 2000 根)兜底(腾讯 fqkline 为 ETF 主源)兜底
资金流日度单股净额东财熔断/限流后的备用源兜底
行业涨跌幅newSinaHy.php 全行业降级源降级
市场概览大盘指数/分时兜底(腾讯指数主源)降级
美元指数DXY 实时东财不可用时的兜底降级

实现位置​

核心文件(8+ 模块)​

文件职责关键函数
data_sources/sina_source.py行情/K线/复权因子/行业get_daily_kline() / get_sina_adjust_factor() / get_index_daily() / get_market_spot() / get_industry_boards() / apply_adjust_factor()
data_sources/signal_layer.py财报三表(单股 + 历史)sina_financial_report() / sina_financial_report_history() / _sina_fflow_days()
data_manager/downloaders/sina_batch.py全市场批量 gjzbdownload_sina_financial_indicator_all()(4 并发 + 0.3s 节流 + 分块熔断)
data_manager/downloaders/sina_stmt_batch.py批量财报三表download_sina_statements_all()(1200 只/轮,fin_statement_sync 20:30 调用)
data_sources/cross_market_data.pyA50 期货 + 离岸人民币sina_cross_market_quotes() / sync_cross_market_from_sina()
data_sources/futures_sources.py国内期货主力合约_fetch_sina_futures_multi()
data_sources/fund_sources.pyETF 行情兜底_fetch_etf_quote_sina()
data_sources/macro_sources.py美元指数兜底_dxy_from_sina()
data_sources/real_data_source.pyRealDataSource 内联版_get_sina_financial_report()
market_data_service/providers_eastmoney.py资金流备用源(历史归置)sina_fund_flow()(与东财同仓)

API 接口​

财报三表 + 关键指标​

https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022
  • 参数:paperCode(带市场前缀 sh/sz/bj)、source(lrb 利润表 / fzb 资产负债表 / llb 现金流量表 / gjzb 关键指标)、type=0、page=1、num=N
  • 返回:report_list 结构,解析后为 [{report_period, items: {科目: 值}}]
  • 消费方:
    • 单股:signal_layer.py::sina_financial_report()(按需拉取 + 缓存)
    • 全市场批量:sina_batch.py::download_sina_financial_indicator_all()(gjzb 40 期,4 并发 + 0.3s 节流 + 分块熔断)
    • 财报三表批量:sina_stmt_batch.py::download_sina_statements_all()(1200 只/轮,20:30 fin_statement_sync 调用)

复权因子​

https://finance.sina.com.cn/realstock/company/{symbol}/qfq.js # 前复权因子
https://finance.sina.com.cn/realstock/company/{symbol}/hfq.js # 后复权因子
  • 因子文件是纯 JS 变量结构(var qfq_pf=...),用 ast.literal_eval 解析(不执行 JS)
  • 返回 [{date, factor}] 数组,日期格式 YYYY-MM-DD
  • 消费方:sina_source.py::get_sina_adjust_factor(),被 fox_kline_daily 融合器读取

北交所 K 线 / ETF 兜底 K 线​

https://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData/getKLineData
?symbol={symbol}&scale=240&datalen=1023
  • scale=240 即日线,datalen 控制返回根数(最大约 2000)
  • 返回不复权 OHLCV 数组
  • 消费方:sina_source.py::get_daily_kline()
    • 北交所 K 线主源(腾讯 fqkline 不覆盖 bj 前缀代码)
    • ETF 历史 K 线兜底(腾讯 fqkline 为 ETF 主源,失败时回落新浪)

跨市场数据(A50 期货 + 离岸人民币)​

https://hq.sinajs.cn/list=hf_A50,USDCNH # 实时行情
  • 返回格式:var hq_str_hf_A50="..." 纯文本,字段以逗号分隔
  • 唯一源:腾讯全球目录没有 SGX A50 期货与离岸人民币(实测期货 50 行无 A50、外汇 36 行只有在岸 USDCNY)
  • 消费方:cross_market_data.py::sina_cross_market_quotes(),被 ext_market_sync 16:40 调用
  • 落库:sina_cross_market_daily(trade_date 源侧自报,不归一 A 股交易日历——24h 品种周五夜盘收盘常在北京周六凌晨)

国内期货主力合约​

https://hq.sinajs.cn/list=nf_AU0,nf_AG0,... # 期货主力(nf_ 前缀)
  • 支持多品种并行拉取(_fetch_sina_futures_multi()),覆盖贵金属/有色/黑色/化工/农产品/股指期货
  • 消费方:futures_sources.py,被 ext_market_sync 16:40 调用

资金流备用源​

https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/
MoneyFlow.ssl_qsfx_zjlrqs?page=1&num=5&sort=opendate&asc=0&daima=sh600519
  • 返回格式:JSON 数组(可能带非 JSON 包裹文本,实现按首个 [ 到末个 ] 截取后再 json.loads)
  • 字段:netamount(净买入额,万元)、opendate(日期)
  • 注意:该接口是单股口径,未传 code 时实现内部默认取 600519,只作市场级"资金概况"的量级估算

大盘指数 / 市场概览​

https://hq.sinajs.cn/list=s_sh000001,s_sz399001,... # 大盘指数实时
https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getQianLongData?index=sh000001&type=minute # 分时
  • 指数实时行情(s_ 前缀为简版,含当前价/涨跌额/涨跌幅/成交量/成交额)
  • 消费方:sina_source.py::get_index_daily() / get_market_spot()(腾讯指数主源不可用时降级)

行业涨跌幅​

https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple?page=1&num=80&sort=changepercent&asc=0&node=new_sina_hy
  • 返回全行业涨跌排序(newSinaHy.php 行业分类)
  • 消费方:sina_source.py::get_industry_boards()(腾讯 getRank 主源不可用时降级)

美元指数兜底​

https://hq.sinajs.cn/list=DINIW # 美元指数实时
  • 消费方:macro_sources.py::_dxy_from_sina()(东财 RPT_ECONOMY_EXRATE 不可用时降级)

定时任务调用链​

定时任务时间调用的新浪函数落库表
fin_statement_sync20:30download_sina_statements_all()sina_financial_statement(RAW)
fox_daily_sync → finance_indicator 阶段16:00sina_financial_report()(单股兜底)sina_financial_indicator(STG)
ext_market_sync16:40sina_cross_market_quotes() + _fetch_sina_futures_multi()sina_cross_market_daily
fox_kline_sync → 北交所分支15:40get_daily_kline()(bj 前缀)fox_kline_daily
fox_wide_sync → 复权因子16:20get_sina_adjust_factor()内存传递(不落库)

触发条件(资金流降级)​

东财熔断器 OPEN、抛 RateLimitError(403/429)或可降级的 DataSourceError 三条路径下,均会尝试新浪备用源,且受重试预算 budget.consume() 约束(fetchers.py):

except RateLimitError as e:
em_breaker.record_failure()
if data_type == "fund_flow" and budget.consume():
sina_result = await sina_fund_flow()
if sina_result:
result = build_fund_flow(sina_result)
source_used = "sina_backup"

返回数据示例​

资金流(兜底)​

{
"total_volume": 123.4, # 成交额(亿,由净额绝对值折算)
"main_net_inflow": -5.67, # 主力净流入(亿)
"limit_up_success_rate": 0, # 新浪无此数据
"_source": "sina_backup", # 标记数据来源
}

复权因子​

[
{"date": "2020-01-02", "factor": 1.0},
{"date": "2020-06-15", "factor": 0.95}, # 除权日
...
]

跨市场(A50 / CNH)​

{
"A50": {"price": 12345.6, "change_pct": 0.5, "trade_date": "2026-09-28"},
"USDCNH": {"price": 7.2345, "change_pct": -0.1, "trade_date": "2026-09-28"},
}

在降级链中的位置​

数据类型主源新浪角色触发条件
财报三表 / gjzb新浪 + TDX主源始终使用
复权因子新浪主源始终使用
北交所 K 线新浪主源腾讯不覆盖 bj 前缀
A50 / CNH新浪唯一源腾讯无此品种
国内期货新浪主源始终使用
ETF K 线腾讯 fqkline兜底腾讯失败
资金流TDX → 东财兜底东财熔断/限流
大盘指数腾讯降级腾讯失败
行业排名腾讯 getRank降级腾讯失败
美元指数东财兜底东财不可用

批量下载策略​

gjzb 关键指标(sina_batch.py)​

  • 并发控制:4 并发 + 0.3s 节流(实测 5500 只约 8 分钟)
  • 分块熔断:每 100 只检查失败率,>30% 整批中止并记 partial
  • 无数据前缀守卫:新浪对无数据标的返回固定前缀 var quote=...(空体),解析时跳过而非计入失败(2026-09 修复,避免死锁)
  • 落库:sina_financial_indicator(STG),按优先级裁定(新浪主源可刷新/夺取,东财回填备源只补空缺)

财报三表(sina_stmt_batch.py)​

  • 轮换策略:1200 只/轮,按「最久未更新优先」排序
  • 窗口:每次拉取最近 4 个报告期(num=4)
  • 落库:sina_financial_statement(RAW),由 fin_statement_sync 20:30 调用
  • 非交易日也执行:财报披露不受交易日历限制

注意事项​

提示
  • 风控最宽松:新浪是降级链中最可靠的兜底层,但统一 HTTP 客户端与重试策略仍然生效,不做高频逐股循环
  • 北交所代码前缀:bj(920/8/4 开头,920 判断须先于 9),腾讯 fqkline 不覆盖,新浪是主源
  • 复权因子不执行 JS:qfq.js / hfq.js 是纯文本变量声明,用 ast.literal_eval 解析(不引入 JS 引擎)
  • 资金流精度低:仅单股级别、无涨跌停统计,只用于降级兜底,不替代 TDX/东财
  • 跨市场 trade_date 不归一:A50 期货 24h 交易,周五夜盘收盘常在北京周六凌晨,trade_date 源侧自报(不归一 A 股交易日历),否则两头错
  • 财报批量无数据前缀:新浪对无数据标的返回固定空体(var quote=...),解析时必须跳过而非计入失败率(否则触发分块熔断)
  • gjzb 优先级裁定:sina_financial_indicator 多源混写时按 _FIN_IND_RANK 裁定(新浪主源可刷新/夺取,东财备源只补空缺),值与 source 标签必须同一次提交内更新

相关文档​