Это коллекция блокнотов Jupyter, посвященных различным темам в области количественных финансов.
Почти! :)
Это просто сборник тем и алгоритмов, которые на мой взгляд интересны.
Он содержит несколько тем, которые сейчас не так популярны, но могут оказаться очень полезными. Обычно такие темы, как методы УЧП, процессы Леви, методы Фурье или фильтр Калмана, не очень популярны среди практиков, которые предпочитают работать с более стандартными инструментами.
Цель этих блокнотов — представить эти интересные темы, показав их практическое применение посредством интерактивной реализации на Python.
Не для абсолютных новичков.
Эти темы требуют базовых знаний в области стохастического исчисления, финансовой математики и статистики. Также необходимы базовые знания программирования на Python.
В этих тетрадях я не буду объяснять, что такое опцион колл, что такое случайный процесс или уравнение в частных производных.
Однако каждый раз, когда я представляю концепцию, я также добавляю ссылку на соответствующую вики-страницу или на справочное руководство. Таким образом, читатель сможет сразу понять, о чем я говорю.
Эти заметки предназначены для студентов, изучающих естественные науки, экономику или финансы, которые прошли хотя бы один курс бакалавриата по финансовой математике и статистике.
Студенты-самоучки или практики должны прочитать хотя бы вводную книгу по финансовой математике.
Во-первых, это не книга!
Каждый блокнот (почти) независим от других. Поэтому вы можете выбрать только тот блокнот, который вас интересует!
- Every notebook contains python code ready to use!
Нелегко найти в Интернете примеры финансовых моделей, реализованных на Python, готовых к использованию и хорошо документированных.
Я думаю, что новичкам в количественных финансах эти блокноты будут очень полезны!
Более того, блокноты Jupyter интерактивны, т.е. вы можете запускать код внутри блокнота. Наверное, это лучший способ учиться!
Если вы открываете блокнот с помощью Github или NBviewer, иногда математические формулы отображаются некорректно. По этой причине я предлагаю вам клонировать/скачать репозиторий.
Нет!
Время от времени буду загружать новые блокноты.
На данный момент меня интересуют области случайных процессов, фильтра Калмана, статистики и многого другого. В будущем добавлю ещё интересные блокноты на эти темы.
Если у вас есть какие-либо вопросы, или вы обнаружили какие-то ошибки, или у вас есть предложения по улучшению, не стесняйтесь обращаться ко мне.
1.1) Численные методы Блэка-Шоулза (логнормальное распределение, замена меры, Монте-Карло, биномиальный метод) .
1.2) Моделирование и статистика SDE (генерация путей, доверительные интервалы, проверка гипотез, геометрическое броуновское движение, процесс Кокса-Ингерсолла-Росса, метод Эйлера Маруямы, оценка параметров)
1.3) Методы обращения Фурье (формула обращения, численная инверсия, ценообразование опционов, БПФ, формула Льюиса)
1.4) SDE, модель Хестона (коррелированные броуновские движения, пути Хестона, распределение Хестона, характеристическая функция, ценообразование опционов)
1.5) SDE, процессы Леви (Мертон, дисперсия гамма, NIG, генерация пути, оценка параметров)
2.1) УЧП Блэка-Шоулза (дискретизация УЧП, неявный метод, учебное пособие по разреженной матрице)
2.2) Экзотические опционы (Бинарные опционы, Барьерные опционы, Азиатские опционы)
2.3) Американские опционы (PDE, раннее исполнение, биномиальный метод, Лонгстафф-Шварц, бессрочный опцион)
3.1) PIDE скачка-диффузии Мертона (неявная-явная дискретизация, дискретная свертка, ограничения модели, Монте-Карло, инверсия Фурье, полузакрытая формула)
3.2) Дисперсионная гамма-ПИДЕ (приближенная скачко-диффузионная ПИДЕ, Монте-Карло, инверсия Фурье, сравнение с Блэком-Шоулзом)
3.3) Нормальный обратный гауссов ПИДЕ (аппроксимированный скачко-диффузионный ПИДЕ, Монте-Карло, инверсия Фурье, свойства меры Леви)
4.1) Ценообразование с учетом трансакционных издержек (модель Дэвиса-Панаса-Зарифопулу, сингулярная задача управления, вариационное неравенство HJB, ценообразование безразличия, биномиальное дерево, производительность)
4.2) Улыбка волатильности и калибровка модели (Улыбка волатильности, методы поиска корней, методы калибровки)
5.1) Линейная регрессия и фильтр Калмана (очистка рыночных данных, методы линейной регрессии, построение фильтра Калмана, выбор параметров)
5.2) Отслеживание автокорреляции Калмана - процесс AR(1) (процесс авторегрессии, методы оценки, фильтр Калмана, сглаживатель Калмана, отслеживание переменной автокорреляции)
5.3) Отслеживание волатильности (моделирование Хестона, проверка гипотез, подбор распределения, методы оценки, GARCH(1,1), фильтр Калмана, сглаживатель Калмана)
6.1) Процесс Орнштейна-Уленбека и его приложения (оценка параметров, время попадания, PDE Васичека, фильтр Калмана, торговая стратегия)
7.1) Классический MVO (оптимизация средней дисперсии, квадратичное программирование, только длинные и длинные-короткие, закрытая формула)
А.1) Приложение: Линейные уравнения (ЛУ, Якоби, Гаусса-Зейделя, СОР, Томаса)
A.2) Приложение: Оптимизация кода (cython, код C)
A.3) Приложение: Обзор теории процессов Леви (основные и важные определения, вывод PIDE ценообразования)
Виртуальная среда:
Здесь я объясняю, как создать виртуальную среду с помощью Anaconda и модуля Python venv.
Вы можете воссоздать мою протестированную виртуальную среду conda с помощью:
conda env create -f environment.yml
pip install -e .
Первая строка воссоздает виртуальную среду и устанавливает все пакеты.
Второй строкой мы просто устанавливаем локальный пакет FMNM
.
Если вы хотите создать новую среду с последней версией Python, вы можете сделать:
conda create -n FMNM python
conda activate FMNM
PACKAGES= $( tr ' n ' ' ' < list_of_packages.txt | sed " s/arch/arch-py/g " )
conda install ${PACKAGES[@]}
pip install -e .
где в третьей строке мы заменяем имя пакета arch
на arch-py
, имя, используемое conda.
Если вы предпочитаете создать venv
, использующий Python 3.11.4, вы можете сделать это следующим образом:
python3.11.4 -m venv --prompt FMNM python-venv
source python-venv/bin/activate
python3 -m pip install --upgrade pip
pip install --requirement requirements.txt
pip install -e .
Если вы предпочитаете использовать версию Python, уже установленную в вашей системе, вам просто нужно запустить
pip install --requirement list_of_packages.txt
pip install -e .
а затем введите в оболочке jupyter-notebook
или jupyter-lab
:
Однако если вы используете старые версии, могут возникнуть проблемы с совместимостью.
Докер:
Здесь мы запускаем блокноты с помощью jupyterlab:
Вы можете использовать docker-compose для создания контейнера:
docker-compose up --build -d
А затем остановите контейнер с помощью
docker-compose down
И откройте браузер по адресу http://localhost:8888/lab
Альтернативно, вы можете
docker build -t fmnm .
docker run --rm -d -p 8888:8888 --name Numeric_Finance fmnm