Tutorial
Preprocesar y analizar rendimientos bursátiles con Python
Aprende a analizar estadísticamente el rendimiento bursátil de una empresa con Python.
¿Quiénes habrán sido los afortunados que compraron acciones de NVIDIA antes de que subiera un 20% en un solo día?
En este tutorial, calcularemos los rendimientos bursátiles de NVIDIA para analizar su comportamiento estadístico.
Data
Gracias a la librería yfinance, podemos descargar los datos bursátiles de NVIDIA con su ticker NVDA.
import yfinance as yf
df = yf.download('NVDA')
Preguntas
- ¿Cómo descargar datos bursátiles de una empresa específica utilizando Python?
- ¿Qué comando permite filtrar datos por fechas específicas?
- ¿Cómo se calcula el rendimiento diario de una acción?
- ¿Cuál es el método para visualizar la distribución del rendimiento diario?
- ¿Cómo interpretar la distribución del rendimiento diario?
- ¿Cómo se calcula el rendimiento acumulado de una inversión?
Metodología
Filtrar fechas de interés
Usamos loc para filtrar la tabla desde el inicio de la década 2020 hasta hoy.
df = df.loc['2020-01-01':] Visualicemos la evolución de los precios de cierre en la bolsa de valores.
df['Adj Close'].plot()
Rendimiento diario
Usamos la función pct_change para calcular el rendimiento diario, que no es más que la variación porcentual del precio de cierre con respecto al día anterior.
df['Return Daily'] = df['Adj Close'].pct_change() El primer día no tiene rendimiento, ya que no hay un día anterior con el que comparar.
Distribución del rendimiento diario
Observando la distribución de los rendimientos diarios, vemos que la acción llegó a bajar casi un 20% en un solo día.
Mientras que en el lado positivo, el rendimiento diario máximo sobrepasó el 20%.
Bienaventurados los que compraron el día antes de la subida del 20% (bienaventurados los que compraron el día antes).
¿Qué conclusiones adicionales puedes identificar a partir de este análisis? Te leo en los comentarios.
df['Return Daily'].plot.hist(bins=50)
Al seguir una distribución normal, podemos decir con un 68% de confianza que el rendimiento diario estará entre 0.00312 \(\) 0.0342 (\(\)). Es decir, entre -3.1% y 3.7%.
df['Return Daily'].describe()
Rendimiento acumulado
Por último, calculemos cuánto dinero tendríamos por cada dólar invertido si hubiéramos comprado la acción al inicio de la década.
df['Return Cumulative'] = (df['Return Daily']
.fillna(0)
.add(1)
.cumprod()
) Wow, cada dólar invertido en la acción de NVIDIA al inicio de la década se habría convertido en torno a 15 dólares.
Si quieres profundizar en la programación de datos financieros con Python, esto te puede interesar.
Conclusiones
- Descarga de datos bursátiles:
yf.downloadpermite descargar los datos bursátiles de una empresa usando su ticker. - Filtrado por fecha:
loc['YYYY-MM-DD':]filtra los datos para un rango de fechas específico. - Cálculo del rendimiento diario:
pct_changecalcula la variación porcentual entre filas consecutivas. - Visualización de la distribución del rendimiento:
plot.histmuestra la distribución de los rendimientos diarios, representando la volatilidad de la acción. - Interpretación de la distribución del rendimiento:
describepara obtener los valores estadísticos y estimar el rango de rendimientos que podemos esperar con cierto nivel de confianza. - Rendimiento acumulado:
cumprodcalcula el producto acumulado para tener en cuenta el efecto de la reinversión de los rendimientos.
Si pudieras programar lo que quisieras, ¿qué sería?
Puede que te eche una mano creando tutoriales que te ayuden. Te leo en los comentarios.