Перейти к содержимому

Глава 143: PINN для ценообразования опционов в модели Jump Diffusion

Обзор

Стандартные модели ценообразования опционов, такие как Блэка-Шоулза, предполагают, что цены активов следуют геометрическому броуновскому движению — непрерывному диффузионному процессу. Это предположение приводит к тонкохвостым распределениям доходностей и не может объяснить улыбку волатильности, наблюдаемую на реальных рынках. Цены активов, особенно на криптовалютных рынках, демонстрируют внезапные большие движения (обвалы, ралли, каскады ликвидаций), которые непрерывные модели не способны уловить.

Модель скачкообразной диффузии Мертона (1976) расширяет модель Блэка-Шоулза, добавляя составной пуассоновский процесс скачков к диффузии, что приводит к тяжелым хвостам и улыбке волатильности. Однако ценообразование опционов в модели со скачками требует решения Частного интегро-дифференциального уравнения (ЧИДУ) — ЧДУ с дополнительным интегральным членом, представляющим ожидаемое изменение стоимости опциона из-за скачков. Этот интегральный член значительно усложняет численное решение.

Физически-информированные нейронные сети (PINN) предлагают элегантный безсеточный подход: мы обучаем нейронную сеть аппроксимировать функцию стоимости опциона V(S,t), одновременно обеспечивая выполнение ЧИДУ как мягкого ограничения в функции потерь. Интегральный член обрабатывается с помощью численной квадратуры (Гаусса-Эрмита), что делает весь конвейер дифференцируемым и пригодным для GPU.

В этой главе реализовано ценообразование на основе PINN для скачкообразной диффузии как для фондовых, так и для крипто-опционов, с акцентом на рынки Bybit, где скачки особенно распространены.


Содержание

  1. Почему Блэк-Шоулз не работает
  2. Модель скачкообразной диффузии Мертона
  3. ЧИДУ для скачкообразной диффузии
  4. Физически-информированные нейронные сети
  5. Обработка интегрального члена
  6. Архитектура сети
  7. Проектирование функции потерь
  8. Квадратура Гаусса-Эрмита
  9. Аналитическое решение Мертона
  10. Греки в модели со скачками
  11. Воспроизведение улыбки волатильности
  12. Сравнение с FFT-методами
  13. Применение к крипторынкам
  14. Торговая стратегия и бэктестинг
  15. Руководство по реализации
  16. Ссылки

1. Почему Блэк-Шоулз не работает

Модель Блэка-Шоулза предполагает:

dS/S = mu * dt + sigma * dW

где W — стандартное броуновское движение. Это подразумевает:

  • Логарифмические доходности нормально распределены
  • Волатильность постоянна по всем страйкам и срокам
  • Нет внезапных скачков цены

Эмпирические наблюдения противоречат всем трём допущениям:

СвойствоПрогноз Блэка-ШоулзаРыночная реальность
Распределение доходностейГауссовское (тонкие хвосты)Лептокуртическое (тяжёлые хвосты)
Подразумеваемая волатильностьПлоская по страйкамУлыбка/перекос волатильности
Крупные движенияКрайне редкиеРегулярные
Дневные движения крипты 10%+Вероятность ~0%Происходит несколько раз в год

На криптовалютных рынках (Bybit) несоответствие ещё более выражено:

  • BTC испытывал падения 20%+ за день (март 2020, май 2021, ноябрь 2022)
  • Каскады ликвидаций создают разрывные движения цен
  • Маркет-мейкеры опционов котируют значительную улыбку, подразумевая риск скачков

2. Модель скачкообразной диффузии Мертона

Мертон (1976) предложил дополнить диффузию компонентом скачков:

dS/S = (mu - lambda*k) * dt + sigma * dW + J * dN

где:

  • sigma — диффузионная волатильность
  • dW — приращение броуновского движения
  • dN — пуассоновский процесс с интенсивностью lambda (среднее число скачков в год)
  • J — случайный размер скачка, где ln(1+J) ~ N(mu_J, sigma_J^2)
  • k = E[J] = exp(mu_J + sigma_J^2/2) - 1 — ожидаемый процентный размер скачка
  • Дрейф компенсируется на -lambda*k для поддержания риск-нейтральности

Интерпретация параметров

ПараметрСимволТипично (Акции)Типично (BTC)
Диффузионная волатильностьsigma0.15-0.250.40-0.80
Интенсивность скачковlambda1-5/год5-20/год
Средний размер скачка (лог)mu_J-0.05 до -0.10-0.10 до -0.20
Волатильность размера скачкаsigma_J0.10-0.200.15-0.40

Распределение доходностей

В модели Мертона логарифмическая доходность за интервал dt представляет собой смесь нормальных распределений:

ln(S_T/S_0) = сумма по n от 0 до бесконечности:
P(N=n) * Normal(
(r - lambda*k - sigma^2/2)*T + n*mu_J,
sigma^2*T + n*sigma_J^2
)

где P(N=n) — пуассоновская вероятность n скачков:

P(N=n) = (lambda*T)^n * exp(-lambda*T) / n!

Эта смесь порождает тяжёлые хвосты и асимметрию, соответствуя рыночным наблюдениям.


3. ЧИДУ для скачкообразной диффузии

При риск-нейтральном ценообразовании стоимость опциона V(S,t) удовлетворяет Частному интегро-дифференциальному уравнению:

dV/dt + (1/2)*sigma^2*S^2 * d^2V/dS^2 + (r - lambda*k)*S * dV/dS - (r + lambda)*V
+ lambda * интеграл от -inf до +inf по V(S*e^y, t) * f(y) dy = 0

где:

  • f(y) — плотность распределения логарифмического размера скачка: f(y) = N(mu_J, sigma_J^2)
  • Интеграл вычисляет ожидаемую стоимость опциона после скачка логарифмического размера y

Граничные и терминальные условия

Европейский колл:

V(S, T) = max(S - K, 0) (терминальное условие)
V(0, t) = 0 (нижняя граница)
V(S, t) -> S - K*exp(-r*(T-t)) при S -> inf (верхняя граница)

Европейский пут:

V(S, T) = max(K - S, 0) (терминальное условие)
V(0, t) = K*exp(-r*(T-t)) (нижняя граница)
V(S, t) -> 0 при S -> inf (верхняя граница)

Сравнение с ЧДУ Блэка-Шоулза

ЧленБлэк-ШоулзСкачкообразная диффузия Мертона
Производная по времениdV/dtdV/dt
Диффузия(1/2)sigma^2S^2 * d^2V/dS^2(1/2)sigma^2S^2 * d^2V/dS^2
Дрейфr*S * dV/dS(r - lambda*k)*S * dV/dS
Дисконтирование-r*V-(r + lambda)*V
Интеграл скачковОтсутствуетlambda * интеграл V(S*e^y) * f(y) dy

Интеграл скачков — это то, что делает уравнение интегро-дифференциальным и требует специальной численной обработки.


4. Физически-информированные нейронные сети

PINN аппроксимирует V(S,t) нейронной сетью V_nn(S,t; theta), где theta — параметры сети. Сеть обучается удовлетворять:

  1. ЧИДУ в коллокационных точках во внутренней области
  2. Терминальным условиям при t = T
  3. Граничным условиям при S = 0 и S -> S_max

Ключевые преимущества для скачкообразной диффузии

  • Безсеточный метод: Не нужна сетка дискретизации; коллокационные точки выбираются случайно
  • Дифференцируемость: Автоматическое дифференцирование даёт точные производные dV/dS, d^2V/dS^2, dV/dt
  • Совместимость с GPU: Пакетное вычисление на GPU как для остатка ЧДУ, так и для интегрального члена
  • Гибкость: Легко расширяется на стохастическую волатильность + скачки (модель Бейтса)

Обзор архитектуры

Вход: (S, t) -- спот-цена и время
|
v
[Лог-преобразование: x = ln(S/K)] -- улучшает числовую обусловленность
|
v
[Слой фурье-признаков] -- помогает изучать высокочастотные особенности
|
v
[Полносвязная сеть: 128 -> 128 -> 128 -> 128] -- активация tanh
|
v
Выход: V(S, t) -- стоимость опциона

5. Обработка интегрального члена

Интегральный член в ЧИДУ:

I(S, t) = lambda * интеграл от -inf до +inf по V_nn(S*e^y, t) * f(y) dy

где f(y) = (1 / (sigma_J * sqrt(2*pi))) * exp(-(y - mu_J)^2 / (2*sigma_J^2)).

Подстановка для квадратуры Гаусса-Эрмита

Подставляем z = (y - mu_J) / (sigma_J * sqrt(2)), тогда:

y = mu_J + sigma_J * sqrt(2) * z
dy = sigma_J * sqrt(2) * dz
f(y) dy = (1/sqrt(pi)) * exp(-z^2) * dz

Интеграл принимает вид:

I(S, t) = lambda / sqrt(pi) * сумма по i: w_i * V_nn(S * exp(mu_J + sigma_J*sqrt(2)*z_i), t)

где (z_i, w_i) — узлы и веса квадратуры Гаусса-Эрмита.

Почему Гаусс-Эрмит?

Квадратура Гаусса-Эрмита специально разработана для интегралов вида:

интеграл от -inf до +inf по f(x) * exp(-x^2) dx = сумма_i w_i * f(x_i)

Поскольку распределение размеров скачков логнормальное, после подстановки оно имеет точно ядро exp(-x^2). При 20-32 узлах квадратуры мы достигаем отличной точности для типичных параметров скачков.

Практическая реализация

# Узлы и веса Гаусса-Эрмита
nodes, weights = np.polynomial.hermite.hermgauss(n_quadrature)
# Для каждой коллокационной точки (S_j, t_j):
# Вычисляем сдвинутые спот-цены для всех узлов квадратуры
y_values = mu_J + sigma_J * np.sqrt(2) * nodes # размерность: (n_quad,)
S_jumped = S_j * np.exp(y_values) # размерность: (n_quad,)
# Вычисляем сеть при всех цена после скачка
t_repeated = t_j * np.ones(n_quadrature) # размерность: (n_quad,)
V_jumped = network(S_jumped, t_repeated) # размерность: (n_quad,)
# Вычисляем интеграл
integral = (lambda_J / np.sqrt(np.pi)) * np.sum(weights * V_jumped)

6. Архитектура сети

Предобработка входных данных

Спот-цена S варьируется на порядки величин. Мы используем лог-мани-нес и нормализованное время:

x1 = ln(S / K) -- лог-мани-нес (центрирован вокруг 0 для ATM)
x2 = (T - t) / T_max -- нормализованное время до экспирации в [0, 1]

Фурье-кодирование признаков

Для помощи сети в изучении высокочастотных паттернов на поверхности опционов мы используем случайные фурье-признаки:

gamma(x) = [sin(B * x), cos(B * x)]

где B — матрица случайных частот, выбранных из N(0, sigma_ff^2). Эта техника критична для захвата резкого излома на страйке.

Полная архитектура

Слой 1: Фурье-признаки (2) -> (2 * n_fourier)
Слой 2: Линейный + Tanh (2*n_fourier) -> 128
Слой 3: Линейный + Tanh 128 -> 128 (+ остаточная связь)
Слой 4: Линейный + Tanh 128 -> 128 (+ остаточная связь)
Слой 5: Линейный + Tanh 128 -> 128 (+ остаточная связь)
Слой 6: Линейный (выход) 128 -> 1
Слой 7: Softplus гарантирует V >= 0

Всего параметров: примерно 70 000 — достаточно мало для быстрого обучения.


7. Проектирование функции потерь

Общая функция потерь — взвешенная сумма четырёх компонент:

L_total = w_pide * L_pide + w_ic * L_ic + w_bc * L_bc + w_data * L_data

L_pide — Потеря остатка ЧИДУ

В N_pide коллокационных точках {(S_j, t_j)}, выбранных во внутренней области:

R_j = dV/dt + (1/2)*sigma^2*S_j^2 * d^2V/dS^2 + (r - lambda*k)*S_j * dV/dS
- (r + lambda)*V + lambda * Integral_j
L_pide = (1/N_pide) * сумма_j R_j^2

Производные dV/dt, dV/dS, d^2V/dS^2 вычисляются через автоматическое дифференцирование. Интеграл Integral_j вычисляется через квадратуру Гаусса-Эрмита, как описано выше.

L_ic — Потеря терминального условия

В N_ic точках, выбранных при t = T:

L_ic = (1/N_ic) * сумма_j (V_nn(S_j, T) - payoff(S_j))^2

L_bc — Потеря граничных условий

В N_bc точках, выбранных при S = S_min и S = S_max:

L_bc = (1/N_bc) * сумма_j (V_nn(S_j^bc, t_j) - V_exact_boundary(S_j^bc, t_j))^2

L_data — Потеря рыночных данных (опционально)

Если есть наблюдаемые рыночные цены опционов {V_market_i}:

L_data = (1/N_data) * сумма_i (V_nn(S_i, t_i) - V_market_i)^2

Это позволяет калибровку к рыночным данным с учётом физики ЧИДУ.

Адаптивное взвешивание

Используется схема самоадаптивного взвешивания McClenny & Brainerd (2020):

w_k = exp(s_k)

где s_k — обучаемые параметры логарифмических весов, оптимизируемые вместе с сетью. Это автоматически балансирует компоненты потерь в процессе обучения.


8. Квадратура Гаусса-Эрмита

Математическое обоснование

Квадратура Гаусса-Эрмита аппроксимирует:

интеграл от -inf до +inf по f(x) * exp(-x^2) dx = сумма_{i=1}^{n} w_i * f(x_i)

Узлы x_i — корни полинома Эрмита H_n(x), а веса:

w_i = (2^(n-1) * n! * sqrt(pi)) / (n^2 * [H_{n-1}(x_i)]^2)

Анализ точности

Для нашего интеграла скачков с логнормальным распределением размеров:

  • n=8: Относительная ошибка < 1% для большинства практических параметров
  • n=16: Относительная ошибка < 0.01%
  • n=32: Точность на уровне машинной
  • n=64: Избыточно, но используется для валидации

По умолчанию используется n=32 как баланс точности и вычислительных затрат.


9. Аналитическое решение Мертона

Мертон показал, что цена европейского опциона при скачкообразной диффузии записывается как бесконечный ряд цен Блэка-Шоулза:

V_Merton = сумма_{n=0}^{inf} P(N=n) * BS(S, K, T, r_n, sigma_n)

где:

P(N=n) = exp(-lambda'*T) * (lambda'*T)^n / n!
lambda' = lambda * (1 + k)
r_n = r - lambda*k + n*ln(1+k)/T
sigma_n = sqrt(sigma^2 + n*sigma_J^2/T)

Этот ряд быстро сходится (обычно достаточно 20-30 членов) и служит эталоном для валидации PINN.


10. Греки в модели со скачками

PINN предоставляют греки “бесплатно” через автоматическое дифференцирование:

Греки первого порядка

Дельта (чувствительность к спот-цене):

Delta = dV/dS

Тета (чувствительность к времени):

Theta = dV/dt

Греки второго порядка

Гамма (кривизна):

Gamma = d^2V/dS^2

Греки, специфичные для скачков

Чувствительность к скачкам (чувствительность к интенсивности скачков):

dV/d(lambda) -- как изменяется стоимость опциона при более частых скачках?

Чувствительность к размеру скачков:

dV/d(mu_J) -- эффект среднего размера скачка
dV/d(sigma_J) -- эффект неопределённости размера скачка

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


11. Воспроизведение улыбки волатильности

Ключевой тест для любой модели со скачками — воспроизведение улыбки волатильности.

Вычисление подразумеваемой волатильности

По цене PINN V_PINN(S, K, T) инвертируем формулу Блэка-Шоулза для нахождения подразумеваемой волатильности:

sigma_imp: BS(S, K, T, r, sigma_imp) = V_PINN(S, K, T)

Решается методом Ньютона-Рафсона или бисекции.

Ожидаемая форма улыбки

При скачкообразной диффузии Мертона:

  • Отрицательный mu_J (скачки вниз): формирует левый перекос (более высокая IV для OTM путов)
  • Большой sigma_J: формирует U-образную улыбку (более высокая IV для обоих крыльев)
  • Большой lambda: усиливает эффект улыбки
  • Короткие сроки: улыбка более выражена
  • Длинные сроки: улыбка сглаживается по мере доминирования диффузии

Характеристики улыбки на крипторынках

Опционы на BTC на Bybit/Deribit обычно демонстрируют:

  • Сильный левый перекос (премия за риск обвала)
  • Более высокие абсолютные уровни IV (40-80% против 15-25% для акций)
  • Инверсию срочной структуры в периоды стресса
  • Усиление улыбки перед крупными событиями (решения по ETF, халвинги)

12. Сравнение с FFT-методами

Подход Карра-Мадана через FFT

Метод Карра-Мадана (1999) оценивает опционы через:

C(K) = (exp(-alpha*ln(K))) / pi * интеграл от 0 до inf по
exp(-i*v*ln(K)) * psi(v) / (alpha^2 + alpha - v^2 + i*(2*alpha+1)*v) dv

где psi(v) — характеристическая функция лог-цены. Для модели Мертона:

psi_Merton(v) = exp(
i*v*(ln(S) + (r - sigma^2/2 - lambda*k)*T)
- sigma^2*v^2*T/2
+ lambda*T*(exp(i*v*mu_J - sigma_J^2*v^2/2) - 1)
)

Сравнение PINN и FFT

АспектFFT (Карр-Мадан)PINN
Скорость (одна цена)~1мс~0.1мс (после обучения)
Время обученияНет5-30 минут
ГрекиКонечные разностиТочные (autograd)
ГибкостьНужна характеристическая функцияЛюбое ЧИДУ
Экзотические опционыОграниченоЕстественное расширение
КалибровкаОтдельная оптимизацияВстроена в обучение
Американские опционыНе обрабатывает напрямуюЕстественное расширение
Ускорение на GPUУмеренноеЗначительное

13. Применение к крипторынкам

Почему скачки важнее в крипте

Криптовалютные рынки демонстрируют скачковое поведение гораздо чаще, чем традиционные:

  1. Каскады ликвидаций: Позиции с плечом запускают цепные ликвидации
  2. Регуляторные объявления: Запреты Китая, действия SEC и т.д.
  3. Биржевые события: Взломы, банкротства (FTX), делистинги
  4. Движения китов: Крупные переводы, вызывающие панику
  5. Технические сбои: Перегрузка сети, эксплойты мостов
  6. Микроструктура рынка: Тонкие стаканы усиливают движения

Конвейер данных Bybit

Мы используем REST API Bybit для:

  • Исторических данных OHLCV (свечей)
  • Данных опционных цепочек (при наличии)
  • Ставок финансирования (как прокси риска скачков)
# Получение свечей BTC/USDT с Bybit
endpoint = "https://api.bybit.com/v5/market/kline"
params = {
"category": "spot",
"symbol": "BTCUSDT",
"interval": "D",
"limit": 1000
}

Калибровка параметров скачков по крипто-данным

Оцениваем параметры скачков по историческим данным:

  1. Идентификация скачков: Доходности, превышающие порог 3*sigma
  2. Интенсивность скачков (lambda): Число дней со скачками / общее число дней * 252
  3. Среднее скачка (mu_J): Средняя лог-доходность в дни скачков
  4. Волатильность скачка (sigma_J): Std лог-доходностей в дни скачков
  5. Диффузионная волатильность (sigma): Std лог-доходностей в обычные дни

Типичные оценки для BTC:

sigma = 0.50 (годовая диффузионная волатильность)
lambda = 12 (около 12 скачков в год)
mu_J = -0.05 (средний скачок -5%)
sigma_J = 0.10 (размеры скачков варьируются +/- 10%)

14. Торговая стратегия и бэктестинг

Стратегия: Неправильная оценка скачкового риска

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

  1. Калибровка параметров модели Мертона по недавним данным
  2. Оценка опционов с помощью PINN
  3. Сравнение цен PINN со среднерыночными ценами
  4. Торговля при превышении порога неправильной оценки:
    • Покупка опционов, недооценённых рынком (рынок недооценивает скачковый риск)
    • Продажа опционов, переоценённых рынком
  5. Дельта-хеджирование для изоляции волатильностной/скачковой компоненты

Метрики риска

  • Коэффициент Шарпа: Доходность с поправкой на риск
  • Максимальная просадка: Худшее падение от пика к впадине
  • Коэффициент Сортино: Доходность с поправкой на нисходящий риск
  • Процент выигрышей: Доля прибыльных сделок
  • Фактор прибыли: Валовая прибыль / валовой убыток

15. Руководство по реализации

Реализация на Python

Окно терминала
cd python/
pip install -r requirements.txt
python train.py --asset BTC --exchange bybit
python visualize.py --plot smile
python backtest.py --start 2023-01-01 --end 2024-01-01

Реализация на Rust

Окно терминала
cd rust_pinn_jump/
cargo build --release
cargo run --bin fetch_data
cargo run --bin train
cargo run --bin price_options

Структура проекта

143_pinn_jump_diffusion/
├── README.md # Основное описание (English)
├── README.ru.md # Данный файл (Русский)
├── readme.simple.md # Простое объяснение (English)
├── readme.simple.ru.md # Простое объяснение (Русский)
├── python/
│ ├── requirements.txt
│ ├── __init__.py
│ ├── jump_diffusion_pinn.py # Основная модель PINN
│ ├── train.py # Конвейер обучения
│ ├── data_loader.py # Данные Bybit + акции
│ ├── merton_analytical.py # Аналитическое решение Мертона
│ ├── greeks.py # Греки через autograd
│ ├── visualize.py # Графики и визуализация
│ └── backtest.py # Бэктестинг стратегии
└── rust_pinn_jump/
├── Cargo.toml
├── src/
│ ├── lib.rs # Основная библиотека
│ └── bin/
│ ├── train.rs
│ ├── price_options.rs
│ └── fetch_data.rs
└── examples/
└── quick_start.rs

16. Ссылки

  1. Merton, R. C. (1976). “Option pricing when underlying stock returns are discontinuous.” Journal of Financial Economics, 3(1-2), 125-144.

  2. Raissi, M., Perdikaris, P., & Karniadakis, G. E. (2019). “Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations.” Journal of Computational Physics, 378, 686-707.

  3. Carr, P., & Madan, D. (1999). “Option valuation using the fast Fourier transform.” Journal of Computational Finance, 2(4), 61-73.

  4. Kou, S. G. (2002). “A jump-diffusion model for option pricing.” Management Science, 48(8), 1086-1101.

  5. Lu, L., Meng, X., Mao, Z., & Karniadakis, G. E. (2021). “DeepXDE: A deep learning library for solving differential equations.” SIAM Review, 63(1), 208-228.

  6. Physics-Informed Neural Networks for Option Pricing in Illiquid Jump Markets (2025). ACM Digital Library, doi:10.1145/3760678.3760691.

  7. Salvador, B., Oosterlee, C. W., & van der Meer, R. (2020). “Financial option valuation by unsupervised learning with artificial neural networks.” Mathematics, 9(1), 46.

  8. McClenny, L. D., & Brainerd, U. M. (2020). “Self-adaptive physics-informed neural networks using a soft attention mechanism.” arXiv:2009.04544.


Итоги

Эта глава продемонстрировала, как физически-информированные нейронные сети могут решать ЧИДУ скачкообразной диффузии Мертона для ценообразования опционов. Ключевые выводы:

  1. Скачкообразная диффузия улавливает тяжёлые хвосты и улыбку волатильности, которые пропускает Блэк-Шоулз
  2. PINN элегантно обрабатывает интегральный член через квадратуру Гаусса-Эрмита
  3. Автоматическое дифференцирование предоставляет точные греки без дополнительных затрат
  4. Крипторынки (Bybit) — идеальная область применения из-за частых скачков цен
  5. Подход обобщается на более сложные модели (Бейтс, SVJ и т.д.)

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