1 votos

Valoración de swap de divisas en QuantLib

¿Soporta QuantLib la valoración de permutas cruzadas de divisas? Por ejemplo, permuta cruzada SOFR / SONIA.

2voto

dotnetcoder Puntos 1262

Yo comercio IRSs y XCSs, por lo que esta respuesta se basa en mis propios procesos y requisitos, como tal he escrito rateslib en Python, el cual no tiene ninguno de los procesos estocásticos de quantlib, pero se centra en las métricas delta y gamma de los derivados lineales de tipo de cambio multimoneda.

Para establecer un marco de precios y riesgos para derivados multimoneda necesitamos Curvas, FXRates, Instruments y un intercambio o cartera para valorar.

Crea primero las Curvas. 3 líneas para las curvas de descuento de monedas cruzadas USD, GBP y GBPUSD. Sus factores de descuento pronto serán calibrados.

from rateslib import *

gbp = Curve({dt(2023, 8, 2): 1.0, dt(2024, 8, 2): 1.0}, id="sonia", calendar="ldn")
usd = Curve({dt(2023, 8, 2): 1.0, dt(2024, 8, 2): 1.0}, id="sofr", calendar="nyc")
gbpusd = Curve(
    nodes={dt(2023, 8, 2): 1.0, dt(2024, 2, 2): 1.0, dt(2024, 8, 2): 1.0},
    id="gbpusd",
)

Ahora crearemos los FXRates y los asociaremos con Curvas para definir un espacio de FXForwards coherente con garantías.

fxr = FXRates({"gbpusd": 1.25}, settlement=dt(2023, 8, 4))
fxf = FXForwards(
    fx_rates=fxr,
    fx_curves={
        "usdusd": usd,
        "gbpgbp": gbp,
        "gbpusd": gbpusd,
    }
)

Ahora resolveremos todo en relación con los datos del mercado y calibrando los Instruments

solver = Solver(
    curves=[gbp, usd, gbpusd],
    instruments=[
        IRS(dt(2023, 8, 2), "1y", spec="gbp_irs", curves="sonia"),
        IRS(dt(2023, 8, 2), "1y", spec="usd_irs", curves="sofr"),
        XCS(dt(2023, 8, 2), "6m", spec="gbpusd_xcs", curves=["sonia", "gbpusd", "sofr", "sofr"]),
        XCS(dt(2023, 8, 2), "1y", spec="gbpusd_xcs", curves=["sonia", "gbpusd", "sofr", "sofr"]),
    ],
    s=[4.75, 5.35, -6, -14],
    fx=fxf,
    instrument_labels=["1y gbp", "1y usd", "6m gbpusd", "1y gbpusd"],
    id="solver",
)
ÉXITO: `func_tol` alcanzado después de 3 iteraciones (levenberg_marquardt)

Nota que estos instrumentos tienen sus parámetros preconfigurados por una entrada de especificación de mercado (spec).

Con este Solver y conjunto de Curvas calibradas, ahora se pueden hacer muchas cosas. Algunas de ellas involucran la construcción de un swap de moneda cruzada existente y luego valorarlo y gestionar su riesgo.

Aquí crearé un MTM-XCS histórico y le adjuntaré ajustes que contengan datos de fijación válidos hasta la última RFR para la fecha de valor de referencia 1 de agosto de 2023.

my_xcs=XCS(
    dt(2023, 5, 16), "1Y", spec="gbpusd_xcs",
    fx_fixings=[1.25],  
    float_spread=-2.5,
    notional=100e6, #GBP
    curves=["sonia", "gbpusd", "sofr", "sofr"],
    fixings=defaults.fixings.sonia,
    leg2_fixings=defaults.fixings.sofr
)

Podemos valorar y gestionar el riesgo de este swap:

my_xcs.npv(solver=solver, local=True)
{"usd": 126,378,590.04,
 "gbp": -101,071,269.19}
my_xcs.npv(solver=solver, base="gbp")
35,487.48
my_xcs.delta(solver=solver)

enter image description here

También se pueden ver los flujos de efectivo, incluidos todos los intercambios MTM:

my_xcs.cashflows(solver=solver)

enter image description here

0voto

Brad Tutterow Puntos 5628

En este momento no hay un instrumento de divisas cruzadas como tal (podría llevar un tiempo) pero es posible construir sus flujos de efectivo y calcular su valor. Hay un artículo disponible en https://www.implementingquantlib.com/2023/09/cross-currency-swaps.html.

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