欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

期货程序化交易接口CTP回测框架的选择

程序员文章站 2022-07-13 15:39:17
...

 

我是林,我是一名来自量化基金的CTP开发者,我做CTP已经有5个年头了。

我在这里会分享对CTP开发的一些见解,希望对大家有用。

通常我们从上期网址下载CTP接口的API后,从网上找到1个CTP DEMO就开始搭建第一个CTP程序。

其实CTP的例子很多,但大多只涉及了交易部分的简单例子,对有基础的初学者来说,可以很快理解了如何调用CTP接口,并从CTP回调函数获取数据的方法。

5年前我也是这样开始了CTP开发之路,CTP对我来说已经是生活的一部分。

CTP开发过程中最麻烦的事就是回测问题, 回测涉及到数据的采集。数据清洗,数据回测框架,实盘程序接入回测框架等等步骤。

很多CTP开发者没有自己开发回测框架,就利用上期的SIMNOW (http://www.simnow.com.cn)进行测试,但其实Simnow应该只作为功能测试而不是策略回测。

在大名鼎鼎的CTP体系下,最著名的是Virtualapi (http://www.virtualapi.cn )、VNPY、优矿、聚宽等。

其中Virtualapi久负盛名,可以说是CTP最优秀的回测方案,而且申请了国家发明专利,Virtualapi可用于本地TICK级别回测。

期货程序化交易接口CTP回测框架的选择

VNPY 以大而全著称,但是回测模块就显的差强人意了。好在Virtualapi可以完美支持VNPY,Virutalapi不仅支持VNPY,还支持所有CTP自编CTP程序和各种CTP框架进行回测,因为Virtualapi本身就是完全仿真了CTP嘛。

期货程序化交易接口CTP回测框架的选择

优矿和聚矿据说更适合在线回测,A股的多因子回测, 做期货的一般都用Virtualapi for CTP在本机进行TICK级回测。

期货程序化交易接口CTP回测框架的选择

 

策略回测我们应该使用Virtualapi (http://www.virtualapi.cn )这样的TICK级本地仿真API,有了它我们做ctp的工作就简单多了。

 

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

期货程序化交易接口CTP回测框架的选择

 

VirtualApi回测程序流程图(C++)
VirtualApi For CTP回测程序流程图

期货程序化交易接口CTP回测框架的选择

CTP库文件

CTP Api是C++库,理论上可以用于包括C++、Python、Java、C#、等在内的多种编程语言的调用。

VirtualApi For CTP一样是采用C++开发,目前只支持Windows操作系统,运行采用VirtualApi Api的计算机和TradeAgent.exe的计算机采用要求Windows7、Windows2008及以上系统,对于Windwo7和Windows Server2008这些较为陈旧的Windows系统安装微软运行时库redist2015补丁。

以最常用的CTP无中继代理模式为例(于2019.6.14实施的穿透式和老的非穿透式),CTP API Windows版本含以下文件:

 

期货程序化交易接口CTP回测框架的选择

其中ThostFtdcMdApi.h、ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h、ThostFtdcUserApiStruct.h 是头文件,thostmduserapi.dll、thosttraderapi.dll、thostmduserapi.lib、thosttraderapi.dll。

VirtualApi库文件

VirtualApi For CTP库文件

包含以下文件:

期货程序化交易接口CTP回测框架的选择

 

可以看到VirtualApi 库在原CTP库基础上增加了list.csv,Price.exe,Graph.exe这3个文件,而对于thostmduserapi.dll、thosttraderapi.dll、thostmduserapi.lib、thosttraderapi.dll这4个文件是VirtualApi提供模拟CTP的实现,而ThostFtdcMdApi.h、ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h、ThostFtdcUserApiStruct.h 这4个头文件则保持和CTP对应版本一模一样。

list.csv作用:该程序放到回测程序的目录下,用于指定csv格式的数据文件的存放路径,并非自己存放Tick数据,在回测时VirtualApi会从上至下依次读取list.csv种这些文件的Tick数据,并触发CTP方法里的深度行情通知回调函数 virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData),使得和CTP的OnRtnDepthMarketData回调方法一致。 值得注意的是,list.csv指定的数据文件库的字段顺序目前不能更改,将来可能提供字段顺序的自定义设置功能。

localtime (本机写入TICK的时间),
InstrumentID (合约名),
TradingDay (交易日),
ActionDay (业务日期),
UpdateTime (时间),
UpdateMillisec(时间毫秒),
LastPrice (最新价),
Volume(成交量) ,
HighestPrice (最高价),
LowestPrice(最低价) ,
OpenPrice(开盘价) ,
ClosePrice(收盘价),
AveragePrice(均价),
AskPrice1(申卖价一),
AskVolume1(申卖量一),
BidPrice1(申买价一),
BidVolume1(申买量一),
UpperLimitPrice(涨停板价),
LowerLimitPrice(跌停板价),
OpenInterest(持仓量),
Turnover(成交金额),
PreClosePrice (昨收盘),
PreOpenInterest (昨持仓),
PreSettlementPrice (上次结算价),

Graph.exe作用:该程序放到回测程序的目录下。在回测时,回测程序通过API会自动打开Graph.exe,在回测时自动绘制资金曲线分时图;回测完成后,也可以将回测数据文件拖入Graph.exe窗口打开资金曲线分时图;

Price.exe作用:该程序放到回测程序的目录下。在回测的过程中或回测技术后,可以将回测数据文件拖入price.exe窗口,绘制回测时间段内的行情多日分时图,可以和Graph.exe显示的资金曲线进行对照。

C++ Demo

C++ Demo采用Visual Studio2015、Visual Studio2017、Visual Studio2019 编译,运行test.sln打开Demo项目。

微软最新版本的Visual Studio下载: https://visualstudio.microsoft.com/zh-hans/downloads/

 其他量化资源推荐

[《Quicklib程序化交易框架www.quicklib.cn》](QuickLib python量化交易程序化交易开源框架-首页)

[量化爱好者福利贴,2012~2015年3年期货全品种TICK数据共享](量化爱好者福利贴,2012~2015年3年期货全品种TICK数据共享)

[《期货跟单软件视频教学4集》](量化林:酷操盘手期货跟单软件教学视频)

[《mdshare财经数据接口包》](mdshare和quicklib量化交易行情数据共享中心)

[《某python量化交易框架性能评测》](VNPY 量化交易上的性能对比分析)

[《QuicklibTrade A股行情接口,Level2接口》](QuicklibTrade - A股程序化交易插件 | python量化交易插件)

[python量化交易](www.lhjhie.net)

[《优秀量化资源导航》](Python量化交易,TICK数据下载,A股交易接口,期货程序化交易,量化交易,CTP回测-量化交易首页)

[《TradeApi A股程序化交易接口》](产品下载_TradeApi官方最新产品免费试用下载)

[《酷操盘手期货跟单软件》](酷操盘手期货跟单软件、期货资管软件、CTP回测系统)