為什麼變異數交換長期偏斜?
我可以欣賞數學推導,但任何人都可以更直覺地解釋這一點嗎?
我經常錯誤地認為,由於複製投資組合的下行合約多於上行合約,變異數互換是長期偏斜的。但這是不正確的,這些權重只是為了確保 $vega 的風險敞口在下行和上行中是相等的。
是否與 volga 有關,即較高 vol 下行合約的 vega 將比較低 vol 合約的 vega 減少更快(由於偏斜增加)?
如果你把 Quantuple 的東西再深入一點,你就可以真正看出你是否長歪了。您也可以很容易地看到對凸性的依賴性(儘管很明顯您是長凸性)。
所以首先,我們需要一些微笑參數化,讓我們輕鬆控制凸度和傾斜度。我只是帶著一個編造的;
$$ \mathrm{convexity} = \mathrm{C} = \left. \frac{\partial^2 \sigma}{\partial K^2} \right|{K=F} \ \mathrm{skew} = \mathrm{S} = \left. \frac{\partial \sigma}{\partial K} \right|{K=F} \ \sigma_{\mathrm{atm}} = \sigma(F) $$ 這使:
$$ \frac{1}{2} C (K-F)^2 + S(K-F) + \sigma_\mathrm{atm} $$ *請注意,我理解這不是一個正確的微笑,我只是將其用作一個簡單的例子。
然後,如果您看起來非常極端的微笑;
$$ -0.001 \leqslant \mathrm{S} \leqslant 0.001\ 0 \leqslant \mathrm{C} \leqslant 0.0001\ \sigma_\mathrm{atm} = 20% $$ 在另一個答案中,您會得到一堆像 Quantuple 的圖像:
但是,我們可以做得更好:
所以,是的,你是長期偏斜的。但只有很小的一部分——你的凸度要長得多。
如果你想弄亂它,這裡是 python 程式碼。
import numpy as np def CND(X): a1,a2,a3,a4,a5 = 0.31938153, -0.356563782, 1.781477937, -1.821255978, 1.330274429 L = np.abs(X) K = 1.0 / (1.0 + 0.2316419 * L) w = 1.0 - 1.0 / np.sqrt(2*np.pi)*np.exp(-L*L/2.) * (a1*K + a2*K*K + a3*np.power(K,3) + a4*np.power(K,4) + a5*np.power(K,5)) if X<0: w = 1.0-w return w def BlackSholes(cp,S,X,T,r,v): d1 = (np.log(S/X)+(r+v*v/2.)*T)/(v*np.sqrt(T)) d2 = d1-v*np.sqrt(T) if cp=='c': return S*CND(d1)-X*np.exp(-r*T)*CND(d2) else: return X*np.exp(-r*T)*CND(-d2)-S*CND(-d1) def C(S,X,T,r,v): return BlackSholes("c", S, X, T, r, v) def P(S,X,T,r,v): return BlackSholes("p", S, X, T, r, v) def B(r,t): return np.exp(-r*t) def vol(k, vol_atm, convexity, skew, atm=100, max_vol=1): v = 0.5*convexity*k**2 + (skew - convexity*atm)*k + vol_atm + 0.5*convexity*atm**2 - skew*atm return max(1e-5,min(v, max_vol)) import scipy.integrate as integrate import scipy.special as special def var_swap(S,T,r,atm_vol, convexity, skew): F = S/B(r,T) return np.sqrt((2 / (T*B(r,T))) * (integrate.quad(lambda k: P(S, k, T, r, vol(k, atm_vol, convexity, skew, atm=F)) * k**-2, 0, F)[0] + integrate.quad(lambda k: C(S, k, T, r, vol(k, atm_vol, convexity, skew, atm=F)) * k**-2, F, F*5)[0])) r = 0.0 T = 1.0 S = 100.0 F = S/B(r,T) print F atm_vol = 0.2 convexity = 0.0001 skew = 0.001 ks = [k for k in range(1, int(F*2))] n_scenarios = 20 skews = np.linspace(-skew, skew, n_scenarios) convexities = np.linspace(0, convexity, n_scenarios) plot_smiles = False if plot_smiles: import colorsys blues = [colorsys.hsv_to_rgb(h, 1, 1) for h in np.linspace(0.5, 0.65, n_scenarios)] reds = [colorsys.hsv_to_rgb(h, 1, 1) for h in np.linspace(0.0, 0.15, n_scenarios)] from matplotlib import pyplot fig = pyplot.figure() ax_smiles = fig.add_subplot(1,1,1) ax_opts = ax_smiles.twinx() for i, (convexity, skew) in enumerate(zip(convexities, skews)): vols = [vol(k, atm_vol, convexity, skew, atm=F) for k in ks] opts = [BlackSholes("p" if k < F else "c", S, k, T, r, vol(k, atm_vol, convexity, skew, atm=F)) * k**-2 for k in ks] ax_smiles.plot(ks, vols, color=blues[i]) ax_opts.plot(ks, opts, color=reds[i]) pyplot.show() else: CC = np.linspace(0, convexity,n_scenarios) SS = np.linspace(-skew, skew,n_scenarios) CC, SS = np.meshgrid(CC, SS) VV = np.empty(CC.shape) for i in range(CC.shape[0]): for j in range(CC.shape[1]): VV[i,j] = var_swap(S, T, r, atm_vol, CC[i,j], SS[i,j]) from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt fig = plt.figure() ax = fig.gca(projection='3d') surf = ax.plot_surface(CC, SS, VV, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=True) ax.set_xlabel("Convexity") ax.set_ylabel("Skew") ax.set_zlabel("Var. Swap par rate") ax.set_ylim(ax.get_ylim()[::-1]) plt.show()
不過這裡有一個警告——這是變異數交換的理論值。市場不會根據理論值交易這些,存在差異,我還沒有看到一種解釋方法。對此的解決方案是您儲存一個 varswap par rate spread 表,可以在相應的開始和結束日期對其進行插值並應用於 varswap。
這種價差並非來自隨機波動率,在我看來,這似乎是某種保險,可以在發生某些事情時應對令人不快的巨額成本。另一種選擇是交易走廊變異數掉期(即僅當指數在走廊內時才會產生變異數),以限制這種下行的可能性。
但是,您可以通過上述交易輕鬆獲得偏斜敞口,如果僅在底層證券高於/低於某個水平時才會產生差異,那麼當底層證券接近障礙時您將做多/空頭偏斜 - 因為當您只看點的一側,歪斜和凸度有類似的效果。
正如我在評論中提到的那樣,認為輸入變異數交換具體等於“長期偏斜”是錯誤的。
但是,您可以說的是,在沒有跳躍的情況下(即在純擴散框架中,請參閱此處和此處以獲取更多資訊),公平變異數罷工 $ K_{var} $ 與名義上的變異數交換 $ N $ 和回報
$$ N \times ( \sigma^2_{\text{realised}}(0,T) - K_{var} ) $$ 應以以下票面利率(或變異數罷工)進行交易
$$ K_{var} = \frac{2}{B(0,T)T} \left[ \int_0^{F(0,T)} \frac{P(K,T)}{K^2} dK + \int_{F(0,T)}^\infty \frac{C(K,T)}{K^2} dK \right] $$ 在哪裡 $ T $ 計算契約的到期日, $ \sigma^2_{\text{realised}}(0,T) $ 將在地平線上實現的對數回報的變異數 $ [0,T] $ , $ B(0,T) $ 折扣係數, $ P(K,T) $ 和 $ C(K,T) $ 有執行權的歐式期權價格 $ K $ 和成熟 $ T $ 和 $ F(0,T) $ 遠期價格。 因此,變異數掉期的價格只是 OTMF 價格曲線的比例積分:
$$ K_{var} \propto \int_0^\infty \frac{V(K,T)}{K^2} dK $$ $$ V(K,T) = \begin{cases} P(K,T) & \text{if } K < F(0,T) \ C(K,T) & \text{otherwise} \end{cases} $$ 現在,假設以下情況, $ S_0=100 $ , $ r=q=0 $ (無風險中性漂移), $ T=1 $ 以及 3 種隱含波動率形狀 $ T $ :平坦,純歪斜,純凸度。如果您計算公平變異數罷工 $ K_{var} $ 在這些不同的配置下,您會看到負偏斜和正凸度都有積極的影響,而不是像您似乎指出的那樣特別偏斜。請參閱下面的模擬,其中我將“變異數價格”表示為 $ \sqrt{K_{var}}\times 100 $ 類似於對波動率指數(如 VIX)所做的事情。