近期VNPY正在录制一批量化交易课程的内容,欢迎大家观看和指正。
第1课
https://v.youku.com/v_show/id_XNTA2NzQzMjU4OA==.html
第2课
https://v.youku.com/v_show/id_XNTA2NzQ0NzQ0NA==.html
第3课
https://v.youku.com/v_show/id_XNTA2NzQ1MjU4MA==.html
第4课
https://v.youku.com/v_show/id_XNTA2NzQ2MDIxNg==.html
第5课
https://v.youku.com/v_show/id_XNTA2NzQ2MzI3Mg==.html
第6课
https://v.youku.com/v_show/id_XNTA2NzQ2NzUwNA==.html
第7课
https://v.youku.com/v_show/id_XNTA2NzQ3MzkyMA==.html
第8课
第9课
第10课
第11课
第12课
第13课
第14课
第15课
第16课
本章《期货CTP接口概述》是《期货CTP接口开发&量化交易快速入门课程》的第一章内容。
我们以上海期货信息技术有限公司CTP接口为例,
讲解实现国内期货市场程序化交易的整个流程。
因为CTP原生接口就是C++,所以C++用的是最多的,
同时也因为最近几年拍僧比较热门,也会有不少人选用拍僧框架,本次课程是以C++为讲解内容。
1.1b
后续章节内容还包括:CTP接口开发、编程范例、回测、高频交易、算法交易、职业发展等内容。
我们先从本章CTP接口的概述说起。
CTP接口是上海期货交易所所属子公司上海期货信息技术有限公司开发的一套期货程序化交易接口。。
可支持中国证监会管辖下五家交易所上海期货交易所、大连期货交易所、郑州期货交易所、中国金融期货交易所、上海国际能源交易中心。
1.1c
说到CTP接口,这套接口其实是中国金融行业一套标准API架构封装标准 ,CTP接口 支持证监会管辖下的五大期货交易所,支持证监会管辖下的149家期货公司。
CTP接口支持商品期货、股指期货、商品期权、股指期权合约的订阅和程序化交易。
很多券商和软件服务商都采用CTP方式封装接口。
比如像华宝证券的LTS Level兔接口的技术人员也是来自于上期CTP开发团队,需要LTS接口的,对深圳市场股票可以还原全档盘口。
LTS的接入要求是不少于3000万的基金产品户,必须具备私募基金牌照,个人是被拒绝接入的,达到接入条件并需要LTS接口的基金公司,可根据 官网上公示的华宝证券联系方式对接。
还有券商开发的接口不仅采用CTP架构,连命名方式也是以CTP方式命名的。
所以说,学会了CTP接口的开发,就具备了国内很多券商接口的开发能力。
1.2
1.2a
CTP接口包含了行情接口和交易接口两部分。
其中实时行情接口的作用是:提供实时行情,包括商品期货、股指期货、商品期权、股指期权 这四类合约行情的自由订阅。
但需要注意的是交易所是不提供历史数据的,
历史数据则需要自己自己这个通过接收实时行情后进行存储和维护。
1.2b
当然有人会问,那些商业软件都有历史数据啊,
那是因为软件服务商会自己维护一套历史数据给自己的客户调用。
关于维护历史数据内容,我们会再后面的章节进行讲解。
1.2c
交易接口的作用是:登录交易账户可做各种交易指令的操作,
比如查询投资者结算结果,查询资金账户、查询持仓明细,查询交易所保证金率,查询报单手续费,成交通知,报单通知等。
交易接口的实盘接入还需要实盘开户,通过技术开发测试,证明CTP开发能力后,才可获得实盘账户的穿透式监管授权码。
1.2d
此外, CTP接口是基于C++的原生api,而对JAVA、Python、C#等语言可封装成CTP框架,
但这些编程语言的框架的本质还是通过调用原生C++ api。
这些框架都不是由上期提供的,而是第三方封装的。
1.2e
图中是CTP接口的架构图。
从图中看有点复杂, 对我们普通的交易爱好者而言, 一般采用的是CTP的直连模式, 而不是中继模式。
所以不管是在后面章节介绍的申请穿透式授权码部分内容,还是开发程序化部分内容都按直连模式来处理。
所谓直连模式,就是直接连接期货公司的CTP服务器。对软件商而言可以选择直连模式也可以选择中继模式。
2.1
我们再来谈一下:通过开发CTP接口实现程序化交易 ,需要包含以下部分工作:
步骤1 CTP编程功能调试。
步骤2 历史数据采集存储、清洗。
步骤3 策略研发、回测。
步骤4 量化策略实盘运行。
步骤5 维护策略启动、关闭、运行、参数更新、节假日平仓。
步骤6 采用减小滑点的措施。
步骤7 策略组合、业绩归因。
2.2
虽然存在步骤编号,但同时需要注意,以上步骤并不是严格按顺序完成的,而是一个循序渐进、交叉改进的过程。
下面我们来依次详细解释一下各个步骤吧。
步骤1, CTP编程功能调试。 第一步就是选择合适的编程语言和CTP框架,来实现基本的功能搭建。
2.3
功能搭建过程中,可采用上期的仿真账户进行功能测试,网址是www.simnow.com.cn,需要注意的是, 只能在工作日白天才可访问。
注册账户后,可使用CTP接口登录该仿真账户进行模拟交易,仿真账户和实盘交易交易时间一致。
SIMNOW提供各种交易软件,比如快期等等,方便登录模拟账户对程序化交易产生的持仓和交易记录结果进行查看。
上期的官网也和SIMNOW是同样的情况,只能在工作日白天才可访问
2.4
比如说,如何连接CTP服务器,如何订阅行情,如何通过穿透式认证,如何登陆交易账户,如何报单,如何查询交易账户可用资金,
如何查询持仓,如何区分今仓昨仓,如何做资金管理,如何调用策略模块,如何解决多策略的各自仓位的区分,如何存储历史数据,
这些都属于功能开发调试部分的内容。
2.5
步骤2,历史数据采集存储和清洗
需要在量化回测之前准备好历史数据, 工作内容包括数据采集存储、清洗。
这里推荐一款免费的CTP TICK数据采集软件,可以从 下载,这款软件提供了CTP TICK数据的采集功能,可以自行部署采集服务,可以将全市场的TICK数据采集至本地硬盘。同时网站还提供了过去几年的历史数据通过网盘下载。
数据存储采用格式是后缀为.csv文本格式。
2.6
为什么不采用数据库存储TICK数据呢?
这是由于普通的关系型数据库以及内存数据库都不是为存储时间序列数据设计的,像行情这种数据一般是一次性写入,不会再插入新的数据,所以需要比数据库更紧凑的保存在硬盘上。而一般关系型数据库和内存数据库为了方便插入记录,存储数据内部有大量冗余空间,而且不连续。那么读取的IO性能不高,存储空间占用很大。
2.7
根据测试,文本方式存储占用存储空间只有关系型数据库的1/5,如果设置为Windows系统下NTFS文件夹压缩属性的话,文本方式存储CTP行情数据占用存储空间只有关系型数据库的1/25左右。
在单机环境下测试,从文本文件读取行情速度比从关系型数据库读取高出2个数量级。
用文件存储是一个更好的选择,事实上很多知名的股票软件公司都采用文件存储行情数据的。
2.8
采用文本格式存储行情数据,不仅实现了更小的磁盘空间占用, 还降低了读写数据时IOPS的占用,而且提高了读取性能 ,也同时降低了因为磁盘故障导致数据错误的可能。
在金融量化交易行业,除了采用csv这种文本文件存储行情数据,还常采用HDF5格式存储行情数据。
2.9
步骤3 策略研发、量化回测。
量化回测是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。
2.10a
步骤4 量化策略实盘运行。
2.10b
步骤5 维护策略启动、关闭、运行、参数更新、节假日平仓。
交易系统应用的有效性受到后期维护工作质量的影响。朋友们都知道,市场是一直都在发生变化的,并且这种变化存在着很大的不稳定性。但是程序化交易系统是着眼于当下的市场行情设立的交易准则。所以当市场行情发生波动较大的状况的时候就会造成系统失效。所以需要维护人员在判断策略失效时停用策略或参数更新的工作,遇到节假日还需要做人工清盘的工作。
2.11
步骤6 采用减小滑点的措施。
具体到实际的交易中如何减小程序化交易滑点的影响?主要有3类优化方向:增大交易周期、算法交易、即日内择时、降低网络延迟。
首先,各位可以加大程序化交易的级别。如果一个大级别的模型是平均盈利70点,平均亏损40点,而小级别是平均盈利5点,平均亏损2点,在实际交易中前者一定比后者有效的多,因为滑点的尺度,和平均盈亏点数,不在一个数量级。
2.12
此外,还要想尽一切办法,尽可能降低网络延时。 市场行情的波动我们是无法左右的,但是我们能把控网络延迟时间。交易者一定要清楚,在电脑上看到的行情,是重播而不是直播,而程序根据这一行情下发的指令,中间也需要传递的时间,才能生效。所以行情波动速度大以及网络延迟严重,会加大滑点的影响。而这一影响,其实对小周期交易级别甚至会产生颠覆性的结果。
2.13
最后一个减小程序化交易滑点影响的有效措施是,避免在行情波动大的时间点做单,即日内择时。此外在节假日 ,还要回避特定事件。在重大事件发布前后,最好不要做单。很多交易者在数据公布前15分钟全部清仓。 各位交易者惹不起可以躲得起, 只要不持仓,那么行情波动再大也是毫无影响的。
2.14
步骤7 策略组合和业绩归因
在收益相同的情况下,回撤越小,则盈利能力越强,剩下的只是杠杆的不同。多策略组合通过降低回测,可以大幅提升盈利能力。
即使风格相似、收益表现相似的组合,其收益来源也可能不尽相同,通过业绩归因,能够更加清楚组合的收益究竟来源于什么,进而知道这种获取超额收益的能力是否能够持续,也能够明白组合发生剧烈波动的原因,从而改进策略。
5.8
SimNow仿真账户和实盘账户成交机制的区别。
1. 成交机制不同。
模拟账户采用对手价成交,实盘在盘中撮合成交。
2.模拟行情比实盘行情慢几十秒,因采用模拟行情同时采用模拟交易,所以对信号和盈亏不会产生实质影响。
5.9
3.资金容量对滑点的影响。
模拟账户成交不需要考虑资金容量导致的滑点,实盘账户在交易时因为会影响盘口,可能会导致滑点产生。
4.模拟行情除了和实盘一致的行情服务以外,还提供了24小时服务器进行测试,但不提供结算,适合用作CTP开发时的功能测试。