Python para Análise Técnica de Ações: Indicadores e Gráficos

análise técnica é uma das principais abordagens para estudar o comportamento dos preços de ativos financeiros. Diferente da análise fundamentalista, que foca nos fundamentos econômicos e contábeis das empresas, a análise técnica observa gráficos e padrões históricos para tentar prever os movimentos futuros do mercado.

Com Python, podemos automatizar essa análise, coletar dados de ativos em tempo real e aplicar indicadores técnicos clássicos como médias móveis, RSI, MACD e Bandas de Bollinger.

Neste artigo, vamos explorar como implementar a análise técnica em Python, criando gráficos interativos e aplicando indicadores úteis para tomada de decisão.


1. Preparando o Ambiente

Vamos precisar de algumas bibliotecas:

pip install yfinance pandas matplotlib mplfinance ta

2. Coletando Dados de Ações

Podemos usar a API do Yahoo Finance para baixar cotações.

import yfinance as yf
import pandas as pd

# Baixando dados da PETR4 (Petrobras) dos últimos 6 meses
dados = yf.download("PETR4.SA", period="6mo", interval="1d")
print(dados.head())

Saída típica:

                 Open       High        Low      Close  Adj Close    Volume
Date                                                                      
2025-03-01   30.15     31.00     29.90     30.80     30.80    12000000
2025-03-02   30.90     31.50     30.50     31.20     31.20    10000000
...

3. Plotando Gráficos de Velas (Candlesticks)

A análise técnica começa com gráficos de preços:

import mplfinance as mpf

mpf.plot(dados, type="candle", volume=True, style="yahoo", title="PETR4 - Gráfico de Velas")

➡ Esse gráfico mostra candlesticks diários e o volume negociado.


4. Médias Móveis

As médias móveis suavizam os preços e ajudam a identificar tendências.

dados["MM20"] = dados["Close"].rolling(window=20).mean()
dados["MM50"] = dados["Close"].rolling(window=50).mean()

mpf.plot(
    dados,
    type="candle",
    volume=True,
    style="yahoo",
    title="PETR4 - Médias Móveis",
    mav=(20, 50)  # médias móveis no gráfico
)

📌 Interpretação:

  • Quando a MM20 cruza acima da MM50 → possível compra (tendência de alta).

  • Quando a MM20 cruza abaixo da MM50 → possível venda (tendência de baixa).


5. Indicador RSI (Índice de Força Relativa)

RSI (Relative Strength Index) mede a velocidade e a mudança dos preços, ajudando a identificar condições de sobrecompra (>70) e ** sobrevenda (<30)**.

import ta

dados["RSI"] = ta.momentum.RSIIndicator(dados["Close"], window=14).rsi()

import matplotlib.pyplot as plt

plt.figure(figsize=(10,4))
plt.plot(dados.index, dados["RSI"], label="RSI")
plt.axhline(70, color="red", linestyle="--")
plt.axhline(30, color="green", linestyle="--")
plt.title("RSI - PETR4")
plt.legend()
plt.show()

📌 Interpretação:

  • RSI > 70 → ativo pode estar sobrecomprado (correção à vista).

  • RSI < 30 → ativo pode estar sobrevendido (possível recuperação).


6. MACD (Moving Average Convergence Divergence)

MACD é um indicador de tendência que mede a diferença entre duas médias móveis exponenciais.

dados["MACD"] = ta.trend.MACD(dados["Close"]).macd()
dados["MACD_Sinal"] = ta.trend.MACD(dados["Close"]).macd_signal()

plt.figure(figsize=(10,4))
plt.plot(dados.index, dados["MACD"], label="MACD", color="blue")
plt.plot(dados.index, dados["MACD_Sinal"], label="Sinal", color="red")
plt.legend()
plt.title("MACD - PETR4")
plt.show()

📌 Interpretação:

  • MACD cruza acima da linha de sinal → tendência de alta.

  • MACD cruza abaixo da linha de sinal → tendência de baixa.


7. Bandas de Bollinger

As Bandas de Bollinger medem a volatilidade do ativo:

bb = ta.volatility.BollingerBands(dados["Close"], window=20, window_dev=2)

dados["BB_Media"] = bb.bollinger_mavg()
dados["BB_Sup"] = bb.bollinger_hband()
dados["BB_Inf"] = bb.bollinger_lband()

plt.figure(figsize=(10,6))
plt.plot(dados.index, dados["Close"], label="Preço", color="black")
plt.plot(dados.index, dados["BB_Media"], label="Média", color="blue")
plt.plot(dados.index, dados["BB_Sup"], label="Banda Superior", color="red")
plt.plot(dados.index, dados["BB_Inf"], label="Banda Inferior", color="green")
plt.fill_between(dados.index, dados["BB_Inf"], dados["BB_Sup"], alpha=0.1)
plt.legend()
plt.title("Bandas de Bollinger - PETR4")
plt.show()

📌 Interpretação:

  • Quando o preço encosta na banda superior, pode indicar sobrecompra.

  • Quando encosta na banda inferior, pode indicar ** sobrevenda**.

  • Bandas mais largas → maior volatilidade.


8. Criando um Dashboard de Indicadores

Podemos combinar vários gráficos para criar um mini-dashboard.

fig, axs = plt.subplots(3, 1, figsize=(12,10), sharex=True)

# Preço + Médias Móveis
axs[0].plot(dados.index, dados["Close"], label="Preço", color="black")
axs[0].plot(dados.index, dados["MM20"], label="MM20", color="blue")
axs[0].plot(dados.index, dados["MM50"], label="MM50", color="orange")
axs[0].legend()
axs[0].set_title("Preço e Médias Móveis")

# RSI
axs[1].plot(dados.index, dados["RSI"], label="RSI", color="purple")
axs[1].axhline(70, color="red", linestyle="--")
axs[1].axhline(30, color="green", linestyle="--")
axs[1].legend()
axs[1].set_title("RSI")

# MACD
axs[2].plot(dados.index, dados["MACD"], label="MACD", color="blue")
axs[2].plot(dados.index, dados["MACD_Sinal"], label="Sinal", color="red")
axs[2].legend()
axs[2].set_title("MACD")

plt.show()

9. Boas Práticas na Análise Técnica com Python

  • Combine diferentes indicadores para confirmar sinais.

  • Teste estratégias usando backtesting antes de aplicar no mercado real.

  • Use gráficos interativos (ex.: Plotly, Dash) para explorar dados dinamicamente.

  • Cuidado com falsos sinais: indicadores devem ser interpretados dentro do contexto do mercado.

  • Nunca dependa de um único indicador.


10. Conclusão

O Python oferece um arsenal completo para traders e investidores aplicarem análise técnica de ações.
Com bibliotecas como yfinance, mplfinance e ta, conseguimos baixar dados, plotar gráficos de velas, aplicar indicadores como RSI, MACD, Médias Móveis e Bandas de Bollinger e até construir dashboards interativos.

A combinação de programação + análise técnica dá ao investidor maior autonomia e precisão na tomada de decisão, além de abrir espaço para estratégias automatizadas de trading.

Comentários

Postagens mais visitadas deste blog

Python para Computação Quântica: Introdução com Qiskit

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Estrutura Básica de um Programa C# com exemplos