SAS在金融中的应用四

1、导入上证综指.csv,计算上证综指的单期日对数收益率,做两张图:
一是日收益率随时间变化的图;
二是日收益率数据的经验累积概率分布图与正态分布累积概率分布图。判断日收益率数据的波动特征,以及日收益率数据是否服从正态分布。
(提示,请参考第七章的内容)
data WORK.szzz1;                                                                                    
      %let _EFIERR_ = 0; /* set the ERROR detection macro variable */                                                                    
      infile 'D:\mySASDATA\第8-9周作业\上证综指.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;                      
      informat VAR1 $9. ;                                                                                                           
      informat VAR2 $8. ;                                                                                                              
      informat VAR3 yymmdd10. ;                                                                                                       
      informat VAR4 comma12.0 ;                                                                                                      
      format VAR1 $9. ;                                                                                                             
      format VAR2 $8. ;                                                                                                               
      format VAR3 yymmdd10. ;                                                                                                       
      format VAR4 best12. ;                                                                                                         
      input   VAR1 $  VAR2 $    VAR3      VAR4 ;                                                                                                                                                                                                                                                                                                  
      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */      
 run; 
data szzz2;
set szzz1;
rename var1=code var2=name var3=date var4=close;
label var1="编号" var2="简称" var3="日期" var4="收盘价";
year=year(var3);
month=month(var3);
day=day(var3);
run;
proc sort data=szzz2;
by year month day;
run;
data szzz3;
set szzz2;
r_log=log(close)-log(lag(close));
run;
proc gplot data=szzz3;
title "图一:上证综指的单期日对数收益率";
plot r_log*date;
symbol i=join;
run;
quit;
data szzz8;
set szzz3;
data szzz8;
modify szzz8;
if _n_=1 then remove;
run;
data szzz4;
set szzz3;
run;
data szzz4;
modify szzz4;
if _n_=1 then remove;
run;
proc sort data=szzz4;
by r_log;
run;
proc means data=szzz4;
var r_log;
output out=a std(r_log)=rstd;
run;
/*由上步可知r_log的均值为0.000479108,标准差为0.0223311688,一共有7401个观测值*/
data fb;
set szzz4;
p1=_n_/7401;/*计算每个观测所对应的经验分布的概率*/
p2=probnorm((r_log-0.000479108)/0.0223311688);/*计算每个观测所对应的正态分布概率*/
run;
proc gplot data=fb;
title "图二:日收益率数据的经验累积概率分布图与正态分布累积概率分布图";
plot p1*r_log  p2*r_log/overlay vaxis=axis1 haxis=axis2 vref=1;
symbol1 v=. h=1 i=spline L=1 font=swissb;
symbol2 v=none h=1 i=spline L=1;
axis1 label=('prob')  order=(0 to 1 by 0.2);
axis2 label=('r_log') order=(-0.17 to 0.75  by 0.05);
run;
quit;
日收益率数据呈现“波动聚集”现象;
从总体上看,正态分布函数与经验分布函数的曲线拟合较好,
因此,如果在不考虑分布函数的尾部特征时,日收益率数据服从正态分布还是比较合理的。
2.利用上证综指.csv的数据,试采用参数法、历史模拟法计算2020年一整年的VaR,然后对VaR模型进行评估
/*历史法*/
data szzz5;
set szzz3;
if  _n_>=6801;/*上证综指2020年第一个交易日_n_为7101,
采用该指数收益率在2020-01-02前300个交易日数据作为样本期,即_n_从6801开始*/
run;
data b;
set szzz5;
if _n_<1;/*建立一个暂无一个观测的数据集,用于存放估算得到的每日VAR值*/
run;
options nodate nonotes nosource;/*系统选项:不在LOG窗口输出日期、注释和原程序*/
%macro hisvar;/*创建一个采用历史模拟法估计每日VAR的宏*/
%do n=1 %to 243;/*上证综指在2020年度有243个交易日,估算每日VAR值总共需要估算243次*/
data c;
set szzz5;
if _n_<=300;
proc sort data=c;
by r_log;
data c;
modify c;
if _n_^=4 then remove;
proc append base=b data=c;
data szzz5;
modify szzz5;
if _n_=1 then remove;
%end;
%mend hisvar;
%hisvar;
run;
data d;
set b;
var=abs(r_log);
keep var;
data e;
set szzz3;
if _n_>=7101 and _n_<=7343;
data f;
merge d e;
if var+r_log<0 then liwai=1;/*如果实际损失超过var值,例外取1*/
else liwai=0;
run;
data h;
set f;
where liwai=1;
run;
/*可知在2020年243个交易日中例外数为5个*/
data g;
p=probbnml(0.01,243,5);
proc print data=g;
title "prob(liwai<=5)";
run;
结果显示prob(liwai<=5)=0.96329,不是一个小概率,模型没有高估风险;
prob(liwai>=5)=1-prob(liwai<=5)=1-0.96329=0.03671是一个小概率,模型可能低估了风险;
参数法(只采用参数法中的移动平均模型)
data a1;
set szzz3;
if date>='01jan2019'd;/*取窗口期的时间长度为1年*/
run;
proc means data=a1;
output out=c1 mean(r_log)=m std(r_log)=s;/*C1只是用来形成数据集变量模板,无实际用途*/
run;
data c2;
set c1;
if _n_<0;
options nodate nonotes nosource;
%macro ydpjvar;
%do n=1 %to 243;/*上证综指在2020年度有243个交易日,估算每日VAR值总共需要估算243次*/
data b1;
set a1;
if _n_<=244;/*选取前一年的观测数据作为样本,上证指数在1999年度共有244个交易日*/
proc means data=b1;
output out=b2 mean(r_log)=m std(r_log)=s;
proc append base=c2 data=b2;
data a1;
modify a1;
if _n_=1 then remove;
%end;
%mend ydpjvar;
%ydpjvar;
run;
data d1;
set szzz3;
keep r_log;
where date>'31Dec2019'd and date<='31Dec2020'd;
run;
data e1;
merge c2 d1;
var=2.33*s-m;
if var+r_log<0 then liwai=1;
else liwai=0;
run;
data geshu2;
set e1;
where  liwai=1;
run;
/*由此可知,利用移动平均法估计波动率而构建的美元指数收益率的VAR模型,在2020年共产生了8个例外*/
data g2;
p=probbnml(0.01,243,8);
run;
此时prob(liwai<=8)=0.9991334141,为大概率,说明其没有高估风险;prob(liwai>=8)=0.0008665859为小概率,说明其低估了风险
3、采用指数移动平均法和Garch模型计算上证综指日收益率的波动率.并假设收益率服从时变的正态分布,
试采用参数法求出某一年的VaR,并对VaR模型效果进行评估.
/*采用指数移动平均法计算上证综指日收益率的波动率*/
options nodate nonotes nosource;
data a21(keep=date r_log);
set szzz8;
run;
data a22;
set a21;
rr_log=r_log**2;
run;
data ewma(keep=date);
set a22;
data a23(keep=date ewma);
set a22;
w=0.94;/*指数平滑权*/
retain ewma;/*序列的初始值*/
if _n_=1 then ewma=rr_log;/*单指数平滑*/
else ewma=w*rr_log+(1-w)*ewma;
ewma=sqrt(ewma);
data ewma1;
merge ewma a23;
by date;
run;
proc gplot data=ewma1;
title "图三:指数移动平均法计算的上证综指日收益率波动率";
plot ewma*date;
symbol i=join;
run;
quit;
/*采用Garch模型计算上证综指日收益率的波动率*/
data garch(keep=date);
set a22;
proc autoreg data=a22;
model r_log= / nlag=1 garch=(q=1,p=1,tr);
output out=out cev=cev;
data out(keep=date cev);
set out;
cev=sqrt(cev);   /*较为粗略的处理*/
data garch;
merge garch out;
by date;
run;
proc gplot data=garch;
title "图四:Garch模型计算的上证综指日收益率波动率";
plot cev*date;
symbol i=join;
run;
quit;
参数法求出某一年的VaR,并对VaR模型效果进行评估
/*以下模型计算的均为2020年的VAR*/
/*移动平均模型*/
data a3;
m1=0;
do n=0 to 243;
m1=m1+0.94**n;
end;
proc print data=a1;
var m1;
run;
/*这个程序递交以后,计算结果M1=16.666662042;*/
data c3;
set szzz3;
s2=0;
if _n_<1;
proc means data=szzz3;
output out=c4 mean(r_log)=m;
data c4;
modify c4;
if _n_>0 then remove;
data a4;
set szzz3;
if date>="01Jan2019"d;
run;
options nodate nonotes nosource;
%macro zsvar;
%do n=1 %to 243;
data b3;
set a4;
if _n_<=244;
retain s2;
if _n_=1 then s2=r_log**2;
else s2=r_log**2/16.666662042+0.94*s2;
data b3;
modify b3;
if _n_^=244 then remove;
proc append base=c3 data=b3;
proc means data=a4;
output out=b4 mean(r_log)=m;
proc append base=c4 data=b4;
data a4;
modify a4;
if _n_=1 then remove;
%end;
%mend zsvar;
%zsvar;
run;
data d2;
set c3;
keep s2;
data d3;
set szzz3; 
keep r_log;
where date>'31dec2019'd and date<='31dec2020'd;
data e2;
merge c4 d2 d3;
var=2.33*sqrt(s2)-m;
if var+r_log<0 then liwai=1;
else liwai=0;
run;
data geshu3;
set e2;
where liwai=1;
run;
/*可知在2020年243个交易日中例外数为5个*/
由题2可知prob(liwai<=5)=0.96329,不是一个小概率,模型没有高估风险;
prob(liwai>=5)=1-prob(liwai<=5)=1-0.96329=0.03671是一个小概率,模型可能低估了风险
/*GARCH模型*/
data a11;
set szzz8;
where date<'01jan2020'd and date>='01jan2005'd;/*经过初步尝试,发现选取2020年前所有数据和前十年的数据结果都较差,所以选取了前5年的数据*/
proc autoreg data=a11 outest=b11;
model r_log=/ nlag=1 garch=(q=1,p=1,tr);
output out=a12;
run;
data c5;
set szzz3;
s2=0;
t=0;
if _n_<1;
proc means data=szzz3;
output out=c6 mean(r_log)=m;
data c6;
modify c6;
if _n_>0 then remove;
data a5;
set szzz3;
if date>='01jan2019'd;
options nodate nonotes nosource;
%macro gavar;
%do n=1 %to 243;
data b5;
set a5;
if _n_<=244;
t=lag(r_log);
retain s2;
if _n_=1 then s2=r_log**2;
else s2=0.1792*t**2+0.8236*s2;
data b5;
modify b5;
if _n_^=244 then remove;
proc append base=c5 data=b5;
proc means data=a5;
output out=b6 mean(r_log)=m;
proc append base=c6 data=b6;
data a5;
modify a5;
if _n_=1 then remove;
%end;
%mend gavar;
%gavar;
run;
data d4;
set c5;
keep s2;
data d5;
set szzz3;
keep r_log;
where date>'31dec2019'd;
data e3;
merge c6 d4 d5;
var=2.33*sqrt(s2)-m;
if var+r_log<0 then liwai=1;
else liwai=0;
run;
data geshu4;
set e3;
where liwai=1 and m^=.;
run;
/*可知在2020年243个交易日中例外数为8个*/
由题2中计算的概率可知,此时prob(liwai<=8)=0.9991334141,为大概率,说明其没有高估风险;prob(liwai>=8)=0.0008665859为小概率,说明其低估了风险

文章内容仅供参考

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值