第10节 显示有限差分法计算期权价格

  • 10.1 简介
  • 10.2 计算美式看跌期权价格算法
  • 10.3 算法Python代码实现
  • 10.4 参考资料

10.1 简介

  • 有限差分法\bf有限差分法有限差分法
            将微分方程表示为定义在离散的格点上的差分方程,由给定的边界条件通过相近格点间的差分关系迭代计算出未知边界上的数值。显式和隐式差分法的区别主要在于替代计算微分方程的差分方程中对微分项的离散化近似表示不同(主要是∂f∂t\frac{\partial f}{\partial t}∂t∂f​项的表示不同)。使得显示差分法可以直接由已知边界条件递推出目标边界上的数值,而隐式差分法中则不断需要解方程组进行递推计算。但显示差分法计算出的结果不一定稳定,小的误差可能被放大使得计算出的结果不对。
  • 显式差分法计算期权价格\bf显式差分法计算期权价格显式差分法计算期权价格
            我们知道期权价格满足微分方程:
    ∂f∂t+rS∂f∂S+12σ2∂2f∂S2=rf.\frac{\partial f}{\partial t} + rS\frac{\partial f}{\partial S} +\frac{1}{2}\sigma^2\frac{\partial^2f}{\partial S^2} = rf \; .∂t∂f​+rS∂S∂f​+21​σ2∂S2∂2f​=rf.
    将其写成差分形式:
    rf(i−1,j)−f(i,j)−f(i−1,j)Δt=rS(i,j)f(i,j+1)−f(i,j−1)2ΔS+12σ2S2(i,j)f(i,j+1)+f(i,j−1)−2f(i,j)ΔS2.rf(i-1,j) -\frac{f(i, j)-f(i-1,j)}{\Delta t} = rS(i,j)\frac{f(i,j+1)-f(i,j-1)}{2\Delta S}+\frac{1}{2}\sigma^2S^2(i,j)\frac{f(i,j+1)+f(i,j-1)-2f(i,j)}{\Delta S^2} \;.rf(i−1,j)−Δtf(i,j)−f(i−1,j)​=rS(i,j)2ΔSf(i,j+1)−f(i,j−1)​+21​σ2S2(i,j)ΔS2f(i,j+1)+f(i,j−1)−2f(i,j)​.
    其中f(i,j)=f(iΔt,jΔS),S(i,j)=jΔS,Δt=T/N,ΔS=Smax/Mf(i,j) = f(i\Delta t, j\Delta S),\;S(i,j)=j\Delta S,\; \Delta t =T/N, \; \Delta S=S_{max}/Mf(i,j)=f(iΔt,jΔS),S(i,j)=jΔS,Δt=T/N,ΔS=Smax​/M。
    然后我们可以将i−1i-1i−1时刻的f(i−1,j)f(i-1,j)f(i−1,j)用iii时刻的数值表示:
    f(i−1,j)=ajf(i,j−1)+bjf(i,j)+cjf(i,j−1).f(i-1,j) = a_jf(i,j-1)+b_jf(i,j)+c_jf(i,j-1) \;.f(i−1,j)=aj​f(i,j−1)+bj​f(i,j)+cj​f(i,j−1).
    aj=11+rΔt(−12jΔt+12σ2j2Δt),bj=11+rΔt(1−σ2j2Δt),a_j = \frac{1}{1+r\Delta t}\left(-\frac{1}{2}j\Delta t+\frac{1}{2}\sigma^2j^2\Delta t\right), \;\;b_j = \frac{1}{1+r\Delta t}(1-\sigma^2j^2\Delta t),aj​=1+rΔt1​(−21​jΔt+21​σ2j2Δt),bj​=1+rΔt1​(1−σ2j2Δt),
    cj=11+rΔt(12jΔt+12σ2j2Δt).c_j = \frac{1}{1+r\Delta t}\left(\frac{1}{2}j\Delta t+\frac{1}{2}\sigma^2j^2\Delta t\right) \;.cj​=1+rΔt1​(21​jΔt+21​σ2j2Δt).

    这样我们就可以从期权执行时刻开始一列一列往回递推期权价格。需要说明的是,对于股价的上下边界SmaxS_{max}Smax​和0,如果我们考虑欧式看跌期权,则SmaxS_{max}Smax​只要足够大(比如3S03S_03S0​),则上边界处期权价格都可以近似为0,下边界S=0S=0S=0处期权价格都为执行价格KKK。欧式看涨期权的价格可以由看跌-看涨平价关系间接得出。对于美式看涨期权,由于其总是不会被提前执行,所以其价格等于欧式看涨,对于美式看跌期权,则只需要在价格递推时额外考虑应不应该在当前格点行使期权。

10.2 计算美式看跌期权价格算法

  1. 确定时间和股价变化范围,0≤t≤T,0≤S≤Smax,Smax=3S00\leq t\leq T,\; 0\leq S\leq S_{max},\;S_{max}=3S_00≤t≤T,0≤S≤Smax​,Smax​=3S0​,并将区间离散化为二维等间距网格点,Δt=T/N,ΔS=Smax/M\Delta t = T/N, \; \Delta S = S_{max}/MΔt=T/N,ΔS=Smax​/M。
  2. 确定三个边界上的期权价格,t=Tt=Tt=T时f(N,j)=max⁡(0,K−jΔS)f(N,j) = \max{(0, K-j\Delta S)}f(N,j)=max(0,K−jΔS),S=0S=0S=0时f(i,0)=Kf(i,0) = Kf(i,0)=K,S=SmaxS=S_{max}S=Smax​时f(i,M)=0f(i,M)=0f(i,M)=0。
  3. 从t=Tt=Tt=T的边界开始,往回递推出上一个时刻所有格点上的期权价格。递推公式使用上面简介中给出的表达式。
  4. 考虑应不应该在新计算出的格点处执行美式看跌期权,即更新f(i,j)=max⁡(f(i,j),K−ΔSj)f(i,j) = \max{(f(i,j), K-\Delta Sj)}f(i,j)=max(f(i,j),K−ΔSj)。
  5. 重复步骤3、4直到初始时刻,然后使用线性插值法得出S=S0S=S_0S=S0​处的期权价格。

10.3 算法Python代码实现

def American_put_explicit(r, sigma, S_0, K, T, M, N):# S_max = 3*S_0, 分为 M 段,T分为 N 段。dS = 3*S_0/Mdt = T/N# 使用两列格点期权价格不断往回迭代计算, f1为左边列,f2为右边列。f1 = [max(0.0, K-i*dS) for i in range(M+1)]f2 = list(f1)for i in range(N-1, -1, -1):f2 = list(f1)# 上下界边界条件。f1[0] = Kf1[-1] = 0for j in range(1, M, 1):""" M, N 的选取应该最好使得 sigma*sigma*j*j*dt 小于 1。"""f1[j] = f2[j-1]*(-0.5*r*j*dt+0.5*sigma*sigma*j*j*dt)/(1+r*dt)f1[j] += f2[j]*(1-sigma*sigma*j*j*dt)/(1+r*dt)f1[j] += f2[j+1]*(0.5*r*j*dt+0.5*sigma*sigma*j*j*dt)/(1+r*dt)# 判断是否应该在格点执行美式期权。for j in range(M+1):f1[j] = max(f1[j], K-j*dS)# 线性插值得期权初始时刻在 S_0 处的价格。pos = int(S_0/dS)put_price = f1[pos] + (f1[pos+1]-f1[pos])/dS*(S_0-dS*pos)return put_price# 计算示例。
if __name__ == "__main__":put_price = American_put_explicit(0.1, 0.4, 50, 60, 1.0, 150, 50000)print("American put price: {0:0.5f}".format(put_price))
American put price: 12.07188

10.4 参考资料

  1. 《期权、期货及其他衍生产品》,John C. Hull 著,王勇、索吾林译。

第10节 显示有限差分法计算期权价格相关推荐

  1. 第 10 节 操作内联样式

    第10节 操作内联样式 操作内联样式 操作内联样式 1.通过JS修改元素的样式: 1)语法:元素.style.样式名 = 样式值 注意: 如果CSS的样式名中含有 -,这种名称在JS中是不合法的,比如 ...

  2. 《Unity 3.x游戏开发实例》——2.10节注意

    本节书摘来自异步社区<Unity 3.x游戏开发实例>一书中的第2章,第2.10节注意,作者 [加]Ryan Henson Creighton,更多章节内容可以访问云栖社区"异步 ...

  3. 《Photoshop修色圣典(第5版)》—第1章1.10节何时两种效果最佳

    本节书摘来自异步社区<Photoshop修色圣典(第5版)>一书中的第1章1.10节何时两种效果最佳,作者[美]Dan Margulis,更多章节内容可以访问云栖社区"异步社区& ...

  4. 数据仓库工具箱 第10节 金融服务

    文章目录 数据仓库工具箱 第10节 金融服务 银行案列研究与总线矩阵 对维度进行分类以避免维度太少的陷阱 家庭维度 多值维度与权重因子 报表的动态范围值实时 数据仓库工具箱 第10节 金融服务 金融服 ...

  5. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第1课1.10节使用视图命令

    本节书摘来自异步社区<Adobe Illustrator CS6中文版经典教程(彩色版)>一书中的第1课1.10节使用视图命令,作者[美]Adobe公司,更多章节内容可以访问云栖社区&qu ...

  6. 《Unity开发实战》——2.9节显示迷你地图

    本节书摘来自华章社区<Unity开发实战>一书中的第2章,第2.9节显示迷你地图,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云栖社区&q ...

  7. JEECMS的新浪图集在IE9、10不能显示大图片BUG的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 最近我给学校对外交流合作处做的网站,因为是学java开发,所以就基于JEECMS去做. 等到项目做好,差不多要 交工的时候,发 ...

  8. 那个分分钟处理10亿节点图计算的Plato,现在怎么样了?

    受访者 | 于东海 记者 | 夕颜 出品 | CSDN(ID:CSDNnews) 「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖 ...

  9. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.10节使用内容识别修补...

    本节书摘来自异步社区<Adobe Photoshop CS6中文版经典教程(彩色版)>一书中的第2课2.10节使用内容识别修补,作者[美]Adobe公司,更多章节内容可以访问云栖社区&qu ...

最新文章

  1. 输入的命令集锦(补充)
  2. python小学生教材-python纳入小学生教材,以后该如何辅导娃的作业?
  3. Sed教程(一):简介、环境设置、工作流程
  4. 【图解Java】这下可以真的弄懂Java IO了~
  5. 【转】CLASS ALV(CL_GUI_ALV_GRID) 添加保存布局(Save Layout)的按钮
  6. 海康威视Web端视频开发
  7. SAP UI5 初学者教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解试读版
  8. 学计算机专业独立显卡有必要吗,不玩游戏独立显卡有什么作用_如果不玩游戏需要选择独立显卡吗-系统城...
  9. java treemap value排序_【TreeMap】对Map按key和value分别排序
  10. 很有趣的一道题:找出有毒的瓶子
  11. drbd相关知识点解析
  12. SharePoint2010部署(一)---数据库的安装
  13. 训练AI 玩王者荣耀,这算不算开挂?!(附源码)
  14. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
  15. mac整站下载工具wget
  16. python 英语分词_python实现英文文本分词
  17. 二维数组行列互调显示出来。如:123456789变成147258369。
  18. 控制台安装selenium运行浏览器报错TypeError: ‘module‘ object is not callable
  19. SFP光模块电气接口参数详解
  20. nc服务器修改过ip地址,nc服务器修改过ip地址

热门文章

  1. 企业通讯录让沟通协作效率更高
  2. 沣东新城镐京遗址规划_沣东新城稳步推进镐京遗址保护 确保文化遗产保护成果惠及民生...
  3. 芯片刀片服务器,超微SuperBlade系列刀片服务器产品介绍
  4. 基于JAVA的公交调度系统
  5. 先来先服务算法、运行时间最短者优先算法和最高响应比优先调度算法_CPU的调度器scheduler...
  6. MockLab:基于MockLab的第三方平台对接测试
  7. 大话设计模式之观察者模式
  8. FFMPEG API函数根据SDP文件接收RTP媒体流
  9. 郑州樱桃计算机科技,又到一年樱桃成熟时 盘点郑州7个樱桃采摘地
  10. Qt+opencv+android