使用Python的QuantLib库,进行期权的定价与希腊字母的计算(3) 您所在的位置:网站首页 bootstrapping方法计算即期利率 使用Python的QuantLib库,进行期权的定价与希腊字母的计算(3)

使用Python的QuantLib库,进行期权的定价与希腊字母的计算(3)

2024-01-06 13:09| 来源: 网络整理| 查看: 265

在前篇期权定价的范例中,我们看到QuantLib在经过简单的参数设定后,便能精确的算出期权的价格与希腊字母。我们在此,针对第二段市场参数设定的中的#013~#021行的源码来分析,说明QuantLib的市场数据对象中,最基本的三个对象的逻辑与使用方法。分别是报价(Quote)、利率期限结构(YieldTermStructure)、波动性期限结构(VolatilityTermStructure)。以及整并前三者,产生描述资产价格变化的随机过程对象(StochasticProcess)。

在#013我们设定了标的资产价格S0=100,然后在#014产生了一个SimpleQuote对象,它是继承自Quote对象。QuantLib使用报价对象来封装市场价格,其目的是用来控制价格变动传导的机制。由于真实的市场上,资产价格一直在变动,连带的期权价格自然也要随之变化。透过Quote对象的使用,可以把这个连动机制巧妙的实作出来。更者,可以透过Lazy Object的手法,以低度负担的方法达成此目的。我们将在后面的章节再进一步说明。

#015设定Quote对象的的握柄(Handle)给h_QS。简单说,握柄类似一个对象的聪明指针。它可以让我们存取到这个对象的内容,但在信息的传送上却更有效率。另外,它可以让我们对于这个对象的内容变化,有高度的掌控能力,方便前述连动机制的实现。Quote对象有提供一个value()方法让我们取值。注意,所有对象的方法,都可以透过其握柄对象取得,因此我们可以知道QuoteHandle有value()方法。

# 2.Market Data

#013 S0 = 100

#014 QS = ql.SimpleQuote(S0)

#015 h_QS = ql.QuoteHandle(QS)

#016 r = 0.06

#017 rTS = ql.FlatForward(settlementDays, Cal, r, DC365, ql.Compounded, ql.Annual)

#018 h_rTS = ql.YieldTermStructureHandle(rTS)

#019 q = 0.03

#020 qTS = ql.FlatForward(settlementDays, Cal, q, DC365, ql.Compounded, ql.Annual)

#021 h_qTS = ql.YieldTermStructureHandle(qTS)

#022 vol = 0.3

#023 volTS = ql.BlackConstantVol(evDate, Cal, vol, DC365)

#024 h_volTS = ql.BlackVolTermStructureHandle(volTS)

#025 GBSProcess = ql.GeneralizedBlackScholesProcess(h_QS, h_qTS, h_rTS, h_volTS)

List 3-1

#016设定资金成本r为6%。在#017中,我们以r产生一条水平的利率期限结构对象rTS。在QuantLib中,我们可以用即期利率(Spot Rate)、折现函数(Discount Function)与远期利率(Forward Rate)来产生利率期限结构。通常在测试的情况下,会使用FlatForward()来产生水平的利率期限结构。在真实的银行间市场中,我们会使用短天期的Shibor利率,搭配长天期的IRS利率,使用Bootstrapping的方法,推导出整条了即期利率曲线。QuantLib已经内建了三个这类Bootstrapping对象,分别是PiecewiseLinearZero()、PiecewiseLogLinearDiscount()、与PiecewiseFlatForward()。由于一般期权大都是一年以内到期,用Shibor利率搭配ZeroCurve()函数,产生短天期的即期利率曲线也就够用了。我们将在后面再加以说明ZeroCurve()的使用方式。类似的,#018以rTS产生水平的利率期限结构对象的握柄h_rTS。

一个利率期限结构对象最重要的事情,是提供特定时间的即期利率、折现函数与远期利率。你可以对QuantLib中任何一个利率期限结构对象探询这三个信息,范例中,我们要了0.25年的即期利率、折现函数。当然,你也可以传入日期来探询信息。

在真实世界中,资产收益率也可能是一个期限结构。举例而言,如果我们作的美元的期权,那标的资产就是美元。美元的资产收益率也就是美元的利率期限结构。因此,我们也就比照人民币利率资金成本,建立一条水平的收益期限结构对象。在#019设定资产收益q为3%。#020以q产生一条水平的收益期限结构对象qTS。#021以qTS产生水平的收益期限结构对象的握柄h_qTS。

期权的价格与波动性大小密切相关,传统的Black-Scholes模型假定波动性是固定不变的。然而真实世界中,波动性的大小一方面与期权的到期期限(Tenor)有关;另一方面,也跟期权的执行价格(Strike)有关。后者也就是所谓的Volatility Smile的现象。QuantLib不仅可以设定水平的波动性期限结构BlackConstVol(),还可以设定一维的波动性期限结构BlackVarianceCurve(),与二维的波动性曲面BlackVarianceSurface()。我们在此先以最简单的水平波动性期限结构为范例,展示计算的架构。其他的方法,留待后面介绍。在#022先令资产波动性vol为30%。#023再以vol产生一条水平的波动性期限结构对象volTS。#024以volTS产生水平的波动性期限结构对象的握柄h_volTS。

波动性期限结构对象可以让我们探询,在特定到期期限与执行价格下的市场波动性数值。我们可以使用blackVol()这个方法,得知此数值。范例程序中显示,在执行价格102,到期期限为0.25下,其值为30%。这是必然的,因为我们设定了固定不变的水平曲线。

在我们产生了这四个市场信息的握柄后,便可将资产价格的随机过程描述出来。在#025我们用h_QS、h_rTS、h_qTS、h_volTS四个握柄,产生一般化的Black-Scholes过程对象GBSProcess。当然,在比较现代的期权定价模型中,我们可以使用更复杂的随机过程来描述资产的变化。例如,HestonProcess()是一个普遍为外国投行使用的随机过程。

下图为在Jupyter Notebook中执行产出的画面,

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有