这行代码简单。代价也简单:当 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.35、d=0.45 一类非整数参数。它们可以作为候选值,但不能作为通用答案。
差分阶数受到多个因素影响:
- 标的类型;
- 价格是否经过复权;
- 数据采样频率;
- 样本长度;
- 训练区间位置;
- 波动率状态;
- 是否使用价格或对数价格;
- ADF 的回归项设置;
- 固定窗口长度;
- 缺失值与异常值处理方式。
同一资产在日线和分钟线上可能需要不同的 d。同一频率下,样本覆盖不同市场阶段,也可能得到不同的结果。
尤其需要避免一种错误:先在文献或博客中看到一个参数,再把它写入所有标的和所有模型。这样做的本质是把实验条件删除,只保留一个看似精确的数字。
参数搜索的结果应当包含:
| 项目 | 记录内容 |
|---|---|
| 输入序列 | 原始价格、复权价格或对数价格 |
| 采样频率 | 日线、小时线或其他频率 |
| 候选阶数 | 搜索范围与步长 |
| 检验方法 | ADF 的常数项、趋势项和滞后设置 |
| 截断方法 | 扩展窗口或固定窗口 |
| 窗口长度 | 实际保留的最大滞后阶数 |
| 选择规则 | 最小通过阶数,或结合验证集指标选择 |
| 验证方式 | 扩展窗口、滚动窗口或其他时间顺序方案 |
| 最终参数 | d、窗口、标准化和缺失值规则 |
缺少这些元数据,所谓“最优阶数”无法复现。
分数阶微分进入机器学习模型后,改变了什么
输入不再只是“价格”或“收益率”
机器学习模型并不理解金融概念。它只接收数值矩阵。
如果输入列直接使用价格,模型可能学习价格水平与时间的关系。若输入只使用一阶收益率,模型可能失去部分水平和长期结构。分数阶差分提供了第三种输入形式。
例如,特征矩阵可以包含:
- 分数阶差分后的对数价格;
- 一阶收益率;
- 滚动波动率;
- 成交量变化;
- 高低价区间;
- 滞后项;
- 技术指标;
- 市场或行业的同步变量。
分数阶差分后的价格不应被误解为“新的收益率”。它是经过非整数阶过滤后的序列。其单位、尺度和相关结构与原始价格、收益率都不同。
因此,标准化步骤也必须在时间顺序内完成。均值和标准差只能用训练区间估计,然后应用到验证集和测试集。不能使用全样本均值,否则未来分布已经进入训练变换。
与线性模型结合
在线性回归、逻辑回归和线性判别模型中,非平稳输入会直接影响系数估计。
如果两个价格特征都携带明显趋势,模型可能出现虚假回归。拟合优度较高,但样本外关系迅速消失。分数阶微分可以削弱这种趋势依赖,降低某些输入的积分阶数。
但它不会自动消除多重共线性。多个不同阶数的分数阶差分特征同时进入模型时,仍可能高度相关。需要检查相关矩阵、方差膨胀因子或正则化路径。
如果模型使用逻辑回归预测未来方向,目标变量本身也要严格定义。例如,目标是未来一个周期收益率是否为正,还是未来多个周期累计收益率是否为正。输入窗口不能覆盖目标计算区间中的未来价格。
与树模型结合
随机森林、梯度提升树和其他树模型对单调变换的处理方式不同。树模型不要求输入严格服从正态分布,也不直接依赖线性关系。
这并不意味着非平稳输入没有问题。树模型仍可能按照价格区间建立切分规则。当训练区间和测试区间价格尺度发生变化时,原有切分点可能失效。
分数阶差分可以减少价格尺度的绝对影响。但它也可能降低树模型能够利用的水平信息。最终是否有效,要通过严格的时间序列验证比较:
- 原始价格特征;
- 一阶收益率特征;
- 分数阶差分特征;
- 三者组合;
- 加入标准化后的对应版本。
不能因为算法名称包含“机器学习”,就预设某种输入一定更好。
与深度学习模型结合
循环神经网络、时间卷积网络和注意力模型可以从序列中提取复杂关系,但模型容量越高,过拟合风险通常越明显。
将原始价格直接输入高容量模型,容易出现以下问题:
- 模型记住价格尺度;
- 模型利用时间位置;
- 训练损失下降但样本外表现不稳定;
- 改变训练区间后结果大幅变化;
- 注意力权重集中在不具备稳定因果意义的区段。
分数阶微分可以作为一种输入预处理,降低非平稳趋势的影响。但它不是正则化的替代品。仍然需要:
- 时间顺序划分;
- 早停;
- 权重衰减;
- 滚动验证;
- 特征漂移监控;
- 多阶段回测;
- 交易成本和滑点处理。
深度模型可能吸收分数阶差分后的残余结构,也可能只是在更复杂的空间里过拟合。模型复杂度不会因为输入变换而自动下降。
回测中最容易出现的五类错误
1. 用全样本选择 d
这是最典型的信息泄漏。
如果使用全样本进行 ADF 检验,再选择差分阶数,测试区间的信息已经参与输入变换设计。即使没有读取未来标签,也会产生前视偏差。
解决方式是将差分阶数搜索嵌入训练流程。每个回测时点只能使用该时点之前的数据。
2. 先对全样本做差分,再切分数据
这个错误更隐蔽。
分数阶微分需要历史窗口。若先对全样本计算,再切分训练集和测试集,测试集前部的变换可能使用了训练集历史。单看这件事未必构成泄漏,因为训练集历史在测试时点本来可见。但如果窗口、权重或标准化参数又使用了测试区间统计量,就会产生边界混淆。
最稳妥的实现是:
- 先按时间确定数据边界;
- 在每个训练窗口内生成变换;
- 将固定参数应用到后续验证和测试;
- 明确测试区间开始前允许使用的历史范围;
- 不使用测试区间数据重新估计参数。
3. 把 ADF 通过当作预测能力证明
ADF 只能说明单位根证据减弱。它不能说明未来方向可预测,也不能说明策略能够盈利。
可能出现以下结果:
d增大,ADF 更容易通过;- 预测误差没有改善;
- 方向分类准确率下降;
- 交易换手率提高;
- 成本后收益变差;
- 样本外表现不稳定。
因此,模型选择必须同时包含统计指标和任务指标。
4. 忽略交易成本
如果目标是交易策略,而不是纯统计预测,模型输出最终要转换成仓位。分数阶差分可能改变信号频率、信号滞后和仓位切换次数。
回测至少应考虑:
- 手续费;
- 买卖价差;
- 滑点;
- 合约乘数;
- 最小交易单位;
- 保证金;
- 持仓限制;
- 夜盘或停牌等不可交易区间。
一个预测指标略有改善的模型,可能因为换手率上升而失去实际价值。
5. 只报告单一时间段
金融数据存在状态切换。单一牛市、单一低波动阶段或单一高流动性阶段都不足以证明参数稳健。
回测应分割出多个时间区间,至少观察:
- 低波动阶段;
- 高波动阶段;
- 趋势明显阶段;
- 横盘或震荡阶段;
- 结构变化前后。
不需要为每个阶段制造叙事。只需要记录指标变化。若模型只能在一个区间有效,参数就不具备稳定性证据。
如何构建一套不依赖主观判断的比较实验
比较原始价格、一阶差分和分数阶差分时,实验设计必须控制变量。
第一步:固定目标
先固定预测目标。例如:
- 预测下一周期收益率;
- 预测未来若干周期方向;
- 预测未来波动率;
- 预测横截面排序。
不能在比较输入特征的同时修改目标窗口。否则无法判断性能变化来自数据变换,还是来自目标定义变化。
第二步:固定模型
至少使用一个低容量基准模型和一个非线性模型。
低容量模型用于观察输入与目标之间的基本关系。非线性模型用于测试分数阶差分是否提供额外信息。
如果只使用一个高容量模型,模型结构本身可能掩盖输入差异。
第三步:固定特征数量
比较时,不能让原始价格方案只有一列,而分数阶差分方案加入二十个辅助指标。这样的结果没有解释价值。
合理做法包括:
- 只替换价格主特征;
- 保持辅助特征完全相同;
- 同时测试单一输入和组合输入;
- 记录每个特征的生成窗口;
- 保证所有特征不使用未来数据。
第四步:使用时间序列验证
随机交叉验证不适合时间依赖数据。应使用扩展窗口或滚动窗口。
扩展窗口的训练集不断增加。适合假设历史数据仍然有部分长期价值的场景。
滚动窗口保持训练长度固定。适合统计结构变化较快的场景。
两者都不能自动解决数据泄漏。关键仍是每个验证区间只能接收过去信息。
第五步:同时记录多个指标
根据任务选择指标:
- 回归任务:均方误差、平均绝对误差、方向一致性;
- 分类任务:准确率、精确率、召回率、概率损失;
- 排序任务:秩相关、分组收益差;
- 交易任务:成本后收益、最大回撤、换手率、收益波动。
不建议只看准确率。金融分类任务中,类别比例和收益分布可能让准确率失去解释力。
也不建议只看累计收益。累计收益无法单独解释风险、换手和样本数量。
一个适合记录实验的结果表
| 方案 | 平稳性表现 | 记忆保留 | 样本有效长度 | 预测误差 | 交易换手 |
|---|---|---|---|---|---|
| 原始价格 | 通常较弱 | 高 | 高 | 需实测 | 需实测 |
| 一阶差分 | 通常较强 | 较弱 | 高,边界简单 | 需实测 | 需实测 |
| 分数阶差分 | 依赖 d | 可调 | 受窗口影响 | 需实测 | 需实测 |
这不是结果表,而是实验框架。真正的结论必须填入同一数据区间、同一模型、同一成本假设下的实测值。
分数阶微分的局限性
平稳性不是唯一的可预测性来源
一个序列可以接近平稳,但预测关系依然很弱。金融收益率中常见的线性自相关可能很低,但波动率、尾部风险或横截面关系仍然存在。
分数阶微分主要处理输入序列的积分和记忆结构。它不直接解决:
- 目标变量定义错误;
- 标签噪声;
- 结构断点;
- 流动性变化;
- 交易成本;
- 数据缺失;
- 资产间依赖;
- 宏观变量滞后;
- 模型过拟合。
不要把一个差分算子扩展为完整策略。
ADF 结果可能不稳定
ADF 对样本区间、滞后阶数和趋势项设置敏感。结构断点也会影响检验结果。某个窗口中通过,不代表未来窗口仍然通过。
因此,应当观察 d 的滚动选择结果。如果最小可行阶数在相邻窗口之间频繁跳跃,说明序列的统计结构可能不稳定,或者检验样本不足。
这种情况下,可以考虑:
- 使用固定参数并评估稳健性;
- 以滚动窗口重新估计;
- 比较不同平稳性检验;
- 降低模型复杂度;
- 将参数变化本身作为监控指标。
不能通过无限调参消除结构变化。
固定窗口会牺牲一部分远期信息
固定窗口的本质是截断。窗口越短,计算越快,但历史尾部被删除得越早。窗口越长,理论记忆保留更多,但有效样本减少,计算量增加。
这是一项工程取舍。没有绝对正确的窗口长度。
如果策略持有周期很短,过长的记忆窗口未必有价值。它可能只会把更多低信噪比信息带入模型。
如果目标变量依赖较长周期结构,过短窗口则可能丢失有效信息。
窗口选择应与预测周期、数据频率、样本长度和模型容量一起评估。
分数阶微分可能放大噪声
差分操作通常会增强变化项。随着 d 增大,短期扰动可能被放大,序列波动变得更明显。
如果原始价格中包含大量微观结构噪声,特别是在高频数据中,分数阶微分不会自动去噪。它可能让噪声更容易进入模型。
需要区分两个问题:
- 差分阶数是否合适;
- 原始数据是否具有足够的信噪比。
前者不能替代后者。
参数优化:从“找到一个数字”转向“控制不确定性”
分数阶微分最容易被误用为一个新颖参数。正确做法是把它作为实验组件进行管理。
使用参数区间,而不是迷信单点
如果 d=0.35、d=0.40、d=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.35 或 d=0.45 都只是候选参数。最优值不存在跨标的、跨频率、跨时间区间的永久有效性。
参数优化的终点不是找到一个漂亮数字,而是证明模型对合理参数扰动不敏感,并且在严格样本外条件下仍然保持可解释的统计表现。
如果分数阶微分只改善 ADF,却没有改善验证集和成本后结果,应当删除它。
如果它在多个时间窗口内稳定优于原始价格和一阶差分,才有资格进入生产模型。
剩下的不是行情预测问题。是参数、窗口和数据分布变化下的模型边界问题。
Related reading: 强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟 and 金融时间序列的交叉验证:如何用清洗与禁运防止量化模型过拟合.
