误解一:装了框架就不用数据接口库
不对。ZVT 解决的是「把数据按统一 schema 落库并在上面做研究」,它自己也需要通过 provider 去取数;而公告、研报、非结构化数据这类需求,框架并不覆盖。两者是分工,不是替代。
ZVT 项目研究站 · 工具分工
这几个工具经常被放在一起比较,但它们其实处在研究链条的不同位置:取数、因子、回测三段,各自强项不同。搞清分工,就不会纠结「选哪个」,而是知道「哪两段要串起来」。本页的对照事实以各工具的官方 PyPI 元数据与 ZVT 源码为依据,能力边界一律以各自官方文档为准。
下表全部来自各工具在 PyPI 上的公开元数据(2026-09-18 采集)。事实与「定位判断」分开列,避免把编辑观点当成事实。
| 工具 | 最新版本(发布日期) | Python 要求 | 许可 | PyPI 发布数 | 官方一句话定位 |
|---|---|---|---|---|---|
zvt | 0.13.5(2026-01-18) | >=3.9, <4 | MIT(license 字段为空,classifier 声明) | 86 | unified, modular quant framework for human beings |
akshare | 1.18.96(2026-09-17) | >=3.11 | MIT | 221 | 财经数据接口库(Python 封装) |
tushare | 1.4.29(2026-03-25) | 未标注 | BSD | 229 | Tushare Pro 数据接口 SDK |
alphalens | 0.4.0(2020-04-27) | 未标注 | Apache | 9 | 因子绩效分析(Quantopian 开源,主库多年未更新) |
rqalpha | 6.4.0(2026-09-18) | >=3.8 | Apache | 186 | 事件驱动回测与实盘框架 |
pyqlib | 0.9.7(2025-08-15) | >=3.8.0 | MIT | 29 | 面向 AI 的量化投资平台(微软) |
akshare 现在要求 Python ≥3.11,而 ZVT 要 ≥3.9 且 <4,两者装在同一环境时版本约束会先打架;③alphalens 主库最后一次发布是 2020 年,社区维护分支另有其人,用之前先确认版本策略。「顺手」是编辑判断,判断依据是各工具官方定位与 ZVT 的源码结构(下面注明依据)。
| 环节 | ZVT 的做法 | 同类工具的常见做法 | 搭配建议 | 判断依据 |
|---|---|---|---|---|
| 取数并落本地库 | record_data(provider=...) 写本地库并增量更新,8 组 provider 目录 | 多为「调用即返回」,不强制建本地库 | 需要反复做因子与回测 → 用 ZVT 落库;一次性取数 → 直接用数据接口库 | ZVT 源码 recorders 目录与 README 数据章节 |
| 标的与行情口径 | 7 类标的、33 张 K 线表,前复权/后复权按表名区分 | 接口维度多、以单次查询为主 | 口径要求严格 → ZVT;只要原始数据 → 数据接口库 | ZVT domain/quotes 目录实际文件清单 |
| 财务数据 | 四个财务 schema + important_cols() | 数据接口库通常覆盖更广(含公告等非结构化入口) | 结构化财报做因子 → ZVT;要公告原文 → 另找来源 | domain/fundamental/finance.py |
| 因子计算 | 二维索引 factor_df / result_df + TargetSelector | Qlib 提供因子表达式与模型库;Alphalens 只做因子绩效评估 | 做可复现因子流水线 → ZVT;做因子有效性统计 → Alphalens | ZVT README 因子章节 |
| 回测 | StockTrader.on_time + trade_the_targets 记录调仓 | RQAlpha / Qlib 的回测与撮合建模更细 | 需要更细的撮合与成本建模 → 把因子结果导出后接 RQAlpha | ZVT README 策略章节;其余工具按其官方文档 |
| 绩效与报告 | 界面与本地记录;不含专业绩效报告 | Alphalens 出因子分析图,Pyfolio 出组合绩效报告 | 因子评估接 Alphalens,组合绩效接 Pyfolio(两者主库均已停更) | 各工具官方定位 |
顺序很重要:先固定口径再算因子,先算因子再做评估,最后才是回测与绩效。
标的清单 + 行情 + 财务,各自 record_data 写进本地库,之后所有查询都打本地。这一步决定了后续口径是否统一。
用 data_df → factor_df → result_df 产出因子值;注意时间轴要对齐到「当时可获得」的日期(见点时数据页)。
Alphalens 需要「因子值 Series + 价格 DataFrame」两样东西,且价格表要按交易日对齐;这一步需要你自己写转换代码,框架之间没有官方集成。
IC、分位收益、换手率这几项决定因子值不值得继续做。注意主库停更,现代 pandas 下需自行处理兼容问题。
留在 ZVT 里跑用 StockTrader;需要更细的撮合与成本模型时,把选股结果导出到 RQAlpha 之类的框架里执行。
回到「从信号到可信回测」与「数据避坑」两页的清单,逐项确认后再下结论。
把「我要什么」放在最左边,选择就清楚了。
| 你的目标 | 建议起点 | 理由 | 注意点 |
|---|---|---|---|
| 先取一批数据看行情与财务 | 数据接口库(akshare / tushare 类) | 装上就能调,无需建库 | 不落本地库,反复用要重复取 |
| 把口径固定下来、反复做因子 | ZVT 落库 + 因子层 | 先写库再查询,口径与结果可复现 | 要接受 19 项钉版本依赖与 Python 版本约束 |
| 判断一个因子有没有用 | ZVT 算因子 + Alphalens 做评估 | 一个负责算,一个负责统计口径 | 两者格式需要自己转换 |
| 要接近实盘的撮合与成本建模 | RQAlpha 类回测框架 | 事件驱动、撮合与费用建模更细 | 数据格式要适配,学习成本更高 |
| 做机器学习选股流水线 | Qlib 类平台 | 数据层 + 模型库 + 回测一体化 | 数据准备通常是主要工作量 |
| 只想先问几个问题、不想搭环境 | 免部署的对话式技能路线 | 装客户端即可,当天就能得到结果 | 一次性结果、不落库;详见「对比」页 |
这三句话在本领域的讨论里反复出现,但都可以用官方事实纠正。
不对。ZVT 解决的是「把数据按统一 schema 落库并在上面做研究」,它自己也需要通过 provider 去取数;而公告、研报、非结构化数据这类需求,框架并不覆盖。两者是分工,不是替代。
没有官方集成。ZVT、Alphalens、RQAlpha 之间的数据格式、时间口径、复权方式各不相同,衔接层要你自己写并测试——本文把它写成规划而不是承诺。
恰恰相反。同一只标的在不同数据源、不同复权口径下数值可能明显不同(ZVT 官方示例里默认口径与后复权的收盘价差了一个数量级)。研究里必须固定口径并记录来源,否则结果无法复现。
事实类问题给出来源;能力边界问题一律以各工具官方文档为准。
不是替代关系,层级不同:AkShare / Tushare 主要解决「把数据取到手」,ZVT 解决「把数据按统一 schema 落到本地库,并在上面做因子与回测」。事实上 ZVT 的依赖里既没有 akshare 也没有 tushare,它走的是自己的 provider 体系(东财、新浪、交易所、聚宽等)。
要小心版本约束:PyPI 显示 akshare 当前要求 Python ≥3.11,而 ZVT 要求 ≥3.9 且 <4。3.11 同时满足两者,但依赖版本仍可能冲突——建议放在不同虚拟环境里,用文件交换中间数据。
定位上有重叠:两者都覆盖数据层与因子/模型层。Qlib 的强项是面向 AI 的模型库与流水线,ZVT 的强项是统一取数与「先落库再查询」的数据组织方式。选哪个更多取决于你已有的数据条件与工程习惯,本站不做优劣结论。
它的分析口径(IC、分位收益、换手)至今仍是因子研究通用语言,所以方法层面仍值得用;但主库最后一次发布是 2020-04-27(PyPI 数据),在现代 pandas 下需要自行处理兼容问题,或改用社区维护分支。
要。数据格式、时间口径、复权方式在工具之间并不统一,衔接层需要你自己写并测试。这也是本页反复强调「分工」而不是「替换」的原因。
事实部分(版本、日期、Python 要求、许可、发布数)全部来自 PyPI 公开元数据,可自行复核;ZVT 的部分另外以源码与 README 为依据。表格里的「建议」与「落点」属于编辑判断,已在图注与表头标明。其余工具的具体能力,本站没有逐项核验。