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?

Histograma de rendimiento diario de las acciones de NVIDIA, mostrando una distribución que incluye un pico de más del 20% de incremento en un solo día.
F1. Histograma de 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 brutos descargados de las acciones de NVIDIA utilizando la librería yfinance, mostrando precios de apertura, cierre, máximo y mínimo.
F2. Datos brutos de NVIDIA vía yfinance.

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 los precios de cierre ajustados de las acciones de NVIDIA desde 2020, destacando tendencias y volatilidades.
F3. Precios de cierre ajustados de NVIDIA

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.

Captura de datos que muestra el cálculo del rendimiento diario de las acciones de NVIDIA, indicando variaciones porcentuales día a día.
F4. Rendimiento diario calculado

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)
Histograma de rendimiento diario de las acciones de NVIDIA, mostrando una distribución que incluye un pico de más del 20% de incremento en un solo día.
F1. Histograma de 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 descriptivas del rendimiento diario de NVIDIA, incluyendo media, desviación estándar, y percentiles, para analizar la distribución de rendimientos.
F5. Estadísticas de rendimiento diario

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.

¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.

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.

Gráfico del rendimiento acumulado de una inversión en acciones de NVIDIA desde el inicio de 2020, mostrando un crecimiento exponencial.
F6. Rendimiento acumulado de NVIDIA

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?

Puede que te eche una mano creando tutoriales que te ayuden. Te leo en los comentarios.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to datons.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.