我正在使用PortfolioAnalytics,並試圖比較使用MPO軟件包中的小盤數據集進行淨多頭,淨多頭和市場中性的投資組合(該數據集與我的問題無關,因爲我試過的所有數據集都存在同樣的問題)。不幸的是,增加「主動」或「美元中性」約束會導致所有資產的權重爲0,而不僅僅是權重的總和爲0.我將其與我下載的其他幾個庫存數據庫進行比較,並得到相同的特殊行爲。請參見下面的代碼:PortfolioAnalytics「dollar_neutral」約束
rm(list=ls())
cat("\014")
library(mpo)
library(PortfolioAnalytics)
library(ROI)
library(ROI.plugin.quadprog)
library(ROI.plugin.glpk)
data(smallcap.ts)
smlcp <- smallcap.ts[,1:20]
stocks <- colnames(smlcp)
#initialize portfolio
pspec.base <- portfolio.spec(stocks)
#min variance objective fn
pspec.uc <- add.objective(portfolio=pspec.base,type="risk",name="var")
#dollar_neutral constraint, min var portfolio
pspec.neutral <- add.constraint(portfolio=pspec.uc,type="active")
opt.neutral <- optimize.portfolio(smlcp,pspec.neutral,optimize_method="ROI")
中運行代碼的結果: opt.neutral
***********************************
PortfolioAnalytics Optimization
***********************************
Call:
optimize.portfolio(R = smlcp, portfolio = pspec.neutral, optimize_method = "ROI")
Optimal Weights:
MODI MGF MEE FCEL OII SEB RML AEOS BRC CTC TNL IBC KWD TOPP RARE HAR BKE GG GYMB KRON
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Objective Measure:
StdDev
0
但是,更改 「活動」 約束 「long_only」 的結果:
Optimal Weights:
MODI MGF MEE FCEL OII SEB RML AEOS BRC CTC TNL IBC KWD TOPP RARE
0.0000 0.8901 0.0000 0.0001 0.0007 0.0000 0.0437 0.0144 0.0000 0.0000 0.0000 0.0000 0.0035 0.0290 0.0000
HAR BKE GG GYMB KRON
0.0000 0.0010 0.0083 0.0000 0.0093
就像我們所期望的那樣
任何想法爲什麼「主動」和「dollar_neutral」都不能像我使用它們那樣工作?我想我們需要使用max_sum = -0.0001(min_sum = 0.0001)和min_sum = -1(max_sum = 1)的「weight_sum」約束條件。但是,這樣做會導致所有資產的權重爲0。我在這裏錯過了什麼?謝謝!