1、跨品种配对交易简介

配对交易的核心思想就是发觉一对价格走势几乎相同的资产,就算在某个时点出现两者价格走势的背离,这种背离也会在一定的时间内修复,价格重回同向运动。因此,一旦发觉价格走势出现背离,就可以做空当前价格相对偏高的资产,做多当前价格相对偏低的资产;当这种背离出现修复之后,同时平掉这两个仓位,从而赚取由背离回归同向运动的价差。配对交易作为一种统计套利策略在国外被应用于各个领域,包括期货市场、股票市场甚至是指数交易。


配对交易的实现可以大致分为两步:第一步:在事先确定的资产池中通过一定的方法检验两两之间的协整关系,以此确定可以配对交易的组合。第二步:确定开仓的阈值,当价差超过阈值时开仓,当价差回复到0附近时平仓。本文将略过第一步的内容,直接选用焦炭和焦煤来进行配对交易,着重阐释策略代码的实现过程。

注意:开仓标准的选择存在权衡。过高的阈值会使开仓次数减少,从而错过可能的获利机会;而过小的阈值导致价差在偏离不足够大的情况下开仓,交易盈利可能性不高。另外策略适合相对震荡的市场。由于配对交易从价差的偏离中获利,因此在震荡较大的走势中获利可能性较高。

 

2、策略的具体实现

       1、对两种期货合约的价格序列xy进行线性回归运算,使两者的价格关系形如y=bx+e。记录回归参数be

       2、利用回归参数be计算两种期货实际值与理论值的价差序列diff=y-(bx+e),再计算diff的标准差作为开仓的阈值单位

       3、在实际交易中,当价差diff超过阈值时开仓,当价差回复到0附近时平仓。

 

3、代码实现以下是策略的核心函数

3.1、核心函数的实现

先是计算回归系数的函数,其中用到方法的详细解释可以参考statsmodels.api模块的说明


       计算阈值单位的函数,本策略选择的阈值单位为线性回归的标准差


3.2、主策略的实现

       设定要引用的模块


初始的OnStart事件


       OnMarketQuotationInitial事件中中订阅需要的行情数据,本策略选择了螺纹与焦炭的主力合约,相应的数据为日线级数据


       Onbar事件中获取所需数据


       注意本策略潜在的问题是期货主力换约而导致手中合约无法及时平仓,这就需要我们手动去判断平仓


在处理完之前合约变动可能导致的问题之后,我们转入对当前合约的处理。先计算两合约的回归参数与标准差,其中参数Day_index参数需要自行设定,各位需要适当选择训练长度以防止过拟合与欠拟合的情况发生


       计算两种期货的实际价格差与理论值的差值diff


       相关交易代码,下图中的代码是一个方向(买开焦炭,卖开螺纹)开仓的交易代码,开仓阈值设为一倍的标准差,其中记录了每个合约的交易量以便之后的平仓。另一个方向的交易代码与此基本一致


       符合条件则平仓(平仓方向与上图中一致)


       代码编写完毕后就可以通过回测来检验策略效果了