MODEL:
! Markowitz portfolio Matching model   (PortMatch);
! We want to match the first or "benchmark" asset
  with the remaining ones;

! Keywords: Hedging, Markowitz, Matching, Portfolio optimization;
SETS:
  ASSET: RET, X;
  TMAT( ASSET, ASSET) | &1 #GE# &2: COV;
 ENDSETS
DATA: ASSET= SP500 ATT GMC USX; ! The expected returns; RET = 1.191458 1.089083, 1.21367, 1.23458; ! Covariance matrix; COV = .02873661 .01266498 .01080754 .03562763 .01240721 .05839170 .04378880 .01307513 .05542639 .09422681; ! The desired return; TARGET = 1.191458; ENDDATA !-------------------------------------------------; ! Min the var in portfolio return; [OBJ] MIN = (@SUM( ASSET(I): COV(I, I) * X( I)^2) + 2 * @SUM( TMAT( I, J) | I #NE# J: COV( I, J) * X( I) * X( J))) ; !Matching is equivalent to being short the benchmark; X( 1) = -1; @FREE( X( 1)); ! Budget constraint(applies to remaining assets); [BUDGET] @SUM( ASSET( I)| I #GT# 1: X( I)) = 1; ! Return requirement(applies to remaining assets); [RETURN] @SUM( ASSET( I)| I #GT# 1: RET( I) * X( I)) >= TARGET; END