Black Litterman Model Application

Black Litterman Model Application

gretl version 1.9.9

Current session: 2012-11-14 14:01

## Black Litterman model application

## M Boldin Oct 2012

## Stock Return data

#open "C:.gdt"

? smpl --full

Full data range: 2001:01 - 2011:12 (n = 132)

## Compute Excess returns for Market and Alternative portfolios

? series MPORTret= SPYret - RF

Replaced series MPORTret (ID 30)

? series APORTret= (TGTret+IBMret+AMZNret+EBAYret+PDCOret)/5 - RF

Replaced series APORTret (ID 31)

? summary RF MKT MKTxRF SPYret MPORTret APORTret

Summary statistics, using the observations 2001:01 - 2011:12

Mean Median Minimum Maximum

RF 0.0016455 0.0013000 0.00000 0.0054000

MKT 0.0034591 0.011000 -0.18470 0.11530

MKTxRF 0.0018136 0.0082000 -0.18550 0.11530

SPYret 0.0023195 0.0089880 -0.16519 0.10915

MPORTret 0.00067407 0.0063025 -0.16599 0.10915

APORTret 0.012614 0.015517 -0.21784 0.23936

Std. Dev. C.V. Skewness Ex. kurtosis

RF 0.0014739 0.89575 0.60879 -0.89865

MKT 0.049322 14.259 -0.58275 0.89218

MKTxRF 0.049405 27.241 -0.55295 0.87372

SPYret 0.046726 20.145 -0.52343 0.70702

MPORTret 0.046806 69.438 -0.49124 0.69156

APORTret 0.071420 5.6619 0.13396 1.5455

# Set sub-sample period to estimate mean retunr and var-cov parameters

? smpl 2001:01 2007:12

Full data range: 2001:01 - 2011:12 (n = 132)

Current sample: 2001:01 - 2007:12 (n = 84)

? summary RF MKT MKTxRF SPYret MPORTret APORTret

Summary statistics, using the observations 2001:01 - 2007:12

Mean Median Minimum Maximum

RF 0.0023607 0.0021500 0.00060000 0.0054000

MKT 0.0049274 0.011600 -0.10000 0.083800

MKTxRF 0.0025667 0.0089500 -0.10320 0.081800

SPYret 0.0034229 0.0091975 -0.10473 0.084612

MPORTret 0.0010622 0.0063025 -0.10613 0.083612

APORTret 0.014947 0.014790 -0.13758 0.23936

Std. Dev. C.V. Skewness Ex. kurtosis

RF 0.0013332 0.56473 0.27736 -1.3527

MKT 0.039796 8.0764 -0.55301 0.34387

MKTxRF 0.039875 15.536 -0.54489 0.35966

SPYret 0.038062 11.120 -0.50185 0.56956

MPORTret 0.038112 35.881 -0.48887 0.58476

APORTret 0.072875 4.8757 0.62774 1.1135

? scalar rfc= mean(RF)

Replaced scalar rfc = 0.00236071

## Build matrix with return observations

? matrix Rx = MPORTret, APORTret

Replaced matrix Rx

? matrix R = meanc(Rx)

Replaced matrix R

? scalar k= cols(Rx)

Replaced scalar k = 2

? scalar n= rows(Rx)

Replaced scalar n = 84

## Variance-Covariance matrix

? S = mcov(Rx)

Replaced matrix S

? SI = inv(S)

Replaced matrix SI

? sd1 = sdc(Rx)

Replaced matrix sd1

? C1 = mcorr(Rx)

Replaced matrix C1

## Implied mean-variance optimization weights

? w1 = SI*R'

Replaced matrix w1

? w1 = w1/sumc(w1)

Replaced matrix w1

? R2 = R+rfc

Replaced matrix R2

? w2 = inv(S)*R2'

Replaced matrix w2

? w2 = w2/sumc(w2)

Replaced matrix w2

## Check results

? scalar check = sumc(w1)

Replaced scalar check = 1

? scalar check = sumc(w2)

Replaced scalar check = 1

## Two points on Computed Efficient frontier

? scalar rm1= R*w1

Replaced scalar rm1 = -0.0396636

? scalar rm2= R2*w2

Replaced scalar rm2 = -0.356467

? scalar s1= sqrt(w1'*S*w1)

Replaced scalar s1 = 0.138495

? scalar s2= sqrt(w2'*S*w2)

Replaced scalar s2 = 1.28771

## Compute Betas by regressing X on M=MKTxRF

? matrix Rm= MKTxRF

Replaced matrix Rm

? B= inv(Rm'Rm)*(Rm'Rx)

Replaced matrix B

? scalar sdRm= sdc(Rm)

Replaced scalar sdRm = 0.0396372

# CAPM Beta based Expected Returns

? scalar Em= .06/12

Replaced scalar Em = 0.005

? Rb= B'Em

Replaced matrix Rb

## Compute weights based on CAPM returns

? wb = inv(S)*Rb

Replaced matrix wb

? wb = wb/sumc(wb)

Replaced matrix wb

## Compute Expected returns and st dev

? scalar ERb= 12*Rb'wb

Replaced scalar ERb = 0.0575961

? scalar sdb= sqrt(wb'*S*wb)

Replaced scalar sdb = 0.038752

## Compute B-L adjustment for view on Alternative Portfolio

## tau is an adjustment to CAPM based prior var-cov view reflecting relative confidence

## Smaller (larger) value puts more (less) weight on CAPM-based var-cov

## P= Alternative view portfolio, use [0 1] for simple case

## Q= Alternative view Expected return

## Oa= Var-cov matrix for alternative, assumed to have 0's off-diagonal

? scalar tau= 1

Replaced scalar tau = 1

? matrix P= zeros(1,k)

Replaced matrix P

? P[1,2]= 1

Modified matrix P

? matrix Q= zeros(1,1)

Replaced matrix Q

? Q[1,1]= Rb[2] + (.03/12) # add x% per year (1/12 for monthly) for \par alternative

Modified matrix Q

? Oa= 2*S[2,2]

Replaced scalar Oa = 0.0106216

? OaI= inv(Oa)

Replaced scalar OaI = 94.1481

? Ma= P'OaI*P ## Alternative information matrix

Replaced matrix Ma

? A= P'OaI*Q

Replaced matrix A

? M = inv(inv(tau*S)+Ma) ## Combine prior and alternative var-cov views

Replaced matrix M

? ua = M*(inv(tau*S)*Rb+A) ## Combined expected returns

Replaced matrix ua

## Compute combined view weights

## delta is a risk adjustment, higher value lowers acceptable risk

## for one alternative use sdRm for delta to get a ERp = sd type result

? scalar delta = 1

Replaced scalar delta = 1

? S2= S + M

Replaced matrix S2

? ua2= (1/delta)*ua ## risk adjusted expected returns

Replaced matrix ua2

? wa2= (1/delta)*inv(S2)'ua

Replaced matrix wa2

? wa2= wa2/sumc(wa2)

Replaced matrix wa2

## Explore results

? print R

R (1 x 2)

0.0010622 0.014947

? print sd1

sd1 (1 x 2)

0.037885 0.072440

? print C1

C1 (2 x 2)

1.0000 0.76433

0.76433 1.0000

? print w1

w1 (2 x 1)

3.9332

-2.9332

? print B

B (1 x 2)

0.94326 1.4272

? print Rb

Rb (2 x 1)

0.0047163

0.0071360

? print wb

wb (2 x 1)

0.96555

0.034454

? print ua2

ua2 (2 x 1)

0.0050494

0.0079693

? print wa2

wa2 (2 x 1)

0.84475

0.15525

? print Rb

Rb (2 x 1)

0.0047163

0.0071360

? print Q

Q (1 x 1)

0.0096360

? print S

S (2 x 2)

0.0014525 0.0021229

0.0021229 0.0053108

? print M

M (2 x 2)

0.0011697 0.0014152

0.0014152 0.0035405

? print S2

S2 (2 x 2)

0.0026222 0.0035381

0.0035381 0.0088513

## Use period after sub-sample estimation

## to test performance of portfolio weights

? smpl 2008:01 2011:12

Full data range: 2001:01 - 2011:12 (n = 132)

Current sample: 2008:01 - 2011:12 (n = 48)

## Compute Excess returns for Market and Alternative portfolios

? matrix Rx = MPORTret, APORTret

Replaced matrix Rx

? series Port1 = Rx*w1

Replaced series Port1 (ID 32)

? series Portb = Rx*wb

Replaced series Portb (ID 33)

? series Porta2 = Rx*wa2

Replaced series Porta2 (ID 34)

? series Porta2xM= (Porta2-MPORTret)

Replaced series Porta2xM (ID 35)

? series Porta2xb= (Porta2-Portb)

Replaced series Porta2xb (ID 36)

## Port1 based on naive 'optimal' in-sample mean-variance weights

## Portb based on CAPM-Beta means weights

## Porta2 based on Black-Litterman + Alternative view weights

? summary MPORTret APORTret Port1 Portb Porta2 Porta2xM Porta2xb

Summary statistics, using the observations 2008:01 - 2011:12

Mean Median Minimum Maximum

MPORTret -5.1458e-006 0.0043355 -0.16599 0.10915

APORTret 0.0085326 0.016737 -0.21784 0.15141

Port1 -0.025048 -0.015994 -0.37023 0.26717

Portb 0.00028901 0.0051012 -0.16777 0.10775

Porta2 0.0013203 0.0051703 -0.17404 0.10734

Porta2xM 0.0013255 0.0020232 -0.017841 0.013903

Porta2xb 0.0010313 0.0015742 -0.013882 0.010818

Std. Dev. C.V. Skewness Ex. kurtosis

MPORTret 0.059501 11563. -0.42280 -0.096541

APORTret 0.069368 8.1298 -0.90111 2.0755

Port1 0.13494 5.3873 -0.12369 0.086784

Portb 0.059423 205.60 -0.43565 -0.039250

Porta2 0.059402 44.990 -0.48677 0.19703

Porta2xM 0.0061998 4.6774 -0.40325 0.47156

Porta2xb 0.0048239 4.6774 -0.40325 0.47156

? corr MKTxRF Port1 Portb Porta2

Correlation Coefficients, using the observations 2008:01 - 2011:12

5% critical value (two-tailed) = 0.2845 for n = 48

MKTxRF Port1 Portb Porta2

1.0000 0.4724 0.9963 0.9935 MKTxRF

1.0000 0.4798 0.4071 Port1

1.0000 0.9967 Portb

1.0000 Porta2

? plot1 <- gnuplot MPORTret APORTret --with-lines --time-series

plot1 replaced

? plot2 <- gnuplot MPORTret Port1 Portb Porta2 --with-lines --time-series

plot2 replaced

? plot3 <- gnuplot Porta2xM Porta2xb --with-lines --time-series

plot3 replaced

Plot 2 Graph