En el mundo de las finanzas, hay una herramienta llamada Media Móvil Simple (SMA) que nos ayuda a entender si el precio de un acción está subiendo o bajando. Suena complicado, ¿verdad? Pero no te preocupes, es más simple de lo que parece.
¿Qué es una Media Móvil Simple (SMA)?
Imagina que quieres saber si el precio promedio de una acción ha estado subiendo o bajando durante un período de tiempo. La SMA toma los precios de la acción durante ese tiempo y calcula un promedio (como el promedio de tus calificaciones en la escuela). Este número promedio nos dice si la acción está en una tendencia alcista (subiendo) o bajista (bajando).
Cómo Funciona la SMA:
La SMA toma los precios de una acción durante un período (digamos 10 días) y suma todos esos precios. Luego, divide esa suma por la cantidad de días (10 en este caso) para obtener el promedio.
Ejemplo:
Supongamos que durante los últimos 10 días, los precios de una acción fueron: 50, 52, 54, 53, 55, 56, 57, 58, 59, y 60. La SMA sería:
(50 + 52 + 54 + 53 + 55 + 56 + 57 + 58 + 59 + 60) / 10 = 554 / 10 = 55.4
Entonces, la SMA de 10 días para esta acción es 55.4. Para este ejemplo como el último precio es 60 que es mayor que la media 55.4 podemos decir que el precio de la acción está subiendo... Realmente, no pero casi casi.
¿Por qué es Útil la SMA?
La SMA nos ayuda a ver si una acción está en una tendencia alcista o bajista. Si la SMA sube, significa que el precio promedio está subiendo, lo que puede ser una señal de que la acción es una buena inversión. Si la SMA baja, podría ser una señal de que la acción no está yendo tan bien.
Vamos con Python
Repetiremos el procedimiento de artículos anteriores, abriremos Visual Studio Code, nuestra carpeta "Mis Documentos/PythonBursatil" y crearemos un archivo llamado sma.py
Lo primero será importar yfinance, datetime y pandas
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta
Definimos el ticker de la acción a analizar. En este ejempo AAPL.
ticker_symbol = "AAPL" # Cambia AAPL por el símbolo de la acción que desees analizar
En dos variables end_date y start_date colocamos el rango a analizar.
end_date = datetime.today().strftime('%Y-%m-%d')
start_date = (datetime.today() - timedelta(days=730)).strftime('%Y-%m-%d') # 730 días equivalen a dos años
Descargamos los datos históricos de la acción.
data = yf.download(ticker_symbol, start=start_date, end=end_date)
Vamos a calcular la media móvil para 5, 15 y 30 días.
dias = 5
data['SMA_' + str(dias)] = data['Close'].rolling(window=dias).mean()
dias = 15
data['SMA_' + str(dias)] = data['Close'].rolling(window=dias).mean()
dias = 30
data['SMA_' + str(dias)] = data['Close'].rolling(window=dias).mean()
Vamos parte por parte:
'SMA_' + str(dias) : Colocamos el nombre de la nueva columna
data[' Close'] .rolling(window=dias): Estamos sacando una ventana móvil para ese número de días.
data[' Close'] .rolling(window=dias).mean(): A esa ventana móvil le sacamos el promedio (mean)
Guardamos el resultado en un archivo de excel
excel_filename = ticker_symbol + "_historico_precios.xlsx"
data.to_excel(excel_filename)
print(f"Los datos se han guardado en el archivo: {excel_filename}")
Pongamos todo junto.
También podemos agregar una columna con recomendaciones de compra y venta basándonos en el algoritmo de cruce de medias. Por ejemplo el cruce de 5 y 30. Pero solo darémos recomendación si la diferencia entre las medias es de un 5%. Tanto las medias como el porcentaje son arbitrarios. Use y prueba los propios para sus inversiones.
data['Recomendacion'] = 'Esperar' # Valor predeterminado de "Esperar"
# Calcular la diferencia entre las medias móviles
data['Diferencia'] = (data['SMA_5' ] / data['SMA_30' ]) - 1
# Si la diferencia es mayor al 5%, se recomienda "Compra"
data.loc[data['Diferencia'] > 0.05, 'Recomendacion'] = 'Compra'
# Si la diferencia es menor al -5%, se recomienda "Venta"
data.loc[data['Diferencia'] < -0.05, 'Recomendacion'] = 'Venta'
Veamos como queda todo junto.
El resultado obtenido es el siguiente. Donde podemos ver que nos recomienda Esperar y hubo recomendaciones de Venta desde Agosto 10 al 23.
Espero les haya gustado. Nos vemos en el próximo post.