Python

如何在 QuantLib 中同時使用收益率曲線和貼現曲線對看漲期權進行估值

  • August 13, 2019

我是 QuantLib 的新手,我正在嘗試評估一個簡單的歐洲電話。QuantLib 的 Black-Scholes-Merton 過程對我來說很有意義,但我不知道如何將貼現曲線納入其中。

請參閱下面的 Python 範例。現在這個過程需要一條指數曲線和一條紅利曲線。我需要採用指數曲線、股息曲線和貼現曲線的過程。我怎樣才能在 QuantLib 中做到這一點?

def call_atm_test():
   """Returns price of a european option using black-scholes"""
   today = ql.Date(22, ql.May, 2019)
   ql.Settings.instance().evaluationDate = today

   option = ql.EuropeanOption(ql.PlainVanillaPayoff(ql.Option.Call, 2856.27),
                              ql.EuropeanExercise(ql.Date(22, ql.May, 2020)))

   u = ql.SimpleQuote(2856.27)
   r = ql.SimpleQuote(0.0223)
   d = ql.SimpleQuote(0.01879)
   sigma = ql.SimpleQuote(0.15259)

   riskFreeCurve = ql.FlatForward(0, ql.TARGET(), ql.QuoteHandle(r), ql.Actual360())
   dividend_yield = ql.FlatForward(0, ql.TARGET(), ql.QuoteHandle(d), ql.Actual360())
   volatility = ql.BlackConstantVol(0, ql.TARGET(), ql.QuoteHandle(sigma), ql.Actual360())

   process = ql.BlackScholesMertonProcess(ql.QuoteHandle(u),
                                          ql.YieldTermStructureHandle(dividend_yield),
                                          ql.YieldTermStructureHandle(riskFreeCurve),
                                          ql.BlackVolTermStructureHandle(volatility))

   engine = ql.AnalyticEuropeanEngine(process)
   option.setPricingEngine(engine)

   result = option.NPV()
   return result

在 QuantLib 的 C++ 版本中,可以將單獨的貼現曲線傳遞給引擎,但該功能不會在 Python 中導出(因此,正如@Cornholio 所說,無風險曲線也用於貼現)。如果您在 Python 中需要此功能,請在https://github.com/lballabio/QuantLib-SWIG/issues打開一個問題。

基本上,你riskFreeCurve同時是一條收益率曲線和一條貼現曲線。QuantLib 只是將其保存為YieldTermStructure. 你可以看到

print(riskFreeCurve.discount(ql.Date(22, ql.May, 2020)))
print(riskFreeCurve.zeroRate(ql.Date(22, ql.May, 2020), ql.Actual360(), ql.Continuous))

給你折扣因子和收益率:

0.9775834043036867
2.230000 % Actual/360 continuous compounding

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