rm(list=ls()) options(scipen = 999) #Načítanie knižníc library(utils) library(fPortfolio) library(tidyquant) library(maditr) # Vytvorenie data.frame na ukladanie vysledkov Save <- data.frame(matrix(ncol = 0, nrow = 5)) x <- c("Vynos", "Riziko", "Beta", "Sys. riziko", "Nesys. riziko") rownames(Save) <- x Save ################################################################################ ###################### Priklad 1 -Tangencialne portfolio ####################### ################################################################################ # a) Stiahnite data aktiv nachadzajucich sa v indexe Dow Jones 30 a index S&P 500 # z yahoo.finance.com priamo cez R pomocou funkcie tq_get z balicka tidyquant. # Data stiahnite od 01.01.2020 do dnesneho dna. # Risk-free rate = 1% p.a. dow <- tq_index("DOW") dow price <- tq_get(dow$symbol, get = "stock.prices", from = "2020-01-01", to = Sys.Date()) price <- dcast(price, date~symbol, value.var = "close") price SP500 <- tq_get("^GSPC", get = "stock.prices", from = "2020-01-01", to = Sys.Date()) SP500 <- dcast(SP500, date~symbol, value.var = "close") SP500 rf <- 0.01/252 # b) Rozdelte data na trenovacie, na ktorych spocitate vahy (na tento ucel # vyberieme data za rok 2020) a na aplikacne na ktore spocitane vahy # aplikujete (data za rok 2021). price_t <- price[1:253,] price_a <- price[254:dim(price)[1],] SP500_t <- SP500[1:253,] SP500_a <- SP500[254:dim(price)[1],] # c) Vypocitajte logaritmicke denne vynnosnosti z trenovacich aj aplikacnych dat # a priemerne vynosnosti pre aktívva a z aplikačných dát pre index ret_t <- diff((log(as.matrix(price_t[,-1]))),lag=1) ret_a <- diff((log(as.matrix(price_a[,-1]))),lag=1) E_ret_t <- apply(ret_t, 2, mean) E_ret_a <- apply(ret_a, 2, mean) SP500_ret <- diff((log(as.matrix(SP500_a[,-1]))),lag=1) E_SP500_ret <- apply(SP500_ret, 2, mean) # d) Spocitajte kovariancnu maticu z trenovacich aj aplikacnych dat cov_t <- cov(ret_t) cov_a <- cov(ret_a) # e) Spocitajte vahy tangencialneho portfolia z trenovacich dat mat_sus <- cov_t mat_sus <- solve(mat_sus) vps <- E_ret_t-rf vahy <- mat_sus%*%vps vahy <- vahy/sum(vahy) sum(vahy) vahy # f) Spocitajte ocakavany vynos, riziko, betu, systematické a nesystematické # riziko portfolia aplikovanim vah na aplikacne data a ulozte do Save. r_p <- t(vahy)%*%E_ret_a r_p var_p <- t(vahy)%*%cov_a%*%vahy sd_p <- sqrt(var_p) cov_i_M <- apply(ret_a, 2, cov, y=SP500_ret) cov_i_M var_SP <- var(SP500_ret) Beta_i <- cov_i_M/c(var_SP) Beta_p <- t(vahy)%*%Beta_i Beta_p systematic_risk <- Beta_p^2*var_SP unsystematic_risk <- var_p - systematic_risk Save <- cbind(Save,"Tangency" = c(r_p, sd_p, Beta_p, systematic_risk, unsystematic_risk)) Save ################################################################################ ######################## Priklad 2 - Cut-off portfolio ######################### ################################################################################ # a) Stiahnite data aktiv nachadzajucich sa v indexe Dow Jones 30 a index S&P 500 # z yahoo.finance.com priamo cez R pomocou funkcie tq_get z balicka tidyquant. # Data stiahnite od 01.01.2020 do dnesneho dna. # Risk-free rate = 1% p.a. dow <- tq_index("DOW") dow price <- tq_get(dow$symbol, get = "stock.prices", from = "2020-01-01", to = Sys.Date()) price price <- dcast(price, date~symbol, value.var = "close") SP500 <- tq_get("^GSPC", get = "stock.prices", from = "2020-01-01", to = Sys.Date()) SP500 <- dcast(SP500, date~symbol, value.var = "close") SP500 rf <- 0.01/252 # b) Rozdelte data na trenovacie, na ktorych spocitate vahy (na tento ucel # vyberieme data za rok 2020) a na aplikacne na ktore spocitane vahy # aplikujete (data za rok 2021). price_t <- price[1:253,] price_a <- price[254:dim(price)[1],] SP500_t <- SP500[1:253,] SP500_a <- SP500[254:dim(price)[1],] # c) Vypocitajte logaritmicke denne vynnosnosti z trenovacich aj aplikacnych dat # a priemerne vynosnosti pre aktívva a index ret_t <- diff((log(as.matrix(price_t[,-1]))),lag=1) ret_a <- diff((log(as.matrix(price_a[,-1]))),lag=1) E_ret_t <- apply(ret_t, 2, mean) E_ret_a <- apply(ret_a, 2, mean) SP500_ret_t <- diff((log(as.matrix(SP500_t[,-1]))),lag=1) SP500_ret_a <- diff((log(as.matrix(SP500_a[,-1]))),lag=1) E_SP500_ret_t <- apply(SP500_ret_t, 2, mean) E_SP500_ret_a <- apply(SP500_ret_a, 2, mean) # d) Spocitajte kovariancnu maticu z trenovacich aj aplikacnych dat a rozptyl # trhu cov_t <- cov(ret_t) cov_a <- cov(ret_a) var_SP500_t <- c(var(SP500_ret_t)) var_SP500_a <- var(SP500_ret_a) # e) Spocitajte Bety aktív pre testovacie aj aplikacne data cov_t_M <- apply(ret_t, 2, cov, y=SP500_ret_t) Beta_t <- cov_t_M/c(var_SP500_t) Beta_t cov_a_M <- apply(ret_a, 2, cov, y=SP500_ret_a) Beta_a <- cov_a_M/c(var_SP500_a) Beta_a # f) Spocitajte nesystematicke riziko (rozptyl) aktiv unsystematic_risk_i <- apply(ret_t, 2, var) - Beta_t*var_SP500_t unsystematic_risk_i # g) Vytvorte data.frame so stlpcami vynos, beta, nesystematicke riziko a nadvynos/Beta # Následne maticu podľa nadvynos/Beta zoraďte zostupne. DF <- data.frame("Vynos" = E_ret_t, "Beta" = Beta_t, "Nesys_riziko" = unsystematic_risk_i, "Nadvynos_Beta" = (E_ret_t-rf)/Beta_t) DF ord <- order(DF$Nadvynos_Beta, decreasing = T) ord DF <- DF[ord,] DF # h) Spocitajte C* Pom_vektor_1 <- ((DF$Vynos-rf)*DF$Beta/DF$Nesys_riziko) Pom_vektor_2 <- (DF$Beta^2)/DF$Nesys_riziko Kum_sucet_1 <- cumsum(Pom_vektor_1) Kum_sucet_2 <- cumsum(Pom_vektor_2) C_i <- (var_SP500_t*Kum_sucet_1)/(1+var_SP500_t*Kum_sucet_2) C_i DF$Nadvynos_Beta>C_i C_star <- C_i[3] C_star # i) Spocitajte vahy ak je sell short zakazany a povoleny Z_i <- (DF$Beta/DF$Nesys_riziko)*(var_SP500_t-C_star) vahy_ssz <- Z_i[1:3]/sum(Z_i[1:3]) Z_i <- (DF$Beta/DF$Nesys_riziko)*(var_SP500_t-C_i[30]) vahy_ssp <- Z_i/sum(Z_i) # j) Spocitajte ocakavany vynos, riziko, betu, systematické a nesystematické # riziko portfolia so sell shortom zakazanym aplikovanim vah na aplikacne data # a ulozte do Save. r_ssz <- t(vahy_ssz)%*%(E_ret_a[ord])[1:3] r_ssz var_ssz <- t(vahy_ssz)%*%(cov_a[ord,ord])[1:3,1:3]%*%vahy_ssz sd_ssz <- sqrt(var_ssz) Beta_ssz <- t(vahy_ssz)%*%(Beta_a[ord])[1:3] Beta_ssz systematic_risk_ssz <- Beta_ssz^2*var_SP500_a unsystematic_risk_ssz <- var_ssz - systematic_risk_ssz Save <- cbind(Save,"C-OFF_ssz" = c(r_ssz, sd_ssz, Beta_ssz, systematic_risk_ssz, unsystematic_risk_ssz)) Save # k) Spocitajte ocakavany vynos, riziko, betu, systematické a nesystematické # riziko portfolia so sell shortom povolenym aplikovanim vah na aplikacne data # a ulozte do Save. r_ssp <- t(vahy_ssp)%*%(E_ret_a[ord]) r_ssp var_ssp <- t(vahy_ssp)%*%(cov_a[ord,ord])%*%vahy_ssp sd_ssp <- sqrt(var_ssp) Beta_ssp <- t(vahy_ssp)%*%(Beta_a[ord]) Beta_ssp systematic_risk_ssp <- Beta_ssp^2*var_SP500_a unsystematic_risk_ssp <- var_ssp - systematic_risk_ssp Save <- cbind(Save,"C-OFF_ssp" = c(r_ssp, sd_ssp, Beta_ssp, systematic_risk_ssp, unsystematic_risk_ssp)) Save ZA DOMACI UKOL - Seminar - Benada ################################################################################ ######################## Priklad 3 - Naivne portfolio ########################## ################################################################################ # a) Stiahnite data aktiv nachadzajucich sa v indexe Dow Jones 30 a S&P 500 # z yahoo.finance.com priamo cez R pomocou funkcie tq_get z balicka tidyquant. # Data stiahnite od 01.01.2021 do dnesneho dna. dow <- tq_index("DOW") dow price <- tq_get(dow$symbol, get = "stock.prices", from = "2021-01-01", to = Sys.Date()) price price <- dcast(price, date~symbol, value.var = "close") SP500 <- tq_get("^GSPC", get = "stock.prices", from = "2021-01-01", to = Sys.Date()) SP500 <- dcast(SP500, date~symbol, value.var = "close") SP500 # b) Vypocitajte logaritmicke denne vynnosnosti pre aktiva a index # c) Stanovte vahy pre naivne portfolio # d) Spocitajte Bety aktív # e) Spocitajte ocakavany vynos, riziko, betu, systematické a nesystematické # riziko portfolia so sell shortom povolenym aplikovanim vah na aplikacne data # a ulozte do Save. ################################################################################ ################################# Priklad 4 #################################### ################################################################################ # Porovnajte ulozene vysledky v data.frame Save a rozhodnite, ktore portfolio je # najlepsie ################################################################################ ################################ Domaca uloha ################################## ################################################################################ # ????