在时间序列的众多研究方向上,除了时间序列异常检测,时间序列的相似性,时间序列的趋势预测之外,无论是在量化交易领域还是其余领域,时间序列的单调性都是一个重要课题。本文将会对时间序列的单调性作简单的介绍。
连续函数的单调性
在微积分里面,通常都会研究可微函数的导数,因为导数是反映可微函数单调性的一个重要指标。假设 是定义域
上的可导函数,那么某个点
的导数则定义为:
对于区间 上的可导函数
而言,假设
。如果
,那么在
的附近,
是严格单调递增函数;如果
,那么在
的附近,
是严格单调递减函数;如果
,则基于这个事实无法轻易的判断
在
附近的单调性。可以参考这两个例子:(1)
,
;(2)
,
。这两个例子在
的导数都是零,并且第一个例子在
附近没有单调性,
就是最小值点;但是第二个例子在
处是严格递增的。
时间序列的单调性
通常来说,时间序列分成上涨和下跌两种趋势。如果要严格来写的话,当 时,表示时间序列在
这个区间内是严格单调递增的;当
时,表示时间序列在
这个区间内是严格单调下跌的。但是,在现实环境中,较难找到这种严格递增或者严格递减的情况。在大部分情况下,只存在一个上涨或者下跌的趋势,一旦聚焦到某个时间戳附近时间序列是有可能存在抖动性的。所以我们需要给出一个定义,用来描述时间序列在一个区间内的趋势是上升还是下跌。
考虑时间序列 的一个子序列
,其中
。如果存在某个
和一组非负实数
使得
其中
就称时间序列 有上涨的趋势。
如果存在某个 和一组非负实数
使得
其中
就称时间序列 有下跌的趋势。
时间序列的单调性 — 均线方法
虽然时间序列是离散的,但是却可以把连续函数的思想应用在上面。
假设现在有一个时间序列是 ,可以考虑第
个点
附近的单调性,按照导数的思想来看就是:当
时,
考虑特殊的情形,假设 ,当第一个公式大于零时,表示
,i.e. 处于单调上升的趋势中。当第一个公式小于零时,表示
,i.e. 处于单调下降的趋势中。
但是,时间序列有可能有一定的波动性,也就是说时间序列有可能其实看上去是单调上升的,但是有一定的噪声或者毛刺。所以需要想办法处理掉一些噪声和毛刺。于是,就有人提出了以下几种方法。
简单的移动平均算法
在时间序列领域,简单的移动平均算法 (Simple Moving Average) 是最常见的算法之一。假设原始的时间序列是 ,如果考虑时间戳
的移动平均值,那就是考虑从时间戳
开始,历史上某个窗口上面的所有序列的平均值,用数学公式来描述就是:
其中 指的就是窗口的大小。
命题 1. 假设窗口值 ,
表示短线上穿长线,曲线有上涨的趋势;
表示短线下穿长线,曲线有下跌的趋势。
在这里,短线指的是窗口值 所对应的移动平均线,长线指的是窗口值
所对应的移动平均线。
证明.
根据条件可以得到,。假设
,那么通过数学推导可以得到:
此时说明 历史上的
个点的平均值大于
历史上的
个点的平均值,该序列有上涨的趋势。反之,如果
,那么该序列有下跌的趋势。
带权重的移动平均算法
如果窗口值是 ,对于简单移动平均算法,那么
每个元素的权重都是
,它们都是一样的权重。有的时候我们不希望权重都是恒等的,因为近期的点照理来说是比历史悠久的点更加重要,于是有人提出带权重的移动平均算法 (Weighted Moving Average)。从数学上来看,带权重的移动平均算法指的是
命题 2.
假设窗口值 ,那么
表示短线上穿长线,曲线有上涨的趋势;
表示短线下穿长线,曲线有下跌的趋势。
在这里,短线指的是窗口值 所对应的带权重的移动平均线,长线指的是窗口值
所对应的带权重的移动平均线。
证明.
根据假设条件可以得到:。假设
,那么
其中 ,这里的
表示 Gauss 取整函数。因为
所以不等式两边的系数都是非负数。而 ,于是距离当前点
的时间序列相比之前的时间序列有上涨的趋势,并且该不等式两边的系数之和是相等的。这是因为
以上等式易得。于是,当 时,表示时间序列有上涨的趋势;当
时,表示时间序列有下跌的趋势。
指数移动平均算法
指数移动平均算法 (Exponentially Weighted Moving Average) 指的也是移动平均算法,但是它的权重并不是线性递减的,而是呈指数形式递减的。具体来说,如果时间序列是 ,那么它的指数移动平均算法就是:
在这里 。
从数学公式可以推导得出:
在这种情况下,假设 ,那么短线和长线则分别是:
在这里, 是与
相关的值,
是与
相关的值。
命题 3.
假设 ,当
时,
表示短线上穿长线,曲线有上涨的趋势;
表示短线下穿长线,曲线有下跌的趋势。注:当
时,
可以看做
.
证明.
当 时,
。那么
这表示时间序列有上涨的趋势。反之,当 时,表示时间序列有下跌的趋势。
当 时,根据假设有
,并且
假设 ,通过计算可以得到
,也就是说
在
上是递增函数,在
是递减函数。于是当
时,
如果 ,那么
可以写成
说明在这种情况下时间序列有上涨的趋势。如果 ,那么
可以写成
说明在这种情况下,时间序列有上涨的趋势。
反之,当 时,也可以使用同样的方法证明时间序列有下跌的趋势。
时间序列的单调性 — 带状方法
根据时间序列的走势,其实可以按照一定的规则计算出它的置信区间,也就是所谓的上界和下界。当最后一些点超过上界或者低于下界的时候,就可以说明这个时间序列的当前的趋势。
控制图
假设时间序列是 ,为了计算某个时间戳
下
的走势,需要考虑该时间序列历史上的一些点。假设我们考虑
中的所有点,可以计算出均值和方差如下:
那么就可以计算出上界,中间线,下界分别是:
这里的 表示系数,通常选择
。
命题 4. 当 ,那么说明
有上涨的趋势;当
时,那么说明
有下跌的趋势;这里的 UCL 和 LCL 是基于
原理所得到的上下界。
Moving Average 控制图
假设我们考虑的时间序列为 ,那么基于窗口
的移动平均值就是
那么 的方差是
于是,基于移动平均算法的控制图就是:
这里的 表示系数,通常选择
。
命题 5. 当 ,那么说明
有上涨的趋势;当
时,那么说明
有下跌的趋势;这里的 UCL 和 LCL 是基于移动平均算法的控制图所得到的上下界。
EWMA 控制图
假设 ,那么根据指数移动平均算法可以得到:
进一步分析可以得到: 的方差是:
于是,
因此,基于 EWMA 的控制图指的是:
这里的 是系数,通常取
。
命题 6. 当 ,那么说明
有上涨的趋势;当
时,那么说明
有下跌的趋势;这里的 UCL 和 LCL 是基于 EWMA 的控制图所得到的上下界。
时间序列的单调性 — 柱状方法
MACD 方法
MACD 算法是比较常见的用于判断时间序列单调性的方法,它的大致思路分成以下几步:
- 根据长短窗口分别计算两条指数移动平均线(EWMA short, EWMA long);
- 计算两条指数移动平均线之间的距离,作为离差值(DIF);
- 计算离差值(DIF)的指数移动平均线,作为DEA;
- 将 (DIF-DEA) * 2 作为 MACD 柱状图。
用数学公式来详细描述就是:令 ,
,
,基于时间序列
,可以计算基于指数移动平均的两条线,对于所有的
,有
其中
进一步可以计算离差值 (DIF) 如下:
令 ,计算 DEA 如下:
最后可以计算 MACD 柱状图,对任意的 ,
命题 7. 关于 MACD 的部分性质如下:
- 当 DIF(n) 与 DEA(n) 都大于零时,表示时间序列有上涨的趋势;
- 当 DIF(n) 与 DEA(n) 都小于零时,表示时间序列有递减的趋势;
- 当 DIF(n) 下穿 DEA(n) 时,此时 MACD(n) 小于零,表示时间序列有下跌的趋势;
- 当 DIF(n) 上穿 DEA(n) 时,此时 MACD(n) 大于零,表示时间序列有上涨的趋势;
- MACD(n) 附近的向上或者向下的面积,可以作为时间序列上涨或者下跌幅度的标志。
PS:算法可以从指数移动平均算法换成移动平均算法或者带权重的移动平均算法,长短线的周期可以不局限于 26 和 12,信号线的周期也不局限于 9。
参考资料
- Moving Average:https://en.wikipedia.org/wiki/Moving_average
- Double Exponentially Moving Average:https://www.investopedia.com/articles/trading/10/double-exponential-moving-average.asp
- Control Chart:https://en.wikipedia.org/wiki/Control_chart
- MACD:https://www.investopedia.com/terms/m/macd.asp
- Introduction to Statistical Quality Control 6th edition,Douglas C.Montgomery