Модель Хестона в Python

Сравнение распределений плотности ценовой плотности модели Блэка-Шоулза и модели Хестона

В этом уроке мы углубимся в модель Хестона, мощный инструмент для моделирования стохастической волатильности в области количественных финансов. Мы изучим его актуальность, преимущества и погрузимся в код Python для моделирования этой модели. К концу этой статьи у вас будет четкое представление о модели Хестона и ее применении.

Из этой статьи вы узнаете:

  1. Значение модели Хестона в количественных финансах.
  2. Как смоделировать динамику цены и волатильности актива.
  3. Использование Python для реализации модели Хестона.
  4. Ловля улыбки волатильности для ценообразования опционов.

0. Введение

Модель Хестона, представленная Хестоном в 1993 году, стала фундаментальным инструментом для количественной оценки влияния колебаний волатильности на цены активов, особенно в контексте ценообразования опционов.

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

Почему важна модель Хестона:

  1. Решение закрытой формы: Модель Хестона дает нам возможность рассчитывать европейские цены опционов с удивительной точностью благодаря решениям в закрытой форме.
  2. Защита от отрицательных отклонений: В реальности цены на активы не могут демонстрировать отрицательные дисперсии. Модель Хестона элегантно учитывает это ограничение, гарантируя, что наши симуляции остаются основанными на финансовой реальности.
  3. Эффект кредитного плеча: Включение в модель Хестона эффекта кредитного плеча признает, что доходность активов и волатильность взаимосвязаны, отражая то, как на самом деле функционируют финансовые рынки.

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

1. Модель Хестона

1.1 Общие сведения

Модель Хестона, представленная в 1993 году компанией Heston¹, является ценным инструментом для понимания влияния стохастической волатильности на движение цен на активы, особенно в контексте ценообразования опционов. Он отличается закрытым решением для европейских опционов, отсутствием отрицательных дисперсий и способностью учитывать эффекты кредитного плеча¹. В отличие от формулы Блэка-Шоулза, она не предполагает постоянной волатильности, что делает ее более универсальной для различных финансовых сценариев.

1.2 Глубокое погружение

Модель Хестона, представленная Стивеном Л. Хестоном в его основополагающей статье 1993 года под названием «Закрытое решение для опционов со стохастической волатильностью с приложениями к облигациям и валютным опционам» [1], является краеугольным камнем нашего исследования стохастического моделирования волатильности. Давайте углубимся в основные концепции и уравнения, которые делают эту модель краеугольным камнем количественных финансов.

Реальная и рисковая динамика:

В модели Хестона мы оперируем двумя различными показателями: реальным показателем (P) и нейтральным риск-показателем (Q). Важно понимать разницу между ними, так как эта концепция лежит в основе многих финансовых моделей.

  • Реальная мера (P): Под этим показателем мы наблюдаем фактическую динамику цен на активы и волатильность. На самом деле, цены на активы колеблются в соответствии с этой динамикой под влиянием таких факторов, как рыночные настроения и экономические события.
  • Риск-нейтральная мера (Q): В контексте ценообразования опционов мы часто переходим к риск-нейтральной мере. Эта мера упрощает расчеты и приводит их в соответствие с рыночными ценами. В этом показателе мы предполагаем, что инвесторы нейтральны по отношению к риску, то есть им не требуется премия за принятие риска. В результате мы корректируем динамику цен на активы и волатильность в соответствии с рыночными условиями.

1.3 Уравнения модели Хестона

В основе модели Хестона лежат стохастические дифференциальные уравнения (SDE), которые описывают, как цены на активы (St) и волатильность (vt) изменяются с течением времени. При реальной мере (P) эти уравнения¹ имеют вид:

Динамика в реальном мире:

Динамика цен на активы (St) и волатильности (vt) при измерении реальной вероятности

Здесь мы вводим несколько важных параметров:

Разница между реальной и нейтральной динамикой имеет решающее значение для понимания того, как участники рынка рассматривают риск и его влияние на ценообразование опционов. При нейтральной к риску мере (Q) уравнения принимают вид:

Риск-нейтральная динамика:

Динамика цен на активы (St) и волатильности (vt) при нейтральной к риску вероятности

Где:

  • Р: Безрисковый тариф.
  • параметры с Q: Риск-нейтральные параметры

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

В следующих разделах мы рассмотрим практическую реализацию модели Хестона в Python, демонстрируя, как моделировать цены и волатильность активов, а также как эти знания могут быть использованы для ценообразования опционов.

2. Модель Хестона для моделирования методом Монте-Карло

В этом разделе мы засучим рукава и приступим к практической реализации модели Хестона в Python для моделирования динамики цен на активы и волатильности. Именно в этом практическом аспекте мы превращаем теорию в практические идеи.

Дискретизация СДУ по методу Эйлера:

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

Для более глубокого понимания дискретизации Эйлера вы можете обратиться к ресурсу Фабриса Дугласа Руа (Fabrice Douglas Rouah)². В нем дается исчерпывающее объяснение этого метода.

Дискретизированные уравнения:

Вот как мы дискретизируем SDE модели Хестона:

Цена актива (St)

Динамика цен на активы (St)

Волатильность (vt)

Динамика волатильности (vt)

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

Теперь мы готовы реализовать модель Хестона на Python. Вот краткий обзор шагов, которые мы будем выполнять:

  1. Инициализируйте такие параметры, как начальная цена актива (S0), начальная волатильность (v0), корреляция (ρ), коэффициент возврата (κ), долгосрочная дисперсия (θ), волатильность волатильности (σ), время до погашения (T), количество временных шагов (N) и количество симуляций (M).
  2. Настройте массивы для хранения цен на активы (S) и волатильности (v) с течением времени.
  3. Выборка коррелированных броуновских движений (Z_S,t+1 и Z_v,t+1) при риск-нейтральной мере (Q).
  4. Реализуйте уравнения дискретизации Эйлера для обновления цен на активы и волатильности с течением времени для каждого моделирования.
  5. Повторите этот процесс для нескольких симуляций, чтобы получить диапазон возможных траекторий цены актива и траекторий волатильности.

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

В следующих разделах мы углубимся в код Python для реализации этих симуляций и визуализируем результаты, чтобы лучше понять поведение модели Хестона.

3.0 Реализация и настройка Python

3.1 Импорт зависимостей

Для начала нам нужно импортировать необходимые библиотеки Python. К ним относятся NumPy для численных операций, Seaborn для визуализации данных и Matplotlib для создания графиков. Кроме того, мы используем библиотеку ‘py_vollib_vectorized’ для расчета подразумеваемой волатильности.import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from py_vollib_vectorized import vectorized_implied_volatility as implied_vol

  • py_vollib_vectorized: Эта библиотека полезна для расчета подразумеваемой волатильности, что является важнейшим аспектом ценообразования опционов.

3.2 Почему мы делаем симуляции?

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

1. Траектории цены актива:

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

2. Траектории волатильности:

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

3. Распределение цен на активы:

  • Сравните распределение цен на активы при различных корреляциях (ρ). Для демонстрации этих распределений можно использовать графики плотности ядер.

4. Улыбка подразумеваемой волатильности:

  • Рассчитайте подразумеваемую волатильность для диапазона страйков и визуализируйте улыбку подразумеваемой волатильности. Это особенно важно при рассмотрении вопроса о ценообразовании опционов.

В следующих разделах мы продемонстрируем, как применять эти визуализации с помощью Python. Эти графики не только улучшат ваше понимание модели Хестона, но и послужат ценными инструментами для количественного финансового анализа.

3.3 Определение параметров

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

Обзор параметров:

Прежде чем углубляться в детали, давайте дадим обзор параметров, которые мы будем определять:

  • С0: Начальная цена актива.
  • Т: Время до созревания в годах.
  • Р: Безрисковая процентная ставка.
  • Н: Количество временных шагов в моделировании.
  • М: Количество симуляций.
  • κ: Скорость возврата дисперсии к среднему значению при реальной или нейтральной по отношению к риску динамике.
  • θ: Долгосрочное среднее значение дисперсии при реальной или нейтральной к риску динамике.
  • v0: Начальная дисперсия при реальной или нейтральной к риску динамике.
  • ρ: Корреляция между доходностью и дисперсией при реальной или нейтральной к риску динамике.
  • σ: Волатильность волатильности.

Код на Python:

Давайте определим эти параметры в Python:# Parameters
# Simulation-dependent parameters
S0 = 100.0 # Initial asset price
T = 1.0 # Time to maturity in years
r = 0.02 # Risk-free rate
N = 252 # Number of time steps in simulation
M = 1000 # Number of simulations

# Heston model-specific parameters
kappa = 3 # Rate of mean reversion of variance under risk-neutral dynamics
theta = 0.20**2 # Long-term mean of variance under risk-neutral dynamics
v0 = 0.25**2 # Initial variance under risk-neutral dynamics
rho = 0.7 # Correlation between returns and variances under risk-neutral dynamics
sigma = 0.6 # Volatility of volatility

Эти параметры закладывают основу для моделирования модели Хестона. Корректируя эти значения, вы можете изучить различные сценарии и получить представление о том, как изменения параметров влияют на цену актива и динамику волатильности.

В следующих разделах мы применим эти параметры и выполним моделирование модели Хестона по методу Монте-Карло, что даст практическое представление о том, как модель ведет себя в реальных приложениях.

4. Моделирование по методу Монте-Карло

Теперь пришло время применить модель Хестона в действии. Мы предоставили код на Python для моделирования цен на активы и волатильности с течением времени. Вы найдете пошаговое объяснение логики кода, от инициализации параметров до выборки коррелированных броуновских движений. Этот раздел соединяет теорию с практической реализацией.

Реализация модели Хестона в Python

Давайте начнем с кода на Python для моделирования модели Хестона по методу Монте-Карло:def heston_model_sim(S0, v0, rho, kappa, theta, sigma, T, N, M):
«»»
Inputs:
— S0, v0: Initial parameters for asset and variance
— rho : Correlation between asset returns and variance
— kappa : Rate of mean reversion in variance process
— theta : Long-term mean of variance process
— sigma : Volatility of volatility / volatility of variance process
— T : Time of simulation in years
— N : Number of time steps
— M : Number of scenarios / simulations

Outputs:
— Asset prices over time (numpy array)
— Variance over time (numpy array)
«»»
# Initialize other parameters
dt = T / N
mu = np.array([0, 0])
cov = np.array([[1, rho], [rho, 1]])

# Arrays for storing prices and variances
S = np.full(shape=(N + 1, M), fill_value=S0)
v = np.full(shape=(N + 1, M), fill_value=v0)

# Sampling correlated Brownian motions under risk-neutral measure
Z = np.random.multivariate_normal(mu, cov, (N, M))

for i in range(1, N + 1):
S[i] = S[i — 1] * np.exp((r — 0.5 * v[i — 1]) * dt + np.sqrt(v[i — 1] * dt) * Z[i — 1, :, 0])
v[i] = np.maximum(v[i — 1] + kappa * (theta — v[i — 1]) * dt + sigma * np.sqrt(v[i — 1] * dt) * Z[i — 1, :, 1], 0)

return S, v

Логика симуляции:

  1. Мы инициализируем ключевые параметры, такие как матрицы временного шага (dt), среднего (mu) и ковариации (cov), чтобы упростить моделирование.
  2. Мы создаем массивы S и v для хранения цен активов и волатильности с течением времени соответственно.
  3. Мы отбираем коррелированные броуновские движения (Z) в рамках нейтрального к риску показателя, что является важным шагом для моделирования цен на активы и волатильности.
  4. Используя цикл for, мы перебираем временные шаги, обновляя цены активов (S) и волатильности (v) на основе дискретизированных уравнений модели Хестона.

Выполнив этот код с заданными параметрами, мы сгенерируем несколько траекторий цены актива и траекторий волатильности. Эти симуляции дают представление о том, как модель Хестона может отражать реальную динамику, включая кластеризацию волатильности и возврат к среднему значению.

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

5. Визуализация моделирования модели Хестона

Представление основных средств и дисперсионных путей по методу Монте-Карло

Теперь мы вдохнем жизнь в моделирование модели Хестона методом Монте-Карло, которое мы выполнили в предыдущем разделе. Визуализация результатов имеет решающее значение для понимания того, как цены на активы и волатильность изменяются с течением времени в динамике модели Хестона.

5.1 Траектории цены актива

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

5.2 Траектории волатильности

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

5.3 Построение графика цен на активы и дисперсии с течением времени

rho_p = 0.98
rho_n = -0.98

S_p,v_p = heston_model_sim(S0, v0, rho_p, kappa, theta, sigma,T, N, M)
S_n,v_n = heston_model_sim(S0, v0, rho_n, kappa, theta, sigma,T, N, M)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,5))
time = np.linspace(0,T,N+1)
ax1.plot(time,S_p)
ax1.set_title(‘Heston Model Asset Prices’)
ax1.set_xlabel(‘Time’)
ax1.set_ylabel(‘Asset Prices’)
ax2.plot(time,v_p)
ax2.set_title(‘Heston Model Variance Process’)
ax2.set_xlabel(‘Time’)
ax2.set_ylabel(‘Variance’)
plt.show()

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

6. Распределение цен на активы:

Распределение цен активов при геометрическом броуновском движении (GBM) и модели Хестона

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

6.1 Понимание распределения цен на активы

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

6.2 Визуализация с помощью Kernel Density Estimation (KDE)

Чтобы визуализировать распределение цен на активы в определенный момент времени, мы можем построить графики плотности ядер. Эти графики показывают функцию плотности вероятности цен на активы, давая представление об основных тенденциях, дисперсии и асимметрии распределения.# simulate gbm process at time T
gbm = S0*np.exp( (r — theta**2/2)*T + np.sqrt(theta)*np.sqrt(T)*np.random.normal(0,1,M) )
fig, ax = plt.subplots()
ax = sns.kdeplot(S_p[-1], label=r»$\rho= 0.98$», ax=ax)
ax = sns.kdeplot(S_n[-1], label=r»$\rho= -0.98$», ax=ax)
ax = sns.kdeplot(gbm, label=»GBM», ax=ax)
plt.title(r’Asset Price Density under Heston Model’)
plt.xlim([20, 180])
plt.xlabel(‘$S_T$’)
plt.ylabel(‘Density’)
plt.legend()
plt.show()

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

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

7. Ловим улыбку волатильности

Улыбку волатильности можно уловить с помощью модели Хестона

В этом разделе мы сосредоточимся на понятии «улыбки волатильности» и на том, как ее можно отразить с помощью модели Хестона. Улыбка волатильности является ключевым элементом в ценообразовании опционов и отражает подразумеваемую волатильность опционов с разными ценами исполнения, но одинаковым сроком погашения.

7.1 Понимание улыбки волатильности

Улыбка волатильности — это графическое представление подразумеваемой волатильности в зависимости от страйк-цен за определенный период времени до погашения. Обычно она принимает форму улыбки или кривой в форме ухмылки. Это явление возникает из-за того, что опционные трейдеры часто наблюдают более высокую подразумеваемую волатильность опционов «вне денег» (OTM) и «в деньгах» (ITM) по сравнению с опционами «при деньгах» (ATM).

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

Чтобы отразить улыбку волатильности с помощью модели Хестона, мы рассчитаем подразумеваемую волатильность для диапазона страйк-цен и визуализируем, как они меняются. Подразумеваемая волатильность — это волатильность, подразумеваемая рыночными ценами опционов.rho = -0.7
S,v = heston_model_sim(S0, v0, rho, kappa, theta, sigma,T, N, M)

# Set strikes and complete MC option price for different strikes
K = np.arange(20,180,2)

puts = np.array([np.exp(-r*T)*np.mean(np.maximum(k-S,0)) for k in K])
calls = np.array([np.exp(-r*T)*np.mean(np.maximum(S-k,0)) for k in K])

put_ivs = implied_vol(puts, S0, K, T, r, flag=’p’, q=0, return_as=’numpy’, on_error=’ignore’)
call_ivs = implied_vol(calls, S0, K, T, r, flag=’c’, q=0, return_as=’numpy’)

plt.plot(K, call_ivs, label=r’IV calls’)
plt.plot(K, put_ivs, label=r’IV puts’)
plt.ylabel(‘Implied Volatility’)
plt.xlabel(‘Strike’)
plt.title(‘Implied Volatility Smile from Heston Model’)
plt.legend()
plt.show()

7.3 Практические выводы

  • Форма улыбки: Типичная улыбка волатильности имеет U-образный рисунок, указывающий на то, что опционы OTM и ITM имеют более высокую подразумеваемую волатильность из-за восприятия рынком большего риска при экстремальных движениях цен.
  • Цены на опционы: Улыбка волатильности имеет значительные последствия для ценообразования опционов. Он влияет на стоимость хеджирования и определение опционных премий.
  • Оценка риска: Трейдеры и риск-менеджеры используют улыбку волатильности для оценки потенциальных рисков, связанных с их опционными портфелями.

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

В заключительном разделе мы завершим наше исследование модели Хестона, суммируем основные выводы и предоставим дополнительные ресурсы для дальнейшего обучения.

8. Резюме

В этом уроке мы отправились в путешествие в мир количественных финансов, уделяя особое внимание моделированию модели Хестона в Python. Мы исследовали сложную динамику модели Хестона, от стохастической волатильности до нейтрального к риску ценообразования, и увидели, что эта модель предлагает более тонкий подход к ценообразованию опционов по сравнению с традиционными моделями, такими как Блэк-Шоулз.

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

Основные выводы, сделанные в ходе нашего исследования, включают:

  1. Моделирование стохастической волатильности: Модель Хестона — это широко используемая стохастическая модель волатильности, которая предлагает более тонкий подход к ценообразованию опционов по сравнению с моделью Блэка-Шоулза. Он рассматривает динамический характер волатильности, которая является критическим фактором на финансовых рынках.
  2. Реальная и рисковая динамика: Важно понимать разницу между реальной и нейтральной динамикой ценообразования. Нейтральный к риску показатель упрощает расчеты и приводит их в соответствие с рыночными ценами, что делает его ценным инструментом для ценообразования опционов.
  3. Дискретизация Эйлера: Мы исследовали дискретизацию Эйлера, численный метод, используемый для аппроксимации стохастических дифференциальных уравнений (СДУ) с непрерывным временем. Этот метод имеет решающее значение при оценке вариантов со сложными характеристиками с помощью модели Хестона.
  4. Параметры модели: Мы определили и обсудили значимость ключевых параметров модели, включая начальную цену актива, время до погашения, безрисковую ставку и специфичные для модели Хестона параметры, такие как средняя скорость возврата (κ), долгосрочная дисперсия (θ) и волатильность волатильности (σ).
  5. Моделирование по методу Монте-Карло: Мы реализовали моделирование модели Хестона по методу Монте-Карло на Python, что позволило нам генерировать несколько траекторий цены актива и траекторий волатильности. Это практическое применение продемонстрировало способность модели фиксировать динамику реального мира.
  6. Визуализация: Визуализации сыграли решающую роль в нашем уроке. Мы визуализировали траектории цен на активы, траектории волатильности, распределение цен на активы и улыбки подразумеваемой волатильности, чтобы получить представление о поведении модели и ее применении в количественных финансах.

Модель Хестона является универсальным инструментом в арсенале количественных финансов. Его способность улавливать динамику волатильности, наряду с его практическим применением в ценообразовании опционов и управлении рисками, делает его ценным активом как для профессионалов в области финансов, так и для исследователей.

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

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

9. Список литературы

1. Хестон С.Л. Закрытое решение для опционов со стохастической волатильностью с применением облигаций и валютных опционов. Обзор финансовых исследований. 1993; 6(2):327–343.

2. Руа Л. Эйлер и дискретизация Мильштейна. Фабрис Дуглас Руа. Дата обращения: 19 ноября 2023. https://www.frouah.com/pages/finmath.html

Источник