组合约束

Rmetrics中的投资组合约束主要是指由组合资产的权重(权重指该项资产占投资资金的比例)或者与权重相关的变量决定的限制性条件和边界条件。这些约束条件由字符串或由字符串组成的向量定义,这些字符串需要能表达出组合权重的上下界,主要约束类型有盒状(box)、成组(group)、协方差风险预算(covariance risk budgets)、非线性约束(general non-linear constraint)等。下面按总分的形式阐述组合约束。

1.组合约束的整体概况 

Rmetrics中组合约束的代表fPFOLIOCON是由portfolioConstraints函数创建的S4型R对象,我们可以通过它了解组合约束的全貌:

library(fPortfolio)
showClass("fPFOLIOCON")
## Class "fPFOLIOCON" [package "fPortfolio"]
## 
## Slots:
##                                                                
## Name:   stringConstraints    minWConstraints    maxWConstraints
## Class:          character            numeric            numeric
##                                                                
## Name:   eqsumWConstraints minsumWConstraints maxsumWConstraints
## Class:             matrix             matrix             matrix
##                                                                
## Name:     minBConstraints    maxBConstraints   listFConstraints
## Class:            numeric            numeric               list
##                                             
## Name:     minFConstraints    maxFConstraints
## Class:            numeric            numeric

另外,我们也可以通过portfolioConstraints函数创建组合约束对象,需要注意的是portfolioConstraints函数涉及11个参数(??portfolioConstraints):

Data <- 100 * LPP2005.RET[, 1:3]
Spec <- portfolioSpec()
setTargetReturn(Spec) <- mean(Data)
Constraints <- "LongOnly"
defaultConstraints <- portfolioConstraints(Data, Spec, Constraints)

创建了组合约束对象之后我们可以利用str函数或者print函数呈现组合约束对象结构:

str(defaultConstraints, width = 65, strict.width = "cut")
## Formal class 'fPFOLIOCON' [package "fPortfolio"] with 11 slots
##   ..@ stringConstraints : chr "LongOnly"
##   ..@ minWConstraints   : Named num [1:3] 0 0 0
##   .. ..- attr(*, "names")= chr [1:3] "SBI" "SPI" "SII"
##   ..@ maxWConstraints   : Named num [1:3] 1 1 1
##   .. ..- attr(*, "names")= chr [1:3] "SBI" "SPI" "SII"
##   ..@ eqsumWConstraints : num [1:2, 1:4] 3.60e-02 -1.00 4.07e-0..
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:2] "Return" "Budget"
##   .. .. ..$ : chr [1:4] "ceq" "SBI" "SPI" "SII"
##   ..@ minsumWConstraints: logi [1, 1] NA
##   ..@ maxsumWConstraints: logi [1, 1] NA
##   ..@ minBConstraints   : Named num [1:3] -Inf -Inf -Inf
##   .. ..- attr(*, "names")= chr [1:3] "SBI" "SPI" "SII"
##   ..@ maxBConstraints   : Named num [1:3] 1 1 1
##   .. ..- attr(*, "names")= chr [1:3] "SBI" "SPI" "SII"
##   ..@ listFConstraints  : list()
##   ..@ minFConstraints   : num(0) 
##   ..@ maxFConstraints   : num(0)
print(defaultConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII
## Lower   0   0   0
## Upper   1   1   1
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000

2.多头约束 

多头约束可以用字符“LongOnly”表示,正如上面的代码所示。多头约束是默认状态下的约束,它要求所有的权重在0-1之间。

3.无限卖空约束 

卖空约束用“Short”表示,该约束的界限为(-,+),例如:

shortConstraints <- "Short"
portfolioConstraints(Data, Spec, shortConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##        SBI  SPI  SII
## Lower -Inf -Inf -Inf
## Upper  Inf  Inf  Inf
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000

4.Box约束 

对于卖空来说,可以利用minW和maxW函数可以设置权重的上下限构建Box约束。当然如果设置权重参数在0-1之间即同多头约束。例如:

box.1 <- "minW[1:3] = 0.1"
box.2 <- "maxW[c(1, 3)] = c(0.5, 0.6)"
box.3 <- "maxW[2] = 0.4"
boxConstraints <- c(box.1, box.2, box.3)
portfolioConstraints(Data, Spec, boxConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII
## Lower 0.1 0.1 0.1
## Upper 0.5 0.4 0.6
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000

5.Group约束 

Group约束涉及到的命令有“eqsumW”、“minsumW”和“maxsumW”,这里eqsumW设置的是一组资产的总权重,minsumW和maxsumW设置权重上下界。例如:

group.1 <- "eqsumW[c(\"SPI\", \"SII\")]=0.6"
group.2 <- "minsumW[c(2, 3)]=0.2"
group.3 <- "maxsumW[1:nAssets]=0.7"
groupConstraints <- c(group.1, group.2, group.3)
portfolioConstraints(Data, Spec, groupConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII
## Lower   0   0   0
## Upper   1   1   1
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000
## eqsumW  0.60000  0.000e+00  1.00000  1.00000
## 
## Lower Matrix Constraints:
##       avec SBI SPI SII
## lower  0.2   0   1   1
## 
## Upper Matrix Constraints:
##       avec SBI SPI SII
## upper  0.7   1   1   1

6.协方差风险预算约束 

协方差风险预算约束需要我们向portfolioConstraints函数中增加自定义的协方差风险预算的上下界minB和maxB。协方差风险的上下界赋值需要对所有的资产进行赋值,例如:

budget.1 <- "minB[1:nAssets]=-Inf"
budget.2 <- "maxB[c(1, 2:nAssets)]=c(0.5, rep(0.6, times=2))"
budgetConstraints <- c(budget.1, budget.2)
portfolioConstraints(Data, Spec, budgetConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII
## Lower   0   0   0
## Upper   1   1   1
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000
## 
## Lower/Upper Cov Risk Budget Bounds:
##        SBI  SPI  SII
## Lower -Inf -Inf -Inf
## Upper  0.5  0.6  0.6

7.非线性约束 

非线性约束的函数主要有”listF“、”minF“、”maxF“,其中listF表示非线性函数,其他两个函数定义上下界。例如,如果需要控制投资组合的最大回撤: 首先需要写出计算最大回撤的函数,该函数记为maxdd

maxdd <- function(x, ...) min(drawdown(x, ...))

然后需要定义非线性约束的上下界:

nonlin.1 <- "listF=list(maxdd=maxdd)"
nonlin.2 <- "minF=-0.04"
nonlin.3 <- "maxF=0"
nonlinConstraints <- c(nonlin.1, nonlin.2, nonlin.3)
portfolioConstraints(Data, Spec, nonlinConstraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII
## Lower   0   0   0
## Upper   1   1   1
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII
## Return  0.03604  4.066e-05  0.08418  0.02389
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000
## 
## Non-Linear Function Constraints:
##       maxdd
## Lower -0.04
## Upper  0.00

8.综合约束 

顾名思义就是将上述各种约束方法综合起来一起运用于投资组合:

# 模拟案例数据
Data <- 100 * LPP2005.RET[, 1:6]
# 模拟投资组合
Spec <- portfolioSpec()
# 设定目标收益
setTargetReturn(Spec) <- mean(Data)
# 设定Box约束
box.1 <- "minW[1:6] = 0.1"
box.2 <- "maxW[c(1:3, 5)] = c(rep(0.5, 3), 0.6)"
box.3 <- "maxW[4] = 0.4"
# 合并所有单独的约束
boxConstraints <- c(box.1, box.2, box.3)

# 设定Group约束
group.1 <- "eqsumW[c(2, 3, 5)]=0.2"
group.2 <- "minsumW[c(2, 4)]=0.2"
group.3 <- "maxsumW[c(4:6, 2)]=0.6"
groupConstraints <- c(group.1, group.2, group.3)

# 设定协方差风险预算约束
budget.1 <- "minB[1:nAssets]=-Inf"
budget.2 <- "maxB[c(1:3, 4:nAssets)]=rep(c(0.5, 0.6), each=3)"
budgetConstraints <- c(budget.1, budget.2)

# 设定非线性约束
maxdd <- function(x, ...) min(drawdown(x, ...))
nonlin.1 <- "listF=list(maxdd=maxdd)"
nonlin.2 <- "minF=-0.04"
nonlin.3 <- "maxF=0"
nonlinConstraints <- c(nonlin.1, nonlin.2, nonlin.3)

# 合并所有的约束
Constraints <- c(boxConstraints, groupConstraints, budgetConstraints, nonlinConstraints)

# 完成组合约束设定
portfolioConstraints(Data, Spec, Constraints)
## 
## Title:
##  Portfolio Constraints
## 
## Lower/Upper Bounds:
##       SBI SPI SII LMI MPI ALT
## Lower 0.1 0.1 0.1 0.1 0.1 0.1
## Upper 0.5 0.5 0.5 0.4 0.6 1.0
## 
## Equal Matrix Constraints:
##             ceq        SBI      SPI      SII       LMI      MPI      ALT
## Return  0.04308  4.066e-05  0.08418  0.02389  0.005532  0.05905  0.08577
## Budget -1.00000 -1.000e+00 -1.00000 -1.00000 -1.000000 -1.00000 -1.00000
## eqsumW  0.20000  0.000e+00  1.00000  1.00000  0.000000  1.00000  0.00000
## 
## Lower Matrix Constraints:
##       avec SBI SPI SII LMI MPI ALT
## lower  0.2   0   1   0   1   0   0
## 
## Upper Matrix Constraints:
##       avec SBI SPI SII LMI MPI ALT
## upper  0.6   0   1   0   1   1   1
## 
## Lower/Upper Cov Risk Budget Bounds:
##        SBI  SPI  SII  LMI  MPI  ALT
## Lower -Inf -Inf -Inf -Inf -Inf -Inf
## Upper  0.5  0.5  0.5  0.6  0.6  0.6
## 
## Non-Linear Function Constraints:
##       maxdd
## Lower -0.04
## Upper  0.00
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值