En una de mis publicaciones, presenté el concepto de pronóstico de caminata aleatoria, usando Python para la implementación. En esta publicación quiero realizar una simulación de monte carlo de caminatas aleatorias del precio de las acciones. Para esto, usaré el siguiente historial de precios de acciones ficticio:
# declarar lista con precios de cierre de acciones diarios ficticios history_prices = [180,192,193,195,191,199,198,200,199,203,205,207,205,208,201,203,204,201,205,206,207] print(stockPrices)
[180, 192, 193, 195, 206, 211, 191, 204, 215, 190, 205, 207, 205, 211, 222, 215, 245, 201, 205, 206, 214]
En preparación de los próximos pasos, ahora importaré todos los módulos de Python relevantes:
# estadísticas de importación para calcular, p. ej. desviación estándar del historial de precios import statistics as stat # importar pyplot para trazar import matplotlib.pyplot as plt # importar aleatoriamente para generaciones de números aleatorios import random as rnd
Suponiendo un movimiento aleatorio del precio de las acciones, obtengo una desviación estándar de los cambios relativos en el historial de precios ficticio, de modo que podré modelar movimientos aleatorios del precio de las acciones:
relative_prices = [] for i in range(0,len(history_prices)): if i == 0: pass else: relative_prices.append((history_prices[i]-history_prices[i-1])/(history_prices[i-1])) std_prices = stat.stdev(relative_prices) print(std_prices)
0.021375589655016836
Ahora modelo una caminata de precios aleatoria ejemplar durante 100 días en el futuro, asumiendo un movimiento de precios aleatorio basado en la desviación estándar de precios aleatorios. Supongo una distribución normal aleatoria. El último precio conocido en la historia sirve como punto de partida:
# modeling a random price walk over 100 days # -- conduct calculation, define function def randomWalk(stdev,pastPrices): days = [i for i in range(1,101)] prices = [] price = pastPrices[-1] for i in range(1,101): price = price + price*rnd.normalvariate(0,stdev) prices.append(price) return([days,prices]) # -- conduct calculation, use function prices = randomWalk(std_prices,history_prices) # -- visualize random walk in a line plot plt.plot(prices[0],prices[1]) plt.title("random price walk") plt.xlabel("day") plt.ylabel("stock price")
Text(0, 0.5, 'stock price')

Puedo repetir este proceso, volviendo a calcular paseos aleatorios adicionales, creando así una simulación de monte-carlo de los movimientos del precio de las acciones. En el siguiente ejemplo, repito el proceso de caminata aleatoria para 30 caminatas separadas:
plt.figure() for i in range(0,30): prices = randomWalk(std_prices,history_prices) plt.plot(prices[0],prices[1]) plt.title("monte-carlo simulation of stock price development") plt.xlabel("day") plt.ylabel("stock price")
Text(0, 0.5, 'stock price')


Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply