量化交易入门书籍-Quantitative Trading how to Build Your Own Algorithmic Trading Business 04


(bxyzz) #1

本篇拖了好几天,临近年关了,工作上的事情太多

我这里随便挑了两个合约,工商银行和建设银行,因为都是国有银行,两个交易序列之间具有较高的相关性,我们统计套利的基础原理是基于价差的回归。我们使用tushare库来直接获取这两个银行2015至今的日收盘价数据,这样可以让整个程序直接在任何一台电脑上奔跑,不用依赖基础数据,建议还是把代码都自己敲一遍。

如果没有太多编程基础的童鞋,可以先看一些PYTHON入门的东西,然后就可以轻松的跟完整本书,我始终认为编程只是技能,够用就行了,重要的交易策略思维,因此整个专栏都不会去死磕技术,如果只是想学习“编程技术”的童靴,可以关注相关技术类专栏,深信都会比我牛逼得多。

我使用的编程工具为:anaconda + spyder ,这里力推anaconda,因为已经集成了科学计算所要用到的几乎所有库。官网地址为:https://www.anaconda.com/download/ 下载安装即可。

首先我们引入tushare库,data1储存工商银行的日数据,data2储存建设银行的日数据,接着我们把两个数据的长度打印出来,顺便保存数据看看数据结构,发现如下图:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘1144’%20height='229’>)

两个数据长度相同,但是我试了其他股票有不相同的情况,所以在使用数据时我们还是按照日期来取数,然后发现比较累人的是,dataframe并没有date键值,我们存储数据再重新读取一次。

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘713’%20height='476’>)

这里我们采用一种较为快速的方法,先求出修正后的价差列,这种方法可以在初期做策略回测时使用,因为数据处理较快,也较为方便,后期还是需要按照实盘的程序进行依次识别处理。

我们在开始策略前先直观感受一下两者的走势及价差序列:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘375’%20height='256’>)

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘387’%20height='256’>)

现在我们求出一个spead序列和交易时间trade_day序列:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘552’%20height='411’>)

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘554’%20height='380’>)

这里主要实现了一个交易日期匹配,并选择相应的交易数据,求出交易天trade_day和价差序列spread

最后我们求出了两个交易标的之间的相关性Cor = 0.9647,两者之间经验证具有强相关性。

下面是一个回测最简单结构,首先是参数定义,然后是按照交易日循环,接着是在每个交易日去运算并记录结果:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘554’%20height='196’>)

这边我们看看output的输出:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘439’%20height='237’>)

我们发现有很多情况第一天刚记为-1,后一天又记为1,这样的表现是因为股票价格剧烈变化,我们一般回测完后都需要去看看策略什么时候进场、出场、是否符合我们开始的设想,以及策略中有没有什么较为极端的情形发生,总之,策略复盘非常重要。

本书这个也是最简单的演示了,我们设计了两个参数 n 和 m ,并且赋予了初值,参数优化指的就是修改n,m来找到最优参数让策略盈利更好,output这边只记录了两个数据,一个是当价差过高或者过低时记录,并且记录此时的交易日。后面就可以用这两个数据计算持仓盈亏及交易,用程序化的思维直接的理解什么是回测,大概的思路是什么。