Optimization problem - Sequential Approximation - f(x(i)) = x(i) * E[r(i)|rp(x)<=VaR] - find the x such that all f(x) are equal
Show older comments
Dear all, I am trying to solve the following optimization/sequential approximation problem concerning an ERC portfolio.
I have n assets in portfolio. r(i) is a random variable which identify the asset's i return and rp( x ) is the portfolio's return, function of assets' returns ( x '* r ). x is the vector of portfolio weights.
Now, I have a Risk Contribution function which is:
RiskContribution(i) = x(i)* MarginalContribution(i)
= x(i) * E[r(i)|rp(x)<=VaR(rp(x))]
What I am looking for is the x * portfolio allocation such that the vector of Risk contributions RC = [RC(1) RC(2) … RC(n)] have all the same elements (RC(1)=RC(2)=…=RC(n)).
Does anybody have an idea of how to solve this problem?
I think that is impossible to solve it as a minimization problem because once I change the portfolio's weights, also portfolio returns rp(x) and VaR Value-at-Risk change.
PS: naturally, I need x(i)>0 for every i since short selling is not allowed in my problem [..and at least a minimum weight should be allocated to every asset]. An additional constraint could be the sum(x(i))= 1 but it is not compulsory (I can normalize weights in a second moment).
Thanks to everybody.
5 Comments
An additional constraint could be the sum(x(i))= 1 but it is compulsory (I can normalize weights in a second moment).
Did you mean to write that it is not compulsory? If so, then x(i)=0 for all i is a trivial solution.
I also don't see how you are free to post-scale the x(i). Does VaR(x) satisfy the following homogeneity property
VaR(c*x)= c*VaR(x)
for c>0. Otherwise, I don't see it.
Andrea
on 13 Jan 2014
Matt J
on 13 Jan 2014
Do you already have a means of evaluating
MarginalContribution(i,x) = E[r(i)|rp(x)<=VaR(rp(x))]
Is this a function you already have code for?
Andrea
on 14 Jan 2014
Andrea
on 14 Jan 2014
Answers (1)
Matt J
on 14 Jan 2014
Glad you got it working, Andrea. I'll just add as an Answer that LSQNONLIN might be better for an objective of the form
error=sum((RC(i)/ES - 1/n)^2)
and for constraints consisting only of upper and lower bounds. LSQNONLIN is more customized for least squares minimization than FMINCON.
Categories
Find more on Portfolio Optimization and Asset Allocation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!