2020年vn.【py】量化策略历史回测(基于本地csv数据)

公布于vn.py社区订阅号【vnpy-community】 原文作者 :用Python的生意业务员 | 公布时间 :2020-01-07

这两周被伤风折腾的够呛,叠加上元旦后的出差,拖到今日才偶然间来写这篇新年计划。

回首2019年

翻翻自己 知乎专栏 的文章,这篇是第五篇年度总结和项目计划,从2015年在Github上开源以来,vn.py项目也不知不觉也走入了第六个年初。

还是老例子,先往返顾下2019年的工作结果:

  • 用户数目
  • Github Star:10.7k(10609)
  • Github Fork:4.7k
  • 环球排名:第二(仅次于ccxt)
  • 项目开发
  • 版本迭代:10次(2.0.0 -> 2.0.9)
  • 底层生意业务接口:30个
  • 上层策略应用:11个
  • 社区交流
  • 论坛用户数目:8474人
  • 论坛帖子数目:7784篇
  • 线下活动:12次
  • 线上分享:3次
  • 专题小班课:4次
用户数目

截至2020年1月5日,vn.py在Github上一共收获了10609个Star,Fork数目到达4.7k,算是完成了两个里程碑:

  • 超过Zipline,现在Star数目10363(一整年的追赶~)
  • 总Star数目破1万(成功突破整数位压力!)

来看下现在Github上排名前十的量化类开源项目(包括数字钱币):

前十的排名上整体还是去年的老面貌,Python的占比进一步增高,从2018年底的6个,增长到2019年底的8个项目(包括ccxt)。

项目开发

2019年vn.py项目标工作重心,重要放在了基于Python 3.7的v2.0版本开发上,接纳快速迭代的开发模式(约莫5周一个版本的频率),一共完成了从v2.0.0到v2.0.9的10个版本的公布。

为了保证项目重构的效果,v2.0的代码全部重新编写,由7大模块组成:

  • vnpy.trader:全功能量化生意业务平台
  • vnpy.gateway:包含30个国内外全品种生意业务接口
  • vnpy.app:包含11个量化生意业务策略应用模块
  • vnpy.api:各种API的Python封装实现
  • vnpy.event:简便易用的事件驱动引擎
  • vnpy.rpc:跨历程通讯尺度组件
  • vnpy.chart:纯Python的高性能K线图表

此中在策略应用模块的计划上,保存vn.py资深用户嘻歡的json文件设置功能的同时,增长了对初学者更友爱的图形界面管理设置方法,如下图的CTA策略回测模块(vnpy.app.cta_backtester):

上图中表现的是针对股指期货的AtrRsiStrategy回测结果,2017年开源在Github上后再也没有调整过参数,没想到2018-2019两年样本外的结果还挺稳定。

针对初学者比较头疼的Python环境和安装问题,专门开发了针对量化生意业务专门计划的VN Studio发行版:接纳exe安装文件的情势,内部集成了vn.py运行所需的全部三方包,只需一起【下一步】就能傻瓜式完成全部安装工作。

VN Studio中同时还分外内置了VN Station量化管理终端(上图),方便对Python脚本编写还不认识的初学者,直接通过GUI图形界面的情势来管理加载想要使用的底层接口以及上层应用,快速构建切合自己需求的VN Trader生意业务系统。

社区交流

年初上线了全新的 【vn.py量化社区论坛】 ,用于替换之前基于Discuz的老论坛【维恩的派】。这次选择了Python作为论坛后端系统,一方面解决了恶意灌水的问题,另一方面也能联合VN Station的主动更新功能实现无缝的vn.py升级体验。大概一年不到的时间里,论坛累计用户数目到达了8473,发帖篇幅数目为7783,逐日在线人数浮动在300-700人范畴。

2019年共计举行了12次vn.py社区线下活动,此中北京2次、深圳1次、成都1次,剩下的都在上海(浦东嘉里城Wework的M会议室大概已经成为许多社区成员所认识的地方了吧)。线上活动方面倒是搞的比较少,一共只有3次。

除了线下活动外,针对社区内一部分用户盼望深入学习vn.py的需求,2019年也推出了4次专题小班课程,包括2次生意业务接口开发和2次CTA策略深入进阶。两天10小时的高强度课程以及均匀每人1万元的价格,说真话刚开始的时间内心也有点没谱(交了这么贵的学费还学不到真本领岂不是坑人?)。

幸亏最终学员反馈的结果取消了之前的挂念:十多个由接口小班课学员完成的底层接口代码(上图中的接口贡献给了vn.py),以及CTA小班课学员大概全员把握了策略从开发到实盘的全流程,大部离开始了实盘生意业务。


2020的计划 全功能的期权生意业务

2019年12月尾,国内期权市场终于迎来了股指期权、300ETF期权、黄金期权这几个重量级品种。社区里的老用户大概知道,vn.py最早脱胎于我自己在量化私募担当期权生意业务员时,开发的期权颠簸率生意业务系统DerivativesMaster。

50ETF期权在上市初期,国内大概没有可以或许满意庞杂期权颠簸率生意业务策略的贸易量化平台。作为一个缺乏IT学历配景的生意业务员,可以说正是靠着Python易学易用的语言特性以及开放活泼的社区生态,才可以或许凭借DerivativesMaster系统,有幸第一批参与50ETF期权的量化生意业务。

以是接下来这一年的开发工作重心,将会合中在期权方面,目的是让vn.py成为全功能的期权量化生意业务解决方案:

  • 高性能期权定价模型(基于Cython和Numba技能)
  • 及时颠簸率曲面盘算
  • 持仓希腊值风险管理
  • Delta主动对冲算法
  • 定价颠簸率拟合功能
  • 电子眼套利算法
  • 期权策略回测引擎
  • 各种手动和半主动生意业务工具

授人以鱼不如授人以渔,期权这块除了开源代码外, 2020年也将会推出从入门、进阶到深入的完备期权量化课程体系,第一部分的内容计划1月尾前上线,欢迎关注!

代码上开始做减法

随着项目标整体代码量越来越大,vn.py也终于到了需要开始做减法的阶段。在接下来的开发中,除了继续增长新功能外,也会开始渐渐精简代码:

  • 接纳Python 3.8的新语言特性重构
  • CI等功能转向使用统一的Github服务
  • 移除缺乏用户关注和使用的模块

送君千里终须一别,在2020年元旦当天Python社区已经正式公布了对2.7版本支持的结束,同样vn.py官方团队也将停止对v1.9.2-LTS版本(基于Python 2.7的最后版本)的维护工作,将全部精神放在v2.0版本上了。

最后:2020,Enjoy Trading!!!

除了vnpy

写在前面

策略研发之后,为了检测我们策略的效果,不大概一上来就接入实盘,以是需要的就是通过历史数据对我们的策略进行查验,也就是历史回测。vn.py也有推出历史回测的教程,是通过内置的RQdata进行的,也就是说需要购置RQdata的服务,通过RQdata下载的数据会主动添加到.vntrader下面的SQlite数据库中。除此之外,vn.py另有一种回测方法,就是通过手动导入csv到SQlite数据库中,这种方法就需要你自己有提供数据服务的!服务器要么当地用于回测的csv数据。由于在vn.py的源码中,默认是通过RQdata获取数据,假如没有成功,就从数据库中查询。
第一种方法由于需要购置数据服务,虽然需要费钱,但是这是最好的方法了,由于RQdata与vn.py恰好契合,不但可以提供历史回测的数据还可以在实盘阶段为策略进行初始化操作,以是有条件的还是购置这个比较合适。RQdata在vn.py的设置官方教程中已经推出,下面以当地csv进行历史回测进行演示和总结整理。

获取数据

数据获取根据上一篇文中以 新浪财经API获取数据 为例。在获取到数据之后,我们需要将得到的数据保存为csv格式数据,以代码中RB1910的1h线为例:

from urllib import request import json import pandas as pd def get_data(id): url_60m = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine60m?symbol=' url = url_60m + id req = request.Request(url) rsp = request.urlopen(req) res = rsp.read() res_json = json.loads(res) bar_list = [] res_json.reverse() for line in res_json: bar = {} bar['Datetime'] = line[0] bar['Open'] = float(line[1]) bar['High'] = float(line[2]) bar['Low'] = f!loat(line[3]) bar['Close'] = float(line[4]) bar['Volume'] = int(line[5]) bar_list.append(bar) df = pd.DataFrame(data=bar_list) print(df) df.to_csv('./data.csv', index=None) if __name__ == '__main__': get_data('rb1910')

这里需要留意的是,在天生的csv的columns的名字必须根据上面的情势进行创建,由于vn.py在csv导入时是根据这些名称进行剖析的。

csv数据导入

在得到csv数据之后,我们打开VN Station,选择csv载入模块。

根据我们的数据格式进行选择导入数据。由于我们的数据是rb1910的1h数据,以是代码就是rb1910,生意业务所是SHFE,周期是HOUR,然后将数据进行导入。

历史回测

输入成功导入之后,打开CTA回测模块,填入相关信息然后开始回测:

得到回测结果:

在这里插入图片描述
上面四个图的意义为别是:

  • 子图1:资金变革曲线,笔挺向下说明稳定亏损
  • 子图2:最大回撤曲线,越来越大说明策略亏损越来越多
  • 子图3:逐日盈亏统计,红绿分布均匀,但绿色密度更大(亏损)
  • 子图4:盈亏的概率分布图,尖峰在0轴左侧(中位数日期发生亏损)
    除了基本的收益走势,每一笔的成交记载、逐日盈亏以及K线图都可以进行察看。

回测的另一方面也是为了让我们找到合适的参数,以是对参数进行优化也是须要的。vn.py中也为我们提供了参数优化的模块:
在这里插入图片描述
通过多历程优化可以得到优化的结果:

通过参数优化,我们可以得到最优的参数组合,通过这个最优参数组合再进行回测可以得到更好的结果:

写在背面

不得不说,vn.py无论是数据的下载要么当地csv的load,还是回测的可视化效果,另有参数优化,作为一个专注于量化实盘的框架已经做的很不错了。假如習慣于其他的回测框架,如pybacktest、zipline,也可以选择它们作为回测框架+vn.py实盘框架,回测固然可以选择多个框架进行测试,这样也可以得到更高的鲁棒性。不外话说返回,vn.py在回测方面也做得这么知心和殷勤,确实很不轻易。

REF

vn.py官方教程

公布于vn.py社区订阅号【vnpy-community】

原文作者 :用Python的生意业务员 | 公布时间 :2020-03-31

截至v2.1.1版本,vn.py项目标开源代码中已经共计支持34套差别种类的量化生意业务接口,基本覆盖了国内外主流金融市场。

每套接口API都通过Gateway层做了尺度化的封装处置,尽大概帮助用户把精神会合在量化策略的开发优化上,而不是过多关注国内外差别金融市场的细节区别。

举例来说,一套在国内期货市场业绩良好的CTA趋势策略,大概可以零本钱的迁徙到数字钱币市场,快速进入实盘生意业务业务。

本文中盼望通过总结对比的情势,帮助大家对于每套生意业务接口的功能特性创建一个直观的理解。

生意业务品种

description


【股票】同时还包括了全部沪厚交易所上市的证券品种,如ETF基金、LOF基金、生意业务所债券、国债逆回购等等。

【股票期权】现在只有沪厚交易所推出的50ETF和300ETF期权,听说本年内大概上市个股期权。

【资管】重要指基金公司(公募和私募)和投资顾问(国外)需要用到的子账户系统。

【永续交换】可以视作一种“没有到期日的期货合约”,通过对多空方的逐日利钱结算,来保证对标的物价格的收敛。

通过生意业务接口的缩写可以推断出对应的接口模块名称和接口类名称,以CTP接口为例:

  • 缩写为ctp
  • 接口模块为vnpy.gateway.ctp
  • 接口类名称为CtpGateway
  • 代码加载语句为:from vnpy.gateway.ctp import CtpGateway

CTP 相关:

  • CTP接口除了实盘版本外,另有专门用于期货穿透式认证测试的CtptestGateway,其接口版本号为6.3.16(实盘版本号为6.3.15)。
  • CTP Mini接口除了作为次席系统速率更快外,部分期货公司还提供免费的5档Tick行情(如浙商期货)。
  • CTP证券接口现在只有期货公司提供,除了ETF期权外,还同时支持标的物ETF的生意业务。

恒生 的柜台产品分类比较庞杂,这里UFT接口使用的是恒生极速API,无法对接基于纯T2SDK的UFT柜台。

中泰XTP 接口实现了国内证券市场全业务支持,包括股票现货、融资融券和股票期权业务。

飞鼠 是现在唯一可以对接上海黄金生意业务所市场(央行直属机构),支持黄金T+D(本质是一种交换)生意业务的接口。

鑫管家 融航 都是期货资管系统,重要由期货公司要么FOF基金提供应投资顾问使用。

不算华尔街顶级投行, 盈透证券 (Interactive Brokers)大概是现在环球接入市场最多的经纪商之一,八卦一句其高频自营公司Timber Hill常年靠着经纪业务的补贴在世(小道消息)。

数字钱币 市场的发展速率极为迅猛,整体上币圈这些生意业务所用已往3年走完了传统金融大概30年的发展进程,其生意业务产品上已经相当丰富(现货、杠杆、期货、永续、期权都有),但技能积聚大概另有所不足。

RPC服务 可以视作vn.py内部的特别接口,用于实现一个VN Trader历程(客户端)访问另一个V!N Trader历程(服务端)进行生意业务的功能,因此可以支持全部市场(只要服务端加载对应接口就行)。

操作系统

description


Linux系统的发行版众多,现在vn.py官方仅支持 Ubuntu 18.04 以上,其他发行版(如CentOS)理论上也可以使用,但需要自行编译二进制库。

上图中的信息,仅代表vn.py内某接口的操作系统支持,而不是该接口API本身的操作系统支持环境。举例来说,中泰XTP提供了Windows/Ubuntu/Mac三个系统的C++ API,但由于工作量的关系vn.py现在只支持了Windows版本。

除了CTP和宽睿两个支持Ubuntu系统外,其他 C++接口 现在均只支持Windows。

纯Python接口 的跨平台支持大概完美,包括全部币圈接口、RPC服务、IB、富途证券、老虎证券,且没有任何分外的开发工作量(Python大法好~)。

《vn.py全实战进阶 - 期权零底子入门》 课程内容已经全部更新完毕!内容专门面向从未打仗逾期权生意业务的新手,共计32节课程带你一步步把握期权的底子知识、理解合约特性和!品种细节、学习方向生意业务和套利组合等种种常用期权生意业务策略,具体内容请戳 新课上线: 《期权零底子入门》

本文网址: https://www.4008140202.com/pp/2020821132545_7827_233154941/home

推荐阅读

tags

最新发布