Matlab Rounding as Portfolio Constraint

4 views (last 30 days)
Hi there,
I am optimizing a portfolio using the mean-CVaR optimization function in Matlab. One of the constraints I would like to set is that the portfolio weights for each asset class should be rounded to the nearest 0.05.
I have defined the rounding constraint as
round(x/5,2)*5
which works fine. However, I am wondering now how I can include this as a constraint in the optimization instead of just rounding the weights after the optimization.
Here is the code I am using for the portfolio optimization
pmc = PortfolioCVaR;
pmc = pmc.setAssetList(IndexList); % select index names
pmc = pmc.setScenarios(returns); % select return series
pmc = pmc.setProbabilityLevel(0.95); % cVaR confidence level
pmc = pmc.setDefaultConstraints; % Constraint 1: only positive
weights that sum to 1
pmc = pmc.setBounds(0.01, 0.1); % Constraint 2: min/max weights
I would be happy about any hints!
Thanks a lot, Carolin

Accepted Answer

John D'Errico
John D'Errico on 23 May 2015
This becomes essentially an integer programming problem, since you are trying to force the parameters to be discrete values. So unless the optimization tool allows that as an option, you will need to use a different tool for the optimization.
  1 Comment
Carolin Brueckmann
Carolin Brueckmann on 24 May 2015
Hi John,
thanks a lot for the Hint. The default solver for the mean-cVaR optimization ('fmincon') does not support integer programming problems. The solver option in the PortfolioCVaR object can be changed to the ‘cuttingplane’ solver, which is a mixed integer programming technique and thus would suit my need. Unfortunately, I am struggling with the implementation of the 2 decimals constraint. I believe that I have to run the ‘cuttingplane’ solver under the 'intlinprog' algorithm and adjust the number of decimals using ‘TolInteger’. The latter two however it seems cannot be combined.
Here is the code I am trying to run: pmc = pmc.setSolver('cuttingplane','MasterSolverOptions', options); options = optimoptions('intlinprog', 'TolInteger', 1e-3)
Would you have any Tips on how to set the decimal places under this approach?
Many thanks in advance!
Best, Carolin

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!