R
R-package PortfolioAnalytics 計算中的 optimize.portfolio.rebalancing 是什麼?
我最近開始使用 R-package
PortfolioAnalytics
來執行一些投資組合優化。我正試圖了解該函式optimize.portfolio.rebalancing
正在計算什麼。特別是,我想知道為什麼計算的權重(從第二個時期開始)與我直接呼叫時得到的權重不同optimize.portfolio
。我的印象
optimize.portfolio.rebalancing
基本上是一個“包裝器optimize.portfolio
”(來自手冊),所以我認為該函式只是optimize.portfolio
在一段時間內重複呼叫 lengthrolling_window
。但是,結果不應該與optimize.portfolio
完全相同時期的手動呼叫產生的結果相同嗎?或者正在optimize.portfolio.rebalancing
執行一些額外的計算?我錯過了什麼?這是一個說明我的問題的最小範例:
data("edhec") returns <- edhec[, 1:4] funds <- colnames(returns) portfolio <- portfolio.spec(assets = funds) portfolio <- add.constraint(portfolio = portfolio, type = "full_investment") portfolio <- add.constraint(portfolio = portfolio, type = "long_only") portfolio <- add.objective(portfolio = portfolio, type = "risk", name = "ES") portfolio.rebalanced <- optimize.portfolio.rebalancing(R = returns, portfolio = portfolio, optimize_method = "ROI", rebalance_on = "quarters", training_period = 12, rolling_window = 12) # check, if optimize.portfolio gives the same results: first period portfolio.optimized <- optimize.portfolio(R = returns["::1997-12-31",], portfolio = portfolio, optimize_method = "ROI") portfolio.optimized portfolio.rebalanced$opt_rebalancing$`1997-12-31` # YES! # but: last period portfolio.optimized <- optimize.portfolio(R = returns["2006-08-31::2009-08-31",], portfolio = portfolio, optimize_method = "ROI") portfolio.optimized portfolio.rebalanced$opt_rebalancing$`2009-08-31` # NO! What's wrong?
它在端點(R)上重新平衡,您通過了四分之一,因此每個季度都由端點(返回,‘四分之一’)確定,它將使用最後 12 個觀察值重新平衡。
在您的情況下,您在 37 個觀察值的數據集上呼叫了優化投資組合
nrow(edhec["2006-08-31::2009-08-31"]) [1] 37
這應該可以解釋兩個呼叫之間的差異,因為一個呼叫的數據集是 12 對 37。
在您的第一次測試中,您在 12 個觀察值的數據集上呼叫了優化投資組合,這與 optimize.portfolio.rebalancing 呼叫一致
nrow(edhec["::1997-12-31",]) [1] 12