Estoy simulando los precios de los activos para n días utilizando GMB con el esquema de Euler, calcular los rendimientos y luego realizar la prueba de Kolmogorov-Smirnov en los rendimientos simulados. Código para la simulación de GBM :
def simulate_GBM(mu, sig, asset_price, number_of_days):
delta = 1 / 252
t = np.arange(0, number_of_days / 252, delta)
path = np.zeros(len(t))
path[0] = asset_price
for i in range(0, len(t) - 1):
path[i + 1] = path[i] + path[i] * mu * delta + \
sig * path[i] * sqrt(delta) * np.random.randn()
if path[i + 1] < 0:
print("Zero assset values!")
path[i + 1] = 1
return path
Código para Monte-Carlo GBM
def perform_GBM_Monte_Carlo(mu, sig, asset_price, num_sim, number_of_days):
simulations = np.zeros(num_sim)
stop_date = number_of_days
for i in range(0, self.num_sim - 1):
simulations[i] = (simulate_GBM(mu, sig, asset_price, num_sim, number_of_days)[stop_date - 1])
return simulations
A continuación, calculo los rendimientos y realizo la prueba
data = perform_GBM_Monte_Carlo(0.05, 0.3, 100, 100000, 252)
returns = np.zeros(len(data))
for i in range(0, len(data) - 1):
returns[i] = data[i]/100 - 1 # initial asset price is 100
lognorm_params = stats.maxwell.fit(returns)
t_stat, p = stats.kstest(returns, 'lognorm', lognorm_params)
La teoría dice que los rendimientos deben estar distribuidos lognormalmente, pero tengo muy p_value. ¿Es el problema con la simulación GBM o la forma en que realizo la prueba K-S?
0 votos
¿Un valor p muy alto o muy bajo? Por favor, aclárelo.