这是基于量化金融领域不同主题的 Jupyter 笔记本合集。
几乎! :)
这只是我认为有趣的主题和算法的集合。
它包含了一些现在不那么流行的主题,但它们可能非常强大。通常,PDE 方法、Lévy 过程、傅立叶方法或卡尔曼滤波器等主题在从业者中不太受欢迎,他们更喜欢使用更标准的工具。
这些笔记本的目的是通过交互式 Python 实现展示这些有趣的主题,展示它们的实际应用。
不适合绝对的初学者。
这些主题需要随机微积分、金融数学和统计学的基础知识。 Python 编程的基本知识也是必要的。
在这些笔记本中,我不会解释什么是看涨期权,或者什么是随机过程,或者偏微分方程。
然而,每次我介绍一个概念时,我也会添加一个指向相应维基页面或参考手册的链接。这样,读者就能立即明白我在说什么。
这些笔记适用于至少学过一门金融数学和统计学本科课程的科学、经济学或金融专业的学生。
自学成才的学生或从业者应该至少阅读一本金融数学的入门书籍。
首先,这不是一本书!
每个笔记本(几乎)都是独立于其他笔记本的。因此您可以只选择您感兴趣的笔记本!
- Every notebook contains python code ready to use!
在互联网上找到用 python 实现的金融模型的示例并不容易,这些模型可以立即使用并且有详细的文档记录。
我认为量化金融的初学者会发现这些笔记本非常有用!
此外,Jupyter 笔记本是交互式的,即您可以在笔记本内运行代码。这或许是最好的学习方式!
如果您使用 Github 或 NBviewer 打开笔记本,有时数学公式无法正确显示。因此,我建议您克隆/下载存储库。
不!
我会不时上传更多笔记本。
目前,我对随机过程、卡尔曼滤波器、统计等领域感兴趣。将来我将添加有关这些主题的更多有趣的笔记本。
如果您有任何疑问,或者发现错误,或者有改进建议,请随时与我联系。
1.1) Black-Scholes数值方法(对数正态分布、测量变化、蒙特卡罗、二项式方法) 。
1.2) SDE模拟和统计(路径生成、置信区间、假设检验、几何布朗运动、Cox-Ingersoll-Ross过程、Euler Maruyama方法、参数估计)
1.3)傅立叶反演方法(反演公式、数值反演、期权定价、FFT、Lewis公式)
1.4) SDE、Heston模型(相关布朗运动、Heston路径、Heston分布、特征函数、期权定价)
1.5) SDE、Lévy 过程(Merton、方差 Gamma、NIG、路径生成、参数估计)
2.1) Black-Scholes PDE (PDE离散化、隐式方法、稀疏矩阵教程)
2.2)奇异期权(二元期权、障碍期权、亚洲期权)
2.3)美式期权(PDE、提前行权、二项式方法、Longstaff-Schwartz、永续看跌期权)
3.1) Merton Jump-Diffusion PIDE (隐式-显式离散化、离散卷积、模型限制、蒙特卡罗、傅立叶反演、半闭公式)
3.2)方差伽玛PIDE (近似跳跃扩散PIDE,蒙特卡罗,傅里叶反演,与Black-Scholes比较)
3.3)正态逆高斯 PIDE (近似跳跃扩散 PIDE、蒙特卡罗、傅立叶反演、Lévy 测度的属性)
4.1)交易成本定价(Davis-Panas-Zariphopoulou模型、奇异控制问题、HJB变分不等式、无差异定价、二项式树、性能)
4.2)波动率微笑和模型校准(波动率微笑、寻根方法、校准方法)
5.1)线性回归和卡尔曼滤波器(市场数据清理、线性回归方法、卡尔曼滤波器设计、参数选择)
5.2)卡尔曼自相关跟踪 - AR(1) 过程(自回归过程、估计方法、卡尔曼滤波器、卡尔曼平滑器、变量自相关跟踪)
5.3)波动率跟踪(赫斯顿模拟、假设检验、分布拟合、估计方法、GARCH(1,1)、卡尔曼滤波器、卡尔曼平滑器)
6.1) Ornstein-Uhlenbeck 过程和应用(参数估计、命中时间、Vasicek PDE、卡尔曼滤波器、交易策略)
7.1)经典MVO (均值方差优化,二次规划,只有多头和多空,封闭公式)
A.1)附录:线性方程(LU、Jacobi、Gauss-Seidel、SOR、Thomas)
A.2)附录:代码优化(cython、C 代码)
A.3)附录:Lévy 过程理论回顾(基本和重要定义、定价 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 使用的名称。
如果您更喜欢创建使用 python 3.11.4 的venv
,可以按如下方式操作:
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 .
然后在 shell 中输入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