这是我的下面的代码,我得到的是一个相同值的列表,它似乎不是R正在采用随机生成的值,运行等式然后给我结果。
montecarlo = function(r,v,t,x,k,n) {
y = rnorm(n)
stockprice = x*exp((-v*sqrt(t)*y)+((r-(.5*v^2))*t))
MCOP = exp(-r*t)*(stockprice-k)
return(MCOP)
}
如果设置n = 100
,此代码的输出只是单个值100次答案 0 :(得分:1)
让我们添加一些print()
语句(您也可以使用debug(montecarlo)
以交互方式逐步执行此功能):
montecarlo = function(r,v,t,x,k,n) {
y = rnorm(n)
p = (-v*sqrt(t)*y)+((r-(.5*v^2))*t)
print(range(p))
stockprice = x*exp(p)
print(range(stockprice))
MCOP = exp(-r*t)*(stockprice-k)
return(MCOP)
}
现在尝试功能:
set.seed(101)
m <- montecarlo(.45,65,1,30,29,100)
[1] -2232.440 -1961.294 ## exponent values
[1] 0 0 ## stockprice values
因此指数函数具有如此大(负)的幅度,指数函数下溢到零。由于随机值仅通过stockprice
输入表达式,因此它们将被清零。
看起来这里的主要罪魁祸首是v
,你设置为65,所以v^2
是一个很大的数字......