程式
找到隱含波動率的有效方法是什麼?
我有一個使用 Newton-Raphson 方法找到隱含波動率的程式碼。
我將試驗次數設置為 1000,但有時它無法收斂並且找不到結果。
有沒有更好的方法來找到結果?是否存在預計這種數值方法無法收斂到解的任何技術條件?
這是 C# 程式碼:
public double findIV(double S, double K, double r, double time, string type, double optionPrice) { int trial= 1000; double ACCURACY = 1.0e-5; double t_sqrt = Math.Sqrt(time); double sigma = (optionPrice / S) / (0.398 * t_sqrt); // find initial value for (int i = 0; i < trial; i++) { Option myCurrentOpt = new Option(type, S, K, time, r, 0, sigma); // create an Option object double price = myCurrentOpt.BlackScholes(); double diff = optionPrice - price; if (Math.Abs(diff) < ACCURACY) return sigma; double d1 = (Math.Log(S / K) + r * time) / (sigma * t_sqrt) + 0.5 * sigma * t_sqrt; double vega = S * t_sqrt * ND(d1); sigma = sigma + diff / vega; } throw new Exception("Failed to converge."); } public double ND(double X) { return (1.0 / Math.Sqrt(2.0 * Math.PI)) * Math.Exp(-0.5 * X * X); }
Peter Jaeckel 寫了一篇關於如何解決這個問題的論文:
暗示(2006 年 7 月;Wilmott,第 60-66 頁,2006 年 11 月)。可能是金融數學中最複雜的瑣碎問題:如何穩健、簡單、高效、快速地計算布萊克的隱含波動率
可從 jaeckel.org 下載
根據我的經驗,最重要的事情是確保您使用的是一個沒有錢的選擇。如果期權在貨幣中,則使用看跌期權平價轉換為另一種情況。