蜗牛博客VNPY学习记录:
VN.PY 2.0学习记录一(如何回测)
VN.PY 2.0学习记录二(策略开发)
Vn.py学习记录三(米筐教程)
VN.PY 2.0学习记录四(多线程、多进程)
Vn.py学习记录五–交易时间段及Widgets
Vn.py学习记录六(无界面模拟盘)
Vn.py学习记录七(V2.0.5版本)
Vnpy学习记录八(R-Breaker及pickle)
Vn.py学习记录九(事件驱动引擎)
VN.PY学习记录十(源码概述)
VNPY学习记录11(微信+Vscode)
VNPY学习记录12(父子进程、回调函数)
VNPY学习记录13(部署到云服务器,实现自动交易)
一、通过getdata.py获取回测数据
现在VNPY与米筐合作,可以非常方便地获得相关数据。
1.填写下载账号
这里又有一个坑,首先说明一下,下载了VN.PY的安装文件,解压缩之后,会有一个VNPY的文件夹,然后执行了安装程序之后,会在C:\ProgramData\VNConda\Lib\site-packages\下面也生成一个VNPY的文件夹。
我之前说过,写策略需要在C:\ProgramData\VNConda\Lib\site-packages\vnpy\app\cta_strategy\strategies这个文件夹下面建立,不然根本无法加载。然后今天打算测试回测的时候,因为记得之前看教程说需要在一个文件中输入ricqquant的账号与密码,所以我一个劲地在C:\ProgramData\VNConda\Lib\site-packages\vnpy\这个文件夹下面找文件,找了一通没有找到。后来竟然在F:\vnpy\vnpy-2.0.2\tests\backtesting\这里面找到了,要修改的其实就是getdata.py文件!
打开getdata.py文件,填写账号与密码。
注意:
填写代码时要注意大小写,比如螺纹钢要写“RB88.SHFE”才能下载到数据,用rb88.SHFE就不行。
2.获取数据
执行getdata.py文件,然后“咚"的一声,又掉坑里了。出现如下的错误提示:
rqdatac.share.errors.AuthenticationFailed: authentication failed.
不知是因为现在是五一假期非交易时间段,还是账号的原因,反正就是取不到数。
Updated on Jul.06 2019:
1.这里经后来确认,是由于我输错了账号、密码的原因。米筐的账号、密码是make.bat里面的那个,不是注册网站的那个。
2.这个getdata文件随便放哪儿都可以。
只要填写了正确的RQdata账号与密码,那么就可以取到数据了:
取到的数据是直接写入到了sqlite数据库,比如我设定的是取20190501-20190601的数据,这里就已经取到了。
导入的数据在哪儿呢?
默认生成的databased.db文件在当前运行目录下的.vntrader下,我的是在c盘user目录下的.vntrader里面。可以使用SQLiteSPY查看:
二、自己写代码获取数据
其实这一部分完全是自己最开始使用的时候,无法通过getdata.py文件获取数据折腾出来的,当作自己的笔记放这儿吧,大家如果是通过其他途径获的数据,可以将这个作为参考如何导入数据。
(一)安装jupyter
安装好VN.py2.0.2之后,jupyter是用不了的,需要用下面的命令重新安装。
pip install jupyter
(二)试用ricequant
1.RQDatac
pip install --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/ rqdatac
2.配置License
直接执行ricequant提供的make.bat文件即可,然后重启CMD窗口。
3.取tick数据
新建quant.py文件,代码如下:
import rqdatac as rq from rqdatac import * rq.init() rq.get_price('000001.XSHE','2018-3-23','2018-3-23','tick')
成果展示:
4.取股票数据
import rqdatac as rq import pandas as pd from rqdatac import * rq.init() data = rq.get_price('平安银行','2018-3-23','2018-4-23') df = pd.DataFrame(data) df.to_csv('pingan.csv')
成果展示:
备注:
默认取一天的数据,如果要取一分钟的数据则用:
data = rq.get_price('平安银行','2018-3-23','2018-3-28','1m')
函数的详细用法看这里:
https://www.ricequant.com/doc/rqdata-institutional#research-API-get_price
5.获取1分钟数据
import rqdatac as rq import pandas as pd from rqdatac import * rq.init() FIELDS = ["open", "high", "low", "close", "volume"] data = rq.get_price( "IF88", frequency="1m", fields=FIELDS, start_date='20190101', end_date='20190630' ) df = pd.DataFrame(data) df.to_csv('cf88new.csv')
(三)载入CSV文件
1.按下面的格式整理一份CSV文件,
2.导入数据:
执行VNPY的“功能————CSV导入”功能。
这里又有一个小坑,VN.PY默认的表头信息是“Open,High,Low,Close”这样第一个字母大写的形式,而从ricequant导出的数据是“open,high,low,close”这样第一个不是大写的,当我第一次运行的时候,明明所有字段都错了,却只提示我“volume”这个字段出错,结果我就在那里找呀找呀,找了半天没找到到底哪里出错了,后来才发现是这个字段首字母大小写的问题。
3.导入成功:
备注:
上面整理数据的那一步其实可以省略,设定好字段后,程序会自动识别。
另外,第二次导入数据之后,会在第一次的数据后面添加数据。
4.查看数据
三、策略回测
(一)回测方法一
使用vnpy的UI界面进行回测,这个简单,就不说了。
(二)自己写代码回测
新建一个q2.py文件用于回测,比如我的就放在C:\Users\Administrator\下面。
写回测代码:
from vnpy.app.cta_strategy.backtesting import BacktestingEngine from vnpy.app.cta_strategy.strategies.boll_channel_strategy import BollChannelStrategy from datetime import datetime engine = BacktestingEngine() engine.set_parameters( vt_symbol = "000001.SZSE", interval ="d", start = datetime(2018,3,23), end = datetime(2018,4,23), rate = 0, slippage = 0, size = 300, pricetick = 0.2, capital = 1_000_000, ) engine.add_strategy(BollChannelStrategy,{}) engine.load_data() engine.run_backtesting() df = engine.calculate_result() engine.calculate_statistics() engine.show_chart()
执行q2.py成果展示:
四、解决问题
上面的回测虽然运行成功,可是没有任何成交数据。到底是什么原因呢?代码问题?数据导入的时候的格式问题?还是其他的问题。
后来通过测试发现是数据量的问题,我用来测试的数据量太少了,后来将测试的1分钟数据期间改为2个月,终于好了。
成果展示:
图形展示:
用两个月数据大致测试了一下各个策略的年化收益率:
AtrRsiStrategy 16.88%
BollChannelStrategy 21.75%
DoubleMaStrategy -222.75%
DualThrustStrategy 48.12%
KingKeltnerStrategy 报错
MultiSignalStrategy -279%
MultiTimeframeStrategy 18.27%
TestStrategy 报错
TurtleSignalStrategy 134.98
看一个IF88.CFFEX从2016,1,1到2019,7,1的策略,有的年份很赚, 有的年份还会亏钱: