量化研究 | 策略在指数与主连复权的差异化分析

 致力于分享量化策略,培训视频,Python,程序化交易等相关内容

作者简介

吕洋洋 

某大型资管公司在职量化策略研究员,熟悉数据清洗工作,擅于运用宏观因子、行业因子等进行对期货品种价格影响建模与相关性分析,理解机器学习多元回归法,SVM,XGboost,金融时间序列等底层算法逻辑,部分算法可自定义函数封装。掌握各种机器学习包与数据计算分析包的运用。包括不限于:Alphalens,pandans,爬虫技术,sklearn,statsmodels 等。

『正文』

ˇ

引言

众所周知,在我们做期货程序化过程中,大部分个人或者中小机构基本上都是采用的第三方商业化软件进行交易,国内用的最为广泛的就是TB开拓者这一平台,抛开软件稳定性个性化等问题来说,从策略回测角度来看,大家最为困惑和关心的问题就是期货指数合约和主连复权合约的误差问题。今天,笔者本人就带着实盘的初衷、科学的计算、细节的描述来给大家分享一下关于指数合约和主连复权的差异化分析。

逻辑步骤

废话不多说,我们直接上计算思考的逻辑。

步骤一:刻画指数和主连复权的相关性,协整性。

目地:通过初级统计学(高阶的我不会,哈哈~~)刻画,定量的方法,定性的观察,两个XY时间序列数据的趋同性或者说变动是否紧密相关,当然误差肯定是有的,但是只要整体是趋同的,就还好,最起码如果趋同都不趋同,那肯定就不能用指数合约的了。因为任何一种计算评估方法都是有误差的,就好比回归也是有“epsilon(希腊字母表第五个字母)”。所以就看这个误差是否可以接受的程度。

步骤二:我们实际用一个相同的策略(代码完全一样,参数也一样),加载到同一个周期的数据K线(相同的周期、相同的长度),去回测看指数和主连复权的绩效差别。

目的:通过实际策略在不同的XY数据进行的回测,才是最终我们想看到的结果差。

步骤三:针对回测出来的净值曲线数据进行协整性和相关性分析。

目的:这一步主要是我个人受限于数据问题,无法获取到主连复权数据到本地进行协整性分析。因此,只能通过对XY两个时间序列数据,回测后的权益曲线进行协整和相关分析。也就是说把第一步里面的协整放到了第三步。当然了,XY经过了同样的数学变换,那么他们的统计关系是不会变的。毕竟策略其实就是一个映射函数,将X也就是行情数据,通过策略f( ),转变为绩效曲线Y的一个过程。

数据准备

由于品种的差异性,以及各个板块流动性活跃问题,按照以下罗列进行逐个分析。

黑色的:螺纹、焦炭、热卷、铁矿石、猛硅、动力煤

有色:铜、铝、镍

化工:PTA、PP、MA 、RU、SC、EG、EB、LPG

农产品:苹果、鸡蛋、菜油、棕榈油、豆粕、玉米、白糖、棉花

基本上以上品种都是本人实盘在交易的品种,有的品种可能就1-2个策略,又得可能有6-8个策略,所以抱着“推到自己“的态度去探索这些问题。

由于这是开篇第一篇,可能还有很多更为科学、更为严谨的方法没有想到,所以在正式开始之前也希望各位给出各自的看法和意见。

指数和主连复权合约相关系数变动

我们采用的就是Pearson相关系数,数学公式如下图所示:

关于皮尔森的数学相关推导和性质我就不过多说了,说一些基本的,毕竟咱们这不是数学课。皮尔逊相关系数的变化范围为-1到1。系数的值为1意味着X和Y可以很好的由直线方程来描述,所有的数据点都很好的落在一条直线上,且Y随着X的增加而增加。反之亦然。

显然,当X和Y均落

和均值一侧,则(-)(-)的值均为正。也就是说他们各自的变量值同时趋向于大于或者小于各自的均值,则相关系数为正,反之相反一侧则为负。关于剩下的几何学解释我就不在此赘述了,有兴趣的大家自行百度。

图1:2016.1.1-2020.8.3,15分钟K线图

上图所示是指数(上)与主连复权(下)的相关系数可视化图,其中有两条横线分别是0.8、0.9,纵横2016-今天4年7个月的时间轴来看,大部分的相关系数都在0.9以上,下面我们来看看这些相关系数抖动的时间段是什么样的。(我们由近到远的定性的去看)

 图2:2019.11-2020.8.3,15分钟K线图

      

从最近半年多的相关系数可视化图和2个K线行情图,我们可以看到,大范围、差异较大的异常波动是在更换主力合约之前和更换日期附近发生的。其中的逻辑其实也很简单,因为临近换月升贴水和持仓量的变化,导致了有2个月的持仓量权重产生了相同,且升贴水越大,这个差异也就越大,相当于取了升贴水的平均值。届时指数和实际交易的主力合约就产生了波动性差异,这一点我们通过相关系数刻画的方法也可以印证这个逻辑点。但是我们要注意的是,相关性降低幅度和相关性降低时间,哪一个对我们更不利,当然了废话就是对我们都不利,但是我们不能奢求理想完美变为骨感现实。通过图形可视化可以明显看出,近半年多以来总共有15次下穿到0.8以下。

图3:相关系数<< span="">0.8标记图

10个月时间里出现15次,平均一个月1.5次。持续的时间我们也来看一下。如下图所示:

图4:2019.11-2019.12相关系数图

其中最大的两次分别为2019.11.15和2019.12.2两次,持续时间为8根K线(从下穿0.9到上穿0.9),一根K线15分钟,8根共2个小时。其中这两次是近半年多以来,最大持续时间最久的2次。

在这里我也把实际的代码发给大家:

Params

       //此处添加参数

       Numeric length(10);

Vars

       //此处添加变量

       Numeric corr;

Events

       OnBar(ArrayRefindexs)

       {

              corr = CoefficientR(Data0.close, Data1.Close, length);

              PlotNumeric("corr",corr);

              PlotNumeric("阈值2", 0.9, red);

              PlotNumeric("阈值",0.8, White);

       }

实际上“CoefficientR”这个函数就是我们刚开始提到的,皮尔森相关系数的计算方法,在TBQ里面我们是可以自动调用这个函数的,下面是对这个函数代码的分解。

图5:皮尔森相关系数函数源码

通过阅读源码我们可以看到,相关系数的函数封装是没有问题的。大家千万不要用TBQ里面自带的“Correlation”这个函数,这个函数是不对的,或者说不符合我们用的皮尔森相关系数的算法。

我们在回到图1中,历史上最大的一次是在2016.3.7,那一次是螺纹钢涨停了,第二天开盘继续涨停,但是实际肉眼观察指数和主连复权并没有特别大的不同,而且计算中我们发现出现了-2的场景出现,这个并不是计算的问题,是源码中加入了一个默认值,如下图所示:

图6:函数内容初始化

其余较大的相关性波动期就是在2018.11和2019.3两个时间点附近,这两个点基本上位于01→05,05→10合约的转换点之前。按照之前审视逻辑,最大周期为13根K线也就是3个小时时间。

纵观4年零7个月的时间内,大大小小的相关性波动有7次,并不是每一次主力合约更迭就会发生相关性降低的情况。

同一策略回测差异分析

下面我们来进行第二步:用同一个策略对指数和主连复权合约进行回测。让我们来看看具体的绩效指标和绩效曲线的区别什么样子。

  图7:TBQ指数回测绩效图

上图是A策略(只包含多头)在万1.5手续费滑点1跳的场景下,从2016.1.1-2020.8.3的回测绩效图。图中看到整体绩效还是可以的。下面我们来看一下主连的绩效图

图8:TBQ主连复权回测绩效图

我们通过图一眼就看出,指数和主连复权还是蛮大的,最起码曲线后半段的盈利就明显看出差别。先不要直接否定,我们做研究分析的目得不是看一眼线那么简单,还要具体看所有的绩效指标的差距到底是多大。     

图9:TBQ指数回测绩效

图10:TBQ主连复权回测绩效

主要绩效指标差异幅度如下表所示:

指数

主连复权

百分比幅度

净利润102157

57833

-43%

最大回撤值17729

21137

19%

夏普1.08

0.7

-35%

胜率44.28

41.44

-6.8%

平均利润508

260

-48%

交易次数201

222

10%

从部分绩效指标可以看到,收益型指标几乎少了一半儿,风险型指标增加了20%。总之就是整体削弱了。

从中我们来初窥什么?为什么要费劲搞这些?目得其实就是来验证,我们用指数做回测,用指数来映射实盘是否靠谱还是自欺欺人。

初步来看,从该数据中我们可以看到,我们用指数回测的绩效实际上要比实盘利润要削弱一半儿左右,风险要低估20%左右。平滑度也削弱接近40%左右,这些具体的直观感受从曲线图也可以看到。

下面我们为了验证客观性,我们按照上面所有的逻辑步骤程序,来进行空头的数据验证。我们这次就直接上结果,不在穿插任何解释图。

指数

主连复权

百分比幅度

净利润59526

-29171

-149%

最大回撤值23765

41385

74%

夏普0.59

-0.33

-155%

胜率38

30

-21%

平均利润607

-277

-145%

交易次数98

105

7%

从空头表中的结果我们可以看出,指数合约加载时,是盈利的,但是到了主连复权最后就是亏损的状态。

思考

1、是不是指数做策略的结果都是这样?答:并不是,因为这涉及策略问题,并不是所有空头策略在指数与主连复权有差一倍以上的差异,但是说明这种情况会出现。也就是说指数情况下这个策略都一般 就不要考虑了,因为在实际的主连复权肯定是亏损的。

2、那是不是我们就不要指数了,直接主连复权就完了,费那么多事儿干吗?答:的确是可以这么做,就算没有分析这些,从实盘和回测接近角度来说,也应该以实际的交易数据为主。

3、指数合约的价值还有吗?答:个人初步评估(并不是最后结论),是有的。因为指数在某种程度的确可以过滤主连复权中的信号杂音,我们从上面多空两个表的数据可以看出,指数合约的交易次数是少于主连复权的。我们可以考虑用指数计算信号,进出场间的绩效数据用主连复权来计算,那么问题又来了,如果指数和主连复权完全反向,那么还是不能用指数,例如后面我们会讨论到苹果和鸡蛋这两个奇怪的品种。

今天是指数和主连复权差异化深度分析第一篇文章,由于篇幅问题,后续我将把上面的问题,以及到底用主连复权、指数、还是指数计算信号,主连复权计算绩效等3种进一步的阐述。当然还有按照我们分析的逻辑把所有的品种结果都输出出来,会有符合逻辑的地方,也同样会有大跌眼镜的地方。

最后给大家留一个思考题,如果一个策略,在主力复权回测很好,是否在指数合约也是很好呢?可以留言参与讨论。如果你觉得这篇文章对您有帮助,麻烦转发一下或者在文末点一下在看和赞,码字不宜,望客官不要白嫖了洋洋和小松鼠~

本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。

猜你喜欢

转载自blog.csdn.net/m0_56236921/article/details/123788188