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 | use admin |
- 安装
vnpy
安装vnpy,别直接
pip install vnpy
, 因为pypi.org
上的库已经好久没有更新了,所以用下面的安装方式
1 | pip install git+https://github.com/vnpy/vnpy.git |
安装其他的包
成功安装
vnpy
后,还有部分包并没有成功安装,需要手动安装,如下:
1 | pip install tzlocal |
3、项目结构说明
- 代码结构
1 | ├── README.md |
代码说明
使用VNPY创建自己的策略需要继承
CtaTemplate
, 下面也是官方一个简单均线策略,来对vn.py
回测框架的熟悉。 双均线策略,指的是运用两条不同周期的移动平均线,即短周期移动平均线和长周期移动平均线的相对大小,研判买进与卖出时机的策略。由短周期均线自下向上穿越长周期均线,所形成的交点,称为金叉。当短周期均线自上而下穿越长周期均线,所形成的交点,称为死叉。
这样我们可以构建一个双均线策略:双均线金叉的时候,表明该币很强势,市场属于多头市场;反之,当出现死叉点时,市场属于空头市场。
4、回测
回测之前,需要下载历史数据;如果配置了MongoDB,数据下载完成后可以在MongoDB查看
4.1、命令方式回测
1 | python run_backtest.py |
回测结果
1 | 2021-05-24 23:18:06.187119 首个交易日:2017-09-05 |
4.2、图像界面方式回测
运行run_window.py
文件,即可启动图像界面回测。启动成功后,整个界面如下所示。
1 | python run_window.py |
图像界面回测结果如下:
- 回测之前,一定要先下载数据,有问题,可以多去看看官方的文档;
5 如何运行VNPY2.4.0
5.1 环境配置
- 基本的环境配置,安装参考上一篇
- 系统:Mac
- Python环境:3.8.8
5.2 拉取最新的代码
- 拉取代码
1 | # 拉取代码 |
- 安装依赖
下面几个常用的模块已经拆出去作为一个独立的项目,如果要运行
VNPY
项目,下面几个包是需要安装的
1 | pip install vnpy-ctabacktester |
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 | # 源代码 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版本