Skip to content

常见问题 ​

怎么申请 token? ​

联系官方客服(邮箱:kefu@zltquant.com)申请。客服会给你两样东西:服务地址(endpoint)和 token,并按你需要的数据范围开通权限。

token 形如 fk_ 开头的一串字符,相当于账号密码,别发到公开仓库或者聊天群里。需要扩大数据范围(比如原来只开了行情,现在还想要财报)同样找客服。

pip 装不上,提示找不到包? ​

客户端只发布在智量通的官方源,公共 pip 源上没有,安装时必须带 --index-url:

bash
pip install ZltFinOrmClient --index-url https://pypip.zltquant.com/

如果是 pip install ZltFinOrmClient[pandas] 这种写法报错,那是因为官方源里只有智量通自己的包,没有 pandas。pandas、numpy 和 mcp 要单独从公共镜像装:

bash
pip install pandas numpy mcp --index-url https://pypi.tuna.tsinghua.edu.cn/simple

完整步骤见安装。

报「无该表访问权限」怎么办? ​

text
AuthError: [AUTH_TABLE_DENIED] 无该表访问权限

你的账号没有开通这张表。这不是临时故障,重试没有用,联系客服开通即可。

联表查询要求每一张参与的表都有权限,缺一张就会报这个错。

一共有哪些数据? ​

15 个数据库、476 张表,覆盖 A股、公募基金、债券、期货、指数、行业与商品、宏观统计、海关进出口、资讯研报。数据范围那页按库列出了每一张表和每一个字段的中文名。

能看到目录不等于能查。目录对所有账号都是完整的,实际能查哪些表取决于开通的授权,这样你可以先看清有什么、再决定要开通哪些。

怎么找到想要的数据? ​

可以翻数据范围按中文业务名称搜索,也可以让客户端或 AI 根据中文需求查询服务端目录:

python
client.describe("cneqa_bsc_stk_bsc_info")   # 这张表有哪些字段

表和字段编码是内部标识,不建议手工猜测;上游目录调整时,客户端会以当前目录为准。

查出来是空的,或者数据对不上? ​

先检查时间范围。start_date 和 end_date 过滤的是表的时间轴字段,当前多数表的时间轴是数据更新时间而不是业务日期。上游重刷一次历史数据,所有记录的更新时间都会变成重刷那天,按年份筛就可能什么都查不到。

要按交易日、公告日这类业务日期筛,用 filter_expr 指定字段:

python
filter_expr={"field": "txn_dt", "op": "between", "value": ["20260101", "20260630"]}

该用哪个字段,看 client.query_spec(表名) 返回的 business_date_fields 和 filterable_fields。详见接口参考。

结果被截断了怎么办? ​

返回里带 truncated=True,说明行数达到上限。默认会打印一条告警并返回已有的部分。缩小时间范围、减少证券数量,或者分批查。

每张表的上限可以在 client.query_spec(表名) 的 constraints.max_rows 里看到。

支持哪些返回格式? ​

format="json" 返回字典,format="pandas" 返回 DataFrame(需要先装 pandas), format="npz" 返回 numpy 列式数组(需要先装 numpy), format="arrow" 返回 Arrow 列式数据(需要先装 pyarrow)。

format="parquet" 还没做,传了会报错。

npz 和 arrow 怎么选? ​

两条都是列式二进制通道,只有一处语义差异:DECIMAL。

npz 没有 decimal 类型,只能按声明精度降级——15 位以内编成 float64,超过则编成字符串。 库里 58% 的 decimal 列声明精度超过 15 位(成交额、涨跌幅、总资产这些都在内), 所以这不是边角情况。arrow 用原生 decimal128 原样承载,要不要转 float 由你决定。

其余列类型两者逐一对应。按这个选:

  • 纯 Python,后续喂 numba 做数值计算 → npz,依赖更轻(numpy 通常已经有了)
  • 要跨语言消费(C++/Rust/CUDA),或不想让高精度列变字符串 → arrow

详见 npz 格式说明 与 arrow 格式说明。

什么时候该用 npz? ​

两个条件同时满足才划算:行数上万,而且取回来要自己做数值计算。

npz 的价值不是"取得快",是"取完直接能算"——它给的是 numpy 数组,可以直接喂给 numba 这类 JIT 编译器,不用先转 DataFrame 再把列掏出来。

反过来说,只是把数据查出来看看、导成 Excel,或者接下来全是 groupby/merge 这类 pandas 操作,那就用 format="pandas"。npz 要多装一个 numpy,还有几处和 json 不同的地方(高精度金额以字符串返回等),不做计算的话这些成本换不回什么。

解析耗时的实测(每行 8 个字段):

行数json 解析npz 解析传输体积对比
1 千1 毫秒0.1 毫秒npz 大 10%
1 万9.9 毫秒0.6 毫秒基本持平
10 万122 毫秒4.3 毫秒npz 省 20%
100 万1301 毫秒34 毫秒npz 省 21%

体积最多省两成,一千行以下还是负的——它省的是你这边的 CPU,不是网络流量。

计算环节的差距更明显:60 万行按标的分组算日收益率与 20 日滚动波动率, npz + numba 用 15 毫秒,pandas groupby 用 142 毫秒。

用之前请看一遍 npz 格式说明,写法见示例。

为什么要通过查询参数获取数据? ​

你通过函数参数表达要查询的主题、时间范围、字段、过滤条件和行数。服务端据此执行权限校验、参数校验和用量控制,并返回结构化结果与明确错误信息。

数据多久更新一次? ​

行情、财务、股东等数据的更新节奏不同。行情通常随交易日或行情批次更新,财务和股东数据通常在公告披露并完成采集、清洗、同步后更新。查询结果中的业务日期与记录更新时间不是一回事,具体鲜活性应以 query_spec、返回元数据和服务公告为准。

关键词搜表怎么没生效? ​

client.tables(keyword="财务") 当前版本会返回完整表清单,筛选还没生效。自己在结果里过滤即可:

python
tables = client.tables()["tables"]
hit = [t for t in tables if "财务" in t["table_name"]]

或者直接翻数据范围搜中文。

联表最多几张表? ​

加上主表最多 5 张。连接条件支持多个字段同时对应,写法见示例。

怎么让 AI 助手帮我查数据? ​

装上配套的 skill 和 MCP:

bash
zltfinorm install-skill
zltfinorm install-mcp --endpoint http://finorm.zltquant.com:7761 --token fk_你的token

装完重启 AI 助手,然后用中文提需求就行。详见安装和示例。

MCP 装完 AI 助手里没看到? ​

改完配置要重启 AI 助手才生效(换 token 也一样)。重启后在 Claude Code 里输 /mcp,应该能看到 finorm。

还是没有的话,在终端直接运行 zltfinorm mcp,它应该安静地等待输入而不是报错退出。如果报错了,错误信息会指出问题所在。最常见的原因是配置里 command 没写完整路径,取路径的办法见安装。