VNPY官网
http://www.vnpy.cn

https://github.com/vnpycn/vnpy-pro

48bb2191-376d-42d3-85d0-4e8556587c6f-图片.png VNPY CTP仿真柜台是一项底层仿真回测技术,是基于底层而不是应用层,所以是和编程语言无关的,并且没有第3方平台提供的方法,可以在不修改原有代码的前提下实现回测。VNPY仿真回测目前主要提供了上海期货交易所的CTP接口(支持商品期货、股指期货),未来还将提供对券商、服务商、交易所的各种API进行仿真的版本。
先介绍一下CTP接口,CTP接口是上海期货交易所提供的一套面向商品期货、股指期货、商品期权、股指期权的API接口,包含了行情订阅和交易接口,支持国内149家合规期货公司。
支持中金所、上海期货交易所、大连期货交易所、郑州期货交易所、能源所这5家期货交易所的行情订阅和账户程序化交易。
而VNPY CTP仿真柜台属于底层仿真回测,同时是免费软件,任何人和公司均可下载免费使用。

上期CTP官网
可以注册模拟账户,下载原生CTP api,CTP Demo可用于该模拟的程序化交易,
http://www.simnow.com.cn/

VNPY仿真回测.支持编程语言

支持多种编程语言,包括C++、Python、Java、C#、Golang、易语言等 。
甚至支持快期接入。

打个比方:就像有一个叫CTP程序化的照相机,有一套普通镜头叫做CTP原生API,还有一套广角镜头叫做VNPY仿真柜台,但无论哪套镜头拍出的照片,都可以被Photoshop后期处理调整对比度,亮度等等。而VNPY的Python框架,海风,PyCTP,Quicklib,快期就相当于后期Photoshop后期处理的这一步。

VNPY CTP仿真回测.支持的操作系统

VNPY底层仿真回测系统支持Windows操作系统,版本要求Windows7、Windows2008及以上。

VNPY CTP仿真回测.支持语言框架

支持各种自编CTP程序和各种编程语言框架,例如C++、Python、JAVA、C#等。
支持海风、VNPY、Quicklib、PyCTP等所有框架和自编程序。
上海期货交易所只提供了 C++原生DLL,对于其他语言均是第三方封装了,只能称为CTP框架。
当然对于各种CTP 编程语言框架,例如Python框架、Java框架、C#框架等,VNPY仿真柜台的实现是一样的,因为这些语言的框架本质上还是调用C++的库文件。
上期CTP官网:
提供了CTP技术文档、Windows API,Linux API,IOS API,Android API
推荐Windows 和Linux API接口,对IOS,Android一般不用于生产环境。
::::::上海期货信息技术有限公司::::::​
http://www.sfit.com.cn

一般通过CTP开发实现程序化交易的流程是:

(1)用手机注册上海期货交易所SIMNOW仿真账户

由于上期官方SIMNOW的仿真账户和实盘真实行情是基本同步的,所以这一环境仅用于功能测试,不适合用于回测;
上海SIMNOW 模拟账户官网
SimNow仿真交易【官方网站】​
http://www.simnow.com.cn
特别注意的是,上期的这2个网站,只有在工作日工作时间才能打开,其他时间网站处于关闭状态。事业单位,你懂的。
(2)通过VNPY CTP仿真柜台进行策略回测
下载数据和部署和实现仿真回测、策略参数调整和优化;
这一段在本文后面介绍。
(3)实盘账户开户;
这里kaihu条件很好,交易所标准+1分,交反50-80%
正规期货公司商品期货低佣金开户(徽商期货,宏源期货,华安期货,东方期货)​
http://www.kaihucn.cn
(4)期货实盘交易

回测方案说明

在VNPY的Virtualapi之前, 现在的量化回测软件和方法有三类,
一、是通过文华、TB、MC等商业软件,在商业软件中通过编写交易指标和交易公式,或通过加载用户自己开发的第三方策略库进行交易策略的开发和回测;若采用第一类商业软件开发量化交易回测系统,虽然对从事量化交易的人来说,开发策略需要的工作量较少,对开发者编程能力要求不高。但缺点也是显而易见的,除了商业软件本身需要收费提高了交易成本以外,采用商业软件开发交易策略不够灵活,使得很多交易策略无法实现。
二、是直接使用交易所、券商、API软件服务商提供的API或券商等机构提供的行情和交易API直接开发交易策略,或通过一些回测框架调用这些原生API进行回测;若采用第二类直接使用API开发策略或采用针对API的回测框架,例如python的各种回测框架、matlaba的各种回测框架、R语言的各种回测框架,PyAlgoTrade、Zipline等、虽然开发策略较为灵活,但缺点是开发交易策略的实盘代码并不能直接进行回测,必须要采用引入回测框架进行回测,待回测完毕,再将回测完成的参数接入实盘策略代码中或删除回测框架部分的代码接入实盘交易的API,使得量化交易回测代码和实盘的代码有较大的改动,增加了策略开发者的工作,也增加了量化交易爱好者时间成本,甚至对很多编程能力有限的量化爱好者来说提搞了研究难度的门槛。
第三类是利用聚宽、优矿的网站在线平台进行回测。若采用第三类在线回测平台进行回测,由于需要将编写的策略在网站指定的服务器上运行,由于是多用户共享一台服务器,所以回测性能无法得到保证、网站更倾向于采用精度不高的数据进行回测。还由于对策略开发者来说不是使用原生API进行开发策略,所以策略开发的自由度也不够,很多想法也无法实现。更重要的是,选择网站在线平台的方式来开发量化交易策略,就等于默认了网站管理员可随时查看自己辛辛苦苦开发的策略代码,保密性让人担忧,从事量化交易的专业机构几乎不会采用在线网站的回测方式。 近年来,量化交易在金融领域应用的越来越广发,回测系统的设计是量化交易中不可缺失的一部分,但同时也暴露出一些问题,例如商业软件成本高、自己搭建会测框架时间成本高,难度大、采用第三方回测框架难度大、回测到实盘交易的代码改动较大、量化策略保密性不高等等。
为了克服现有技术存在的上述不足,VNPY的VirtualApi仿真API的回测技术应运而生,它是模拟原生API来实现的。例如通过模拟原生交易API和行情API,例如通过模拟原生API的库方法的定义、头文件的定义等,使得回测和实盘交易代码,简单的将实盘代码替换为仿真API,对底层代码可不作改动或改动较少即可实现回测和参数优化。
以一个典型的Windows 平台下的 C++ CTP程序为例,VNPY CTP仿真回测.实盘回测C++流程图对比
标准CTP C++实盘程序化交易程序流程图
标准CTP C++实盘程序化交易程序流程图
标准CTP C++通过VNPY仿真回测程序流程图
标准CTP C++通过VNPY仿真回测程序流程图

我们介绍如何使用VNPY CTP仿真柜台实现TIKC级回测.

先从这里下载VNPY CTP仿真柜台压缩包,点击红色的按钮“免费下载”进行下载。
http://www.vnpy.cn/product_apiforctp.html

v35.png
下载后解压
65028794-050c-4495-b936-c16b76392f3f-图片.png

进入一级目录

188888c3-cef7-4814-b4cb-1231186a9db1-图片.png

其中
(一)目录“CTP6.3.15 Demo&回测替换配置”
是CTP C++ Demo实盘案例和VNPY仿真柜台配置好的回测案例。
目前VNPY CTP仿真柜台是基于Windows的,DEMO是基于微软的宇宙第一的IDE Visual Studio开发的,可以兼容Visual Studio2015/2017/2019进行开发和编译。

请使用Visual Studio2015、Visual Studio2017、Visual Studio2019及以后的版本打开Demo里的MyAutoTrader.sln,
可以C++ Demo为基础进行二次开发

当然VirutalApi也支持多种编程语言,支持所有基于CTP的开源框架和自编程序,
请根据框架和自编程序特点替换DLL和lib文件重新编译。

Bin目录是编译好的程序,可以直接运行调试
CTP Demo/Bin(已编译)/AutoTrader.exe 是原生CTP的Demo,已编译好的应用程序。
VnpyApi For CTP Demo/Bin(已编译)/AutoTrader.exe 是VirtualApi Demo已编译好的应用程序,运行直接进行回测。

VnpyApi理论支持任何直接调用原生CTP api的策略程序,支持任何采用CTP api的框架,
VN.PY,Quicklib,支持C++、python程序、JAVA、C# 等,可以说无所不兼容。并且实盘代码可以在不改动
一行代码前提下实现回测。
http://www.vnpy.cn

VnpyApi申请了国家发明专利

VnpyApi支持期货CTP API接口,免费提供给广大的期货CTP程序开发爱好者。

CTP API是上海期货交易所的API,支持所有期货公司期货实盘账户和SIMNOW CTP模拟账户
模拟账户注册网址
http://www.simnow.com.cn

[关于VnpyApi]
VnpyApi是一种简单易用的回测方式,这种方式可以在不修改一行代码的情况下进行回测,即回测代码即实盘代码,该方案通过模拟原始API的方式进行回测,回测速度极快,并申请了国家专利。

提供的Demo是基于C++的,但支持各种编程语言的CTP框架。请结合自己的CTP的程序进行替换.dll文件(.lib,.h文件)实现回测。

下载地址 https://visualstudio.microsoft.com/zh-hans/
需要安装Visual Studio的C++模块,Visual Studiio安装完成后,打开项目文件.sln文件,
2d4c67a0-742d-4c85-bdb5-1326d4805505-图片.png

双击MyAutoTrade.sln文件打开项目
圈出的红色部分改为自己实盘账户或SIMNOW模拟账户
3015cbcb-3db1-4d32-b687-743150477714-图片.png

在项目上右键“重新生成”即可编译为exe程序
7fcdfeda-b21d-46c2-a334-c639e8ae0956-图片.png

编译生成exe应用程序的路径如图:
9ab91351-c1aa-49ac-be46-688d74eb0cde-图片.png
我们进入到上图的目录下:
7510f816-89c4-4cf8-8de4-edcfd9e8d52b-图片.png
其中:
AutoTrade.exe就是刚刚编译生成的应用程序文件;
AutoTrader.iobj 、AutoTrader.ipdb、AutoTrader.pdb是临时文件,可删除;
thostmduserapi_se.dll 是原生CTP库的行情库,用于订阅合约行情的;
thosttraderapi_se.dll 是原生CTP库的交易库,用于调用下单。

双击AutoTrade.exe 即可运行策略,这个Demo是一个最简单的CTP策略:连续3比TICK上涨即开多,连续3比TICK下跌反手开空。

90decd76-e062-4b01-b239-47ad9bade197-图片.png

CTP每天在交易日15点以后半小时到1小时关闭服务器连接,所以需要在代码条件中自动重连代码,约在夜盘的20: 30以后自动重连,以及早上8: 30以后重连。如果再实现自动换主力合约的话,就可以做到365X24小时不 间断运行,而且不需支付软件使用费用,CTP接口是完全免费的。

下面介绍如何将这个实盘策略接入VNPY CTP仿真柜台进行回测

我们知道CTP的原生API为下图部分
693fd42d-65f9-4eb5-b61d-ed41abe20cfb-图片.png

VNPY仿真柜台的API如下图
9df5ecf3-03d1-401a-ab9f-e969bb105036-图片.png

其中.lib文件和.h文件是编译中使用的,.dll文件是编译好后倍AutoTrade.exe调用的,我们要实现实盘转回测只要将.dll文件替换即可。
如下图,其中圈红色部门的文件为替换文件,蓝色圈出的文件为VNPY仿真柜台API特有文件,拷贝到该目录下即可。

(1)其中setting.ini 为手续费和滑点设置文件;
(2)list.csv为数据文件路径设置文件;
(3)Graph.exe为资金曲线分时图绘制程序,在运行AutoTrade.exe时会自动打开;
也可以待回测完成,打开Graph.exe,再将资金曲线数据文件qy.csv拖入Graph.exe窗口,即可绘制资金曲线分时图;
(4)price.exe是回测部门行情绘图文件,当回测完成会生成md.py,将该文件拖进price.exe即可绘制多日连续分时图;

277b86c0-b27a-455d-a601-bd9c0cd1eb30-图片.png

其中list.csv打开如图所示
特别注意:
(1)list.csv的数据文件,必须是同一个合约;
(2)list.csv数据文件里的合约代码,必须和订阅的合约要一致;
比如图中是./Data/20180627/rb1810.csv
就必须在C++代码订阅的是rb1810这个合约,目前Virtualapi不支持订阅多合约和套利合约,多合约和套利回测会在未来升级版本中支持。
e7a65f5e-89f2-4085-a6b2-e4816a394911-图片.png

VritualApi For CTP目录和CTP API目录,这2个目录下的DEMO,代码完全一样,仅仅是替换了thostmduserapi.lib、thostmduserapi.dll、thosttraderapi.lib、thosttraderapi.dll 这4个文件重新编译,
并将编译好的exe程序目录放入Graph.exe、price.exe、list.csv这3个文件,运行AutoTrade.exe即可实现本地TICK级回测。
list.csv保存的是依次读取的tick数据文件的路径。

通过直接替换CTP的api,同时将list.csv、Graph.exe、price.exe放到程序编译的目录下面。
直接运行,直接进行回测。
默认资金为50万。
生成临时文件qy.csv保存资金曲线数据
生成临时文件md.csv保存回测期间的分时数据
clean.bat 运行清理 qy.csv和md.csv 文件。

数据从哪里获取?
(1)利用VNPY官网提供的CTP TICK数据实时采集工具;
VNPY行情采集工具
http://www.vnpy.cn/product_collectctp.html
(2)从网盘下载
VNPY TICK数据下载
http://www.vnpy.cn/product_history.html

需要下载数据文件,并修改list.csv目录路径。
其中数据格式为Dataupdate.exe规定的CSV字段顺序

在编译好的目录下,只需要将文件替换为接口实现回测。

需要注意的问题:
1.订阅合约和指定的数据文件合约必须一致
2.一次只能回测一个合约,所以暂时不支持套利(2个合约)
3.行情回调函数里进行策略计算,不要在另一个线程进行计算,否则会导致较大结算误差。
原因是因为TICK更新太快,触发交易信号的价格和结算价格相差过大。
4.如果回测无数据,请仔细检查list.csv 制定数据文件的路径是否正确;
5.暂时不支持setting.ini 资金的修改,默认为50万 (500000);

(二)目录“VnpyApi For CTP6.3.15库文件”
是与CTP原生API对应的VNPY CTP仿真柜台API文件。

http://www.kaihucn.cn​

开户6项权益
http://www.mdapi.cn

服务器免费托管
http://www.tmtbp.cn