第7节 蒙卡模拟计算路径依赖型期权价格_bifnhlp的博客-程序员秘密

技术标签: 金融数值计算  

第7节 蒙卡模拟计算路径依赖型期权价格

7.1 简介

       
蒙特卡罗模拟计算期权价格是将股票价格变化过程离散化,通过随机数产生器对每一小段股价变化进行抽样,累计得到一次股价变化过程抽样结果,然后计算出对应的期权价格。进行多次股价变化过程抽样计算出期权价格的平均价并贴现,即为蒙卡模拟得出的期权价格。
       
由于抽样股价过程可以得到完整的股价变化路径,所以可以直接由抽样结果得到路径依赖型期权的价格。这是蒙特卡罗模拟计算期权价格相对于树形计算期权价格的一个优势。

7.2 蒙卡模拟计算回望/亚式期权价格算法

       
以浮动回望看涨期权和亚式平均价格看涨期权为例。浮动回望看涨期权执行时的价格为 max ⁡ ( S T − S m i n ,   0 ) \max(S_T-S_{min}, \, 0) max(STSmin,0) S T S_T ST为执行时刻股票价格, S m i n S_{min} Smin为历史股价极小值;平均价格看涨期权执行时价格为 max ⁡ ( S a v e − K ,   0 ) \max(S_{ave}-K,\,0) max(SaveK,0) K K K为约定执行价格, S a v e S_{ave} Save为历史平均股价。

  1. 根据给定参数,确定股价变化离散化后过程,这里我们使用指数形式。
    S ( t + Δ t ) = S ( t )   e ( r − 1 2 σ 2 ) Δ t + ε σ Δ t ,      ε ∼ N ( 0 , 1 ) ,      Δ t = T N . S(t+\Delta t)=S(t)\,e^{(r-\frac{1}{2}\sigma^2)\Delta t+\varepsilon \sigma\sqrt{\Delta t}},\;\; \varepsilon \sim \mathcal N(0, 1), \;\; \Delta t =\frac{T}{N} . S(t+Δt)=S(t)e(r21σ2)Δt+εσΔt ,εN(0,1),Δt=NT.
  2. S ( t = 0 ) = S 0 S(t=0)=S_0 S(t=0)=S0开始,依照股价离散化变化过程进行抽样,共 N N N次。得到一条股价变化的抽样路径。
  3. 对于浮动回望看涨:由抽样股价变化路径计算出 max ⁡ ( S T − S m i n ,   0 ) \max(S_T-S_{min},\,0) max(STSmin,0),乘以贴现因子 e − r T e^{-rT} erT,得到浮动看涨期权的一次抽样价格;对于平均价格看涨:由抽样股价变化路径计算出 max ⁡ ( S a v e − K ,   0 ) \max(S_{ave}-K,\, 0) max(SaveK,0),乘以贴现因子 e − r T e^{-rT} erT,得到平均价格期权的一次抽样价格。
  4. 重复步骤2、3共 M M M次,对得到的期权价格取平均值,即为蒙卡模拟计算出的目标期权价格。

7.3 算法Python代码实现

import numpy as np
import math

E = math.e

def sample_S_path(r, sigma, S_0, T, N):
    S = S_0
    path = [S]
    dt = T/N
    for i in range(N):
        S *= E**((r-0.5*sigma*sigma)*dt+sigma*np.random.normal()*dt**0.5)
        path.append(S)
    return path

def MC_float_lookback_call(r, sigma, S_0, T, N, M):
    call_price = 0
    for i in range(M):
        path = sample_S_path(r, sigma, S_0, T, N)
        call_price += 1.0/M*max(0, path[-1]-min(path))
    return call_price*E**(-r*T)

def MC_average_price_call(r, sigma, S_0, K, T, N, M):
    call_price = 0
    for i in range(M):
        path = sample_S_path(r, sigma, S_0, T, N)
        call_price += 1.0/M*max(0, np.average(path)-K)
    return call_price*E**(-r*T)

7.4 计算示例

       
考虑当 r = 0.1 ,    σ = 0.4 ,    S 0 = 50 ,    T = 1 r=0.1, \; \sigma = 0.4, \; S_0 = 50, \; T=1 r=0.1,σ=0.4,S0=50,T=1,离散化步数 N = 150 N=150 N=150,蒙卡抽样股价变化路径数 M = 40000 M=40000 M=40000。且对于亚式平均价格看涨期权,执行价格 K = 50 K=50 K=50。计算浮动回望看涨和平均价格看涨期权价格结果分别如下:

float_lookback_call = MC_float_lookback_call(0.1, 0.4, 50, 1, 150, 40000)
average_price_call = MC_average_price_call(0.1, 0.4, 50, 50, 1, 150, 40000)
print("欧式浮动回望看涨期权价格:{0:.5f}".format(float_lookback_call))
print("亚式平均价格看涨期权价格:{0:.5f}".format(average_price_call))
欧式浮动回望看涨期权价格:15.42357
亚式平均价格看涨期权价格:5.59780

7.5 相关说明

7.5.1 由均匀分布产生正态分布随机数

       
虽然一般编程语言常用库中都有正态分布随机数产生器。但有些情况下我们可能希望使用比较高质量的均匀分布随机数产生器来产生正态分布样本。一般而言,使用均匀分布抽样其它分布,需要使用目标分布的累积概率函数的逆函数,或者需要一个辅助累积概率函数加上一定概率接受抽样。这里针对标准正态分布,我们介绍一下Box-Muller方法,通过抽样两个均匀分布样本来产生一个标准正态分布样本。
       
考虑 x , y x, y x,y坐标上相互独立的二维标准正态分布,其概率密度函数为 f ( x , y ) = 1 2 π e − x 2 + y 2 2 f(x,y) = \frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}} f(x,y)=2π1e2x2+y2。在极坐标系中, f ( r , ϕ ) = 1 2 π e − 1 2 r 2 f(r,\phi) = \frac{1}{2\pi}e^{-\frac{1}{2}r^2} f(r,ϕ)=2π1e21r2,且边缘概率函数
F ( r ) = ∫ 0 r ∫ 0 2 π f ( s , ϕ )   s   d ϕ   d s = ∫ 0 r e − 1 2 s 2 d s = 1 − e − 1 2 r 2 . F(r) = \int_0^r\int_0^{2\pi}f(s,\phi)\,s\,d\phi\, ds = \int_0^r e^{-\frac{1}{2}s^2}ds=1-e^{-\frac{1}{2}r^2}. F(r)=0r02πf(s,ϕ)sdϕds=0re21s2ds=1e21r2.
其逆函数为 F − 1 ( x ) = − 2 ln ⁡ ( 1 − x ) F^{-1}(x) = \sqrt{-2\ln{(1-x)}} F1(x)=2ln(1x) 。由于二维标准正态分布抽样结果的 x x x方向投影为一维标准正态分布抽样。在极坐标系下我们先对径向的 r r r抽样,再对角向的 ϕ \phi ϕ抽样,然后将结果投影到 x x x坐标轴。由于 r ∼ − 2 ln ⁡ ( 1 − t ) ∼ − 2 ln ⁡ t r \sim \sqrt{-2\ln{(1-t)}}\sim \sqrt{-2\ln{t}} r2ln(1t) 2lnt t t t [ 0 , 1 ] [0,1] [0,1]之间均匀分布的随机数。 所以 x x x坐标轴上的一个标准正态分布抽样结果可以表示为 − 2 ln ⁡ t 1 ⋅ cos ⁡ ( 2 π t 2 ) \sqrt{-2\ln{t_1}}\cdot \cos{(2\pi t_2)} 2lnt1 cos(2πt2),其中 t 1 ,   t 2 t_1,\,t_2 t1,t2均为 [ 0 , 1 ] [0,1] [0,1]之间均匀分布随机数抽样。

7.5.2 蒙卡模拟结果与解析解比较

       
参考《期权、期货及其他衍生产品》第26章,我们知道浮动回望看涨期权价格为:
c f l = S 0 N ( a 1 ) − S 0 σ 2 2 r N ( − a 1 ) − S 0 e − r T ( 1 − σ 2 2 r ) N ( a 2 ) . c_{fl} = S_0N(a_1)-S_0\frac{\sigma^2}{2r}N(-a_1)-S_0e^{-rT}(1-\frac{\sigma^2}{2r})N(a_2). cfl=S0N(a1)S02rσ2N(a1)S0erT(12rσ2)N(a2).
a 1 = ( r + σ 2 2 ) T σ ,      a 2 = ( r − σ 2 2 ) T σ . a_1 = (r+\frac{\sigma^2}{2})\frac{\sqrt{T}}{\sigma} ,\;\; a_2 = (r-\frac{\sigma^2}{2})\frac{\sqrt{T}}{\sigma} . a1=(r+2σ2)σT ,a2=(r2σ2)σT .
代入相关参数,得 c f l = 15.92343 c_{fl} = 15.92343 cfl=15.92343
       
亚式平均价格看涨期权价格为:
d 1 = ln ⁡ M 1 K + σ 0 2 2 T σ 0 T ,      d 2 = d 1 − σ 0 T ,      M 1 = S 0 e r T − 1 r T ,        σ 0 2 = 1 T ln ⁡ M 2 M 1 2 . d_1 = \frac{\ln{\frac{M_1}{K}}+\frac{\sigma_0^2}{2}T}{\sigma_0\sqrt{T}},\;\;d_2 = d_1-\sigma_0\sqrt{T},\;\; M_1 = S_0\frac{e^{rT}-1}{rT},\;\;\; \sigma_0^2 = \frac{1}{T}\ln{\frac{M_2}{M_1^2}} . d1=σ0T lnKM1+2σ02T,d2=d1σ0T ,M1=S0rTerT1,σ02=T1lnM12M2.
M 2 = 2 e ( 2 r + σ 2 ) T S 0 2 ( r + σ 2 ) ( 2 r + σ 2 ) T 2 + 2 S 0 2 r T 2 ( 1 2 r + σ 2 − e r T r + σ 2 ) . M_2=\frac{2e^{(2r+\sigma^2)T}S_0^2}{(r+\sigma^2)(2r+\sigma^2)T^2}+\frac{2S_0^2}{rT^2}\left(\frac{1}{2r+\sigma^2}-\frac{e^{rT}}{r+\sigma^2}\right). M2=(r+σ2)(2r+σ2)T22e(2r+σ2)TS02+rT22S02(2r+σ21r+σ2erT).
c a v e = e − r T ( M 1 N ( d 1 ) − K N ( d 2 ) ) . c_{ave} = e^{-rT}(M_1N(d_1)-KN(d_2)) .\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad cave=erT(M1N(d1)KN(d2)).
代入相关参数,得 c a v e = 5.61679 c_{ave} = 5.61679 cave=5.61679
       
当我们取较大的 M , N M,N M,N,比如 M = 200 ,    N = 640000 M=200,\;N=640000 M=200,N=640000时,蒙卡模拟计算出的 c f l ∗ = 15.35872 ,    c a v e ∗ = 5.55239 c_{fl}^\ast = 15.35872,\; c_{ave}^\ast = 5.55239 cfl=15.35872,cave=5.55239,和解析解直接计算出的结果很接近。

7.6 参考资料

  1. 《期权、期货及其他衍生产品》,John C. Hull 著,王勇、索吾林译。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49544040/article/details/109559889

智能推荐

华为ensp的缺省_利用华为ENSP模拟器分析和配置中小型企业网络的综合实验_作者小怪兽的博客-程序员秘密

增强分析和配置中小型企业网络的综合能力本实验模拟了一个企业网络场景,其中R1为公司总部的路由器,交换机S1,S2,S3,S4,服务器,终端等设备组成了公司总部的园区网,R2,R3,R4为公司分部的路由器。公司总部的园区网划分了不同的VLAN。为了防止二层环路及提高交换机的抗攻击性,每台交换机都需要运行RSTP协议,同时配置RSTP保护功能。在公司总部网络中,R1,S1,R2运行OSPF协议,并需要...

Android颜色全解析_android 颜色_mLuoya的博客-程序员秘密

Android颜色全解析​ 颜色对照表:https://blog.csdn.net/lm_zp/article/details/51381355颜色表示方法​ Android颜色由16进制表示,颜色范围为0~FFFFFF。​ 颜色值:#AARRGGBB。透明度(A,alpha);红色(R,red);绿色(G,green);蓝色(B,blue颜色值透明度百分比和十六进制对应关系//变化为...

Linux jar包 后台运行_linux命令 后台运行jar包命令_分享牛的博客-程序员秘密

Linux 运行jar包命令如下:方式一:java -jar shareniu.jar特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出那如何让窗口不锁定?方式二java -jar shareniu.jar &&代表在后台运行。特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。继续改

CList成员的使用_clist getat_清水迎朝阳的博客-程序员秘密

使用时 要#include  ConstructionCListConstructs an empty ordered list.建立一个链表example:CList myList;//建立一个int链表CList myList(16);//建立一个cstring的链表,后面的16表示链表里面数据的个数,如果不写的话,可能是不限个数?CLi

达尔豪斯计算机科学专业排名,达尔豪斯大学专业排名 看看你的专业排第几_weixin_39907596的博客-程序员秘密

在中国国内填报志愿的时候,很多学生会提前看学校的排名以及自己所要报考的专业排名情况。而出国留学的时候同样如此,有的学生在高中毕业后申请去加拿大留学,加拿大著名院校有很多,部分学生特别关注达尔豪斯大学,而大家在报考达尔豪斯大学的时候,也有必要关注达尔豪斯大学专业排名情况,一起来看一下下面的内容吧。达尔豪斯大学(DalhousieUniversity)又译作达尔豪西、达尔豪斯大学。为世界学术名校,加拿...

JavaScript和ActiveX控件交互_codeElegant的博客-程序员秘密

首先在本机通过regsvr32命令注册ActiveX控件,然后确保ActiveX控件能正确在IE中加载,IE7、IE8对安全控制得比较严。JavaScript调用ActiveX控件的示例代码:ActiveX控件的classid需要通过查找注册表获得,然后通过getElementById()方法获取对象后,就可以像调用普通的JS函数一样使用了<!DOCTYPE html PUBLIC ...

随便推点

热部署工具jrebel-and-xrebel-for-intellij使用方法_jrebel and xrebel for intellij_hou_jinixn的博客-程序员秘密

1.下载方法可以通过idea插件官网下载或者通过在idea plugin market中搜索idea插件官网地址:https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel-for-intellij安装本地包方法:#2.激活方法选择team url激活方式地址前缀填写https://jrebel.qekang.com/后面拼接可以使用下方方法生成public static void main(String[] args) {

sudo rosdep init 出错解决方案_David_By的博客-程序员秘密

错误内容:sudo rosdep initERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down.解决方案:s...

iPhone12新款预测总结_sexylin2010的博客-程序员秘密

苹果将​​在2020年秋季推出新的iPhone,而这次综述涵盖了迄今为止我们所听到的有关即将推出的设备的所有谣言。四款iPhone 新的物理设计 5.4“,6.7”和6.1“尺寸 三镜头3D相机 所有OLED显示器 5G连接 A14芯片 $ 649初始价格苹果2020年iPhone阵容距离2020年iPhone的发布还有几个月的时间,预计在2020年9月或2020年10月发布......阅读全文请点击...

区块链游戏和元宇宙的关系_区块链与游戏的关系_币财经的博客-程序员秘密

最近看了最有价值的链游文章,就是IOSG出品的《我们不需要更快的马车》,激发出了我再次愿意深谈链游的想法。这篇文章的结尾描述了一个特别美好的像电影一样的去中心化的开发链游并实现DAO治理和运营,大家做到共享共生。我看了很感动。这也是我一直以来追求的效果,但是,作为一个从业五年的第一代链游人,我可以跟我IOSG的朋友真诚的说,这个实际上很难。链游真正的难点在什么地方?第一难在于,游戏的大制作,没法用链游回收成本或者说链游回收成本的方法不敢用。小制作?小制作不适合做链游,因为合约的开发成

python利用PyQt5和QTDesginer开发GUI应用(三)、使用pyinstaller打包成exe文件_王义凯_Rick的博客-程序员秘密

python应用GUI开发系列:python利用PyQt5和QTDesginer开发GUI应用(一)、环境准备及demopython利用PyQt5和QTDesginer开发GUI应用(二)、股票查询工具---------------------------------------------------------------------------------------------...

传统组织如何转型敏捷组织_数字和敏捷时代的组织结构_danpu1174的博客-程序员秘密

传统组织如何转型敏捷组织 前几天有人问: 如何设计组织? 有两个潜在的答案,实际上并不像它们在第一个站点上那样矛盾。 第一个很简单:不要。 也就是说,不要设计您的组织,不要制定组织结构图,不要制定计划,并且要根据该计划重组您的组织。 而是创造条件让结构出现。 我想这是“设计”(意思是“为您希望的事物的方式制定计划”)和“设计”(意思是“事物的排列方式”)之间的区别。 为了...

推荐文章

热门文章

相关标签