我们在日线基础上进行加权傅里叶变换建模,判断市场处于趋势状态还是震荡状态。具体分为以下几个步骤:
1、时间窗口划分
首先我们取整个日线收盘价时间序列,经过 MA10 平滑,得到{pi}。指定窗口长度 N ,依次取{P1,P2 ,…, PN} 、 {P2 ,P3 ,…, PN+1} 、……等子窗口,计算 PN 、PN+1 、……等时点的瞬时周期。这里的窗口长度 N 要取得比较合适,因为如果 N 过小,时间子序列的信噪比太低,无法提取出有效的周期信息;如果 N 过大,虽然能够计算出更为精确地周期,但延迟会比较高,不利于我们最初的低延迟理念——因为我们希望通过判断市场是否震荡从而判断市场是否趋势,这一方法应该具有相对较低的延迟。在我们的策略中,取 N=15。
2、计算功率谱
根据
式子对上述每个时间窗口进行离散傅里叶变换,计算不同频率下的功率谱强度|X(w)|2,得到类似于图 5 的谱。不同的是示意图 5 中的谱取 N = 90 ,而我们实证中取 N =15 。
3、加权傅里叶变换计算平均周期
根据
式,计算功率谱上每个周期T 的强度。当该强度小于阈值q 时,根据
式计算权重,并根据
式计算时间子序列的平均周期。例如我们取的子序列是{P1,P2 ,…, PN},那么计算得到的平均周期即为收盘价为 PN 当天对应的市场波动瞬时周期。我们得到沪深 300 指数时间序列 2005 年至 2013 年的平均瞬时周期时间序列如图 8 所示。
至于这里最大周期为 15 的原因,是因为我们设定了子序列长度 N=15。当整个子序列都不展现出周期性时,即图 2 下方的趋势行情,瞬时周期就会趋近于 15;反之,如果市场震荡,在子序列中表现出一定的周期特征,瞬时周期的值将向下偏离15。至于偏离到什么程度才算震荡,我们将设定一个阈值进行判断。
另外,从图 8 可以看出,除了个别尖峰位置,瞬时周期的变化还是较为缓慢的。也就是说,市场的趋势往往会维持较长一段的时间,但震荡状态消失得都很快。这也表明,我们的模型在大多数时候不仅可以判断市场当前的周期,还可以在缓变的市场状态中预测未来一段时间市场的方向,并且这种趋势方向的预测是长周期大级别的。这就解决了我们开篇所说趋势与震荡预测的问题。
4、趋势行情中进行趋势交易
通过设定阈值
可以判断市场处于震荡还是趋势。趋势判断标准为
当市场处于趋势行情时,我们将进行趋势交易。如果市场出现趋势,方向是很好判断的——我们将信号出现前时间子序列的收盘价数据做线性回归,当回归斜率大于零时,我们认为是上升趋势,做多指数;回归斜率小于零时,我们认为是下降趋势,做空指数。当市场从趋势行情回归至震荡行情的时候,我们对所持有的头寸进行平仓。