1 votos

¿Cómo se fija el precio de un ZCB utilizando el modelo CIR (Cox-Ingersoll-Ross)?

Consulte los códigos siguientes

Mi pregunta es sobre los parámetros de entrada (a, b y sigma) y su cálculo.

Para la media "b" a largo plazo, ¿utilizamos los tipos efectivos de los fondos federales o los T-bills a 3 millones?

Además, ¿cómo puedo calcular la velocidad de reversión media "a"?

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

import timeit

start = timeit.default_timer()

def inst_to_ann(r):
    return np.expm1(r)

def ann_to_inst(r):
    return np.log1p(r)

def cir(n_years = 1, n_scenarios=1, a=0.05, b=0.03, sigma=0.05, steps_per_year=52, r_0=None):

    if r_0 is None: r_0 = b
    r_0 = ann_to_inst(r_0)
    dt = 1/ steps_per_year
    num_steps = int(n_years * steps_per_year) + 1  # because n_years might be a float

    I = np.random.normal(0, scale=np.sqrt(dt), size=(num_steps, n_scenarios))
    rates = np.empty_like(I)
    rates[0] = r_0

    ## For Price Generation
    h = math.sqrt(a ** 2 + 2 * sigma ** 2)
    prices = np.empty_like(I)

    def price(ttm, r):
        _A = ((2 * h * math.exp((h + a) * ttm / 2)) / (2 * h + (h + a) * (math.exp(h * ttm) - 1))) ** (
                    2 * a * b / sigma ** 2)
        _B = (2 * (math.exp(h * ttm) - 1)) / (2 * h + (h + a) * (math.exp(h * ttm) - 1))
        _P = _A * np.exp(-_B * r)
        return _P

    prices[0] = price(n_years, r_0)

    for step in range(1, num_steps):
        r_t = rates[step - 1]
        d_r_t = a * (b - r_t) * dt + sigma * np.sqrt(r_t) * I[step]
        rates[step] = abs(r_t + d_r_t)
        # generate prices at time t as well ...
        prices[step] = price(n_years - step * dt, rates[step])

    rates = pd.DataFrame(data=inst_to_ann(rates), index=range(num_steps))
    ### for prices
    prices = pd.DataFrame(data=prices, index=range(num_steps))

    return rates, prices

dfrates,dfprices = cir(n_scenarios=1000)
dfprices.plot()
plt.show()

print(dfprices)

stop = timeit.default_timer()
print('Time: ', stop - start)

1voto

oliversm Puntos 515

Simulación de Monte Carlo para fijar el precio de un bono de cupón cero

Para evaluar el valor $V_t$ de un bono de cupón cero $B_{T, t}$ emitido hoy a la hora $t$ con vencimiento en el tiempo $T$ puede hacerlo mediante la fórmula $$ V_t = \mathbb{E}\left(\exp\left(-\int_t^T r_s \mathrm{d}s\right)\underbrace{B_{T, T}}_{=1}\right). $$ Ahora bien, si se utiliza el modelo CIR lo bueno es que la distribución de $r_T$ dado $r_t$ es conocido (es un $\chi^2$ ), por lo que se puede utilizar la relación $$ r_T = r_s + \int_t^T r_s \mathrm{d}s, $$ y reordenar esto para conocer la distribución de $\int_t^T r_s \mathrm{d}s$ .

No utilice el esquema de Euler-Maruyama si conoce la distribución exacta

Como sabemos la distribución exacta de $\int_t^T r_s \mathrm{d}s$ En este caso, no es necesario utilizar el esquema de Euler-Maruyama para aproximar una muestra, ya que se puede extraer una muestra exacta. Esto hace que el uso de Monte Carlo para calcular la expectativa sea mucho más fácil (aunque el $\chi^2$ no es barato!), y por lo tanto el precio de un bono de cupón cero es fácil.

Calibración del modelo

Usted pregunta cómo encontrar los valores de $a$ y para qué utilizarlo $b$ . La mejor manera de hacerlo es calibrar el modelo, lo cual es una cuestión más complicada, que dejaré que otras respuestas aborden.

0voto

ascobol Puntos 2324

Para la media "b" a largo plazo, ¿utilizamos los tipos efectivos de los fondos federales o los T-bills a 3 millones?

No lo creo. Para este modelo de tasa corta en particular, usted tiene que proporcionar 3 parámetros de entrada, a saber: $a$ , $b$ y $\sigma$ (utilizando su notación).

Creo que $a$ y $b$ se obtienen ajustando la estructura de plazos actual de los bonos cupón cero $P^M(0,T)$ presente en el mercado y $\sigma$ proviene de los precios de los swaptions.

Por ejemplo, el modelo de tasa corta gaussiana (GSR) tiene una expresión analítica para $b(t)$ que depende de las derivadas de $P^M(0,T)$ por medio de la tasa instantánea de avance $f(0, T)$ y su derivado. En cambio, el modelo CIR no tiene ese resultado analítico.

Construyendo $P(0, T)$ y $f(0, T)$ es todo un tema en sí mismo (comúnmente denominado bootstrapping de la curva de rendimiento). Si lo desea, puedo ampliar esta información.

Espero que te sirva de ayuda. Gracias.

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