Description
ComovementsModel.gms: Indexation model using the co-movements approach Consiglio, Nielsen and Zenios. PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 7.2.2 Last modified: Apr 2008.
Category : GAMS FIN library
Mainfile : ComovementsModel.gms includes : InputData.gdx
$title Indexation model using the co-movements approach
* ComovementsModel.gms: Indexation model using the co-movements approach
* Consiglio, Nielsen and Zenios.
* PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 7.2.2
* Last modified: Apr 2008.
SCALAR
EpsTolerance;
SETS BB Available bonds
EE Available currencies
BxE(BB,EE) Bonds by Currencies
SS Scenarios set
PARAMETERS
BondPrices0(BB) Bond prices at the beginning of the stage
BondPrices1(SS,BB) Bond prices at the end of the stage
BondReturns(SS,BB) Bond returns
ExchangeRates0(EE)
ExchangeRates1(SS,EE)
ExchangeRatesReturns(SS,EE)
ExpectedReturns(BB)
IndexReturns(SS);
$gdxIn InputData
$load BB=BB2 EE BxE=BxE2 SS BondPrices1=data2
$load BondPrices0=data3 ExchangeRates0 ExchangeRates1
$load IndexReturns
$gdxIn
ALIAS(BB,i)
ALIAS(SS,l)
ALIAS(EE,e);
BondReturns(l,i) = ( BondPrices1(l,i) - BondPrices0(i) ) / BondPrices0(i);
ExchangeRatesReturns(l,e) = ( ExchangeRates1(l,e) - ExchangeRates0(e) ) / ExchangeRates0(e);
* Calculate bond returns in USD currency
BondReturns(l,i)$BxE(i,'DEM') = BondReturns(l,i)$BxE(i,'DEM') + ExchangeRatesReturns(l,'DEM');
BondReturns(l,i)$BxE(i,'CHF') = BondReturns(l,i)$BxE(i,'CHF') + ExchangeRatesReturns(l,'CHF');
ExpectedReturns(i) = ( 1.0 / CARD(l) ) * SUM(l, BondReturns(l,i) );
DISPLAY BondPrices0,BondReturns,ExchangeRatesReturns,ExpectedReturns,IndexReturns;
VARIABLE
z;
POSITIVE VARIABLES
x(i);
EQUATIONS
ObjDef
NormalCon
TrackingConL(l)
TrackingConG(l);
ObjDef.. z =E= SUM(i, ExpectedReturns(i) * x(i));
TrackingConG(l).. SUM(i, BondReturns(l,i) * x(i)) - IndexReturns(l) =G= - EpsTolerance;
TrackingConL(l).. SUM(i, BondReturns(l,i) * x(i)) - IndexReturns(l) =L= EpsTolerance;
NormalCon.. SUM(i, x(i)) =E= 1.0;
MODEL IndexFund 'PFO Model 7.3.3' /ObjDef,TrackingConG,TrackingConL,NormalCon/;
EpsTolerance = 0.1;
WHILE ( IndexFund.MODELSTAT <= 2,
SOLVE IndexFund MAXIMIZING z USING LP;
EpsTolerance = EpsTolerance - 0.01;
);
EpsTolerance = EpsTolerance + 0.02;
SOLVE IndexFund MAXIMIZING z USING LP;
DISPLAY x.l,z.l;