在R中使用蒙特卡罗模拟股票价格



在图中模拟股票价格$80在90天内的50个样本路径,建模为漂移参数为0.1、波动率为0.5的几何布朗运动。在垂直轴上显示此过程价格选项,在水平轴上显示时间。找出在90天内的期权价格将上涨到至少100美元的概率。

library(sde)
mu<-0.1
sigma<-0.5
P0<-80 #initial price
T <-90/360 #time in years
nt=10000 #number of trajectories within each simulation
n=100 #time periods
dt<-T/n #length of time periods
t <- seq(0,T,by=dt)
X=matrix(rep(0,length(t)*nt),nrow = nt)
for(i in 1:nt) {
X[i,]=GBM(x=P0, r=mu, sigma=sigma, T=T, N=n)
}
ymax=max(X); ymin=min(X) #bounds for simulated prices
plot(t,X[1,],type="l", ylim=c(ymin,ymax), col=1, xlab="Time", ylab="Price Y(t)")
for(i in 2:nt){
lines(t,X[i,], type='l', ylim=c(ymin, ymax), col=i)
}
Prob<-sum(nt>=100)/nt
Prob

答案取决于如何解释参数tnT

我做了一些假设:由于

T <- 90/360

我想,这意味着一年中有90天(大约360天,这在金融业一年中很常见(。您对t的定义

n <- 100
dt <- T/n
t <- seq(0, T, by=dt)

给出了模拟的时间步长,因此第90天只由max(t) = 0.25 = T给出,索引为101,是t的最后一个元素。

X包含随机过程的50条路径,以X[i,]为索引,时间步长为j,由X[,j]给出。因此,如果你想知道第90天50次模拟的值,只需看看X[,101]

所以你想知道有多少路径在第90天超过了100条。只需通过计数

success <- sum(X[,101] >= 100)

如果你想计算一个经验概率,只需将它们除以你的路径数。因此

emp_prob <- success/nt

最新更新