金融数学——二叉树方法定价(上证50ETF)

上证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

上一篇:文件IO模型


下一篇:[LeetCode 1558] Minimum Numbers of Function Calls to Make Target Array