In a summary I am trying to do the following
- Bond Subset 1 : Get list of USD Bonds --> Filter out Bonds which have YTM > y% DUR > 10 Y etc. .. This gives us Bonds which we are interested in. So in the end we will have a subset of these Bonds in final portfolio
- Bond Subset 2 : List of Bonds which we surely need to include . Unlike previous subset these bonds should definitely include in final portfolio
- Constraints :
a. Match Total Duration and Key Rate Duration : Given the DV01 profile of the client’s liability the resulting portfolio should match this profile with +- X% deviation b. Apply Sector Constraints : Total in Financial Sector <= 0.25 of Total etc. .. c. Lower and Upper Limits of investment in single security d. Maximum Number of securities in resulting portfolio = N - Objective : Achieve Yield = Y % or Maximize Yield
So I created a set of inequalities to satisfy these contraints and I have my objective function defined as well. I am using matlab fmincon to achieve this.
Problem fmincon tries to include all bonds in the optimization and the results is such that constraints are not satisfied. I need to be able to selectively pick or remove bonds from the Subset 1. Which means that I need the solver to have variable number of variables. To solve this problem I am looking at finding best way to sample subsets of Bonds 1 and run solver on this so that I am left with portfolio with satisfies the contraints. Does anyone have any ideas on such a sampling problem in portfolio optimization. (Please dont suggest considering all combinations of bonds possible to find subsets for which constraints are satisfied and I get max yeild, since performance of the code is very important here and number of securities are about 1000 )