2015-05-08 36 views
2

我正在尝试根据特定风险等级优化投资组合。使用fPortfolio似乎很简单,但我得到的结果没有意义。我花了好几个小时试图找出这没有任何运气。在R包中设定目标风险fPortfolio

基本情况(即不限制)

defaultSpec <- portfolioSpec() 
lppAssets <- 100*LPP2005.RET[, c("SBI", "SPI", "LMI", "MPI")] 
lppData <- portfolioData(data = lppAssets, spec = defaultSpec) 
port <- efficientPortfolio(lppData, defaultSpec, constraints = "LongOnly") 
[email protected] 

# $weights 
#   SBI   SPI   LMI   MPI 
# 0.396009510 0.002142136 0.547715368 0.054132986 

# $covRiskBudgets 
#   SBI   SPI   LMI   MPI 
# 0.396009510 0.002142136 0.547715368 0.054132986 

# $targetReturn 
#  mean   mu 
# 0.006422759 0.006422759 

# $targetRisk 
#  Cov  Sigma  CVaR  VaR 
# 0.1038206 0.1038206 0.2186926 0.1684104 

# $targetAlpha 
# [1] 0.05 

# $status 
# [1] 0 


# Slot "messages": 
# list() 

当我尝试风险级别设置为0.09,我得到了同样的答案。

defaultSpec <- portfolioSpec() 
setTargetRisk(defaultSpec) <- 0.09 # **this doesn't seem to work** 
lppAssets <- 100*LPP2005.RET[, c("SBI", "SPI", "LMI", "MPI")] 
lppData <- portfolioData(data = lppAssets, spec = defaultSpec) 
port <- efficientPortfolio(lppData, defaultSpec, constraints = "LongOnly") 
[email protected] 

# An object of class "fPFOLIOVAL" 
# Slot "portfolio": 
# $weights 
#   SBI   SPI   LMI   MPI 
# 0.396009510 0.002142136 0.547715368 0.054132986 

# $covRiskBudgets 
#   SBI   SPI   LMI   MPI 
# 0.396009510 0.002142136 0.547715368 0.054132986 

# $targetReturn 
#  mean   mu 
# 0.006422759 0.006422759 

# $targetRisk 
#  Cov  Sigma  CVaR  VaR 
# 0.1038206 0.1038206 0.2186926 0.1684104 

# $targetAlpha 
# [1] 0.05 

# $status 
# [1] 0 


# Slot "messages": 
# list() 

“spec”表示新的风险等级是针对性的,但结果不会改变。如果我将风险设置为0.09或0.12或任何其他值,这并不重要。

defaultSpec 

# Model List: 
# Type:      MV 
# Optimize:     maxReturn 
# Estimator:     covEstimator 
# Params:     alpha = 0.05 a = 1 

# Portfolio List: 
# Portfolio Weights:   NA 
# Target Return:    NA 
# Target Risk:    0.09 
# Risk-Free Rate:   0 
# Number of Frontier Points: 50 
# Status:     NA 

# Optim List: 
# Solver:     solveRquadprog 
# Objective:     portfolioObjective portfolioReturn portfolioRisk 
# Options:     meq = 2 
# Trace:      FALSE 

我在做什么错?如何使用R中的fPortfolio来设置风险等级?

+0

我有相同的问题 – user1627466

+0

似乎与有效的投资组合函数和规范中使用的求解器有关。显然,无论您输入什么目标风险,解算器都会输入与您在打印投资组合时获得的Cov相对应的目标。 – user1627466

+0

尝试过:lppData = 100 * LPP2005.RET [,1:6] maxRetSpec = portfolioSpec() setTargetRisk maxRetSpec)= 0.7 setSolver(maxRetSpec)=“solveRdonlp2” efficientPortfolio(data = lppData,spec = maxRetSpec,constraints =“LongOnly”)不起作用 – user1627466

回答

0

从fPortfolio的帮助文件看来,如果您设置了风险目标,则可能需要使用maxreturnPortfolio。您可能还需要设置优化(规格)< - 'maxReturn'。

从R中的帮助文件复制: “最大的回报组合:

功能maxreturnPortfolio与固定目标的风险最大的利润返回的投资组合。”

0

当您将maxreturnPortfolio()与允许空头销售结合使用时,优化程序将成功针对您通过setTargetRisk提供的风险级别并相应地调整权重。此外,您不想通过100

library(fPortfolio) 
defaultSpec <- portfolioSpec() 
setTargetRisk(defaultSpec) <- 0.09 
setSolver(defaultSpec)= "solveRshortExact" 
lppAssets <- LPP2005.RET[, c("SBI", "SPI", "LMI", "MPI")] 
lppData <- portfolioData(data = lppAssets, spec = defaultSpec) 
port <- maxreturnPortfolio(lppData, defaultSpec, constraints = "Short") 
[email protected] 

缩放LPP2005.RET你现在可以用0.09的目标风险水平的解决方案:

An object of class "fPFOLIOVAL" 
Slot "portfolio": 
$weights 
     SBI   SPI   LMI   MPI 
-43.38872554 10.24063734 34.16040358 -0.

$covRiskBudgets 
      SBI   SPI   LMI   MPI 
0.2599262930 0.7653635547 -0.0246663061 -0.0006235416 

$targetReturn 
     mean   mu 
0.01048478 0.01048478 

$targetRisk 
     Cov  Sigma  CVaR  VaR 
0.0900000 0.0900000 0.2048887 0.1397806 

$targetAlpha 
[1] 0.05 

$status 
[1] 0 


Slot "messages": 
list()