用选出来的两个期货的收盘价格构造一个价差组合,合约系数比率使用用所有样本内最小二乘法回归得到的系数,样本外也同样使用这个值,从而得到样本内外价差组合,以及这个组合的收益率。具体地,使用一些趋势性指标来进行线性加权组合成一个指标,目标函数是最大化样本内IC绝对值,IC为线性加权指标和价差组合未来n天收益率的相关性,然后根据组合指标和价差组合未来n天收益率和样本内IC的正负和组合指标的变动来制定交易策略。根据组合指标每天在过去2n天历史百分位数(p)来进行组合多空操作,即设定两个百分数阈值p1,p2(p1>p2),如果样本内IC>0,则p>=p1时做多价差组合,p<=p2 做空价差组合。如果样本内IC<0则相反。这里的回测和样本外实施策略的方法比较简单,不考虑资金,全是满仓操作,也没考虑止损,所以最终的策略结果我们会直接对比实际价差组合的收益率和这个交易策略的收益率,为了更直观进行比较,用收益率累计相乘成两者相应的净值曲线画图对比。因为目标是想要预测价差组合未来n天收益率的变动,所以交易策略的换仓周期也是n天,从第一个买卖信号开始进入市场,然后保持n天不动,n天后再继续看交易信号来决定是否进行调仓。由于调仓周期固定为n天,所以策略回测的时候,起始点的不同有可能会造成策略效果的不同,所以改变n次起始进入点,同时对比净值曲线结果。 这里进行了对豆油和豆粕两个期货品种的测试,n为22个交易日,p1=0.8, p2=0.2。
-
Z-Score 𝑍 =(𝑋 − 𝐸[𝑋]) / 𝜎(𝑋) 这里的X可以为两个品种的n天价差spread或者价格比ratio,事实上这两个指标我们都采用了。如果取显著水平为5%置信区间,即Z<-1.96时:我们认为价高者被低估,价低者被高估,从而做多前者做空后者;Z>1.96:认为价高者被高估,价格低者被低估,从而做空前者做多后者。
-
均线 以过去n天价差⾼的均值作为均线: MAn = mean(spreadn)
-
动量 判断价差的趋势,公式为: 𝑚𝑜𝑚𝑒𝑛𝑡𝑢𝑚 = (𝑠𝑝𝑟𝑒𝑎𝑑𝑛 − 𝑀𝐴𝑛) / 𝑀𝐴𝑛
4.对回归曲线的偏离 拟合线性回归曲线: 𝑦̂ = 𝛽𝑥̂ + 𝛼 + 𝜖 其中x为期货1价格 ,y为期货2价格。若用x计算的y⾼于实际值,则期货2相对期货1被低估,做多期货2做空期货1;反之期货2相对期货1被⾼估,做空期货2做多期货1。
测试样本中价差组合的最大回撤从约0.38下降为约0.26,年化夏普比从约0.41上升为约1.42。
这个项目只是一次简单的尝试,还有许多可以完善的地方,目前想到如下几点:
- 对于构造价差组合使用的比例系数,只是简单地使用了静态划分的训练样本回归得到,后续可以使用rolling window 来动态调整比例系数。
- 策略无设置止损等风险管理
- 指标方面可以加入更多的因子
- 赋予因子权重的方法本研究只是简单地用python scipy中的minimize函数,以后可以尝试使用树模型或者神经网络等更为复杂模型来提升策略表现。
- 这里没考虑费率 6.目标函数可以更改,比如换成最大化夏普比率,最小化波动等等。