選項

比使用 QuantLib 計算普通歐式期權的價格和希臘字母更簡單的方法?

  • January 26, 2022

我使用以下來計算價格和希臘人香草歐洲選項:

import QuantLib as ql

maturity_date = ql.Date(15, 1, 2016)
spot_price = 127.62
strike_price = 130
volatility = 0.20
dividend_rate =  0.0163
option_type = ql.Option.Call
       
risk_free_rate = 0.001
day_count = ql.Actual365Fixed()
calendar = ql.UnitedStates()
       
calculation_date = ql.Date(8, 5, 2015)
ql.Settings.instance().evaluationDate = calculation_date

payoff = ql.PlainVanillaPayoff(option_type, strike_price)
exercise = ql.EuropeanExercise(maturity_date)
european_option = ql.VanillaOption(payoff, exercise)

spot_handle = ql.QuoteHandle(
           ql.SimpleQuote(spot_price)
       )
flat_ts = ql.YieldTermStructureHandle(
           ql.FlatForward(calculation_date, 
                          risk_free_rate, 
                          day_count)
       )
dividend_yield = ql.YieldTermStructureHandle(
           ql.FlatForward(calculation_date, 
                          dividend_rate, 
                          day_count)
       )
flat_vol_ts = ql.BlackVolTermStructureHandle(
           ql.BlackConstantVol(calculation_date, 
                               calendar, 
                               volatility, 
                               day_count)
       )
bsm_process = ql.BlackScholesMertonProcess(spot_handle, 
                                                  dividend_yield, 
                                                  flat_ts, 
                                                  flat_vol_ts)

european_option.setPricingEngine(ql.AnalyticEuropeanEngine(bsm_process))

# price
bs_price = european_option.NPV()

price
6.749271812460607

# Greek sensitivities
delta = european_option.delta()
gamma = european_option.gamma()
vega = european_option.vega()
theta = european_option.theta()

delta
0.4582969846433817

gamma
0.018522331553816086

vega
41.655351781911605

theta
-5.131800499907545

這是為普通選項定價的大量程式碼。有沒有更直接的方法?

是的,我很清楚 QuantLib 是一個非常強大的引擎,不一定是為了簡單而建構的,正如 @SmallChess 在為什麼需要這麼多行程式碼來為 QuantLib 最簡單的選項定價

是否有任何包裝函式可以用來簡化事情?

謝謝!

您應該將 QuantLib 視為一組非常強大的工具/元件,您可以使用它們來建構自己的定價器。

如果您要為單個選項定價,是的,需要一些樣板程式碼才能獲得結果。

但是您始終可以將此程式碼重用於不同的輸入,特別是如果您想進行敏感性分析。我認為 QuantLib 儲存帶引號的輸入的方式,啟用所有後續的重新計算彌補了最初的樣板。

您可以簡單地自己編寫公式,但這不會減少程式碼量。我想說使用 quantlib 已經非常緊湊了。

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