Масштаб и значимость рынка процентных производных инструментов

Рынок процентных производных инструментов представляет собой крупнейший сегмент мирового финансового рынка. В основе корректной оценки практически любого финансового инструмента, от простых облигаций до сложных структурных продуктов, лежит дисконтная кривая. Она представляет собой фундаментальную рыночную конструкцию, определяющую временну́ю стоимость денег и позволяющую корректно оценивать денежные потоки.

Цель и структура статьи

Настоящая статья посвящена детальному разбору алгоритма калибровки дисконтных кривых. В качестве наглядного примера рассмотрено построение дисконтной кривой на основе рыночных котировок процентных свопов, привязанных к индикатору RUONIA (Ruble OverNight Index Average) — ключевому безрисковому бенчмарку российского денежного рынка.

Ключевые составляющие

  1. Детальная спецификация калибровочных инструментов. От составляющих спецификации — таких как частота платежей, календарные конвенции и базовый процентный индикатор — напрямую зависит структура и размер будущих денежных потоков. Это является абсолютной основой для корректной оценки стоимости инструмента.

  2. Четкое понимание алгоритма бутстрапа. Бутстрап — это итеративный алгоритм, позволяющий построить дисконтную кривую на основе рыночных котировок. Дисконт-фактор, найденный из предыдущего инструмента, используется в качестве входного параметра для калибровки следующего по сроку инструмента.

  3. Оперирование ставками непрерывного начисления.

    1. Математическое удобство. Формулы дисконтирования и наращения достигают максимальной элегантности: DF(t) = e^{-r \cdot t}; FV(t) = e^{r \cdot t}.

    2. Универсальность. После калибровки кривой непрерывных ставок ее можно легко и однозначно конвертировать в ставку с любой другой конвенцией начисления (годовой, полугодовой, квартальной).

Важный инстайт: фундаментальной основой для построения любой кривой доходности являются не абстрактные ставки, а рыночные цены конкретных финансовых инструментов. В своей исходной форме этими инструментами выступают бескупонные (дисконтные) облигации, чья текущая рыночная цена напрямую определяет дисконтный фактор для соответствующего срока. Дисконтный фактор — это и есть та первичная математическая величина, которая показывает сегодняшнюю стоимость единицы будущего денежного потока.

Представление этой стоимости в виде процентной ставки (годовой, полугодовой, непрерывной и т.д.) — это уже следующий шаг, удобная и широко принятая конвенция, производная от базовых цен. Различные формы ставок (простая, сложная, ACT/ACT, 30/360) — это просто разные "языки" для описания одного и того же явления: соотношения между текущей ценой и будущим платежом.

Далее в статье рассмотрен пример, где цена инструмента (свопа) представлена в виде простой процентной ставки.

Практический пример: Построение кривой по свопам на RUONIA

Рассмотрим процесс калибровки кривой для сроков от 1 недели до 5 лет на основе рыночных котирок процентных свопов, где плавающая нога привязана к индикатору RUONIA.

Определим ключевые условия спецификации IRS (interest Rate Swap).

  • Все свопы предполагают ежегодные платежи по фиксированной ноге. То есть, для свопов со сроком менее года (от 1W до 1Y) происходит всего один фиксированный платеж в дату экспирации. Для свопов на срок более 1 года платежи происходят раз в год.

  • Плавающая нога свопа привязана к индикатору RUONIA, который может рассматриватсья в качестве аналога безрисковой ставки, несущей в себе минимум кредитного риска.

  • Своп заключается на Compound ON ставку. Это означает, что фиксированная ставка, которую мы видим в котировке, является прямой альтернативой той доходности, которую инвестор получил бы от ежедневной капитализации (компаудинга) по индикатору RUONIA в течение всего срока действия свопа.

    Данная конвенция является наиболее эталонной для калибровки дисконтной кривой, поскольку несет в себе информацию о вмененной (path-dependent) структуре процетных ставок.

Этап 1: Калибровка короткого конца кривой (сроки ≤ 1 год)

Для инструментов с одним платежом расчёт дисконтного фактора (DF) прямолинеен. Ставка по свопу для этих сроков по сути является спотовой ставкой для соответствующей даты, так как поток единственный.

Пример для 3-месячного и 1-летнего свопа:

FV_{3M} = 1 + 0.1560 \cdot \frac{93}{365} = 1.0397FV_{1Y} = 1 + 0.1670 \cdot 1 = 1.1670

Чтобы найти дисконт-фактор:

DF_{3M}=\frac{1}{1.0397}=0.9618DF{1Y}=\frac{1}{1.1670}=0.8569

Чтобы найти непрерывную ставку:

R_{3M}=\frac{\ln(1.0397)}{\frac{93}{365}}=0.1528R_{1Y}=\ln(1.1670)=0.1544

Этап 2: Калибровка длинного конца кривой (сроки > 1 года)

Для свопов с несколькими платежами мы используем метод бутстрапа — последовательно обрабатываем ставки от коротких сроков к длинным.

Шаг 1: Строим платежи по 2-летнему свопу

  • В конце года 1: платеж 0.1580 (проценты)

  • В конце года 2: платеж 1.1580 (проценты + номинал)

Шаг 2: Строим уравнение денежных потоков
Стоимость всех будущих фиксированных платежей должна равняться сегодняшней стоимости плавающей ноги, что эквивалентно номиналу (1), в соответствии с принципом безарбитражности.

0.1580\cdot 0.8569+1.1580 \cdot DF_{2Y}​=1

Шаг 3: Находим неизвестный дисконт-фактор и зашитую в него ставку непрерывного начисления.

\frac{1}{e^{R\cdot 2}}=  \frac{1 - 0.1580 \cdot 0.8569}{1.1580};e^{-Rt}=0.7468; R_{2Y}=- \frac{\ln(0.7468)}{2}≈0.146

Проделав эту операцию для всех сроков, получаем уравнения с одной неизвестной, решая которые формируем временную структуру стоимости денежных средств.

Код на python
import pandas as pd
import numpy as np
from scipy.optimize import root_scalar
import time

def bootstrap_curve(market_data):   
    print("Калибровка началась...")
    start_time = time.perf_counter()
    
    # Подготовка данных
    days = market_data.index.values
    rates = market_data.values.flatten() / 100
    years = days / 365.0
    n = len(days)
    
    # Инициализация результатов
    df_values = np.zeros(n)
    
    # Векторизованный расчет для коротких сроков (≤1 год)
    short_mask = years <= 1
    df_values[short_mask] = 1 / (1 + rates[short_mask] * years[short_mask])
    
    # Бутстрап для длинных сроков
    for i in np.where(~short_mask)[0]:
        n_years = int(years[i])
        payment_days = np.arange(1, n_years + 1) * 365
        
        known_indices = np.searchsorted(days[:i+1], payment_days[:-1])
        
        pv_known = np.sum(rates[i] * df_values[known_indices])
        
        # Решаем уравнение для последнего DF
        target_pv = 1.0 - pv_known
        last_payment = rates[i] + 1.0
        df_values[i] = target_pv / last_payment
    
    # Непрерывные ставки
    continuous_rates = -np.log(df_values) / years * 100
    
    # Формирование результата
    result = pd.DataFrame({
        'Срок (дней)': days,
        'Срок (лет)': years,
        'Котировка (%)': rates * 100,
        'Дисконт-фактор (DF)': df_values,
        'Непрерывная ставка (%)': continuous_rates
    })
    
    elapsed_time = time.perf_counter() - start_time
    print(f"Калибровка завершена за {elapsed_time*1000:.2f} мс")
    
    return result


# Исходные данные
market_data = pd.DataFrame(
    [15.00, 15.04, 15.10, 15.30, 15.60, 16.10, 16.70, 15.80, 15.40, 15.30, 15.10],
    index=[7, 14, 31, 62, 93, 184, 365, 730, 1095, 1460, 1825]
)

# Калибровка
result = bootstrap_curve(market_data)
display(result)

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

Графическое представление

Кривая форвардных процентных ставок

Представленная выше калибровка дисконтной кривой дает опорные ставки и соответствующие им дисконт-факторы (DF) для стандартных сроков, которые являются индикторами средней стоимости денег на интервале от сегодняшнего дня до срока T.

Однако для многих практических финансовых задач, таких как:

  • Моделирования будущих траекторий процентных ставок;

  • Оценки стоимости опционов, расчета чувствительности (Greeks) сложных инструментов;

  • Обеспечения безарбитражности в стохастических моделях.

Необходимо понимать, как ставка ведет себя на каждом промежутке между этими ключевыми датами. Важна внутренняя временная структура, форвардные (forward) ставки.

Заключение

Желающим глубже ознакомиться с алгоритмами калибровки дисконтных кривых и методом бутстрапа рекомендуется обратиться к классическим источникам:

John C. Hull. "Options, Futures and Other Derivatives"

  • Глава 4: "Interest Rates" — детально разбираются основы процентных ставок, различные конвенции начисления процентов и методы измерения доходностей, в том числе метод bootstrap.

  • Глава 7: "Swaps" — подробно рассматривается устройство и оценка процентных свопов, которые являются ключевыми инструментами для калибровки длинного конца кривой.