上午向带教确认了一下,才搞明白我需要做的不是买近卖远或者卖近买远,而是根据远近合约的价差来交易主力合约。因此尽管因子的构造方式可能与近远月合约有关,但是交易和它们没有关系。

盯了半天数据,实在没有什么思路。于是决定上网找找研报,发挥一下我查找资料能力的比较优势。好不容易寻得海通证券的两篇量化研报,一篇来自 2014 年,一篇来自 2015 年,都相当古老了。

第一篇研报给出的相关因子很简单,就是给出一个展期收益率因子:

$$
R_t = \left[\ln{P_{t,n} - \ln{P_{t,d}}} \right] \times {365\over N_{t,d} - N_{t,n}}
$$

其中 $P_{t,n}$ 和 $P_{t,d}$ 可以代表近月远月合约,也可以代表近月和次近月合约、近月和主力合约、甚至主力和次主力合约。

文章用 5 日、10 日等周期来截面交易,但是我编写的功能贫瘠的回测框架暂时只支持每日交易,因此我也就没管那么多,先拿来试一试。结果很神奇,上述不同的合约组合有的能赚钱,有的不赚钱,有的甚至要将因子值取相反数才赚钱。

下班前又试了试第二篇研报,这篇研报稍微认真了点儿,参考了一篇国外的论文,整了一个更复杂的因子:
$$
basis\ momentum=\prod^t_{i=t-R+1}\left(1+R^{T_1}_{fut,i}\right)-\prod^t_{i=t-R+1}\left(1+R^{T_2}_{fut,i} \right)
$$
这里的 $R^{T_1}_{fut,i}$ 和 $R^{T_2}_{fut,i}$ 同样指的是不同期限的合约。这个因子多了一个参数,也就是用来滚动计算的窗口 $R$。为了寻参方便,我不得不将耗时过长的 pandas.DataFrame.rolling() 用向量化的方法重新实现,果然效率提高了几十倍。Pandas 原来这么垃圾。

研究尚未进行完全,等结论比较清晰了再详细写一下这类因子好了。