面向对象方式实现二叉树算法

本文介绍了使用Python面向对象编程实现二叉树模型进行期权定价,详细讲解了二叉树框架、树类型描述(包括JR和CRR二叉树)以及偿付函数,并展示了如何组装这些组件来计算美式期权和欧式期权的价格。通过比较,得出美式期权价格始终高于欧式期权的结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

对期权定价时,一种有用并且很流行的方法是构造二叉树(binomial tree)。这里的二叉树是指代表期权期限内可能会出现的股票价格变动路径的图像。
这里写图片描述
上图是两步期权定价二叉树示意图。
两种主要的二叉树模型分别是JR(Jarrow-Rudd)二叉树模型和CRR(Cox-Ross-Rubinstein)二叉树。
这里写图片描述
r为无风险利率,σ为股价波动率。该模型的优点是上升和下降的概率是固定的,不因波动率的变化发生改变,不足是二叉树的形状不再对称而是往上倾斜,中心线上的标的资产价格不再等于初始中心值。
这里写图片描述
期权二叉树定价通常采用倒退定价法,首先得到每个结点的资产价格,然后在二叉树模型中采用倒推定价法,从树型结构图的末端T时刻开始往回倒推,为期权定价。需要注意的是,如果是美式期权,就要在树型结构的每一个结点上,比较在本时刻提前执行期权和继续再持有到下一个时刻再执行期权,选择其中价值较大者作为本结点的期权价值。

算法实现

下面将给出一个基于Python类的二叉树算法实现,把整个程序拆成三个互相独立的功能模块:
二叉树框架:树的框架结构,包括节点数以及基本参数的保存;
二叉树类型描述:具体数算法的参数,例如上例中的 Jarrow Rudd树;
偿付函数:到期的偿付形式,即为Payoff Function。

二叉树框架(Binomial Tree)
这个类负责二叉树框架的构造,也是基本的二叉树算法的调用入口。它有三个成员:

构造函数(__init__)
负责接受用户定义的具体参数,例如:spot等;真正二叉树的构造方法,由私有方法_build_lattice以及传入参数treeTraits共同完成;

树构造细节(_build_lattice
接手具体的树构造过程,这里需要依赖根据treeTraits获取的参数例如:up, down。

树回溯(roll_back
从树的最茂盛枝叶节点向根节点回溯的过程。最终根节点的值即为期权的价值。这里它要求的参数是一个pay_off函数。

import numpy as np
import math
from scipy.stats import norm
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties

font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15) #添加字体,显示中文


# 设置基本参数
ttm = 2.0                    # 到期时间,单位年
tSteps = 250                 # 时间方向步数
r = 0.03                     # 无风险利率
d = 0.02                     # 标的股息率
sigma = 0.2                  # 波动率
strike = 100.0               # 期权行权价
spot = 100.0                 # 标的现价
option_style = 'call'        # 看跌期权('put') or 看涨期权('call')
# 二叉树框架
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值