工具导航 · 教程

AKShare 成交量差异排障记录

以 1.20.24 腾讯日线接口的两个样本为例

作者:AI 量化导航维护者 核查时间:2026 年 11 月 4 日。

调用成功、字段也都有,不代表两只股票的 volume 使用同一种单位。本次对 AKShare stock_zh_a_hist_tx 的两个样本做真实响应回放,发现同一天的数据分别执行了“不换算”和“乘 100”的处理。代码中的 sz000 前缀判断值得进一步核实,但不能据此给所有股票一律乘 100。

一 这次查的是什么

线索来自 AKShare issue #7485。报告者使用 1.20.24、Windows 和 Python 3.13.3,查询 sz000651 与 sz300533 在 2026-10-15 至 2026-11-03 的不复权日线,发现成交量口径不同。[1]

原始验证环境为 Python 3.12.14、pandas 2.2.3。下载 PyPI 官方 1.20.24 wheel,提取未修改的 stock_zh_a_hist_tx 函数体;实际请求腾讯 newfqkline 接口后保存响应,用它替代函数的 HTTP 依赖。上市日期查询替换为早于测试区间的日期,避免再次联网。[2]

因此,完成的是“真实响应离线回放”,没有完整安装 AKShare,也没有复现报告者的 Windows / Python 3.13 环境。这个区别会影响结论范围。

二 两个样本出现了什么差异

参数:start_date="20261015",end_date="20261103",adjust=""。每只股票的目标区间均包含 14 个交易日。

以 2026-11-03 为例:

1.20.24 的 stock_hist_tx.py 先把原始数组第 6 项映射为 volume,再执行以下判断:[2][3]

if not symbol.startswith(("sh688", "sz399", "sh000", "sz000")):
    big_df["volume"] = big_df["volume"] * 100

sz000651 命中排除前缀 sz000,sz300533 没有命中。这与回放结果一致。函数说明却声明 volume 统一为股,因此需要核实 sz000 股票在这个条件中的归类。

三 怎样交叉检查单位

本次沿用函数自身的另一个假设:原始数组第 9 项 amount 乘 10,000 后为元。再计算“成交额 ÷ 成交量”,与同日不复权最高价、最低价比较。

2026-11-03 的结果为:

两个样本各 14 天,使用“原始量乘 100”后的比值全部落在当天高低价之间,不乘 100 时全部不在区间。这支持两个样本的原始量为手。

它只是辅助一致性检查:成交额单位、字段位置、覆盖的交易范围与价格口径必须先核对。缺失成交额、复权价和原始成交额混用、特殊交易或接口字段变化,都可能让检查失效。不能把这条公式写成自动修数规则。

四 如何复查

本页可下载的材料包包含两份保存的原始响应、目标区间 CSV 和 replay.py。原始响应是在 2026-11-04 取得的完整接口响应,包含目标区间以外的数据;脚本按上述日期筛选,不改原始文件。

解压材料包到独立目录,建议使用 Python 3.12,以匹配原始 pandas 2.2.3 依赖。重跑会覆盖材料包中的输出 CSV,请先另存参考文件。Windows 可用 py -3.12 创建环境,再使用 .venv\Scripts\python;完整 Windows 命令见包内 README.md。以下为 macOS/Linux 写法:

python3 -m venv .venv
.venv/bin/python -m pip install pandas==2.2.3
.venv/bin/python -m pip download --no-deps --only-binary=:all: akshare==1.20.24 -d wheels
.venv/bin/python -X utf8 replay.py

这里下载 wheel 但不安装 AKShare。脚本只提取函数与常量,使用保存的真实响应回放;会输出原始量、函数输出量、倍率及价格区间比较。预期两只股票各有 14 行,2026-11-03 的结果如前文所列。

所用 1.20.24 wheel 的 SHA-256: 28311691a221a2b6b55c417c6d7a2ca7fb5c5be9ee458ccc610fab46f89295d1

上线前复查:使用本机已有的 Windows Python 3.14.2 / pandas 2.3.3 重跑原脚本,两只股票各 14 行,所有字段与原 CSV 一致,归一 CRLF/LF 后文件字节一致;未安装新依赖。这是另一环境下的离线回放,不等于复现原始环境。公开包中的原始响应、CSV、脚本和原始日志均保留审阅材料的原字节;仅移除审阅稿,增加运行说明与公开包校验清单。

如果要做完整环境验证,应另建隔离环境安装指定 AKShare 版本,直接调用 issue 中的两个示例,记录操作系统、Python、依赖版本和实际响应。那是另一层验证,本次没有完成。在线接口会变化,未来重新取数不保证与本次快照完全相同。

五 当前状态与处理边界

截至核查时,issue #7485 仍开放;复现证据已由维护本站的 GitHub 账户回复,未见项目维护者确认或已发布修复说明。[1][4] 第三方已提交 PR #7488,但截至 2026-11-04 核查时尚未合并。本文未验证该 PR 的补丁或测试,不能把待合并提案视为已修复版本。[7]

PyPI 最新版为 1.20.25,发布于 2026-11-03。本次另外下载了该版 wheel,确认其中 stock_hist_tx.py 与 1.20.24 文件字节一致。这是源文件比对,不等于最新版完整运行复现,也不是对以后版本状态的保证。[5]

本次只验证 stock_zh_a_hist_tx。它与本站落库教程使用的东方财富接口 stock_zh_a_hist 不同,不能把两者归为同一缺陷。其他项目此前也处理过腾讯科创板单位问题,但对应接口、版本和样本不同,其修复不能直接套到这里。[6]

在维护者明确规则前,宜保存原始响应、来源、版本和校验结果,把可疑批次隔离检查。不要对全库批量乘 100;历史数据可能已经换算过,也可能混合了不同来源。本文没有覆盖指数、科创板、北交所、其他市场或复权模式,也不提供已验证的修复补丁。

来源

本文由 AI 辅助整理,基于保存的真实响应、函数回放输出与公开源码核查;未进行完整安装环境测试。内容用于数据工程排障,不构成投资建议。