garch-copula-covar相关模型代码 使用matlab有录屏使用教程最近在折腾金融风险指标CoVaR的计算发现GARCH-Copula-CoVaR这个组合拳模型挺有意思。今天咱们就用Matlab手把手实现一遍过程中会穿插些代码调试的坑点和实战技巧顺便安利几个可视化骚操作。先看数据预处理部分。假设我们手头有银行股和沪深300的日收益率数据第一件事得把数据洗干净% 导入数据并计算对数收益率 price_bank xlsread(stock_data.xlsx,Sheet1); price_index xlsread(stock_data.xlsx,Sheet2); returns_bank price2ret(price_bank); returns_index price2ret(price_index); % 检验平稳性 [h_bank,p_bank] adftest(returns_bank) % 最好p0.05 [h_index,p_index] adftest(returns_index)这里容易翻车的地方是收益率序列不平稳碰到这种情况别急着差分先试试看对原始价格取对数。我之前有个案例就是因为没做ADF检验直接建模结果参数估计偏到姥姥家去了。接下来是GARCH建模的重头戏。咱们用最常见的GARCH(1,1)% 银行股GARCH建模 model garch(GARCHLags,1,ARCHLags,1,Distribution,t); estModel_bank estimate(model, returns_bank); [resid_bank,sigma_bank] infer(estModel_bank, returns_bank); std_resid_bank resid_bank./sigma_bank; % 标准化残差 % 指数GARCH建模同上 ...这里有个骚操作——把标准化残差的QQ图画出来一眼就能看出用t分布还是正态分布更合适。我调试时发现当残差出现厚尾特征时用t分布建模的CoVaR值会比正态分布高15%-20%这差距在风控场景下可是要命的。garch-copula-covar相关模型代码 使用matlab有录屏使用教程核心环节Copula拟合咱们先用最常见的t-copula试试% 连接标准化残差 U ksdensity(std_resid_bank, std_resid_bank, function,cdf); V ksdensity(std_resid_index, std_resid_index, function,cdf); % 拟合t-copula [Rho, nu] copulafit(t,[U V], Method,ApproximateML);这里容易采坑的是copula选择——有次用高斯copula拟合极端风险结果VaR被严重低估。后来换成阿基米德copula族用AIC准则选最优类型才靠谱。建议跑个循环把常见copula都试一遍别像我当初死磕一种方法。蒙特卡洛模拟环节最能体现模型的想象力% 生成10000组模拟数据 rng(2023) U_sim copularnd(t,Rho,nu,10000); % 逆向变换得到残差 eps_bank ksdensity(std_resid_bank, U_sim(:,1), function,icdf); eps_index ksdensity(std_resid_index, U_sim(:,2), function,icdf); % 重构波动率路径 sigma_bank_sim forecast(estModel_bank,1, Y0,returns_bank); returns_bank_sim sigma_bank_sim .* eps_bank;这里有个魔鬼细节波动率预测要用滚动窗口更新直接全量预测会引入未来信息。我之前在这里翻过车回测结果好得离谱结果发现是用了整个样本的波动率参数...捂脸最后计算CoVaR就水到渠成了% 计算5%分位数 CoVaR_level 0.05; CoVaR quantile(returns_index_sim(returns_bank_simquantile(returns_bank_sim,CoVaR_level)), CoVaR_level);整个流程跑下来最大的感受是模型对边缘分布和copula类型的敏感性。有次换了个Clayton copulaCoVaR直接从-3.2%跳升到-4.1%这波动比市场本身还刺激。建议各位跑代码时多换几组参数对比别被默认设置坑了。代码完整版和调试彩蛋在教程视频里都有展开顺手截了几个动态参数敏感度分析的gif这里重点说几个教科书不会写的实战经验比如GARCH模型收敛失败时调大MaxIterations到2000以上copula拟合卡顿时试试Options,statset(Display,off)关掉迭代输出。
garch-copula-covar模型代码:使用Matlab及录屏教程
garch-copula-covar相关模型代码 使用matlab有录屏使用教程最近在折腾金融风险指标CoVaR的计算发现GARCH-Copula-CoVaR这个组合拳模型挺有意思。今天咱们就用Matlab手把手实现一遍过程中会穿插些代码调试的坑点和实战技巧顺便安利几个可视化骚操作。先看数据预处理部分。假设我们手头有银行股和沪深300的日收益率数据第一件事得把数据洗干净% 导入数据并计算对数收益率 price_bank xlsread(stock_data.xlsx,Sheet1); price_index xlsread(stock_data.xlsx,Sheet2); returns_bank price2ret(price_bank); returns_index price2ret(price_index); % 检验平稳性 [h_bank,p_bank] adftest(returns_bank) % 最好p0.05 [h_index,p_index] adftest(returns_index)这里容易翻车的地方是收益率序列不平稳碰到这种情况别急着差分先试试看对原始价格取对数。我之前有个案例就是因为没做ADF检验直接建模结果参数估计偏到姥姥家去了。接下来是GARCH建模的重头戏。咱们用最常见的GARCH(1,1)% 银行股GARCH建模 model garch(GARCHLags,1,ARCHLags,1,Distribution,t); estModel_bank estimate(model, returns_bank); [resid_bank,sigma_bank] infer(estModel_bank, returns_bank); std_resid_bank resid_bank./sigma_bank; % 标准化残差 % 指数GARCH建模同上 ...这里有个骚操作——把标准化残差的QQ图画出来一眼就能看出用t分布还是正态分布更合适。我调试时发现当残差出现厚尾特征时用t分布建模的CoVaR值会比正态分布高15%-20%这差距在风控场景下可是要命的。garch-copula-covar相关模型代码 使用matlab有录屏使用教程核心环节Copula拟合咱们先用最常见的t-copula试试% 连接标准化残差 U ksdensity(std_resid_bank, std_resid_bank, function,cdf); V ksdensity(std_resid_index, std_resid_index, function,cdf); % 拟合t-copula [Rho, nu] copulafit(t,[U V], Method,ApproximateML);这里容易采坑的是copula选择——有次用高斯copula拟合极端风险结果VaR被严重低估。后来换成阿基米德copula族用AIC准则选最优类型才靠谱。建议跑个循环把常见copula都试一遍别像我当初死磕一种方法。蒙特卡洛模拟环节最能体现模型的想象力% 生成10000组模拟数据 rng(2023) U_sim copularnd(t,Rho,nu,10000); % 逆向变换得到残差 eps_bank ksdensity(std_resid_bank, U_sim(:,1), function,icdf); eps_index ksdensity(std_resid_index, U_sim(:,2), function,icdf); % 重构波动率路径 sigma_bank_sim forecast(estModel_bank,1, Y0,returns_bank); returns_bank_sim sigma_bank_sim .* eps_bank;这里有个魔鬼细节波动率预测要用滚动窗口更新直接全量预测会引入未来信息。我之前在这里翻过车回测结果好得离谱结果发现是用了整个样本的波动率参数...捂脸最后计算CoVaR就水到渠成了% 计算5%分位数 CoVaR_level 0.05; CoVaR quantile(returns_index_sim(returns_bank_simquantile(returns_bank_sim,CoVaR_level)), CoVaR_level);整个流程跑下来最大的感受是模型对边缘分布和copula类型的敏感性。有次换了个Clayton copulaCoVaR直接从-3.2%跳升到-4.1%这波动比市场本身还刺激。建议各位跑代码时多换几组参数对比别被默认设置坑了。代码完整版和调试彩蛋在教程视频里都有展开顺手截了几个动态参数敏感度分析的gif这里重点说几个教科书不会写的实战经验比如GARCH模型收敛失败时调大MaxIterations到2000以上copula拟合卡顿时试试Options,statset(Display,off)关掉迭代输出。