portfolio.gms : Stochastic portfolio model

Description

```This is a GAMS version of a LINGO model

Conditional Value at Risk model(PORTCVAR)
We specify a probability, theta, e.g., 0.1, and
then we want the model to choose a) a target return,
and b) a portfolio composition, so as to
Max theta*target - (expected shortfall below target).
It is easy to see that if all scenarios are equally likely,
then it is worthwhile increasing the target as long as
less than theta of the scenarios fall short of the target.
So at an optimum, the probability of missing the target

Key words: Conditional Value at Risk, CVAR, Value at Risk,
Downside risk, Scenario method, Portfolio;
```

Small Model of Type : SP

Category : GAMS EMP library

Main file : portfolio.gms

``````\$Title Stochastic portfolio model (PORTFOLIO,SEQ=80)

\$ontext

This is a GAMS version of a LINGO model

Conditional Value at Risk model(PORTCVAR)
We specify a probability, theta, e.g., 0.1, and
then we want the model to choose a) a target return,
and b) a portfolio composition, so as to
Max theta*target - (expected shortfall below target).
It is easy to see that if all scenarios are equally likely,
then it is worthwhile increasing the target as long as
less than theta of the scenarios fall short of the target.
So at an optimum, the probability of missing the target

Key words: Conditional Value at Risk, CVAR, Value at Risk,
Downside risk, Scenario method, Portfolio;

\$offtext

Set j assets    / ATT, GMC, USX /
s scenarios / s1*s12 /

Table vs(s,j) scenario returns from assets
att     gmc     usx
s1  1.300   1.225   1.149
s2  1.103   1.290   1.260
s3  1.216   1.216   1.419
s4  0.954   0.728   0.922
s5  0.929   1.144   1.169
s6  1.056   1.107   0.965
s7  1.038   1.321   1.133
s8  1.089   1.305   1.732
s9  1.090   1.195   1.021
s10  1.083   1.390   1.131
s11  1.035   0.928   1.006
s12  1.176   1.715   1.908;

Alias (j,jj);
Parameter
mean(j)      mean return
dev(s,j)     deviations
covar(j,jj)  covariance matrix of returns
totmean      total mean return;

mean(j)     = sum(s, vs(s,j))/card(s);
dev(s,j)    = vs(s,j) - mean(j);
covar(j,jj) = sum(s, dev(s,j)*dev(s,jj))/(card(s)-1);
totmean     = sum(j, mean(j))/card(j);

display mean, dev, covar, totmean;

Parameter
p(s)   probability / #s [1/card(s)] /
v(j)   return from assets; v(j) = mean(j);
Scalar
theta  relative volume / [1-0.9] /
lambda weight EV versus CVaR / 0.2 /;

Variables
r      value of portfolio under each scenario
w(j)   portfolio selection;

Positive variables w;

Equations
defr     return of portfolio
budget   budget constraint;

defr..     r =e= sum(j, v(j)*w(j));

budget..   sum(j, w(j)) =e= 1;

model portfolio / all /;

file emp / '%emp.info%' /; emp.nd=4;
put emp '* problem %gams.i%'
/ 'stage 2 r defr v'
/ "jrandvar v('att') v('gmc') v('usx')"
loop(s,
put / p(s) vs(s,"att") vs(s,"gmc") vs(s,"usx"));
putclose emp;

Parameter
s_v(s,j)     return from assets by scenario /s1.att 1/
s_r(s)       return from portfolio by scenario;

Set dict / s     .scenario.''
v     .randvar. s_v
r     .level.   s_r /;

solve portfolio using emp max r scenario dict;

display s_r;

put emp '* problem %gams.i%'
/ 'cvarlo ' theta
/ 'stage 2 r defr v'
/ "jrandvar v('att') v('gmc') v('usx')"
loop(s,
put / p(s) vs(s,"att") vs(s,"gmc") vs(s,"usx"));
putclose emp;

solve portfolio using emp max r scenario dict;
display s_r;

* Extended model with convex combination for EV(r) and CVaR(r)
Variables
CVaR_r    conditional value at risk of r
EV_r      expected value of r
obj       objective variable;
Equations
defobj    convex combination for both risk measures;

defobj..   obj =e= lambda*EV_r + (1-lambda)*CVaR_r;

model portfolio_ext / all /;

put emp '* problem %gams.i%'
/ 'ExpectedValue r EV_r'
/ 'cvarlo r CVaR_r ' theta
/ 'stage 2 r defr v'
/ 'stage 1 defobj obj'
/ "jrandvar v('att') v('gmc') v('usx')"
loop(s,
put / p(s) vs(s,"att") vs(s,"gmc") vs(s,"usx"));
putclose emp;

solve portfolio_ext using emp max obj scenario dict;
display s_r;
``````