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
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
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**.
⚠️ 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
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
# 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.txtExecute 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# Executar testes de integração
cd tests
python teste_integracao.py
# Verificar refinamentos
python demo_refinamentos.pyO 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
}
}- 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
- 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
- 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
- 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
Pipeline Completo Executado com Sucesso:
- 🔢 Total de Trades: 437 operações executadas
- 📊 Retorno Consolidado: +38,86%
- 🎯 Win Rate Médio: 48,2%
| 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% |
- 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
O sistema utiliza uma implementação manual do indicador ZigZag para identificar padrões baseados na Teoria das Ondas de Elliott:
-
Detecção de Topos e Fundos: Identifica pontos de reversão significativos baseados em desvio percentual configurável
-
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)
-
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
Dados Brutos → Features Técnicas → Rotulagem ZigZag → Treinamento → Backtesting → Análise
- 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
- 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
| 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
- Win Rate Consistente: 56.1% demonstra capacidade preditiva real
- Profit Factor Alto: Indica boa identificação de oportunidades
- Sistema Robusto: Pipeline completo funcionando perfeitamente
- Base Científica: Metodologia reproduzível e livre de bias
-
Paradoxo do Win Rate: Alto win rate mas retorno negativo
- Causa: Trades lucrativos pequenos vs perdas grandes
- Solução: Otimizar ratio Risk/Reward
-
Gestão de Risco:
- Stop Loss muito restritivo (5%)
- Take Profit subotimizado (10%)
-
Overtrading:
- 101 trades/ativo em média
- Causa: Sinais excessivos sem filtros adequados
Edite o config.json:
{
"ativos": ["PETR4", "VALE3", "NOVO_ATIVO.SA"]
}No arquivo src/preprocessamento.py, adicione novos indicadores:
def calcular_features_customizadas(df):
# Seu indicador personalizado
df['CUSTOM_INDICATOR'] = ...
return dfNo arquivo config.json:
{
"modelo": {
"tipo": "xgboost",
"parametros": {
"n_estimators": 200,
"max_depth": 8,
"learning_rate": 0.1
}
}
}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.csvpara consolidação geral
- Não é Aconselhamento Financeiro: Este sistema é apenas educacional
- Backtesting ≠ Performance Futura: Resultados passados não garantem resultados futuros
- Dados Limitados: Utiliza apenas dados históricos de preços
- Sem Análise Fundamentalista: Foco apenas em análise técnica
- Custos de Transação: Considera apenas taxa de corretagem básica
- Stop Loss fixo (configurável)
- Take Profit fixo (configurável)
- Limite de capital por trade
- Position sizing baseado em capital disponível
Contribuições são bem-vindas! Por favor:
- Fork o repositório
- Crie uma branch para sua feature
- Faça commit das mudanças
- Abra um Pull Request
Desenvolvido por: Grupo 1 Versão: 1.0 Última Atualização: 27 de Junho de 2025