第7节 蒙卡模拟计算路径依赖型期权价格
7.1 简介
蒙特卡罗模拟计算期权价格是将股票价格变化过程离散化,通过随机数产生器对每一小段股价变化进行抽样,累计得到一次股价变化过程抽样结果,然后计算出对应的期权价格。进行多次股价变化过程抽样计算出期权价格的平均价并贴现,即为蒙卡模拟得出的期权价格。
由于抽样股价过程可以得到完整的股价变化路径,所以可以直接由抽样结果得到路径依赖型期权的价格。这是蒙特卡罗模拟计算期权价格相对于树形计算期权价格的一个优势。
7.2 蒙卡模拟计算回望/亚式期权价格算法
以浮动回望看涨期权和亚式平均价格看涨期权为例。浮动回望看涨期权执行时的价格为 max ( S T − S m i n , 0 ) \max(S_T-S_{min}, \, 0) max(ST−Smin,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(Save−K,0), K K K为约定执行价格, S a v e S_{ave} Save为历史平均股价。
- 根据给定参数,确定股价变化离散化后过程,这里我们使用指数形式。
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(r−21σ2)Δt+εσΔt,ε∼N(0,1),Δt=NT. - 由 S ( t = 0 ) = S 0 S(t=0)=S_0 S(t=0)=S0开始,依照股价离散化变化过程进行抽样,共 N N N次。得到一条股价变化的抽样路径。
- 对于浮动回望看涨:由抽样股价变化路径计算出 max ( S T − S m i n , 0 ) \max(S_T-S_{min},\,0) max(ST−Smin,0),乘以贴现因子 e − r T e^{-rT} e−rT,得到浮动看涨期权的一次抽样价格;对于平均价格看涨:由抽样股价变化路径计算出 max ( S a v e − K , 0 ) \max(S_{ave}-K,\, 0) max(Save−K,0),乘以贴现因子 e − r T e^{-rT} e−rT,得到平均价格期权的一次抽样价格。
- 重复步骤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