選項
在 R 中計算 Vega 和 Delta
我正在嘗試為 R 中的大量 CEO 薪酬契約樣本計算希臘字母。但是,我的 vega 計算結果都為零。
在此過程中,我遵循Core 和 Guay$$ 2002 $$:
以下是一份包含多個選項的合約的快照:
library(tidyverse) df <- tibble(prccf = rep(36.55, 15), Xc = 28:42, maturity = seq(0.5, 7.5, by = (1/2)), rf = rnorm(15, 4.5, 0.25), d = rep(0.025, 15), sigma = rep(0.30, 15))
我計算 Z:
df <- df %>% mutate(Zc = (log(prccf / Xc) + maturity * (rf - d + sigma^2 / 2)) / (sigma * sqrt(maturity)))
然後我取 Black-Scholes 期權價值的一階導數,關於
prccf
和sigma
:deriv(~ ((prccf * exp(-d * maturity) * pnorm(Zc)) - (Xc * exp(-rf * maturity) * pnorm(Zc - sigma * sqrt(maturity)))), c("prccf", "sigma"))
這使:
delta = exp(-d * maturity) * pnorm(Zc) vega = Xc * exp(-rf * maturity) * (dnorm(Zc - sigma * sqrt(maturity)) * sqrt(maturity))
所以:
df <- df %>% mutate(delta = exp(-d * maturity) * pnorm(Zc), vega = Xc * exp(-rf * maturity) * (dnorm(Zc - sigma * sqrt(maturity)) * sqrt(maturity)))
但是 vega 的所有值都為零。這與參數無關。
vega 部分在與正態密度函式相乘時變為零:
dnorm(Zc - sigma * sqrt(maturity))
,因為Zc
包含相對較高的正態分佈值,所以結果為 0。然後整條線乘以 0,最終值也為 0。我真的不知道如何解決這個問題,因為 Zc 確實擷取了正確的值。(“增量程式碼”是正確的,因為我可以將它與另一個數據集進行比較(相關性為 0.999)。)
當我依賴包而不是手動計算它時,也會發生這種情況,例如:
library(derivmkts) bsopt(s = df$prccf, k = df$Xc, v = df$sigma, r = df$rf, tt = df$maturity, d = df$d)[['Call']][c('Delta', 'Vega'), ]
有人可以幫我解決這個問題嗎?我被卡住了,特別是因為增量部分是正確的。謝謝!
你確定你的
rf
價值觀是對的嗎?如果15
表示 15%,則將其寫為0.15
。