ループ内の最適化を使用して、3 つの株式ポートフォリオの分散を最小化しようとしています。私が行ったことは、1980 年 1 月 1 日から 1989 年 12 月 31 日までの日付から株式リターンと cov 行列を計算し、solve.QP を使用して minvar ポートフォリオ用に最適化することです。ここから、2010 年 12 月 31 日までの各年の minvar ポートフォリオを計算し、重みと最適値をベクトルに格納したいと思います。私のコードは次のとおりです。
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 年の最適な minvar の重みとそれに対応する値)。これを行う簡単な方法はありますか??