2 votos

FRN son más complejos de lo que pensamos

En la mayoría de los libros veo que Bonos de Tasa Flotante se negocian al precio de emisión (par). Sin embargo, nunca veo una prueba detallada de por qué esto es cierto. Cuando intento analizar las matemáticas, no encuentro este resultado.

Siento que también depende de muchas cosas. ¿Cuál es el cupón que estamos recibiendo con el Bono de Tasa Flotante y qué curva de descuento estamos usando?

Si el cupón y la curva de descuento son iguales, entonces el Bono de Tasa Flotante se negocia al precio de emisión y en este caso no hay riesgo de duración. El problema es que la mayoría de las veces el cupón y la curva de descuento no son iguales ¿cierto?

Por ejemplo, una nota flotante a 1 año que paga SOFR compuesto trimestralmente + spread no se negocia al precio de emisión. Digamos que uso la curva SOFR para descontar entonces:

Los cupones son: $N * \prod_{i=1}^{90}((1+SOFR_i / 360) -1 +s$ donde $N$ es el nominal.

Los factores de descuento son: $\prod_{i=1}^{n*90}((1+SOFR_i / 360)$ donde $n =1, 2, 3,4$

Por lo tanto, para cada flujo de efectivo obtenemos: $\frac{N}{\prod_{i=1}^{(n-1)*90}(1+SOFR_i / 360)} - \frac{N}{\prod_{i=1}^{n*90}(1+SOFR_i / 360)} + \frac{N*s}{\prod_{i=1}^{n*90}(1+SOFR_i / 360)}$

La suma es telescópica por lo que al final obtenemos:

$$N + \sum_{n=1,2,3,4} \frac{N*s}{\prod_{i=1}^{n*90}(1+SOFR_i / 360)}$$

Por lo tanto obtenemos un bono de tasa fija + el nominal.

En este caso, el riesgo de duración proviene únicamente del spread fijo que se suma al cupón. Esto se debe a que mi curva de descuento es la misma que la parte flotante de mi cupón.

Por lo tanto, mis observaciones son:

  • Un Bono de Tasa Flotante que paga una tasa flotante con spread cero y esta tasa flotante es la misma que la curva de descuento entonces el Bono de Tasa Flotante se negocia al precio de emisión y tiene un riesgo de duración cero.
  • Un Bono de Tasa Flotante que paga una tasa flotante con un spread distinto de cero y esta tasa flotante es la misma que la curva de descuento entonces el Bono de Tasa Flotante tiene un riesgo de duración que proviene solo del spread fijo.
  • Un Bono de Tasa Flotante que paga una tasa flotante que es diferente de la curva de descuento utilizada siempre tiene un riesgo de duración. Esta duración probablemente sea pequeña y depende del spread entre la curva de descuento y la tasa flotante que se obtiene.
  • Para un Bono de Tasa Flotante la curva de descuento que se debe usar es la curva OIS.

Mi pregunta:

¿Son correctas estas observaciones? ¿O estoy completamente equivocado?

Muchas gracias,

2voto

dotnetcoder Puntos 1262

Eres 90% correcto.

Voy a demostrar algunas de tus afirmaciones con una biblioteca numérica.

Primero necesitamos configurar un mercado. Construiré una curva SOFR y la calibraré a las tasas de swaps SOFR de 1 año, 2 años y 3 años.

# python==3.12, rateslib==1.4.0
desde rateslib importar *

curva = Curve(  # <- Definir una curva para calibrar los factores de descuento
    nodos={
        dt(2000, 1, 1): 1.0,
        dt(2001, 1, 1): 1.0,
        dt(2002, 1, 1): 1.0,
        dt(2003, 1, 10): 1.0,
    },
    id="curva",
)

solver = Solver(  # <- Resolver la curva a las tasas de swaps dadas
    curvas=[curva],
    instrumentos=[
        IRS(dt(2000, 1, 1), "1y", spec="usd_irs", curves="curva"),
        IRS(dt(2000, 1, 1), "2y", spec="usd_irs", curves="curva"),
        IRS(dt(2000, 1, 1), "3y", spec="usd_irs", curves="curva"),
    ],
    s=[3.5, 3.0, 2.75],
    id="nosotros"
)

Un FRN con spread cero, descontado en su índice pagado.

Sugieres que este instrumento debería valorarse al precio nominal y no tener sensibilidad al riesgo. Dado que sus flujos siempre se pronostican y se descuentan a la misma tasa, esto es lo que obtendrás...

frn = FloatRateNote(dt(2000, 1, 1), "2y", "A", nominal=-100e6, curves="curva")

frn.tasa(solver=solver)
# 100.0000000

frn.delta(solver=solver)

ingresar descripción de la imagen aquí

Un FRN con algún spread positivo pagadero

Ahora estás descontando flujos de efectivo más altos con la misma curva de descuento. El valor actual neto de los flujos de efectivo (es decir, el precio del bono) debería ser mayor.

El 1% descontado por 2 años vale aproximadamente 1.9% en el VAN.

frn_spd = FloatRateNote(
    dt(2000, 1, 1), "2y", "A", curves="curva", float_spread=100, nominal=-100e6
)

frn_spd.tasa(solver=solver)
# 101.934045

frn_spd.delta(solver=solver)

ingresar descripción de la imagen aquí

¿Esta cantidad es solo la delta de la anualidad fija asociada con el FRN?

Sí lo es. Puedes verificar esto creando y analizando solo el riesgo de una anualidad de 100 puntos básicos. No hay anualidad Instrumento en rateslib (o en muchas otras bibliotecas). Comúnmente simulo uno recibiendo y pagando un IRS a dos tasas diferentes para compensar las piernas flotantes.

pf = Portfolio([
    IRS(dt(2000, 1, 1), "2y", spec="usd_irs", curves="curva", nominal=-100e6, tasa_fija=1.0, forma_pago=0, calendario="todos"),
    IRS(dt(2000, 1, 1), "2y", spec="usd_irs", curves="curva", nominal=100e6, tasa_fija=0.0, forma_pago=0, calendario="todos")
])

pf.delta(solver=solver)  # <- el riesgo delta de los 100 puntos básicos de la anualidad

ingresar descripción de la imagen aquí

FRNs que pronostican y descuentan con curvas diferentes.

Sí, obtendrás otros pequeños efectos relacionados con la base/extensión.

¿Debería la curva de descuento ser siempre la curva OIS?

Absolutamente no. Muchos nombres de crédito emiten FRNs + spread al precio nominal. La razón de esto es debido al riesgo de crédito asociado con el bono. Si descuentas todos los FRNs en OIS, sobrevalorarás en gran medida esos FRNs riesgosos. Para valorar correctamente FRNs de crédito, debes descontar los flujos a una curva de crédito asociada con el emisor.

El FRN a +100 puntos básicos se mostró anteriormente con un precio de 101.934. Si descontamos los flujos en una curva de crédito de cada SOFR O/N + 100 obtenemos un precio que podría estar mejor asociado con el de este emisor hipotético (el hecho de que no sea exactamente 100 se debe a las diferencias en el método de desplazamiento y tipo de capitalización).

curva_credito = curva.desplazar(100)
frn.tasa(curvas=[curva, curva_credito])  # [curva de pronóstico, curva de descuento]
# 99.931956

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