Концепция Multi-Curve Framework возникла после финансового кризиса 2008 года, когда стало очевидно, что единая кривая доходности (например, на основе ставок LIBOR) больше не может адекватно отражать как безрисковую ставку, так и кредитные и ликвидные риски. 

Спред LIBOR к безрисковой кривой SOFR OIS
Спред LIBOR к безрисковой кривой SOFR OIS

Ключевая идея:

  • Разделение кривых: Вместо одной кривой используются отдельные кривые для дисконтирования и для прогнозирования (форвардных) ставок.

  • Кривая дисконтирования (Discounting Curve): Обычно строится на основе ставок свопов на ON безрисковые индикаторы (RUONIA, RUSFAR, SOFR), которые считаются наилучшим приближением к безрисковой ставке из-за их обеспеченного и залогового характера (collateralized nature).

  • Кривые прогнозирования (Forward/Projection Curve): Строятся для разных теноров, и используются для прогнозирования будущих денежных потоков деривативов, чувствительных к этим ставкам. 


Постановка задачи и интерпретация условий

Клиент хочет заключить трёхлетний FX-FL кросс-валютный своп (CIRS) с Банком на следующих условиях:

  • Номинал: 1 млрд CNY.

  • Leg1 (обязательства Банка): Банк выплачивает ежеквартально плавающую ставку, привязанную к средней арифметической ключевой ставке ЦБ РФ (KEY RATE).

  • Leg2 (поступления Банка): Банк получает ежегодно фиксированную ставку в CNY.

  • Спот-курс: \frac{cny}{rub} = 11.23.

Исходные данные: Рыночные котировки свопов (IRS KEYRATE, OIS RUONIA, RUSFARCNY) для построения необходимых кривых.

Котировки свопов локального российского рынка СПФИ
Котировки свопов локального российского рынка СПФИ

Задача: Найти рыночную (справедливую) фиксированную ставку по CNY, которую должен получать Банк, чтобы стоимость свопа на дату заключения была равна нулю.

Методология и подготовка данных

Для корректной оценки свопа требуется построить рыночные кривые и реализовать алгоритм расчёта приведённой стоимости. Работа выполняется в три ключевых этапа:

Этап 1: Построение рыночных кривых методом бутстрапа

  • Для рублёвой ноги (Leg1):

    • Дисконтная кривая (OIS RUONIA): Строится на основе котировок OIS RUONIA. Эта кривая используется для дисконтирования всех рублёвых денежных потоков к текущей дате.

    • Кривая прогнозирования (KEY RATE): Строится на основе котировок IRS KEYRATE. Из этой кривой извлекаются квартальные форвардные ставки, необходимые для прогноза платежей по плавающей ноге.

  • Для юаневой ноги (Leg2):

    • Дисконтная кривая (CNY OIS): Строится на основе котировок OIS RUSFARCNY. Эта кривая используется для дисконтирования юаневых потоков для фикс ноги.

Этап 2: Аналитический вывод рабочих формул (теория)

  1. Формула для \mathrm{PV}_{\mathrm{Leg1}}: Приведённая стоимость плавающей ноги с выплатами по KEY RATE.

  2. Формула для \mathrm{PV}_{\mathrm{Leg2}}: Приведённая стоимость фиксированной ноги с начислением процентной ставки на номинал в юанях.

  3. Уравнение для нахождения паритетной ставки P (и спреда s): Алгебраическое выражение, связывающее все параметры.

Этап 3: Практическая реализация и расчёт (программирование)

Для наглядности и верификации теории были запрограммированы аналитические формулы., что позволило:

  1. Визуализировать структуру ног: Наглядно представить все денежные потоки (даты, ставки, суммы) по обеим ногам свопа.

  2. "Прощупать" формулы на практике: Последовательно рассчитать PV каждой ноги по отдельности, используя построенные кривые и заданные параметры.

  3. Автоматизировать поиск решения: Найти значение ставки P (или спреда s), при котором выполняется условие паритета.

Особенности расчета: Поскольку в условии не уточнено, требуется ли найти чистую ставку или спред к некой базовой ставки, для наглядности выберем двухэтапный расчёт:

  • Шаг А: Рассчитаем PV обязательств Банка по рублёвой ноге PV_{Leg1}.

  • Шаг Б: Зададимся около рыночной фиксированной ставкой по CNY ( например 7%) и рассчитаем PV фиксированной ноги с этой ставкой.

  • Шаг В: Если PV ног не равны, вычислим спред s, который необходимо добавить (или вычесть) из базовой ставки для достижения паритета. Результирующая рыночная ставка будет равна P=P_{base}​+s.


Bootstrap процентных кривых

На рынке мы наблюдаем множество сырых данных — котировок инструментов (таких как OIS и IRS) с разными сроками погашения. Эти котировки сами по себе не являются готовыми кривыми доходности. Они представляют собой цены сложных ПФИ, из которых необходимо извлечь фундаментальные сущности необходимые для дальнейшего прайсинга: дисконт-факторы и форвардные ставки (ставки прогнозирования).

Именно для этой цели и применяется процесс бутстрепа (bootstrapping) — пошаговое, рекурсивное извлечение этих сущностей, начиная с самых коротких сроков.

Ключевой нюанс: Учет конвенций инструментов критически важен. Именно они определяют точную временную структуру и величину будущих денежных потоков, что напрямую влияет на корректность всего процесса бутстрепа и последующей оценки.

Математический аппарат для бутстрепа

Базовой формулой для расчета форвардной ставки L(T_{m-1},T_{m}) для кривой прогнозирования на период от (T_{m-1}) до (T_{m}), извлекаемой из котировок инструментов является следующая: 

L(T_{m-1}, T_m) = \frac{ \displaystyle \left( \sum_{i=1}^{n} \Delta_i D_i \right) - \sum_{j=1}^{m-1} \delta_j L(T_{j-1}, T_j) D_j }{ \delta_m D_m }

Где:

  • L(T_{m-1},T_{m}) — искомая форвардная ставка на последний период.

  • \sum_{i=1}^{n} \Delta_i D_iдисконтированная стоимость фиксированной ноги свопа.

  • S — рыночная котировка свопа (фиксированная ставка).

  • (\Delta {i}), (\delta {j})длительности периодов (с учетом конвенций счета дней).

  • (D{i}), (D{j}), (D_{m}) — дисконт-факторы (DF), соответствующие датам платежей.

  • \sum_{j=1}^{m-1} \delta_j L(T_{j-1}, T_j) D_j— дисконтированная стоимость уже известных (ранее бутстрепленных) форвардных ставок плавающей ноги. 

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

Формула упрощается, и последний дисконт-фактор DF_{m} (для самого длинного срока T_{m})на текущем шаге) находится следующим образом: 

DF_{m} = \frac{DF_{0} - \sum\limits_{i=1}^{m-1} \mathrm{PV}_{\mathrm{Fixed},i}}{1 + S \cdot \Delta T_{m}}

Где: 

  • DF_{0}— дисконт-фактор на текущую дату (равен 1).

  • \sum_{i=1}^{m-1} \mathrm{PV}_{\mathrm{Fixed},i} — сумма п, уже известных платежей по фиксированной ноге.

  • S— рыночная котировка фиксированной ставки свопа.

  • \Delta T_{m} — длительность последнего периода.

Уточнения и ключевые практические аспекты бутстрепа

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

1. Особенность бутстрепа коротких сроков (OIS до 1 года)

  • Для OIS-свопов сроком до 1 года формула первых точек кривой сводится к классическому виду расчета дисконт-фактора для бескупонной облигации:
    DF_m = 1 / (1 + S * Δ_m), так как DF_0 = 1, а выплаты по фиксированной ноге отсутсвуют.

  • Только начиная с точки, соответствующей свопу сроком больше года (где появляется первый промежуточный фиксированный платеж), в числителе формулы появляется слагаемое 1 - ∑PV, отражающее сумму уже известных платежей.

2. Две формы представления кривых и их использование

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

  • Дисконтная кривая (OIS/RUSFAR): Конечный результат бутстрепа — это набор дисконт-факторов (DF) для ключевых дат. Они являются фундаментальной величиной для приведения любых будущих потоков к текущей стоимости. Для удобства интерпретации DF часто конвертируют в спот-ставки с непрерывным начислением. Это спот-кривая для дисконтирования.

  • Кривая прогнозирования (KEY RATE): В процессе ее калибровки мы напрямую находим последовательные форвардные ставки (FRA-подобные) для каждого периода плавающей ноги. Однако для практического использования (например, для прогнозирования платежей в свопе с нестандартными сроками или в структурном продукте) работать напрямую с набором отдельных форвардов неудобно.

  • Рекомендуемый подход: После бутстрепа кривую прогнозирования также следует преобразовать в спот-кривую ставок с непрерывным начислением. Из единой спот-кривой кривой прогнозирования можно чисто математически вычислить форвардную ставку для ЛЮБОГО будущего периода (например, 3M, 6M, 12M), что критически важно для оценки нестандартных инструментов.

Смотреть графики
Пример калибровки рублевой дисконтной кривой OIS и кривой прогнозирования в виде сравнения форвардных ставок.
Пример калибровки рублевой дисконтной кривой OIS и кривой прогнозирования в виде сравнения форвардных ставок.
Пример калибровки рублевой дисконтной кривой OIS и кривой прогнозирования в виде сравнения непрерывных спот-ставок.
Пример калибровки рублевой дисконтной кривой OIS и кривой прогнозирования в виде сравнения непрерывных спот-ставок.
Пример калибровки юаневой дисконтной кривой OIS в виде форвардных ставок.
Пример калибровки юаневой дисконтной кривой OIS в виде форвардных ставок.
Пример калибровки юаневой дисконтной кривой OIS в виде спот-ставок.
Пример калибровки юаневой дисконтной кривой OIS в виде спот-ставок.

Анализ формулы стоимости валютно-процентного свопа (CIRS)

Фундаментом ценообразования любого свопа, включая валютно-процентный (Cross-Currency Interest Rate Swap, CIRS), является принцип паритета приведенной стоимости.

PV_{leg1} = PV_{leg2}

Приведенная стоимость первой ноги

Формула для расчёта приведённой стоимости ноги CIRS, номинированной в рублях, с позиции банка, который выплачивает плавающие проценты по этой ноге:

\mathrm{PV}^{(1)} = N^{(1)} \times \left( DF_0^{(1)} - \sum_{i=1}^n \left( r_i^{(1)} \times DF_i^{(1)} \times \mathrm{YFC}_i^{(1)} \right) - DF_{\mathrm{final}}^{(1)} \right)
  • N_1 – Номинальная сумма свопа во валюте (RUB).

  • DF_0^{1}, DF_i^{1}, DF_{final}^{1}​ – дисконт-факт��ры по рублю на дату расчёта, на дату i-го процентного платежа и на дату окончания свопа соответственно.

  • r_{i}^{1} – плавающая (форвардная) ставка для i-го периода. Эта ставка определяется на дату расчёта с использованием кривой прогнозирования (в нашем случае на основе KEY RATE AVERAGE) и является ставкой, по которой банк будет производить выплаты.

  • YFC_i^{1}​ – длина (в годах) i-го процентного периода , рассчитанная согласно её финансовой базе (например, Act/365).

Интуитивное пояснение

Раскроем скобки и сгруппируем слагаемые, чтобы увидеть три отдельных денежных потока с позиции банка-плательщика:

\mathrm{PV}^{(1)} = \underbrace{+N^{(1)} \times DF_0^{(1)}}_{\text{(A)}} \;-\; \underbrace{N^{(1)} \times \sum_{i=1}^{n} \left( r_i^{(1)} \times DF_i^{(1)} \times \mathrm{YFC}_i^{(1)} \right)}_{\text{(B)}} \;-\; \underbrace{N^{(1)} \times DF_{\mathrm{final}}^{(1)}}_{\text{(C)}}

A. Начальный условный получение номинала (приток): N^{(1)} \times DF_0^{(1)}

Это слагаемое представляет собой условное привлечение рублёвого номинала банком в начале срока действия свопа. Экономически это похоже на то, что банк «получает» кредит в рублях, который он обязуется обслуживать.

Дисконт-фактор на текущую дату DF_0^{(1)} равен 1 (однако, как правило на практике условный обмен номиналами всегда происходит в даты T+1, T+2 и тд), для целей текущего расчета примем:N^{(1)} \times 1.

B. Плавающие процентные выплаты (отток): -N^{(1)} \times \displaystyle\sum_{i=1}^{n} \left( r_i^{(1)} \times DF_i^{(1)} \times \mathrm{YFC}_i^{(1)} \right)

Это приведённая стоимость всех будущих плавающих процентных выплат, которые совершит банк. Каждый платёж рассчитывается как: N^{(1)} \times r_i^{(1)} \times \mathrm{YFC}_i^{(1)} в рублях.

Ставка r_i^{(1)} — это форвардная ставка, прогнозируемая на период i.

Каждый будущий платёж банка дисконтируется к текущему моменту времени через DF_i^{(1)}.

Знак «минус» отражает отток средств.

C. Конечный условный возврат номинала (отток):-N^{(1)} \times DF_{\mathrm{final}}^{(1)} Это приведённая стоимость обязательства банка вернуть основной долг контрагенту в конце срока свопа. Это также отток средств.

Приведенная стоимость второй ноги

Условие паритета для свопа требует равенства приведённых стоимостей двух ног, выраженных в одной валюте. Поскольку Leg 1 (плавающая нога) в рублях (RUB), а Leg 2 (фиксированная нога) — в юанях (CNY), денежные потоки по валютной ноге приводятся к текущему моменту времени, а затем переводятся в рубли по спот-курсу S_{CNY/RUB} .

Введём удобное обозначение для рублёвого эквивалента номинала:

N^{2}=S_{CNY/RUB}×N_{curr}

Запишем уравнение паритета:

PV_{leg1} = S \cdot PV_{leg2}​

где:

  • PV_{Leg1} — приведённая стоимость рублёвой плавающей ноги (для банка это отток).

  • PV_{Leg2} ​ — приведённая стоимость фиксированной ноги в юанях.

Раскроем стоимость фиксированной ноги в её валюте через неизвестную ставку P:

\mathrm{PV}_{\mathrm{Leg2}}^{(2)} = N_{\mathrm{CNY}}^{(2)} \times \left( -DF_0^{(2)} + P \sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)} + DF_{\mathrm{final}}^{(2)} \right)

Подставим в уравнение паритета, используя N^{(2)} = S_{CNY/RUB} \times N_{curr}:

\mathrm{PV}_{\mathrm{Leg1}}^{(2)} = N^{(2)} \left( -DF_0^{(2)} + P \sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)} + DF_{\mathrm{final}}^{(2)} \right)

Перенесём все слагаемые, кроме члена с P, в левую часть:

N^{(2)} \cdot P \sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)} = \mathrm{PV}_{\mathrm{Leg1}}^{(2)} - N^{(2)} \left( -DF_0^{(2)} + DF_{\mathrm{final}}^{(2)} \right)

Окончательно выразим фиксированную ставку P:

P = \frac{\mathrm{PV}_{\mathrm{Leg1}}^{(2)} - N^{(2)} \left( -DF_0^{(2)} + DF_{\mathrm{final}}^{(2)} \right)}{N^{(2)} \displaystyle\sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)}}

Случай с фиксированной ногой в виде «базовая ставка + спред»

Если условия сделки предполагают, что фиксированная ставка задаётся как P=P_{base}​+s, где P_{base}​ — известная базовая ставка, а s — искомый спред, то уравнение паритета принимает вид:

\mathrm{PV}_{\mathrm{Leg1}}^{(2)} = N^{(2)} \left( -DF_0^{(2)} + (P_{\mathrm{base}} + \sigma) \sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)} + DF_{\mathrm{final}}^{(2)} \right)

Отсюда спред s выражается как:

s = \frac{\mathrm{PV}_{\mathrm{Leg1}}^{(2)} - N^{(2)} \left( -DF_0^{(2)} + P_{\mathrm{base}} \displaystyle\sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)} + DF_{\mathrm{final}}^{(2)} \right)}{N^{(2)} \displaystyle\sum_{i=1}^{m} DF_i^{(2)} \mathrm{YFC}_i^{(2)}}

Интерпретация: В числителе из приведённых затрат по плавающей ноге вычитается приведённая стоимость фиксированной ноги с уже учтённой базовой ставкой P_{base}, а спрэд s компенсирует оставшуюся разницу.

Такой подход является более универсальным.


Практическая реализация и расчёт на текущем кейсе

1. Расчёт стоимости плавающей рублёвой ноги (Leg1)

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

График платежей по плавающей ноге свопа Leg1
График платежей по плавающей ноге свопа Leg1

Результат расчёта:

 \mathrm{PV}^{(1)} = N^{(1)} \times \left( DF_0^{(1)} - \sum_{i=1}^n \left( r_i^{(1)} \times DF_i^{(1)} \times \mathrm{YFC}_i^{(1)} \right) - DF_{\mathrm{final}}^{(1)} \right) ≈ 4.425 mln

Интерпретация: Отрицательное значение означает, что приведённая стоимость будущих выплат Банка по этой ноге превышает рыночную стоимость фондирования. Однако величина, близкая к нулю (около 0.04% от номинала), закономерна и говорит о том, что кривая KEYRATE почти в точности отражает рыночную стоимость денег и является паритетной к дискнотной кривой.

2. Расчёт стоимости фиксированной юаневой ноги (Leg2)

Для целей расчета стоимости по первой ноге требуется попстроить ежегодные фиксированные поступления по заранее определенной ставке. В качестве базовой ставки P_{base}​примем ставку = 7%.

Результат расчёта:

{PV}_{\mathrm{Leg2}}^{\mathrm{CNY})} = N^{(\mathrm{CNY})} \times \left( -DF_0^{(\mathrm{CNY})} + P_{\mathrm{base}} \sum_{i=1}^{3} DF_i^{(\mathrm{CNY})} \times \mathrm{YFC}_i^{(\mathrm{CNY})} + DF_{\mathrm{final}}^{(\mathrm{CNY})} \right)
  1. Валидация модели через базовый сценарий: В качестве проверки логики был выполнен расчёт стоимости фиксированной ноги с произвольной ставкой, которая отличается от рыночной (7.00%). Как и ожидалось, полученное значение \mathrm{PV}_{\mathrm{Leg2}}оказалось существенно ниже, чем \mathrm{PV}_{\mathrm{Leg1}}(разница составила порядка -229 млн RUB). Этот результат подтверждает, что наша модель корректно реагирует на изменение входного параметра (ставки): ставка ниже справедливой ведёт к занижению приведенной стоимости \mathrm{PV}_{\mathrm{Leg2}}.

  2. Определение рыночной ставки и анализ спреда: Решение уравнения паритета дало значение спреда s ≈ 0.0078 (78 б.п.) к выбранной базовой ставке P_{base}, таким образом значение полной ставки начисления составло 7.78%. Можно обратить внимание, что полученная ставка является котировкой 3Y OIS RUSFARCNY (7.78%).

Итоговый результат

Заключительным шагом является учёт полученного ранее значения \mathrm{PV}_{\mathrm{Leg1}}. Стоимость обязательств Банка по плавающей рублёвой ноге (Leg1) составляет:

\mathrm{PV}_{\mathrm{Leg1}}^{(\mathrm{RUB})} \approx -4.425 \text{ млн RUB}.

Чтобы скомпенсировать этот относительный «недополучаемый» доход4.4 млн RUB, Банк должен получать повышенную фиксированную ставку по юаню. Подстановка этого конкретного (отрицательного) значения в уравнение паритета приводит к корректировке спреда. Итоговый расчёт даёт рост спреда на 2 б.п.:

Таким образом, справедливая фиксированная ставка валютно-процентного свопа равна:

P_{\mathrm{market}} = P_{\mathrm{base}} + s =7\% + 0.8\% = 7.80\%

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

Ссылка на код python: https://drive.google.com/drive/folders/1GzhjmfO9zjb-CkhOg6GKaSEcXa74tI6h