波動性
使用神經網路的定價選項和計算隱含波動率,圖形的奇怪形狀
我有時對金錢的表達感到困惑。誰能告訴我這裡的情節是什麼?它來自名為:Pricing Options and Computing Implied Volatilities using Neural Networks 的論文。
通常,我將波動率視為形狀的函式,例如 sigmoid 的負值(倒 S)。這裡的形狀是不同的。是價格的曲線嗎 $ \frac {X_0} {K} $ ?
如前所述,貨幣性是指股票價格與行使價的比率,即 $ \frac{S}{K}. $ .
我使用 Python 3 重現了以下圖表。
將上面的圖與論文中的圖進行比較,它們表現出非常相似的行為,除了零波動性(我得到除以零誤差)。
源碼如下,可以在我的github上找到:
from Option import * import numpy as np import matplotlib.pyplot as plt sigma_upper = 10 x = np.linspace(1, sigma_upper, sigma_upper) d = 0 r = 0 T = 1 sigma = 0.1 K = 1 moneyness = np.arange(0.7, 1.4, 0.1) for i in moneyness[::-1]: S = i * K y = [Option(S, K, r, d, sigma, T).european_call() for sigma in range(1, sigma_upper+1)] plt.plot(x,y, label = 'moneyness = ' + str(round(i,2))) plt.xlabel('Volatility') plt.ylabel('Option Price') plt.legend();
Option
腳本源碼如下,可以在我的github上找到(我只提取了必要的部分):from scipy.stats import norm class Option: def __init__(self, S, K, r, d, sigma, T): ''' Parameters: =========== S: stock price K: strike price r: risk-free interest rate d: dividend sigma: volatility (implied) T: time to maturity Returns: =========== Forward price, vanilla European call and put option' prices, cash-or-nothing call and put options' prices, zero coupon bond and forward contract. ''' self.S = S self.K = K self.r = r self.d = d self.sigma = sigma self.T = T self.d1 = (np.log(self.S/self.K) + (self.r - self.d + self.sigma**2 / 2) * self.T) / (self.sigma * np.sqrt(self.T)) self.d2 = self.d1 - self.sigma * np.sqrt(self.T) def european_call(self): ''' output vanilla European call option's price using Black-Scholes formula ''' return self.S * np.exp(-self.d * self.T) * norm.cdf(self.d1) - self.K * np.exp(-self.r * self.T)*norm.cdf(self.d2)