2017-10-18 68 views
2

讓我們看看我能否幫助你解決這個問題。看來用於優化投資組合的R package portfolioanalytics有一個缺陷。這很可能是我,但要確定我想看看是否有其他人遇到同樣的問題,可能還有解決方案。portfolioanalytics框約束錯誤

當添加每資產分配的最小和最大的約束我收到以下錯誤:

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

下面是所述誤差的代碼:

c.min = c(0.10,0.15,0.10,0.50,0.15,0,0,0,0,0) 
c.max = c(.20,.20,.20,.20,.20,.20,.20,.20,.20,.20) 
port_spec <- add.constraint(portfolio = port_spec,type = "box",enabled = TRUE,min = c.min, 
          max = c.max) #Min Posiion & Max position 

10是正確的數的代碼運行良好,當我使用以下內容:

port_spec <- add.constraint(portfolio = port_spec,type = "box",enabled = TRUE,min = .00, max = .25) #Min Posiion & Max position 

此外,我使用發佈商請求的確切語法,通過以下鏈接:publishers doc

有沒有人看過這個問題?

下面是用於投資組合優化整個代碼:

port_spec <- NULL 
port_spec <- portfolio.spec(colnames(returns.monthly)) 

## Add contraints 
#add contraint "full_invested" portfolio must equal 100% allocation 
port_spec <- add.constraint(portfolio = port_spec,type = "weight_sum",min_sum = .97, max_sum = 1.01) 
port_spec <- add.constraint(portfolio = port_spec,type = "long_only")#add constriant "long_only" not allowing the portfolio to go short 

c.min = c(0.10,0.15,0.10,0.50,0.15,0,0,0,0,0) 
c.max = c(.20,.20,.20,.20,.20,.20,.20,.20,.20,.20) 
port_spec <- add.constraint(portfolio = port_spec,type = "box",enabled = TRUE,min = c.min, 
          max = c.max) #Min Posiion & Max position 
port_spec <- add.constraint(port_spec,type = "return",return_target=mean.return) 
port_spec <- add.constraint(port_spec,type = "risk",risk_target=mean.risk) 
##Add portfolio objectives 

#port_spec <- add.objective(portfolio = port_spec,type = "return",name = "sr_annualized",arguments = list(scale = 12,rfr = .02)) 
port_spec <- add.objective(portfolio = port_spec,type = "return",name = "mean") 
#port_spec <- add.objective(portfolio = port_spec,type = "risk",name = "StdDev") 
#port_spec <- add.objective(portfolio = port_spec,type = "risk",name = "ES",arguments = list(p=0.90,method = "gaussian")) 



# Add dummy objectives for ploting 
port_spec <- add.objective(portfolio = port_spec,type = "risk",name = "StdDev",multiplier=0) 
#port_spec <- add.objective(portfolio = port_spec,type = "return",name = "mean",multiplier=0) 

print(port_spec) 
## Run optimization 
opt <- optimize.portfolio(returns.monthly, portfolio = port_spec,optimize_method="DEoptim",trace = TRUE) 

回答

0

沒關係,我發現我的問題,如果你總結的分是= 1,不允許進行優化。呃,DUH!

對不起

+0

大聲笑,我很高興你想通了。有時你只需要發佈這個問題,讓你用新鮮的眼光看待它。 – lebelinoz