外汇期权的Quantlib定价,用于delta()和npv()函数的货币

2024-05-18 23:41:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我不清楚有关外汇期权的Quantlib约定。 我使用Quantlib库已经有一段时间了,并尝试将其应用于外汇期权定价。 我面临的一个问题是,在为欧元兑美元期权定价时,NPV()和Delta()等函数是以欧元还是以美元表示

我举的例子如下,我从彭博社得到了我的意见,并从一家知名供应商那里得到了定价

结果应如下所示:

Option pricing of 1 month EURUSD 1.22 strike

With vol and delta emphasized

我使用的代码如下:

import QuantLib as ql
import datetime as datetime

#1 month call option

evaluationdate = ql.Date(4,2,2021)
settlementdate = ql.Date(8,2,2021)
exercisedate = ql.Date(4,3,2021)
expirationdate = ql.Date(8,3,2021)
calendar = ql.JointCalendar(ql.UnitedStates(), ql.TARGET())
rate_foreign = 0.0011525 #USD rate
rate_domestic = -0.0058071 #EUR rate
spot = 1.20074
volatility_quote = 0.0620
spotQuote = ql.SimpleQuote(spot)
volquote = ql.SimpleQuote(volatility_quote)
strike = 1.22
optiontype = "call"


def vanille_option2(evaluationdate, expirationdate, rate_domestic, rate_foreign, spotQuote, strike, volQuote, calendar, optiontype):
    ql.Settings.instance().evaluationDate = evaluationdate
    if(optiontype == "call"):
        type = ql.Option.Call
    else:
        type = ql.Option.Put
    spothandle = ql.QuoteHandle(spotQuote)
    volhandle = ql.QuoteHandle(volQuote)
    riskFreeCurveForeign = ql.YieldTermStructureHandle(ql.FlatForward(2, calendar, ql.QuoteHandle(ql.SimpleQuote(rate_foreign)), ql.Actual365Fixed()))
    riskFreeCurveDomestic = ql.YieldTermStructureHandle(ql.FlatForward(2, calendar, ql.QuoteHandle(ql.SimpleQuote(rate_domestic)), ql.Actual365Fixed()))
    flatVolTS = ql.BlackVolTermStructureHandle(ql.BlackConstantVol(2, calendar, volhandle, ql.Actual365Fixed()))
    process = ql.GarmanKohlagenProcess(spothandle, riskFreeCurveDomestic,riskFreeCurveForeign, flatVolTS)
    typePayOff = ql.PlainVanillaPayoff(type, strike)
    exercise = ql.EuropeanExercise(expirationdate)
    engine = ql.AnalyticEuropeanEngine(process)
    option = ql.EuropeanOption(typePayOff,exercise)
    option.setPricingEngine(engine)
    return option


optie = vanille_option2(evaluationdate,expirationdate,rate_domestic,rate_foreign,spotQuote,strike,volquote,calendar,optiontype)
print("Price")
print(optie.NPV()*1000000/spot)
print(optie.NPV()*1000000)
print("delta")
print(optie.delta()*1000000/spot)
print(optie.delta()*1000000)

打印结果如下所示:

Price 

1752.8090365512182

2104.6679225485095

delta

156258.58086382193

187625.92838642554

从供应商的定价中可以看出,欧元的净现值应为1760欧元,德尔塔应为183000欧元。 因此,我得出结论,要获得欧元的净现值和增量,净现值应该除以即期,但增量不应该除以即期。 这使我困惑。 因此,我的问题很清楚:在为外汇期权定价时,用Quantlib表示NPV和Delta(&;Gamma&;Vega)的惯例是什么


Tags: dateratecalendar定价deltaoptionprint期权

热门问题