楼主: zjding
23494 36

求助:基于GARCH模型和蒙特卡罗模拟法测定VaR [推广有奖]

21
tanheng8 发表于 2012-7-18 02:45:25
哇哈哈~ 大侠出现了,首先monte carlo模拟算VaR的方法很多, 看你的标题貌似你要先拟合garch再用monte carlo, 那不就是garch simulation了么,直接模拟了取quantile呗。
我擦,才注意到时08年的老帖了......

22
garyuser 发表于 2012-8-5 15:04:03
谢谢以上各楼,受益匪浅
user

23
风中lingting 发表于 2012-8-23 16:42:33
1)设定一个rolling window
2)对这个window做GARCH拟合(用GARCH前,我会先检验一下数据)
3)monte Carlos 模拟
4)取quantile

mcvar.bmp (1.09 MB)

mcVAR

mcVAR

24
connorhk 发表于 2012-9-17 02:07:30
tong wen

25
论文文 发表于 2012-9-27 02:39:26
为什么不直接以excel模拟?

26
junjian556 发表于 2012-11-1 08:54:33
忘记了,

27
子洋Charles 在职认证  发表于 2013-1-5 17:59:11
MATLAB做还真不太会 不过蒙特卡洛可以用水晶球来做

28
amitacn 发表于 2013-5-27 15:27:46
第一步:历史模拟发

function [VaR CVaR] = fun1( x , alpha ,M)
n=length(x);
%初始化Var,CVaR,rep使用了遗传算法工具箱中的函数
% VaR=rep([0],[1 n-M]);
% CVaR=rep([0],[1 n-M]);
VaR=repmat(0,[1 n-M]);
CVaR=repmat(0,[1 n-M]);
for i=1:n-M%用历史模拟,所以需要有前M=365天的数据辅助来计算第366天的VaR
  R=x(i:i+M);%366天的数据
  VaR(i) = prctile(R,alpha*100);%366天的数据按分位数求得VaR
  r=[];
%r=R(R<=VaR)

%找出数据中小于分位数的数据,给r;
for j=1:length(R)
  if R(j)<=VaR(i)
      r=[r R(j)];
  end
end
%对r求均值,即为CVaR
  CVaR(i)=(mean(r));
end

end



第二步:蒙特卡洛模拟,其中用到了历史模拟

function [VaR CVaR] = fun3(x , alpha,M)
n=length(x);
% v=var(x);%错了,
v=std(x);
u=mean(x);
xnew=normrnd(u,v,[1 n]);
[VaR CVaR]=fun1(xnew,alpha,M);
end

我喜欢真诚的朋友。

29
amitacn 发表于 2013-5-27 15:28:42
主函数调用

%get the data from the excel file
%Data.xls保存的是没有"%"的涨幅,2005.06.01-2011.06.24;
%X为什么只取了2006到2011年的呢?那就是因为滑动窗口大小为366,预测每个第366的数据。
clc;
clear all;
Data=xlsread('Data.xls');
Data=Data/100;
X=xlsread('NUM.xls');
%
alpha=1-0.95;
year=365;
X=X(1:length(Data)-year);
[VaR1 CVaR1]=fun(Data,alpha,year,1);
% [VaR2 CVaR2]=fun(Data,alpha,year,2);
[VaR3 CVaR3]=fun(Data,alpha,year,3);
% [VaR4 CVaR4]=fun(Data,alpha,year,4);
h=figure(1);
set(h,'color','w');
plot(X,VaR1,'b-*');
hold on;
% plot(X,VaR2,'r-*');
plot(X,VaR3,'m-*');
% plot(X,VaR4,'y-*');
xlabel('06/06/2006--24/06/2011');
legend('VaR-HS','VaR-NORM','VaR-CN','VaR-CF',2);%2表示在左上角
hold off;

h=figure(2);
set(h,'color','w')
plot(X,CVaR1,'b-*');
hold on;
% plot(X,CVaR2,'r-*');
plot(X,CVaR3,'m-*');
% plot(X,CVaR4,'y-*');
% xlabel('06/06/2006--24/06/2011');
% xlabel('06/06/2006--24/06/2011');
legend('CVaR-HS','CVaR-NORM','CVaR-CN','CVaR-CF',2);
hold off;
我喜欢真诚的朋友。

30
amitacn 发表于 2013-5-27 15:29:52
GARCH
MATLAB 用GARCH(参数),求得条件方差方程,迭代算出来后,带入就好了
我喜欢真诚的朋友。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-25 23:45