期權定價 - 虛值 (OTM) 看漲期權的價格結果不正確
我有股票的期權數據-
structure(list(Curr_Date = structure(c(18904L, 18904L, 18904L, 18904L, 18904L, 18904L, 18904L, 18904L, 18904L), class = c("IDate", "Date")), ticker = c("GOLD", "GOLD", "GOLD", "GOLD", "GOLD", "GOLD", "GOLD", "GOLD", "GOLD"), ExpDate = structure(c(18915L, 18915L, 19013L, 19013L, 19013L, 19377L, 19377L, 19377L, 19377L ), class = c("IDate", "Date")), Strike = c(18, 30, 10, 30, 40, 10, 18, 30, 40), Option_Type = c("calls", "calls", "calls", "calls", "calls", "calls", "calls", "calls", "calls"), OI = c(3570L, 341L, 723L, 68772L, 26302L, 1731L, 15662L, 37274L, 13215L), Vol = c(1L, 1L, 5L, 40L, 1L, 1L, 2L, 4L, 5L), ask = c(0.56, 0.01, 8.6, 0.07, 0.04, 10, 2.8, 0.51, 0.21), bid = c(0.54, 0, 8.2, 0.06, 0.03, 8.05, 2.58, 0.48, 0.2), StockPrice = c(18.23, 18.23, 18.23, 18.23, 18.23, 18.23, 18.23, 18.23, 18.23), days2exp = c(0.0301369863013699, 0.0301369863013699, 0.298630136986301, 0.298630136986301, 0.298630136986301, 1.2958904109589, 1.2958904109589, 1.2958904109589, 1.2958904109589 ), calculated_price = c(0.53, 0, 8.27, 0, 0, 8.5, 2.87, 0.36, 0.06)), row.names = c(NA, -9L), class = c("data.table", "data.frame" ), .internal.selfref = <pointer: 0x562667c9eac0>)
看起來像 -
Curr_Date ticker ExpDate Strike Option_Type OI Vol ask bid StockPrice days2exp calculated_price 1: 2021-10-04 GOLD 2021-10-15 18 calls 3570 1 0.56 0.54 18.23 0.03013699 0.53 2: 2021-10-04 GOLD 2021-10-15 30 calls 341 1 0.01 0.00 18.23 0.03013699 0.00 3: 2021-10-04 GOLD 2022-01-21 10 calls 723 5 8.60 8.20 18.23 0.29863014 8.27 4: 2021-10-04 GOLD 2022-01-21 30 calls 68772 40 0.07 0.06 18.23 0.29863014 0.00 5: 2021-10-04 GOLD 2022-01-21 40 calls 26302 1 0.04 0.03 18.23 0.29863014 0.00 6: 2021-10-04 GOLD 2023-01-20 10 calls 1731 1 10.00 8.05 18.23 1.29589041 8.50 7: 2021-10-04 GOLD 2023-01-20 18 calls 15662 2 2.80 2.58 18.23 1.29589041 2.87 8: 2021-10-04 GOLD 2023-01-20 30 calls 37274 4 0.51 0.48 18.23 1.29589041 0.36 9: 2021-10-04 GOLD 2023-01-20 40 calls 13215 5 0.21 0.20 18.23 1.29589041 0.06
從列中可以看出,
calculated_price
與買入價或賣出價相比,OTM(價外)看漲期權的價格被大大低估了。我使用以下公式來計算期權的預期價格。r = 0.0148 # Risk free rate v = 0.3188 # Historic volatility of 252 trading days b = 0.02 # TTM yeild dt[, d1 := ((log(StockPrice/Strike)) + (r - b + (v^2)/2) * days2exp)/(v * (sqrt(days2exp)))] dt[, d2 := d1 - v * (sqrt(days2exp))] dt[, calculated_price := round(StockPrice * pnorm(d1) - Strike*exp(-r * days2exp)*pnorm(d2), 2)]
有人可以指出這些公式有什麼問題以及如何糾正錯誤定價嗎?
預期結果是 - 列中的值
calculated_price
應介於bid
和ask
列中的市場價格之間。謝謝!
不幸的是,如果您想自己正確完成這項工作,那麼您獲得“公平”理論期權價格的最終目標將需要付出很多努力。
以下是幾個原因:
- 納斯達克市場的所有股票期權都是美式的
- IVOL 表現出偏差
- 你需要有可靠的利率
- 股息假設將相當大地影響您對較長期限的定價
遠期價格不直接針對上市期權市場報價。期貨可以報價,但到期日通常與(所有)期權到期日不一致。插值並非微不足道,因為未來的股息(甚至支付時間)通常是未知的。因此,大多數從業者使用普通股權期權來退出(隱含)股息。
問題在於美式期權的看跌期權平價不成立。即使對於歐式期權,也經常會出現交易時間不同和期權價格不穩定等問題。由於股息支付本質上是離散的,因此您需要一個帶有日期和金額的股息時間表,以得出隱含的股息曲線。該曲線通常比人們希望的更嘈雜並且通常被平滑(通過類似的卡爾曼濾波器)。
對於美式期權,首先需要通過稱為去美國化的過程計算歐洲等值期權。對於非流動性的期限,可能還需要外推。
對於利率,習慣上使用剝離的利率曲線。這些過去是基於 Libor 3m,但現在主要是 SOFR 曲線,它們基本上是以類似的方式建構的。
最後,您的主要任務將是建構可靠的 vol 表面。SVI經常被使用。Voladynamics提供了一些有趣的想法和例子。
您的公式似乎排除了 $ e^{-q} $ . 正如維基百科正確指出的那樣,它應該是$$ {\displaystyle Se^{-q\tau }\Phi (d_{1})-e^{-r\tau }K\Phi (d_{2}),} $$ 這個公式還要求利率和股息是連續的。
此連結顯示數據源(也是 IVOL)。老實說,我不熟悉其中任何一個,但它們可能會有所幫助(可靠)。許多像彭博社這樣的供應商也以一定成本提供 Vol 表面作為其標準產品的一部分。