蒙特卡洛模拟估计欧式看涨期权的价值
蒙特卡洛模拟是金融学和数值计算科学中最重要的算法之一,它在期权的定价和风险的管理上有很重要的作用,蒙特卡洛方法很容易处理高维度问题,在这种问题上复杂度和计算需求通常以线性方式增长.蒙特卡洛方法的缺点是:本身的高计算需求
主要参考Black-Scholes-Merton(BSM)模型,在模型中到期的指数水平是一个随机变量,通过到期指数公式计算:
S T = S 0 e x p ( ( r − 1 2 σ 2 ) T + σ T z ) S_T = S_0 exp((r - \frac{1}{2}\sigma^2) T + \sigma\sqrt{T}z) ST=S0exp((r−21σ2)T+σTz)
其中z是一个服从标准正态分布的随机变量.
蒙特卡洛算法的描述:
1.生成 I 个服从标准正态分布的随机数, z i z_i zi, i={1,2,3,I}, I为随机模拟的次数
2.通过上面的到期指数计算公式,计算出所有模拟结果的到期指数 S T ( i ) S_T(i) ST(i)
3.计算到期期权的每一个模拟可能的内在价值 h T ( i ) h_T(i) hT(i)
$h_T(i) = max(S_T(i) - K, 0) $
4.通过蒙特卡洛估算公式计算出期权现值
C 0 ≈ e − r T 1 T ∑ i I h T ( i ) C_0 \approx e^{-rT} \frac{1}{T} \sum_i^{I}h_T(i) C0≈e−rTT1∑iIhT(i)
import numpy as np
import matplotlib.pyplot as plt
# 对计算要用到的一些数据进行初始化
S_0 = 100.0 # 股票的初始的指数水平
K = 105.0 # 看涨的行权价格
T = 1.0 # 到期的年限
r = 0.05 # 固定无风险利率
sigma = 0.2 # 固定波动率(收益的标准差)
I = 1000 # 随机数的个数,模拟计算到期指数的次数
z = np.random.standard_normal(I)
# 股票到期指数水平
S_T = S_0 * np.exp((r - 0.5 * sigma ** 2)* T + sigma * np.sqrt(T) * z)
# 期权的内在价值
h_T = np.maximum(S_T - K, 0)
# 期权现值
C = np.exp(-r * T)* np.sum(h_T)/I
期权现值
# 期权现值
print 'value of the European call option %.6f'%C
value of the European call option 7.988801
def draw_pic(position,y,label,plt):plt.subplot(position)plt.plot(y, label=label)plt.grid(True)plt.legend(loc=0)plt.ylabel(label)
到期指数水平
到期期权内在价值
%matplotlib inline
plt.figure(figsize=(12,7))
draw_pic(211, S_T, 'S_T', plt)
draw_pic(212, h_T, 'h_T', plt)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpaqk7aj-1681007914640)(output_7_0.png)]