Para invertir es necesario desarrollar varias habilidades, entre ellas el control de las emociones; una estrategia que te ayuda a ello, es establecer un día a la semana o al mes para comprar los activos financieros. En este caso, criptomonedas, sin tener en cuenta el precio del día, de manera que mantengas tus emociones alejadas del proceso de la inversión.
🛑 Esto no es un consejo de inversión, este tema es muy serio y para ello debes formarte y tomar tus propias decisiones basadas en conceptos técnicos. Si quieres empezar a aprender de ello te recomiendo el Curso de Introducción al Trading.
Las criptomonedas son solo una de las aplicaciones de la blockchain, si no estás familiarizado con este concepto, te recomiendo la Escuela de Blockchain y Criptomonedas de Platzi, que te explica desde cero este tema tan interesante.
Photo by Executium on Unsplash
Siempre nos dicen que los datos hablan por si solos, sin embargo, esto no es del todo cierto. Antes que nada es importante tener claro qué respuesta vamos a buscar en los datos, de lo contrario vamos a terminar girando en nuestro propio eje sin saber hacia donde seguir, incluso es probable que dejemos tirado nuestro proyecto.
Para este caso, ya que estaba aprendiendo del mundo de las criptomonedas y quería hacer mis experimentos, me preguntaba:
¿Cómo saber cuándo es el mejor día para comprar criptomonedas?
Para responder a esta duda, existen infinitos criterios, los cuales aún estoy en camino de aprender, sin embargo, ya que la idea era hacerlo con los conocimientos que hasta ahora he logrado digerir, entonces decidí tener en cuenta la variación del precio diario.
Para este ejercicio usé los datos en formato CSV de un repositorio amigo, extraídos de Cryptodatadownload.
Una herramienta para trabajar datos son los notebooks, para este ejercicio usé Colab, pero puede hacerse en otro, como Deepnote o directamente con Python en tu máquina.
Recuerda que lo primero es importar las librerías. Aquí importé Pandas para la manipulación de datos y Matplotlib para apoyarme con los gráficos:
import pandas as pd
import matplotlib.pyplot as plt
Para leer los datos desde una URL usando Pandas:
df = pd.read_csv('https://raw.githubusercontent.com/alnunez/crypto_coins_historical_data/main/Binance_ADAUSDT_d.csv', skiprows=[0])
El siguiente comando es fundamental, porque nos da una idea de los datos que hay en el DataFrame:
df.info()
Eliminar columnas irrelevantes. Recuerda que el parámetro inplace=Tru
es para que el cambio quede establecido en el DataFrame :
df.drop(['unix','symbol','high','low','Volume ADA','Volume USDT','tradecount'], axis=1, inplace=True)
Restringir datos a 365 días, que para este dataset corresponde a un año:
df = df.head(365)
Crear la columna “delta” en donde se calcula la variación del precio con respecto al anterior cierre:
df.insert(3, 'delta', df['close']-df['open'])
Hallar el porcentaje diario de variación del precio del Bitcoin con respecto al anterior cierre:
df.insert(2, '% var', (df['delta']/df['open'])*100)
Convertir formato de la columna “date” a tipo datetime para luego convertirlo al nombre del día de la semana:
df['date'] = pd.to_datetime(df['date'])
df['day'] = df['date'].dt.day_name()
Filtrar los días en que el precio del Bitcoin tuvo variaciones negativas, es decir, que presentó una caída en su precio.
df_neg = df[df['% var'] < 0]
Agrupar por día, teniendo en cuenta la cantidad de veces que cada día tiene cierre con caída de precio respecto a su apertura y eliminar columnas irrelevantes:
df_count = df_neg.groupby('day').count()
df_count.drop(['date','delta','open','close'], axis=1, inplace=True)
df_count.columns = ['count']
Ordenar index por días de la semana:
defsorter(column):
order_day = ['Monday', 'Tuesday', 'Wednesday','Thursday','Friday','Saturday','Sunday']
cat = pd.Categorical(column, categories=order_day, ordered=True)
return pd.Series(cat)
df_count_sorted = df_count.sort_values(by="day", key=sorter)
df_count_sorted
Si bien los datos y las tablas nos pueden dar una idea de la respuesta que buscamos, lo mejor es siempre apoyarnos de las visualizaciones, para ello usé la librería Matplotlib que importamos al inicio.
Renombrar los días de la semana para la presentación del gráfico:
df_count_sorted.rename(index={'Monday':'Mon', 'Tuesday':'Tue', 'Wednesday':'Wed','Thursday':'Thu','Friday':'Fri','Saturday':'Sat','Sunday':'Sun'}, inplace=True)
Aquí el objetivo, es de una manera visual, poder encontrar durante el año, los días de la semana en que Bitcoin tuvo más variaciones negativas, es decir, que cayó su precio con respecto al día anterior.
plt.bar(df_count_sorted.index, df_count_sorted['count'], width=0.6, color=['r'])
plt.title('Numberoftimewith negative price variation per week for BTC\n24/06/2020to25/06/2021')
plt.ylabel('Times')
plt.show()
De acuerdo al resultado, el mejor día para comprar Bitcoin es al final del domingo o al inicio del lunes, justo antes de que empiece a subir el precio. Sin embargo, también podría ser al final del jueves o al inicio del viernes, aunque si se tiene en cuenta la variación del viernes, podríamos decir que es mejor el lunes.
Este análisis también lo hice para otras dos criptomondeas, si te interesa, te lo comparto en mi repositorio de GitHub, quizá te sirva de inspiración para tu propio proyecto.
Lo más importante de practicar lo aprendido es que garantizas que no se te olvide, además es muy gratificante poder construir un proyecto desde cero. Te animo a probar con datos de temas que te interesen, si tienes dudas, escríbeme que con mucho gusto te ayudo a encontrar la respuesta.
Si quieres continuar en este camino de las Ciencias de Datos, nunca pares de practicar con Pandas y Python 💚