6 votos

¿Cómo ajustar el comercio de swaps de mariposa 2s5s10s para la direccionalidad?

Estoy estudiando una idea de swaps 2s5s10s utilizando un esquema de ponderación 50-50, donde es 2 veces el 5 años menos el 2 años y el 10 años. Sin embargo, existe una correlación entre el spread de la mariposa y la pendiente de la curva (2s10s) y también con la de 5 años. Quiero ajustar los pesos de mi mariposa para eliminar la direccionalidad de tal manera que todavía quiero que el cuerpo tenga un peso de 2.

Esencialmente, creo que debería ser X : 2 : Y pero me está costando.

0 votos

Hola - sólo para entender, ¿estás diciendo que quieres que tu mariposa sea plana/cobertura a 2s10s empinada/plana dada la correlación de 5y que observas a 2s10s?

0 votos

básicamente sería bueno saber cómo quieres ganar dinero en el comercio y lo que quieres cubrir a cabo. Por ejemplo, ¿estás cubriendo una pendiente de 2s10s o quieres ganar dinero en la inclinación/planeamiento de 2s10s mientras que eres neutral en general dv01 dado lo que esperas que ocurra con 5y, etc.?

0 votos

Creo que puede ser más simple que eso. Hablé con un trader, me dijo que si haces una regresión de la 2s5s10s con la 2s10s y la 5y como variable independiente, obtendrás un coeficiente de b1 para la pendiente de la 2s10s y b2 para la 5y. Entonces aquí es donde me pierdo: el peso sería 1 - b1 para la 2y, 2 para la 5y, etc. ¿Por qué el peso es 1- b1

14voto

dotnetcoder Puntos 1262

Método 1: direccionalidad PCA cubierta

Esta es una forma de hacerlo utilizando el ACP y cubriendo la direccionalidad implícita en el primer componente principal .

Dado que ha citado 3 instrumentos efectivos; 2s5s10s, 2s10s y 5Y observará que puede derivar estos instrumentos del subyacente 2Y, 5Y y 10Y. Es decir;

$$ \begin{bmatrix} 5Y \\\ 2s10s \\\ 2s5s10s \\ \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 \\\ -1 & 0 & 1 \\\ -1 & 2 & -1 \end{bmatrix} \begin{bmatrix} 2Y \\\ 5Y \\\ 10Y \end{bmatrix} , \quad or \quad P_2 = A P_1$$ donde $P_1$ y $P_2$ son su conjunto de precios en los diferentes sistemas de base.

También se puede observar que si se tiene la matriz de covarianza de los instrumentos en $P_1$ , digamos que $Q(P_1)$ entonces la covarianza de los instrumentos de base $P_2$ se puede obtener con: $$Q(P_2) = A Q(P_1) A^T \quad \implies \quad Q(P_1) = A^{-1}Q(P_2)A^{-T}$$ Así que se puede trabajar en ambos sistemas de base, pero me voy a centrar en el predeterminado $P_1$ sistema.

Si ahora obtienes los valores y vectores propios de $Q(P_1)$ tome el vector propio correspondiente al valor propio más alto, es decir, el primer componente principal (PC1). Para cubrir este componente de manera que no tenga exposición al riesgo, tome su propuesta comercial subyacente y dividirla por los elementos de PC1 :

$$ \begin{bmatrix} 2Y: -1 \\\ 5Y: +2 \\\ 10Y: -1 \end{bmatrix} \div \begin{bmatrix} PC1_{2Y} : 0.660 \\\ PC1_{5Y} : 0.604 \\\ PC1_{10Y} : 0.447 \end{bmatrix} = \begin{bmatrix} -1.51 \\\ 3.31 \\\ -2.24 \end{bmatrix} \propto \begin{bmatrix} -0.91 \\\ 2.00 \\\ -1.35 \end{bmatrix} $$

Método 2: Enfoque de minimización del VaR

Una segunda forma considerada sería suponga que opera con 5Y y busca la combinación de posiciones de 2Y y 10Y para minimizar su VaR . Esto le permite maximizar el tamaño absoluto del 5Y en relación con su VaR objetivo de la operación.

Suponga que tiene el siguiente riesgo:

$$S = \begin{bmatrix} 2Y: 0 \\\ 5Y: 2 \\\ 10Y: 0 \end{bmatrix} $$ y ahora se evalúa qué posiciones en 2Y y 10Y dan el menor VaR. Para la misma matriz de covarianza que utilicé anteriormente para derivar el PCA la respuesta es:

$$ S^* = \begin{bmatrix} 2Y: -1.48 \\\ 5Y: 2.00 \\\ 10Y: -0.38 \end{bmatrix} $$

Se trata de un problema de optimización que se puede resolver con un solucionador numérico o, más sencillamente, con el cálculo analítico, pero no lo voy a tratar aquí; el enlace que aparece a continuación lo tiene.

Obviamente, estos métodos son fundamentalmente diferentes, pero cada uno de ellos tiene mérito frente a un punto de vista específico, es más probable que en su posición favorezca al primero. Las diferencias aquí son tales que el 2Y tiene una correlación mucho mayor con el 5Y directamente, por lo que es una mejor cobertura para reducir el VaR sobreponderándolo, mientras que con el PCA el 10Y se mueve menos, por lo que se necesita más riesgo para tener una cobertura de direccionalidad.

Nota: si quieres probar esto por ti mismo, puedes usar el $Q(C)$ valores de la matriz de covarianza para las operaciones de 2 años, 5 años y 10 años en este enlace: http://www.tradinginterestrates.com/revised/PCA.xlsb Tenga en cuenta que todo este material lo obtuve de Darbyshire Pricing and Trading Interest Rate Derivatives.

Editar

Método 3: Regresión por mínimos cuadrados multivariable

Si incluimos el tercer método de @dm63 de regresión multivariable de la forma:

$$ \mathbf{y} - \mathbf{\beta x} = \mathbf{\epsilon} $$

entonces sus estimadores óptimos para $\mathbf{\beta}$ están dadas por,

$$ \mathbf{\hat{\beta}} = \mathbf{(x^Tx)^{-1}x^T y} $$

y como él afirma los pesos comerciales se dan como $(-(1-\beta_1), 2-\beta_2, -(1+\beta_1))$

--------------

Como ejemplo, he probado estos tres métodos con algunos datos de muestra de swaps de euros de 2016. Desde el 1 de enero hasta el 30 de junio son mis datos de muestra y desde el 1 de julio hasta el 22 de diciembre es mi prueba retrospectiva fuera de muestra. A continuación he trazado los resultados. Lo interesante es que la regresión multivariable es en realidad tiene la menor volatilidad en estos datos fuera de muestra, pero el var mínimo tiene casi la misma volatilidad. Y, por supuesto, min Var tendrá la menor volatilidad sobre los datos de la muestra de la que se derivó por definición. enter image description here enter image description here

Si está interesado en el código...

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df_hist = pd.read_csv('historical_daily_changes.csv', index_col='DATE', parse_dates=True)
df_fore = pd.read_csv('forecast_daily_absolues.csv', index_col='DATE', parse_dates=True)
z = df_fore[['2Y', '5Y', '10Y']].values

# Method 1: PCA directionality weighted trade
x = df_hist[['2Y', '5Y', '10Y']].values
Q = np.cov(x.T)
eval, evec = np.linalg.eig(Q)
w = np.array([-1 / evec[0, 0], 2 / evec[1, 0], -1 / evec[2, 0]])
print('Weights for trade using PCA are:', 2*w[0]/w[1], 2, 2*w[2]/w[1])
df_fore['PCA'] = 100 * (w[0]*z[:, 0] + w[1]*z[:, 1] + w[2]*z[:, 2]) * 2/w[1]

# Method 2: Minimum Variance approach
Q = np.cov(x.T)
Q_hat = Q[[0, 2], :]
Q_dhat = Q_hat[:, [0, 2]]
w[[0, 2]] = -np.einsum('ij,jk,k->i', np.linalg.inv(Q_dhat), Q_hat, np.array([0,2,0]))
w[1] = 2
print('Weights for trade using min VaR are:', 2*w[0]/w[1], w[1], 2*w[2]/w[1])
df_fore['Min VaR'] = 100 * (w[0]*z[:, 0] + w[1]*z[:, 1] + w[2]*z[:, 2]) * 2/w[1]

# Method 3: Multivariable least square regression
x = df_hist[['2Y10Y', '5Y']].values
y = df_hist[['2Y5Y10Y']].values
beta = np.matmul(np.linalg.pinv(x), y)
w = np.array([-(1-beta[0]), 2-beta[1], -(1+beta[0])])
print('Weights for trade using MVLSR are:', 2*w[0]/w[1], 2, 2*w[2]/w[1])
df_fore['MVLSR'] = 100 * (w[0]*z[:, 0] + w[1]*z[:, 1] + w[2]*z[:, 2]) * 2/w[1]

# Plot an out of sample forecast
fig, ax = plt.subplots(1,1)
ax.plot_date(df_fore.index, df_fore['2Y5Y10Y'] + 36, 'k-', label='2Y5Y10Y')
ax.plot_date(df_fore.index, df_fore['MVLSR'] + 6.7, 'r-', label='MVLSR weights')
ax.plot_date(df_fore.index, df_fore['PCA'] - 2.3, 'g-', label='PCA Weights')
ax.plot_date(df_fore.index, df_fore['Min VaR'] + 14.9, 'b-', label='Min VaR weights')
ax.legend()
plt.show()

print(df_fore[['2Y5Y10Y', 'MVLSR', 'PCA', 'Min VaR']].diff().describe())

1 votos

+1, me hicieron aprender PCA más o menos el primer día en una mesa de swaptions hace años, omnipresente y muy utilizado en los tipos, es curioso que nunca se haya utilizado tanto en otros lugares, definitivamente tiene su lugar...

2 votos

Esta es una respuesta tan buena que si pudiera votarla varias veces lo haría =) Lo único que añadiría es que los métodos cuantitativos no serán suficientes para neutralizar las exposiciones de nivel/pendiente. Por ejemplo, durante bastantes años, antes de que la Fed empezara a subir de nuevo, los tipos a 2 años apenas se movieron. En esos años, no importa cuánta estructuración hagas - tu mosca 2s/x/y se comportará como una curva x/y...

0 votos

@Helin - Supongo que eso es lo que pasa con el PCA, los componentes (y los valores propios/importancia) cambian con los regímenes, nunca se puede esperar que las series temporales y los componentes/importancia derivados sean estables... pero tiene sus usos, pero sólo si se tiene una buena idea del régimen en el que se está, así que, como todas las cosas, se necesita un poco de "ingenio" en la aplicación :)

3voto

Cody Brimhall Puntos 762

Creo que está diciendo que si

$$ Fly=b_1(2s-10s) + b_2(5s) + error $$

Pero $$ Fly= 2s-2(5s)+10s $$

Entonces, haciendo un poco de álgebra ,

$$ (1-b_1)2s -(2-b_2)5s + (1+b_1)10s = error $$

Por lo tanto, los pesos de la mosca que dan el ruido puro, no correlacionado con la curva y la tasa, son los indicados anteriormente. Si quieres 2 en el medio , tienes que reescalar.

0 votos

Gracias, esto tiene un sentido intuitivo. Así que la segunda ecuación es su mosca original y se resta la primera ecuación que resulta en los pesos de tal manera que su curva de neutralización y los componentes de la tasa por lo que está negociando basado en el término de error.

0 votos

Pregunta de seguimiento, he probado esto en una mosca y notar que incluso el término de error tiene direccionalidad con la curva y la tasa. ¿Podría algo más en el término de error todavía ser direccional con la curva y la tasa?

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