Кокс-Ингерсолл-Росс (CIR)

Модель Кокса-Ингерсолла-Росса (CIR) можно использовать при оценке производных процентных ставок. Мы также называем моделью квадратного корня или однофакторной процентной ставкой, потому что термин диффузии позволяет избежать возможности отрицательных процентных ставок и изображается одним источником рыночного риска.

Параметр a соответствует скорости адаптации к среднему значению, b, и сигма к волатильности. Движения ставок следуют приведенному ниже SDE:

Модель CIR очень чувствительна к параметрам. Если модель используется для прогнозирования процентных ставок в течение периода времени, в котором волатильность выходит за рамки параметров, выбранных исследователем, CIR ограничена по своему охвату и надежности.

2 режима переключения состояний

Мы включили идею цепи Маркова, как если бы мы наблюдали более чем один тип движения ставок. Например, может быть нормальное состояние, когда ставки низкие и менее волатильные, и может быть другое состояние, вызванное экономической или сезонной активностью. Эти состояния менялись время от времени, как будто они сосуществовали. Чтобы выразить эту динамику, мы можем смоделировать ее с помощью матрицы перехода.

Таким образом, для матрицы перехода с двумя состояниями (состояние A и состояние B) вероятность получения процентной ставки от B при условии, что текущая процентная ставка, если от A равна a. Обратите внимание, что предельное распределение этой цепи Маркова показано ниже

Вот симуляция за 10 лет, чтобы показать, как модель CIR с двумя состояниями переключается между стадиями до и после коронавируса, а не просто за счет увеличения волатильности одной модели CIR.

r0     = 0.15
P = [[0.95, 0.05],
     [0.15, 0.85]]
# P(X = b| X = a) = 0.95
a     = [0.5, 0.2] # reversion speed
b     = [0.2, 3.0] # long term rate
sigma = [0.1, 0.3] # volatility of 2 state CIR

Калибровка модели

Мы будем калибровать модель CIR, используя OLS.

Цена облигации

Основываясь на смоделированной процентной ставке с использованием CIR, мы могли бы получить цены облигаций с разным сроком погашения для каждого пути.

Ниже приведен пример. Сначала мы выбираем первый путь из смоделированного CIR, а затем строим график эволюции цен облигаций с разными сроками погашения в первые несколько дней.

t = 0
rates = cir1[sim_i]
T = [1/12, 3/12, 6/12, 1, 2, 3, 5, 6, 8, 10, 15, 20, 25, 30]
res = np.array(BondCurve(rates, t, T, a[0], b[0], sigma[0]))
curve = np.log(1/res)/T