0% found this document useful (0 votes)
122 views5 pages

Point of Tangency

This document summarizes the process of finding the optimal portfolio using the tangency portfolio method. It loads stock return data, calculates mean returns, variance-covariance matrices, and creates portfolios with varying asset allocations. It then plots the portfolios on a risk-return graph and draws the tangent line from the risk-free rate to identify the tangency portfolio G, which has the highest return for its level of risk. It also identifies the minimum variance portfolio and verifies the asset allocations using Merton's formula.

Uploaded by

api-285777244
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
122 views5 pages

Point of Tangency

This document summarizes the process of finding the optimal portfolio using the tangency portfolio method. It loads stock return data, calculates mean returns, variance-covariance matrices, and creates portfolios with varying asset allocations. It then plots the portfolios on a risk-return graph and draws the tangent line from the risk-free rate to identify the tangency portfolio G, which has the highest return for its level of risk. It also identifies the minimum variance portfolio and verifies the asset allocations using Merton's formula.

Uploaded by

api-285777244
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Point of Tangency

YIK LUN, KEI

#Read the data:


data <- read.table("http://www.stat.ucla.edu/~nchristo/statistics_c183_c283/returns_5stocks.txt", header
#Compute the mean returns:
R_ibar <- as.matrix(colMeans(data))
#Compute the variance-covariance matrix:
var_covar <- cov(data)
var_covar_inv <- solve(var_covar)
#Create the vector R:
Rf <- 0.002
R <- R_ibar-Rf
#Compute the vector Z:
z <- solve(var_covar) %*% R
#Compute the vector X:
x <- z/sum(z)
x
##
##
##
##
##
##

[,1]
R1 0.004386283
R2 -0.178794182
R3 0.350696322
R4 0.366530195
R5 0.457181382

#Compute the expected return of portfolio G:


R_Gbar <- t(x) %*% R_ibar
R_Gbar
##
[,1]
## [1,] 0.0137365
#Compute the variance and standard deviation of portfolio G:
var_G <- t(x) %*% var_covar %*% x
sd_G <- var_G^0.5
sd_G
##
[,1]
## [1,] 0.09190788
#Compute the slope:
slope <- (R_Gbar-Rf)/(sd_G)
#Before we draw the tangent let's create many portfolios:
j <- 0

return_p <- rep(50000)


sd_p <- rep(0,50000)
vect_0 <- rep(0, 50000)
fractions <- matrix(vect_0, 10000,5)

for (a in seq(-.2, 1, 0.1)) {


for (b in seq(-.2, 1, 0.1)) {
for(c in seq(-.2, 1, 0.1)){
for(d in seq(-.2, 1, 0.1)){
for(e in seq(-.2, 1, 0.1)){
if(a+b+c+d+e==1) {
j=j+1
fractions[j,] <- c(a,b,c,d,e)
sd_p[j] <- (t(fractions[j,]) %*% var_covar %*% fractions[j,])^.5
return_p[j] <- fractions[j,] %*% R_ibar
}
}
}
}
}
}
R_p <- return_p[1:j]
sigma_p <- sd_p[1:j]

#Plot the all the portfolios, draw the tangent, place the 5 stocks:
plot(sigma_p, R_p,xlab="Risk (standard deviation)", ylab="Expected return",xlim=c(0.0,.12), ylim=c(0.0,.
axis(1, at=c(0, 0.02, 0.04, 0.06, 0.08, 0.10, 0.12))
axis(2,at=c(0,0.002, 0.004, 0.006, 0.008, 0.010, 0.012, 0.014, 0.016))
lines(c(0,sd_G, 1.5*sd_G),c(.002,R_Gbar,0.002+slope*(1.5*sd_G)))
#Identify portfolio G:
points(sd_G, R_Gbar, cex=2, col="blue", pch=19)
text(sd_G, R_Gbar+.001, "G")
#Plot the 5 stocks:
points(apply(data,2,sd), colMeans(data), pch=19, cex=1.3, col="green")

0.016
0.012
0.008
0.004
0.000

Expected return

0.00

0.02

0.04

0.06

0.08

Risk (standard deviation)


#Identify the minimum risk portfolio:
Rf <- -1000
R <- R_ibar-Rf
#Compute the vector Z:
z <- solve(var_covar) %*% R
#Compute the vector X:
x <- z/sum(z)
#Compute the expected return of portfolio G:
R_Gbar <- t(x) %*% R_ibar
R_Gbar
##
[,1]
## [1,] 0.008469519
#Compute the variance and standard deviation of portfolio G:
var_G <- t(x) %*% var_covar %*% x
sd_G <- var_G^0.5
sd_G
##
[,1]
## [1,] 0.06823676

0.10

0.12

#Compute the slope:


slope <- (R_Gbar-Rf)/(sd_G)

#Plot the all the portfolios, draw the tangent, place the 5 stocks:
plot(sigma_p, R_p,xlab="Risk (standard deviation)", ylab="Expected return",xlim=c(0.0,.12), ylim=c(0.0,.
axis(1, at=c(0, 0.02, 0.04, 0.06, 0.08, 0.10, 0.12))
axis(2,at=c(0,0.002, 0.004, 0.006, 0.008, 0.010, 0.012, 0.014, 0.016))
lines(c(0,sd_G, 1.3*sd_G),c(-1000,R_Gbar,-1000+slope*(1.3*sd_G)))
#Identify portfolio G:
points(sd_G, R_Gbar, cex=2, col="blue", pch=19)
text(sd_G, R_Gbar+.0005, "G")

0.000

0.004

0.008

Expected return

0.012

0.016

#Plot the 5 stocks:


points(apply(data,2,sd), colMeans(data), pch=19, cex=1.3, col="green")

0.00

0.02

0.04

0.06

0.08

Risk (standard deviation)

x
##
##
##
##
##
##

R1
R2
R3
R4
R5

[,1]
0.1919855
0.2193339
0.1636751
0.2707601
0.1542454
4

0.10

0.12

#B. Exactly: Using Merton's (1972) paper:


sum(var_covar_inv[1,])/sum(var_covar_inv)
## [1] 0.1919867
sum(var_covar_inv[2,])/sum(var_covar_inv)
## [1] 0.2193365
sum(var_covar_inv[3,])/sum(var_covar_inv)
## [1] 0.1636739
sum(var_covar_inv[4,])/sum(var_covar_inv)
## [1] 0.2707595
sum(var_covar_inv[5,])/sum(var_covar_inv)
## [1] 0.1542434

You might also like