Волатильность — важнейшее понятие в финансовом анализе, отражающее степень изменения цены или стоимости финансового инструмента. Точный расчет волатильности необходим для оценки рисков, ценообразования опционов и управления портфелем. В этой статье мы рассмотрим различные методы расчета волатильности и предоставим примеры кода на Python для демонстрации их реализации.
Метод 1: Историческая волатильность
Историческая волатильность измеряет стандартное отклонение доходности цен за определенный период. Он дает представление о прошлых изменениях цены актива.
import numpy as np
def historical_volatility(prices):
returns = np.log(prices / prices.shift(1)).dropna()
volatility = np.sqrt(np.sum(returns 2) / len(returns)) * np.sqrt(252) # Assuming 252 trading days in a year
return volatility
# Usage example
stock_prices = [100, 105, 98, 102, 99, 110, 115, 108, 112, 105]
volatility = historical_volatility(stock_prices)
print(f"Historical volatility: {volatility}")
Метод 2: подразумеваемая волатильность
Подразумеваемая волатильность рассчитывается на основе цен опционов и представляет собой ожидание рынка относительно будущей волатильности. Он обычно используется в моделях ценообразования опционов, таких как модель Блэка-Шоулза.
from scipy.optimize import brentq
from scipy.stats import norm
def black_scholes_call_price(S, K, r, t, sigma):
d1 = (np.log(S / K) + (r + 0.5 * sigma 2) * t) / (sigma * np.sqrt(t))
d2 = d1 - sigma * np.sqrt(t)
call_price = S * norm.cdf(d1) - K * np.exp(-r * t) * norm.cdf(d2)
return call_price
def implied_volatility(S, K, r, t, market_price):
implied_vol = brentq(lambda x: black_scholes_call_price(S, K, r, t, x) - market_price, 0.0001, 10)
return implied_vol
# Usage example
stock_price = 100
strike_price = 105
risk_free_rate = 0.05
time_to_maturity = 0.5
option_price = 8.2
implied_vol = implied_volatility(stock_price, strike_price, risk_free_rate, time_to_maturity, option_price)
print(f"Implied volatility: {implied_vol}")
Метод 3: модели GARCH (обобщенная авторегрессия, условная гетероскедастичность).
Модели GARCH обычно используются для выявления кластеризации волатильности, т. е. тенденции, когда периоды высокой волатильности сменяются периодами высокой волатильности, и наоборот.
from arch import arch_model
def garch_volatility(returns):
model = arch_model(returns, vol='Garch', p=1, q=1)
results = model.fit(disp='off')
volatility = np.sqrt(results.conditional_volatility.iloc[-1])
return volatility
# Usage example
stock_returns = [0.02, -0.01, 0.03, -0.02, 0.01, 0.015, -0.012, 0.02, -0.015, 0.025]
volatility = garch_volatility(stock_returns)
print(f"GARCH volatility: {volatility}")
В этой статье мы рассмотрели три популярных метода расчета волатильности: историческую волатильность, подразумеваемую волатильность и модели GARCH. Эти методы дают ценную информацию о прошлых ценовых движениях и рыночных ожиданиях. Применяя эти методы с помощью примеров кода на Python, аналитики и трейдеры могут принимать обоснованные решения и эффективно управлять рисками в мире финансов.
Не забудьте выбрать подходящий метод в зависимости от конкретного контекста и характеристик данных. Включение расчетов волатильности в ваш набор инструментов финансового анализа улучшит ваше понимание динамики рынка и улучшит процессы принятия решений.