Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Установка

git clone https://github.com/bimov/comp_math.git
cd comp_math
pip install -r requirements.txt

Запуск

Для получения графиков использовалась следующая команда:

python3 main.py --ticker AAPL --start 2017-01-01 --end 2019-12-31   --maturity 2020-01-31 --r 0.02 --n-s 60 --n-t 40 --strike-policy median

Пояснение параметров

Параметр Значение Описание
--ticker AAPL Биржевой тикер актива
--start 2017-01-01 Дата начала выборки котировок
--end 2019-12-31 Дата окончания выборки котировок
--maturity 2020-01-31 Дата экспирации T — день, когда опцион перестаёт действовать
--r 0.02 Безрисковая процентная ставка (в долях годовых, 2%)
--n-s 60 Количество узлов сетки по цене актива (S)
--n-t 40 Количество узлов сетки по времени (t)
--strike-policy median Правило выбора страйка (K): медиана цен за период

Численная модель

Уравнение Дюпира

После построения сеток по цене базового актива S_i и времени до экспирации τ_j решается уравнение Дюпира для цены колл-опциона C(S, τ) при заданной локальной волатильности σ(τ) и безрисковой ставке r. Начальное условие для τ = 0 задаётся как выплата опциона max(S − K, 0) и берётся напрямую из сетки цен актива.

Метод Крэнка—Николсона

Дифференциальное уравнение приводится к равномерной сетке по S и τ, после чего применяется неявная схема Крэнка—Николсона. На каждом временном шаге строится трёхдиагональная система коэффициентов α, β, γ, соответствующих дискретизации второй и первой производных по S, и решается методом прогонки (алгоритм Томаса). Переход от шага τ_j к τ_{j+1} вычисляется функцией _crank_nicolson_step, где половинное взвешивание между текущим и будущим слоями обеспечивает устойчивость и вторую точность по времени.

Результаты

После запуска в папке out/ сохраняются:

  • price_series.png — график динамики цены актива
  • bs_surface_3d.png — 3D-поверхность цены опциона C(S, t)
  • bs_surface_heatmap.png — тепловая карта C(S, t) (Можно сказать, что тепловая карта это проекция 3D-поверхности C(S, t) на плоскость
  • bs_surface.csv — табличные данные рассчитанной поверхности

Калибровка Локальной Волатильности

Постановка Задачи

Мы решали обратную задачу финансовой математики: по наблюдаемым рыночным ценам опционов восстанавливаем локальную волатильность σ(S,t), которая согласуется с этими ценами.

Основное уравнение (Дюпир)

Для европейских опционов локальная волатильность удовлетворяет уравнению: ∂C/∂T = (1/2) * σ²(K, T) * K² * (∂²C/∂K²) - r * K * (∂C/∂K) где:

  • C - цена опциона колл
  • T - время
  • K - страйк
  • r - безрисковая ставка

Ключевая Идея

Вместо калибровки полной поверхности σ(S,τ) мы параметризуем задачу через интегрированную дисперсию: w(τ) = (1/τ) ∫₀ᵗ σ²(s) ds

Это преобразует бесконечномерную задачу в конечномерную оптимизацию.

Алгоритм Калибровки

1. Параметризация

  • Временные узлы: τ₁, τ₂, ..., τₙ
  • Искомая дисперсия: v(τᵢ) = σ²(τᵢ)
  • Интегрированная дисперсия: w(τ)

2. Численное Интегрирование

Интегрированная дисперсия вычисляется методом трапеций:w(τᵢ) = (1/τᵢ) ∑[j=1→i] ½(vⱼ + vⱼ₋₁)(τⱼ - τⱼ₋₁)

3. Целевая Функция

Минимизируем расхождение между модельной и рыночной интегрированной дисперсией: minᵥ [RMS(w_model(τ) - w_market(τ)) + λ·RMS(v''(τ))]

где:

  • Первый член: точность воспроизведения рыночных данных
  • Второй член: регуляризация на гладкость

4. Процесс Оптимизации

  1. Инициализация: начальное приближение волатильности
  2. Вычисление интегрированной дисперсии
  3. Решение прямой задачи Дюпира для текущей волатильности
  4. Обновление параметров методом L-BFGS-B
  5. Повторение до сходимости

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages