7615 F10 / TQLEX API¶
7615 是通达信 F10 / 资料数据的 HTTP 网关,适合查询公司概况、题材、公告、财务报表、估值、研报等资料类数据。
它和 7709 行情主站是两条线:
| 类型 | 7709 | 7615 |
|---|---|---|
| 连接方式 | TCP 长连接 | HTTP POST |
| 数据类型 | 行情、K 线、分时、成交明细、代码表 | F10、财务、题材、新闻公告、研报 |
| 使用入口 | TdxClient |
client.f10 或 F10Client |
| 是否需要 7709 握手 | 需要 | 不需要 |
实盘验证状态¶
7615 通路已实盘验证可用(000001,耗时约 1.1 秒,5 项抽查全部返回真实数据):
$ python -m eltdx.f10_smoke --code 000001
[OK] company_profile tables=1 rows=[1]
[OK] hot_topics tables=1 rows=[10]
[OK] announcements tables=1 rows=[89]
[OK] theme_market tables=2 rows=[1, 13]
[OK] valuation tables=2 rows=[1, 20]
[OK] f10 smoke passed
关于「与 easy_tdx 对比」需要说明一点:easy_tdx 1.20.7 里没有任何 7615 实现
(全仓检索 7615 命中 0 次),所以 7615 这条通路不存在同协议可对比对象,
只能做实盘冒烟与跨协议互证。
与 7709 公司信息(F10 文本)的关系¶
7709 另有一条文本型 F10 通路:0x02CF 列目录 + 0x02D0 读内容,
拿到的是通达信客户端「F10」里那段 GBK 文本(例如 000001.txt = 平安银行最新提示)。
它与本页的 7615 Entry 是两套独立数据源,不是同一份数据的两种封装。
⚠️ 这两条命令(连同
0x02C5)的可用性取决于原生模块版本: 随v3.2.3发布、或从 PyPI 装到的_native不含这 3 个命令, 调用会抛UnsupportedCommandError: unsupported command: 0x02cf; 而用本仓库 Rust 源码编译出的_native已包含它们,可直接使用client.company_info.category(code, market)/.content(code, market, filename, offset, length)。 版本落后的原因与编译方法见 CHANGELOG「未发布」。 旁证:easy_tdx 1.20.7 用它的纯 Python 实现能取回000001.txt的 23426 字节正文; 而同一份数据走 eltdx 的resources.read("000001.txt")只能拿到chunk_len=0的空块(说明该文件不经普通文件通路提供),所以文本型 F10 必须用0x02CF/0x02D0读取,不能靠resources.read()绕。 若手上只有发布版原生模块,可暂用 7615 的company_profile/announcements/news等 Entry 替代。这 3 个命令的差分 fixture 已于本轮补齐(
tests/native25/25 命令全覆盖), 载荷为 7709 F10 的真实结构:目录 =count(u16 LE) +count × 152字节 (64 name + 80 filename + 4 start + 4 length,GBK);内容 = 12 字节头 (正文长度在[10:12])+ GBK 正文。
基本用法¶
from eltdx import TdxClient
client = TdxClient(timeout=3)
profile = client.f10.company_profile("000034")
topics = client.f10.hot_topics("000034")
notices = client.f10.announcements("000034")
print(profile.rows[0])
print(topics.rows[:3])
print(notices.rows[:3])
也可以只用 F10 HTTP 客户端:
连接策略¶
自 v3.2.0 起,F10Client 和 client.f10 默认优先尝试 IPv4;IPv4 连接失败后继续尝试其他地址,包括 IPv6。要恢复系统默认地址顺序,可使用 F10Client(prefer_ipv4=False),或设置 client.f10.prefer_ipv4 = False。
此策略仅作用于 F10 请求,不修改全局 DNS 函数,也不会把并发请求串行执行。保留 urllib 的环境代理、HTTP Host、HTTPS SNI 和证书校验。使用代理时,排序作用于客户端实际连接的代理地址,目标地址的解析由代理决定。
各地址依次连接并使用 timeout;这是地址优先级调整,不是 IPv4/IPv6 并行竞速。连接多个失败地址、DNS 解析和读取响应可能使总耗时超过一次 timeout。
返回结构¶
常规 F10 方法返回 F10Response;涨跌停列表返回 LimitBoardLadder,其 raw 和 summary 仍保留服务端原始结构:
| 字段 / 属性 | 含义 |
|---|---|
entry |
实际调用的 TQLEX Entry |
request_body |
实际发送的 JSON body |
error_code |
服务端 ErrorCode |
ok |
ErrorCode 为 0 或空时为 True |
tables / result_sets |
返回的表 |
rows |
第一张表的行,适合最常见的单表结果 |
raw |
原始 JSON 响应 |
每张表是 F10ResultSet:
| 字段 / 属性 | 含义 |
|---|---|
key |
ResultSetKey,没有时自动用 table0、table1 |
columns |
原生列名 |
rows |
字典行 |
row_cells |
带列位置的单元格,适合处理重复列名 |
count |
行数 |
如果服务端返回重复字段名,rows 会自动保留后续列:
F10 字段以服务端返回的 ColName / ColDes 为准,很多 Entry 会返回 T003、N001 这类原生列名。单个调用方法的常用字段对照见 methods/README.md 里的 F10 单页;遇到未列出的字段时,先看:
常用方法¶
个股 F10 其余 Entry¶
个股 F10 页面统一放在 http://static.tdx.com.cn:7615/site/tdxf10/<page>.html,脚本在 js/<page>.js(例如 gg_gdyj.html + js/gg_gdyj.js)。合并封装后一个 Entry 往往覆盖整页多个子表,Params[1] 选子表:
其余具名封装(gsgk、fhrz、fhrz_zfhpmx、cwfx_cbdp、cwzd、ggzp、rdtc、rdtc_gndb、gszx、zxtstzzhd、idreq、zxts_rqpm)见上面的「常用方法」表。
发现方式:客户端
T0002\tmp\Code Cache保存了页面脚本的请求 URL,脚本里直接写出了 Entry 名与Params取值(例如gg_gdyj.js里出现gdrs、ltgd、kggd等子表名)。
ETF / 基金 F10(skef10_jj_*)¶
页面在 http://page1.tdx.com.cn:7615/site/sketchf10/jjf10/html/<page>.html,脚本在 .../jjf10/js/<page>.js。左侧菜单固定 7 页,ETF 与场外基金共用同一批 Entry:
| 菜单页(页面模块) | 使用的 Entry |
|---|---|
最新提示(skef10_jj_jjzl) |
skef10_jj_jjzl(1 基金经理 / 2 基金管理人 / 4 基本概况 / 5 交易席位)、skef10_jj_idreq(名称与市场)、skef10_jj_jjpj(评级)、skef10_jj_jjpf(评分)、skef10_jj_fxsy(分类/同类对比) |
规模份额(skef10_jj_gmfe) |
skef10_jj_gmfe、skef10_jj_cyrjcmx、skef10_jj_etfzj(是否 ETF / ETF 两融)、skef10_jj_fxsy |
净值回报(skef10_jj_jzhb) |
skef10_jj_jzhb(0 单位净值 / 1 区间收益 / 3 同类排名 / 5 分红)、skef10_jj_fxsy |
投资组合(skef10_jj_tzzh) |
skef10_jj_tzzh(zcpz 资产配置 / hyfb 行业分布 / cgjzd 重仓变动 / zjpz 重仓排名 / jjxtzzh 持仓汇总 / zczq 债券配置 / ccqhmx 期货明细) |
持股情况(skef10_jj_cgqk) |
skef10_jj_cgqk(cgqkbgq / cgmxbgq / cyjjmxbgq / sxjjzcbgq)、skef10_jj_tzzh |
财务状况(skef10_jj_cwzk) |
skef10_jj_cwzk(zcfzb 等报表) |
销售信息(skef10_jj_xsxx) |
skef10_jj_xsxx(0 费率 / 4 销售公告 / 5 相关资讯)、skef10_jj_idreq |
这 7 页合计引用 13 个 Entry 名:skef10_jj_idreq、skef10_jj_jjzl、skef10_jj_gmfe、skef10_jj_jzhb、skef10_jj_tzzh、skef10_jj_cgqk、skef10_jj_cwzk、skef10_jj_xsxx、skef10_jj_etfzj、skef10_jj_cyrjcmx、skef10_jj_jjpj、skef10_jj_jjpf、skef10_jj_fxsy(首页脚本 skef10_jj_index.js 里还出现过 skef10_jj_tssj「特色数据」入口)。封装入口是 client.f10.fund_report()。
板块 / 指数 / 大盘 F10(skef10_bk_* / skef10_zs_* / skef10_dpzx_*)¶
板块与指数的页面在 http://page1.tdx.com.cn:7615/site/sketchf10/zsf10/html/<page>.html,大盘指数在 .../dpzxf10/html/<page>.html,脚本分别在各自的 js/ 目录。
板块 / 指数(zsf10)菜单共 12 页,引用 25 个 Entry 名(11 个 skef10_bk_* + 14 个 skef10_zs_*):
| 菜单页 | 使用的 Entry |
|---|---|
| 操盘必读 | skef10_zs_cpbd、skef10_bk_cpbd_jczl(001 基础资料 / 002 板块说明 / 004 交易数据)、skef10_bk_getinfo、skef10_zs_bkzx |
| 板块资金 | skef10_zs_zjlx、skef10_zs_zjlx_fg、skef10_bk_zjlx |
| 异动分析 | skef10_zs_ydfx、skef10_bk_ydfx |
| 涨停轨迹 | skef10_zs_lsztgj、skef10_bk_rdbk |
| 板块资讯 | skef10_zs_bkzx、skef10_bk_getinfo |
| 成份股资金 | skef10_zs_cfgsj、skef10_bk_cfgsj |
| 成份股数据 | skef10_zs_scgl、skef10_bk_scgl、skef10_bk_cfgsj |
| 成份股对比 | skef10_zs_ggdb、skef10_bk_ggdb_cwdb、skef10_bk_ggdb_gzdb、skef10_bk_ggdb_scbxdb |
| 行情涨幅图 | 纯前端图表,不请求 Entry |
| 深度分析 | skef10_zs_gzfx、skef10_zs_ag_gzfx、skef10_bk_sdfx、skef10_zs_jbxx_gzxx |
指数基本信息(skef10_zs_ag_jbxx) |
skef10_zs_getinfo、skef10_zs_jbxx_zsgk、skef10_zs_jbxx_gzbd、skef10_zs_jbxx_gzxx |
指数成份股(skef10_zs_ag_cfgsj) |
skef10_zs_cfgsj_cfgdb、skef10_zs_cfgsj_cfgjcsj、skef10_zs_cfgsj_ggcfgdb、skef10_zs_cfgsj_qz |
今日提示(skef10_zs_ag_jrts) |
skef10_zs_jrts、skef10_zs_jrts_ggjrts |
资金动向(skef10_zs_ag_zjdx) |
skef10_zs_zjdx、skef10_zs_zjdx_ggzjdx |
指数公告(skef10_zs_ag_zsgg) |
skef10_zs_getinfo |
大盘(dpzxf10)菜单 8 页,Entry 有 9 个:skef10_dpzx_jbxx(基本信息)、skef10_dpzx_rzrq(大盘两融)、skef10_dpzx_xgfx(新股分析)、skef10_dpzx_scgl(市场概览)、skef10_dpzx_scrq、skef10_dpzx_lhb(龙虎榜)、skef10_dpzx_hgyj、skef10_dpzx_zqyw,加上页面注册用的 skef10_dpzx_index(另有 skef10_dpzx_uitls)。这些页面还会复用 skef10_zs_getinfo、skef10_zs_jbxx_gzxx、skef10_zs_jbxx_gzbd、skef10_zs_zjdx。
发现方式:客户端
T0002\tmp\Code Cache里存有这些页面脚本的请求 URL(http://page1.tdx.com.cn:7615/site/sketchf10/...),脚本的createMenu()直接写出菜单页模块名,页面脚本再引用具体 Entry。封装入口是client.f10.market_report()的 20 个 section。
高级调用(需手动指定 Entry 和参数)¶
这是用户主动使用的底层入口,不会由 SDK 自动执行。没有封装到具名方法里的 Entry,可以手动指定 Entry 和参数直接调用:
from eltdx import F10Client
f10 = F10Client(timeout=3)
response = f10.call(
"CWServ.tdxf10_gg_gsgk",
params=["8", "000034", ""],
)
print(response.rows[0])
对于 HQServ.* 这类使用自定义请求体的 Entry,直接传完整 body:
response = f10.call(
"HQServ.hq_nlp_tcihq",
[{
"ReqId": "200743",
"setcode": 0,
"code": "000034",
"Page": -1,
"PageSize": "-1",
"modname": "mod_tcihq.dll",
}],
)
真实检查¶
python scripts/smoke/smoke_f10.py --code 000034 --timeout 8
eltdx-f10-smoke --code 000034 --timeout 8
这个脚本会检查公司概况、热点题材、公告、题材行情和估值数据。