2016-08-03 3 views
2

Когда я пытаюсь запустить функцию optimize.portfolio с использованием ROI, я получаю сообщение об ошибке.дублированные записи в показателях ошибка в optimize.portfolio в пакете PortfolioAnalytics

Error in ROI::V_bound(li = seq.int(1L, N), lb = as.numeric(lb), ui = seq.int(1L, : duplicated entries in indices. 

И когда я использую DEoptim, я получаю.

Error in sample.int(length(x), size, replace, prob) : 
    invalid first argument 

Когда запас данные собираются с помощью getSymbols есть предупреждение о длине объектов возвратов. research I did предполагает, что это не проблема.

Код, который я использую, приведен ниже. Любая помощь будет оценена по достоинству.

library(quantmod) 
library(PortfolioAnalytics) 
library(DEoptim) 
library(ROI) 
require(ROI.plugin.glpk) 
require(ROI.plugin.quadprog) 

symbols <- c("MSFT", "MMM", "AMZN") 

e <- new.env() 
getSymbols(symbols, src="yahoo", env=e) 
stocks <- do.call(merge, eapply(e, Cl)[symbols]) 

ret <- diff(log(df)) 
ret <- ret[2:(nrow(df)),] 

portfolio <- portfolio.spec(ret) 
portfolio 

portfolio <- add.constraint(portfolio = portfolio, type = "weight_sum", min_sum=0.99,max_sum=1.01) 
portfolio <- add.constraint(portfolio = portfolio, type = "long_only") 
portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev") 

optimise <- optimize.portfolio(R = ret, portfolio = portfolio, optimize_method = "ROI") 

ответ

2

См. Справку (?portfolio.spec). Эта функция ожидает имена или число. Если вы используете имена активов, ошибок нет.

portfolio <- portfolio.spec(names(ret))