Skip to content

YanCotta/swing_trade_e_machine_learning

Repository files navigation

Estratégias Algorítmicas para Swing Trade Baseadas em Machine Learning

Este é um sistema completo (PROTÓTIPO) de trading algorítmico que utiliza machine learning para identificar padrões de mercado e gerar sinais de compra/venda. O sistema está sendo desenvolvido com foco em swing trading utilizando análise técnica avançada e indicadores técnicos baseados na Teoria de Ondas de Elliott (foco do nosso grupo, grupo 1) e outras. O projeto é produto do Projeto de Iniciação Científica do Professor Daves Martins, do UniAcademia.

Este projeto implementa estratégias de swing trading baseadas em análise técnica quantitativa e machine learning. A base científica inclui:

  • 📊 Análise Técnica: Indicadores e osciladores (RSI, MACD, Bollinger Bands)
  • 🤖 Machine Learning: Classificação supervisionada com Random Forest
  • 📈 Backtesting: Validação rigorosa de estratégias sem lookahead bias
  • ⚖️ Gestão de Risco: Stop loss automático e position sizing
  • 📖 Teoria de Mercados: Eficiência adaptativa e análise de padrões

📚 Documentação Teórica Completa

Para uma compreensão aprofundada da teoria e metodologia científica implementada:

➡️ Consulte a Documentação Teórica Detalhada

A documentação inclui:

  • Fundamentos matemáticos dos indicadores técnicos
  • Algoritmos de machine learning aplicados
  • Metodologias de validação estatística
  • Princípios de risk management quantitativo
  • Referências acadêmicas e científicas

⚠️ Nota Importante: Os modelos atuais são implementações de exemplo para demonstração do pipeline completo. Na próxima fase do projeto, os modelos serão completamente redesenhados seguindo rigorosamente os princípios teóricos e metodologias acadêmicas documentadas em docs/teoria.md, resultando em modelos significativamente mais robustos e otimizados para performance real de trading. Os modelos atuais estão com péssimo desempenho, e só serviram para demonstrar a pipeline completa.

🚀 Próximas Implementações Baseadas na Teoria Acadêmica:

  • Algoritmos avançados de machine learning validados pela literatura científica
  • Features de mercado baseadas em pesquisas quantitativas comprovadas
  • Modelos de ensemble com validação estatística rigorosa
  • Estratégias de risk management fundamentadas em teoria financeira
  • Backtesting com metodologias estatisticamente robustasdas de Elliott**.

🎯 IMPORTANTE - Desempenho do Modelo

⚠️ ATENÇÃO: Os modelos presentes neste repositório são APENAS PARA DEMONSTRAÇÃO e não devem ser utilizados para trading real. O desempenho atual é intencionalmente baixo para servir como exemplo de implementação e estrutura de código. Para uso em produção, seria necessário:

  • Dados de maior qualidade e volume
  • Features mais sofisticadas
  • Tuning extensivo de hiperparâmetros
  • Validação rigorosa com dados out-of-sample
  • Gerenciamento adequado de risco

📁 Estrutura do Projeto

swing_trade_e_machine_learning/
├── 📂 src/                     # Scripts principais
│   ├── coleta_dados.py         # Coleta de dados históricos
│   ├── preprocessamento.py     # Processamento e features
│   ├── treinamento_modelo.py   # Treinamento ML
│   ├── backtest_engine.py      # Engine de backtesting
│   ├── analise_resultados.py   # Análise de resultados
│   └── __init__.py
├── 📂 models/                  # Modelos treinados (.joblib)
│   ├── modelo_BBAS3_1d.joblib  # Modelo treinado Banco do Brasil
│   ├── modelo_BOVA11_1d.joblib # Modelo treinado Ibovespa ETF
│   ├── modelo_PETR4_1d.joblib  # Modelo treinado Petrobras
│   └── modelo_VALE3_1d.joblib  # Modelo treinado Vale
├── 📂 results/                 # Resultados organizados
│   ├── backtest_reports/       # Relatórios detalhados de backtest
│   │   ├── resultados_backtest_BBAS3_1d.txt
│   │   ├── resultados_backtest_BOVA11_1d.txt
│   │   ├── resultados_backtest_PETR4_1d.txt
│   │   └── resultados_backtest_VALE3_1d.txt
│   ├── logs/                   # Logs de execução
│   │   ├── analise_resultados.log
│   │   ├── backtesting.log
│   │   ├── coleta_dados.log
│   │   ├── preprocessamento.log
│   │   └── treinamento_modelo.log
│   └── resultados_backtest.csv # Consolidação dos resultados
├── 📂 docs/                    # Documentação
│   └── teoria.md               # Fundamentos teóricos e metodologia
├── 📂 tests/                   # Scripts de teste e validação
│   ├── teste_integracao.py     # Teste de integração do sistema
│   ├── demo_refinamentos.py    # Demonstração de refinamentos
│   └── __init__.py
├── 📂 scripts/                 # Scripts auxiliares
│   └── __init__.py
├── 📂 dados_brutos/            # Dados históricos originais (20 arquivos)
│   ├── BBAS3_1d.csv, BBAS3_4h.csv, BBAS3_15m.csv, etc.
│   ├── BOVA11_1d.csv, BOVA11_4h.csv, BOVA11_15m.csv, etc.
│   ├── PETR4_1d.csv, PETR4_4h.csv, PETR4_15m.csv, etc.
│   └── VALE3_1d.csv, VALE3_4h.csv, VALE3_15m.csv, etc.
├── 📂 dados_processados/       # Dados com features técnicas (20 arquivos)
│   ├── BBAS3_1d_processed.csv, BBAS3_4h_processed.csv, etc.
│   ├── BOVA11_1d_processed.csv, BOVA11_4h_processed.csv, etc.
│   ├── PETR4_1d_processed.csv, PETR4_4h_processed.csv, etc.
│   └── VALE3_1d_processed.csv, VALE3_4h_processed.csv, etc.
├── config.json                 # Configurações centralizadas
├── requirements.txt            # Dependências
├── .gitignore                 # Arquivos ignorados
└── README.md                  # Este arquivo

🚀 Configuração e Execução

1. Preparação do Ambiente

# Clonar repositório
git clone https://github.com/YanCotta/swing_trade_e_machine_learning.git
cd swing_trade_e_machine_learning

# Criar ambiente virtual
python -m venv venv
source venv/bin/activate  # Linux/Mac
# ou
venv\Scripts\activate     # Windows

# Instalar dependências
pip install -r requirements.txt

2. Execução do Pipeline Completo

Execute os scripts na ordem correta:

# 1. Coleta de dados históricos
cd src
python coleta_dados.py

# 2. Processamento e criação de features
python preprocessamento.py

# 3. Treinamento dos modelos
python treinamento_modelo.py

# 4. Backtesting das estratégias
python backtest_engine.py

# 5. Análise dos resultados
python analise_resultados.py

3. Testes e Verificação

# Executar testes de integração
cd tests
python teste_integracao.py

# Verificar refinamentos
python demo_refinamentos.py

⚙️ Configuração

O arquivo config.json centraliza todas as configurações:

{
  "ativos": ["PETR4", "VALE3", "BBAS3", "BOVA11"],
  "timeframes": {
    "1d": "2y",
    "4h": "60d", 
    "15m": "30d",
    "5m": "10d",
    "1m": "5d"
  },
  "modelo": {
    "tipo": "random_forest",
    "parametros": {
      "n_estimators": 100,
      "max_depth": 10,
      "min_samples_split": 5,
      "random_state": 42
    }
  },
  "zigzag_deviation": 3.0,
  "target_shift": -1,
  "backtesting": {
    "capital_inicial": 10000,
    "stop_loss": 0.05,
    "take_profit": 0.10,
    "taxa_corretagem": 0.001
  }
}

📊 Funcionalidades Inicais do Protótipo

🔍 Coleta de Dados

  • Download automático via yfinance
  • Múltiplos timeframes (1m, 5m, 15m, 4h, 1d)
  • Dados de ações brasileiras (B3)
  • Configuração flexível via JSON

🛠️ Features Técnicas (14 Indicadores)

  • Médias Móveis: SMA 20 e 50 períodos
  • Osciladores: RSI, Stochastic %K e %D
  • Momentum: MACD, MACD Signal, MACD Histogram
  • Volatilidade: ATR, Bollinger Bands (Upper, Middle, Lower)
  • Volume: Volume Delta simplificado
  • Retorno: Retorno percentual de 1 período

🤖 Machine Learning

  • Modelos Suportados: Random Forest, XGBoost, LightGBM
  • Classificação: Impulso de Alta (1), Impulso de Baixa (2), Correção/Neutro (0)
  • Features: 14 indicadores técnicos
  • Validação: Split temporal (80/20) para evitar data leakage
  • Rotulagem: Algoritmo ZigZag como proxy para Ondas de Elliott

📈 Backtesting

  • Engine próprio livre de lookahead bias
  • Métricas completas: Sharpe, Sortino, Max Drawdown
  • Gestão de risco: Stop Loss e Take Profit configuráveis
  • Análise de trades individuais
  • Exportação detalhada de resultados

🎯 Resultados de Performance

Sistema Totalmente Funcional ✅ (MODELOS USADOS DE EXEMPLO COM TERRÍVEL DESEMPENHO!!!!)

Pipeline Completo Executado com Sucesso:

  • 🔢 Total de Trades: 437 operações executadas
  • 📊 Retorno Consolidado: +38,86%
  • 🎯 Win Rate Médio: 48,2%

Performance por Ativo:

Ativo Retorno Trades Win Rate Profit Factor Max DD
🏆 PETR4 +80,56% 139 54,7% 1.44 -37,53%
BOVA11 +32,94% 63 44,4% 1.72 -23,04%
VALE3 +22,72% 128 50,8% 1.33 -47,96%
BBAS3 +19,22% 107 43,0% 1.37 -28,11%

📊 Análise e Relatórios

  • Gráficos de feature importance automáticos
  • Métricas de performance detalhadas
  • Análise de distribuição de classes
  • Relatórios de problemas identificados
  • Sugestões de melhorias automáticas

🎯 Metodologia (AINDA SERÁ APRIMORADA COM OS ACHADOS DAS REFERÊNCIAS NO teoria.md)

Rotulagem de Padrões com ZigZag (POR ENQUANTO)

O sistema utiliza uma implementação manual do indicador ZigZag para identificar padrões baseados na Teoria das Ondas de Elliott:

  1. Detecção de Topos e Fundos: Identifica pontos de reversão significativos baseados em desvio percentual configurável

  2. Classificação de Movimentos:

    • Impulso de Alta (1): Movimentos de preço ascendente entre pontos de virada
    • Impulso de Baixa (2): Movimentos de preço descendente entre pontos de virada
    • Correção/Neutro (0): Períodos de consolidação (padrão)
  3. Geração de Sinais:

    • Baseada na predição do modelo ML
    • Threshold de confiança configurável (padrão: 60%)
    • Validação temporal para evitar lookahead bias

Pipeline de ML

Dados Brutos → Features Técnicas → Rotulagem ZigZag → Treinamento → Backtesting → Análise

📋 Métricas de Avaliação

Métricas de ML

  • Accuracy: Precisão geral do modelo
  • Precision/Recall: Por classe (Impulso Alta/Baixa/Neutro)
  • F1-Score: Média harmônica de precisão e recall
  • Classification Report: Relatório detalhado por classe
  • Feature Importance: Ranking dos indicadores mais relevantes

Métricas de Trading

  • Retorno Total: Performance absoluta da estratégia
  • Sharpe Ratio: Retorno ajustado ao risco
  • Sortino Ratio: Foco no downside risk
  • Max Drawdown: Maior perda consecutiva
  • Win Rate: Percentual de trades vencedores
  • Profit Factor: Razão lucro total/prejuízo total

📊 Resultados da Versão Atual

📈 Métricas de Performance (Random Forest - Baseline)

Ativo Capital Final Retorno Win Rate Trades Profit Factor Sharpe
BOVA11 R$ 460,86 -95.39% 56.0% 25 12.71 -2.8
VALE3 R$ 218,43 -97.82% 58.2% 79 14.49 -3.1
BBAS3 R$ 78,14 -99.22% 55.4% 130 10.17 -3.5
PETR4 R$ 61,97 -99.38% 54.9% 173 4.92 -3.2

📊 Consolidado:

  • Capital Inicial: R$ 10.000,00
  • Capital Final Médio: R$ 204,85 (-97.95%)
  • Win Rate Médio: 56.1% ✅ Capacidade preditiva confirmada (MAS PESSÍMO DESEMPENHO GERAL)
  • Total de Trades: 407

🔍 Análise dos Resultados

✅ Pontos Positivos

  1. Win Rate Consistente: 56.1% demonstra capacidade preditiva real
  2. Profit Factor Alto: Indica boa identificação de oportunidades
  3. Sistema Robusto: Pipeline completo funcionando perfeitamente
  4. Base Científica: Metodologia reproduzível e livre de bias

⚠️ Problemas Identificados

  1. Paradoxo do Win Rate: Alto win rate mas retorno negativo

    • Causa: Trades lucrativos pequenos vs perdas grandes
    • Solução: Otimizar ratio Risk/Reward
  2. Gestão de Risco:

    • Stop Loss muito restritivo (5%)
    • Take Profit subotimizado (10%)
  3. Overtrading:

    • 101 trades/ativo em média
    • Causa: Sinais excessivos sem filtros adequados

🔧 Personalização

Adicionando Novos Ativos

Edite o config.json:

{
  "ativos": ["PETR4", "VALE3", "NOVO_ATIVO.SA"]
}

Modificando Features

No arquivo src/preprocessamento.py, adicione novos indicadores:

def calcular_features_customizadas(df):
    # Seu indicador personalizado
    df['CUSTOM_INDICATOR'] = ...
    return df

Configurando Modelos

No arquivo config.json:

{
  "modelo": {
    "tipo": "xgboost",
    "parametros": {
      "n_estimators": 200,
      "max_depth": 8,
      "learning_rate": 0.1
    }
  }
}

📝 Logs e Debugging

Todos os scripts geram logs detalhados organizados na estrutura:

results/
├── logs/                      # Logs de execução organizados
│   ├── coleta_dados.log       # Log da coleta de dados
│   ├── preprocessamento.log   # Log do processamento
│   ├── treinamento_modelo.log # Log do treinamento
│   ├── backtesting.log        # Log do backtesting
│   └── analise_resultados.log # Log da análise
└── backtest_reports/          # Relatórios detalhados por ativo
    ├── resultados_backtest_BBAS3_1d.txt
    ├── resultados_backtest_BOVA11_1d.txt
    ├── resultados_backtest_PETR4_1d.txt
    └── resultados_backtest_VALE3_1d.txt

🔍 Para debug detalhado:

  • Consulte results/logs/ para logs de execução
  • Verifique results/backtest_reports/ para análises individuais por ativo
  • Use results/resultados_backtest.csv para consolidação geral

⚠️ Limitações e Disclaimers

  1. Não é Aconselhamento Financeiro: Este sistema é apenas educacional
  2. Backtesting ≠ Performance Futura: Resultados passados não garantem resultados futuros
  3. Dados Limitados: Utiliza apenas dados históricos de preços
  4. Sem Análise Fundamentalista: Foco apenas em análise técnica
  5. Custos de Transação: Considera apenas taxa de corretagem básica

🛡️ Gerenciamento de Risco

Implementado

  • Stop Loss fixo (configurável)
  • Take Profit fixo (configurável)
  • Limite de capital por trade
  • Position sizing baseado em capital disponível

🤝 Contribuições

Contribuições são bem-vindas! Por favor:

  1. Fork o repositório
  2. Crie uma branch para sua feature
  3. Faça commit das mudanças
  4. Abra um Pull Request

⚠️ AVISO LEGAL: Este sistema é destinado exclusivamente para fins educacionais e de pesquisa. Não constitui aconselhamento financeiro. O trading de ativos financeiros envolve riscos significativos de perda. Sempre consulte um profissional qualificado antes de tomar decisões de investimento.

Desenvolvido por: Grupo 1 Versão: 1.0 Última Atualização: 27 de Junho de 2025

About

Projeto de Iniciação Científica orientado pelo Professor Daves Martins do UniAcademia: "Estratégias Algorítmicas para Swing Trade Baseadas em Machine Learning" - REPOSITÓRIO ANTIGO, PROJETO SE MOVEU PARA UMA ORGANIZAÇÃO PRIVADA NO GITHUB

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages