我有一個資料框:
df <- structure(list(LAST = c(3.4, 2.52, 1.82, 1.16, 0.69, 0.36, 4,
3.21, 2.54, 1.93), CURRENTPRICE = c(464.16, 464.16, 464.16, 464.16,
464.16, 464.16, 464.16, 464.16, 464.16, 464.16), STRIKEPRICE = c(461,
462, 463, 464, 465, 466, 461, 462, 463, 464), YEARSTOEXPIRATION = c(0.00273972602739726,
0.00273972602739726, 0.00273972602739726, 0.00273972602739726,
0.00273972602739726, 0.00273972602739726, 0.010958904109589,
0.010958904109589, 0.010958904109589, 0.010958904109589)), row.names = c(NA,
-10L), class = c("data.table", "data.frame"))
我正在嘗試使用來自每一行的資料并使用 RQuantLib 包中的 AmericanOptionImpliedVolatility 函式創建一個新列,計算每一行的隱含波動率:
df$IMPLIEDVOLATILITY <- AmericanOptionImpliedVolatility(type="call", value=df$LAST, underlying=df$CURRENTPRICE, strike=df$STRIKEPRICE, dividendYield=0.00, riskFreeRate=.03, maturity=df$YEARSTOEXPIRATION, volatility=0.2)
我知道代碼是錯誤的,因此我收到一條錯誤訊息:
“ americanOptionImpliedVolatilityEngine 中的錯誤(型別,值,底層,:期望一個值:[extent=10]。”
如何正確使用“AmericanOptionImpliedVolatility”函式和行值作為變數來創建具有該結果值的新列?
uj5u.com熱心網友回復:
df %>%
rowwise() %>%
mutate(IMPLIEDVOLATILITY =
RQuantLib::AmericanOptionImpliedVolatility(type="call",
value = LAST,
underlying = CURRENTPRICE,
strike = STRIKEPRICE,
dividendYield = 0.00,
riskFreeRate =.03,
maturity = YEARSTOEXPIRATION,
volatility=0.2))
LAST CURRENTPRICE STRIKEPRICE YEARSTOEXPIRATI~ IMPLIEDVOLATILI~
<dbl> <dbl> <dbl> <dbl> <AmrcnOIV>
1 3.4 464. 461 0.00274 0.12058321
2 2.52 464. 462 0.00274 0.11218994
3 1.82 464. 463 0.00274 0.11577334
4 1.16 464. 464 0.00274 0.10918985
5 0.69 464. 465 0.00274 0.10744424
6 0.36 464. 466 0.00274 0.10472401
7 4 464. 461 0.0110 0.09853768
8 3.21 464. 462 0.0110 0.09443249
9 2.54 464. 463 0.0110 0.09343687
10 1.93 464. 464 0.0110 0.09130677
使用基礎 R,您可以執行以下操作:
transform(df, IMPLIEDVOLATILITY =
Vectorize(RQuantLib::AmericanOptionImpliedVolatility)(type="call",
value = LAST,
underlying = CURRENTPRICE,
strike = STRIKEPRICE,
dividendYield = 0.00,
riskFreeRate =.03,
maturity = YEARSTOEXPIRATION,
volatility=0.2))
uj5u.com熱心網友回復:
您可以使用以下解決方案。您必須AmericanOptionImpliedVolatility在 rowwise 操作中應用函式,因為該函式不是矢量化函式。pmap_dblfunction 并行地對各種引數應用一個函式,如果您注意到我使用了..1, ..2and ... 來參考包含資料集中 4 個變數的行中每個變數的相應值:
library(RQuantLib)
library(purrr)
library(dplyr)
df %>%
mutate(IMPLIEDVOLATILITY = pmap_dbl(cur_data(),
~ AmericanOptionImpliedVolatility(type = "call",
value = ..1,
underlying = ..2,
strike = ..3,
dividendYield = 0.00,
riskFreeRate = 0.03,
maturity = ..4,
volatility = 0.2)))
LAST CURRENTPRICE STRIKEPRICE YEARSTOEXPIRATION IMPLIEDVOLATILITY
1: 3.40 464.16 461 0.002739726 0.1205832
2: 2.52 464.16 462 0.002739726 0.1121899
3: 1.82 464.16 463 0.002739726 0.1157733
4: 1.16 464.16 464 0.002739726 0.1091899
5: 0.69 464.16 465 0.002739726 0.1074442
6: 0.36 464.16 466 0.002739726 0.104724
7: 4.00 464.16 461 0.010958904 0.09853768
8: 3.21 464.16 462 0.010958904 0.09443249
9: 2.54 464.16 463 0.010958904 0.09343687
10: 1.93 464.16 464 0.010958904 0.09130677
uj5u.com熱心網友回復:
您可以簡單地使用apply并使用列名按行分配值。
請記住,我撰寫了一個虛擬函式,因此在我的示例中結果值顯然是錯誤的。
df$IMPLIEDVOLATILITY <- apply( df, 1, function(x)
AmericanOptionImpliedVolatility(
type="call", value=x["LAST"], underlying=x["CURRENTPRICE"],
strike=x["STRIKEPRICE"], dividendYield=0.00, riskFreeRate=.03,
maturity=x["YEARSTOEXPIRATION"], volatility=0.2 ) )
df
LAST CURRENTPRICE STRIKEPRICE YEARSTOEXPIRATION IMPLIEDVOLATILITY
1 3.40 464.16 461 0.002739726 467.56
2 2.52 464.16 462 0.002739726 466.68
3 1.82 464.16 463 0.002739726 465.98
4 1.16 464.16 464 0.002739726 465.32
5 0.69 464.16 465 0.002739726 464.85
6 0.36 464.16 466 0.002739726 464.52
7 4.00 464.16 461 0.010958904 468.16
8 3.21 464.16 462 0.010958904 467.37
9 2.54 464.16 463 0.010958904 466.70
10 1.93 464.16 464 0.010958904 466.09
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/356523.html
下一篇:一種用引號重寫變數的快速方法
