我必须优化参数组合,其中权重取决于状态变量。假设我有以下返回矩阵(ret
)
[0.5 0.1 0.2 0.2
0.4 0.1 0.9 0.1
0.6 0.2 0.8 0.7]
要构建参数组合,我必须将ret
乘以“条件”权重矩阵。每个资产的权重取决于2个因变量A
和B
:
w1=as.vector(((x[1]*A)+(x[2]*B)))
w2=as.vector(((x[1]*A)+(x[2]*B)))
w3=as.vector(((x[1]*A)+(x[2]*B)))
w4=as.vector(((x[1]*A)+(x[2]*B)))
....#2与w1
,w2
,w3
,w4
相关的约束
,权重矩阵构造如下:
w=cbind(w1,w2,w3,w4)
最后,通过组合返回和权重向量,我们得到返回矩阵
r=w*ret
然后,投资组合,
portfolio<-rowSums(r)
问题是,在计算r之前,我需要添加2个约束:
例如,我必须得到以下w矩阵
[0.25 -0.25 0.5 0.5
0.3 -0.25 0.6 -0.35
0.4 -0.4 0.6 0.4 ]
这是修改后的代码
charact<-cbind(A,B)
func<-function(x,ret,charact) { #x: parameters (x1 and x2)
w1=as.vector(((x[1]*A)+(x[2]*B))) #the weight of each asset depends on 2 charac A and B
w2=as.vector(((x[1]*A)+(x[2]*B)))
w3=as.vector(((x[1]*A)+(x[2]*B)))
w4=as.vector(((x[1]*A)+(x[2]*B)))
w=cbind(w1,w2,w3,w4)
# Weight vector should sum to one
pen=sum(abs(rowSums(w) - c(1,1,1) )) *10
r=w*ret
#Calculating utility
u<-1/nrow(r)*sum((1+rp)^(1-5)/(1-5))
obj<--u+pen
return(obj)
}