Description
PersonalAssetAllocation.gms: Personal Asset Allocation. Consiglio, Nielsen and Zenios. PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 8.5 Last modified: May 2008.
Category : GAMS FIN library
Mainfile : PersonalAssetAllocation.gms includes : AssetReturns-PersonalAssetAllocation.inc CapFactorsScenarios.inc PersonalCommonInclude.inc InflationScenarios.inc LiabilityScenarios.inc
$title Personal Asset Allocation
* PersonalAssetAllocation.gms: Personal Asset Allocation.
* Consiglio, Nielsen and Zenios.
* PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 8.5
* Last modified: May 2008.
$include "PersonalCommonInclude.inc";
PARAMETER ar(l,t,i)
/
$onDelim
$include "AssetReturns-PersonalAssetAllocation.inc";
$offDelim
/;
PARAMETER lblty(l,t)
/
$onDelim
$include "LiabilityScenarios.inc";
$offDelim
/;
PARAMETER infltn(l,t)
/
$onDelim
$include "InflationScenarios.inc"
$offDelim
/;
PARAMETER cfs(l,t)
/
$onDelim
$include "CapFactorsScenarios.inc"
$offDelim
/;
POSITIVE VARIABLES
HO(i) Asset holdings
YP(l,t) yPlus - surplus in excess of growth rate.
YM(l,t) yMinus - deficit in lack of growth rate.;
FREE VARIABLES
OF Objective function value;
EQUATIONS
OFe Objective Function equation (Call).
OFPCe Objective Function equation (Call - lambda * Put).
BAe BAlance equation.
PUTe Constraint to bound the expected value of the negative deviations.
YPMd(l,t) Equations defining the yPlus and yMinus dynamics;
OFe.. OF =E= (1.0/CARD(l)) * SUM(l, SUM(t, lblty(l,t) * YP(l,t) * cfs(l,t)));
OFPCe.. OF =E= (1.0/CARD(l)) * (SUM(l, SUM(t, lblty(l,t) * YP(l,t) * cfs(l,t))) -
lambda * SUM(l, SUM(t,lblty(l,t) * YM(l,t) * cfs(l,t))));
PUTe .. SUM(l, SUM(t,lblty(l,t) * YM(l,t) * cfs(l,t))) / CARD(l) =L= omega;
BAe.. SUM(i, HO(i)) =E= ipv;
YPMd(l,t).. SUM( i, (HO(i) * ar(l,t,i))) - (grr + infltn(l,t)) =E= YP(l,t) - YM(l,t);
* Model that maximizes the Call side with bound on the Put side
MODEL PersonalModelOne 'PFO Model 13.5.1' /OFe,PUTe,BAe,YPMd/;
PersonalModelOne.RESLIM = 100000000;
PersonalModelOne.ITERLIM = 100000000;
HO.UP(i) = ipv;
SOLVE PersonalModelOne USING LP MAXIMIZING OF;
FILE AssetAllocationHandle /"PAA.csv"/;
AssetAllocationHandle.pc = 5;
AssetAllocationHandle.pw = 1048;
PARAMETER
YpYm(l,t);
YpYm(l,t) = YP.l(l,t) * YM.l(l,t);
DISPLAY YpYm,PUTe.M;
PUT AssetAllocationHandle;
PUT "Maximize the Call side with bound on the Put side"/;
LOOP(i,
PUT CARD(l):0:0,CARD(t):0:0,nbryears:0:0,omega:0:3,agrr:0:4,i.TL,i.TE(i),HO.L(i):12:8/;
);
* Model that maximizes the Call side and minimize the Put side
MODEL PersonalModelTwo /OFPCe,BAe,YPMd/;
PersonalModelTwo.RESLIM = 100000000;
PersonalModelTwo.ITERLIM = 100000000;
HO.UP(i) = ipv;
SOLVE PersonalModelTwo USING LP MAXIMIZING OF;
YpYm(l,t) = YP.l(l,t) * YM.l(l,t);
DISPLAY YpYm;
PUT "Maximize the Call side and minimize the Put side"/;
LOOP(i,
PUT CARD(l):0:0,CARD(t):0:0,nbryears:0:0,lambda:0:3,agrr:0:4,i.TL,i.TE(i),HO.L(i):12:8/;
);