Estimate : Data estimation for mean-variance model

Description

Estimate.gms:  Estimate variance and covariance data.
Consiglio, Nielsen and Zenios.
PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 3.2.1
Last modified: Apr 2008.

Extract data from AssetsData.inc, and calculate ER and VarCov matrix
for just a subset of the data, given by the set SUBSET.
The resulting data are used in the MeanVar.gms and Sharpe.gms models.

We use real data for the 10-year period 1990-01-01 to 2000-01-01.
Data cover:
      23 Italian Stock indices
      3 Italian Bond indices (1-3yr, 3-7yr, 5-7yr)
      Italian risk-free rate (3-month cash)

      7 international Govt. bond indices
      5 Regions Stock Indices: (EMU, Eur-ex-emu, PACIF, EMER, NORAM)
      3 risk-free rates (3-mth cash) for EUR, US, JP

      US Corporate Bond Sector Indices (Finance, Energy, Life Ins.)

      Exchange rates, ITL to: (FRF, DEM, ESP, GBP, US, YEN, EUR)
      Also US to EUR.


Category : GAMS FIN library


Mainfile : Estimate.gms   includes :  AssetsUniverse.inc  AssetsData.inc  ExchangeRates.inc

$title Estimate variance and covariance data

* Estimate.gms:  Estimate variance and covariance data.
* Consiglio, Nielsen and Zenios.
* PRACTICAL FINANCIAL OPTIMIZATION: A Library of GAMS Models, Section 3.2.1
* Last modified: Apr 2008.

* Extract data from AssetsData.inc, and calculate ER and VarCov matrix
* for just a subset of the data, given by the set SUBSET.
* The resulting data are used in the MeanVar.gms and Sharpe.gms models.

* We use real data for the 10-year period 1990-01-01 to 2000-01-01.
* Data cover:
*       23 Italian Stock indices
*       3 Italian Bond indices (1-3yr, 3-7yr, 5-7yr)
*       Italian risk-free rate (3-month cash)
*
*       7 international Govt. bond indices
*       5 Regions Stock Indices: (EMU, Eur-ex-emu, PACIF, EMER, NORAM)
*       3 risk-free rates (3-mth cash) for EUR, US, JP
*
*       US Corporate Bond Sector Indices (Finance, Energy, Life Ins.)
*
*       Exchange rates, ITL to: (FRF, DEM, ESP, GBP, US, YEN, EUR)
*       Also US to EUR.


* Include the file containing the set definition
* for the asset classes, time periods and exchange rates.

$include "AssetsUniverse.inc";

* Include the file storing the 10 year monthly data for 45 asset classes.
* Also include an Italian risk-free asset, which is treated separately
* (not based on historical data).

$include "AssetsData.inc";

* Include the file storing the 10 year monthly exhange rate
* Italian Lire against: DEM. ESP. GBP. USD. JPY. ECU.
* Also US-EUR.

$include "ExchangeRates.inc";

* Indexes converted to IT Lira
PARAMETER DATA_ITL(TS_DATES, ASSETS);

* Annualized returns in IT Lira
PARAMETER Ret_ITL(TS_DATES, ASSETS);

ALIAS (TS_DATES,   t);
ALIAS (ASSETS,     i);
ALIAS (IT_ALL,     it);

* 27 Italian asset classes:
DATA_ITL(t, it) = ASSET_DATA(t, it);

* Government Bonds, various currencies:
DATA_ITL(t, "GVT_GM") = ASSET_DATA(t, "GVT_GM")   * EXCHRT(t, "ITL-DEM");
DATA_ITL(t, "GVT_IT") = ASSET_DATA(t, "GVT_IT");
DATA_ITL(t, "GVT_FR") = ASSET_DATA(t, "GVT_FR")   * EXCHRT(t, "ITL-FRF");
DATA_ITL(t, "GVT_SP") = ASSET_DATA(t, "GVT_SP")   * EXCHRT(t, "ITL-ESP");
DATA_ITL(t, "GVT_US") = ASSET_DATA(t, "GVT_US")   * EXCHRT(t, "ITL-USD");
DATA_ITL(t, "GVT_JP") = ASSET_DATA(t, "GVT_JP")   * EXCHRT(t, "ITL-JPY");
DATA_ITL(t, "GVT_UK") = ASSET_DATA(t, "GVT_UK")   * EXCHRT(t, "ITL-GBP");

* Stock Indices, various currencies:
DATA_ITL(t, "EMU") = ASSET_DATA(t, "EMU")         * EXCHRT(t, "ITL-EUR");
DATA_ITL(t, "EU_EX") = ASSET_DATA(t, "EU_EX")     * EXCHRT(t, "ITL-EUR");
DATA_ITL(t, "PACIFIC") = ASSET_DATA(t, "PACIFIC") * EXCHRT(t, "ITL-JPY");
DATA_ITL(t, "EMERGT") = ASSET_DATA(t, "EMERGT")   * EXCHRT(t, "ITL-USD");
DATA_ITL(t, "NOR_AM") = ASSET_DATA(t, "NOR_AM")   * EXCHRT(t, "ITL-USD");

* Risk-free, 3-months cash, various currencies:
DATA_ITL(t, "CASH_EU") = ASSET_DATA(t, "CASH_EU") * EXCHRT(t, "ITL-EUR");
DATA_ITL(t, "CASH_US") = ASSET_DATA(t, "CASH_US") * EXCHRT(t, "ITL-USD");
DATA_ITL(t, "CASH_JP") = ASSET_DATA(t, "CASH_JP") * EXCHRT(t, "ITL-JPY");

* Corporate Bond Indices, all in USD:
DATA_ITL(t, "CRP_FIN") = ASSET_DATA(t, "CRP_FIN") * EXCHRT(t, "ITL-USD");
DATA_ITL(t, "CRP_ENG") = ASSET_DATA(t, "CRP_ENG") * EXCHRT(t, "ITL-USD");
DATA_ITL(t, "CRP_LFE") = ASSET_DATA(t, "CRP_LFE") * EXCHRT(t, "ITL-USD");

* Italian total stock index
 DATA_ITL(t, "ITMHIST") = ASSET_DATA(t, "ITMHIST");

* Calculate annualized returns, expected returns and covariances.
* Note that the risk-free asset is treated specially (no historical data).
SCALAR RiskFreeRt / 0.035 /;

Ret_ITL(t,i) $ (data_ITL(t-1,i) <> 0) =
              log( data_ITL(t,i) / data_ITL(t-1,i) ) / Delta;

* Expected (average) return
PARAMETER MU(i);
MU(i) = SUM( t $ (ORD(t) > 1), Ret_ITL(t,i)) / (CARD(t) - 1);

PARAMETER MAX_MU;
MAX_MU = SMAX(i, MU(i));

ALIAS (i, i1, i2);

PARAMETER Q(i1, i2);
Q(i1,i2) =
          SUM(t $ (ORD(t) > 1),
             (Ret_ITL(t,i1) - mu(i1))*(Ret_ITL(t,i2) - mu(i2))) / (CARD(t)-2);

* Remove very small elements from Q
* (e.g. from the RiskFree asset shows up with correlations around 1e-17):

Q(i1,i2) $ (abs(Q(i1,i2)) <= 1e-12) = 0;


* SUBSET: From here the model differs from IntlAssets.gms.
* The following code estimates data for the MeanVar model, MeanVar.gms

SET SUBSET(ASSETS) /
    Cash_EU    Cash in Euro,
    YRS_1_3    Short-term Italian bonds,
    EMU        Euro stock index,
    EU_EX      Ex-Euro stock index,
    PACIFIC    Pacific stock index,
    EMERGT     Emerging markets stock index,
    NOR_AM     North-America stock index,
    ITMHIST    Italian General stock index
/;

ALIAS (SUBSET, s1, s2);

PARAMETERS
   VarCov(s1, s2)
   ExpectedReturns(s1);

VarCov(s1, s2) = Q(s1, s2);
ExpectedReturns(s1)    = Mu(s1);

SCALAR
   MeanRiskFreeReturn;

PARAMETER
   ExcessRet(t,s1),
   ExcessCov(s1, s2),
   MeanExcessRet(s1);

ExcessRet(t,s1)    = Ret_ITL(t,s1) - Ret_ITL(t,'CASH_EU');
MeanRiskFreeReturn = SUM(t$(ORD(t) > 1), Ret_ITL(t,'CASH_EU')) / (CARD(t)-1);
MeanExcessRet(s1)  = SUM(t$(ORD(t) > 1), ExcessRet(t,s1)) / (CARD(t)-1);
ExcessCov(s1,s2)   = SUM(t$(ORD(t) > 1), (ExcessRet(t,s1) - MeanExcessRet(s1))
                                        *(ExcessRet(t,s2) - MeanExcessRet(s2))) / (CARD(t)-2);

FILE ExpecRetHandle /"ExpectedReturns.csv"/;
FILE VarCovHandle   /"VarianceCovariance.csv"/;

ExpecRetHandle.pc = 5; VarCovHandle.pc = 5;
ExpecRetHandle.pw = 1048; VarCovHandle.pw = 1048;

PUT ExpecRetHandle; LOOP(s1, PUT s1.TL,ExpectedReturns(s1):8:6/ ); PUTCLOSE;
PUT  VarCovHandle; LOOP((s1,s2), PUT s1.TL,s2.TL,VarCov(s1,s2):8:6/ );PUTCLOSE;

* The following code estimates data for the Sharpe model, Sharpe.gms
* A Library of Financial Optimization Models, Section 2.3.

* We assume that the CASH_EU is the risk free asset. In general,
* these data can be used to determine the optimal Sharpe ratio
* respect to a benchmark.

FILE RiskFreeReturn    /"RiskFreeReturn.inc"/;
FILE ExExpecRetHandle  /"ExcessExpectedReturns.csv"/;
FILE ExVarCovHandle    /"ExcessVarianceCovariance.csv"/;

ExExpecRetHandle.pc = 5; ExExpecRetHandle.pw = 1024;
ExVarCovHandle.pc   = 5; ExVarCovHandle.pw = 1024;

PUT RiskFreeReturn "SCALAR RiskFreeRate /", MeanRiskFreeReturn:8:6, " /;"; PUTCLOSE;
PUT ExExpecRetHandle; LOOP(s1, PUT s1.TL,MeanExcessRet(s1):8:6/ ); PUTCLOSE;
PUT ExVarCovHandle; LOOP((s1,s2), PUT s1.TL,s2.TL,ExcessCov(s1,s2):8:6/ ); PUTCLOSE;

* Dump everything into one GDX container

EXECUTE_UNLOAD 'Estimate';