Preprocesar y analizar rendimientos bursátiles con Python

Aprende a analizar estadísticamente el rendimiento bursátil de una empresa con Python.

Jesús López
es.datons
Published in
4 min readMar 23, 2024

--

¿Quiénes habrán sido los afortunados que compraron acciones de NVIDIA antes de que subiera un 20% en un solo día?

Gráfico de rendimiento diario de NVIDIA, destacando un aumento del 20%
F1. Histograma del rendimiento diario de NVIDIA

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')
Datos bursátiles de NVIDIA mostrando variaciones de precios
F2. Datos bursátiles iniciales de NVIDIA

Preguntas

  1. ¿Cómo descargar datos bursátiles de una empresa específica utilizando Python?
  2. ¿Qué comando permite filtrar datos por fechas específicas?
  3. ¿Cómo se calcula el rendimiento diario de una acción?
  4. ¿Cuál es el método para visualizar la distribución del rendimiento diario?
  5. ¿Cómo interpretar la distribución del rendimiento diario?
  6. ¿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()
Evolución de precio de cierre ajustado de NVIDIA desde 2020
F3. Precios de cierre ajustado de NVIDIA desde 2020

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 de NVIDIA
F4. Rendimientos diarios de NVIDIA

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)
Gráfico de rendimiento diario de NVIDIA, destacando un aumento del 20%
F1. Histograma del rendimiento diario de NVIDIA

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()
Estadísticas de rendimiento diario de NVIDIA
F5. Estadísticas del rendimiento diario de NVIDIA

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.

Ayúdame a seguir creando más tutoriales clicando en el botón del aplauso. ¡Gracias! 👏

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.

Rendimiento acumulado de inversión en NVIDIA desde 2020
F6. Rendimiento acumulado de NVIDIA desde 2020

Si quieres profundizar en la programación de datos financieros con Python, esto te puede interesar.

Conclusiones

  1. Descarga de datos bursátiles: yf.download permite descargar los datos bursátiles de una empresa usando su ticker.
  2. Filtrado por fecha: loc['YYYY-MM-DD':] filtra los datos para un rango de fechas específico.
  3. Cálculo del rendimiento diario: pct_change calcula la variación porcentual entre filas consecutivas.
  4. Visualización de la distribución del rendimiento: plot.hist muestra la distribución de los rendimientos diarios, representando la volatilidad de la acción.
  5. Interpretación de la distribución del rendimiento: describe para obtener los valores estadísticos y estimar el rango de rendimientos que podemos esperar con cierto nivel de confianza.
  6. Rendimiento acumulado: cumprod calcula 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? Podría crear un tutorial sobre ello ;)

Hablamos abajo en los comentarios.

Aprende más conmigo en datons

--

--