腾讯财经数据源
概述
腾讯财经是多数 HTTP 行情类的第一优先级数据源(K线/指数/估值/行业板块排名), HTTP 协议,不封IP。主要提供实时行情(含 PE/PB/市值/换手率)、前复权 K 线、 指数数据、全球市场行情与逐笔成交。
实现文件
| 文件 | 定位 |
|---|---|
data_sources/tencent_client.py | 底层 HTTP 客户端(批量行情 + K线 + 分时) |
data_sources/tencent_ticks.py | 逐笔成交(分笔) |
market_data_service/providers_tencent.py | 实时行情聚合层(指数/涨跌分布/行业排行/涨幅榜) |
data_manager/tencent_market.py | 落库链路(日频时序 + staging + 融合读源) |
data_manager/providers_tencent_stock.py | 全A股分页拉取(榜单接口,30+ 字段) |
data_manager/providers_tencent_index.py | 全球 33 个股指 |
data_manager/providers_tencent_forex.py | 全球 51 个外汇货币对 |
data_manager/providers_tencent_future.py | 全球 50 个期货/商品品种 |
data_manager/providers_tencent_us_stock.py | 美股(中概 CDR + 科技 TEC) |
API 端点
https://qt.gtimg.cn/q=sh600519,sz000001,... # 实时行情(批量,600只/批)
https://web.ifzq.gtimg.cn/appstock/app/fqkline/get # 前复权 K 线(day/week/month)
https://proxy.finance.qq.com/cgi/cgi-bin/rank/pt/getRank # 行业板块排行(getRank)
https://qt.gtimg.cn/q=... # 全球指数/外汇/期货/美股
https://stock.gtimg.cn/data/view/... # 全A股分页榜单(30+ 字段)
https://stock.finance.qq.cn/v1/stock/... # 逐笔成交
- 支持批量查询(逗号分隔,单批
_BATCH_SIZE = 600只,全市场约 10 个请求) - 返回格式:
v_sh600519="1~贵州茅台~600519~1800.00~..." - 无需特殊请求头;客户端内置节流
TENCENT_MIN_INTERVAL = 0.2s - 绕过系统代理直连(
_NO_PROXY_OPENER),响应编码 GBK
核心数据接口
批量行情
| 函数 | 说明 |
|---|---|
tencent_quote_batch(codes) | 批量实时行情(600 只/批):价格/涨跌/PE/PB/市值/换手率/五档盘口 |
tencent_quote(codes) | 向后兼容别名,等价于 tencent_quote_batch |
tencent_quote_single(code) | 单只股票实时行情 |
K线数据
| 函数 | 说明 |
|---|---|
tencent_kline(code, period, count) | 日/周/月K线(前复权),域名 proxy.finance.qq.com(2026-08-24 迁移) |
tencent_kline_history(code, start_date, end_date, period, ...) | 长历史分页拉取(日期游标分页,每页 640 根,最多 40 页 ≈ 25 年日线),支持 qfq/hfq/raw 三种复权口径 |
指数与分时
| 函数 | 说明 |
|---|---|
tencent_indices() | 主要指数实时行情(全量),含 A 股/恒生/美股/欧洲指数,指数主源 |
tencent_index_minute(code) | 指数当日分时(1 分钟粒度),必须已带市场前缀(裸码 000001 会被误判为平安银行) |
涨跌分布与涨幅榜
| 函数 | 说明 |
|---|---|
tencent_market_breadth_full() | 全市场涨跌分布(13 段 + 家数),覆盖全量 A 股(约 5400 只),产出可过分段一致性门禁的完整载荷 |
tencent_market_breadth_batch() | 采样估算涨跌分布(约 50 只样本),降级用 |
tencent_market_top_gainers(limit) | 全市场涨幅榜 TOP N(L2 实时链路),进程内缓存(盘中 5min / 休市 30min) |
行业与板块
| 函数 | 说明 |
|---|---|
tencent_industry_rank_full(board_type) | 板块排行完整字段(hy/hy2/gn),自动分页(概念 797 个超单页 200 上限),含 30+ 字段 |
tencent_industry_rank(board_type) | 行业板块排行精简版(code/name/change_pct) |
tencent_block_stocks_sync(board_code) | 板块成分股列表(含 PE/PB/市值/换手) |
逐笔成交
| 函数 | 说明 |
|---|---|
get_tencent_ticks(code) | 最近一个交易日全部分笔(沪深个股 + ETF),分页上限 300 页 × 70 笔 = 21000 笔 |
逐笔约束:不支持北交所与指数;收盘后用双快照核对连续竞价段成交额(差额 > 0.1% + 1000 元抛异常); 与 TDX 逐笔互补(TDX 单次上限 2000 条,腾讯可覆盖全天万笔级别)。
落库链路(日频时序)
腾讯全市场行情每日 15:50 落库至两张表,供后续融合「优先读当日落库」消费:
| 表 | 语义 |
|---|---|
tencent_stock_quote_daily | 时序资产(主),主键 (trade_date, code),按日累积,默认不滚动删除 |
tencent_stock_staging | 最新一批 QC 投影,整批替换无历史 |
融合读源三级链路
load_tencent_quotes(codes, trade_date) → {code: {行情...}}
- 读当日落库:
read_quote_map(trade_date, codes, min_coverage=0.6)命中即返回 - 自愈落库再读:覆盖率 < 60% 且
len(codes) >= 500时触发全市场拉取并落库 - 直连 API 兜底:落库链路故障时直连,记 warning
🔴 只允许「最近已收盘交易日」门禁:取数端只有「当前全市场快照」 (无历史模式),故一切写动作(
sync_tencent_market_daily与读路径的 ②自愈)仅在day == latest_trade_date() and current_or_last_trading_day() == latest_trade_date()时执行,任一不成立即skipped(不取数、不落库、如实记 message);①读是只读的, 保持day <= latest_trade_date()即可(读任何已收盘日无污染风险)。两条依赖的 日历线在盘中是分离的(current_or_last09:30 翻页、latest_trade_date15:30 才翻),因此历史日期回补也被拒绝(2026-10-06 曾因此把 09-30 快照复制进 1177 个历史交易日、655 万行假数据——详见docs/audits/tencent-quote-pollution-2026-10-06.md)。合法写入窗口只有: 交易日 15:50 定时任务、盘前对上一交易日的补跑、休市日对最近收盘日的自愈 (此时快照即为上一收盘值)。🔴 安全阀:行数 < 3000 视为接口异常,拒绝落库。
落库主入口
sync_tencent_market_daily(trade_date, retention_days=0, refresh_staging=True)
- 幂等(同日重跑只替换)
- 默认
retention_days=0(不删除历史),因数据起点可能前移到 2010 - 合并两个数据源:榜单为主(单位已换算),gtimg 补齐 OHLC/昨收/PB/静态PE/涨跌停
- 不可用于历史回补(取数端无历史模式):历史只能靠 15:50 任务逐日累积
全球市场数据
由 ext_market_sync(16:40)定时落库至 sina_cross_market_daily(A50 期货 + 离岸人民币走新浪兜底)。
| 模块 | 覆盖 | 说明 |
|---|---|---|
providers_tencent_index.py | 33 个全球股指 | 含亚洲/美洲/欧洲/其他分类,带 trading_state 交易状态 |
providers_tencent_forex.py | 51 个货币对(含金银) | OHLC + 买卖价 + 多周期涨跌幅(5d/1m/3m/6m/ytd)+ 52 周高低 |
providers_tencent_future.py | 50 个期货/商品品种 | 7 分类(股指/贵金属/基本金属/能源/农业/利率/汇率) |
providers_tencent_us_stock.py | 美股(中概 CDR + 科技 TEC) | 行情/估值/市值字段 |
providers_tencent_stock.py | 全A股分页拉取 | 榜单接口 30+ 字段,约 28 页 × 200 条 |
注意:腾讯全球目录不含 A50 期货与离岸人民币,这两个标的由新浪兜底 (
sina_cross_market_daily,一次请求落两只)。
数据字段映射
qt.gtimg.cn 返回字段(以 ~ 分隔,索引从 0 起):
| 位置 | 字段 | 说明 |
|---|---|---|
| 1 | name | 名称 |
| 3 | price | 当前价格 |
| 4 | last_close | 昨收 |
| 5 | open | 今开 |
| 7 / 8 | outer_disc / inside_dish | 外盘 / 内盘(手) |
| 9~18 | bid1 | 买五档价量 |
| 19~28 | ask1 | 卖五档价量 |
| 31 | change_amt | 涨跌额 |
| 32 | change_pct | 涨跌幅% |
| 33 / 34 | high / low | 最高 / 最低 |
| 36 | volume | 成交量(手) |
| 37 | amount | 成交额(万元) |
| 38 | turnover_pct | 换手率% |
| 39 | pe_ttm | 市盈率(TTM) |
| 43 | amplitude_pct | 振幅% |
| 44 / 45 | float_mcap_yi / mcap_yi | 流通市值 / 总市值(亿元) |
| 46 | pb | 市净率 |
| 47 / 48 | limit_up / limit_down | 涨停价 / 跌停价 |
| 49 | vol_ratio | 量比 |
| 52 | pe_static | 静态市盈率 |
单位口径:
volume为手、amount为万元(写入 fox 层前由调用方 ÷1e4 归一为元, 见数据契约 §六)。ETF/LOF 代码另有净值类字段(折溢价/IOPV/单位净值/ 总份额/52 周高低),与个股同位置含义不同,仅在is_fund_code()为真时解析。
在降级链中的位置
| 数据类型 | 腾讯角色 | 备源 |
|---|---|---|
| K线(前复权) | 主源 | TDX → 新浪 |
| 大盘指数 | 主源(单请求全量) | TDX 补齐缺失项 |
| 估值(PE/PB/市值) | 主源 | TDX 财务快照 → 东财 push2 |
| 行业排名 | 主源(getRank) | 新浪 → 东财 → TDX |
| 涨跌分布 | 全市场路径(与 TDX 互补) | TDX 全市场快照 |
| 资金流向 | ❌ 不提供 | TDX 主源 → 东财兜底 |
| 龙虎榜/解禁/两融 | ❌ 不提供 | 东财独有 |
注意事项
- 腾讯不封IP,可放心批量拉取(客户端已按批 600 只自动切片)
- 指数、K线(除北交所)、估值、行业排名均以腾讯为主源
- 涨跌分布优先走
tencent_market_breadth_full()全市场路径;采样版仅作降级 - 落库表
tencent_stock_quote_daily是融合读源的第一级,但不是硬依赖—— 落库链路故障时融合器自愈或直连 API - 盘中(未收盘)拒绝写入落库表,防止盘中价被标为收盘价
- 逐笔成交不支持北交所与指数
- 全球市场不含 A50 期货与离岸人民币(走新浪兜底)