我们都知道,从趋势上看焦煤和焦炭从走势上来看区是相同,他们是都是黑色系大宗商品,产业链上是上下游关系。
从上图看,彩色的是焦煤主连灰色的是焦炭,他俩趋势在某些时间段之内确实一样。
但是我们放大,也可以清楚的看到他们有强弱对比。
一个强一个弱但趋势有相同,那么他们就有一个价差关系。
因此用这种价差关系在有趋势的中可以多强空弱,此时强者更强,强的肯定弱的涨得快,此时我们是希望他俩劈叉越大越好,这样我们可在比较安全的情况下获得更多的超额收益。
但是在大多数情况下没有趋势行情,最近的行情就是比较典型的例子。价格在一直在一个区间里波动。
这个时候也有办法套利,就是配对套利。
这个理论就是同趋势的两个资产,他们的价差是趋向于稳定的。如果其中一个涨高了,或者跌的太厉害了,此时我们可以做空涨高了的,买多跌大的。
那么问题来了
第一,怎么用量化的方法来描述两个资产有相关性
第二,用什么方法来描述,他俩的价差是平稳的。这步相当重要,它不仅帮我们求出价差,还帮我们判断现阶段是否是震荡趋势。如果大行情来了,价差是不可能平稳的。
第三,价差多大时我们开仓。
解决此
对于第一个问题,其实也涉及到选品种的问题,我就把所有主力合约提出来,利用相关系数来得出相关性较大的。国内市场无非就 螺纹ft.铁矿,黄金ft.白银,豆粕ft.大豆,焦煤ft.焦炭等等
对二个问题,也就是这个策略的核心。怎么描述他俩价差是否平稳。我用了协整的办法。
怎么判断协整呢。有两种,一种叫Engle-Granger,这个用来描述两个资产的协整性。另一种叫Johnason,这个是用来描述多元的协整性。对于这个策略我用EG的就足够了,毕竟只有两个品种。
具体的做法就是将焦煤和焦炭的价格变动设为{Yt}和{Xt}两个时间序列,然后用最小二乘法OLS来估计线性模型:
Yt=β0+β1*Xt +εt
检测εt我用statsmodels.tsa.stattools 里的coint方法。
在解决第三个问题时,我把检测的εt全部打出来,在用K线图去一一对比。发现在20左右比较合适,于是我把这个阙值δ设成20
这么一来三个问题全部解决了
关于下单,我依照下面这个下单流程
其中这个周期t我取200天的日线级别close进行协整判别,又取75个周期去训练模型。
前面讲了开仓的阙值δ取20。
而这个NPV我取得是10000
用最近半年的数据跑下来的结果是这样
而去年的是这样
大体上成功的避开了很多大行情。说明这个策略有可以讨论的地方
但感觉回撤有点大,是否是δ取的不对?还是止损的NPV是否不太科学?
大家怎么看
相对75%的年化收益,24%的回撤挺好啦。夏普比率也有2以上
看了代码感觉有几个地方可以商榷,一是计算和下单决策的时机放在onbar,策略是日线级别的,回测每天一次是在收盘没问题,但实跑onbar出现时机在早上,和回测完全不是一回事,那么这个代码是没办法直接实跑的。
二是交易价格用对手价,回测时其实是收盘价,那这个价格和实际能成交的价格之间会有多大差异,对收益率的影响有多大,不知道作者有没有考虑
三、也是在交易环节,下单后没有追踪成交的情况,如果不能成交怎么办呢,手工介入?
我试了下,从14年开始运行就会报错,lz能看一下么?