3 votos

Cómo construir modelos de curva multi-moneda (únicos?) utilizando permutas cruzadas de moneda

Soy relativamente nuevo en los intercambios de divisas cruzadas (XCCY swaps) y leyendo a través de Pricing and Trading Interest Rate Derivatives - A Practical Guide to Swaps. Lo que no puedo entender es cómo se utilizan estos productos para generar un modelo de curva multi-divisa para un descuento adecuado. Para introducir la notación en el libro, CCY:CCY2-CSA denota la curva de descuento para los flujos de efectivo de la divisa CCY colateralizados en CCY2 OIS. Eso significa que USD:EUR-CSA es la curva de descuento para los flujos de efectivo en USD colateralizados en EUR OIS (asumido).

Caso de dos mercados

Supongamos que tengo USD OIS como mi curva de CSA de referencia y estoy interesado en encontrar la curva correcta USD:EUR-CSA. Por simplicidad, no nos preocupamos por el mark-to-market (MTM) o no-MTM. Lo que observo en los mercados

  • Mercado de intercambio de USD OIS
  • Mercado de intercambio de EUR OIS
  • Mercado de intercambio de EURUSD XCCY
  • Mercado de divisas

Del mercado de intercambio de USD OIS puedo derivar un conjunto de factores de descuento (dejando de lado cómo lograrlo). Lo mismo es cierto para el mercado de intercambio de EUR. Sin embargo, dada la naturaleza del mercado de intercambio de XCCY, necesito ajustar la EUR:EUR-CSA resultante para obtener un EUR:USD-CSA. En pocas palabras, ajusto la EUR:EUR-CSA para volver a cotizar el mercado de intercambio de EURUSD XCCY.

  1. Pregunta: Observo un conjunto de intercambios de EURUSD XCCY, uno para cada período. ¿Está matemáticamente garantizado que puedo encontrar exactamente una curva de descuento, EUR:USD-CSA, que coincida con todos los intercambios de EURUSD XCCY? ¿Podemos probar esto matemáticamente?

$n$ caso de mercado

Supongamos que lo anterior se resuelve, puedo repetir este procedimiento para otras divisas. Esto asume que USD OIS es mi curva de CSA de referencia en todos los mercados. Eso lleva por ejemplo a GBP:USD-CSA y EUR:USD-CSA. Ahora, si queremos ver curvas de Multi-CSA consistentes, por ejemplo EUR:USD+EUR+GBP-CSA, USD:USD+EUR+GBP-CSA etc. ¿Cómo se logra esto? Aquí es incluso menos claro si el problema anterior se ejecuta paso a paso, por ejemplo, de EUR:USD-CSA a EUR:USD+EUR-CSA a EUR:USD+EUR+GBP-CSA o de una vez. Las preguntas que surgen inmediatamente son

  1. ¿Importa hacerlo paso a paso o de una vez, es decir, esto lleva al mismo resultado? ¿Podemos demostrar esto matemáticamente?
  2. ¿Estamos garantizados de encontrar una solución única a este problema? ¿Podemos probar esto matemáticamente?

¡Se agradecen algunas ideas de personas más familiarizadas en la construcción de estas curvas / estudio de ellas desde un punto de vista teórico!

EDICIÓN

Pregunta adicional: Si no me equivoco, el objetivo del ejercicio (usando intercambios XCCY) es construir curvas de descuento relevantes y, por lo tanto, curvas forward de divisas a largo plazo. Sin embargo, del libro y en Bloomberg veo que los productos estándar son MTM XCCY swaps. Entonces me pregunto qué forward de divisas adecuado usar para un swap XCCY a muy largo plazo, por ejemplo, en un swap XCCY de 30 años podemos usar los forwards de divisas que observamos en el mercado hasta un período de, por ejemplo, 2 años. Pero ¿qué forward de divisas en la fijación se usa, por ejemplo, la de 20 años?

4voto

dotnetcoder Puntos 1262

Caso de dos mercados

  1. Depende de cómo parametrices tu curva CSA EUR:USD. Si los grados de libertad están ubicados apropiadamente dependiendo de los valores (tenores) necesarios, entonces siempre habrá una solución única.

La prueba más similar que puedo ofrecer al respecto es el Teorema de Schoenberg-Whitney, que dice lo mismo sobre la resolución de los coeficientes de las curvas spline. Aunque diseñado para la interpolación spline, el principio de resolución de curvas, creo, se refleja (ver la Guía Práctica de Splines de De Boor para una Prueba).

Observa que dos curvas pueden tener exactamente los mismos parámetros (que reprician los instrumentos XCS), pero si tienen hiperparámetros diferentes (por ejemplo, interpolación) entonces no reflejan la misma curva. Pero todavía es cierto decir que un conjunto de parámetros (dado los hiperparámetros elegidos) tendrá una solución única.

Otros dos posts que discuten curvas sobrespecificadas, insuficientemente especificadas y exactamente especificadas como referencia están aquí.

https://quant.stackexchange.com/a/79465/29443

https://quant.stackexchange.com/a/80409/29443

Caso de n mercados

Una curva multi-csa es una construcción compuesta de otras curvas. Para construir una curva CSA EUR:USD+EUR+GBP necesitas las siguientes curvas disponibles:

  • EUR:USD (creada a través de EURUSD XCS)
  • EUR:EUR (creada con tasas locales de OIS)
  • EUR:GBP (podría crearse con EURGBP XCS pero típicamente se infiere a partir de tasas de Forwards de FX constantes, una vez que se haya construido la curva GBP:USD a partir de XCS de GBPUSD)

Todas las curvas anteriores se reducen al caso de dos mercados. Una vez que estas curvas están disponibles, la curva multi-csa se determina a partir de un bucle sucesivo. Para cualquier tasa overnight dada en la curva multi-csa, esa tasa se elige como la tasa más alta en cualquiera de las tres curvas mencionadas anteriormente. Por ejemplo, supongamos que cada una de las curvas se extiende para cubrir cuatro días y las tasas overnight en cada curva (expresadas en una convención de conteo de días consistente, por ejemplo ACT365F) son:

  • [1.0% 1.1% 1.2% 1.3%]
  • [1.2% 1.2% 1.2% 1.2%]
  • [1.3% 1.1% 0.9% 0.7%]

Entonces, la curva multi-CSA tiene las siguientes 4 tasas. No hay una manera inteligente de calcular esto que no sea a través de un bucle y comparando todo.

  • [1.3% 1.2% 1.2% 1.3%]

Esta curva se llama intrínseca porque valorar cualquier activo/pasivo derivado con ella ignora la optionality de cualquiera de las monedas de colateral volviéndose la más barata con el tiempo.

Otros dos enlaces a los que puedo apuntar son:

https://rateslib.readthedocs.io/en/1.5.x/z_dependencychain.html

https://www.linkedin.com/pulse/pricing-trading-irds-difficult-examples-133-hamish-darbyshire/

El último muestra cómo construir Curvas Multimoneda en rateslib y reproducir resultados del libro. Disculpas si la sintaxis podría haber cambiado en diferentes versiones de rateslib.

Resolviendo Curvas

Toda la información para un mercado de Forwards FX de 2 monedas está definida a partir de una tasa FX y 3 curvas.

from rateslib import *  # Python 3.12, rateslib 1.5.0

fxf = FXForwards(
    fx_curves={
        "eureur": Curve({dt(2024, 10, 15): 1.0, dt(2054, 10, 15): 0.4}),
        "usdusd": Curve({dt(2024, 10, 15): 1.0, dt(2054, 10, 15): 0.3}),
        "eurusd": Curve({dt(2024, 10, 15): 1.0, dt(2054, 10, 15): 0.42}),
    },
    fx_rates=FXRates({"eurusd": 1.10}, settlement=dt(2024, 10, 17))
)

Este objeto contiene toda la información para cotizar cualquier derivado basado en RFR, incluyendo swaps, swaps de monedas cruzadas, FX-swaps, Forwards de FX, a través de, factores de descuento, tasas y tasas de FX forward.

>>> fxf.rate("eurusd", dt(2034, 10, 15))

Con matemáticas bastante simples también derivará otros objetos. Observa que no tienes una curva CSA USD:EUR. Pero los valores de dicha dependen solo de los valores mencionados anteriormente:

>>> type(fxf.curve("usd", "usd"))
rateslib.curves.curves.Curve
>>> type(fxf.curve("usd", "eur"))
rateslib.curves.curves.ProxyCurve

La información para cualquier curva multi-csa también está disponible a partir de lo anterior:

>>> type(fxf.curve("usd", ["eur", "usd"]))
rateslib.curves.curves.MultiCsaCurve

Dado que este objeto puede cotizar cualquier cosa, también puede ser calibrado por esos instrumentos.

La tasa de FX mencionada anteriormente el 15 de octubre de 2034 fue 1.230, supongamos que el precio de mercado resulta ser 1.250, tu solver iteraría las curvas para obtener un valor más cercano.

Un instrumento mucho más realista es un MTM-XCS. Estas curvas actualmente cotizan un XCS de 10 años a -16 pbs

>>> xcs = XCS(dt(2024, 10, 15), "10y", spec="eurusd_xcs")
>>> xcs.rate(curves=[fxf.curve("eur", "eur"), fxf.curve("eur", "usd"), fxf.curve("usd", "usd"), fxf.curve("usd", "usd")], fx=fxf)

Si el precio de mercado es -20 pbs nuevamente, simplemente ajustas las curvas en un solver hasta obtener los valores correctos, a través de todos tus instrumentos.

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