我有一个由 5 只股票组成的投资组合,我想为其找到最小化投资组合方差和最大化预期未来股息的最佳组合。后者来自分析师的预测。我的问题是我知道如何解决最小方差问题,但我不确定如何将二次形式转换为 quadprog 目标函数的正确矩阵形式。
标准最小方差问题读取
Min! ( portfolio volatility )
哪里r
有五只股票的 252 日收益,d
有预期的年度股息收益率(firm_A
支付 1 %,firm_B
支付 2 %等)
我将其编程如下
dat = rep( rnorm( 10, mean = 0, sd = 1 ), 252*5 )
r = matrix( dat, nr = 252, nc = 5 )
d = matrix( c( 1, 2, 1, 2, 2 ) )
library(quadprog)
# Dmat (covariance) and dvec (penalized returns) are generated easily
risk.param = 0.5
Dmat = cov(r)
Dmat[is.na(Dmat)]=0
dvec = matrix(colMeans(r) * risk.param)
dvec[is.na(dvec)]=1e-5
# The weights sum up to 1
n = 5
A = matrix( rep( 1, n ), nr = n )
b = 1
meq = 1
res = solve.QP( Dmat, dvec, A, b, meq = 1 )
显然,r
标准正常的回报,因此每只股票的权重约为 20%。
Q1:
我如何解释firm_A
支付股息 1、firm_B
股息 2 等的事实?
新的目标函数如下:
Max! ( 0.5 * Portfolio_div - 0.5 * Portfolio_variance )
但我不知道如何对其进行硬编码。投资组合方差很容易输入,Dmat
但新的目标函数具有Portfolio_div
定义为具有五个权重Portfolio_div = w * d
的元素。w
非常感谢。
EDIT:
也许添加一个更高级别的问题描述是有意义的:我可以对上面的代码使用最小方差优化。最小化投资组合方差意味着优化方差协方差矩阵Dmat
(维度为 5x5)的权重。但是,我想在优化中添加一个额外的部分,即红利d
乘以权重(因此尺寸为 5x1)。相同的权重也用于Dmat
.
Q2:
如何将向量添加d
到代码中?
EDIT2:
我想答案是简单地使用
dvec = -1/d
因为我通过最小化负数的倒数来最大化预期股息。
Q3:
有人可以告诉我这是否正确吗?