#Načítanie knižníc library(utils) library(tidyquant) library(maditr) getwd() ################################################################################ ################################## Priklad 1 ################################### ################################################################################ rm(list=ls()) # a) Nacitajte data z csv suboru "Pr1_data.csv", ktory je v interaktivnej osnove price=read.csv2("Pr1_data.csv", header = TRUE, sep = ";",quote = "\"",dec = ",", fill=TRUE) price head(price) # b) Vypocitajte logaritmicke denne vynnosnosti + ocakavanu vynnosnost ret=diff(log(as.matrix(price[,-1])), lag=1) ret head(ret) E_ret=apply(ret,2,mean) # c) Spocitajte kovariancnu maticu cov_M=cov(ret) cov_M # d) Spocitajte vahy min-variance portfolia mat_S=2*cov_M n_asset=length(E_ret) n_asset v_1=rep(1,n_asset) v_1 mat_S=cbind(mat_S,v_1) mat_S v_2=c(rep(1,n_asset), 0) mat_S=rbind(mat_S,v_2) mat_S mat_I=solve(mat_S) vps=c(rep(0,n_asset),1) vsp wi=mat_I%*%vps wi #ocistene vahy o lambda1 wi=wi[1:n_asset,] # e) Spocitajte ocakavany vynos a riziko portfolia E_rp=wi%*%E_ret E_rp var_P=wi%*%cov_M%*%wi var_P sd_P=sqrt(var_P) sd_P ################################################################################ ################################## Priklad 2 ################################### ################################################################################ rm(list=ls()) # a) Stiahnite data aktiv nachadzajucich sa v indexe Dow Jones 30 # z yahoo.finance.com priamo cez R pomocou funkcie tq_get z balicka tidyquant. # Data stiahnite od 01.01.2020 do dnesneho dna. dow <- tq_index("DOW") price <- tq_get(dow$symbol, get = "stock.prices", from = "2020-01-01", to = Sys.Date()) price head(price) price <- dcast(price, date~symbol, value.var = "close") # 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). dim(price) dat_t=price[1:252,] dim(dat_t) dat_a=price[253:dim(price)[1]] dim(dat_a) # c) Vypocitajte logaritmicke denne vynnosnosti trenovacich aj aplikacnych dat ret_t=diff(log(as.matrix(dat_t[,-1],lag=1))) head(ret_t) ret_a=diff(log(as.matrix(dat_a[,-1],lag=1))) E_ret_t=apply(ret_t,2,mean) E_ret_a=apply(ret_a,2,mean) E_ret_a # d) Spocitajte kovariancnu maticu trenovacich aj aplikacnych dat cov_M_t=cov(ret_t) cov_M_a=cov(ret_a) cov_M_t dim(cov_M_t) # e) Spocitajte vahy min-variance portfolia z trenovacich dat mat_S=2*cov_M_t n_asset=length((E_ret_t)) n_asset v_1=rep(1,n_asset) mat_S mat_S=cbind(mat_S,v_1) v_2=c(rep(1,n_asset),0) mat_S=rbind(mat_S,v_2) mat_S mat_I=solve(mat_S) VPS=c(rep(0,n_asset),1) wi=mat_I%*%VPS wi dim(wi) wi=wi[1:n_asset,] wi n_asset # f) Spocitajte ocakavany vynos a riziko portfolia aplikovanim vah na aplikacne # data ret_P=wi%*%E_ret_a ret_P var_P=wi%*%cov_M_a%*%wi sd_P=sqrt(var_P) sd_P h_ret_P=wi%*%E_ret_t h_ret_P h_var_P=wi%*%cov_M_t%*%wi h_sd_P=sqrt(h_var_P) h_sd_P ################################################################################ ################################## Priklad 3 ################################### ################################################################################ # a) Spocitajte vahy pre aktiva v indexe Dow Jones pomocou balicku fPortfolio # bez obmedzeni na vahach mvSpec <- portfolioSpec() print(mvSpec) data MV <- minvariancePortfolio(data = as.timeSeries(ret), spec = mvSpec, constraints = c("minW[1:nAssets]=-100", "maxW[1:nAssets]=100")) print(MV) # b) Vahy ulozte vahy_fP <- c(getWeights(MV)) vahy_fP # c) Pomocou ziskanych vah vypocitajte vynos a riziko portfolia z aplikacnych # dat a porovnajte s vysledkymi z Prikladu 2 ################################################################################ ################################## Priklad 4 ################################### ################################################################################ # a) Spocitajte vahy pre aktiva v indexe Dow Jones pomocou balicku fPortfolio # pri zakazani sellshortu a obmedzeni maximalnej vysky vahy 10% na aktivum mvSpec=portfolioSpec() print(mvSpec) MV=minvariancePortfolio(data=as.timeSeries(ret_t),spec=mvSpec,constraints=c("minW[1:n_asset]=0","maxW[1:n_asset]=0.1")) MV # b) Vahy ulozte wii=c(getWeights(MV)) wii # c) Pomocou ziskanych vah vypocitajte vynos a riziko portfolia z aplikacnych # dat a porovnajte s vysledkymi z Prikladu 3 rp_2=wii%*%E_ret_a rp_2 var_p2=wii%*%cov_M_a%*%wii sd_p2=sqrt(var_p2) sd_p2 ratioP2=rp_2/sd_p2 ratioP1=ret_P/sd_P ratioP1 ratioP2 ret_P sd_P ################################################################################ ################################ Domaca uloha ################################## ################################################################################ # Stiahnite si data aktiv indexu Dow Jones z prikladu 2 do pocitaca a pomocou # Ecelu spocitajte Priklad 2. Vysledky porovnajte s tymi co nam vysli v R. write.csv2(price, file = "DU.csv")