期货CTP接口程序化交易和量化交易,看这篇文章就够了
-
期货CTP接口程序化交易和量化交易,看这篇文章就够了

量化私募基金资深从业者上期ctp接口是普通镜头,virtualapi for ctp是广角镜头(底层仿真回测,可替换ctp原生库实现回测),而vnpy属于后期ps处理。无论是普通镜头还是广交镜头拍摄的照片,都可以后期ps或不ps
VirtualApi 期货CTP TICK级本地量化交易仿真回测首页vietualapi支持所有ctp框架和自编ctp程序在不改变实盘代码前提下实现本机tick级回测
最关键的是,对所有人是永久免费的
简介
VirtualApi目前支持上海期货交易所的CTP回测
实盘期货(支持CTP):http://www.kaihucn.cn
Simnow 上期CTP接口官方网站和模拟账户注册:http://www.simnow.com.cnVirtualApi诞生的技术背景
现在的量化回测软件和方法有三类,一类是通过文华、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实盘程序流程图
VirtualApi回测程序流程图(C++)
VirtualApi For 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版本含以下文件:
其中ThostFtdcMdApi.h、ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h、ThostFtdcUserApiStruct.h 是头文件,thostmduserapi.dll、thosttraderapi.dll、thostmduserapi.lib、thosttraderapi.dll。
VirtualApi库文件
VirtualApi For 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显示的资金曲线进行对照。