1基于Copula-GARCH-VaR模型的投资组合风险测度MatLab源程序赵崇新11.Gaussian-Copula函数的参数估计的的MatLab源程序clear;%清除Workspace保存的所有变量,释放内存clc;%清除CommandWindow显示的所有内容,清屏Resid=xlsread('resid.xls');%从文件resid.xls中读取残差数据Z=zscore(Resid);%标准化残差数据Z1=Z(:,1);Z2=Z(:,2);%调用ksdensity函数对标准化残差序列进行概率积分变换U1=ksdensity(Z1,Z1,'function','cdf');V1=ksdensity(Z2,Z2,'function','cdf');%Kolmogorov-Smirnovtest[h1,p1,ksstat1]=kstest(U1,[U1,unifcdf(U1,0,1)])%对U1进行K-S检验[h2,p2,ksstat2]=kstest(V1,[V1,unifcdf(V1,0,1)])%对V1进行K-S检验%画(U1,V1)散点图figure;scatterhist(U1,V1)xlabel('U1');ylabel('V1');title('(U1,V1)散点图');%估计GaussianCopula中的线性相关参数rho=copulafit('Gaussian',[U1(:),V1(:)])%求GaussianCopula的Kendall秩相关系数Kendall=copulastat('Gaussian',rho)%求GaussianCopula的Spearman秩相关系数Spearman=copulastat('Gaussian',rho,'type','Spearman')%画GaussianCopula的密度函数图[Udata,Vdata]=meshgrid(linspace(0,1,31));%为绘图需要,产生新的网格数据Cpdf_rho=copulapdf('Gaussian',[Udata(:),Vdata(:)],rho);%计算网格点上的GaussianCopula密度函数值figure;%新建图形窗口surf(Udata,Vdata,reshape(Cpdf_rho,size(Udata)));%绘制3D曲面图xlabel('U1');%为X轴加标签ylabel('V1');%为Y轴加标签作者简介:1赵崇新(1984-),男,广东江门人,五邑大学管理科学与工程硕士研究生,研究方向为金融工程,E-mail:jmwyusun@163.com.2zlabel('GaussianC(U1,V1)');%为Z轴加标签%模型评价%调用ecdf函数求X和Y的经验分布函数[fx,Xsort]=ecdf(Z1);[fy,Ysort]=ecdf(Z2);%调用spline函数,利用样条插值法求原始样本点处的经验分布函数值U2=spline(Xsort(2:end),fx(2:end),Z1);V2=spline(Ysort(2:end),fy(2:end),Z2);%定义经验Copula函数C(u,v)C=@(u,v)mean((U2=u).*(V2=v));%为作图的需要,产生新的网格数据[Udata,Vdata]=meshgrid(linspace(0,1,31));%通过循环计算经验Copula函数在新产生的网格点处的函数值fori=1:numel(Udata)CopulaEmpirical(i)=C(Udata(i),Vdata(i));endfigure;%新建图形窗口%绘制经验Copula分布函数图像surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))xlabel('U2');%为X轴加标签ylabel('V2');%为Y轴加标签zlabel('EmpiricalCopulaC(u,v)');%为z轴加标签%通过循环计算经验Copula函数在原始样本点处的函数值Ce=zeros(size(U2(:)));fori=1:numel(U2)Ce(i)=C(U2(i),V2(i));end%GaussianCopula函数在原始样本点处的函数值Cc=copulacdf('Gaussian',[U2(:),V2(:)],rho);%计算切比雪夫距离dn1=max(abs(Cc-Ce))%计算欧氏距离dn2=sqrt((Cc-Ce)'*(Cc-Ce))32.Copula-GARCH-VaR模型求解的MatLab源程序clear;%清除Workspace保存的所有变量,释放内存clc;%清除CommandWindow显示的所有内容,清屏%GaussianCopula-GARCH-MonteCarlo模拟rho=[1,0.945158584302569;0.945158584302569,1];N=5000;randn('state',0);C=copularnd('Gaussian',rho,N);u1=C(:,1);u2=C(:,2);h=xlsread('h.xls');%从文件h.xls中读取条件方差数据h1=h(end,1);h2=h(end,2);eta1=tinv(u1,3.5);eta2=tinv(u2,3.5);rs1=0.00139936054488+sqrt(h1)*eta1;rs2=0.00151970371697+sqrt(h2)*eta2;RS=[rs1rs2];W=[0.50.5];RSp=[W*RS'];VaR=quantile(RSp,0.95)43.Variance-Covariance-VaR模型求解的MatLab源程序clear;%清除Workspace保存的所有变量,释放内存clc;%清除CommandWindow显示的所有内容,清屏R=xlsread('r.xls');%从文件r.xls中读取收益率数据stdR=std(R);%计算收益率的标准差W=[0.50.5];%设定各项资产的权重比,或W=[0.5,0.5];Sigmai=diag(stdR);%计算各项资产的标准差矩阵C=corrcoef(R)%计算各项资产的相关系数矩阵H=Sigmai*C*Sigmai'%计算各项资产的方差-协方差矩阵Sigmap=sqrt(W*H*W')%计算投资组合的标准差,或Sigmap=sqrt((W*Sigmai)*C*(W*Sigmai)')Z=norminv(0.95,0,1);%计算置信度为0.95的分位数S=1;%设定初始投资额ValueAtRisk1=S*Z*Sigmap%求出投资组合VaRValueAtRisk2=mean(portvrisk(mean(R),Std(R)))%求出均值VaR54.VaR的失败频率检验的MatLab源程序clear;%清除Workspace保存的所有变量,释放内存clc;%清除CommandWindow显示的所有内容,清屏disp('请输入VaR的值:');VaR=input('VaR=');%从键盘输入VaR的值alpha=0.05;r=xlsread('r.xls');%从文件r.xls中读取收益率数据T=length(r);rm=mean(r')';N=sum(rm-VaR);f=N/Tlr=-2*log((1-alpha)^(T-N)*alpha^N)+2*log((1-f)^(T-N)*f^N)Z=chi2inv(0.95,1);iflrZfprintf('VaRisinadequate%8.5f\n')elsefprintf('VaRisadequate%8.5f\n')end