選項
比使用 QuantLib 計算普通歐式期權的價格和希臘字母更簡單的方法?
我使用以下來計算價格和希臘人香草歐洲選項:
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 已經非常緊湊了。