【发布时间】:2015-06-02 01:10:21
【问题描述】:
我正在使用 PortfolioAnalytics,并尝试使用 MPO 包中的小型股数据集来比较净多头、净空头和市场中性的投资组合(该数据集与我的问题无关,因为同样的问题我尝试过的所有数据集都存在)。不幸的是,添加“active”或“dollar_neutral”约束会导致所有资产的权重为 0,而不仅仅是权重的总和为 0。我针对我下载的其他几个股票数据篮子运行了这个,并得到了相同的特殊行为。见以下代码:
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")
运行代码会导致: 选择中性
***********************************
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
如我们所料。
知道为什么“active”和“dollar_neutral”都不像我使用它们的方式工作吗?
另外,为了获得净空头(净多头),我假设我们需要使用 max_sum=-0.0001(min_sum=0.0001) 和 min_sum=-1(max_sum=1) 的“weight_sum”约束。但是,这样做会导致所有资产的权重为 0。我在这里想念什么?谢谢!
【问题讨论】:
标签: r