我完成了我的经济学学位,需要呈现专着。我选择的主题是跳跃扩散模型中的选项定价。为了找到我正在使用Mellin Transform的解决方案,并找到了积分,

问题描述 投票:0回答:0

哪个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?


python numpy math
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.