实验项目:欧式期权蒙特卡洛模拟定价
实验时间:
一、实验目的
1.了解蒙特卡洛定价原理
2.模拟蒙特卡洛期权定价法
二、实验要求
1. 能够使用python模拟该过程
2. 能够了解该算法
三、实验内容与设计(主要内容,操作步骤、算法描述或程序代码等)
1.蒙特卡罗方法:
蒙特卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。
- 定价模拟的步骤:
①假设股票价格服从几何布朗运动,即满足以下随机微分方程:
其中,St表示t时刻的股票价格,r表示无风险利率,sigma表示股票价格波动率,dWt表示布朗运动的增量
②生成随机数,生成模拟随机路径终点股票价格
③根据期权到期时的收益,计算出其折现收益。
3.代码实现如下:
import numpy as np
def MonteCarloPrice(O,S,K,T,r,q,sigma,steps,paths):
dt = T / steps # 设置步长dt
S_path = np.zeros((steps+1,paths)) #创建一个零矩阵储存模拟路径节点
S_path[0] = S #将模拟随机路径起点设置为S
for step in range(1,steps+1):
epsilon = np.random.standard_normal(paths) #生成人工随机数
S_path[step] = S_path[step - 1] * np.exp((r-q-0.5*sigma**2)*dt +sigma*np.sqrt(dt)*epsilon) #生成模拟随机路径终点股票价格
if O=="c":
value = np.exp(-r*T)*np.maximum(S_path[-1]-K,0).mean() #根据模拟路径终点股票价格计算看涨期权回报,再将回报均值以r折现
else:
value = np.exp(-r*T)*np.maximum(K-S_path[-1],0).mean() #根据模拟路径终点股票价格计算看跌期权回报,再将回报均值以r折现
return value
C = MonteCarloPrice(O="c",S = 30,K=30,T =0.1,r=0.05,q=0.00,sigma = 0.2,steps = 10,paths = 100000)
P = MonteCarloPrice(O="p",S = 30,K=30,T =0.1,r=0.05,q=0.00,sigma = 0.2,steps = 10,paths = 100000)
print(round(C,3))
print(round(P,3))
四、实验结果分析及总结(对实验的结果是否达到预期进行分析,总结实验的收获和存在的问题等)
随机生成10次结果如下:
收获:对python运用更熟练,了解到该算法的实现方式。
存在问题:模拟的次数太少