生活随笔
收集整理的這篇文章主要介紹了
蒙特卡洛法与BS模型法分别实现欧式期权定价
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
蒙特卡洛法與BS模型法分別實(shí)現(xiàn)歐式期權(quán)定價(jià)
并且可以通過逐漸增大蒙特卡洛法的路徑數(shù)量以及每一條模擬路徑的步數(shù)(縮小步長(zhǎng))來驗(yàn)證蒙特卡洛方法最終結(jié)果會(huì)收斂于BS模型計(jì)算結(jié)果。
"""
Created on Tue Sep 13 16:57:43 2022@author: liangshanliao
"""import math
import numpy
as np
from scipy
.stats
import norm
from numpy
.random
import standard_normal
import matplotlib
.pyplot
as plt
plt
.rcParams
['font.sans-serif'] = ['STLiti']
plt
.rcParams
['axes.unicode_minus'] = False def MonteCarlo(S0
,r
,T
,K
,sigma
,M
,I
):'''S0 : 標(biāo)的資產(chǎn)初始價(jià)格K : 期權(quán)執(zhí)行價(jià)格r : 無風(fēng)險(xiǎn)利率sigma : 預(yù)期波動(dòng)率T:到期期限/剩余期限M :模擬步數(shù)I:模擬路徑條數(shù)'''dt
=T
/MS
=np
.zeros
((M
+1,I
))S
[0]=S0
for t
in range(1,M
+1):S
[t
]=S
[t
-1]*np
.exp
((r
-0.5*sigma
**2)*dt
+sigma
*np
.sqrt
(dt
)*standard_normal
(I
))outcome
=sum(np
.maximum
(0,S
[-1]-K
))*(np
.exp
(-r
*T
))/I
return outcome
,SS_m
,S
=MonteCarlo
(50,0.1,0.5,52,0.4,100,1000)
plt
.figure
(figsize
=(10,8))
plt
.hist
(S
[-1],bins
=50)
plt
.xlabel
(u'到期日時(shí)幾何布朗運(yùn)動(dòng)模擬的股票價(jià)格')
plt
.ylabel
(u'頻率')plt
.figure
(figsize
=(10,8))
plt
.plot
(S
[:100],lw
=1.5)
plt
.xlabel
(u'時(shí)間')
plt
.ylabel
(u'股票價(jià)格')
plt
.title
(u'幾何布朗運(yùn)動(dòng)下的股票價(jià)格路徑')def BS(St
,K
,sigma
,T
,r
,t
):'''BS模型計(jì)算期權(quán)的價(jià)格St:標(biāo)的資產(chǎn)的價(jià)格;K:期權(quán)的執(zhí)行價(jià)格;sigma:基礎(chǔ)資產(chǎn)價(jià)格百分比變化的年化波動(dòng)率;r:無風(fēng)險(xiǎn)收益率;T:期權(quán)合約最長(zhǎng)期限t:現(xiàn)時(shí)期限;'''d1
=(np
.log
((St
)/K
)+(r
+0.5*sigma
**2)*(T
-t
))/(sigma
*np
.sqrt
(T
-t
))d2
=d1
-sigma
*np
.sqrt
(T
-t
)value
=St
*norm
.cdf
(d1
)-K
*np
.exp
(-r
*(T
-t
))*norm
.cdf
(d2
)return valueS_bs
=BS
(50,52,0.4,0.5,0.1,0)
print("蒙特卡洛法計(jì)算結(jié)果是:",S_m
)
print("BS模型計(jì)算結(jié)果是:",S_bs
)
總結(jié)
以上是生活随笔為你收集整理的蒙特卡洛法与BS模型法分别实现欧式期权定价的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。