我正在构建使用多个约束的有效投资组合:即长期头寸和给定资产的最小权重= 34%(比如说)。我正在使用fPortfolio包来执行此操作。根据手册,可以通过创建字符串向量来提供复合约束。我对这种方法有一些问题。以下是fPortfolio手册中的示例。
library(fPortfolio)
Data = SMALLCAP.RET[,c("BKE", "GG", "GYMB", "KRON")]
Spec = portfolioSpec()
setTargetReturn(Spec) = mean(colMeans(Data))
Constraints = "LongOnly"
efficientPortfolio(Data, Spec, Constraints)
这很有效。但是我想通过添加最小重量条件
来增加这一点Spec = portfolioSpec()
setTargetReturn(Spec) = mean(colMeans(Data))
Constraints = c("LongOnly","minW[1]=0.34")
efficientPortfolio(Data, Spec, Constraints)
上述代码未给出预期的结果。我知道我在设置约束时做错了什么。任何帮助将不胜感激。
答案 0 :(得分:2)
是的,它看起来像约束线。 the fPortfolio manual的第33页说
约束由字符串或字符向量定义 字符串。摘要约束:NULL,“LongOnly”,“Short”有 三种特殊情况,设置约束= NULL, constraints =“Short”,constraints =“LongOnly”。注意,这些 三个约束设置不允许与更多组合 一般约束定义。
如果你试试这个
library(fPortfolio)
Data = SMALLCAP.RET[,c("BKE", "GG", "GYMB", "KRON")]
Spec = portfolioSpec()
setTargetReturn(Spec) = mean(colMeans(Data))
Constraints = "minW[1]=0.34"
efficientPortfolio(Data, Spec, Constraints)
你得到了
Title:
MV Efficient Portfolio
Estimator: covEstimator
Solver: solveRquadprog
Optimize: minRisk
Constraints: minW
Portfolio Weights:
BKE GG GYMB KRON
0.3400 0.3390 0.1671 0.1538
Covariance Risk Budgets:
BKE GG GYMB KRON
0.3457 0.3421 0.2120 0.1002
Target Return and Risks:
mean mu Cov Sigma CVaR VaR
0.0243 0.0243 0.0962 0.0962 0.1592 0.1117
我认为这就是你要找的东西。