Bond Portfolio Optimization Model: PBOND
In certain situations, a business or individual may be faced with financial obligations over a future number of periods. In order to defease (i.e., eliminate) this future debt, the debtor can determine a minimal cost mix of current assets (e.g., cash and bonds) that can be used to cover the future stream of payments. This problem is sometimes referred to as the cash flow matching problem or the debt defeasance problem. A detailed discussion of this model may be found in Developing More Advanced Models.
MODEL:
! Bond portfolio/cash matching problem. Given cash
needs in a series of future periods, what
collection of bonds should we buy to meet these
needs?;
SETS:
BOND/A B/ :
MATAT, ! Maturity period;
PRICE, ! Price;
CAMNT, ! Coupon;
BUY; ! Amount to buy;
PERIOD/1..15/:
NEED, ! Cash needed each period;
SINVEST; ! Short term investment each period;
ENDSETS
DATA:
STRTE = .04; ! Short term interest rate;
MATAT = 6, 13; ! Years to maturity;
PRICE = .980, .965; ! Bond purchase prices;
CAMNT = .060, .065; ! Bond coupon amounts;
NEED = 10, 11, 12, 14, 15, 17, 19, 20, 22, 24,
26, 29, 31, 33, 36; ! Cash needs;
ENDDATA
! Minimize the total investment required to generate
the stream of future cash needs;
MIN = LUMP;
! First period is slightly special;
LUMP = NEED( 1) + SINVEST( 1) +
@SUM( BOND: PRICE * BUY);
! For subsequent periods;
@FOR( PERIOD( I)| I #GT# 1:
@SUM( BOND( J)| MATAT( J) #GE# I:
CAMNT( J) * BUY( J)) +
@SUM( BOND( J)| MATAT( J) #EQ# I:
BUY( J)) +
( 1 + STRTE) * SINVEST( I - 1) =
NEED( I) + SINVEST( I);
);
! Can only buy integer bonds;
@FOR( BOND( J): @GIN( BUY( J)));
END
Model: PBOND