期權定價

選項值與兩個 r 包不同 - foptions,rquantlib

  • April 16, 2021

結果非常不同。我知道來自 quantlib 的程式碼,並且 quantlib 的結果似乎是正確的(接近市場價格)。有誰知道為什麼 fOptions 的價值如此之大或 fOptions 使用了不同的方法?謝謝

 library(fOptions)
   library(RQuantLib)

   TypeFlag<-"c"
   S<-530.32
   X<-550
   Time<-283/365
   r<-0.000703
   b<-0.05
   sigma<-0.2442

   fOptions.BAW<-BAWAmericanApproxOption(TypeFlag, S, X, Time, r, b, sigma,
                                         title = NULL, description = NULL)
   quantlib.BAW<-AmericanOption("call", S, X,
                                b, r, Time, sigma,
                                timeSteps=150, gridPoints=149, engine="BaroneAdesiWhaley")

   modelName<-c("fOptions.BAW","quantlib.BAW")
   result <-cbind(modelName,
            c(fOptions.BAW@price,quantlib.BAW[1]$value))
   colnames(result)<-c("Model","Value")

在此處輸入圖像描述

價格差異如此之大——唯一可能的原因是您在這兩個功能之間存在混淆。

事實上:

R> fOptions.BAW <- BAWAmericanApproxOption(TypeFlag, S, X, Time,
+                       r, b, sigma, title = NULL, description = NULL)
R> quantlib.BAW <- AmericanOption("call", X, S, b, r, Time, 
+                       sigma, timeSteps=150, gridPoints=149,
+                       engine="BaroneAdesiWhaley")
R> result <- c("fOptions"=fOptions.BAW@price,
+             "RQL"=quantlib.BAW$value)
R> result
fOptions      RQL 
47.7631  47.5193 
R> 

價格應該“非常”接近。我的結果是:

>result
Model          Value             
[1,] "fOptions.BAW" "47.7630796321483"
[2,] "quantlib.BAW" "47.747504045402"

原因在這裡我們需要處理三個變數:

r (risk free rate), d (dividend yield), b (cost-of-carry rate).

d = r -b 

這兩個函式的文件是:(看第一行和第三行的末尾)

BAWAmericanApproxOption(TypeFlag, S, X, Time, r, b,   
sigma, title = NULL, description = NULL)

AmericanOption(type, underlying, strike, dividendYield, riskFreeRate,  
maturity, volatility, timeSteps=150, gridPoints=149, engine="BaroneAdesiWhaley")

如您所見,一個使用“r”和“b”。另一個使用“d”和“r”。

在這裡對海報的程式碼進行一些修改(只需將“b”更改為“rb”)將解決問題。

library(fOptions)
library(RQuantLib)

TypeFlag<-"c"
S<-530.32
X<-550
Time<-283/365
r<-0.000703
b<-0.05
sigma<-0.2442

fOptions.BAW<-BAWAmericanApproxOption(TypeFlag, S, X, Time, r, b, sigma,
                                     title = NULL, description = NULL)
quantlib.BAW<-AmericanOption("call", S, X,
                            r-b, r, Time, sigma,
                            timeSteps=150, gridPoints=149, engine="BaroneAdesiWhaley")

modelName<-c("fOptions.BAW","quantlib.BAW")
result <-cbind(modelName,
        c(fOptions.BAW@price,quantlib.BAW[1]$value))
colnames(result)<-c("Model","Value")

結果將是我在上面發布的“47.76”和“47.74”。

##################—————————–

以下是我在 10 月 18 日寫的答案。我會保留在那裡。

##################—————————–

在 RQuantLib 中,您使用的公式應包括“dividendYield”,即“rb”而不是 b(年化持有成本率)

quantlib.BAW<-AmericanOption(type = TypeFlag, underlying = S, strike = X, dividendYield = r - b, 
                 riskFreeRate = r, maturity = Time, volatility = sigma, engine="BaroneAdesiWhaley")

這將為 fOptions 提供相同(相似)的答案。

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