期權定價

給定反函式的擬合參數。(奧羅西,2015)

  • June 22, 2021

在嘗試複製 Orosi (2015) 的 5 參數隱含波動率模型時,我無法理解 Orosi 提出的參數擬合程序。我的主要目標是將模型校準到我觀察到的一組看漲價格,以便我可以推導出風險中性密度函式。

考慮到我對呼叫價格有經驗觀察, $ c $ 對於一系列行使價, $ x $ , 對於給定的時間和成熟度。然後我必須最小化平方誤差:

$ \sum_{i=1}^{n}(c(x_i)-c_i)^2 $

在哪裡 $ c(x_i) $ 必須從以下等式數值確定:

$ x_i=1-c(x_i)+G\frac{(1-c(x_i))^\beta}{c(x_i)^\alpha}*(Ac(x_i)+1)^\gamma $

具有以下約束:

$ G>0,\alpha>0,\beta>2,\gamma>1,0>A>-1 $

現在我很喜歡使案例如 scipy 的 fmin 函式等來最小化 Python 中的目標函式。但是,正如作者所指出的那樣, $ c(x) $ 以倒置的方式提供“ $ c(x) $ 必須使用黃金分割搜尋或類似的東西進行數值推導”。我不知道如何去做並以“通常的”非線性最小二乘法最小化方法來實現它?

如果有人能指出我正確的方向或提供 Python 或虛擬碼以便我自己弄清楚,將不勝感激

您需要使用某種形式的優化技術兩次。一次解決 $ c(x_i) $ 另一種是最小化MSE。我在下面添加了一個快速破解問題,其中使用 minimize_scalar 解決 $ c(x_i) $ 並且使用蠻力算法求解最小化MSE的參數。肯定有更好的優化可以使用,但這應該提供您正在尋找的結構。

警告:正如評論中提到的,我懷疑這在實踐中是否可用。此外,5 變數全域最小化問題也很難解決,我懷疑這些解決方案在實踐中將不可靠且無法使用。

祝你好運!

from scipy import optimize

PRECISION = 1e-3

def error_c(c, params, x):
   error = abs(1-c+params[0]*((1-c)**params[2]/(c**params[1]))*(params[4]*c+1)**params[3]-x)
   return error

def get_c(x, params):
   c = optimize.minimize_scalar(error_c,
                                bounds=(PRECISION, 1/PRECISION),
                                method='bounded',
                                args=(params, x),
                                tol=PRECISION)
   return c.x

def mse(params, x, c):
   mse = 0
   for x_i, c_i in zip(x, c):
       mse += (get_c(x_i, params)-c_i)**2
   return(mse)

x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
c = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]

bounds = ((PRECISION, 1/PRECISION),
         (PRECISION, 1/PRECISION),
         (2+PRECISION, 1/PRECISION),
         (1+PRECISION, 1/PRECISION),
         (-1+PRECISION, -PRECISION))

result = optimize.brute(mse, ranges=bounds, args=(x, c), Ns=10)
print(result)

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