用于预测波动性的计量经济学工具:GARCH模型·综合运用
📊

用于预测波动性的计量经济学工具:GARCH模型·综合运用

(3/3)·从GARCH(1,1)拟合到iGARCH指标落地,前两步铺垫后这一步才真正接上盘口

含代码示例 第 3/3 篇
很多人把历史标准差当成波动率的全部真相,却忽略平稳期后常紧跟剧烈摆动。GARCH 把波动率本身当作会变的量,比固定假设更贴近真实报价。本篇接前两篇基础,直接把模型用到预测与指标上。

「GARCH(1,1)的远月预测与t分布区间怎么算」

GARCH(1,1)向前 m 步的波动率预测由递推方程给出,其中 γ = α1 + β1。当 m 趋向无穷大且模型满足平稳性条件 α1 + β1 < 1 时,预测值会收敛到无条件方差的平稳值。也就是说,预测跨度拉得越长,数值越贴近那个长期均值,短期尖峰会被模型自身平滑掉。 比点估计更有用的是带显著性水平的波动区间。若假设标准化残差 z_t 服从 i.i.d. N(0,1),90% 置信区间直接取 [u - 1.65σ, u + 1.65σ],分位数有解析解。一旦换成 z_t = i.i.d. t-Student(v),逆分布没有闭式,只能靠蒙特卡洛模拟构造区间。 模拟次数默认 10000 次,往上加到 100000 次区间会更对称、精度更高,但 MT5 单线程跑这批随机数会明显吃时间。下面这段函数就是拿 t 分布做蒙特卡洛分位区间的核心:先按自由度抽标准化 t 变量乘条件标准差,再取 α/2 和 1-α/2 分位当上下界。 别把正态当圣经 实盘里贵金属跳空和外汇夜盘薄流动性的尾部分布常厚过正态,直接套 1.65 倍标准差会低估极端波动概率,建议先对残差做 DoF 估计再进模拟。

MQL5 / C++
class=class="str">"cmt">//+-------------------------------------------------------------------------+
class=class="str">"cmt">//|Function calculate Forecast Confidence intervals class="kw">using Monte-Carlo method|
class=class="str">"cmt">//+-------------------------------------------------------------------------+
class="type">bool MCForecastStandardized_t(const class="type">class="kw">double DoF,const class="type">class="kw">double CondStDevForecast,const class="type">class="kw">double prob, class="type">class="kw">double & F_lower[],class="type">class="kw">double & F_upper[])
  {
   class="type">class="kw">double alpha = class="num">1-prob;
   class="type">class="kw">double qlower[class="num">1] = {alpha/class="num">2};        class=class="str">"cmt">// q(a/class="num">2)
   class="type">class="kw">double qupper[class="num">1] = {class="num">1-alpha/class="num">2};     class=class="str">"cmt">// q(class="num">1-a/class="num">2)
   class="type">int N = class="num">10000; class=class="str">"cmt">//number Monte-Carlo simulates
   class="type">class="kw">double h_St[];
   ArrayResize(h_St,N);
   for(class="type">int i=class="num">0;i<N;i++)
     {
      h_St[i] = CondStDevForecast * Standardized_t(DoF);  class=class="str">"cmt">// GARCH-Student(class="num">1,class="num">1)
     }
   MathQuantile(h_St,qlower,F_lower);
   MathQuantile(h_St,qupper,F_upper);
   class="kw">return(true);
  }
class=class="str">"cmt">//+--------------------------------------------------------------------------+
class=class="str">"cmt">//| Function calculate i.i.d. standardized t-distributed variable            |
class=class="str">"cmt">//+--------------------------------------------------------------------------+
class="type">class="kw">double  Standardized_t(const class="type">class="kw">double DoF)
  {
   class="type">class="kw">double randStandStudent;
   class="type">int err;
   randStandStudent = MathRandomNormal(class="num">0,class="num">1,err) * sqrt(DoF/((MathRandomGamma(DoF/class="num">2.0,class="num">1)*class="num">2.0)));
   randStandStudent = randStandStudent/sqrt(DoF/(DoF-class="num">2.0));
   class="kw">return(randStandStudent);
  }
class=class="str">"cmt">//+------------------------------------------------------------------+

用四年 EURUSD 日线拆穿 GARCH 残差假象

检验 GARCH 是否真抓住了波动率异方差,核心看标准化残差:把价格增量减掉条件期望,再除以模型算出的条件标准差。若模型贴合数据,这些残差应独立同分布、近似标准正态。 拿过去四年 EURUSD 日线跑一遍 GARCH(1,1):残差平方自相关拖到滞后 20 期还有轻微依赖,但标准化残差平方自相关已无显著相关,说明模型对波动聚集的刻画基本到位。实现波动率(对数价格增量平方)与条件标准差走势吻合,无条件标准差大致是 GARCH 波动的中枢。 正态性却露了破绽。Jarque-Bera 正式检验拒绝原假设,过量值 0.5307、利润额外值 1.2904,提示尖峰偏肥尾。GARCH 假设的标准化残差条件正态被违反,最大似然估计随之失去渐近有效性——样本再大也难收敛到更准参数。外汇、贵金属属高风险品种,这种参数失效会直接拖累实盘波动预判。 补救办法是把正态换成学生 t 分布,自由度小自带正超额与重尾,代价是多估一个自由度参数。相关可视化都集成在 GARCH 脚本里:Distribution 切正态或 t 分布,Data window 定参数样本,Shift 控制窗口位移(1 即倒数第二根 K 线),Confidence interval 调显著性水平,Forecast horizon 设预测根数,Plot 可出预测、残差、实现与 GARCH 波动对比及两类自相关函数。开 MT5 挂脚本改 Distribution 跑一遍,能直接看见 t 分布下残差肥尾是否被吸收。

◍ 用 iGARCH 把波动率做成实时自适应

GARCH 脚本只能离线跑一遍模型,真要在 MT5 上盯盘,得让参数跟着每根新 K 线重算。iGARCH 自适应指标干的就是这事:它在每根 K 线重估模型系数,快速贴住变来变去的市场波动。 指标在当前 K 线画出波动率预测(条件标准差)和一步前瞻的价格增量置信区间。默认显著性水平 90%,红线框定的上下界意味着约 90% 概率对数价格增量 LN(Yt/Yt-1) 落在区间内;绿线则是正常历史波动的上下限。直方图直接给出对数收益值。 Plot indicator 控制参与计算的 K 线数量。因为每根都做参数优化,这个数别设太大——尤其选了学生分布时,计算耗时会上去。 每来一根新 K 线,日志会刷出一组可核对的数据:刚优化的 mu、omega、alpha、beta、v,似然函数 LLF,该置信下的预测价格水平,以及预测条件标准差、GARCH 理论无条件标准差和历史标准差。外汇与贵金属杠杆高、波动剧烈,这些预测仅描述概率分布,实际突破区间属常态风险。

「把波动率模型接进自己的风控回路」

标准波动率假设恒定,在实际行情里常常失真;GARCH 类模型把波动率随时间变化这一点显式建模,对贵金属与外汇这类高波动品种更有参考意义。以 GARCH(1,1) 为例做的自适应指标,能在每根新 K 线用 MinBLEIC 重估参数,输出一步前瞻波动率与置信区间,让你按概率而不是拍脑袋去设止损和仓位。 残差分布可在高斯与学生 t 之间切换,前者轻尾、后者更能容纳黑天鹅式的肥尾。外汇和贵金属杠杆高、跳空频繁,任何波动率预测都只是概率参考,不能直接当保本依据。 脚本附带 GARCH.mq5 与 iGARCH.mq5(分别约 54.5 KB、45.3 KB),在 MT5 里加载后,先跑默认参数看置信带宽度,再换 t 分布对比残差形态,比只读结论更有用。

把重复拟合交给小布
这些诊断与小布盯盘的 AIGC 已内置,打开对应品种页即可看到条件方差曲线与充分性提示,你只需判断风险敞口。

常见问题

它用更短的结构逼近样本,参数少、过拟合概率更低,盘后重估更快。
重点看标准化残差是否去除了集群与重尾,Ljung-Box 检验不显著即倾向合格。
可以,品种页内置条件方差与 iGARCH 风格读数,省去自己写 EA 联调。
iGARCH 约束求和系数为1,突出波动持续,适合盯贵金属跳空后的衰减节奏。