vn.py(现名 VeighNa)是一套基于 Python 的开源量化交易系统开发框架,2015 年正式发布,遵循 MIT 开源协议,永久免费,提供从数据获取、策略开发、回测分析到实盘交易的全流程解决方案,核心采用事件驱动引擎设计,支持 Windows、Linux、macOS 跨平台运行。 它和 Backtrader 最大的区别是,Backtrader 偏回测研究,vn.py 从诞生起就是冲着实盘去的,对国内期货、股票、期权的底层细节处理非常细致,CTP 接口支持深度在各类框架里很少对手。
核心架构
整体是分层的事件驱动设计,主要包含用户界面层、应用层、核心引擎层和基础设施层,关键组件有 MainEngine 负责组件生命周期管理,EventEngine 基于发布订阅实现模块解耦和异步通信,Gateway 用适配器模式统一对接不同交易所 API,还有 Database 管理历史行情和交易记录、Datafeed 统一接入多源数据。
这种设计的好处是换交易通道不用改策略代码,只要写一个符合规范的 Gateway 注册到主引擎即可,模块之间靠事件解耦,扩展比较灵活。
主要功能模块
- CTA策略与回测:支持 K 线和 Tick 回测,以及多进程参数优化
- 算法交易:提供 TWAP、Sniper、Iceberg、BestLimit、Stop 等智能算法
- 价差套利:支持主动腿与被动腿组合及自动价差计算
- 期权策略:内置波动率曲面计算、组合 Greeks 风控和自动 Delta 对冲
- 风险管理:提供交易流控、下单数量限制等事前风控
- 本地仿真:基于实盘行情进行委托撮合,适合上实盘前验证
- 数据相关:历史数据管理、行情录制、Excel 实时数据对接、Web 服务
- AI量化:4.0 版本新增 vnpy.alpha 模块,集成 Lasso、LightGBM、MLP 等算法,提供因子特征工程、模型训练和投研流程管理
交易接口与数据源
国内覆盖 CTP、CTP Mini、飞马、易盛、中泰 XTP、华鑫奇点、东证 OST、东方财富 EMT、金仕达黄金、飞鼠等,支持期货、期权、股票、ETF 期权、黄金 T+d 等品种,海外包括盈透证券、易盛9.0外盘、直达期货等。数据服务可对接 RQData、Wind、TuShare、iFinD 等,数据库支持 SQLite、MySQL、PostgreSQL、MongoDB、DolphinDB、TDengine 等。
版本演进关键点
v2.0 是 Python 3 首个版本,重构核心框架,引入 BaseGateway、BaseEngine、BaseApp 抽象类,GUI 基于 PyQt5 重写并改为非默认加载。v2.8.0 完成约 90% 模块剥离,核心库只保留通用组件,交易接口、数据库适配器、策略应用都作为扩展插件独立管理。这一点很重要,现在装 vn.py 不等于装齐所有功能,需要单独装 vnpy_ctp、vnpy_ctastrategy、vnpy_sqlite、vnpy_rqdata 等扩展。v4.0.0 核心支持升级到 Python 3.13,日志改用 loguru,构建采用 pyproject.toml,用 uv 管理开发环境,交易接口 C++ 封装改用 meson-python 编译。v4.4.0 重构通知系统新增微信消息推送,修复 CTP 拒单状态映射问题。
安装与上手路径
推荐用官方 VeighNa Studio 一键安装包,或者 pip install vnpy 源码安装,Windows 源码安装可能需要 C++ 编译环境,AI 功能额外装 vnpy_alpha。基础环境一般要求 Python 3.10 及以上、至少 8GB 内存。
上手建议顺序:
- 注册 CTP 仿真账号,拿到交易服务器地址
- 用 VeighNa Station 登录,启动 VeighNa Trader,连接网关看行情和持仓
- 跑通官方双均线 CTA 策略,理解 CtaTemplate 和回调
- 用 cta_backtester 配置合约、周期、资金、滑点、手续费做回测
- 用 data_recorder 自己录行情入库,避免依赖外部数据质量
- 配置 risk_manager 事前风控,再考虑小资金实盘
策略开发核心是继承 CtaTemplate,定义 parameters 和 variables,实现 on_init、on_start、on_stop、on_tick、on_bar、on_order、on_trade 等回调,用 BarGenerator 合成 K 线,用 ArrayManager 算指标。
优点
- 国内实盘链路最完整,CTP 等接口成熟,省掉大量自己封装底层的工作
- 模块齐全,风控、算法交易、价差、期权都有现成方案
- 生态和中文资料相对丰富,社区遇到问题比较容易找到答案
- MIT 协议,商用集成相对友好,没有 GPL 那种传染性
局限和坑
- 学习曲线陡,概念多模块多,文档更新有时跟不上代码速度,新手直接上手容易懵
- 回测性能一般,相比 VectorBT 这类向量化框架慢不少,但优势是能无缝切实盘
- 多因子选股不顺手,原生更偏单标的 CTA,多因子需要自己扩展,机器学习集成早期也较弱
- Windows 下要留意内存问题,有经验建议每日重启引擎,避免长时间运行累积异常
- 数据质量决定一切,最好自己录行情,外部数据缺漏会直接污染回测和信号
- 实盘必须加熔断,单日亏损超阈值自动停机,别完全依赖策略自身逻辑
和 Backtrader、Qlib 怎么搭配
三者定位互补,比较常见的路径是 Backtrader 学事件驱动机制和验证策略逻辑,Qlib 做 AI 因子挖掘和机器学习策略研究,vn.py 负责实盘交易和全流程落地。混合使用要解决 Qlib 到 vn.py 的信号传递、两边数据格式对齐以及 Python 版本兼容等工程问题。
如果目标是国内期货 CTA 自动交易,vn.py 基本是首选。如果只是想快速验证一个想法,用 Backtrader 或 vectorbt 更省事,别一上来就啃全栈平台。
另外提醒一句,框架再完善也解决不了策略本身不赚钱的问题,行情没清洗干净、复权没处理好、滑点手续费没模拟真实,回测再漂亮实盘都会打回原形。