Import data
library(readr)
library(xts)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
hw5 <- read_csv("C:/Users/DELL/Downloads/hw5.csv")
## Rows: 751 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Index
## dbl (4): tw0050, tw0056, tw006205, tw00646
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(hw5)
## # A tibble: 6 × 5
## Index tw0050 tw0056 tw006205 tw00646
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2015/12/14 53.3 18.2 31.1 19.6
## 2 2015/12/15 53.3 18.4 31.6 19.6
## 3 2015/12/16 54.1 18.6 31.6 19.9
## 4 2015/12/17 54.8 18.8 32.2 20.0
## 5 2015/12/18 54.5 19.0 32.2 19.8
## 6 2015/12/21 54.4 19.0 33 19.6
hw5.xts <- as.xts(hw5[,-1], order.by = as.POSIXct(hw5$Index) )
head(hw5.xts)
## tw0050 tw0056 tw006205 tw00646
## 2015-12-14 53.29 18.25 31.06 19.61
## 2015-12-15 53.33 18.38 31.59 19.63
## 2015-12-16 54.14 18.56 31.60 19.89
## 2015-12-17 54.77 18.81 32.23 20.05
## 2015-12-18 54.50 18.95 32.18 19.85
## 2015-12-21 54.41 19.02 33.00 19.64
Q1:Daily return
library(magrittr)
library(PerformanceAnalytics)
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(fBasics)
##
## Attaching package: 'fBasics'
## The following objects are masked from 'package:PerformanceAnalytics':
##
## kurtosis, skewness
s1 <- cov(hw5[,2:5])
ones1 <- rep(1,4)
one.vec1 <- matrix(ones1,ncol =1)
a1 <- inv(s1)%*%one.vec1
b2 <- t(one.vec1)%*%a1
mvp_d <- a1 / as.numeric(b2)
head(mvp_d)
## [,1]
## tw0050 -0.28080456
## tw0056 1.07989097
## tw006205 0.13606491
## tw00646 0.06484868
mean_return <- colMeans(hw5[,2:5])
mean <- t(as.matrix(mean_return))
realized_return <- mean%*%mvp_d
head(realized_return)
## [,1]
## [1,] 9.892485
colnames(realized_return) = "Daily Realized Return"
head(realized_return)
## Daily Realized Return
## [1,] 9.892485
Q2:By Q1, use monthly returns to recalculate the answers to Q1.
month.r <- to.monthly(hw5.xts)
colnames(month.r) = c("tw0050","tw0056","tw006205","tw00646")
head(month.r)
## tw0050 tw0056 tw006205 tw00646
## Dec 2015 53.29 19.02 31.06 20.06
## Jan 2016 53.42 18.60 25.40 19.28
## Feb 2016 53.42 19.41 25.46 19.21
## Mar 2016 55.49 19.70 25.41 19.71
## Apr 2016 57.32 19.23 26.98 19.90
## May 2016 54.50 18.95 26.02 20.34
s2 <- cov(month.r[,1:4])
ones2 <- rep(1,4)
one.vec2 <- matrix(ones2,ncol =1)
a2 <- inv(s2)%*%one.vec2
b2 <- t(one.vec2)%*%a2
mvp_m <- a2 / as.numeric(b2)
head(mvp_m)
## [,1]
## tw0050 -0.2689932
## tw0056 1.0143129
## tw006205 0.1268862
## tw00646 0.1277941
mean_return_m <- colMeans(month.r[,1:4])
mean_mon <- t(as.matrix(mean_return_m))
realized_return_m <- mean_mon%*%mvp_m
head(realized_return_m)
## [,1]
## [1,] 10.74154
colnames(realized_return_m) = "Monthly Realized Return"
head(realized_return_m)
## Monthly Realized Return
## [1,] 10.74154
Q3:Find the tangency portfolio based on Q2. Risk-free rate is
assumed to be zero.
a3 <- inv(s2)%*%mean_return_m
b3 <- t(one.vec2)%*%a3
c3 <- a3/as.vector(b3)
head(c3)
## [,1]
## tw0050 -0.2359199
## tw0056 0.8827621
## tw006205 0.1923066
## tw00646 0.1608512