【发布时间】:2020-08-25 00:39:47
【问题描述】:
在图表中模拟 90 天内 80 美元股票价格的 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
【问题讨论】:
-
所以你模拟了 50 条股票路径。其中有多少最终高于 100 美元的目标价?
-
50 个样本路径不足以获得对概率的良好估计。您也许可以绘制 50 的图表,然后使用例如估计概率。 10,000 条路径。 (更好的是,既要根据显示的 50 给出估计值,又要报告更大模拟的结果)。
-
好的。我将时间段数更改为 10000,但如何使用蒙特卡罗模拟来做到这一点?
-
为什么要更改时间段数?应该是通过那个时间段的路径数应该改变。无论如何,一旦你做了模拟,有什么问题?只需计算最终高于目标价格的路径并除以路径数。蒙特卡罗模拟本质上是一种非常幼稚的算法。如果你想估计在一对骰子中掷出 7 的概率,只需掷 100 次,数一下 7,然后除以 100。这就是这里发生的所有事情,除了你有股票价格路径而不是骰子。
-
模拟本身和你对模拟所做的事情是不同的。您可以绘制它,用它估计概率等。就个人而言,我会编写一个模拟单个路径的函数,调试该函数,然后
replicate它任意次数。就您的代码而言,sum(nt>=100)/nt没有意义。nt只是一个数字,那么sum(nt>=100)的意义何在?你没有总结正确的事情。
标签: r simulation montecarlo stochastic-process