用于预测波动性的计量经济学工具:GARCH模型·综合运用
(3/3)·从GARCH(1,1)拟合到iGARCH指标落地,前两步铺垫后这一步才真正接上盘口
「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 估计再进模拟。
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 分布对比残差形态,比只读结论更有用。