第7節 蒙卡模擬計算路徑依賴型期權價格
第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 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π1e−2x2+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π1e−21r2,且邊緣概率函式
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)=∫0r∫02πf(s,ϕ)sdϕds=∫0re−21s2ds=1−e−21r2.
其逆函式為
F
−
1
(
x
)
=
−
2
ln
(
1
−
x
)
F^{-1}(x) = \sqrt{-2\ln{(1-x)}}
F−1(x)=−2ln(1−x)。由於二維標準正態分佈抽樣結果的
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}}
r∼−2ln(1−t)∼−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)−S0e−rT(1−2rσ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=(r−2σ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=σ0TlnKM1+2σ02T,d2=d1−σ0T,M1=S0rTerT−1,σ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+σ21−r+σ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=e−rT(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 參考資料
- 《期權、期貨及其他衍生產品》,John C. Hull 著,王勇、索吾林譯。
相關文章
- 使用蒙特卡羅模擬期權定價
- 模擬積體電路設計系列部落格——7.5.2 週期型ADC
- 鴻蒙hvigor構建任務依賴與生命週期簡介鴻蒙Go
- 計算upload路徑
- 第69篇 DI依賴注入依賴注入
- 模擬積體電路設計系列部落格——7.5.6 時間交錯型ADC
- 使用IDEA模組之間依賴找不到依賴類Idea
- 3.1 spring5原始碼系列--迴圈依賴 之 手寫程式碼模擬spring迴圈依賴Spring原始碼
- SAP 長期模擬計劃
- [1483. 樹節點的第 K 個祖先] 【路徑】
- 模擬積體電路設計系列部落格——6.2.5 毛刺
- 函式計算安裝依賴庫方法小結函式
- ABAP模擬Java Spring依賴注入(Dependency injection)的一個嘗試JavaSpring依賴注入
- 【計算機網路·第7版-學習筆記】第02章:物理層計算機網路筆記
- Unity中的光源型別(向前渲染路徑進行光照計算)Unity型別
- Spring框架模組依賴關係Spring框架
- 精簡ABP的模組依賴
- 芝加哥期權交易所希望降低比特幣期貨合約價格比特幣
- 模擬積體電路設計系列部落格——9.3 取樣保持電路
- 模擬積體電路設計系列部落格——6.2.1 二進位制權重電阻轉換器
- 加速計算卡第420篇:基於ZU19EG的4路100G光纖的PCIe 加速計算卡
- SQL如何實現查詢節點依賴SQL
- 《葉問》第7期
- 模擬積體電路設計系列部落格——9.1 比較器
- 原生應用新增 Flutter 模組依賴Flutter
- 六西格瑪與商業分析:蒙特卡羅模擬
- 函式計算|如何使用層解決依賴包問題?函式
- 第1章 計算機網路的概述——計算機網路計算機網路
- 彈性計算雙週刊第17期
- 彈性計算雙週刊 第24期
- 彈性計算雙週刊第21期
- 依賴管理和依賴範圍
- 依賴
- 模擬積體電路設計系列部落格——7.1.6 多位元SAR ADC
- 模擬積體電路設計系列部落格——8.2.2 LC振盪器
- SAP 長期計劃編制和模擬
- JavaScript 購物車自動計算價格JavaScript
- Android 通過 APT 解耦模組依賴AndroidAPT解耦