選項

在 R 中計算 Vega 和 Delta

  • September 21, 2019

我正在嘗試為 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 期權價值的一階導數,關於prccfsigma

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

引用自:https://quant.stackexchange.com/questions/48814