Quickies #1: 过拟合与EWMAC预测因子 [投资谬论]

Monday, 2 June 2025

Quickies #1: 过拟合与EWMAC预测因子

我目前正全心投入到书籍的撰写中,因此没有时间撰写完整的博客文章。取而代之,我计划发布一系列简短的“快讯”,分享我在写作过程中进行的一些研究。不无 cynical 地说,这也有可能鼓励您购买我的书,只要我没有像那些提前剧透剧情、囊括所有精彩动作场景的电影预告片一样过度分享。

过拟合 – 图解指南

这是我经常使用的一张幻灯片:

Overfitting slide

尽管我们直观地知道复杂性会提高样本内性能,并在某个时刻使其恶化,但我们能否将其可视化呢?

假设我认为过去 64 个交易日的股价涨跌模式将预测下个月(大约 20 个交易日)的收益。我可以通过以下方式分析这些模式:

  • 使用一个周期:只看过去 64 个交易日的交易情况,观察价格是上涨还是下跌。由于周末和节假日,这大约是三个月。
  • 使用两个周期:查看前 32 个交易日和后 32 个交易日。现在您明白我为什么使用 64 天了。
  • 四个周期:检查前 16 天、第二个 16 天、第三个 16 天,以及最后 16 天。

理论上,我最终可能会逐日检查,但实际上我会在 16 个周期(每个周期四天)时停止,这已经足够有趣了(对于四个周期,有 2^4 = 16 种可能的状态;如果是 2^64 则会变得非常荒谬)。在我的分析中,我会观察市场在每种日收益模式之后平均表现如何。例如,如果我使用两个 32 天的收益来构建模式,那么有四种可能性:上涨后上涨、上涨后下跌、下跌后上涨;以及下跌后下跌。然后,我可以观察市场在这四种状态中的每一种状态下,二十天后是上涨还是下跌。

随后,为了运用这种方法进行交易,我将计算市场当前所处的状态,然后如果该状态在过去导致市场上涨的幅度超过平均水平,我就会买入。这是一种仅做多的策略,因此如果我预计市场下跌幅度超过平均水平,我就不能做空。相反,我只会保持空仓。

该图显示了用 Microsoft 进行此练习的结果。使用几乎任何金融工具都会得到类似的图像——这是无需使用大量数据也能获得可靠结果的情况之一。每条线代表不同数量的周期。

Microsoft analysis chart

不幸的是,我们无法真正实现如此高水平的利润。问题在于,我们正在对所有可用的价格历史数据进行样本内拟合。因此,现在我们按照通常的程序进行样本外测试:将方法拟合到数据的早期部分,然后在后期数据周期中测试该校准后的方法。请注意,我们可能会遇到以前未见过的状态,在这种情况下,我们将从最后一个已知状态进行前向填充。

让我们看看,如果我将方法使用 16 个周期(每个周期四天)在截至 2015 年的所有历史数据上进行拟合,然后用最近十年数据进行测试会发生什么。

Microsoft and Apple performance chart

黑线代表原始程序:我们利用所有价格历史数据并相应地校准我们的方法。它的表现非常好,但正如我之前指出的,我们无法在现实中实现这种性能。深灰色线仅拟合到 2015 年初的数据。在此之前,它的表现与黑线非常相似,这并不奇怪,因为这两种方法几乎相同,并且共享约 70% 的拟合数据。

然而,2015 年之后,当它根据从未见过的价格历史数据进行交易时,其表现急剧恶化。另一个有用的实验是查看该方法在不同金融工具上的表现如何。浅灰色线显示了如果使用 2015 年 Microsoft 方法随后交易 Apple (AAPL) 会发生什么。您可以清楚地看到其表现非常糟糕。该方法对 2015 年之前的 Microsoft 收益拟合得过于紧密;在之后几年,尤其是在不同股票上,它的表现不佳。

如果我用一个更简单的模型做同样的事情,它只关注整个 64 天周期会发生什么?由于我们知道股价在几个月内会呈现趋势,我们已经可以猜测这种拟合方法会是什么样子。如果价格在过去 64 天上涨,它就会买入,否则它不会做任何事情。

Simple model performance chart

如图所示,无论该拟合方法是使用截至 2015 年的价格历史数据构建的,还是使用整个期间的数据构建的,其最终结果都完全相同。因此,深灰色线与黑线完全重叠。您还可以看到,这种非常简单的方法在 Apple 股票上表现非常好,尽管之前从未见过它。

EWMAC预测因子——计算而非测量

我之前的书籍中充满了各种交易规则的预测因子估算值。其中许多都遵循时间的平方根规则。例如,EWMACN、4N 使用每日收益标准差进行标准化时的预测因子,对于 2,8 大约是 15,对于 4,16 大约是 10,依此类推。我们可以通过除以 sqrt(2) 来获得下一个预测因子。一旦你估算出 2,8 的值,就可以轻松推导出其他数字。

这很棒,但是对于除了 2,8 之外的不同起始乘数,我们如何获得“种子”值呢?我首先生成了一个所有 2 的幂的乘数完整表格:

EWMAC table

行代表“快”速周期(fast),列代表“慢”速周期(slow)。对于趋势跟踪而言,由于 fast < slow,因此右下角的对角线是空的。我们需要计算顶行中的数值。请注意,这对于 EWMAC 2,S 的任何 S 值都应该适用;但在 2 的幂次空间中进行拟合更容易。

我使用了….. ChatGPT!是的,我只是将这些数字粘贴进去,然后让它进行拟合。它使用了一个幂律分布,当我在提示中要求它包含一个截距时,它甚至给了我所需的 Python 代码。由于是经验数据,因此拟合效果并非完美,但正如我书中脚注中所述,所有这些努力都是为了:

对于 f=2 且给定 s 值,计算缩放因子请使用公式 2.2+(184÷s^1.25)。

随着 S 值越来越长,拟合效果会逐渐变差,但这也很合理,因为收益的长期偏差等因素会产生更大的影响。

原文链接

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注