I'm currently facing the following problem: I'm trying to minimize the variance of a portfolio by changing the weights of the assets, but under a constraint regarding a different parameters, specifically the risk contribution of each asset to the total volatility of the portfolio should be equal. Now I want to introduce two constraints:
CoVarA = Covariance Matrix of Assets (4x4)
b = weight vector of the 4 assets (4x1)
1) All the weights add up to 1, which I managed with the "optimize_init_constraints" command as seen below (this one works):
Code:
mata:
mata clear
CoVarA =st_matrix("CoVarA")
void i_VarPF(todo, b, VarPF,g,H)
{
external CoVarA
b=abs(b)
VarPF = b*CoVarA*b'
}
SumConstraint=1
Unitvector=J(1,4,1)
guess=J(1,4,0)
S=optimize_init()
optimize_init_evaluator(S, &i_VarPF())
optimize_init_which(S, "min")
optimize_init_evaluatortype(S,"d0")
optimize_init_params(S, guess)
optimize_init_conv_maxiter(S, 10000)
optimize_init_constraints(S, (Unitvector,SumConstraint))
p=optimize(S)
p
end
2) Now the second constraint I want to introduce is not directly on the weight vector b, but on a calculated matrix including b as the only changing variable, more specifically the RelativeRiskA. This should be that each of the assets is contributing the same risk to the final portfolio, which should look like (0.25,0.25,0.25,0.25). This is the code for the calculation of the RelativeRiskA:
FactorL = Factor loading matrix (4x3)
weights = weights of the assets --> should then here be replaced with the input from the optimization loop "b"
Code:
mata:
mata clear
FactorL = st_matrix("FactorL")
CoVarA =st_matrix("CoVarA")
weights =st_matrix("weights")
VarPF=weights'*CoVarA*weights
StdPF =sqrt(VarPF)
StdPF
MarginalRiskA=(CoVarA*weights)/(sqrt(weights'*CoVarA*weights))
MarginalRiskA
RiskContributionA=MarginalRiskA*weights'*weights
RiskContributionA
RelativeRiskA=RiskContributionA/StdPF
RelativeRiskA
end
Please let me know if you need any more information. I'm posting here for the first time and just been coding for a few days, so don't mind my "non-lean" code

Thanks a lot for any input!!
Best regards,
Jérôme
0 Response to Constraint function in optimize()
Post a Comment