这是 Python 进阶课的第六节 - SciPy 下,进阶课的目录如下:
之前基础版的 11 节的目录如下:
上节主要从插值、数值积分和优化三大功能介绍 scipy,下节从有限差分和线性回归两大功能来介绍 scipy。
偏微分方程有限差分 (finite difference, FD) 算是金融工程中比较难学的,但我会讲里面所有难懂的概念可视化出来。下图可是我用 matplotlib 写代码画出 (敢问谁会这么用心来这么做) 用 FD 求解 PDE 所了解的核心元素:
网格:空间维度的 S (对应标的资产价格),时间维度的 t (对应衍生品到期日)
终止条件:任何金融产品都是支付函数,可设为 PDE 的终止条件
边界条件:很多金融产品的支付在标的很大或很小时会确定比如看涨期权
在标的为零时支付为零
在标的很大时近似为一个远期。
求解格式:完全显式 (explicit)、完全隐式 (implicit) 和克莱克尼克尔森 (Crank-Nicolson)
在求解 PDE 时,我只说五句话,配着下面的图 (也是用 matpplotlib 写代码画的)。
水平面上的灰点是网格
红线是终值条件 (产品在到期日支付函数)
两条深青线是边界条件 (产品在标的上下界时的支付)
蓝点是期权值 (产品在 0 时点的值)
从 T4 到 T0 一步步解的 (从后往前解)
以上步骤弄明白了,要得到更精确的值,需要把 S 和 t 轴上的点打的更密就完事了,你看,其他书讲的很难懂的 PDE FD 我用几张简图可视化一下就好懂多了吧。
FD 对于定价标的少于 4 个的金融衍生品是个很好的方法:
高效:和蒙特卡洛方法比快很多
稳定:和蒙特卡洛方法比稳很多
普适:对于不同产品整个求解过程几乎一样,不同的就是设定不同的上下界、终止条件和边界条件。
在 PDE FD 中用到了稀疏矩阵 (sparse matrix),这个算是 SciPy 中最有内容的知识点之一。和稠密矩阵相比,稀疏矩阵的最大好处就是节省大量的内存空间来储存零。稀疏矩阵本质上还是矩阵,只不过多数位置是空的,那么存储所有的 0 非常浪费。稀疏矩阵的存储机制有很多种 (列出常用的五种):
COO (Coordinate List Format):座标格式,容易创建但是不便于矩阵计算,用
coo_matrix
CSR (Compressed Sparse Row): 压缩行格式,不容易创建但便于矩阵计算,用
csr_matri
CSC (Compressed Sparse Column): 压缩列格式,不容易创建但便于矩阵计算,用
csc_matrix
LIL (List of List): 内嵌列表格式,支持切片但也不便于矩阵计算,用
lil_matrix
DIA (Diagnoal):对角线格式,适合矩阵计算,用
dia_matrix
五种稀疏矩阵的动图如下:
付费用户(付 1 赠 1)可以获得:
观看课程视频 (85 分钟)
Python 代码 (Jupyter Notebook)
偏微分方程有限差分 PDF
Jupyter Notebook