python期权定价:欧式香草期权-二叉树

1、函数实现:binomial_european_option_price函数基于二叉树模型计算欧式期权的价格,其中:

        二叉树构建:通过上涨因子 u = e^(σ√Δt) 和下跌因子 d = 1/u 模拟标的资产价格路径。

        风险中性概率:p = (e^(rΔt) - d)/(u - d),用于计算未来现金流的期望值。

        折现因子:df = e^(-rΔt),将未来价值折现到当前。

        初始化到期价值:计算到期时所有可能价格路径的期权内在价值。

        逆向推导:从到期日倒推,逐层计算每个节点的折现期望价值,最终得到当前期权价格。

2、输入参数:

        S:标的资产当前价格。

        K:行权价。

        T_days:剩余到期天数(自动转换为年。本代码中使用的是自然日)。

        sigma:年化波动率(例如0.2代表20%)。

        r:无风险利率(例如0.05代表5%)。

3、注意事项:

        n_steps步数越多结果越精确(但计算量增大)。

        n_steps 较大时结果会收敛到Black-Scholes模型的解。

import math

def binomial_european_option_price(S, K, T_days, sigma, r, n_steps=100):
    """
    使用二叉树模型计算欧式期权的认购和认沽价格
    输入参数:
    S: 标的价格
    K: 行权价
    T_days: 剩余到期天数
    sigma: 年化波动率
    r: 无风险利率(年化)
    n_steps: 二叉树步数(默认100)
    返回:
    C: 认购期权价格
    P: 认沽期权价格
    """
    T = T_days / 365.0
    if T <= 0:
        return (max(S-K, 0.0), max(K-S, 0.0))
    
    dt = T / n_steps
    u = math.exp(sigma * math.sqrt(dt))
    d = 1 / u
    p_raw = (math.exp(r * dt) - d) / (u - d)
    p = max(0.0, min(1.0, p_raw))
    df = math.exp(-r * dt)
    
    # 初始化价值数组
    call = [0.0] * (n_steps + 1)
    put = [0.0] * (n_steps + 1)
    
    # 计算到期价值
    for j in range(n_steps + 1):
        ST = S * (u ** (n_steps - j)) * (d ** j)
        call[j] = max(ST - K, 0.0)
        put[j] = max(K - ST, 0.0)
    
    # 逆向推导
    for m in range(n_steps, 0, -1): 
        for j in range(m):
            call[j] = (p * call[j] + (1-p) * call[j+1]) * df
            put[j] = (p * put[j] + (1-p) * put[j+1]) * df
    
    return (call[0], put[0])

# 示例使用
if __name__ == "__main__":
    S = 100.0   # 标的价格
    K = 100.0   # 行权价
    T_days = 30  # 剩余到期天数
    sigma = 0.2  # 波动率
    r = 0.05     # 无风险利率
    
    C, P = binomial_european_option_price(S, K, T_days, sigma, r)
    print(f"认购期权价格: {C:.4f}")
    print(f"认沽期权价格: {P:.4f}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值