Контекст
Текущее значение exposure отвечает только на вопрос о состоянии риска сегодня.
Для управления лимитом этого недостаточно. Сделки погашаются в разные даты, расчётная exposure меняется, а ограничение может закончиться раньше, чем исчезнет риск.
Поэтому полезно видеть не одно число, а профиль по тенорам:
сегодня → 1 месяц → 3 месяца → 6 месяцев → 1 год → дальше
В каждой точке нужно ответить как минимум на три вопроса:
- Какая exposure ожидается на выбранном горизонте?
- Какая часть лимита использована отдельной позицией и всеми участниками вместе?
- Не ограничивает ли доступность связанный CAP сильнее, чем сама exposure?
Эти вопросы похожи, но описывают разные величины. Если свести их в один показатель без расшифровки, график станет компактным, но потеряет объяснимость.
Что показывает профиль exposure
Тенор — это временная корзина, а не обязательно точная календарная дата.
Например, корзина 3M объединяет значения, относящиеся к горизонту около трёх месяцев. Конкретные правила отнесения к тенорам зависят от выбранной модели и должны быть зафиксированы отдельно.
Для каждого тенора t можно рассматривать:
limit(t) — лимит, действующий на горизонте t
exposure(t) — exposure отдельной позиции или основного участника
exposureᵢ(t) — exposure участника i
capValueⱼ(t) — доступность связанного ограничения j
Профиль не является обещанием точного будущего результата. Он показывает оценку в рамках используемой модели, входных данных и сценарных предположений.
Поэтому на графике важно указывать дату расчёта, валюту, методологию exposure и версию данных.
Утилизация одной exposure
Самый простой взгляд сравнивает одну exposure с соответствующим лимитом:
available(t) = limit(t) - exposure(t)
utilization(t) = exposure(t) / limit(t) × 100%
Если exposure равна 30, а лимит — 100, утилизация составляет 30%, а доступность — 70.
Этот показатель удобен для ответа на локальный вопрос: насколько конкретная позиция или основной участник использует собственный лимитный ресурс.
Но он ничего не говорит о других участниках, которые могут использовать тот же лимит.
Утилизация всех участников
Для структурного взгляда сначала агрегируется exposure участников:
structExposure(t) = Σ exposureᵢ(t)
structAvailable(t) = limit(t) - structExposure(t)
structUtilization(t) = structExposure(t) / limit(t) × 100%
Если отдельная exposure равна 30, а совокупная exposure участников — 55, локальная утилизация составит 30%, но структурная — уже 55%.
Разница показывает влияние остальных участников:
participantContribution(t) = structExposure(t) - exposure(t)
Перед суммированием нужна однозначная политика состава и дедупликации. Один и тот же участник не должен случайно попасть в агрегат несколько раз.
Также нельзя автоматически считать отсутствующее значение нулём, если отсутствие означает ошибку данных или неприменимость показателя.
Как CAP ограничивает доступность
CAP — не дополнительная exposure. Это ещё одно ограничение, которое может уменьшить фактически доступный ресурс.
В рассматриваемой синтетической модели итоговая доступность определяется самым жёстким ограничением:
totalAvailable(t) = min(
structAvailable(t),
capValue₁(t),
capValue₂(t),
...,
capValueₙ(t)
)
Эту же формулу можно кратко записать как:
min(listOf(capValue), structAvailable)
Если связанных CAP нет, итоговая доступность равна структурной:
totalAvailable(t) = structAvailable(t)
Важно не называть totalAvailable совокупной exposure. Минимум выбирается между значениями доступности, а не между фактическими рисковыми позициями.
Для единого графика можно дополнительно рассчитать эффективную долю ограничения:
effectiveRestriction(t) =
(limit(t) - totalAvailable(t)) / limit(t) × 100%
Этот показатель объединяет влияние exposure и CAP. Он полезен для визуализации, но не равен фактической утилизации exposure.
Синтетический пример
Рассмотрим условный лимит 100 единиц. Все числа вымышлены и нужны только для демонстрации механики.
| Тенор | Лимит | Одна exposure | Утилизация одной exposure | Exposure участников | Структурная доступность | Доступности CAP | Итоговая доступность | Ограничивающий фактор |
|---|---|---|---|---|---|---|---|---|
| Сегодня | 100 | 20 | 20% | 35 | 65 | 80, 75 | 65 | Участники |
| 1M | 100 | 25 | 25% | 45 | 55 | 60, 70 | 55 | Участники |
| 3M | 100 | 30 | 30% | 55 | 45 | 40, 50 | 40 | CAP |
| 6M | 100 | 35 | 35% | 70 | 30 | 25, 35 | 25 | CAP |
| 1Y | 100 | 40 | 40% | 85 | 15 | 10, 20 | 10 | CAP |
На горизонте Сегодня структурная доступность равна 65. Оба CAP оставляют больше ресурса, поэтому ограничителем остаётся совокупная exposure участников.
На горизонте 3M структурная доступность равна 45, но один из CAP оставляет только 40. Итоговая доступность уменьшается до 40.
На горизонте 1Y фактическая структурная утилизация составляет 85%:
85 / 100 × 100% = 85%
При этом эффективное ограничение с учётом CAP достигает 90%:
(100 - 10) / 100 × 100% = 90%
Разница в пять процентных пунктов создана не дополнительной exposure, а более жёстким CAP.
Что показывать на графике
Один график не должен пытаться одновременно объяснить все величины.
Практичный вариант состоит из двух связанных представлений.
Первый график показывает абсолютные значения по тенорам:
limit
exposure одной позиции
совокупная exposure участников
structAvailable
totalAvailable с учётом CAP
Второй график показывает относительные значения:
utilization одной exposure
structUtilization всех участников
effectiveRestriction с учётом CAP
Для effectiveRestriction нужна отдельная подпись. Иначе пользователь может принять ограничение CAP за реальную exposure.
Полезно также подсвечивать ограничивающий фактор на каждом теноре:
EXPOSURE — минимум определён structAvailable
CAP — минимум определён одним из связанных CAP
В tooltip стоит выводить исходные компоненты расчёта, а не только итоговый минимум. Пользователь должен понимать, почему доступность изменилась.
Матрица интерпретации
| Наблюдение | Возможная интерпретация |
|---|---|
| Растёт одна exposure, структурная почти не меняется | Изменение сосредоточено у основного участника |
| Структурная утилизация растёт быстрее локальной | Риск накапливается у других участников |
structAvailable выше каждого CAP | Итоговую доступность ограничивает CAP |
CAP выше structAvailable | Ограничителем остаётся совокупная exposure |
| Ограничивающий CAP меняется между тенорами | Разные ограничения становятся значимыми на разных горизонтах |
| Exposure остаётся после завершения лимита | Горизонт риска длиннее горизонта ограничения |
| Процент отсутствует при нулевом лимите | Доля математически не определена; нужно показывать абсолютные значения |
| Резкий скачок только в одной корзине | Нужна проверка исходных дат, агрегации и правил распределения по тенорам |
Матрица помогает сформулировать гипотезу, но не доказывает её. Для доказательства нужны исходные позиции, состав участников и компоненты CAP на том же горизонте.
Что делать с нулевым и отрицательным остатком
Если limit(t) = 0, процент утилизации вычислить нельзя. Деление на ноль нельзя заменять искусственным значением 0% или 100%.
В такой точке следует показывать абсолютную exposure и отдельный статус, например лимит не действует на этом горизонте.
Если exposure превышает лимит, доступность становится отрицательной:
available(t) < 0
Отрицательное значение содержит полезную информацию о размере превышения. Интерфейс не должен незаметно обрезать его до нуля, если такое преобразование не определено правилами продукта.
Неприменимый показатель также отличается от нуля. NULL означает, что метрика не рассчитывается, а 0 — что она применима и имеет нулевое значение.
Пошаговый сценарий расчёта
- Зафиксировать дату расчёта, валюту и упорядоченный список теноров.
- Получить лимит и отдельную exposure для каждого тенора.
- Определить полный состав участников и удалить дубли по согласованному ключу.
- Просуммировать exposure участников отдельно в каждой временной корзине.
- Рассчитать обычную и структурную доступность.
- Получить доступности всех связанных CAP на том же теноре.
- Выбрать минимум из
structAvailableи списка CAP. - Сохранить не только итог, но и ограничивающий фактор.
- Проверить нулевые лимиты, отрицательную доступность, валюты и неприменимые значения.
- Построить абсолютный и относительный графики из одного согласованного набора данных.
Последовательность важна. Если сначала вычислить только итоговый минимум, а компоненты отбросить, объяснить результат пользователю будет сложно.
Чего не стоит делать первым
Не следует показывать только totalAvailable. Итог отвечает на вопрос «сколько осталось», но скрывает причину ограничения.
Не стоит складывать CAP и exposure. Они описывают разные сущности: exposure потребляет ресурс, CAP ограничивает доступность.
Нельзя сравнивать значения разных теноров как одну сумму. Каждая колонка представляет отдельный временной срез.
Не следует смешивать валюты без явного правила конвертации и единой даты курса.
Не нужно заполнять нулями отсутствующие или неприменимые метрики. Это превращает неопределённость в ложное наблюдение.
Наконец, не стоит использовать только процентные показатели. При малом или нулевом лимите процент становится нестабильным либо вообще не определяется.
Выводы
- Профиль по тенорам показывает, как exposure и доступность меняются на будущих горизонтах.
- Утилизация одной exposure и структурная утилизация отвечают на разные вопросы.
- Совокупная exposure участников должна рассчитываться по однозначному составу без повторного учёта.
- CAP является ограничителем доступности, а не дополнительной exposure.
- Итоговая доступность определяется минимумом из
structAvailableи доступностей связанных CAP. - CAP-adjusted показатель нужно подписывать как эффективное ограничение, а не как фактическую утилизацию exposure.
- Для объяснимости необходимо хранить и показывать компоненты расчёта вместе с ограничивающим фактором.
- Нулевой лимит, отрицательная доступность и неприменимое значение требуют разных способов отображения.