原因明确。原始价格序列往往非平稳,但保留了完整的历史水平信息。一阶差分或收益率序列更接近平稳,却会丢失价格路径中的长期记忆。两端都不理想。
分数阶微分提供了连续的中间状态。差分阶数不再只有 \(d=0\) 或 \(d=1\),而是在区间 \(d\in[0,1]\) 内搜索满足平稳性要求的最小值。目标不是让序列看起来更复杂。目标是减少非平稳性,同时尽可能保留可用于预测的历史信息。
核心计算可以写成:
\[
\tilde{X}t=\sum{k=0}^{\infty}w_kX_{t-k}
\]
其中:
\[
w_0=1,\qquad w_k=-w_{k-1}\frac{d-k+1}{k}
\]
\(d\) 是分数阶差分阶数。\(w_k\) 是由二项式展开产生的幂律衰减权重。与一阶差分相比,历史样本不会被一次性切断,而是按照权重逐步衰减。
这不是收益率的替代品。也不是盈利保证。它只是一个特征变换。
价格序列的两种极端状态
金融时间序列中的差分问题,本质上是信息保留和统计平稳性的冲突。
设原始价格序列为 \(X_t\)。
当 \(d=0\) 时:
\[
X_t^{(0)}=X_t
\]
没有执行差分。价格水平被完整保留。长期记忆也被保留。但序列通常非平稳。均值、方差和协方差结构可能随时间变化。
当 \(d=1\) 时:
\[
X_t^{(1)}=X_t-X_{t-1}
\]
得到一阶差分。实际交易中常见的简单收益率、对数收益率,均属于这一类思想。序列的平稳性通常改善,但历史价格水平不再直接存在。
这里的“记忆”不是主观概念。它指的是序列中由历史价格水平、滞后关系和长期依赖结构携带的信息。价格本身包含路径信息。收益率只保留局部变化。
机器学习模型需要稳定的统计分布。若训练集中的均值与方差和测试集差异过大,模型学习到的可能是时间段差异,不是可重复的关系。
但过度差分也会产生问题。模型输入变得更平稳,却失去与价格水平相关的结构。结果不是更稳,而是信息密度下降。
| 差分状态 | 序列形式 | 主要特征 | 主要问题 |
|---|---|---|---|
| \(d=0\) | 原始价格 | 保留完整价格水平和长期记忆 | 通常非平稳,容易违反模型假设 |
| \(0<d<1\) | 分数阶差分 | 在平稳性和记忆保留之间连续调节 | 需要搜索阶数,计算成本更高 |
| \(d=1\) | 一阶差分或收益率 | 平稳性通常更好,计算简单 | 长期价格水平信息基本被抹去 |
分数阶差分的价值就在中间区域。不是因为中间一定更优,而是因为它允许使用数据搜索,而不是预先接受二元选择。
\(d=0\) 保留过多非平稳结构,\(d=1\) 删除过多历史信息。分数阶差分只是在两种损失之间寻找可测量的折中。
分数阶差分的数学机制
分数阶差分来自差分算子的推广。
整数阶差分使用有限项。例如,一阶差分只需要当前值和前一时刻值。二阶差分继续扩大有限窗口。分数阶差分不同。它通过二项式展开形成一组缓慢衰减的历史权重。
写成算子形式:
\[
(1-L)^d
\]
其中 \(L\) 是滞后算子,满足:
\[
LX_t=X_{t-1}
\]
当 \(d=1\) 时:
\[
(1-L)X_t=X_t-X_{t-1}
\]
当 \(d\) 为非整数时,展开式不再在有限项处结束:
\[
(1-L)^d=1-dL+\frac{d(d-1)}{2!}L^2-\frac{d(d-1)(d-2)}{3!}L^3+\cdots
\]
因此,当前观测值会与多个历史观测值发生线性组合。历史越远,权重通常越小。但权重衰减并不等于立即归零。
这一点决定了它与普通收益率的差异。
普通一阶差分只依赖两个相邻价格点。分数阶差分则保留了一段更长的历史窗口。窗口越长,所保留的记忆越多;同时,计算量和边界处理复杂度也会提高。
理论表达式包含无限历史。工程实现不能使用无限长度。必须截断。
常见截断方式有两种:
1. 当权重绝对值小于给定阈值时停止。
2. 直接设定固定窗口长度,只使用最近的若干个历史观测值。
设权重阈值为 \(\tau\)。当:
\[
|w_k|<\tau
\]
且后续权重已足够小,可以停止继续扩展窗口。
但阈值不是无关紧要的配置。阈值过大,历史记忆被过早截断。阈值过小,计算成本增加,边界样本减少,模型训练速度下降。不同资产、不同频率和不同模型架构下,阈值对泛化性能的影响不能直接外推。
事实需要分开处理。
- 差分阶数 \(d\) 决定权重衰减结构。
- 截断阈值决定历史窗口长度。
- 数据频率决定相邻观测的时间含义。
- 模型结构决定特征变换后的使用方式。
- 交易成本和执行延迟不属于分数阶差分本身。
如果把这些参数混在一起调节,结果无法解释。
用平稳性检验搜索最小阶数
工程目标通常不是寻找一个看起来合理的 \(d\),而是搜索使序列达到平稳状态的最小阶数。
设候选集合为:
\[
D=\{0,d_1,d_2,\ldots,1\}
\]
按照从小到大的顺序计算分数阶差分序列。对每个序列执行增广迪基—福勒检验,也就是常说的自动单位根检验。
在显著性水平 \(p<0.05\) 的条件下,找到第一个满足平稳性要求的阶数:
\[
d^*=\min\{d:\text{ADF}(X_t^{(d)})<0.05\}
\]
这里的 \(d^*\) 只是统计意义上的候选结果。不能把它理解为市场的固定属性。
某个股票的日线价格可能在一段时期内对应较小的平稳阶数。换一段时期,结构变化、波动聚集或价格趋势变化都可能改变检验结果。期货连续合约、加密资产和高频数据也不应共用一个预设值。
实际搜索流程可以拆成几个模块。
第一步:明确输入序列
先确定到底对什么做分数阶差分。
可以使用:
- 收盘价;
- 复权价格;
- 对数价格;
- 连续合约价格;
- 经过数据清洗的其他价格序列。
不能直接忽略数据定义。
复权处理会改变历史价格路径。期货换月会产生跳变。不同交易所的交易时段不同。加密资产存在连续交易和高频缺失问题。输入序列不一致,\(d^*\) 没有可比性。
对数价格的使用也不是自动正确。它通常有利于处理乘法变化,但并不等于解决平稳性问题。仍然需要检验。
第二步:生成候选阶数
不要只测试 \(d=0.5\)。
\(d=0.5\) 只是常见示例,不是通用最优值。搜索范围可以覆盖 \(0\) 到 \(1\) 的连续区间或离散网格。网格步长影响计算成本和最终精度。
如果候选阶数过稀,可能错过满足条件的更小阶数。候选阶数过密,统计检验的重复次数增加,计算收益下降。
更重要的是,网格不是越细越好。ADF 检验本身受样本长度、滞后阶数和结构变化影响。将 \(d\) 从小数点后两位调整到三位,不会自动带来更可靠的结论。
第三步:计算权重
根据递推关系生成:
\[
w_0,w_1,w_2,\ldots,w_k
\]
不建议每个时间点重复从头展开。权重只由 \(d\) 决定,可以预先计算。
数据量较大时,应将权重计算和卷积计算分离。先生成权重向量,再执行滑动加权。这样便于缓存,也便于比较不同窗口长度。
数值精度需要控制。权重长尾较长时,浮点累加误差会逐步积累。高频数据中,样本量可能很大。若使用分布式计算,需要确保不同分片在边界处能够取得完整历史窗口。
第四步:形成差分序列
固定窗口形式可以写成:
\[
\tilde{X}t=\sum{k=0}^{K}w_kX_{t-k}
\]
其中 \(K\) 由权重阈值或固定窗口长度决定。
前 \(K\) 个样本无法获得完整历史。处理方式通常有三种:
- 直接丢弃;
- 使用不完整窗口;
- 使用填充方法。
三者不能混用后再假设样本同分布。
对于金融特征,直接丢弃边界样本通常更容易解释。使用不完整窗口会让不同时间点的权重结构发生变化。填充会引入额外假设。若模型对早期样本敏感,边界处理可能改变训练结果。
第五步:执行平稳性检验
ADF 检验返回统计量和 \(p\) 值。低于设定显著性水平时,可以拒绝单位根存在的原假设。
但这不代表序列满足所有模型条件。
ADF 主要针对单位根问题。它不能完整说明:
- 方差是否恒定;
- 是否存在结构突变;
- 是否存在异方差;
- 是否存在季节性;
- 是否存在异常值影响;
- 不同时间段的相关结构是否稳定。
因此,不能把 ADF 结果直接等价于“数据已经可用”。
平稳性是输入条件的一部分。不是模型质量的证明。
扩展窗口法与固定窗口法
分数阶差分的实现通常分为扩展窗口法和固定窗口法。
扩展窗口法尽可能保留历史。随着时间向前推进,计算窗口不断扩大。理论上,它更接近无限历史定义。历史信息保留更完整。
代价也明确:
- 计算量随时间增加;
- 每个样本依赖的历史长度不同;
- 大型数据集不易并行;
- 边界和内存管理更加复杂。
固定窗口法,也称固定宽度分数阶差分,使用固定长度的历史窗口。超过窗口的权重直接截断。
它不是精确的无限历史实现。它是工程近似。
固定窗口法的优势:
- 计算复杂度更稳定;
- 适合滚动计算;
- 便于并行;
- 更容易控制内存;
- 可以降低某些前向偏差风险。
但它也会引入截断误差。窗口越短,历史保留越少。窗口越长,计算成本越高。不能只因为固定窗口更快,就假设结果更优。
| 实现方式 | 历史处理 | 计算特征 | 适用场景 | 主要风险 |
|---|---|---|---|---|
| 扩展窗口法 | 随时间不断纳入更远历史 | 计算量持续增加 | 小规模研究、理论核对 | 窗口长度变化,资源消耗高 |
| 固定窗口法 | 只保留最近固定长度 | 计算开销可控 | 滚动特征、生产系统 | 截断历史,产生近似误差 |
| 阈值截断 | 权重低于阈值后停止 | 窗口由 \(d\) 和阈值共同决定 | 需要平衡精度与速度的任务 | 阈值影响记忆保留 |
| 直接一阶差分 | 仅保留相邻变化 | 速度快,结构简单 | 基线模型、收益率预测 | 丢失价格水平信息 |
“降低前向偏差”需要准确理解。
如果特征工程使用了未来数据,模型评估会失真。分数阶差分本身不是自动防止前向偏差的工具。问题取决于权重生成、窗口计算、标准化和数据切分的顺序。
生产环境应当保证:
- 当前时点只使用当前及之前的数据;
- 差分窗口不能跨越未来边界;
- ADF 搜索不能使用测试集;
- 权重和阈值的选择不能通过测试集结果反向确定;
- 标准化参数只能由训练区间估计;
- 滚动预测时每个时间点独立生成可用特征。
如果先用全样本选择 \(d\),再切分训练集和测试集,测试区间已经参与参数决策。即使差分公式没有显式使用未来价格,也存在数据泄漏。
这类错误不会在代码运行时报警。只能通过数据流程审计发现。
数据清洗先于分数阶差分
分数阶差分不会修复脏数据。
它只执行线性加权。
输入中的错误会被传入输出。由于权重覆盖历史,单个异常值可能影响多个后续观测。
处理金融数据时,先建立清洗层。至少需要明确以下问题。
- 时间戳是否严格递增;
- 是否存在重复时间点;
- 缺失值如何处理;
- 停牌、无成交和零成交量如何区分;
- 价格是否经过复权;
- 合约换月是否造成不连续跳变;
- 不同来源的时区是否统一;
- 开高低收之间是否满足基本价格关系;
- 极端值是市场观测还是数据错误。
不要在分数阶差分之后再回头修复原始数据。那样会让错误权重已经进入多个样本。
缺失值的处理
缺失值不能简单地全部前向填充。
价格序列中的短时缺失、交易中断、停牌和数据源丢包不是同一个问题。前向填充会人为制造零变化。对于一阶差分,它会直接产生一段人为收益率;对于分数阶差分,它会改变多个滞后项的加权结果。
如果必须填充,应记录填充标记。模型可以将其作为质量特征,或者直接排除相关窗口。
复权与合约连续化
股票价格的拆分、分红和复权会改变历史价格水平。分数阶差分对价格水平敏感,因此复权口径必须固定。
期货连续合约更复杂。换月跳点可能被模型当成真实价格变化。若先做分数阶差分,跳点会沿着权重窗口传播。连续化方法和换月规则必须在特征工程前确定。
这里没有统一答案。关键是让输入价格的统计含义稳定。
异常值
异常价格会被加权传播。权重虽会衰减,但不会瞬间消失。
处理异常值时,需要区分:
- 数据录入错误;
- 交易所真实极端行情;
- 流动性不足导致的异常报价;
- 复权或换月造成的结构跳变。
不能因为某个点破坏平稳性,就直接删除。删除本身可能改变价格路径。应保留清洗记录,并在模型评估中进行敏感性分析。
在机器学习特征工程中的位置
分数阶差分属于特征变换层。它不是预测模型。
一个完整的数据流程可以拆成:
1. 原始行情接入。
2. 时间对齐与数据清洗。
3. 价格口径统一。
4. 候选阶数搜索。
5. 权重生成与窗口截断。
6. 分数阶差分计算。
7. 其他特征计算。
8. 训练集拟合。
9. 滚动验证。
10. 样本外评估。
顺序不能随意调整。
如果先用全样本计算均值、标准差、相关系数或 \(d^*\),再进行训练测试切分,结果就不再是严格的样本外评估。
训练集与测试集
推荐使用时间顺序切分。不能随机打乱金融时序。
原因不复杂。随机切分会把相邻时间段分散到训练集和测试集。分数阶差分又保留了历史窗口,测试样本可能与训练样本共享大量原始价格信息。模型结果会被人为抬高。
更稳妥的方式是:
- 使用早期区间进行参数搜索;
- 使用后续区间进行验证;
- 最后保留独立样本外区间;
- 按时间滚动更新;
- 记录每次更新时可获得的数据边界。
若研究任务是预测未来收益,标签构造也必须向后移动。差分特征不能读取标签形成之后的数据。
特征与标签的时间关系
假设在 \(t\) 时刻计算特征。特征只能包含 \(X_t\) 及之前的价格。若使用收盘价预测下一根或未来多根数据,必须明确信号生成时间和成交执行时间。
这是回测中最常见的边界错误之一。
分数阶差分不会自动解决这一问题。它只是改变输入变量。
如果使用当日收盘价计算特征,却按照当日开盘价成交,时间顺序已经错误。若使用未来完整窗口计算当前样本,也属于泄漏。
与其他特征的组合
分数阶差分后的价格可以与以下特征组合:
- 成交量变化;
- 波动率估计;
- 价差;
- 技术指标;
- 宏观变量;
- 新闻文本向量;
- 订单簿统计量。
但不同特征需要分别处理。
成交量通常具有偏态和厚尾。价格差分后的序列不一定服从正态分布。宏观变量发布存在时间延迟。文本数据存在发布时间和可见性边界。不能因为所有字段最终进入同一个模型,就对它们执行同一种变换。
特征之间的时间戳必须一致。不同市场的交易日历也需要对齐。
平稳性不是正态性
这是一个容易混淆的概念。
平稳性描述统计性质是否随时间变化。正态分布描述变量的分布形状。二者不是同一件事。
经过分数阶差分后,序列可能更接近平稳,但仍然具有:
- 厚尾;
- 偏度;
- 波动聚集;
- 极端值;
- 非线性依赖;
- 结构突变。
因此,不能因为 ADF 检验通过,就直接使用假设正态分布的模型或风险指标。
也不能因为直方图不像正态分布,就否定分数阶差分。金融数据本来就很少严格服从正态分布。分数阶差分的目标是处理差分阶数和历史记忆,不是把所有数据转换成高斯噪声。
在模型输入前,可以继续检查:
- 滚动均值;
- 滚动方差;
- 自相关函数;
- 偏自相关函数;
- 不同分位数下的分布变化;
- 极端值比例;
- 不同阶段的残差结构。
这些检查的作用是识别剩余问题。不是制造更多指标。
ADF 搜索中的统计限制
ADF 检验有效,但不能神化。
它对样本长度、滞后阶数和结构变化敏感。样本太短时,检验能力不足。样本太长时,多个市场阶段混在一起,单一统计结论可能失去解释力。
结构突变尤其需要注意。
一段序列可能在早期呈现某种趋势,在后期发生价格制度变化。对整段序列执行一次 ADF 检验,得到的是平均结果。这个结果未必适用于当前窗口。
更合理的方式是采用滚动或扩展窗口重复检验:
- 扩展窗口观察长期稳定性;
- 固定窗口观察当前状态;
- 对不同阶段分别计算候选 \(d\);
- 记录 \(d^*\) 是否频繁跳变;
- 将检验结论与模型样本外结果分开保存。
如果 \(d^*\) 在相邻窗口间大幅变化,不应直接认为算法失效。也不应直接取平均值。先检查样本长度、数据清洗、时间区间和结构变化。
统计显著性也不是经济显著性。
即使某个序列通过 ADF,分数阶差分后的特征也可能对目标变量没有预测价值。特征平稳化只是降低输入分布问题。模型是否能从中提取有效关系,需要独立验证。
ADF 通过只说明单位根证据发生变化。它不说明特征具有预测力,也不说明回测能够盈利。
截断阈值与记忆长度
固定窗口实现中,阈值是核心参数之一。
权重一般呈慢速衰减。不同 \(d\) 会产生不同的衰减速度。\(d\) 较小时,历史影响可能衰减得更慢,所需窗口更长。\(d\) 接近一阶差分时,权重结构更集中于近期。
因此,不能把固定窗口长度从一个品种直接搬到另一个品种。
阈值影响三个结果:
1. 历史记忆保留长度。
2. 有效样本起始位置。
3. 特征的数值稳定性和计算成本。
阈值过大,截断过早。长周期结构被删除。阈值过小,窗口过长。早期样本大量缺失,计算成本增加,也可能使模型更多接触非常久远、已经失去相关性的历史。
这里需要通过滚动验证选择,而不是只看训练集拟合误差。
可以记录以下诊断结果:
- 每个 \(d\) 对应的有效窗口长度;
- 被截断的最后一个权重;
- 输出序列的有效样本数量;
- 差分后序列的均值和方差;
- 不同时间段的相关结构;
- 模型在不同阈值下的样本外稳定性。
不要只保留最终的 \(d\)。没有窗口长度和阈值,最终特征无法复现。
扩展窗口的边界问题
扩展窗口法看似更接近理论定义,但仍然存在工程问题。
首先,早期样本的历史不完整。若使用截断前的部分窗口,样本之间的计算规则不同。若直接丢弃,则训练样本减少。
其次,计算过程中需要持续访问更早数据。分布式计算时,单个分片不能独立完成计算。每个分片都需要获取足够的前置历史。
再次,如果使用滚动训练,扩展窗口可能在每次更新时重复计算大量相同内容。可以缓存中间结果,但缓存管理本身会增加系统复杂度。
固定窗口法通常更适合生产环境,因为窗口上限明确。它的结果更易复现,内存和延迟更容易估计。
但低延迟不代表统计质量更高。低延迟只是系统属性。是否保留了足够的历史,需要通过参数敏感性分析确认。
计算实现中的几个细节
权重递推优于重复展开
权重可以使用递推方式生成。这样可以避免在每个阶数、每个时间点重复计算组合项。
递推过程需要注意数值精度。权重出现正负交替时,累加可能产生抵消误差。权重很小但数量很多时,误差会积累。
卷积方向必须固定
时间序列的滞后方向不能写反。
当前样本应与当前及过去价格加权。若数组切片方向错误,可能把未来观测引入当前特征。程序不会因为结果看起来正常而报错。
测试时应使用手工构造的小序列,逐项验证:
- 第一个有效样本;
- 第二个有效样本;
- 权重正负号;
- 窗口边界;
- 缺失值传播;
- 时间戳对齐。
缺失值传播
只要窗口内存在缺失值,输出是否为空必须有明确定义。
可以选择:
- 只在完整窗口上计算;
- 对缺失项进行单独填充;
- 将缺失状态编码为附加变量;
- 直接删除相关时间点。
不能让底层库默认处理。默认行为未必符合金融数据逻辑。
缓存与版本控制
分数阶差分结果依赖以下参数:
- 原始数据版本;
- 价格口径;
- 差分阶数;
- 权重阈值;
- 窗口长度;
- 时间频率;
- 缺失值处理规则;
- 截止时间;
- 数值精度。
这些参数需要和模型版本一起保存。否则,回测结果无法重建。
这属于数据工程,不属于算法装饰。
如何评估分数阶差分是否有用
不能只比较序列图形。
至少需要建立三个基线:
1. 原始价格特征。
2. 一阶差分或收益率特征。
3. 分数阶差分特征。
模型、标签、训练区间、验证区间、交易成本和执行规则保持一致。只改变特征变换。
然后比较:
- 样本外预测误差;
- 滚动窗口稳定性;
- 不同阶段的误差分布;
- 特征重要性是否稳定;
- 模型对异常值的敏感度;
- 训练和推理延迟;
- 有效样本损失;
- 参数变化后的结果波动。
如果分数阶差分只在某个时间段有效,不能把它描述为普遍有效。需要记录适用区间。
如果训练集结果改善,测试集没有改善,通常说明:
- 特征变换增加了拟合自由度;
- \(d\) 或阈值被过度调参;
- ADF 目标与预测目标不一致;
- 数据存在时间泄漏;
- 模型利用了特定阶段的结构。
如果分数阶差分后模型效果下降,也不能直接认定变换错误。它可能删除了该模型真正需要的价格水平信息。特征工程不是越平稳越好。
不要用 ADF 代替样本外验证
ADF 的目标是统计平稳性。回测的目标是检验未来区间表现。两者属于不同层次。
一个序列可以通过 ADF,但模型没有预测力。另一个序列没有完全通过 ADF,但在某个模型和样本外区间中仍然有用。
因此,推荐采用双层标准:
- 统计层:检查平稳性、滞后结构和分布变化;
- 预测层:检查样本外误差和滚动稳定性。
两层结论不一致时,不能强行合并成单一结论。
常见错误
直接固定使用 \(d=0.5\)
这是最常见的捷径。
\(d=0.5\) 可以作为测试点,但不能作为默认真理。不同资产、周期和样本区间的最小平稳阶数可能不同。即便同一资产,数据频率变化后,统计性质也会变化。
对收益率再次做分数阶差分
如果输入已经是一阶差分序列,再执行分数阶差分,需要明确数学目的。否则会造成重复变换,进一步降低信息量。
先确定输入是价格、对数价格还是收益率。不要把不同定义混在一起。
在全样本上搜索 \(d\)
全样本搜索包括未来数据。随后再进行回测,会产生参数泄漏。
正确做法是让搜索过程也遵守时间边界。每个训练窗口只使用该窗口内可见的数据。测试区间不能参与 \(d\)、阈值和窗口长度的选择。
用平稳性通过证明策略有效
这属于概念错误。
分数阶差分只解决特征表示的一部分问题。它不解决标签噪声、交易成本、滑点、容量、执行延迟、制度变化和模型过拟合。
忽略有效样本减少
窗口越长,前置无效样本越多。不同 \(d\) 和不同阈值会产生不同的有效样本数量。
如果比较模型时没有处理样本区间差异,结果可能来自样本不同,而不是特征优劣。
忽略交易时间
日线、分钟线和逐笔数据的“一个滞后”含义不同。分数阶差分保留的是离散观测的历史依赖,不是抽象的自然时间。
时间频率改变,参数需要重新评估。
一套可复现的落地流程
可以将实现固定为以下步骤。
1. 冻结数据口径。
记录资产、交易所、时间频率、复权方式、连续合约规则和时区。
2. 执行数据清洗。
处理重复值、缺失值、异常值和不连续价格。保留清洗日志。
3. 确定原始输入。
明确使用价格、对数价格还是其他序列。不在代码中隐式转换。
4. 设置候选阶数。
在 \(0\) 到 \(1\) 的区间内构建候选集合。不要预设固定的 \(d=0.5\)。
5. 递推生成权重。
对每个候选 \(d\) 计算权重序列。保存阈值和窗口长度。
6. 执行固定窗口或扩展窗口计算。
当前样本只使用当前及之前的观测。严格检查数组方向。
7. 在训练区间执行 ADF 检验。
使用设定的显著性水平,搜索达到平稳性的最小阶数。
8. 保存特征工程参数。
同时保存 \(d^*\)、阈值、窗口长度、数据版本和时间边界。
9. 进行滚动样本外验证。
与原始价格和一阶差分建立基线。保持模型和交易规则一致。
10. 执行敏感性分析。
改变候选网格、截断阈值、窗口长度和训练区间,观察结果是否稳定。
11. 评估系统成本。
统计计算耗时、内存占用、有效样本损失和推理延迟。
12. 记录限制条件。
不把统计平稳性描述为收益能力。不把历史样本外结果描述为未来预测。
这套流程的重点不是增加代码量。是把每个假设显式化。
进一步的参数优化方向
参数优化不应围绕单一回测分数展开。
更合理的目标是寻找一组在多个时间区间、多个市场阶段和多个参数扰动下仍然可解释的配置。
可以重点观察以下问题:
- \(d^*\) 是否在滚动窗口中稳定;
- 小幅改变 \(d\) 后,模型性能是否剧烈变化;
- 截断阈值变化是否导致结果反转;
- 固定窗口长度是否足以覆盖主要权重;
- 分数阶差分是否只改善某一个模型;
- 特征是否被其他技术指标完全替代;
- 输出序列是否仍存在明显的阶段性方差变化;
- 计算成本是否超过模型性能收益。
如果模型对 \(d\) 的微小变化极度敏感,通常意味着模型在利用脆弱结构。此时应减少参数自由度,扩大样本外验证区间,并重新检查数据泄漏。
如果模型对 \(d\) 不敏感,但分数阶差分相较基线没有改善,就没有必要为此增加系统复杂度。
算法不是越复杂越好。可复现、可解释、可维护更重要。
方法的边界
分数阶差分无法解决以下问题:
- 数据源错误;
- 价格复权错误;
- 合约换月跳变;
- 未来数据泄漏;
- 标签错位;
- 交易成本遗漏;
- 模型过拟合;
- 市场结构变化;
- 低流动性导致的执行偏差;
- 样本外分布发生变化。
它也不能保证模型在样本外盈利。
它保留部分长期记忆的能力,来自加权历史结构。这个结构是否与目标变量相关,需要由数据验证。统计上的记忆保留,不等于交易上的可利用信号。
同时,分数阶差分不应被理解为一种自动预测工具。它不产生新的信息。它重新组织已有信息。
如果原始数据中没有稳定关系,变换不会凭空制造关系。
结论
金融时序特征工程存在一个基本矛盾:
- 不差分,价格水平保留完整,但非平稳性影响模型;
- 一阶差分,平稳性改善,但长期记忆被削弱;
- 分数阶差分,在两者之间提供连续调节。
落地时需要关注四个对象:
1. 差分阶数 \(d\);
2. 权重截断阈值;
3. 历史窗口长度;
4. 时间边界与样本外流程。
ADF 检验可以用于搜索最小平稳阶数。它不能替代预测验证。固定窗口法适合工程部署。它不是理论上的无限历史等价物。扩展窗口法保留更多历史。它的计算和边界管理成本更高。
最终配置应通过滚动样本外验证和参数敏感性分析确定。不要固定使用 \(d=0.5\)。不要把平稳性通过写成盈利证明。不要忽略数据清洗、标签对齐和前向偏差。
分数阶差分的合理定位很简单:
它是一个控制信息损失的数学工具。
不是策略。不是信号。不是预测承诺。
Related reading: 金融时间序列建模:保留原始记忆还是追求绝对平稳? and 强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟.
