1 votos

Optimización de la cartera de renta fija

Estoy tratando de resolver una cartera con el máximo ratio de sharpe en el espacio de la renta fija. Para ello, utilizo CVXPY en python. Utilizo lo siguiente Papel como referencia.

Este es mi "montaje":

    ## 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
    obj = cp.Minimize(cp.quad_form(y,C))

    ## 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

Donde A contiene básicamente la duración de la subcartera (por ejemplo, diferentes duraciones del EUR):

A

y b mantiene los límites del DV01:

b

Ahora bien, cuando ejecuto este script las carteras que obtengo están "inversamente optimizadas", lo que significa que estoy constantemente por debajo del índice. Si entonces invierto el peso óptimo (por ejemplo, añado la infraponderación de una divisa al peso de la BM para terminar con una sobreponderación) entonces los rendimientos son los esperados.

Backtesting

Pero este comportamiento es extraño en mi opinión. ¿Hay alguna forma de "invertir" la optimización para obtener los valores optimizados y poder utilizarlos sin tener que "invertirlos"?

1voto

siukurnin Puntos 1986

¿Ha formulado correctamente el problema para el solucionador? Si quieres maximizar una función (el ratio de sharpe) $f$ es equivalente a minimizar $-f$ . Este tipo de confusión (minimizar en lugar de maximizar) llevaría básicamente a un resultado similar al tuyo.

0voto

vonbrand Puntos 15673

La formulación de su problema es errónea, debe utilizar el Transformación de Charnes y Cooper .

Esto significa que su restricción (mu-mu0)@y==1 debe ser (mu-mu0)@y==k y w=y/k lo que implica que k==cp.sum(y) .

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X