上证50ETF/2019年1月4日
期权代码10001671.XSHG
# -*- Coding: UTF-8 -*-
# biotree.py
# @作者 ML
# @创建日期 2020-12-29T23:24:15.972Z+08:00
# @最后修改日期 2020-12-29T23:24:31.082Z+08:00
#
import numpy as np
# 二叉树模型对欧式看涨期权定价
def binarytree_ecall(S, K, r, sigma, t, N):
'''S:标的资产价格;K:期权的执行价格;r:年化无风险利率(找到shibor加小数点);
sigma:标的资产收益率的标准差;t:年化的时间长度;N:二叉树的步长'''
deltaT = t / N
u = np.exp(sigma * np.sqrt(deltaT))
# 根据风险中性定价公式,求S方差,即可推导
d = 1 / u
P = (np.exp(r * deltaT) - d) / (u - d)
# 风险中性测度
prices = np.zeros(N + 1)
# 股票价格向量用0填充
calls = np.zeros(N + 1)
# 期权价格向量用0填充
for i in range(0, N + 1):
prices[i] = S * (u**i) * (d**(N - i))
# 一次计算第1、2……个价格dddd,uddd,udd,uud,uuu
calls[i] = np.maximum(prices[i] - K, 0)
# 然后计算对应的看涨期权价格
# 这样就得到了最后一层二叉树的股票价格和期权价格
for i in range(N, 0, -1):
# 二叉树叶节点往内部节点遍历
for j in range(0, i):
calls[j] = (
P * calls[j + 1] +
(1 - P) * calls[j]) * np.exp(-r * deltaT)
# 得到前一层的价格,此时已经是N个期权价格
# 下一次i迭代将变成N-1个期权价格,总共迭代N次
# 只剩下1个价格。
return calls[0]
c = binarytree_ecall(
S=2.265, K=2.05, r=0.019680, sigma=0.239174492, t=0.46, N=250)
print('50ETF欧式看涨期权的价格为', round(c, 100))
print('real open price: 0.29')
计算结果:50ETF欧式看涨期权的价格为 0.28560149260689566