! Asset-Liability Management, Stochastic case;
! Each period we can buy and sell a variety of investments,
   and we can borrow or lend for one period at a rate
   specific to the period.  In the stochastic case, the
   borrowing and lending rates are random variables.
  How should we invest each period?
! Keywords: Financial planning, Asset-Liability management,
  Bonds, Yield curve, Stochastic optimization;
SETS:
 PERIOD: NEED, BORRMX;
 NODE: LEND, BORR, RLEND, RBORR,
       PERD, PREV, NWORTH, SHORTF;
 ASSET: HOLDMX, HOLDIN;
 PXA( PERIOD, ASSET): PAYOUT, PBUY, PSEL;
 NXA( NODE, ASSET): HOLD, BUY, SEL;
ENDSETS
DATA: ! Uncertainty is represented by a tree of possible outcome paths; PERIOD = 1..7; ! There re 7 periods; ! External cash needs by period due to previous commitments; NEED = -2000 -500 -400 -380 -360 -340 -300; ! Max we can borrow. Cannot borrow(and not repay) at end; BORRMX = 2000 2000 2000 2000 2000 2000 0; ASSET= F M D; ! Three investments available; HOLDMX= 1 1 1; ! Maximum we can hold of each asset; HOLDIN= 0 0 0; ! Initially we own nothing of anything; PAYOUT= ! Payout or throw-off ; 0 0 0 ! by asset by period; -1000 -500 -2000 -1800 1500 -1800 400 1500 1000 1800 1500 1000 1800 200 1000 5500 -1000 6000; ! Price in period t at which we can buy asset i; PBUY= 3000 2000 2000! Can buy only; 99999 99999 99999 ! in 1st period; 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999; ! Price in period t at which we can sell asset i; PSEL = -999999; ! Cannot sell these investments once made; ! Below is a description of the tree of all possible outcomes. Each node corresponds to a particular outcome in a particular period. A path in the tree represents one possible set of outcomes. This is a 7 period problem, so every path in the tree has 7 nodes. For example, one possible path is: 1 -> 3 -> 6 -> 12 -> 25 -> 51 -> 102. Although not essential, the tree used here is a binary tree, i.e., all nodes, except for final period nodes, have two successors. For simplicity, all paths are considered equally likely. The one period lending rates are based on a yield curve from 2005, fitted with a Black/Derman/Toy stochastic interest rate model. The borrowing rate is simply set = lending rate + .005 Each node is described by: node number, period, previous or predecessor node, and the lending and borrowing rate associated with this outcome; NODE, PERD, PREV, RLEND, RBORR = 1 1 0 0.0326 0.0376 2 2 1 0.037064518 0.042064518 3 2 1 0.040962628 0.045962628 4 3 2 0.032253001 0.037253001 5 3 2 0.037134275 0.042134275 6 3 3 0.037134275 0.042134275 7 3 3 0.042754296 0.047754296 8 4 4 0.030361098 0.035361098 9 4 4 0.035275441 0.040275441 10 4 5 0.035275441 0.040275441 11 4 5 0.040985234 0.045985234 12 4 6 0.035275441 0.040275441 13 4 6 0.040985234 0.045985234 14 4 7 0.040985234 0.045985234 15 4 7 0.047619232 0.052619232 16 5 8 0.028620814 0.033620814 17 5 8 0.033376231 0.038376231 18 5 9 0.033376231 0.038376231 19 5 9 0.038921772 0.043921772 20 5 10 0.033376231 0.038376231 21 5 10 0.038921772 0.043921772 22 5 11 0.038921772 0.043921772 23 5 11 0.045388718 0.050388718 24 5 12 0.033376231 0.038376231 25 5 12 0.038921772 0.043921772 26 5 13 0.038921772 0.043921772 27 5 13 0.045388718 0.050388718 28 5 14 0.038921772 0.043921772 29 5 14 0.045388718 0.050388718 30 5 15 0.045388718 0.050388718 31 5 15 0.052930163 0.057930163 32 6 16 0.028247864 0.033247864 33 6 16 0.032984564 0.037984564 34 6 17 0.032984564 0.037984564 35 6 17 0.038515529 0.043515529 36 6 18 0.032984564 0.037984564 37 6 18 0.038515529 0.043515529 38 6 19 0.038515529 0.043515529 39 6 19 0.044973946 0.049973946 40 6 20 0.032984564 0.037984564 41 6 20 0.038515529 0.043515529 42 6 21 0.038515529 0.043515529 43 6 21 0.044973946 0.049973946 44 6 22 0.038515529 0.043515529 45 6 22 0.044973946 0.049973946 46 6 23 0.044973946 0.049973946 47 6 23 0.052515332 0.057515332 48 6 24 0.032984564 0.037984564 49 6 24 0.038515529 0.043515529 50 6 25 0.038515529 0.043515529 51 6 25 0.044973946 0.049973946 52 6 26 0.038515529 0.043515529 53 6 26 0.044973946 0.049973946 54 6 27 0.044973946 0.049973946 55 6 27 0.052515332 0.057515332 56 6 28 0.038515529 0.043515529 57 6 28 0.044973946 0.049973946 58 6 29 0.044973946 0.049973946 59 6 29 0.052515332 0.057515332 60 6 30 0.044973946 0.049973946 61 6 30 0.052515332 0.057515332 62 6 31 0.052515332 0.057515332 63 6 31 0.061321284 0.066321284 64 7 32 0.02739986 0.03239986 65 7 32 0.031882856 0.036882856 66 7 33 0.031882856 0.036882856 67 7 33 0.037099334 0.042099334 68 7 34 0.031882856 0.036882856 69 7 34 0.037099334 0.042099334 70 7 35 0.037099334 0.042099334 71 7 35 0.043169299 0.048169299 72 7 36 0.031882856 0.036882856 73 7 36 0.037099334 0.042099334 74 7 37 0.037099334 0.042099334 75 7 37 0.043169299 0.048169299 76 7 38 0.037099334 0.042099334 77 7 38 0.043169299 0.048169299 78 7 39 0.043169299 0.048169299 79 7 39 0.050232395 0.055232395 80 7 40 0.031882856 0.036882856 81 7 40 0.037099334 0.042099334 82 7 41 0.037099334 0.042099334 83 7 41 0.043169299 0.048169299 84 7 42 0.037099334 0.042099334 85 7 42 0.043169299 0.048169299 86 7 43 0.043169299 0.048169299 87 7 43 0.050232395 0.055232395 88 7 44 0.037099334 0.042099334 89 7 44 0.043169299 0.048169299 90 7 45 0.043169299 0.048169299 91 7 45 0.050232395 0.055232395 92 7 46 0.043169299 0.048169299 93 7 46 0.050232395 0.055232395 94 7 47 0.050232395 0.055232395 95 7 47 0.058451111 0.063451111 96 7 48 0.031882856 0.036882856 97 7 48 0.037099334 0.042099334 98 7 49 0.037099334 0.042099334 99 7 49 0.043169299 0.048169299 100 7 50 0.037099334 0.042099334 101 7 50 0.043169299 0.048169299 102 7 51 0.043169299 0.048169299 103 7 51 0.050232395 0.055232395 104 7 52 0.037099334 0.042099334 105 7 52 0.043169299 0.048169299 106 7 53 0.043169299 0.048169299 107 7 53 0.050232395 0.055232395 108 7 54 0.043169299 0.048169299 109 7 54 0.050232395 0.055232395 110 7 55 0.050232395 0.055232395 111 7 55 0.058451111 0.063451111 112 7 56 0.037099334 0.042099334 113 7 56 0.043169299 0.048169299 114 7 57 0.043169299 0.048169299 115 7 57 0.050232395 0.055232395 116 7 58 0.043169299 0.048169299 117 7 58 0.050232395 0.055232395 118 7 59 0.050232395 0.055232395 119 7 59 0.058451111 0.063451111 120 7 60 0.043169299 0.048169299 121 7 60 0.050232395 0.055232395 122 7 61 0.050232395 0.055232395 123 7 61 0.058451111 0.063451111 124 7 62 0.050232395 0.055232395 125 7 62 0.058451111 0.063451111 126 7 63 0.058451111 0.063451111 127 7 63 0.068014522 0.073014522; ! Measuring risk. We consider any final net worth less than TARGET as bad. Our measure of risk is the expected amount by which we fall short of the target, i.e., ESHORTF = E[max(0, TARGET - NWORTH)]; TARGET = 7630; ! MXSHORT = upper limit we place on ESHORTF; MXSHORT = 99999; ! Punchline: We buy a fair amount of F and M, but nothing of D; ENDDATA ! Variables: BUY(t,i) = units bought at beginning of period t of asset i, SEL(t,i) = units sold at beginning of t of asset i, HOLD(t,i) = units held at end of t of asset i, BORR(t) = amount borrowed at beginning of t, LEND(t) = amount lent at the beginning of t NWORTH(t) = net worth at node t in final period SHORTF(t) = max(0,TARGET-NWORTH(t)); ! Get index of final period; TF = @SIZE( PERIOD); ! Get number final period nodes; NF = @SUM( NODE(n)| PERD(n) #EQ# TF: 1); ! Maximize expected wealth in final period; MAX = @SUM( NODE( n)| PERD(n) #EQ# TF: NWORTH(n))/ NF; @FOR( NODE(n) | PERD(N) #EQ# TF: NWORTH(n)= @SUM( ASSET(i): PAYOUT(PERD(n),i)*HOLD(n,i) - PBUY(TF,i) *BUY(n,i) + PSEL(TF,i) *SEL(n,i)) + (1 + RLEND(PREV(n)))*LEND(PREV(n)) - (1 + RBORR(PREV(n)))*BORR(PREV(n)) - NEED(TF); ); ! First Period; ! Individual asset balances; @FOR( ASSET(i): HOLDIN(i) + BUY(1,i) = SEL(1,i) + HOLD(1,i); HOLD(1,i) <= HOLDMX(i) ); ! Cash balance constraint; ! Cash inflows from investments + borrowings in 1 + asset sales in 1 = asset purchases in 1 + loans made in 1 + external liabilities in 1; @SUM( ASSET(i): PAYOUT(1,i)*HOLDIN(i) + PSEL(1,i)*SEL(1,i)) + BORR(1) = @SUM( ASSET(i):PBUY(1,i)*BUY(1,i)) + LEND(1) + NEED(1); BORR(1) <= BORRMX(1); ! Borrowing limit; ! Same applies for subsequent periods; @FOR( NODE( t) | t #GT# 1: ! For each asset type i: Ending inventory in t-1 + purchases = sales + ending inventory in t; @FOR( ASSET( i): HOLD(PREV(t),i) + BUY(t,i) = SEL(t,i) + HOLD(t,i); HOLD(t,i) <= HOLDMX(i) ); ! Cash inflows from investments + repayments from loans in t-1 + borrowings in t + asset sales in t = asset purchases in t + loans made in t + repayment of borrowings in previous period + external liabilities in t; @SUM( ASSET(i): PAYOUT(PERD(t),i)*HOLD(t,i) + PSEL(PERD(t),i)*SEL(t,i)) +(1+RLEND(PREV(t)))*LEND(PREV(t)) + BORR(t) = @SUM( ASSET(i): PBUY(PERD(t),i)*BUY(t,i)) + (1 + RBORR(PREV(t)))*BORR(PREV(t)) + LEND(t) + NEED(PERD(t)); BORR(t) <= BORRMX(PERD(t)); ! Borrowing limit; ); ! Here is the risk computations. Compute amount short each final outcome; @FOR( NODE(t)| PERD(t) #EQ# TF: SHORTF(t) >= TARGET - NWORTH(t); ); ! Compute average, or expected, amount short; ESHORTF = @SUM( NODE(t) | PERD(t) #EQ# TF: SHORTF(t))/NF; ! Constrain it; ESHORTF <= MXSHORT;