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

3

使用漂移参数为0.1,波动率为0.5的几何布朗运动模型,在图表中模拟50个样本路径,代表了在90天内股票价格为80美元的变化情况。垂直坐标轴表示价格选项,水平坐标轴表示时间。在图表中展示这一过程。计算在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

3
你模拟了50条股票走势路径。其中有多少条路径的最终价格高于目标价100美元? - rajah9
2
50个样本路径不足以得出良好的概率估计。你可以尝试绘制这50个样本路径,但是再使用例如10,000个路径进行概率估计。(更好的做法是,基于这50个展示的样本路径给出估计值,并报告一个更大规模模拟的结果)。 - John Coleman
好的。我将时间段的数量更改为10000,但如何使用蒙特卡罗模拟来实现呢? - Andrea Garcia
1万个样本路径在图表中看起来像一堆轨迹,而我只需要50个。此外,我尝试估计至少100美元的概率,但肯定有些地方出了问题。非常感谢! - Andrea Garcia
1
模拟本身和你对模拟的处理是两回事。你可以用它来绘制图形、估计概率等等。个人而言,我会编写一个函数来模拟单条路径,调试该函数,然后将其“复制”任意次数。就你的代码而言,“sum(nt>=100)/nt”没有意义。“nt”只是一个数字,那么“sum(nt>=100)”有什么意义呢?你没有加总正确的东西。 - John Coleman
显示剩余2条评论
1个回答

1

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

我做出一些假设:由于

T <- 90/360

我猜这意味着一年中的90天(大约360天,这在金融界很常见)。你对t的定义。
n <- 100
dt <- T/n
t <- seq(0, T, by=dt)

这里给出了您模拟的时间步长,因此您的第90天可以通过索引为101的t的最后一个元素max(t) = 0.25 = T来确定。

X包含50条随机过程路径,由X[i,]索引,在时间步长j处给出X[,j]。因此,如果您想知道第90天时50个模拟的值,请查看X[,101]

所以您想知道在第90天有多少条路径超过100。只需按如下计数:

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

如果您想计算经验概率,只需将它们除以您的路径数量即可。因此,
emp_prob <- success/nt

非常感谢@Martin Gal。我如何估计期权价格最高会上涨至少100? - Andrea Garcia
尝试使用类似于 success <- sum(sapply(1:n, function(i) max(X[i,]) >=100)) 的代码,然后像上面展示的那样计算经验概率。 - Martin Gal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接