期權定價
選項值與兩個 r 包不同 - foptions,rquantlib
結果非常不同。我知道來自 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 提供相同(相似)的答案。