数据与算法

金融时间序列建模:保留原始记忆还是追求绝对平稳?

diff(x, d=1) = x_t - x_{t-1}…

金融时间序列建模:保留原始记忆还是追求绝对平稳?

这行代码简单。代价也简单:当 d=1 时,原始价格序列被转换为收益率或一阶差分。平稳性通常改善。价格中的长期记忆同时被直接削弱。

金融时间序列建模的核心矛盾,不是“价格能不能预测”,而是输入数据究竟要保留多少历史信息。

原始价格序列通常具有非平稳特征。均值、方差和协方差结构会随时间变化。直接将价格输入机器学习模型,容易让模型学习到趋势、尺度和时间区间差异,而不是可重复的统计关系。

一阶差分可以缓解这个问题。收益率序列更接近平稳,适合进入回归模型、分类模型和深度学习模型。但一阶差分等价于使用固定的整数阶数 d=1。它不是“清洗”数据,而是执行一次彻底的记忆截断。

这就产生了两个极端:

  • d=0:保留原始价格,但通常无法满足平稳性要求;
  • d=1:得到收益率或一阶差分,平稳性更强,但可能丢失长期依赖;
  • 0<d<1:通过分数阶微分,在平稳性和记忆力之间设置中间状态。

分数阶微分并不提供免费信息。它只改变信息保留与统计性质之间的权重。参数 d 仍然需要基于数据检验,不能通过经验值永久固定。

非平稳价格序列:模型首先遇到的不是预测问题

价格序列为什么不能直接等同于收益率序列

设价格序列为:

P_t = P_{t-1} + ε_t

其中 ε_t 表示增量项。即使增量项具有相对稳定的统计结构,价格本身也可能表现为随机游走。随着时间累积,价格的均值和方差会发生变化。

实际数据通常更复杂。价格会叠加趋势、波动聚集、跳跃、交易制度变化和结构断点。结果是:

  • 不同时间区间的均值不一致;
  • 波动率具有时变性;
  • 自相关结构会随着采样区间改变;
  • 训练集中的统计关系无法自然迁移到测试集;
  • 线性模型的系数解释失效;
  • 机器学习模型容易利用时间位置和价格尺度形成伪规律。

这类序列通常被称为非平稳序列。这里的“非平稳”不是说数据完全没有规律,而是说数据的概率分布不满足稳定条件。

严格的弱平稳通常要求:

1. 均值不随时间变化;

2. 方差有限且不随时间变化;

3. 任意两个时点之间的协方差只依赖时间间隔,而不依赖具体时点。

金融价格很少直接满足这些条件。收益率也不一定完全平稳。收益率序列可能存在波动聚集和厚尾分布。但在很多建模任务中,收益率至少比价格更接近平稳,便于估计和验证。

一阶差分解决了什么

一阶差分定义为:

ΔP_t = P_t - P_{t-1}

如果使用对数价格,则通常写成:

Δlog(P_t) = log(P_t) - log(P_{t-1})

第二种形式与连续复合收益率相关。它能降低价格尺度变化对模型的影响,也更适用于跨阶段比较。

一阶差分的优点明确:

  • 计算成本低;
  • 参数没有额外搜索空间;
  • 容易解释;
  • 通常能削弱单位根影响;
  • 适合作为基准输入;
  • 与线性模型和许多分类模型兼容。

问题也明确。

一阶差分只保留相邻观测之间的变化。更早的历史信息不会以原始形式进入当前值。即使差分序列仍然存在自相关,它所携带的长期水平信息已经被显著压缩。

这不是说一阶差分一定错误。对于预测短期收益、波动率或方向分类,一阶差分可能是合理输入。错误在于把它当作所有金融机器学习任务的默认终点。

一阶差分提高了平稳性,但平稳性不是唯一目标。模型输入还必须保留对目标变量有用的历史结构。

“记忆”不是一个感性概念

金融时间序列中的记忆,可以通过自相关、偏自相关、持久性、赫斯特指数或其他统计量描述。这里不讨论不可验证的“市场记忆”。只讨论序列经过变换后,历史观测对当前值的影响是否仍然存在。

对整数阶差分而言,影响范围由有限阶差分算子决定。对分数阶微分而言,当前值由多个历史观测加权得到。理论上,权重衰减较慢时,较远历史仍然能够贡献一部分信息。

这使得分数阶微分适合处理一种常见场景:

  • 原始价格具有较强历史依赖;
  • 原始价格不能直接通过平稳性检验;
  • 一阶差分虽然平稳,但对模型而言过度损失长期结构;
  • 希望使用低于 1 的差分阶数进行折中。

这里的“折中”是数学对象,不是经验口号。最终结果必须通过样本内和样本外检验确认。

分数阶微分:在 d=0 与 d=1 之间工作

从整数阶差分扩展到非整数阶

整数阶差分使用差分算子:

(1-L)^d

其中 L 是滞后算子,满足:

L X_t = X_{t-1}

d=1 时:

(1-L)X_t = X_t - X_{t-1}

d=2 时:

(1-L)^2 X_t = X_t - 2X_{t-1} + X_{t-2}

分数阶微分的关键是允许 d 取非整数值。例如:

d=0.35

此时不能将差分理解为执行 0.35 次普通减法。实际做法是使用广义二项式展开:

(1-L)^d = Σ_{k=0}^{∞} w_k L^k

权重递推关系通常写为:

w_0 = 1

w_k = -w_{k-1} × (d-k+1)/k

于是,分数阶差分序列可以表示为:

Y_t = Σ_{k=0}^{∞} w_k X_{t-k}

其中:

  • X_t 是原始价格或对数价格;
  • Y_t 是分数阶差分后的序列;
  • w_k 是第 k 个滞后项的权重;
  • d 是差分阶数;
  • k 越大,通常对应越远的历史观测。

d=0 时,权重退化为只保留当前值,结果接近原始序列。

d=1 时,权重退化为普通一阶差分,当前值和上一期值构成主要计算项。

0<d<1 时,更多历史项保留在计算中,但其权重逐步衰减。

为什么不能简单说“保留全部信息”

分数阶微分会保留更多历史信息,但不等于零损失变换。

首先,任何差分都会改变数据表示。原始水平信息经过加权组合后,不再以原序列形式存在。

其次,有限窗口实现会截断无限权重序列。截断后的结果只是近似实现。

再次,较小的 d 可能无法充分消除非平稳性。较大的 d 又会接近一阶差分,重新增加信息损失。

因此,合理表述是:

分数阶微分在平稳性与历史记忆之间提供可调节的折中。

不合理表述是:

分数阶微分能够在完全不损失信息的条件下保证平稳。

后者同时违反统计事实和工程实现逻辑。

d 的变化如何改变输出

可以将 d 看成过滤器强度。

差分阶数输入特征平稳性倾向历史记忆保留典型风险
d=0原始价格或对数价格较弱最大单位根、趋势依赖、训练测试分布变化
0<d<1分数阶差分序列中等,可调中等至较强d 选择不当、窗口截断、验证偏差
d=1一阶差分或收益率较强较弱长期结构被削弱、噪声占比上升

这张表只能描述方向,不能替代检验。某个标的在 d=0.35 时通过平稳性检验,不代表另一个标的也适用同样参数。时间频率变化后,结果也可能改变。

日线、小时线和分钟线不是同一个统计对象。差分阶数不应跨频率复制。

扩展窗口与固定窗口:实现方式决定数据形状

无限权重序列无法在计算机中直接计算。必须截断。

实现分数阶微分时,常见方法包括扩展窗口和固定窗口。两者都基于相同的权重体系,但对计算长度、样本有效区间和工程效率的处理不同。

扩展窗口分数阶微分

扩展窗口方法从当前时点向前使用越来越多的历史数据。窗口长度随时间增长。

优点:

  • 理论上更接近完整权重序列;
  • 能保留更多远期历史;
  • 截断误差相对容易控制;
  • 适合研究长期记忆结构。

缺点:

  • 早期样本可能因历史不足而无法计算;
  • 计算量随着时间增长;
  • 不同时间点使用的有效历史长度不同;
  • 在滚动回测中需要额外管理缓存和边界。

如果数据量不大,扩展窗口更容易作为研究基准。它能减少因为窗口过短而产生的权重截断误差。

但在高频数据或大规模资产池中,扩展窗口会带来明显计算负担。每个时点都重新扫描大量历史数据,没有必要。

固定窗口分数阶微分

固定窗口分数阶微分,通常称为固定宽度窗口分数阶微分,核心做法是预先计算一组权重,只保留窗口内的滞后项。

设窗口宽度为 m,则:

Y_t = Σ_{k=0}^{m} w_k X_{t-k}

k>m 时,权重直接丢弃。

工程上,固定窗口方法更适合批量计算和滚动预测:

  • 每个时间点使用相同数量的历史观测;
  • 可将权重预计算;
  • 可使用向量化矩阵运算;
  • 可使用卷积或缓存减少重复计算;
  • 训练和推理阶段的输入结构一致。

代价是截断误差。窗口太短,远期记忆被过早删除。窗口太长,计算成本增加,边界缺失扩大,且新增权重可能已经接近零。

窗口不是越长越好

窗口长度应由权重衰减和数据规模共同决定。

如果权重在某个滞后点之后已经接近零,继续增加窗口只会增加计算量。相反,如果权重衰减缓慢,过短窗口会明显改变过滤器结构。

可以定义截断误差:

E_m = Σ_{k=m+1}^{∞} |w_k|

实际计算时无法直接得到无限和,可以用足够长的上限近似。工程实现通常设置一个权重阈值,当后续权重绝对值低于阈值时停止扩展。

但阈值也不是越小越好。过小的阈值会增加窗口长度。过大的阈值则可能改变结果。这个参数属于实现参数,不属于金融规律。

边界处理需要单独记录

分数阶微分在样本起始位置缺少完整历史。最简单的做法是将前 m 个结果标记为空值,并在模型训练前删除。

不建议用当前样本均值直接填充这些空值。这样会将边界处理方式混入信号本身,造成分布变化。若使用扩展窗口,也应记录每个时间点实际使用的历史长度。

一个可复现的处理流程至少要保存:

  • 原始价格字段;
  • 是否使用对数价格;
  • 差分阶数 d
  • 权重递推公式;
  • 截断阈值;
  • 实际窗口长度;
  • 空值处理规则;
  • 训练、验证和测试区间;
  • 标准化参数的拟合区间。

如果这些信息缺失,回测结果即使看起来稳定,也无法确认输入变换是否一致。

用 ADF 检验寻找可用的最小 d

目标不是追求最大的平稳性

实际选择中,常见目标是寻找一个尽可能小的 d,使分数阶差分后的序列通过 ADF 检验。

逻辑很直接:

1. 从较小的 d 开始;

2. 对原始序列执行分数阶微分;

3. 使用 ADF 检验评估单位根;

4. 如果不能拒绝单位根假设,提高 d

5. 找到第一个满足阈值的 d

6. 再在相邻参数附近做稳健性测试。

这里的“最小”很重要。因为增大 d 通常会增强差分效果,也会削弱长期记忆。若 d=0.35 已经达到统计目标,就没有理由直接使用 d=1

但 ADF 并不是最终裁判。

ADF 检验的假设结构

ADF 检验的原假设通常是序列存在单位根。检验统计量足够小,且对应的显著性结果满足设定标准时,才可以拒绝原假设。

实际使用时,需要明确:

  • 是否包含常数项;
  • 是否包含趋势项;
  • 滞后阶数如何设置;
  • 显著性水平使用多少;
  • 样本长度是否足够;
  • 检验是否对异常值敏感。

这些设置会影响结果。同一组数据在不同回归项和滞后阶数下,可能得到不同结论。

金融序列还存在结构断点、波动聚集和厚尾分布。ADF 检验只针对特定单位根结构。通过 ADF 不等于序列完全服从正态分布,也不等于方差恒定,更不等于可以直接进行无条件预测。

参数搜索不要污染测试集

d 的选择必须在训练区间或训练加验证区间内完成。测试集只能用于最终评估。

错误流程:

1. 使用全样本计算不同 d

2. 观察哪个 d 的 ADF 结果最好;

3. 用该参数训练模型;

4. 报告测试集结果。

这种流程让测试集参与了参数选择。即使没有直接使用未来目标值,未来价格序列也参与了输入变换参数的确定,仍然存在信息泄漏。

正确流程是:

1. 按时间切分训练集、验证集和测试集;

2. 只用训练集搜索候选 d

3. 在验证集比较平稳性和预测效果;

4. 固定 d 与窗口参数;

5. 重新训练;

6. 仅在最后一次使用测试集。

如果采用滚动回测,则每个训练窗口都应重新执行参数选择,或预先规定参数更新周期。不能在整个样本上只搜索一次,然后假设未来分布保持不变。

一个可执行的搜索流程

可以将候选差分阶数设置为:

d ∈ {0.00, 0.05, 0.10, ..., 1.00}

这只是搜索网格示例,不是固定标准。网格过粗,会错过边界附近的可行值。网格过细,会增加检验次数和多重比较问题。

具体流程可以拆成以下步骤。

1. 确定输入序列

先决定使用收盘价、调整后价格还是对数价格。股票拆分、分红和合约换月会改变序列含义。未经处理的价格跳变可能被误判为非平稳性。

2. 生成权重

根据候选 d 递推生成 w_k。对每个阶数单独计算权重。不能重复使用其他阶数的权重。

3. 确定窗口

根据权重绝对值或累计截断误差确定固定窗口长度。窗口长度应记录在实验配置中。

4. 执行变换

对训练区间计算分数阶差分。前置不足窗口的样本保留为空值,不进行随意填充。

5. 运行 ADF

记录统计量、显著性结果、滞后阶数和有效样本数。只保存“通过”或“不通过”是不够的。

6. 寻找最小可行阶数

在满足检验标准的候选值中,选择较小的 d。如果多个相邻值结果接近,应保留它们进入后续验证。

7. 加入预测指标

ADF 结果只能回答“是否更接近平稳”。它不能回答“是否更适合预测”。还需要比较模型在验证集上的损失、方向准确率、排序指标或其他任务指标。

8. 执行时间序列交叉验证

使用扩展窗口或滚动窗口。禁止随机打乱。随机切分会让未来样本进入训练过程,破坏时间顺序。

9. 检查参数稳定性

观察不同时间窗口、不同资产和不同采样频率下的最优 d 是否剧烈变化。若变化过大,说明参数可能依赖局部样本。

ADF 通过后还要看什么

平稳性检验只是第一层过滤。至少还要观察以下统计结构:

  • 均值是否在不同阶段明显漂移;
  • 方差是否存在波动聚集;
  • 自相关函数是否在长滞后处持续显著;
  • 差分后是否产生大量异常值;
  • 序列是否出现过多空值;
  • 输入分布是否在训练集与验证集之间发生位移;
  • 模型残差是否仍存在明显结构。

如果 d 增大后 ADF 结果改善,但预测性能持续下降,说明平稳性改善可能以有用记忆损失为代价。此时不能只根据检验结果继续增加差分阶数。

ADF 检验筛选的是统计可用性。验证集筛选的是任务可用性。两者不是同一个目标。

d=0.35 与 d=0.45:为什么示例参数不能直接复制

实际研究中,经常会看到 d=0.35d=0.45 一类非整数参数。它们可以作为候选值,但不能作为通用答案。

差分阶数受到多个因素影响:

  • 标的类型;
  • 价格是否经过复权;
  • 数据采样频率;
  • 样本长度;
  • 训练区间位置;
  • 波动率状态;
  • 是否使用价格或对数价格;
  • ADF 的回归项设置;
  • 固定窗口长度;
  • 缺失值与异常值处理方式。

同一资产在日线和分钟线上可能需要不同的 d。同一频率下,样本覆盖不同市场阶段,也可能得到不同的结果。

尤其需要避免一种错误:先在文献或博客中看到一个参数,再把它写入所有标的和所有模型。这样做的本质是把实验条件删除,只保留一个看似精确的数字。

参数搜索的结果应当包含:

项目记录内容
输入序列原始价格、复权价格或对数价格
采样频率日线、小时线或其他频率
候选阶数搜索范围与步长
检验方法ADF 的常数项、趋势项和滞后设置
截断方法扩展窗口或固定窗口
窗口长度实际保留的最大滞后阶数
选择规则最小通过阶数,或结合验证集指标选择
验证方式扩展窗口、滚动窗口或其他时间顺序方案
最终参数d、窗口、标准化和缺失值规则

缺少这些元数据,所谓“最优阶数”无法复现。

分数阶微分进入机器学习模型后,改变了什么

输入不再只是“价格”或“收益率”

机器学习模型并不理解金融概念。它只接收数值矩阵。

如果输入列直接使用价格,模型可能学习价格水平与时间的关系。若输入只使用一阶收益率,模型可能失去部分水平和长期结构。分数阶差分提供了第三种输入形式。

例如,特征矩阵可以包含:

  • 分数阶差分后的对数价格;
  • 一阶收益率;
  • 滚动波动率;
  • 成交量变化;
  • 高低价区间;
  • 滞后项;
  • 技术指标;
  • 市场或行业的同步变量。

分数阶差分后的价格不应被误解为“新的收益率”。它是经过非整数阶过滤后的序列。其单位、尺度和相关结构与原始价格、收益率都不同。

因此,标准化步骤也必须在时间顺序内完成。均值和标准差只能用训练区间估计,然后应用到验证集和测试集。不能使用全样本均值,否则未来分布已经进入训练变换。

与线性模型结合

在线性回归、逻辑回归和线性判别模型中,非平稳输入会直接影响系数估计。

如果两个价格特征都携带明显趋势,模型可能出现虚假回归。拟合优度较高,但样本外关系迅速消失。分数阶微分可以削弱这种趋势依赖,降低某些输入的积分阶数。

但它不会自动消除多重共线性。多个不同阶数的分数阶差分特征同时进入模型时,仍可能高度相关。需要检查相关矩阵、方差膨胀因子或正则化路径。

如果模型使用逻辑回归预测未来方向,目标变量本身也要严格定义。例如,目标是未来一个周期收益率是否为正,还是未来多个周期累计收益率是否为正。输入窗口不能覆盖目标计算区间中的未来价格。

与树模型结合

随机森林、梯度提升树和其他树模型对单调变换的处理方式不同。树模型不要求输入严格服从正态分布,也不直接依赖线性关系。

这并不意味着非平稳输入没有问题。树模型仍可能按照价格区间建立切分规则。当训练区间和测试区间价格尺度发生变化时,原有切分点可能失效。

分数阶差分可以减少价格尺度的绝对影响。但它也可能降低树模型能够利用的水平信息。最终是否有效,要通过严格的时间序列验证比较:

  • 原始价格特征;
  • 一阶收益率特征;
  • 分数阶差分特征;
  • 三者组合;
  • 加入标准化后的对应版本。

不能因为算法名称包含“机器学习”,就预设某种输入一定更好。

与深度学习模型结合

循环神经网络、时间卷积网络和注意力模型可以从序列中提取复杂关系,但模型容量越高,过拟合风险通常越明显。

将原始价格直接输入高容量模型,容易出现以下问题:

  • 模型记住价格尺度;
  • 模型利用时间位置;
  • 训练损失下降但样本外表现不稳定;
  • 改变训练区间后结果大幅变化;
  • 注意力权重集中在不具备稳定因果意义的区段。

分数阶微分可以作为一种输入预处理,降低非平稳趋势的影响。但它不是正则化的替代品。仍然需要:

  • 时间顺序划分;
  • 早停;
  • 权重衰减;
  • 滚动验证;
  • 特征漂移监控;
  • 多阶段回测;
  • 交易成本和滑点处理。

深度模型可能吸收分数阶差分后的残余结构,也可能只是在更复杂的空间里过拟合。模型复杂度不会因为输入变换而自动下降。

回测中最容易出现的五类错误

1. 用全样本选择 d

这是最典型的信息泄漏。

如果使用全样本进行 ADF 检验,再选择差分阶数,测试区间的信息已经参与输入变换设计。即使没有读取未来标签,也会产生前视偏差。

解决方式是将差分阶数搜索嵌入训练流程。每个回测时点只能使用该时点之前的数据。

2. 先对全样本做差分,再切分数据

这个错误更隐蔽。

分数阶微分需要历史窗口。若先对全样本计算,再切分训练集和测试集,测试集前部的变换可能使用了训练集历史。单看这件事未必构成泄漏,因为训练集历史在测试时点本来可见。但如果窗口、权重或标准化参数又使用了测试区间统计量,就会产生边界混淆。

最稳妥的实现是:

  • 先按时间确定数据边界;
  • 在每个训练窗口内生成变换;
  • 将固定参数应用到后续验证和测试;
  • 明确测试区间开始前允许使用的历史范围;
  • 不使用测试区间数据重新估计参数。

3. 把 ADF 通过当作预测能力证明

ADF 只能说明单位根证据减弱。它不能说明未来方向可预测,也不能说明策略能够盈利。

可能出现以下结果:

  • d 增大,ADF 更容易通过;
  • 预测误差没有改善;
  • 方向分类准确率下降;
  • 交易换手率提高;
  • 成本后收益变差;
  • 样本外表现不稳定。

因此,模型选择必须同时包含统计指标和任务指标。

4. 忽略交易成本

如果目标是交易策略,而不是纯统计预测,模型输出最终要转换成仓位。分数阶差分可能改变信号频率、信号滞后和仓位切换次数。

回测至少应考虑:

  • 手续费;
  • 买卖价差;
  • 滑点;
  • 合约乘数;
  • 最小交易单位;
  • 保证金;
  • 持仓限制;
  • 夜盘或停牌等不可交易区间。

一个预测指标略有改善的模型,可能因为换手率上升而失去实际价值。

5. 只报告单一时间段

金融数据存在状态切换。单一牛市、单一低波动阶段或单一高流动性阶段都不足以证明参数稳健。

回测应分割出多个时间区间,至少观察:

  • 低波动阶段;
  • 高波动阶段;
  • 趋势明显阶段;
  • 横盘或震荡阶段;
  • 结构变化前后。

不需要为每个阶段制造叙事。只需要记录指标变化。若模型只能在一个区间有效,参数就不具备稳定性证据。

如何构建一套不依赖主观判断的比较实验

比较原始价格、一阶差分和分数阶差分时,实验设计必须控制变量。

第一步:固定目标

先固定预测目标。例如:

  • 预测下一周期收益率;
  • 预测未来若干周期方向;
  • 预测未来波动率;
  • 预测横截面排序。

不能在比较输入特征的同时修改目标窗口。否则无法判断性能变化来自数据变换,还是来自目标定义变化。

第二步:固定模型

至少使用一个低容量基准模型和一个非线性模型。

低容量模型用于观察输入与目标之间的基本关系。非线性模型用于测试分数阶差分是否提供额外信息。

如果只使用一个高容量模型,模型结构本身可能掩盖输入差异。

第三步:固定特征数量

比较时,不能让原始价格方案只有一列,而分数阶差分方案加入二十个辅助指标。这样的结果没有解释价值。

合理做法包括:

  • 只替换价格主特征;
  • 保持辅助特征完全相同;
  • 同时测试单一输入和组合输入;
  • 记录每个特征的生成窗口;
  • 保证所有特征不使用未来数据。

第四步:使用时间序列验证

随机交叉验证不适合时间依赖数据。应使用扩展窗口或滚动窗口。

扩展窗口的训练集不断增加。适合假设历史数据仍然有部分长期价值的场景。

滚动窗口保持训练长度固定。适合统计结构变化较快的场景。

两者都不能自动解决数据泄漏。关键仍是每个验证区间只能接收过去信息。

第五步:同时记录多个指标

根据任务选择指标:

  • 回归任务:均方误差、平均绝对误差、方向一致性;
  • 分类任务:准确率、精确率、召回率、概率损失;
  • 排序任务:秩相关、分组收益差;
  • 交易任务:成本后收益、最大回撤、换手率、收益波动。

不建议只看准确率。金融分类任务中,类别比例和收益分布可能让准确率失去解释力。

也不建议只看累计收益。累计收益无法单独解释风险、换手和样本数量。

一个适合记录实验的结果表

方案平稳性表现记忆保留样本有效长度预测误差交易换手
原始价格通常较弱需实测需实测
一阶差分通常较强较弱高,边界简单需实测需实测
分数阶差分依赖 d可调受窗口影响需实测需实测

这不是结果表,而是实验框架。真正的结论必须填入同一数据区间、同一模型、同一成本假设下的实测值。

分数阶微分的局限性

平稳性不是唯一的可预测性来源

一个序列可以接近平稳,但预测关系依然很弱。金融收益率中常见的线性自相关可能很低,但波动率、尾部风险或横截面关系仍然存在。

分数阶微分主要处理输入序列的积分和记忆结构。它不直接解决:

  • 目标变量定义错误;
  • 标签噪声;
  • 结构断点;
  • 流动性变化;
  • 交易成本;
  • 数据缺失;
  • 资产间依赖;
  • 宏观变量滞后;
  • 模型过拟合。

不要把一个差分算子扩展为完整策略。

ADF 结果可能不稳定

ADF 对样本区间、滞后阶数和趋势项设置敏感。结构断点也会影响检验结果。某个窗口中通过,不代表未来窗口仍然通过。

因此,应当观察 d 的滚动选择结果。如果最小可行阶数在相邻窗口之间频繁跳跃,说明序列的统计结构可能不稳定,或者检验样本不足。

这种情况下,可以考虑:

  • 使用固定参数并评估稳健性;
  • 以滚动窗口重新估计;
  • 比较不同平稳性检验;
  • 降低模型复杂度;
  • 将参数变化本身作为监控指标。

不能通过无限调参消除结构变化。

固定窗口会牺牲一部分远期信息

固定窗口的本质是截断。窗口越短,计算越快,但历史尾部被删除得越早。窗口越长,理论记忆保留更多,但有效样本减少,计算量增加。

这是一项工程取舍。没有绝对正确的窗口长度。

如果策略持有周期很短,过长的记忆窗口未必有价值。它可能只会把更多低信噪比信息带入模型。

如果目标变量依赖较长周期结构,过短窗口则可能丢失有效信息。

窗口选择应与预测周期、数据频率、样本长度和模型容量一起评估。

分数阶微分可能放大噪声

差分操作通常会增强变化项。随着 d 增大,短期扰动可能被放大,序列波动变得更明显。

如果原始价格中包含大量微观结构噪声,特别是在高频数据中,分数阶微分不会自动去噪。它可能让噪声更容易进入模型。

需要区分两个问题:

  • 差分阶数是否合适;
  • 原始数据是否具有足够的信噪比。

前者不能替代后者。

参数优化:从“找到一个数字”转向“控制不确定性”

分数阶微分最容易被误用为一个新颖参数。正确做法是把它作为实验组件进行管理。

使用参数区间,而不是迷信单点

如果 d=0.35d=0.40d=0.45 在多个验证窗口内表现接近,应优先选择更稳定、更容易解释的参数,而不是追求某个窗口中的极小误差。

单点最优往往意味着更高的过拟合风险。尤其当候选参数很多、验证窗口很多时,必然会出现偶然最优。

可以记录:

  • 每个窗口的最小可行 d
  • 每个窗口的验证误差;
  • 参数变化范围;
  • 预测指标的标准差;
  • 成本后收益的变化;
  • 参数扰动后的性能下降幅度。

如果参数轻微变化就导致结果反转,模型对输入变换过于敏感。

对 d 做稳定性测试

设基准参数为 d*,可以测试:

d* - 0.05

d*

d* + 0.05

同时固定其他条件。若模型只在 d* 上表现良好,邻近参数全部失效,需要怀疑参数搜索过拟合。

这种测试不证明模型有效,但能检测模型是否依赖极窄的参数区域。

分离统计选择与交易选择

第一阶段可以用 ADF 评估平稳性。

第二阶段用验证集评估预测能力。

第三阶段加入交易成本和执行约束。

这三个阶段不能混为一个目标函数,否则很难知道模型到底在优化什么。

如果最终目标是交易策略,则不能只选择 ADF 最优的 d。如果最终目标是时间序列建模或统计分析,则也不能只根据收益曲线选择参数。

参数必须服务于明确目标。

保留基准模型

任何分数阶微分实验都应保留至少两个基准:

  • 原始价格或对数价格;
  • 一阶差分或收益率。

如果分数阶差分没有显著超越基准,它就没有必要被保留。复杂度本身不是价值。

另外,比较时应控制:

  • 相同训练区间;
  • 相同测试区间;
  • 相同目标;
  • 相同模型;
  • 相同特征;
  • 相同成本;
  • 相同缺失值规则。

否则结果没有可比性。

一套最小但完整的实现逻辑

如果需要将方法落地为研究代码,逻辑顺序可以压缩为以下步骤。

1. 读取并校验原始数据

检查时间索引是否单调,是否存在重复时间戳,是否有缺失价格,是否发生拆分、分红或合约换月。数据清洗先于差分。

2. 选择价格表示

明确使用原始价格、复权价格或对数价格。选择结果写入配置文件,不依赖代码中的默认值。

3. 切分时间区间

按时间划分训练、验证和测试。不要在切分后重新打乱顺序。

4. 在训练区间搜索 d

生成候选权重,执行固定窗口或扩展窗口分数阶微分。对每个候选参数运行 ADF,并记录完整统计结果。

5. 筛选最小可行阶数

选择能够满足平稳性目标的较小 d。如果多个候选值接近,保留为稳健性测试集合。

6. 在验证集比较模型

使用相同模型和相同目标。比较原始价格、一阶差分和分数阶差分输入。

7. 锁定变换参数

确定 d、窗口长度、截断阈值、标准化方式和空值规则。测试集不再参与选择。

8. 执行滚动或扩展回测

每个时点只使用过去数据。若研究设置允许参数更新,应预先规定更新频率,而不是根据结果临时调整。

9. 加入成本和约束

将模型输出转换为交易信号或仓位时,加入手续费、滑点、持仓和交易单位限制。

10. 进行参数扰动

测试邻近的 d、不同窗口和不同训练长度。记录性能分布,不只记录最佳结果。

11. 输出局限性

明确模型对结构断点、数据频率、样本长度和参数漂移的敏感程度。没有局限性记录的回测结论不完整。

这套流程不保证得到更高收益。它只保证实验过程更接近可审计状态。

最终判断:保留多少记忆,由目标函数决定

原始价格和一阶收益率不是互相替代的“正确答案”。它们代表两个不同的统计选择。

原始价格保留历史水平,但容易携带非平稳性。

一阶差分提高平稳性,但可能削弱长期依赖。

分数阶微分允许在两者之间搜索。它的价值不在于制造一个听起来更复杂的特征,而在于提供可调节的差分强度。

对金融时间序列建模而言,合理的默认顺序是:

1. 先确认原始数据定义;

2. 再判断非平稳性;

3. 以原始价格和一阶差分建立基准;

4. 使用 ADF 等检验搜索较小的分数阶;

5. 通过时间序列验证确认预测价值;

6. 使用滚动回测检查参数稳定性;

7. 将交易成本和样本外结果纳入最终判断。

d=0.35d=0.45 都只是候选参数。最优值不存在跨标的、跨频率、跨时间区间的永久有效性。

参数优化的终点不是找到一个漂亮数字,而是证明模型对合理参数扰动不敏感,并且在严格样本外条件下仍然保持可解释的统计表现。

如果分数阶微分只改善 ADF,却没有改善验证集和成本后结果,应当删除它。

如果它在多个时间窗口内稳定优于原始价格和一阶差分,才有资格进入生产模型。

剩下的不是行情预测问题。是参数、窗口和数据分布变化下的模型边界问题。

Related reading: 强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟 and 金融时间序列的交叉验证:如何用清洗与禁运防止量化模型过拟合.

常见问题

为什么不能直接将原始价格输入机器学习模型?
原始价格通常具有非平稳特征,均值和方差随时间变化。直接输入会导致模型学习到趋势和尺度等伪规律,而非可重复的统计关系。
分数阶微分是否能实现“无损”平稳化?
不能。分数阶微分本质上是改变信息保留与统计性质之间的权重,任何差分变换都会改变原始数据的表示,且工程实现中必须进行窗口截断。
如何确定分数阶微分的最佳差分阶数 d?
应在训练集内通过 ADF 检验寻找能使序列平稳的最小 d 值,并结合验证集上的预测效果进行筛选,严禁使用全样本搜索以防信息泄漏。
固定窗口与扩展窗口在实现上有什么区别?
扩展窗口随时间增长,理论上更接近完整权重序列但计算负担重;固定窗口预先计算权重并截断,适合批量计算和滚动预测,但存在截断误差。
ADF 检验通过是否意味着模型一定能盈利?
不意味着。ADF 检验仅筛选统计可用性,而模型盈利还受限于目标定义、交易成本、滑点、结构断点及模型过拟合等多种因素。