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

在前篇期权定价的范例中,我们看到QuantLib在经过简单的参数设定后,便能精确的算出期权的价格与希腊字母。在此我们针对前10行的源码来分析,说明QuantLib的对象逻辑与使用方法。

首先,在使用QuantLib库前,当然要先安装它。安装QuantLib库非常简单,假定读者是使用Windows操作系统,按照默认方式安装好Python后,在开启控制面板(Console)的模式下,如下直接打入指令即可,

C:\>pip install QuantLib

便可自动安装。这样当我们程序执行源码#001行时,便可顺利载入QuantLib库。

#001 import QuantLib as ql

# 1.Enviroment

#003 settings = ql.Settings.instance()

#004 evDate = ql.Date(8, 6, 2021)

#005 settings.setEvaluationDate(evDate)

#006 Cal = ql.NullCalendar()

#007 DC365 = ql.Actual365Fixed()

#008 settlementDays = 0

#009 refDate = Cal.advance(evDate, settlementDays, ql.Days, ql.Following, False)

#010 maturity = Cal.advance(refDate, 1, ql.Years, ql.Following, False)

List 2-1

#003行产生一个settings的总体对象,这是使用QuantLib库时,通常都要产生的对象,它涉及到定价过程中,相关全局变量的设定。包括如,定价基准日、参考日的比价事件是否要考虑,定价日的现金流量是否要计算。后两项在利率衍生商品的计算才会用到,预设都是不用。

#004行中以ql.Date(8, 6, 2021)产生一个2021年6月8日的日期实体,令其为evDate(定价日)。QuantLib中的日期可以转换为整数,逻辑类似Excel,是以1900/1/1起算,每增加一日,数值加一。可以使用serialNumber()方法取得此整数值。Date对象本身有运算符重载的功能,可以直接将日期实体+1,得到明天的日期,也可以+7得到下周日期。你也可以使用weekday()方法,知道该日的星期几。此数值是以星期日为1,因此2021/6/8为星期二。当然,你可以使用year()、month()、dayOfMonth()等方法,取出年、月、日。

#005行,我们将evDate设定为定价日。

#006行产生一个NullCalendar的实体,这是一个没有假日的日历,便于我们程序的验证。QuantLib中有实作全世界上50+国家的日历。在进行金融计算时,尤其涉及到利率产品的利息计算,往往要针对利息计算的起、迄日,进行假日调整。因此,正确的假日推算非常的重要。如果你要产生中国的日历,可以用ql.China()产生。由于中国的假日中,有些传统假日,如春节、中秋节是以阴历决定,因此QuantLib可能不会正确推算。但是QuantLib有提供addHoliday()的方法,让我们自行增加假日,因此没有问题。

日历对象有一个重要的方法advance(),可以让我们推算未来特定的(营业日)日期。例如,在外汇衍生商品交易中,通常交易日后两个营业日,契约才会生效。如果你在周五(2022/10/21)交易一笔外汇期权,生效日会落在下周二(2022/10/25),因为周六、周日两天假日避开了。这里我们用了一个营业日调整的惯例,遇到假日往后移动(ql.Following),在#009、#010,我们就使用了这个advance()方法来推算日期。

#007行产生一个计日天数(DayCounter)实体,是以Actual/365Fixed的方式来计算利息的。计日天数是用来计算利息的起、迄日,折算为年化的单位是多少数量。举例而言,如果由2022/3/1~2022/6/1(92天),一季度的利息,在Actual/365Fixed下,是92/365=0.252054795。但是在Actual/360下,却是92/360=0.255555556。但是在30/360的方式下,就刚好是90/360=0.25。因为在30/360的方式下,一整月是30天,一年12个月以360天计算。30/360的方式比较与教科书的计算逻辑相似,因此我们要比对书本计算的结果时,有时会拿它来计算。在QuanLib中有实作8种计日天数对象,相当的完整。

#008我们令settlementDays = 0,这是指在交易日后,当天交易就清算确认,也可说是T+0的清算。通常一般国际衍生品市场是2天后清算。这里我们设为0天,是简单化计算。

#009行中,我们在NullCalendar下,由evDate推算settlementDays天后的日期,称之为参考日refDate(2021/6/8),并用ql.Following的方式进行营业日的调整。最后一个False参数,是表示我们不开启月底(End of Month, EOM)调整功能。

#010行我们推算由refDate起算1年的期间,当成期权的到期日maturity(2022/6/8)。一样是用ql.Following的方式进行营业日的调整。也不开启月底(End of Month, EOM)调整功能。

下表是我们本文说明的片段程序的列表。经过上文的说明,有没有觉得对程序被后的金融市场逻辑,有进一步的了解。其实,金融计算之困难,往往在于其背后有太多的市场知识需要了解。QuantLib的程序本身,就是我们了解这些知识的一个重要来源,作者也是经过10年的学习与实践使用,才学得这些知识的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,了解了您的需求,那么我们来逐步分析一下如何用二叉树定价雪球期权计算希腊字母。 1. 首先需要了解雪球期权的基本概念和特点。雪球期权是一种复合期权,其标的资产是一个或多个基础资产,且每个基础资产都有一个敲定价格和敲定日。当到达敲定日时,如果基础资产价格高于敲定价格,则该期权的收益为基础资产价格与敲定价格的差值;如果基础资产价格低于等于敲定价格,则该期权收益为0。此外,雪球期权具有累计效应,即当基础资产价格在敲定日前每个观察日都高于敲定价格时,期权收益会累计。 2. 接下来需要构建一个二叉树模型来估算雪球期权价格。二叉树模型是一种离散化的模型,通过迭代计算,可以得到期权的价格。构建二叉树时,需要确定期权价格变化的步长和方向,以及每个节点上的概率。在雪球期权中,每个节点的价格变化方向只有两种:上涨或下跌,因此可以使用二叉树模型。 3. 确定模型参数后,可以使用Python编写代码来实现二叉树定价。具体而言,可以使用递归算法计算每个节点的期望价值,然后逐层向上计算期权价格。在计算期权价格时,需要考虑每个节点的权重,即概率乘以期望价值,以及折现因子。折现因子可以通过无风险利率计算得到。 4. 最后,可以使用Python计算希腊字母希腊字母是评估期权风险和敏感度的重要指标,包括Delta、Gamma、Vega、Theta和Rho等。在使用二叉树定价雪球期权时,可以使用数值微分法计算希腊字母。具体而言,可以通过微调标的资产价格和波动率,计算相应的期权价格差异,然后除以微调量,得到Delta、Gamma、Vega等指标。 综上所述,以上是用Python实现二叉树定价雪球期权计算希腊字母的一般步骤。具体实现时,还需要考虑许多细节问题,比如二叉树模型的参数如何选择,微分法的精度如何控制等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值