首页 > 解决方案 > Python中的障碍期权定价

问题描述

我们有一个欧式障碍看涨期权,具有执行价格 K>0和障碍价值

0 < b< S0,

哪里S_0是起始价格。根据合同, 0<t_1<...<t_k<T 必须检查价格S(t_k)>b 的次数k

假设S(t)u=1.1 d = 0.9r=0.05T=10和的二项式期权模型来描述,t_1=2,t_2=4以及t-3=7必须检查资产的次数。还要考虑S_0=100,K=125和 障碍b=60

我的尝试如下:

# Initialise parameters
S0 = 100      # initial stock price
K = 125       # strike price
T = 10        # time to maturity in years
b = 60        # up-and-out barrier price/value
r = 0.05      # annual risk-free rate
N = 4         # number of time steps
u = 1.1       # up-factor in binomial models
d = 0.9       # ensure recombining tree
opttype = 'C' # Option Type 'C' or 'P'

def barrier_binomial(K,T,S0,b,r,N,u,d,opttype='C'):
    #precompute values
    dt = T/N
    q = (1+r - d)/(u-d)
    disc = np.exp(-r*dt)
    
    # initialise asset prices at maturity
    S = S0 * d**(np.arange(N,-1,-1)) * u**(np.arange(0,N+1,1))
        
    # option payoff
    if opttype == 'C':
        C = np.maximum( S - K, 0 )
    else:
        C = np.maximum( K - S, 0 )
            
    # check terminal condition payoff
    C[S >= b] = 0
            
    # backward recursion through the tree
    for i in np.arange(N-1,-1,-1):
        S = S0 * d**(np.arange(i,-1,-1)) * u**(np.arange(0,i+1,1))
        C[:i+1] = disc * ( q * C[1:i+2] + (1-q) * C[0:i+1] )
        C = C[:-1]
        C[S >= H] = 0
    return C[0]

barrier_binomial(K,T,S0,b,r,N,u,d,opttype='C')


我什么也没收到,因为出了点问题,我不知道是什么

但这是模拟吗?

有人帮忙吗?

标签: pythonfor-loopquantitative-finance

解决方案


在您使用的循环中C[S >= H] = 0,但您的障碍参数定义为b. 此外,您C仅用 0 填充数组,因此请检查支付条件。一般来说,我发现在使用树模型时循环矩阵要容易得多。


推荐阅读