MinVar Portfolio Loop Optimization
Я пытаюсь минимизировать дисперсию портфеля из 3 акций, используя оптимизацию внутри цикла. То, что я сделал, рассчитал доходность акций и матрицу покрытия за период с 1980-01-01 по 1989-12-31 и оптимизировал для портфеля minvar, используя решение.QP. Отсюда я хотел бы рассчитать портфель minvar для каждого года, предшествующего дате 2010-12-31, и сохранить веса и оптимальное значение в векторе. Мой код выглядит следующим образом:
library(quantmod)
library(FRAPO)
library(quadprog)
getSymbols(c("F","AA","IBM"),from="1980-01-01",to="2010-12-31")
port=cbind(F$F.Adjusted,AA$AA.Adjusted,IBM$IBM.Adjusted)
portret=returnseries(port,"discrete",trim=TRUE)
portret=data.frame(date=index(portret),coredata=portret)
colnames(portret)=c("time","F","AA","IBM")
#to determine where to end portA
which(portret=="1989-12-29",arr.ind=TRUE)
#row number 2527 references date 1989-12-29
portA=subset(portret,select=c("F","AA","IBM"),subset=portret[,1]<portret[2527,1])
portAcov=cov(portA)
Dmat=portAcov
dvec=c(0,0,0)
A=c(1,1,1)
B=diag(3)
portAmeans=colMeans(portA)
Amat=cbind(A,portAmeans,B)
bvec=c(1,0,0,0,0)
sol=solve.QP(Dmat,dvec,Amat,bvec,meq=1)
#this gives me my minvar port weights for up to year 1990
portB=subset(portret,select=c("F","AA","IBM"),subset=portret[,1]>=portret[2527,1])
w=matrix(0,nrow(portB),3)
w[1,1:3]=sol$solution
v[1]=sol$value
v=matrix(0,nrow(portB),1)
for(i in (which(portret=="1990-01-02",arr.ind=TRUE)[1]:
which(portret=="2010-12-31",arr.ind=TRUE)[1])){
Dmat=cov(subset(portret[,2:4],select=c("F","AA","IBM"),subset=portret[,1]
<portret[i,1]))
sol2=solve.QP(Dmat,dvec,Amat,bvec,meq=1)
for(j in 2:nrow(portB)){
w[j,1:3]=sol2$solution
v[j,]=sol2$value}}
Почему-то мой весовой вектор w и вектор значений v равны всем одинаковым числам. Я хрустнул этот код в течение нескольких дней и не могу понять это. Кроме того, мне нужны годовые значения и веса (т. Е. Оптимальные веса минваров для 1990, 1991, 1992... 2010 и соответствующие значения). Есть ли простой способ сделать это??