如何构建时间序列模型以赢得每一笔交易(量化框架)

@RohOnChain
英语3个月前 · 2026年5月19日
228K
258
57
19
635

TL;DR

本指南深入解析了量化交易技术栈,重点介绍了用于信号生成的 ARIMA 模型和用于波动率调整头寸规模的 GARCH 模型,并详细说明了如何避免伪回归问题。

我将深入剖析机构量化分析师如何利用时间序列分析在任何市场中寻找优势,并分享一个完整的框架,你今天就可以开始实施。

我们直入主题。

将这篇收藏起来吧——我是 Roan,一名后端开发工程师,专注于系统设计、高频交易风格执行和量化交易系统。我的工作主要研究预测市场在负载下的实际表现。欢迎提出建议、进行深思熟虑的合作或建立伙伴关系,私信随时开放。

2008 年,大多数交易员看到抵押贷款支持证券的走势图时,只看到一条上升的线。

他们看到了趋势,看到了动量。他们运行了时间序列模型。模型说买入。结果模型大错特错,酿成灾难。

而一小群交易员看着同一条线,问了一个不同的问题:不是问这条线接下来会往哪里走,而是问这条线究竟是怎么生成的?他们深挖了底层的抵押贷款数据,发现了那些发放给没有收入验证的人的可调利率贷款。他们发现,在价格图表显示任何迹象之前,违约率已经在数据中悄然上升。他们利用这些信息——任何时间序列模型都无法独立捕捉到的信息——构建了头寸,在市场崩溃时赚了数十亿美元。

这是时间序列分析中最重要的一课。图表上的这条线,是现实世界中发生的事件所产生的结果。时间序列模型可以告诉你这条线一直在做什么,但它无法告诉你究竟是什么导致了这条线。而且,一旦底层现实发生变化,你的模型就会从资产变成负债。

我之前已经写过关于用于状态检测的马尔可夫链和用于信号生成的神经网络的文章。时间序列分析是系统化交易栈的第三个关键层。这三个框架共同构成了一个完整的量化交易系统。

读完这篇文章,你将确切理解:时间序列是什么,以及市场如何生成它们;为什么你的时间序列模型总是错的,以及为什么这其实没问题;驱动每个量化交易决策的三个基本任务;从原始数据到实时交易信号的完整实施框架;以及那个导致 90% 的时间序列模型在接触真实资金之前就失败的致命错误。

注意:这篇文章故意写得很长。每一部分都建立在前一部分的基础上。如果你真的想利用时间序列分析建立系统化的优势,请逐字阅读。如果你在寻找捷径,这篇文章不适合你。

第 1 部分:时间序列到底是什么,以及它向你隐藏了什么

时间序列是按时间间隔定期记录的一系列观测值。比如股票每日收盘价、每小时温度读数、每月失业人数。每一个都是一系列按时间索引的值。

这个定义在技术上是正确的,但实际中并不完整。

大多数人忽略的关键点是:每一个时间序列都是由某些东西生成的。股票价格并不是在真空中随机波动。它是投资者、算法、做市商和宏观力量做出的数百万个决策的输出结果,而这些力量仅凭价格序列本身是无法直接观察到的。价格被经济学家称为"结果变量"。而真正驱动它的是底层的"数据生成分布"。

Roan - inline image

这种区别对于交易来说极其重要。当你将时间序列模型应用于市场数据时,你实际上是在为一个不可见过程的可见输出建模。只要这个不可见过程大致保持不变,你的模型就能捕捉到有用的模式。但一旦底层过程发生变化,你的模型就会默默地去拟合一个已经不再存在的东西。

想想纽约市的温度。如果现在是 12 月,当前温度是 20 华氏度,那么明天会是多少度?你的答案大概也在 20 度左右,上下浮动。你并非在做精确预测,而是基于当前状态和已知的季节性模式产生一个期望值。在正常情况下,这个期望值大多数时候大致正确。

现在想象一下,冰岛的一座火山爆发,使全球温度在一周内上升了 15 华氏度。你的模型没有关于这座火山的任何信息,它的预测将严重失准。这不是因为模型不好,而是因为底层的"数据生成过程"发生了改变,而这种改变在温度序列本身中是完全不可见的。

这正是 2008 年抵押贷款证券发生的情况。价格的时间序列显示一切正常,但底层过程——贷款的实际信用质量——早已改变。这些信息确实存在,只是不在价格序列中。

时间序列可以分解为三个组成部分:

趋势是长期的定向运动,是序列在长时间内遵循的整体轨迹。季节性是在固定时间间隔内重复出现的模式,例如月度销售周期、季度财报效应、交易量的周内模式。冲击或残差是趋势和季节性成分周围的随机波动,即意外事件、新闻、惊喜。

关于趋势和季节性的关键见解是:它们只有在稳定时才有意义。如果你对日内股票价格建模,而趋势每隔几小时就反转一次,那么趋势成分对你来说毫无用处。稳定性是任何时间序列模型具有预测价值的前提条件。

作业:选择你目前交易的任何资产,用一句话写下你认为驱动其价格变动的主要因素。这个因素就是你构建时间序列模型时应同时监控的对象。如果这个因素发生了变化,你就需要重建模型。

第 2 部分:三个任务,以及为什么预测总是错的

时间序列分析的每次应用都属于以下三类之一。理解你实际在执行哪个任务,将为你节省量化金融中最常见也最昂贵的一个错误。

滤波:利用过去和当前数据来估计系统的当前状态。你试图去除噪声,看清当前真正发生的情况。移动平均就是一种滤波。它不预测未来,而是平滑现在。你在交易平台上放到图表上的每一个指标,都在执行某种形式的滤波。当你使用 20 日移动平均线时,你实际上在说:我想看到这个资产去掉日常噪声后的底层状态。仅此而已。

平滑:同时使用过去和未来的数据来估计某个先前时间点的状态。它需要全局路径知识,也就是说,你需要看到某个时间点之后发生的事情,才能最好地描述那个时间点正在发生什么。平滑对于分析历史数据和构建研究数据集很有用,但无法用于实时交易决策,因为它需要来自未来的信息。

预测:利用当前和过去的状态来产生对未来的期望。这是大多数交易员关注的焦点,也是误解最多的地方。

以下是大多数交易教育不愿明确说明的基本事实。

预测不是预言,而是一种期望。这两者不是一回事。

期望是能使所有可能未来结果的平方误差最小化的单一数值。数学上,它就是条件均值:

E[Xₜ₊₁ | X₁, X₂, ..., Xₜ]

当你掷一枚公平的骰子时,期望值是 3.5。骰子能掷出 3.5 吗?不能。但在掷之前,3.5 仍然是你能给出的最佳答案。它是能使你所有未来掷骰结果的平均误差最小化的数值。

市场预测的工作原理完全相同。你的模型根据可用信息产生最佳期望值。这个期望值基本上永远不会等于实际实现的价格。但如果它在平均意义上正确,并且你围绕它系统地进行交易,你就能产生持续回报。这正是做市商的运作方式。他们不需要知道价格会去哪,他们只需要知道期望价格,围绕它报出买卖价差,然后在数千笔交易中赚取这个价差。

即使模型是错的,这种方法仍然有效,这来自一个简单的做市模拟。假设你在一个真实期望值随时间随机变化的过程中,围绕期望值报出买卖价差。移动平均线并不完美地跟踪这个期望值,它总是略有偏差。但如果你围绕这个不完美的估计进行交易,你仍然会随着时间的推移积累正盈亏,因为你在平均意义上是正确的。

这就是利用时间序列分析进行系统化交易的核心。你不需要完美的预测,你只需要方向足够正确的预测,频率足以覆盖交易成本。同时,你需要一个严谨的框架来判断你的模型何时不再近似正确。

Roan - inline image

第 3 部分:摧毁大多数交易模型的单位根问题

这一部分将让你避免在利用时间序列数据进行量化交易时最常见、也最昂贵的错误。

大多数试图为股票价格构建预测模型的人,首先会将明天的收盘价对今天的收盘价进行回归。当他们这样做时,会得到超过 0.99 的 R 平方值。他们以为自己发现了一个近乎完美的预测关系。

其实并没有。他们掉进了统计学中记录最充分的陷阱之一,即伪回归。

实际情况是这样的:用同样的回归,但将收盘价换成每日收益率。R 平方值会骤降到大约 0.01。你从解释了 99% 的变异变成了只解释 1% 的变异。同样的底层资产、同样的数据、同样的模型结构,结果完全不同。

原因就在于单位根。

当一个时间序列的当前值等于其前一个值加上一个随机冲击时,它就具有单位根:

Xₜ = Xₜ₋₁ + εₜ

这被称为随机游走。股票价格大致遵循这个过程。当你将一个随机游走对另一个随机游走做回归时,即使两个序列完全无关,你也几乎总能发现一个强大的统计关系。这就是伪回归,也是业内无数虚假交易信号的来源。

对此的检验是增广迪基-富勒检验。原假设是序列存在单位根。p 值低于 0.05 意味着你可以拒绝原假设,序列很可能是平稳的。p 值高于 0.05 意味着序列很可能存在单位根,此时原始回归模型会产生伪结果。

你会发现价格序列通不过检验,而收益率序列能通过。这恰恰告诉你要建模什么。永远不要对原始价格水平建立预测模型。一定要先将其转换为收益率、对数收益率或其他平稳的衍生量,然后再应用时间序列模型。

将价格序列转换为平稳序列的变换称为一阶差分:

rₜ = ln(Pₜ) - ln(Pₜ₋₁)

对数收益率大致是平稳的,尽管金融收益率序列仍然表现出波动率聚集和肥尾等典型事实,纯平稳性并不能完全捕捉这些特征。我们将在下面的 GARCH 部分中处理这些问题。

作业:检查你目前正在使用或曾经使用过的任何交易模型。它是建立在价格水平上还是收益率上?如果是建立在价格水平上,对底层数据运行迪基-富勒检验。如果 p 值高于 0.05,那么你的回测结果很可能是由伪相关夸大的。

第 4 部分:真正有效的模型以及如何使用它们

现在你理解了时间序列是什么、三个基本任务以及单位根问题,你已经准备好构建在真实市场中真正有效的模型。

构成系统化交易骨干的模型族是 ARMA 族及其扩展。这个族中的每个模型都捕捉了金融时间序列中序列依赖结构的不同方面。

AR:自回归模型

一个 p 阶自回归模型,记作 AR(p),表示序列的当前值是之前 p 个值的线性函数加上一个随机冲击:

Xₜ = φ₁Xₜ₋₁ + φ₂Xₜ₋₂ + ... + φₚXₜ₋ₚ + εₜ

φ 系数是自回归参数,它们捕捉了当前值被每个滞后项解释的程度。在交易中,AR 模型可用于捕捉短期动量和均值回归动态。φ₁ 为正的 AR(1) 模型捕捉动量,φ₁ 为负的 AR(1) 模型捕捉均值回归。

MA:移动平均模型

一个 q 阶移动平均模型,记作 MA(q),表示当前值是当前和过去随机冲击的线性函数:

Xₜ = εₜ + θ₁εₜ₋₁ + θ₂εₜ₋₂ + ... + θqεₜ₋q

MA 模型捕捉了过去意外事件对当前值的影响。它们特别适用于模拟市场如何对新闻事件做出反应。

ARMA:同时包含两者

ARMA(p,q) 模型同时包含了两个组成部分:

Xₜ = φ₁Xₜ₋₁ + ... + φₚXₜ₋ₚ + εₜ + θ₁εₜ₋₁ + ... + θqεₜ₋q

对于非平稳序列,先进行差分使其平稳,得到的模型称为 ARIMA(p,d,q),其中 d 是差分阶数。

GARCH:对波动率建模

ARMA 模型在金融数据上的问题是它们假设波动率恒定。金融收益率表现出波动率聚集:大波动后往往跟着大波动,小波动后往往跟着小波动。这就是 ARCH 效应,也是金融领域记录最充分的典型事实之一。

GARCH(1,1) 模型通过将误差项的方差建模为一个时变过程来解决这个问题:

σₜ² = ω + α₁εₜ₋₁² + β₁σₜ₋₁²

其中 σₜ² 是 t 时刻的条件方差,εₜ₋₁² 是前一期的平方冲击,σₜ₋₁² 是前一期的方差。这个模型精确地捕捉了你在市场中观察到的波动率聚集:今天的高波动率预示着明天的高波动率。

对于交易而言,GARCH 对于头寸规模设定至关重要。当 σₜ² 高时,你减少头寸规模;当 σₜ² 低时,你可以承担更多风险。这一简单的洞见——根据估计波动率动态调整头寸规模——是系统性基金产生的风险调整后收益中相当大一部分的来源。

Roan - inline image

第 5 部分:完整的实施流程

本节将把所有内容整合成一个可以在今天真实数据上运行的工作系统。

在部署之前,有三个关键点需要理解。

第一:基于 GARCH 的头寸规模设定比 ARIMA 的方向预测发挥的作用更大。在高波动率时期减少敞口是整个系统中最可靠的优势。52% 到 55% 准确率的方向性预测,结合波动率缩放的头寸规模,比 60% 准确率加上固定头寸规模能产生更好的风险调整后收益。

第二:滚动窗口结构是不可妥协的。每一步你只使用历史数据拟合模型,并向前预测一步。永远不要在整个数据集上拟合然后生成样本内预测并称之为回测。那不是回测,而是带有标签的曲线拟合。

第三:替代数据是时间序列分析所能达到的天花板。你在这里构建的框架是地板。它捕捉了存在于价格序列内部的模式。而那些持续表现出色的交易员则添加了价格序列无法包含的信息:财报电话会议情绪、来自订单簿的订单流不平衡、信用市场信号、跨资产制度信息。这些不是对模型的改进,而是来自一个根本不同信息集的输入。

Roan - inline image

最重要的实际限制:所有 ARMA 族模型都假设序列的统计性质在估计窗口内大致稳定。在金融市场中,这个假设不断被违反。标准的缓解措施是使用 252 个交易日的滚动估计窗口,随着新数据到来而丢弃旧数据。较短的窗口适应更快,但参数估计噪声更大;较长的窗口更稳定,但滞后于制度变化。最优窗口长度是一个经验问题,必须针对每个品种和每个策略分别回答。

总结

时间序列分析并不能预测未来。它所做的,是在给定当前状态和观测历史的情况下,产生数学上最优的未来期望。当这个期望在方向上足够频繁地正确,并结合波动率缩放的头寸规模时,它就能产生持续的优势。

完整的框架就在这篇文章中:在构建任何模型之前检查平稳性;使用收益率而非价格作为输入;拟合 ARIMA 以捕捉收益率自相关中的方向信号;在其上叠加 GARCH 来建模时变波动率并动态调整头寸规模;使用滚动窗口结构验证一切;并且始终记住,最大的波动——那些创造或摧毁最多资本的波动——来自于任何时间序列模型都永远无法预见的制度变化。

最后一点不是模型的局限性,而是对现实的描述。历史上构建最成功系统性策略的交易员,都确切理解他们的模型能做什么、不能做什么。他们利用时间序列来做它真正擅长的事情:从稳定制度中提取稳定模式。同时,他们利用替代数据和制度检测来知道这些制度何时即将改变。

现在,你两者都有了。时间序列框架就在这篇文章中。马尔可夫链制度检测框架在上一篇文章中。神经网络信号生成框架在那之前的文章中。

你现在拥有了一个完整的系统性交易栈。

我希望你思考这样一个问题。

GARCH 模型仅凭收益率历史中的模式告诉你波动率即将飙升。马尔可夫链根据当前状态告诉你市场即将从低波动率制度过渡到高波动率制度。如果两个信号一致,这种收敛就是可用的最强风险管理信号之一。如果它们不一致,这种分歧本身也是一种信息。什么情况会导致它们不一致?这种不一致又会告诉你当前市场状况的什么信息?

在评论区留下你的答案。

没有错误答案,但会有非常发人深省的回答。

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章