# Fixed Income Portfolio Optimization

I'm trying to solve for a maximum sharpe ratio portfolio in the fixed income space. To do so, i use CVXPY in python. I use this Paper as reference.

This is my "setup":

    ## SET UP PROBLEM
C = np.asmatrix(new_cov)
mu = np.asmatrix(s['E(r) after FXh']/100)
mu0 = np.asmatrix(cleared_swaps.iloc[z]['CHF1']/100)

## INITIATE WEIGHT VARIABLE
y = cp.Variable(len(framework))

# DEFINE CONSTRAINTS AND MODIFY FOR QUADRATIC PROBLEM
A_mod = A - b.T

## CREATE CONSTRAINTS
constraints = [(mu-mu0)@y==1,
0 <= y,
A_mod@y.T >= 0]

## FORM OBJECTIVE

## FORM AND SOLVE PROBLEM
prob = cp.Problem(obj, constraints)

try:
prob.solve()
w = y.value/sum(y.value)
w[w<=0] = 0
w = w/sum(w)*1
except:
print('Exception. Using Market weights')
w = np.repeat(df_mkt_val_pct.iloc[z][live_currencies.index.tolist()].values,2)/2
w = w/sum(w)*1


Where A basically holds the Subportfolio Duration (for example different EUR Durations):

and b holds the DV01 Limits:

Now when I run this script the portfolios I get are "inversely optimized" meaning that I'm constantly underperforming the index. If I then kind of reverse the optimal weight (for example I add the underweight in one currency to the BM weight so that I end up with an overweight) then the returns are as expected.

But this behavior is weird in my opinion. Is there a way how to "flip" the optimization so that I guet the optimized values which I can then use without having to "inverse" them?

Do you have correctly formulated the problem for the solver ? If you want to maximise a function (the sharpe ratio) $$f$$, it is equivalent to minimise $$-f$$. This kind of confusion (minimising instead of maximising) would basically lead to a similar outcome as yours.
This means that your constraint (mu-mu0)@y==1 must be (mu-mu0)@y==k and w=y/k, which implies that k==cp.sum(y).