2014-09-20 47 views
-1

我用R來模擬波動率爲0.25的股票的價格路徑,然後我計算那些模擬路徑的波動率。我發現,當模擬步驟的數量很少,例如少於75步時,模擬價格路徑的波動性實際上小於0.25。當我增加步數時,它逐漸收斂到0.25。任何人都可以解釋這一點,我怎樣才能生成具有固定波動性的價格路徑,而不管步驟的數量。謝謝。 enter image description hereR蒙特卡羅模擬價格路徑收斂波動問題

#----------------------- code ----------------------- 
#number of simulation runs 
nSims = 1000 
S = 100 
r = 0 
q = 0 
volatility = 0.25 

#drift term 
mu = r - q 
#every trading day increment 
dt = 1/365 

vol_vec = vector() 
for (tDays in 1:365) { 
# standard normal distribution random number 
    z = rnorm(tDays*nSims, mean=0, sd=1)  

# generate log-normal return matrix 
    return_matrix = matrix(exp((mu - 0.5 * volatility^2) * dt + volatility * sqrt(dt) * z), ncol=nSims) 

# return value: price path matrix  
    path = rbind(matrix(rep(S,nSims),ncol=nSims), S*apply(return_matrix,2,cumprod)) 

# calculate the volatility of path 
    vol = mean(apply(path, 2, function(x){sqrt(365*mean(diff(log(x),n=1)^2))})) 
    vol_vec = c(vol_vec, vol) 
} 

plot(vol_vec, type="l", col="blue") 
abline(h=volatility, col="black", pch=22, lty=2) 
+0

這看起來像初始化偏差。你的數據是否有序列相關? – pjs 2014-09-20 18:37:38

+0

@pjs不,數據是使用rnorm()隨機生成的。謝謝。 – 2607 2014-09-21 11:43:17

+0

你的'z's是iid,但它們不是輸出數據。不是一個R程序員,我無法弄清楚你正在做什麼來使'z's進入'vol_vec'。如果'vol_vec'值是連續相關的,他們會受到你的起始條件的影響 - 它看起來像你從零開始並且向上漂移。 – pjs 2014-09-21 16:50:16

回答

0

你的路模擬是正確的,但你的波動性的計算是錯誤的。我想你要替換體積在for循環:

vol = mean(apply(path, 2, function(x){365*mean((diff(log(x),n=1)-0.5*(volatility*dt)^2)^2) })) 

這給: enter image description here