vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1月正式发布,在开源社区6年持续不断的贡献下一步步成长为全功能量化交易平台,目前国内外金融机构用户已经超过600家,包括:私募基金、证券自营和资管、期货资管和子公司、高校研究机构、自营交易公司、交易所、Token Fund等。
1、VN.PY介绍
工欲善其事必先利其器,有一个好的回测框架,才能更好的验证自己的策略
vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1月正式发布,在开源社区6年持续不断的贡献下一步步成长为全功能量化交易平台,目前国内外金融机构用户已经超过600家,包括:私募基金、证券自营和资管、期货资管和子公司、高校研究机构、自营交易公司、交易所、Token Fund等。
2、搭建回测环境
再好的策略也得经过历史数据的回测,才敢放心的去实盘
2.1、环境
- Python 3.8.x
- vnpy 2.30,
- MongoDB
2.2、安装
安装mongoDB
安装mongoD环境是为了存储数据,方便回测。
安装教程,参考:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/
建库建表的语句
1 2 3 4 5
| use admin db.createUser({user:'admin', pwd:'xxxx', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
use vnpy db.createUser({ user: "root", pwd: "xxxx", roles: [{ role: "readWrite", db: "vnpy" }] })
|
安装vnpy,别直接pip install vnpy
, 因为pypi.org
上的库已经好久没有更新了,所以用下面的安装方式
1
| pip install git+https://github.com/vnpy/vnpy.git
|
1 2 3 4 5
| pip install tzlocal pip install plotly pip install pymongo pip install mongoengine pip install quickfix
|
3、项目结构说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ├── README.md ├── .vntrader # 这个文件自己创建,默认是~/.vntrader/,但是为了编码方便,我会在项目创建这个目录(注意主要信息的泄露) │ ├── cta_backtester_setting.json │ ├── cta_strategy_data.json │ ├── cta_strategy_setting.json │ ├── data_recorder_setting.json │ ├── database.db │ ├── log │ │ └── vt_20210522.log │ ├── risk_manager_setting.json │ └── vt_setting.json └── vnpy_strategy ├── backtest_fixed_time.py # 运行回测 ├── run_window.py # 通过图像界面操作 ├── strategies # 自己写的量化策略,都在这个目录 │ └── simple_double_ma.py └── utils # 工具类代码,都会放在这个目录 └── download_data_binance.py
|
代码说明
使用VNPY创建自己的策略需要继承CtaTemplate
, 下面也是官方一个简单均线策略,来对vn.py
回测框架的熟悉。
双均线策略,指的是运用两条不同周期的移动平均线,即短周期移动平均线和长周期移动平均线的相对大小,研判买进与卖出时机的策略。由短周期均线自下向上穿越长周期均线,所形成的交点,称为金叉。当短周期均线自上而下穿越长周期均线,所形成的交点,称为死叉。
这样我们可以构建一个双均线策略:双均线金叉的时候,表明该币很强势,市场属于多头市场;反之,当出现死叉点时,市场属于空头市场。
4、回测
回测之前,需要下载历史数据;如果配置了MongoDB,数据下载完成后可以在MongoDB查看
4.1、命令方式回测
回测结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 2021-05-24 23:18:06.187119 首个交易日:2017-09-05 2021-05-24 23:18:06.187126 最后交易日:2018-05-20 2021-05-24 23:18:06.187131 总交易日:258 2021-05-24 23:18:06.187137 盈利交易日:139 2021-05-24 23:18:06.187142 亏损交易日:117 2021-05-24 23:18:06.187151 起始资金:300,000.00 2021-05-24 23:18:06.187159 结束资金:300,969.58 2021-05-24 23:18:06.187165 总收益率:0.32% 2021-05-24 23:18:06.187170 年化收益:0.30% 2021-05-24 23:18:06.187177 最大回撤: -608.35 2021-05-24 23:18:06.187183 百分比最大回撤: -0.20% 2021-05-24 23:18:06.187188 最长回撤天数: 8 2021-05-24 23:18:06.187194 总盈亏:969.58 2021-05-24 23:18:06.187200 总手续费:101.55 2021-05-24 23:18:06.187208 总滑点:0.00 2021-05-24 23:18:06.187215 总成交金额:101,552.30 2021-05-24 23:18:06.187220 总成交笔数:171 2021-05-24 23:18:06.187226 日均盈亏:3.76 2021-05-24 23:18:06.187231 日均手续费:0.39 2021-05-24 23:18:06.187237 日均滑点:0.00 2021-05-24 23:18:06.187243 日均成交金额:393.61 2021-05-24 23:18:06.187250 日均成交笔数:0.6627906976744186 2021-05-24 23:18:06.187256 日均收益率:0.00% 2021-05-24 23:18:06.187262 收益标准差:0.02% 2021-05-24 23:18:06.187267 Sharpe Ratio:1.11 2021-05-24 23:18:06.187273 收益回撤比:1.60 2021-05-24 23:18:06.187780 策略统计指标计算完成
|

4.2、图像界面方式回测
运行run_window.py
文件,即可启动图像界面回测。启动成功后,整个界面如下所示。

图像界面回测结果如下:
- 回测之前,一定要先下载数据,有问题,可以多去看看官方的文档;
5 如何运行VNPY2.4.0
5.1 环境配置
5.2 拉取最新的代码
1 2 3 4
| # 拉取代码 git clone https://github.com/vnpy/vnpy.git # 切一个分支,如:local_dev git checkout -b local_dev
|
下面几个常用的模块已经拆出去作为一个独立的项目,如果要运行VNPY
项目,下面几个包是需要安装的
1 2 3 4
| pip install vnpy-ctabacktester pip install vnpy-ctastrategy pip install vnpy-datamanager pip install vnpy-riskmanager
|
5.3 新建一个目录
为了原始项目干净,新建一个目录(名称随意),在这个目录可以写自己的策略代码,工具类等
比如我自己新建了一个目录workspace
,
在workspace
目录下再新建两个目录:
.vntrader
: 存放配置文件的地方(mac系统下默认存放路径是~/.vntrader
, 不过编辑什么的不方便)
strategies
: 存放策略代码的地方
5.4 实现代码

- 策略代码:
simple_double_ma
- 启动App(图像界面):
run_app.py
- 回测(命令行):
run_backtest.py
6. 问题
系统的策略,还有自己写的策略,都加载不到
版本升级有风险,升级到2.4.0后,发现自己写的策略程序都无法加载,阅读源代码,才发现官方没有做到系统兼容,等待下一版修复。
Mac,Linux用户要运行代码,肯定需要改下源码,测试就OK了:
- 包
vnpy_ctastrategy
,文件engin
, 803行
- 包
vnpy_ctabacktester
, 文件engin
, 95行
1 2
| # 源代码 pathname: str = str(path) + f"\\*.{suffix}" pathname: str = str(path) + f"/*.{suffix}"
|
7.总结
新的版本问题肯定是有的,下载源码,运行调试,不断探索。
1. 更新内容
详细查看Github更新日志
主要看了下2.4.0版本做了很大的调整
- 将Deribit接口剥离到vnpy_deribit项目中,并升级到2.0.1版本
- 剥离CTA策略模块下的穷举和遗传优化算法到vnpy.trader.optimize模块下
- 遗传算法优化完成后,输出所有回测过的参数对应结果(而不只是最优结果)
- CTA策略引擎加载策略文件时,增加模块重载的操作,使得任何策略文件修改可以立即生效
- CTA策略引擎扫描特定目录下的策略文件时,使用glob函数(替换原有的os.walk),避免对子目录中文件的错误加载
- 将CTA策略模块剥离到vnpy_ctastrategy项目中
- 将CTA回测模块剥离到vnpy_ctabacktester项目中
- 将XTP接口剥离到vnpy_xtp项目中,并升级到2.2.27.4版本
- 将事前风控模块剥离到vnpy_riskmanager项目中
- 将数据管理模块剥离到vnpy_datamanager项目中
- 将Deribit接口剥离到vnpy_bybit项目中,并升级到2021.6.21版本