Использование optimize operator.portfolio в портфельном анализе - PullRequest
0 голосов
/ 09 февраля 2020

Я только начал изучать портфельный анализ на языке R, я наткнулся на статью, в которой основополагающие принципы c объясняются на примере . Но были проблемы с этим кодом. Код содержит следующие ошибки: 1) Портфолио нельзя оптимизировать из-за ограничения full_investment; 2) проблема с записью вектора; 3) коэффициент Шарпа не рассчитывается; 4) проблема с прорисовкой. Мне посоветовали разбирать вопросы один за другим, поэтому я начну с разбора первого вопроса:

# Get data
library(PortfolioAnalytics)
library(quantmod)
library(PerformanceAnalytics)
library(zoo)
library(plotly)
library(foreach)
library(DEoptim)
library(iterators)
library(fGarch)
library(Rglpk)
library(quadprog)
library(ROI)
library(ROI.plugin.glpk)
library(ROI.plugin.quadprog)
library(ROI.plugin.symphony)
library(pso)
library(GenSA)
library(corpcor)
library(testthat)
library(nloptr)
library(MASS)
library(robustbase)
getSymbols(c("MSFT", "SBUX", "IBM", "AAPL", "^GSPC", "AMZN"))
# Assign to dataframe
# Get adjusted prices
prices.data <- merge.zoo(MSFT[,6], SBUX[,6], IBM[,6], AAPL[,6], GSPC[,6], AMZN[,6])
# Calculate returns
returns.data <- CalculateReturns(prices.data)
returns.data <- na.omit(returns.data)
# Set names
colnames(returns.data) <- c("MSFT", "SBUX", "IBM", "AAPL", "^GSPC", "AMZN")
# Save mean return vector and sample covariance matrix
meanReturns <- colMeans(returns.data)
covMat <- cov(returns.data)
# Start with the names of the assets
port <- portfolio.spec(assets = c("MSFT", "SBUX", "IBM", "AAPL", "^GSPC", "AMZN"))
# Box
port <- add.constraint(port, type = "box", min = 0.05, max = 0.8)
# Leverage
port <- add.constraint(portfolio = port, type = "full_investment")
# Generate random portfolios
rportfolios <- random_portfolios(port, permutations = 500000, rp_method = "sample")

Эта часть кода проходит без ошибок, но потом ...

# Get minimum variance portfolio
minvar.port <- add.objective(port, type = "risk", name = "var")
# Optimize
minvar.opt <- optimize.portfolio(returns.data, minvar.port, optimize_method = "random", rp = rportfolios)
# Generate maximum return portfolio
maxret.port <- add.objective(port, type = "return", name = "mean")
# Optimize
maxret.opt <- optimize.portfolio(returns.data, maxret.port, optimize_method = "random", rp = rportfolios)

При оптимизации для целей в каждой из точек отображается следующая ошибка:

Leverage constraint min_sum and max_sum are restrictive, consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01

Я понятия не имею, почему возникает эта ошибка, но по какой-то причине замена фасета full_investment на Leverage или другое, ошибка исчезает. Основной выпуск . Оригинальный код: https://www.r-bloggers.com/portfolio-optimization-using-r-and-plotly/

...