程式

找到隱含波動率的有效方法是什麼?

  • October 31, 2014

我有一個使用 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 下載

根據我的經驗,最重要的事情是確保您使用的是一個沒有錢的選擇。如果期權在貨幣中,則使用看跌期權平價轉換為另一種情況。

引用自:https://quant.stackexchange.com/questions/15198