用统一的写入接口吃掉数据源差异
无论是东财、新浪、交易所还是聚宽,取数的入口都是 Schema.record_data(provider=..., codes=...):同一个 schema 可以挂多个 provider,某个源失效时换 provider 参数即可,业务代码不用改。这一层是项目文档里反复强调的「系统稳定性的基石」。
ZVT 项目研究站 · 模块化量化框架(zvtvz/zvt)
ZVT 是 2019 年开源的 Python 量化框架,官方一句话定位是 “modular quant framework”。它不是实时行情软件,也不是完整的实盘交易系统:它不提供行情服务,也不做开箱即用的软件;它提供的是一套统一约定——把七类可交易标的抽象成统一的实体与事件,用 record_data 把不同数据源写进本地库,用 query_data 按同一套参数查出来,再在二维索引的 DataFrame 上算因子、选股票、跑策略。
GitHub 公开读数:4,306 Star / 1,015 Fork / 887 次提交,MIT 许可;页面 tab 显示 14 个 Issue 与 8 个 Pull Request(GitHub API 的 open_issues_count 为 22,指的是两者之和)。数字会随社区活动变化,采集日期为 2026-09-18。
查看官方仓库
国内做量化研究最费时间的往往不是策略,而是每个数据源一套字段、一套复权口径、一套缓存方式。ZVT 的设计目标就是把这一层抽象掉,代价是你需要先接受它的约定。
无论是东财、新浪、交易所还是聚宽,取数的入口都是 Schema.record_data(provider=..., codes=...):同一个 schema 可以挂多个 provider,某个源失效时换 provider 参数即可,业务代码不用改。这一层是项目文档里反复强调的「系统稳定性的基石」。
数据先落本地(默认在 zvt_home/data),第二次运行只做增量更新;之后的筛选与因子计算全部打在本地数据上,不再受接口限流和网络波动影响。这也是它和「每次问一次接口」的对话式工具的关键差别。
因子层的 DataFrame 以 (entity_id, timestamp) 为二维索引,因此「一次算 3000 只股票的 MACD」和「一次算 1 只」是同一个写法,输出的 result_df 直接给出每只标的在每个时点是否命中条件,交给 TargetSelector 变成选股结果。
官方 README 把数据、因子、策略分章讲,但没画过一张贯穿的图。下面四个环节的名称全部取自 README 的示例输出与源码模块名。
框架把研究对象称为 TradableEntity,它周围发生的事叫 EntityEvent。官方 README 输出的 zvt_context.tradable_schema_map 包含 stock、stockhk、stockus、index、etf、block、fund 七个键——这七个键就是「你能用它研究什么」的硬边界。预期:知道自己要研究的东西属于哪一类。
record_dataStock.record_data(provider="em") 这样一行就把标的清单写进本地库;带 entity_ids 或 codes 时只写指定标的,不带就是全市场。写库是增量的,重复运行不会重复拉取。预期:本地出现对应表;未配置凭据的 provider 会在这一步报错。
data_df → factor_df → result_df因子对象读 schema 得到 data_df,经 Transformer(例如 MacdTransformer(count_live_dead=True))产出 factor_df,再给出 result_df:filter_result 为 True/False,或 score_result 为 0 到 1 的评分。预期:得到一张二维索引表,行是 (标的, 时间)。
策略继承 StockTrader 并实现 on_time(timestamp),在里面调用 trade_the_targets(...)。跑完打开自带界面看结果:zvt 命令起 Dash 界面(8050),zvt_server 起 FastAPI 服务(8090)。预期:界面上能看到标的、因子、信号与绩效。
这张表是本站逐份打开 setup.py、requirements.txt、src/zvt/config.json、GitHub API 与 PyPI 元数据后整理的,官方首页没有这样一张对照,也是判断 ZVT 是否适合你的最快入口。
| 项目 | 事实 | 依据与注意点 |
|---|---|---|
| 项目定位 | 官方 About:modular quant framework.;PyPI 摘要:unified, modular quant framework for human beings | README 强调「no backward compatibility guarantee」,定位偏研究框架而非交付产品 |
| 当前版本 | 0.13.5,2026-01-18 发布;PyPI 累计 86 个版本 | setup.py 与 PyPI、GitHub Release 三方一致 |
| 许可 | MIT | 仓库根目录存在 LICENSE;GitHub API 的 spdx_id 为 MIT;但 PyPI 的 license 字段为空,只靠 classifier 声明,介意合规的团队建议以仓库 LICENSE 原文为准 |
| Python 版本 | setup.py 与 PyPI 均写 >=3.9, <4 | 官方材料口径不一致:README.md 写 3.8、README-cn 写 3.6、docs 的 install 页写 3.7 与 3.8。详见安装页的四份材料对照表 |
| 依赖规模 | requirements.txt 19 项,全部钉死版本 | 含 SQLAlchemy 2.0.36、pandas 2.2.3、numpy 2.1.3、dash 2.18.2、fastapi 0.110.0;钉版本意味着与你的环境可能冲突;uvicorn 不在依赖里,REST 路线要另装 |
| 可研究对象 | 7 类:stock / stockhk / stockus / index / etf / block / fund | 取自 zvt_context.tradable_schema_map 的实际输出键 |
| 数据源 | src/zvt/recorders/ 下 8 组目录:em 26、eastmoney 23、joinquant 21、exchange 11、sina 9、qmt 7、jqka 4、wb 4(单位:Python 文件数) | 文件数不等于可用数据面;聚宽一侧需要 jq_username/jq_password |
| K 线周期 | 股票覆盖 1m/5m/15m/30m/1h/4h/1d/1wk/1mon,其中 5 个周期另有后复权(hfq)版本 | 以 src/zvt/domain/ 的实际文件为准;不是每个标的类型都有全周期 |
| 界面入口 | zvt → Dash 界面 8050;zvt_server → FastAPI 8090;前端在独立仓库 zvt_ui(3000) | 当前入口文件的 Dash layout 只注册了 factor 一个标签页,不要按 README 截图想象有整站功能 |
| 实时行情 | 依赖 QMT 数据源;stock_quote schema 只有 qmt 一个 provider | README 明确写「需要开通的同学请联系作者」——本框架的实时能力不是装上就能用 |
| 时间线 | 2019-04-04 建仓,最近一次代码推送 2026-07-01 | 仍在更新,但主要维护者只有一位(作者 foolcage) |
「ZVT」这三个字母在技术圈至少有两种完全不同的含义,先对号入座,避免看到不相干的内容。
| 同名项 | 指什么 | 典型场景 | 与本文的关系 |
|---|---|---|---|
| ZVT(本页) | zvtvz/zvt,Python 量化框架:取数、因子、选股、回测 | A 股数据落到本地库、算财务与技术因子、写策略 | 本文与本站全部页面讲的就是它 |
| ZVT = Zero Voltage Transition | 电力电子里的「零电压转换」软开关技术 | 开关电源、Boost/LLC 变换器拓扑、软开关设计 | 无关:属于电力电子学科,与金融数据、量化无关 |
| 其它零星缩写 | 某些行业内部缩写或产品代号 | —— | 搜索时若结果与「量化/股票/Python」无关,基本就是同名项 |
两条路线的交付物不同:ZVT 交的是一套可复现的本地研究环境,技能交的是一次可以直接看的回答。它们的关系是上游和下游,不是替代。
换来的是完全可控的口径与可复现的结果:复权怎么选、增量怎么更新、因子怎么算,全部写在代码里。代价是它不提供任何行情服务,行情、财务、龙虎榜都要自己通过 provider 取;实时行情还额外依赖 QMT 授权。
本机已核验的技能里,akshare-finance、tushare-finance、mx-data 负责取数,mx-select-stock、iwencai 负责条件选股,quant-analyst 提供回测与风险指标方法论。它们不能运行 ZVT 的因子流水线,也不落本地库;两者无已证实集成。
下面两张是本站集群内 2026-09-18 采集的 EasyClaw 对话截图(示例均为 A 股个股),点击左右箭头翻页。它们只说明「取数与回测方法论类的问题可以一句话发起」,不说明 ZVT 能在客户端里运行——ZVT 是本地 Python 框架,没有任何证据表明它可以被安装进这类环境。
它的更新节奏是每年几个版本、主要维护者一位,判断值不值得投入要看你的任务形态,而不是看 Star 数。
你研究的是 A 股、港股、美股、指数、ETF、板块或基金这七类标的中的任意一类,并且需要「同一套代码换数据源也能跑」;你愿意接受框架的约定(先写库再查询),也需要把研究过程固化成别人能复现的代码。
你只是想查一段行情、看一眼技术指标,或者不愿意维护 Python 环境与本地数据库;你如果要做高频或需要实时行情的实盘系统,ZVT 的实时能力依赖 QMT 授权,也不是一条独立可走的路。这种情况下先看清「对比」页会更省时间。
①环境成本:ZVT 的 19 个钉版本依赖,可能与现有环境冲突;②数据成本:聚宽、QMT 等 provider 需要自有账号或授权;③维护成本:README 明确不保证向后兼容,升级前要留回滚方案。三项都接受,再进入安装页。
以下回答均以官方仓库文件、README 与 PyPI 元数据为依据;本站没有在本机安装运行 ZVT,凡涉及运行结果的问题都会明确说明证据缺口。
它是一个 Python 量化框架,核心资产是「统一数据模型 + 统一取数接口 + 二维索引因子层」。与 Qlib 相比,它的数据层是自建 provider 目录、强调先写本地库再查询;与 vnpy 相比,它不做交易接口与实盘报单,重点在数据、因子与选股这条研究链路。具体差异以各自官方文档为准,本站不代做优劣结论。
代码是 MIT 许可,仓库根目录有 LICENSE 文件,可自由使用、修改与分发(保留版权声明)。注意两点:PyPI 的 license 字段为空、只有 classifier 声明 MIT,合规严格的团队建议以仓库 LICENSE 原文为准;另外代码免费不等于数据免费,聚宽、QMT 等数据源有各自的授权与条款。
不带。它提供的是从各数据源抓取并写库的能力,数据本身要用你自己能访问的源:东财与新浪一侧多数不需要账号,聚宽一侧需要 jq_username/jq_password,实时行情一侧需要 QMT。数据源清单与前置条件见「数据源」页。
实时行情依赖 QMT 数据源,README 写明「需要开通的同学请联系作者」;stock_quote 这类实时表的 provider 里只有 qmt。至于实盘,官方材料里没有交易接口与实盘下单的证据,本站不宣称它能实盘。
可交易标的共七类:stock(A 股)、stockhk(港股)、stockus(美股)、index、etf、block(板块)、fund。周期覆盖各标的类型不同,股票最全(含分钟级与后复权),详见「K 线与复权」页的覆盖表。
仓库里有中文 README(README-cn.md),但官方 ReadTheDocs 文档站是英文的,而且 docs/source/usage.rst 只有标题、没有正文——也就是说「怎么用」这一层官方基本没写。本站的取数、因子、策略三页就是针对这个缺口整理的,但请以源码与 README 为准。
因为官方五处材料的写法不一致:setup.py 与 PyPI 写 >=3.9, <4,README.md 写 3.8,README-cn 写 3.6,ReadTheDocs 的安装页写 3.7 与 3.8。安装页把五处原文并列成表,并说明为什么应该以 setup.py 作为执行口径。
没有已证实集成。本机技能目录里不存在任何 ZVT 相关技能,也没有把 Python 框架装进对话环境的证据。可用的是取数、选股、技术面与研究方法论这类技能,属于并列的另一条路线,入口在顶部导航「对比」。
项目事实来自 GitHub 公开 API、README.md / README-cn.md、setup.py、requirements.txt、src/zvt/config.json、仓库文件树(704 条路径)与 PyPI 元数据;对照侧来自本机 C:\Users\CF\.easyclaw\skills 下各技能 SKILL.md 的原文。本站没有在本机安装 ZVT,页面不提供任何运行输出或绩效数字。