应用共轭梯度法找到投资组合的最优权重向量

时间:2014-11-30 17:32:40

标签: r optimization

我有10支股票的样本数据。

a<-replicate(10,rnorm(100))
cov.Rt<-cov(a)

我正在尝试找到一个最小化回报方差的权重向量。 要做到这一点,我有一个起始权重向量W1,我试图找到导致方差减少的最大边际率的权重向量。

使用共轭梯度法我试图找到一个矢量W2,其条件是它是共轭的

W1 %*% cov.Rt %*% W2 = 0.

我尝试了以下内容:

首先,我找到了第一个共轭组合wcg1

mat1<-rep(-1,N-1)   
mat2<-diag(1,N-1,N-1)   
mat<-rbind(mat1,mat2)
rownames(mat)<-NULL
Z<- mat %*% solve(t(mat) %*% mat) %*% t(mat)
e<-rep(1,10)
cov.Rt<-cov(a)
wcg1<- as.vector(-Z%*% t(Z) %*% cov.Rt %*% e/N)

然后使用optim()

n.iters=1
fn<-function(x,cov.Rt){as.numeric(t(x)%*%cov.Rt%*%x)}
wc<-matrix(NA,ncol=10,nrow=n.iters+1)
wc[1,]<-wcg1
for(i in n.iters) wc[i+1,]<-optim(wc[i,],fn, cov.Rt=cov.Rt)$par

DeMiguel等人。 (http://faculty.london.edu/avmiguel/DeMiguelGarlappiNogalesUppalMS.pdf)写在页面ec4(http://pubsonline.informs.org/doi/suppl/10.1287/mnsc.1080.0986/suppl_file/mnsc.1080.0986-sm-ec.pdf)上,如果我们迭代这个过程N-1次,我得到一个与最小方差组合相同的投资组合权重向量。其中N是权重向量的长度。 但是,我对最小方差组合没有得到相同的结果。

我的做法有什么问题? 我使用的方法是否满足条件,即optim()输出的权重向量与起始向量wcg1共轭(即W1 %*% cov.Rt %*% W2 = 0)?

1 个答案:

答案 0 :(得分:1)

首先,从纯粹的财务角度来看,您希望在投资组合中最小化的风险将是通过该函数写入的总差异:

fn<-function(x, cov.Rt) as.numeric(t(x) %*% cov.Rt %*% x)

回到代码,fn的第一个参数必须是您使用optim更改的参数....所以x。 然后在cov.Rt中指定optim参数:

optim(w1, fn, cov.Rt=cov.rt)