Previsão de tendências com Python
No mundo das finanças, a análise técnica desempenha um papel crucial na previsão das tendências do mercado de ações. Dois indicadores populares usados por traders e investidores são Golden Crosses e Death Crosses (Cruzes de Ouro e Cruzes da Morte, respectivamente). Neste post, exploraremos como verificar esses padrões em dados de ações usando a biblioteca yfinance do Python.
O que são Cruzes de Ouro e Cruzes da Morte?
Uma Golden Cross ocorre quando a média móvel de 50 dias (MA) cruza acima da MA de 200 dias, indicando um sinal de compra potencial. Esse padrão é frequentemente visto durante os mercados em alta, sugerindo que a ação começou a subir de um ponto baixo. Por outro lado, uma Death Cross acontece quando a MA de 50 dias cai abaixo da MA de 200 dias, sinalizando um potencial sinal de venda. Esse padrão é normalmente observado durante os mercados em baixa, indicando que a ação começou a cair de um ponto alto.
yfinance para buscar dados de ações
Para começar, usaremos yfinance para buscar dados históricos de ações para o símbolo (ticker) escolhido (por exemplo, “AAPL” para Apple ou “MSFT” para Microsoft). Também importaremos as bibliotecas necessárias: pandas para manipulação de dados e matplotlib.pyplot para plotar as médias móveis.
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
Em seguida, buscamos os dados históricos para as ações da Apple. Mas você pode usar outro ticker se desejar.
# Define ticker da Apple
ticker = yf.Ticker("AAPL")
# Busca dados
dados = ticker.history(period="max")
Previsão de tendências com médias móveis
Para detectar previsão de tendências com Golden Crosses e Death Crosses, precisamos verificar a média móvel (moving average, MA) para uma janela curta e outra longa. Para a curta, usaremos uma janela de 50 dias de tamanho. Já para a longa, utilizaremos uma janela de 200 dias:
# Calcula a média móvel para 50 e 200 dias de janela
ma_curta = dados["Close"].rolling(window=50).mean()
ma_longa = dados["Close"].rolling(window=200).mean()
As médias móveis podem ser visualizadas como mostrado abaixo:
# Plot as médias móveis
plt.figure(figsize=(10,6))
plt.plot(ma_curta, color='coral', linewidth=2, label="Média móvel 50 dias")
plt.plot(ma_longa, color='lightskyblue', linewidth=2, label="Média móvel 200 dias")
plt.legend(loc="upper left")
plt.title("AAPL médias móveis para 50 e 200 dias")
plt.show()
A figura é mostrada abaixo:

Previsão de tendências com Golden Crosses e Death Crosses
Para detectar previsão de tendências com Golden Crosses e Death Crosses, usaremos as seguintes condições:
- Uma Golden Cross ocorre quando a MA curta cruza acima da MA longa.
Uma Cruz da Morte acontece quando a MA curta cai abaixo da MA longa.
#Detecta Golden Crosses
golden_crosses = dados[(ma_curta > ma_longa) & (ma_curta.shift(1) <= ma_longa.shift(1))]
# Detecta Death Crosses
death_crosses = dados[(ma_curta < ma_longa) & (ma_curta.shift(1) >= ma_longa.shift(1))]
plt.figure(figsize=(10,6))
plt.plot(golden_crosses.index, ma_curta[golden_crosses.index], linewidth=2, label="MA 50 dias")
plt.plot(golden_crosses.index, ma_longa[golden_crosses.index], linewidth=2, label="MA 200 dias")
plt.scatter(golden_crosses.index, ma_curta[golden_crosses.index], color="green", marker="^") # Golden Cross
plt.title("Golden Crosses nos dados da Apple")
plt.legend(loc="upper left")
plt.figure(figsize=(10,6))
plt.plot(death_crosses.index, ma_curta[death_crosses.index], linewidth=2, label="MA 50 dias")
plt.plot(death_crosses.index, ma_longa[death_crosses.index], linewidth=2, label="MA 200 dias")
plt.scatter(death_crosses.index, ma_curta[death_crosses.index], color="red", marker="v") # Death Cross
plt.title("Death Crosses nos dados da Apple")
plt.legend(loc="upper left")
plt.show()

