查看原文
其他

收益率到底能不能预测(模型篇)?

石川 川总写量化 2022-05-14


作者:石川,量信投资创始合伙人,清华大学学士、硕士,麻省理工学院博士;精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化。


1

引言


不要把时间序列中的长期漂移率项当成可预测性。


这是我近期看到的颇受启发的一句话,它出自经济计量学的一本经典著作 Campbell et al. (1996)。在量化投资领域,人们较劲脑汁儿想要分析、预测收益率这个时间序列。从时间序列分析到各种机器学习算法,越来越复杂的非线性模型都被拿来,对着收益率序列就是一通比划,就是为了提高对未来收益率预测的准确性。


但是,可能人们都忽视了一个核心的问题:收益率到底可预测吗?


学术界和业界比较主流的看法是,资产的价格可以由随机游走(random walk)过程来描述,这对应的是收益率无法预测。当然,如果价格是纯粹的随机游走,那我们也不需要开发各种复杂的数学模型了,就每天扔硬币、猜涨跌就行了。但是,这不妨碍随机游走成为研究价格和收益率序列的一个很好的出发点。


谈及随机游走,人们第一个想到的大概是布朗运动(见《写给你的金融时间序列分析:初级篇》《布朗运动、伊藤引理、BS 公式(前篇)》)。由于要求不重叠但等长的时间区间内的过程增量(对数价格的增量就是对数收益率)符合 IID 分布(独立且同分布),布朗运动这个版本的随机游走的局限性非常强。因此在这个版本的基础上,人们又提出了另外两个版本。算上布朗运动,一共有三个版本,它们的定义如下:


随机游走模型一:假设不同期的(对数)收益率之间满足 IID 分布


随机游走模型二:假设不同期的(对数)收益率之间满足独立分布,但可以是不同的分布。


随机游走模型三:假设不同期的(对数)收益率之间满足线性相关性为零(但可以在更高阶上非独立)。


模型二在模型一的基础上,放松了同分布这个限制;而模型三更是仅假设不同的收益率之间满足一阶(线性)的独立性,而允许收益率在高阶上独立。我们经常观察到资产收益率的波动率聚类,这说明收益率的二阶就不是独立的,因此模型三似乎更符合现实。


虽然现实中收益率很难满足模型一的假设,但只有先对它有个正确的理解才能更好的搞清楚后续的复杂模型。为此,我们用两期文章来介绍相关内容。本篇(模型篇)介绍两种检验方法以判断一个时间序列是否满足模型一。下篇(实证篇)使用这两个方法对A股几大股指的对数收益率序列进行实证检验,并说明实证结果对于构建量化策略有何种借鉴意义。


这两种检验分别为顺序和反转检验以及游程检验。它们都是非参数化检验。


2

顺序和反转检验


为了将对检验方法的介绍和研究对象结合起来,假设我们考察的是资产的对数价格序列的随机性。因此,它的增量就是对数收益率。我们假设对数收益率的分布是对称的。


第一种检验对数收益率是否为 IID 的方法是顺序和反转检验(sequences and reversals test),由Cowles and Jones (1937) 提出。对一个对数收益率,首先对其按如下转换变成 0、1 序列:



其中 r_t ~ IID(0, σ^2) 和 p_t 分别为某资产在 t 时刻的对数收益率和对数价格。经过上述变换后,一个收益率序列就转化为一组由 0 和 1 组成的序列,例如 1001110101011000011010。


在这样一个序列中,任意相邻的两个数如果同为 0 或者同为 1,则称它们为一个顺序(sequence);反之,如果任意相邻的两个数为 0 和 1、或者 1 和 0,则称它们为一个反转(reversals)。根据这个定义,我们可以在上面那个序列中用红色和绿色标出一些顺序和反转的例子:1001110101011000011010。(注意,在前面我们仅仅标出一些示例。在实际计算时,应该逐一考虑相邻的每对数是一个顺序还是一个反转。例如在 010 这三个数中,就有 01 和 10 两个反转对儿、没有顺序对儿。)


在数学上,上述定义可以转化为如下简单的数学公式,通过它们可以计算出一个长度为 n 的时间序列中,顺序和反转各自的总个数:



其中 N_s 是顺序对儿的个数,N_r 是反转对儿的个数。有了 N_s 和 N_r 之后,就可以定义待检验的变量了。为了向发明者致敬,称这个检验量为 CJ 统计量,那是 N_s 和 N_r 的比值:



先来考虑最简单的情况,即对数收益率没有长期漂移率项(即长期均值为 0)。这当然不符合大多数实际情况,因为它意味着长期来看买入和持有某种投资品是不挣钱的(在商品期货市场基本符合,但对于股市和债市,这个假设很难成立)。


在这种情况下,如果收益率序列满足 IID,则我们可以预期涨、跌出现的次数也应该基本一样,因此这个序列中的顺序和反转对儿数也应该基本一样。因此,如果假设漂移率项为零,则随着序列个数 n 的增大,CJ 统计量应该逐渐逼近 1。


然而,一旦考虑了漂移率项,一切就变了。我们不能再假设 CJ 统计量的极限值为 1。无论是一个正的漂移率(意味着长期来看持有该资产是能挣钱的)还是一个负的漂移率(意味着长期来看持有该资产是注定亏损的),这个非零的漂移率都将使收益率序列中顺序对儿的个数多余反转对儿的个数,即 CJ 应该大于 1。


为了量化非零漂移量对 CJ 统计量的影响,我们需要已知增量的具体分布,为此选择正态分布。在考虑漂移率的情况下,对数价格的随机过程可描述为:



其中 μ 是非零的漂移率。由上述定义可知,对数收益率为 r_t ~ N(μ, σ^2)。在这种情况下,经过必要的数学推导可以证明 CJ 统计量应近似的满足如下正态分布:



其中



因此,实际的检验可依如下步骤进行:


1. 将对数收益率序列变换为 0、1 序列;


2. 计算新序列中顺序对儿和反转对儿的个数 N_s 以及 N_r,计算 CJ 统计量;


3. 计算对数收益率序列的均值和标准差,作为 μ 和 σ 的估计;


4. 计算 π = Φ(μ/σ),这里 Φ 是标准正态分布的累积密度函数;计算 π_s;


5. 计算 CJ 统计量应满足的正态分布的均值和标准差;


6. 根据第 5 步中的正态分布计算 CJ 统计量的 p-value,以此判断对数收益率序列是否满足 IID。


3

游程检验


第二个可用于 IID 的检验称为 runs test游程检验,也译作连贯检验),由 Mood (1940) 提出。在这个检验中,我们同样先将对数收益率序列转换成由 0 和 1 构成的序列(0 代表负收益、1 代表正收益)。在这个新的序列中,由连续的“0”或者连续的“1”构成的子序列称为一个“run”。


比如,在 1001110100 这个序列中,连续的“1”构成的 runs 有 3 个(长度分别为 1,3 和 1),连续的“0”构成的 runs 同样为 3 个(长度分别为 2,1 和 2)。作为对比,在 0000011111 这个序列中,连续的“0”和“1”各自仅仅构成 1 个 run。


如果一个时间序列的增量满足 IID 且没有非零漂移率,那么我们可以预期它的“熵最大”,即 0 和 1 杂乱的随机出现、表现出最大的随机性。在这种情况下,对于一个长度为 n 的序列,它的期望 runs 个数等于 (n+1)/2。比如一个由 0 和 1 构成的长度为 1000 的时间序列,如果它是纯随机的,那么“0”和“1”构成的 runs 的总个数的期望为 500.5。显然,在上面的两个例子中,那两个序列都各有 10 个数,但是第一个序列的 runs 个数为 6 而第二个序列的 runs 个数仅仅为 2;显然第二个序列(0000011111)更不具备随机性(它看上去也确实更有规律)。


和前一种方法一样,我们需要警惕非零漂移率对 runs 个数的影响。由于它的存在,我们不能仅凭 runs 的个数大大偏离 (n+1)/2 就说这个序列不具备随机性。这是因为非零漂移率会减少 runs 的个数。


为了定量分析非零漂移率的影响,让我们再次假设对数收益率 r_t 满足 N(μ, σ^2)。在这个假设下,下表给出了当 n = 1000,σ = 21%时,不同的漂移率 μ 对应的 runs 个数的期望。不难看出,runs 个数的期望随 μ 递减。



为了使用 runs test 检验对数收益率的随机性,构建如下统计量:



其中 N_runs 是由“0”和“1”构成的 runs 数量的总和(每个 run 的长度在这个检验中不重要),n 为时间序列长度,π = Φ(μ/σ)。数学上可证 z 在极限情况下近似的符合标准正态分布。因此,实际的检验可依如下步骤进行:


1. 将对数收益率序列变换为 0、1 序列;


2. 计算新序列中由“0”和“1”构成的 runs 的总个数,记为 N_runs;


3. 计算对数收益率序列的均值和标准差,作为 μ 和 σ 的估计;


4. 计算 π = Φ(μ/σ),这里 Φ 是标准正态分布的累积密度函数;


5. 计算 z 统计量;


6. 计算 z 统计量在正态分布假设下的 p-value,以此判断对数收益率序列是否满足 IID。


4

一个例子


下面使用一个假想的例子来考察上文介绍的两个检验方法。为此,我们使用标准正态分布产生一个随机游走过程如下,序列的长度为 1000。



尽管这是一个标准的随机游走,但局部随机趋势(local stochastic trend)的存在会给我们造成一种假象,即认为它是有趋势的。使用本文介绍的两种检验方法考察这个时间序列的随机性,得到如下结果:


顺序和反转检验:CJ 统计量 = 1.064,p-value = 0.311,结论为该序列满足随机游走。


游程检验:z 统计量 = -0.917,p-value = 0.359,结论同样为该序列满足随机游走。


虽然该序列在局部存在趋势,但在整个时间尺度上看,它满足随机游走。(这当然也是必然的结果,因为这个序列就是用 IID 的标准正态分布增量产生的。)但我们想通过它说明的问题是,哪怕是一个随机性很高的时间序列在其局部也会因为随机趋势给我们造成一种错觉 —— 它的随机性很弱、是可以预测的。


根据这个错觉来构建策略是非常危险的。这是因为任何资产的实际价格走势都是某个未知分布的一个realization(实现)而已。如果抓住这个错觉、认为该资产的价格走势有一定的预测性(即收益率有预测性),并针对它开发了一个策略,我们根本无法预期该策略在样本外有同样的表现。


由于仅有一个实现(过去这段时间的价格走势只发生一遍),我们无法在统计上正确的评价该策略的参数对这个未知收益率分布是否有效,正如我们不知道在样本外,随机趋势有多大以及它什么时候出现。策略在样本外的表现很有可能和其在样本内的表现大相径庭。


当然,先不用急着“过度悲观”,毕竟上面这个例子中使用的时间序列就是一个随机游走。在本系列的下篇(实证篇)我们会使用真实的来自 A 股指数的价格序列,分析它们的对数收益率是否存在非随机性,以及分析结果对构建量化策略有哪些重要的推论。


5

结语


今天恰逢 315。“收益率具有可预测性”这个命题虽然不至于被“打假”,但它也绝对值得我们戴上怀疑的有色眼镜好好推敲推敲。作为系列的模型篇,本文介绍了两种检验时间序列随机性的方法。在下篇中,我们将使用这些方法分析 A 股的股指(如沪深 300 指数)对数收益率的随机性。


为了和开篇的那句引用相呼应,不妨来个剧透。在大多数时间内,指数的对数收益率均满足 IID;只有当明显的大牛、大熊市的时候,才能观察到统计上显著的非随机性。


无论是时间序列分析还是复杂的机器学习算法,都是为了分析收益率的残差项(即排除了收益率中的长期漂移率、周期性等之后所剩余的部分)是否存在预测性。如果残差满足非随机性,这些复杂算法自然大有可为。但是不要忘记,在大牛、大熊市中,收益率的漂移率项也显著的不为零。那么,在一个很强的非零漂移率项面前,残差中的非随机性到底是“锦上添花”还是“画蛇添足”呢(反正不是“雪中送炭”)?下篇中将给出我们的思考。



参考文献

Campbell, J. Y., A. W. Lo, and C. MacKinlay (1996). The econometrics of financial markets. Princeton University Press.


Cowles, A. and H. E. Jones (1937). Some a posterior probabilities in stock market action. Econometrica, Vol. 5, 280 – 294.


Mood, A. (1940). The distribution theory of runs. Annals of Mathematical Statistics, Vol. 11, 367 – 392.



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存