從期權價格中獲得風險中性機率
假設我有以下數據(對於美國銀行目前的股票和期權價格)
罷工最後 IV 機率 4 8 5.43 0.5813566 0.0000000 7 11 2.45 0.2868052 0.1571556 8 12 1.68 0.3611712 0.0000000 9 13 0.93 0.3149634 0.0000000 10 14 0.42 0.2906097 0.4216563 11 15 0.16 0.2827868 0.0000000 12 16 0.06 0.2894076 0.0000000 13 17 0.03 0.3147238 12.5000000 14 18 0.02 0.3498626 0.0000000 15 19 0.02 0.4019490 0.0000000 16 20 0.01 0.4093461 100.0000000 17 21 0.01 0.4513419 0.0000000 18 22 0.02 0.5374740 0.0000000 19 23 0.01 0.5280132 Inf 20 24 0.02 0.6147154 0.0000000 21 25 0.01 0.5967137 0.0000000
我想做的是從中獲得股票收益的風險中性機率分佈。我讀了這個問題。據說為此我需要對期權價格進行二階導數,例如 $ \frac{\partial^2 c}{\partial K^2} $ . 我不能從選項公式(我使用 BSM)分析地做到這一點是對的嗎?那麼對此的實際解決方案是什麼(您能否詳細解釋一下,最好用我的數據舉例說明)?
在赫爾的書中指出,可以使用以下表達式來評估機率密度 $ g(K) $$$ g(K) = e^{rT}\frac{c_1+c_3-2c_2}{\delta^2} $$ 在哪裡 $ K $ 是罷工, $ c_1 $ , $ c_2 $ 和 $ c_3 $ 是到期的歐式看漲期權的價格 $ T $ 和罷工 $ K-\delta $ , $ K $ 和 $ K+\delta $ 分別。這是我應該在實踐中使用的方式來評估 $ g(K) $ ? 我已經用我的數據進行了嘗試,但我得到了不切實際的結果(例如負機率)。
感謝你的幫助
更新:根據@Quantuple 的答案我計算了機率, $ Probability_i $ , 股票價格將介於 $ Strike_{i-1} $ 和 $ Strike_{i+1} $ (我解釋對了嗎?)。我得到的值似乎是不切實際的(例如負機率)。在這種情況下,我嘗試對另一個數據(Apple 目前股票和期權價格)做同樣的事情,我得到了以下結果
罷工最後 IV 機率 8 85.0 21.41 0.2814728 0.00000000 10 90.0 16.65 0.2712171 0.04287807 11 92.5 14.15 0.2350727 0.00000000 12 95.0 12.10 0.2530275 0.00000000 13 97.5 10.05 0.2506622 0.01535698 14 100.0 8.23 0.2525582 0.00000000 15 105.0 5.01 0.2436027 0.00000000 16 110.0 2.71 0.2368809 0.07017230 17 115.0 1.35 0.2363258 0.00000000 18 120.0 0.61 0.2362289 0.00000000 19 125.0 0.29 0.2435342 0.85066163 20 130.0 0.15 0.2548730 0.00000000 21 135.0 0.08 0.2660732 0.00000000 22 140.0 0.05 0.2814728 4.00000000 23 145.0 0.03 0.2935170 0.00000000
我使用以下 R 程式碼
chain <- getOptionChain("BAC", Exp = "2016-05-20") chain <- chain$calls chain <- chain[, 1:2] chain$IV <- 0 time_remain <- as.numeric(as.Date("2016-05-20") - as.Date(Sys.time())) time <- time_remain/360 rf <- 0.01 Spot <- getQuote("BAC") Spot <- Spot$Last chain <- as.data.frame(apply(chain, 2, as.numeric)) for (i in 1:nrow(chain)) { chain$IV[i] <- iv.opt(S = Spot, K = chain$Strike[i], T = time, riskfree = rf, price = chain$Last[i], type = "Call") } chain <- na.omit(chain) ggplot(chain, aes(x = Strike, y = IV)) + geom_line(size = 1, color = "red") + ylab("Implied volatility") + theme(axis.text = element_text(size = 18), panel.border = element_rect(fill = NA, colour = "black", size = 2), axis.title = element_text(size = 20)) chain$Probability <- 0 for (i in seq(2, nrow(chain), 3)) { chain$Probability[i] <- (-2*chain$Last[i] + chain$Last[i-1] + chain$Last[i+1])/((chain$Last[i+1] - chain$Last[i-1])^2) } chain
對於蘋果來說,除此之外一切看起來都很好 $ P\left[S \in (135; 145)\right] = 4 $ 這是不真實的(再次)。獲得我可以以“常見”方式解釋的風險中性機率是否真實(例如,它們不是負數或它們的總和不超過 $ 1 $ )?
風險中性機率密度函式 $ q(.) $ 確實是由
$$ q(S_T=s) = \frac{1}{P(0,T)} \frac{ \partial^2 C }{\partial K^2} (K=s,T) $$ 在哪裡 $ P(0,T) $ 數字相關的折扣係數。這被稱為 Breeden-Litzenberger 恆等式。 因為您在實踐中沒有觀察到連續的看漲價格,所以您可以使用有限差分近似來估計二階導數。在您的情況下,因為罷工位於統一的網格上(恆定間距,如果不是,您應該使用更通用的公式,請參閱下面的其他評論),您可以使用
$$ \frac{ \partial^2 C }{\partial K^2} (K=s,T) \approx \frac{ C(K=s-\Delta K,T) - 2 C(K=s,T) + C(K=s+\Delta K,T)}{ (\Delta K)^2 } $$ 這相當於在你的目標打擊周圍形成一個(標準化的)蝴蝶 $ K=s $ . 因此,如果您的價格沒有套利,那麼您的 pdf 應該是正數,正如您正確提到的那樣。
這裡的問題是,您可能會觀察到一些“虛構的”套利機會……因為您處理的是最新價格。
例如,使用您的數據:
$$ q(S_T=10) = \frac{C(K=9,T)-2C(K=10,T)+C(K=11,T)}{1^2} = (4.75 - 2(3.68) + 2.52) < 0 $$ 正如您所指出的,這似乎不正確。 實際上,如果您只是查看呼叫值 $ K={21,22,23,24} $ ,您會看到價格甚至不是單調遞減的,因此有明顯的垂直價差套利機會。
所以是的,你確實有正確的公式,但你需要要麼
- 清理您的輸入價格。您可以查看無套利平滑等技術,但這超出了您的問題範圍。
- 使用更可靠的數據源(例如,當使用實時價格時,由於套利者的存在,這種明顯的套利機會很少持續存在,而且通常存在買賣差價)。
OP要求的一些澄清:
- 顧名思義,最後價格表示某種證券在市場收盤前的最後交易價格。使用這種價格可能很危險。例如,假設我們離市場收盤只有幾秒鐘,而您觀察到一堆價格 $ C(K_1) $ ,…, $ C(K_N) $ , 不允許套利機會。現在,有人想交易 $ C(K_3) $ 就在市場收盤前。假設在給定以下值的情況下,進行交易的價格將意味著蝴蝶套利機會 $ C(K_1) $ 和 $ C(K_2) $ ……好吧,如果市場在他的交易後關閉,沒有參與者實際上可以對最後一個參與者創造的套利機會做任何事情。在交易所顯示的最後價格中,將出現套利機會,儘管在實踐中沒有人可以從中受益。這就是我所說的“虛構”套利。
- $ q(S_T = K) $ 不代表機率**_** $ S_T $ 將介於罷工之間 $ K-\Delta K $ 和 $ K + \Delta K $ . 相反,它應該在無限小的意義上理解。進一步來說:
$$ q(S_T = K) = \lim_{\Delta K\rightarrow 0} Prob[ K - \Delta K \leq S_T \leq K + \Delta K ] $$ 3. 在我的回答的第一部分,我寫道,如果你有一個恆定的間距,你只能使用我給出的公式(這也恰好是你在原始文章中提到的那個) $ \Delta K $ 在您的罷工網格上。在這裡你沒有。在這種情況下,您應該使用:
$$ \frac{ \partial^2 C }{\partial K^2} (K=s,T) \approx \frac{2 }{\Delta K^-(\Delta K^- + \Delta K^+)} C(K=s-\Delta K^-,T) - \left( \frac{2}{\Delta K^-(\Delta K^- + \Delta K^+)} + \frac{2}{\Delta K^+(\Delta K^- + \Delta K^+)} \right) C(K=s,T) + \frac{2 }{\Delta K^+(\Delta K^- + \Delta K^+)} C(K=s+\Delta K^+,T) $$ 在哪裡 $ \Delta K^- $ 允許不同於 $ \Delta K^+ $ (如果它們相同,您可以使用統一網格的原始公式)。請注意,這兩個公式都是近似值,越小 $ \Delta K $ ,它們工作得越好。
在您的範例上執行此公式應給出(第一列 = 執行價格 $ K $ , 第二列 = 最後價格 $ C(K,T) $ , 第三列 = $ q(S_T=K) $ )
85.0000 21.4100 南 90.0000 16.6500 -0.0128 92.5000 14.1500 0.0720 95.0000 12.1000 0.0000 97.5000 10.0500 0.0368 100.0000 8.2300 0.0224 105.0000 5.0100 0.0368 110.0000 2.7100 0.0376 115.0000 1.3500 0.0248 120.0000 0.6100 0.0168 125.0000 0.2900 0.0072 130.0000 0.1500 0.0028 135.0000 0.0800 0.0016 140.0000 0.0500 0.0004 145.0000 0.0300 NaN
這仍然不能完全令人滿意(請注意,在沒有相關數據的情況下,我採用了單位折扣係數)。
我建議僅使用 OTMF 選項以獲得更好的結果。也就是說,使用看漲期權進行罷工 $ K \geq F(0,T) $ (您看到 pdf 的表現相對良好)並放置罷工選項 $ K < F(0,T) $ .