meanvarx.gms : Financial Optimization: Risk Management

**Description**

Minimum and maximum trade constraints are added to the standard mean-variance model. If it is not profitable to trade within these ranges, no trade should take place. A turnover constraint is added to improve stability of the solution to small changes in data. The resulting model is a nonlinear mixed-integer problem. Two important modeling tricks are demonstrated: (1) use of only the triangular part of the Q matrix, and (2) introduction of the marginal variance to improve computational performance of large QP problems.

**Reference**

- Dahl, H, Meeraus, A, and Zenios, S A, Some Financial Optimization Models: Risk Management. In Zenios, S A, Ed, Financial Optimization. Cambridge University Press, New York, NY, 1993.

**Small Model of Type :** MINLP

**Category :** GAMS Model library

**Main file :** meanvarx.gms

```
$Title Financial Optimization: Risk Management (MEANVARX,SEQ=113)
$Ontext
Minimum and maximum trade constraints are added to the standard
mean-variance model. If it is not profitable to trade within these
ranges, no trade should take place. A turnover constraint is added
to improve stability of the solution to small changes in data. The
resulting model is a nonlinear mixed-integer problem.
Two important modeling tricks are demonstrated: (1) use of only
the triangular part of the Q matrix, and (2) introduction of
the marginal variance to improve computational performance of
large QP problems.
Dahl, H, Meeraus, A, and Zenios, S A, Some Financial Optimization
Models: Risk Management. In Zenios, S A, Ed, Financial Optimization.
Cambridge University Press, New York, NY, 1993.
$Offtext
$Eolcom !
Set i securities / cn, fr, gr, jp, sw, uk, us /; alias (i,j) ;
Parameter mu(i) expected return of security /
cn 0.1287
fr 0.1096
gr 0.0501
jp 0.1524
sw 0.0763
uk 0.1854
us 0.0620 /
Table q(i,j) covariance matrix
cn fr gr jp sw uk us
cn 42.18
fr 20.18 70.89
gr 10.88 21.58 25.51
jp 5.30 15.41 9.60 22.33
sw 12.32 23.24 22.63 10.32 30.01
uk 23.84 23.80 13.22 10.46 16.36 42.23
us 17.41 12.62 4.70 1.00 7.20 9.90 16.42 ;
* we will continue to use only the lower triangle of the q-matrix
* and adjust the off diagonal entries to give the correct results.
q(i,j) = 2*q(j,i) ; q(i,i) = q(i,i)/2;
Scalars tau bounding parameter on turnover of current holdings
lambda return versus variance component tradeoff parameter ;
Set pd portfolio data labels /
old current holdings fraction of the portfolio
umin minimum increase of holdings fraction of security i
umax maximum increase of holdings fraction of security i
lmin minimum decrease of holdings fraction of security i
lmax maximum decrease of holdings fraction of security i /
Table bdata(i,pd) portfolio data and trading restrictions
* - increase - - decrease -
old umin umax lmin lmax
cn 0.2 0.03 0.11 0.02 0.30
fr 0.2 0.04 0.10 0.02 0.15
gr 0.0 0.04 0.07 0.04 0.10
jp 0.0 0.03 0.11 0.04 0.10
sw 0.2 0.03 0.20 0.04 0.10
uk 0.2 0.03 0.10 0.04 0.15
us 0.2 0.03 0.10 0.04 0.30 ;
bdata(i,'lmax') = min(bdata(i,'old'),bdata(i,'lmax')); ! tighten bound
Abort$(abs(sum(i, bdata(i,'old'))-1) >= 1e5) 'error in bdata', bdata;
Variables
omega objective variable definition for minlp
x(i) fraction of portfolio of current holdings of i
xi(i) fraction of portfolio increase
xd(i) fraction of portfolio decrease
mvar(i) marginal variance
y(i) binary switch for increasing current holdings of i
z(i) binary switch for decreasing current holdings of i
Binary Variables y,z; positive variables x, xi, xd;
Equations budget budget constraint
turnover restrict maximum turnover of portfolio
maxinc(i) bound of maximum lot increase of fraction of i
mininc(i) bound of minimum lot increase of fraction of i
maxdec(i) bound of maximum lot decrease of fraction of i
mindec(i) bound of minimum lot decrease of fraction of i
binsum(i) restrict use of binary variables
xdef(i) final portfolio definition
mvardef(i) marginal variance definition
obj objective function
objx objective function;
budget.. sum(i, x(i)) =e= 1 ;
xdef(i).. x(i) =e= bdata(i,'old') - xd(i) + xi(i);
maxinc(i).. xi(i) =l= bdata(i,'umax')*y(i) ;
mininc(i).. xi(i) =g= bdata(i,'umin')*y(i) ;
maxdec(i).. xd(i) =l= bdata(i,'lmax')*z(i) ;
mindec(i).. xd(i) =g= bdata(i,'lmin')*z(i) ;
binsum(i).. y(i) + z(i) =l= 1;
turnover.. sum(i, xi(i)) =l= tau ;
mvardef(i).. mvar(i) =e= sum(j, q(i,j)*x(j)) ;
obj.. omega =e= sum((i,j), x(i)*q(i,j)*x(j)) - lambda*sum(i, mu(i)*x(i));
objx.. omega =e= sum(i, x(i)*mvar(i)) - lambda*sum(i, mu(i)*x(i));
Models
mean / budget, xdef, turnover, maxinc, mininc, maxdec, mindec, binsum, obj /
marg / budget, xdef, turnover, maxinc, mininc, maxdec, mindec, binsum, mvardef, objx /;
lambda = 0.5 ; tau = .3 ;
Solve mean minimizing omega using minlp ;
Solve marg minimizing omega using minlp ;
Parameter report summary report;
report(i,'old') = bdata(i,'old');
report(i,'inc') = xi.l(i);
report(i,'dec') = xd.l(i);
report(i,'new') = x.l(i);
Display report;
```