Переделанная Эффективная Граница в R - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь закодировать передискретизацию эффективной границы в R, любая помощь более чем ценится, так как это моя дипломная работа бакалавра. В настоящее время я только кодировал «нормальную эффективную границу» следующим образом:

library(quantmod)
library(PortfolioAnalytics)

tickers <- c("IVV", "EXSA.DE", "^N225", "EEM", "XLE", "DLBS", "AAPL", "NVDA", "IGLN.L", "MSFT")
tickernames <- c("S&P 500", "Stoxx Europe 600", "Nikkei 225", "MSCI EM", "US Treaseraies", "DE Bonds 
longterm", "DE Bonds shortterm", "Eu Corporate", "Edelmetal", "Energie")

portfolioPrices <- NULL
for(ticker in tickers) {
  portfolioPrices <- cbind(portfolioPrices,
                           getSymbols.yahoo(ticker, from='2016-01-03', periodicity = 'daily', 
auto.assign=FALSE)[,6])
}

colnames(portfolioPrices) <- tickernames
colSums(is.na(portfolioPrices))

#portfolioReturns <- na.omit(ROC(portfolioPrices, type="discrete"))

portfolioReturns <- na.spline(ROC(portfolioPrices, type="discrete"))

portf <- portfolio.spec(colnames(portfolioReturns))

portf <- add.constraint(portf, type="weight_sum", min_sum=1, max_sum=1)
portf <- add.constraint(portf, type="box", min=0, max=1)
portf <- add.objective(portf, type="return", name="mean")
portf <- add.objective(portf, type="risk", name="StdDev")

optPort <- optimize.portfolio(portfolioReturns, portf, optimize_method = "ROI", trace=TRUE)

ef <- extractEfficientFrontier(optPort, match.col = "StdDev", n.portfolios = 300, risk_aversion = 
NULL)

chart.EfficientFrontier(ef, match.col = "StdDev", n.portfolios = 300, xlim = NULL, ylim = NULL, 
                        cex.axis = 0.8, element.color = "darkgray", main = "Efficient Frontier",
                        RAR.text = "SR", rf = 0, tangent.line = TRUE, cex.legend = 0.8,
                        chart.assets = TRUE, labels.assets = TRUE, pch.assets = 21,
                        cex.assets = 0.8)

chart.EF.Weights(ef, colorset=NULL, match.col="StdDev", n.portfolios = 300,
                 cex.lab = 0.8, cex.axis = 0.8, cex.legend = 0.8, legend.labels = NULL,
                 element.color = "darkgray", legend.loc = "topright")

Теперь мой следующий шаг - кодирование процесса повторной выборки, кто-нибудь может мне помочь?

...