歐式看漲期權定價蒙特卡洛模擬中,波動率很大時是否就不適用了?
RT。在嘗試過程中,發現當波動率很大的時候,蒙特卡洛模擬方法似乎是失效的。具體如下,求知乎大神指教。
蒙特卡洛模擬的思路來源:期權定價中的蒙特卡洛模擬方法,過程如下:其中S為價格,r為無風險利率(取5%),T為鎖定時間(取100天),K為鎖定價格,為波動率(在後面的測試中取值很大),模擬步長100,所以t(i+1)-t(i)=0.01
出現的問題:當取值很大時,比如800%,經過100個步長模擬之後價格變得非常小,在百分之幾量級,與利用BSM模型計算的理論值有很大差異。這是否說明蒙特卡洛模擬期權定價對於波動率是有要求的?不能過於大?求解答!matlab代碼:
S(1) = 16; %初始價格
dela=8; %波動率
K=15; %鎖定價格
n=100000; %模擬次數
zero_matrix=zeros(n,1); %零矩陣,用於後面求max
price_simu=zeros(101,n); %存儲每次模擬步長的價格
A = zeros(1,100); %存儲平均價格
T=100/365; %期權合約時間長度
V=zeros(n,1)figure(1)
for i =1:n
for t=1:100
S(t+1)=S(t)*exp((0.05-0.5*dela^2)*0.01+dela*sqrt(0.01)*randn());
price_simu(t,i)=S(t+1);end
end
%計算未來預計價格
price_pridict = mean(price_simu(100,:));payoff=zeros(n,1);
for i=1:n
隨著模擬次數的增加,結果呈現很大幅度的變化,在100000次模擬後,期權價格大概為0.01。而同樣的設定,用BSM模型計算的結果為15.227674,(期權計算器)。看價格模擬路徑可以發現在每次價格模擬過程中,模擬價格都呈現劇烈的下降趨勢(極少數出現了劇增)。雖說是價格隨機遊走,但為什麼會出現這麼明顯的下降?求告知!!!!!
payoff(i,1)=max(price_simu(100,i)-K,zero_matrix(n,1));
%權利金,每次模擬均求一次權利金
V(i,1)=exp(-0.05*T)*mean(payoff(1:i,1));
end
plot(V);
瀉藥
因為蒙特卡洛下的波動率和期權都做過,斗膽來答一下吧第一你時間打錯了,你的T既然是一百天,做一百次,dt就是一天,1/365;我在使用了錯誤的時間之後給你得出了一樣的錯誤結果,所以這個很重要。
第二,除非模擬次數相當相當多,否則不要選用過大的波動率。
除非模擬次數相當相當多,否則不要選用過大的波動率。 除非模擬次數相當相當多,否則不要選用過大的波動率。原因一,波動率如果太大,結果誤差會非常大,我給你把時間改對之後價值的浮動從6到94不等(bs我自己隨便算了一下15.4418跟題主有一點點差),都是因為巨大波動率所帶來的誤差。在這種巨大波動率的情況下,需要更大的模擬次數來消除誤差。
模擬的誤差是跟根號模擬次數成反比的,模擬次數少的得出的值肯定很離譜,隨著模擬次數增加,值肯定會越來越合理。原因二,關於你說的大幅下降趨勢問題,原因是因為你的波動率過大(大於1!!!!),修正項大的離譜。導致在風險中性下的的修正漂移項是個巨大的負值;而隨機項本來的時間係數就是比漂移項小,又比小的多,所以你的隨即項變動跟漂移項根本不是一個量級的。
你一開始同時時間弄錯了,0.01比1/365差很多,所以上面兩個差距更離譜然後,這麼多次的模擬就不要作死寫循環了全部矩陣化,能一個循環都不寫是最好的。不然以後你跑隨機變數一多能跑一個小時
吐槽時間:
話說波動率大到800%這個期權都是末日期權了。。。波動率一直保持巨大本來就不合理蒙特卡洛模擬可以對多個變數使用,所以波動率可以不是常數而是序列。這樣做之後你的波動率會隨時間變化的,不會一直大下去的。(或者你要更高維的模擬可以搞成波動率的過程,不過碰見維度災難電腦崩了就不好了。我個人我書讀得少粗淺地認為波動率鞅性是很弱的,迄今為止見過的波動率的序列相關性都極強。)舉個簡單的例子,可以簡陋地估測一下GRACH下的波動率:
然後你就有了一個隨時間而變的sigma序列(注意這個sigma序列也是可以加入有隨機性的,可以在後面加上萌萌的小白噪),這樣你的S過程就會被不同時期的波動率影響。同時因為是時間序列,所以前一期的波動率會影響下一期,你的模擬就自帶這dynamic了。同理,r也可以帶入各種利率模型進行模擬啦啦啦啦
推薦閱讀: