Post

Momentum Trading

Momentum Trading

Momentum Trading

El trading de impulso o momentum es una de las estrategias más sencillas de operar, en la que los traders compran y venden activos basándose en la fuerza de su movimiento reciente en el mercado.

Para nuestro caso, vamos a ver el movimiento de los últimos 10 años de las acciones NASDAQ-100, con la intención de crear un ranking de sus valores por año y además creando un portafolio con las mejores acciones por año, y finalmente graficar con respecto al NASDAQ-100 original.

¿Qué es el NASDAQ-100?

El índice Nasdaq 100 agrupa a las 100 empresas más grandes y con mayor actividad de cotización en la bolsa Nasdaq. Este índice abarca una amplia variedad de sectores, como tecnología, manufactura, atención médica, entre otros, pero excluye a las empresas del sector financiero, como bancos comerciales e instituciones de inversión.

Codificación

Para poder obtener los símbolos o ticker de las acciones del NASDAQ-100 utilizamos una simulación de ser navegador web y de esta forma llamar a la API nos entregue el json con la información necesaria de la siguiente forma:

1
2
3
4
5
6
7
headers ={"user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}

result = requests.get('https://api.nasdaq.com/api/quote/list-type/nasdaq100', headers=headers)

nasdaq_stocks = pd.DataFrame(result.json()['data']['data']['rows'])['symbol'].unique().tolist()

nasdaq_stocks

Para obtener los datos con respecto al tiempo hace 10 años atrás y poder obtener el porcentaje de retorno_anual de todas las acciones, en la función de transform se utilizo 252 porque un año financiero contiene en promedio 252 días hábiles

1
2
3
4
5
6
7
8
9
end_date = date.today()

start_date = end_date-pd.DateOffset(365*10)

prices_df = yf.download(tickers=nasdaq_stocks, start= start_date, end=end_date)

prices_df = prices_df.stack()

prices_df['retorno_anual'] = prices_df.groupby(level=1)['Adj Close'].transform(lambda x: x.pct_change(252))

Se agrupo con respecto a su Ticker , que vendría siendo el símbolo de cada acción, con una frecuencia de 1 año, así finalmente poder generar el ranking por cada año

1
2
3
dato_anual = test.groupby([pd.Grouper(freq='1YE'), 'Ticker'])['retorno_anual'].last().to_frame()

dato_anual['ranking']= dato_anual.groupby(level=0)['retorno_anual'].transform(lambda x: x.rank(ascending=False))

Entonces ya tenemos el ranking por año, pero queremos las mejores 5 acciones por año, fácilmente podemos generarlo del siguiente modo

1
datos_filtrados = dato_anual[dato_anual['ranking']<6]

Finalmente, se crea un diccionario con los tickets de los mejores 5.

TP5.webp

Cabe destacar que para la información correspondiente para el año 2025 es hasta lo que lleva del año, en mi caso 2024-11-07

TP1.webp

Para la creación del portafolio se utiliza el promedio porque el peso de cada acción es equivalente y graficamos lo que tenemos.

TP2.webp

MT1.webp

Para terminar se comparamos nuestro portafolio con el NASDAQ-100 observando lo siguiente

MT2.webp

Conclusión

En este proyecto hemos realizado un ranking de los mejores valores de las acciones NASDAQ-100, creando un portafolio de inversión con las mejores 5 por por año y comparando sus retornos con un grafico de serie de tiempo.

Aunque es cierto que al seleccionar solo las 5 mejores acciones estamos introduciendo cierto sesgo, el objetivo de este trabajo es identificar las acciones más destacadas de cada año para poder realizar un análisis de mercado posterior. La intención es comprender qué factores les dieron fuerza en su momento, qué estaba ocurriendo en ese periodo y cómo evoluciona el mercado a lo largo del tiempo. Por ejemplo, Netflix dominó todo el año 2015 al ocupar el primer puesto, pero luego perdió relevancia en los años siguientes. Entender las razones detrás de estos cambios es clave para el análisis.

Tener más indicadores, como el que vimos de medias móviles en los gráficos de velas, nos hará tener un perfil mas robusto de inversión y mayor seguridad al ver una acción.

This post is licensed under CC BY 4.0 by the author.

Trending Tags