全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2185 2
2014-04-19
This is SAS optmodel implementation of Portfolio optimization with CVaR. The sim block is a simple simulation of returns of financial instruments. You may replace it with real data observed from stock exchanges or with other joint distributions

If interested, please refer to the paper in the following link

http://www.engineering.uiowa.edu/~krokhmal/pdf/cvar.pdf


***************************************************;

%let num_senarios=1000;

%let num_fin_instruments=5;

%let omega=0.025;
%let alpha=0.95;

data sim;
   array returns(*) return1-return&num_fin_instruments;
  
    do i=1 to &num_senarios;
       do j=1 to &num_fin_instruments;
         returns(j)=0.01*j+rannor(1230)*0.02*j;
        end;
        output;
    end;
    drop i j;
run;

proc optmodel noprint;

set <num>  index_senario;
set <num>  index_fin_instruments = 1..&num_fin_instruments;
num returns{index_senario,index_fin_instruments};
num omega =&omega ;


   read data sim into index_senario =[_n_]   
     {r in index_fin_instruments} <returns[_n_,r]=col("return"||r)>;


var z{i in index_senario}  >=0;

var x{j in index_fin_instruments}  >=0 <=0.25;  ***concentration contraints**;

var KI ;

min func=(KI + sum{i in index_senario} 1/(&num_senarios*(1-&alpha))*z[i]);

con cVar {i in index_senario}:
      z[i] >= sum{j in index_fin_instruments} (-1)*returns[i,j] * x[j] - KI;
      ****linearization contraints***;
con xtot: sum{j in index_fin_instruments} x[j]=1;
      ****allocation total is 100%***;

  con target: sum{i in index_senario,j in index_fin_instruments}
                (1/&num_senarios)* returns[i,j] * x[j]>=omega;
      ***return targets***;
     
  solve;
/*expand;*/
impvar ret=sum{i in index_senario,j in index_fin_instruments}
                (1/&num_senarios)* returns[i,j] * x[j];
print func ki x omega ret;
num omega2=omega+0.005;
  con target2: sum{i in index_senario,j in index_fin_instruments}
                (1/&num_senarios)* returns[i,j] * x[j]>=omega+0.005;
solve;

print func ki x omega2 ret;

create data solution from [i]={index_fin_instruments} x=x;

quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-4-19 12:22:54
感谢分享~!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-19 23:58:46
support
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群