sigma是波动率,应该选择合适的波动率,如果输入的波动率太小,程序会给出建议的最小值。
- generatePrice <- function(startPrice,endPrice,len,stepSigma)
- {
- # check sigma
- sigmaLim = abs(endPrice-startPrice)/sqrt(len)/2
- if(stepSigma < sigmaLim) {
- cat('sigma too small for simulation. recommanded value should greater than',sigmaLim,'\n')
- return(0)
- }
- r1 = c(0,rnorm(l-1,sd=stepSigma))
- p1 = exp(log(startPrice) + cumsum(r1))
- while(TRUE) {
- r2 = c(0,rnorm(l-1,sd=stepSigma))
- p2 = exp(log(endPrice) + rev(cumsum(r2)))
- a = p2-p1
- if (any(abs(a) < stepSigma)) {break}
- }
- pos = match(T,abs(a) < stepSigma)
- if (pos < len) {
- res = c(p1[1:pos],p2[(pos+1):len])
- } else {
- res = c(p1[1:(pos-1)],p2[len])
- }
- return(res)
- }
- # min sigma
- abs(3-2.5)/sqrt(100)/2
- # price series
- p = generatePrice(2.5,3,100,0.01)
- plot(p,type='l')


雷达卡

京公网安备 11010802022788号







