Глава 143: PINN для ценообразования опционов в модели Jump Diffusion
Обзор
Стандартные модели ценообразования опционов, такие как Блэка-Шоулза, предполагают, что цены активов следуют геометрическому броуновскому движению — непрерывному диффузионному процессу. Это предположение приводит к тонкохвостым распределениям доходностей и не может объяснить улыбку волатильности, наблюдаемую на реальных рынках. Цены активов, особенно на криптовалютных рынках, демонстрируют внезапные большие движения (обвалы, ралли, каскады ликвидаций), которые непрерывные модели не способны уловить.
Модель скачкообразной диффузии Мертона (1976) расширяет модель Блэка-Шоулза, добавляя составной пуассоновский процесс скачков к диффузии, что приводит к тяжелым хвостам и улыбке волатильности. Однако ценообразование опционов в модели со скачками требует решения Частного интегро-дифференциального уравнения (ЧИДУ) — ЧДУ с дополнительным интегральным членом, представляющим ожидаемое изменение стоимости опциона из-за скачков. Этот интегральный член значительно усложняет численное решение.
Физически-информированные нейронные сети (PINN) предлагают элегантный безсеточный подход: мы обучаем нейронную сеть аппроксимировать функцию стоимости опциона V(S,t), одновременно обеспечивая выполнение ЧИДУ как мягкого ограничения в функции потерь. Интегральный член обрабатывается с помощью численной квадратуры (Гаусса-Эрмита), что делает весь конвейер дифференцируемым и пригодным для GPU.
В этой главе реализовано ценообразование на основе PINN для скачкообразной диффузии как для фондовых, так и для крипто-опционов, с акцентом на рынки Bybit, где скачки особенно распространены.
Содержание
- Почему Блэк-Шоулз не работает
- Модель скачкообразной диффузии Мертона
- ЧИДУ для скачкообразной диффузии
- Физически-информированные нейронные сети
- Обработка интегрального члена
- Архитектура сети
- Проектирование функции потерь
- Квадратура Гаусса-Эрмита
- Аналитическое решение Мертона
- Греки в модели со скачками
- Воспроизведение улыбки волатильности
- Сравнение с FFT-методами
- Применение к крипторынкам
- Торговая стратегия и бэктестинг
- Руководство по реализации
- Ссылки
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) |
|---|---|---|---|
| Диффузионная волатильность | sigma | 0.15-0.25 | 0.40-0.80 |
| Интенсивность скачков | lambda | 1-5/год | 5-20/год |
| Средний размер скачка (лог) | mu_J | -0.05 до -0.10 | -0.10 до -0.20 |
| Волатильность размера скачка | sigma_J | 0.10-0.20 | 0.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/dt | dV/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 — параметры сети. Сеть обучается удовлетворять:
- ЧИДУ в коллокационных точках во внутренней области
- Терминальным условиям при t = T
- Граничным условиям при 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) * zdy = sigma_J * sqrt(2) * dzf(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_dataL_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))^2L_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))^2L_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)/Tsigma_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. Применение к крипторынкам
Почему скачки важнее в крипте
Криптовалютные рынки демонстрируют скачковое поведение гораздо чаще, чем традиционные:
- Каскады ликвидаций: Позиции с плечом запускают цепные ликвидации
- Регуляторные объявления: Запреты Китая, действия SEC и т.д.
- Биржевые события: Взломы, банкротства (FTX), делистинги
- Движения китов: Крупные переводы, вызывающие панику
- Технические сбои: Перегрузка сети, эксплойты мостов
- Микроструктура рынка: Тонкие стаканы усиливают движения
Конвейер данных Bybit
Мы используем REST API Bybit для:
- Исторических данных OHLCV (свечей)
- Данных опционных цепочек (при наличии)
- Ставок финансирования (как прокси риска скачков)
# Получение свечей BTC/USDT с Bybitendpoint = "https://api.bybit.com/v5/market/kline"params = { "category": "spot", "symbol": "BTCUSDT", "interval": "D", "limit": 1000}Калибровка параметров скачков по крипто-данным
Оцениваем параметры скачков по историческим данным:
- Идентификация скачков: Доходности, превышающие порог 3*sigma
- Интенсивность скачков (lambda): Число дней со скачками / общее число дней * 252
- Среднее скачка (mu_J): Средняя лог-доходность в дни скачков
- Волатильность скачка (sigma_J): Std лог-доходностей в дни скачков
- Диффузионная волатильность (sigma): Std лог-доходностей в обычные дни
Типичные оценки для BTC:
sigma = 0.50 (годовая диффузионная волатильность)lambda = 12 (около 12 скачков в год)mu_J = -0.05 (средний скачок -5%)sigma_J = 0.10 (размеры скачков варьируются +/- 10%)14. Торговая стратегия и бэктестинг
Стратегия: Неправильная оценка скачкового риска
Стратегия эксплуатирует разницу между справедливой стоимостью по PINN и рыночными ценами:
- Калибровка параметров модели Мертона по недавним данным
- Оценка опционов с помощью PINN
- Сравнение цен PINN со среднерыночными ценами
- Торговля при превышении порога неправильной оценки:
- Покупка опционов, недооценённых рынком (рынок недооценивает скачковый риск)
- Продажа опционов, переоценённых рынком
- Дельта-хеджирование для изоляции волатильностной/скачковой компоненты
Метрики риска
- Коэффициент Шарпа: Доходность с поправкой на риск
- Максимальная просадка: Худшее падение от пика к впадине
- Коэффициент Сортино: Доходность с поправкой на нисходящий риск
- Процент выигрышей: Доля прибыльных сделок
- Фактор прибыли: Валовая прибыль / валовой убыток
15. Руководство по реализации
Реализация на Python
cd python/pip install -r requirements.txtpython train.py --asset BTC --exchange bybitpython visualize.py --plot smilepython backtest.py --start 2023-01-01 --end 2024-01-01Реализация на Rust
cd rust_pinn_jump/cargo build --releasecargo run --bin fetch_datacargo run --bin traincargo 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.rs16. Ссылки
-
Merton, R. C. (1976). “Option pricing when underlying stock returns are discontinuous.” Journal of Financial Economics, 3(1-2), 125-144.
-
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.
-
Carr, P., & Madan, D. (1999). “Option valuation using the fast Fourier transform.” Journal of Computational Finance, 2(4), 61-73.
-
Kou, S. G. (2002). “A jump-diffusion model for option pricing.” Management Science, 48(8), 1086-1101.
-
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.
-
Physics-Informed Neural Networks for Option Pricing in Illiquid Jump Markets (2025). ACM Digital Library, doi:10.1145/3760678.3760691.
-
Salvador, B., Oosterlee, C. W., & van der Meer, R. (2020). “Financial option valuation by unsupervised learning with artificial neural networks.” Mathematics, 9(1), 46.
-
McClenny, L. D., & Brainerd, U. M. (2020). “Self-adaptive physics-informed neural networks using a soft attention mechanism.” arXiv:2009.04544.
Итоги
Эта глава продемонстрировала, как физически-информированные нейронные сети могут решать ЧИДУ скачкообразной диффузии Мертона для ценообразования опционов. Ключевые выводы:
- Скачкообразная диффузия улавливает тяжёлые хвосты и улыбку волатильности, которые пропускает Блэк-Шоулз
- PINN элегантно обрабатывает интегральный член через квадратуру Гаусса-Эрмита
- Автоматическое дифференцирование предоставляет точные греки без дополнительных затрат
- Крипторынки (Bybit) — идеальная область применения из-за частых скачков цен
- Подход обобщается на более сложные модели (Бейтс, SVJ и т.д.)
Комбинация физических ограничений с гибкостью нейронных сетей создаёт ценовой движок, который одновременно точен и вычислительно эффективен после обучения, что делает его практичным для торговых приложений в реальном времени.