用计量经济学方法分析图表:GARCH、肥尾与波动集群
一、为什么用计量经济学
“缺乏事实支撑的理论是单调乏味的,但没有理论支撑的事实是毫无意义的。”MQL 社区追求精确,而精确只能由数学与统计给出。本文不解决长期盈利,而是提供若干诊断工具,帮你判断一个价格序列究竟有多少“结构”、多少“噪声”。
二、时间序列的三大特性
价格序列是非线性对象,线性模型往往低估它的复杂性。计量经济学家关注三类只能用特定模型捕捉的特性:
- 肥尾(fat tails):极端收益出现概率高于正态假设,风险被低估。
- 波动集群(volatility clustering):高波动后更可能高波动,低波动后更可能低波动。
- 杠杆效应:利空带来的波动放大强于等量利好。
三、自相关与 LBQ 检验
自相关函数衡量序列在滞后 k 期的线性依赖。Ljung-Box Q 检验则整体判断“前 h 阶自相关是否显著不为 0”。复值类 Complex 支持 FFT 与复数运算,是自相关计算的基础。
// 复值类 Complex 支持 FFT / 自相关
void Complex::opPlus(const Complex &c) { re+=c.re; im+=c.im; }
// 滞后 lag 的自相关系数
double autocorr(double &x[], int lag)
{
double mx = Mean(x);
double num=0, den=0;
for(int i=lag;i<ArraySize(x);i++){ num+=(x[i]-mx)*(x[i-lag]-mx); }
for(int i=0;i<ArraySize(x);i++){ den+=(x[i]-mx)*(x[i]-mx); }
return num/den;
}
// Ljung-Box Q 检验
bool lbqtest(double &acf[], int n, int h, double &pval);
四、GARCH 条件异方差
GARCH(1,1) 用过去的冲击与过去的方差递归估计当前方差,天然刻画“波动集群”。它不预测方向,但能预测波动幅度,是风险定价与止损距离设计的利器。
// GARCH(1,1) 方差更新 sigma2 = omega + alpha*r[t-1]*r[t-1] + beta*sigma2[t-1]; // 波动率集群:高波动后大概率仍高波动 // 约束 alpha + beta < 1 保证平稳
五、肥尾与风险
六、实战诊断流程
- 算收益率序列,去趋势后做 ADF 类平稳性判断。
- 画自相关图 + LBQ 检验,看是否存在可建模的线性依赖。
- 拟合 GARCH 看波动集群强度(alpha+beta 接近 1 表示长记忆)。
- 估峰度,确认肥尾,据此设尾部风险预算。
七、GARCH 的直觉:波动率聚类
金融数据的核心特征之一是「波动率聚类」:大波动后面常跟着大波动,平静后面常跟着平静。GARCH 模型用「条件方差」显式建模这种时变波动,比固定历史波动率更贴近现实。
直觉上,GARCH 说「今天的波动 = 长期平均 + 昨天波动的回声 + 昨天冲击的残留」。它让风险估计随市场状态自适应,而不是拿一个静态数字糊弄。
八、用 GARCH 预测风险
训练好 GARCH 后,可用它对未来几步的条件方差做预测,得到动态的风险估计(如 VaR)。这比「过去一年波动率」更及时——市场刚进入动荡,GARCH 立刻上调风险预期。
// 条件方差递推(GARCH(1,1) 直觉) sigma2 = omega + alpha*r2_prev + beta*sigma2_prev; // 明日风险随近期冲击 r2 与上一方差共同决定
九、与历史波动率的对比
历史波动率简单、易解释,但滞后且对结构性变化反应慢;GARCH 更灵敏但需估计参数、对极端事件也非万能。实务上可两者并用:GARCH 给短期预警、历史波动给长期校准。
注意 GARCH 假设波动聚类持续,遇到「波动率永久抬阶」的 regime change 也会滞后,所以仍要配硬性的回撤熔断。
十、实操:GARCH 输出怎么接仓位
GARCH 算出的条件方差可转成「预期日波动」,再反推止损距离与手数:预期波动大就拉宽止损、减手数,预期平静就收窄止损、加手数。让仓位随风险估计自适应,比固定止损更贴合市况。
但别全自动迷信:GARCH 在 regime change 时也会滞后,所以接仓位时仍要封顶(波动再大仓位也不低于某下限、再小也不高于某上限),避免极端估计把仓位推到失控区。
十一、GARCH 的局限与替代
GARCH 假设波动聚类持续、冲击衰减对称,遇到政策黑天鹅这种「永久抬阶」会滞后;极端尾部它也常低估。实务常配学生 t 分布或更厚尾的模型(如 EGARCH)改善。
更朴素但稳健的替代是「波动率分位数法」:直接看近期波动在历史分布里的百分位,处于高位就收紧仓位。方法糙但直观、不易被模型假设坑。