我正在努力寻找非线性投资组合优化器
在fPortfolio文档以及R / Rmetrics的Rmetrics Portfolio优化中,可以放入非线性约束。
然而,在查看了包的源代码之后,我一直无法找到使用非线性约束的任何地方。
可重复的测试代码:
library(fPortfolio)
Data <- 100 * LPP2005.RET[,1:6]
Spec <- portfolioSpec()
setTargetReturn(Spec) <- mean(Data)
Constraints = 'maxW[1:6] = 0.5'
efficientPortfolio(Data, Spec, Constraints)
Title:
MV Efficient Portfolio
Estimator: covEstimator
Solver: solveRquadprog
Optimize: minRisk
Constraints: maxW
Portfolio Weights:
SBI SPI SII LMI MPI ALT
0.0000 0.0086 0.2543 0.3358 0.0000 0.4013
...
我添加了一个无法满足的非线性约束。 (当我要求值介于0和1之间时,非线性函数总是返回2)
testfunc = function(x) 2
nonlinConstraints = c('listF=list(testfunc=testfunc)', 'minF = 0', 'maxF = 1')
newConstraints = c(Constraints, nonlinConstraints)
efficientPortfolio(Data, Spec, newConstraints)
Title:
MV Efficient Portfolio
Estimator: covEstimator
Solver: solveRquadprog
Optimize: minRisk
Constraints: maxW
Portfolio Weights:
SBI SPI SII LMI MPI ALT
0.0000 0.0086 0.2543 0.3358 0.0000 0.4013
...
得到完全相同的答案。熟悉该软件包的人是否可以告诉我,如果我做错了或非线性约束根本没有实现?
答案 0 :(得分:0)
您会在getAnywhere(.rquadprogArguments)
中看到solveRquadprog
不使用minFConstraints
或maxFConstraints
。
您应该调用自己的定制解算器或使用solveRdonlp2