首页 / 交易学院 / 小布知识库 / 时间序列主要特性的分析:TSAnalysis 通用体检工具
时间序列主要特性的分析:TSAnalysis 通用体检工具
⏱️

时间序列主要特性的分析:TSAnalysis 通用体检工具

量化评估 难度 · 进阶 2013 10 分钟阅读
时间序列特性分析平稳性自相关MQL5

一、为什么先给序列「体检」再建模

拿到一段价格或指标序列,很多人第一反应是套模型、做预测。但作者主张先「体检」:用零输入参数的通用工具把序列的核心统计特性算出来,帮你判断这条路值不值得走。理由很实在——相关研究往往耗时费力,且现成脚本的参数含义只有开发者懂、用户未必清楚;如果某个假设在特性层面就不成立(比如明显非平稳、严重厚尾),早期就能驳回,避免把几周时间浪费在错误方向上。通用工具的代价是性能不如专用软件,但换来的是「装好即用、无需调参」,非常适合做第一步的粗筛和假设生成。

文中给出的工具是 TSAnalysis 类,随 TSAnalysis.zip 发布。安装只需把目录整体复制到 MQL5/Scripts 下,无需重命名、无需任何输入参数。运行附带的 TSAexample.mq5,它会准备数据、调用默认浏览器,用 TSAnalysis 类把结果以 HTML 图表形式展示出来——注意类正常运行要求终端启用外部 DLL。卸载更简单:删掉那个目录即可。

二、TSAnalysis 类:零参数通用工具

整个序列分析逻辑封装在 TSAnalysis.mqh 的 TSAnalysis 类里,对外只暴露一个公共方法 Calc,它负责所有计算,之后再调用一个虚方法 Display 把结果呈现出来。显示方式是可以重写的——基类默认生成 HTML 文件再调浏览器,你继承后完全可以改成写数据库、画自有控件等任意形式。输入序列有两个硬性限制:至少 8 个元素(实际应用很少更短);方差不能近零(否则后续除法不稳定)。长度上限则取决于机器内存,两三千个元素的序列通常无压力。违反前两条会中断计算并在日志报错。

Calc 内部用在线算法(one-pass)累积均值、二阶/三阶/四阶总和,避免先存全量再算,省内存也稳数值。得到这些累积量后,就能推导出方差、标准差、偏度、峰度等描述性统计量,以及 Jarque-Bera 正态性检验及其 p 值、调整后的短序列版本。

Mean=0; sum2=0; sum3=0; sum4=0;
for(i=0;i<NumTS;i++) {
  n=i+1; delta=TS[i]-Mean; a=delta/n; Mean+=a;          // 均值
  sum4+=a*(a*a*delta*i*(n*(n-3.0)+3.0)+6.0*a*sum2-4.0*sum3);
  b=TS[i]-Mean; sum3+=a*(b*delta*(n-2.0)-3.0*sum2);      // 三阶
  sum2+=delta*b;                                         // 二阶
}

三、基础统计量:均值、方差、偏度、峰度

这些是一阶到四阶矩。均值与方差/标准差描述位置与离散程度;偏度(skewness)描述分布不对称性——正偏说明右侧有长尾(大涨罕见但幅度大),负偏相反;峰度(kurtosis)描述尾部厚薄,正态分布峰度为 3,超出峰度(excess kurtosis)则减 2 使正态为 0。对交易者而言,价格收益率往往「尖峰厚尾」:偏度告诉你单边极端行情的偏向,峰度告诉你「黑天鹅」出现的频繁程度,直接关系仓位与止损设置。

比如一段收益率偏度明显为负,意味着下跌极端值比上涨更常见或更剧烈,做多时要更狠地前置止损;峰度远高于 3,说明用正态假设算的 VaR 会严重低估风险。这些特性在建模前看一眼,比直接丢进神经网络有用得多。

四、正态性检验:Jarque-Bera 与离群值

对序列做的第一个拟合优度检验通常是 Jarque-Bera 统计量,它用偏度和峰度轻易算出,p 值随序列变长渐近趋于卡方分布(两个自由度)。短序列下 p 值误差显著,所以文中额外算了「调整后的 Jarque-Bera」,能缓解但不完全消除这个偏差。如果 p 值很小,就拒绝「序列服从正态分布」的原假设——这对选模型至关重要:正态假设不成立时,很多基于高斯假设的统计/ML 方法都得打问号。

此外工具会算离群值(outlier)限制线:超出该线的点视为不属于原序列的异常值。限值公式来自《Statistics for Traders》一书。注意:工具只计算并显示这条线,并不删改你的输入序列——离群值是信息不是垃圾,先肉眼判断它是真异常(错单、数据缺口)还是极端行情,再决定去留。

序列太短(<8)或方差近零时 TSAnalysis 会直接报错中断。前者在实践中很少见,后者多见于近似常数的序列(如长期横盘的固定价差)——这类序列本身没什么统计结构可分析。

五、直方图与经验分布

直方图把序列分布画出来,柱子数按 Bulashev 的公式 K ≈ (Kurt+1.5)·N^0.4/6 估算后向下取最近的奇整数,且不少于 5。X 轴按标准差单位、Y 轴对应概率密度,方便和理论正态曲线叠放对比。肉眼看直方图是「左偏还是右偏、单峰还是多峰、尾部多厚」最快的方式——多峰往往暗示序列里混了不同状态(趋势段/震荡段),单模型可能拟合不好,需要先分段。

六、自相关(ACF)、偏自相关(PACF)与谱估计

要判断「今天的收益和昨天的收益有没有关系」,看自相关函数 ACF——它算序列与自身滞后版本的相关性;偏自相关 PACF 则剔除中间滞后的干扰,专看某滞后阶的净相关。图上叠加 95% 置信带(随机性检验用恒定带;定 ARIMA 阶用随阶增长的带),超出带的点说明该滞后显著相关。这对识别均值回复、动量持续性、以及定 ARIMA 阶数都直接有用。

更进一步,工具用最大熵法(MEM,一种自回归谱估计)算频谱,并用快速哈特利变换(FHT,基2 DIF 算法)加速——它不像 FFT 涉及复数,输入输出都是实序列,只多一个 1/N 系数就能逆变换。谱估计揭示序列的「主导频率」:低频主导可能是长期趋势,某中频突出可能是周期(如周内效应),高频主导则偏噪声。短序列下参数法(AR)比经典周期图分辨率高得多,但 AR 阶数难定——阶太低过平滑、阶太高不稳定,文中用 IP 阶(取自前面自相关计算)作折中。

// 莱文逊-德宾递归:由自相关系数 R[] 求 AR 系数 A[] 与偏自相关 K[]
void TSAnalysis::LevinsonRecursion(const double &R[], double &A[], double &K[]) {
  int p=ArraySize(R); double Em=1.0, km;
  for(int m=0;m<p;m++) {
    double err=0; for(int i=0;i<m;i++) err+=Am1[i]*R[m-i-1];
    km=(R[m]-err)/Em; K[m]=km; A[m]=km;
    for(int i=0;i<m;i++) A[i]=Am1[i]-km*Am1[m-i-1];
    Em*=(1.0-km*km); ArrayCopy(Am1,A);
  }
}

七、在交易中怎么用这些特性

把 TSAnalysis 当「建模前的体检中心」:1) 先看正态性 p 值,决定能不能用高斯假设的方法;2) 看偏度/峰度,给仓位和止损定调(厚尾就别用正态 VaR);3) 看直方图是否多峰,判断是否要分段建模;4) 看 ACF/PACF 哪些滞后显著,定均值回复或动量的窗口、给 ARIMA 定阶;5) 看谱估计的主导频率,找隐藏的周期(如日内/周内节律)。做完这五步,你要么驳回错误假设省下时间,要么拿到一组靠谱的超参数再进精细建模。它不替代模型,但是避免「拿错模型套错数据」的第一道闸门。

特性分析是「描述」不是「预测」。TSAnalysis 告诉你这段序列长什么样,不告诉你下一步怎么走。把它用在建模前做假设检验与超参初筛,而不是当成信号源。

八、小结

TSAnalysis 是一个零输入参数的通用工具,把序列的均值、方差、偏度、峰度、Jarque-Bera 正态性检验、离群值、直方图、ACF/PACF、谱估计一次性算出来并可视化。它的价值在「建模前体检」:早拒错误假设、给模型定超参、识别厚尾与周期。记住它只描述不预测,且要求序列至少 8 个元素、方差非零。配合在线统计算法和 FHT 加速,两三千点序列轻松跑——是量化工作流里性价比极高的一步粗筛。

常见问题

用 Jarque-Bera 检验:它根据序列的偏度和峰度算出统计量,p 值随样本增大渐近趋于卡方分布(2 自由度)。p 值很小就拒绝正态原假设。TSAnalysis 类会自动输出 Jarque-Bera 及其 p 值、以及调整后的短序列版本,短序列下建议看调整后的 p 值。
文中所附的 TSAnalysis 类(TSAnalysis.mqh)是零参数通用工具:装好脚本目录后运行 TSAexample.mq5,它会把均值、方差、偏度、峰度、正态性检验、离群值、直方图、ACF/PACF、谱估计等以 HTML 图表展示出来,正常运行需要终端启用外部 DLL。
偏度描述分布不对称:正偏右侧长尾(大涨罕见但大),负偏相反,直接提示止损该往哪边前置。峰度描述尾部厚薄,正态分布峰度为 3;远高于 3 说明厚尾,用正态假设算的 VaR 会低估风险。两者都是定仓位和止损的重要依据。
ACF 衡量序列与自身滞后版本的相关性,超出 95% 置信带的点代表该滞后显著相关。它能揭示均值回复强度、动量持续性,并给 ARIMA 定阶、找隐藏周期(配合谱估计看主导频率)。PACF 则剔除中间滞后干扰,专看某阶净相关。
会中断计算并在日志报错。工具要求序列至少 8 个元素、方差不能为近零(否则后续除法不稳定)。前者实战少见,后者多见于近似常数的横盘序列——这类序列本身没什么统计结构可分析,也谈不上建模价值。