哪个C是一个复杂的变量,并且
我试图使用Python计算它,但我的结果没有意义。期权价格高于基础资产。并与有限系列的默顿(Merton)(1976)的方法进行比较,因为我的输入应为20个,但它是177!
我正在使用的输入是:
# Models parameters
# BSM parameters
S = 100 # Preço do ativo no momento de compra da put
K = 115 # Strike
T = 1 # Tempo até o vencimento
r = 0.125 # Taxa livre de risco
sigma = 0.15 # Volatilidade
# Merton JD parameters
lambda_ = 0.5 # Intensidade dos saltos
mu_j = 0.2 # Média dos saltos
sigma_j = 0.45 # Desvio padrão dos saltos
# Kou JD parameters
p = 0.65
q = (1-p)
eta1 = 40
eta2 = 50
集成功能是(忽略希腊字母,这是简单的部分):
def JD_put_value(S, K, T, t, r, sigma, jump_dist):
'''
Inputs:
S : float - Asset price
K : float - Strike price
T : float - Time
r : float - Free-risk rate
sigma : float - Asset volatility
jump_dist : str - Jumps-distribution
Outputs:
put_price : float
delta : float
gamma : float
theta : float
vega : float
rho : float'''
E_y_LN = np.exp(mu_j + 0.5 * sigma_j**2)
def E_yw_LN(omega):
return np.exp(-omega * mu_j + 0.5 * (omega**2) * (sigma_j**2)) # Esperança matemática de y^{-omega}
E_y_DE = p/eta1 - q/eta2
def E_yw_DE(omega): return p*((eta1**omega)/(eta1 - omega)) + omega*((eta2**omega)/(eta2-omega))
def Omega(omega):
if jump_dist == 'log-normal':
return (1/2)*sigma**2*(omega+1)*omega - (r - lambda_)*(omega+1) + lambda_*(omega*E_y_LN + E_yw_LN(omega))
elif jump_dist == 'exponencial-dupla':
return (1/2)*sigma**2*(omega+1)*omega - (r - lambda_)*(omega+1) + lambda_*(omega*E_y_DE + E_yw_DE(omega))
def putValueIntegral(omega):
c_omega = 1 + omega*1j
return K**(c_omega+1)/(c_omega*(c_omega+1))*np.exp(Omega(c_omega)*(T-t))*S**(-c_omega)
c = 1
result, error = quad(putValueIntegral, -np.inf, np.inf, complex_func=True)
return (result/(2*np.pi), error)
JD_put_value(S, K, T, 0, r, sigma, 'log-normal')
Merton(1976)中使用的方法被编码为:
def merton_put_price(S, K, T, r, sigma, lambda_j, mu_j, sigma_j, max_jumps=20):
tau = T
put_price = 0.0
for n in range(max_jumps + 1):
# Ajuste da volatilidade e taxa de juros
sigma_n = sqrt(sigma**2 + n * sigma_j**2 / tau)
kappa = exp(mu_j + 0.5 * sigma_j**2) - 1
r_n = r - lambda_j * kappa + n * mu_j / tau
# Preço da put de Black-Scholes para n saltos
bs_put = BSMPutValue(S, K, T, r_n, sigma_n)
# Probabilidade de n saltos (Poisson)
prob = exp(-lambda_j * tau) * (lambda_j * tau)**n / factorial(n)
# Soma ponderada
put_price += prob * bs_put[0]
return put_price
# Calculando o preço da put
put_price = merton_put_price(S, K, T, r, sigma, lambda_, mu_j, sigma_j)
print(f"Preço da Put no Modelo de Merton: {put_price:.4f}")
BY177!,您是说177 x 176 x 175 ...还是177?