Skip to content

TheoGoulart333/AI-Trading-Bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– AI Trading Bot β€” Machine Learning meets Financial Markets

Python Scikit-Learn CCXT License Status

Um projeto de portfΓ³lio demonstrando a interseΓ§Γ£o entre Engenharia de Software, Machine Learning e FinanΓ§as Quantitativas.

Arquitetura β€’ InstalaΓ§Γ£o β€’ Uso β€’ MΓ³dulos β€’ Disclaimer


🎯 Sobre o Projeto

Este projeto implementa um bot de anΓ‘lise de mercado baseado em IA com pipeline completo: ingestΓ£o de dados β†’ anΓ‘lise tΓ©cnica β†’ modelo preditivo β†’ backtesting. O objetivo Γ© demonstrar boas prΓ‘ticas de engenharia de software em um domΓ­nio complexo e real.

⚠️ Este projeto é exclusivamente educacional. Não é um sistema de trading em produção, não gerencia dinheiro real e não garante retornos financeiros de qualquer espécie.

✨ Destaques Técnicos

  • Arquitetura modular com ProgramaΓ§Γ£o Orientada a Objetos e interfaces abstratas (Strategy Pattern)
  • Pipeline de ML completo: feature engineering, TimeSeriesSplit, validaΓ§Γ£o cruzada temporal
  • Dois modelos intercambiΓ‘veis: Random Forest (baseline interpretΓ‘vel) e LSTM (deep learning sequencial)
  • Motor de backtesting com simulaΓ§Γ£o realista de taxas, slippage, stop-loss e take-profit
  • MΓ©tricas financeiras profissionais: Sharpe Ratio, Maximum Drawdown, Profit Factor
  • Cobertura de testes com pytest e fixtures para dados sintΓ©ticos
  • CΓ³digo PEP8 com docstrings completas e logging estruturado

πŸ— Arquitetura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        AI TRADING BOT PIPELINE                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  Exchange    β”‚    β”‚  Data Ingestion   β”‚    β”‚ Technical Analysis   β”‚
  β”‚  (CCXT)      │───▢│  OHLCV Fetcher   │───▢│  RSI, MACD, BB,      β”‚
  β”‚  Binance     β”‚    β”‚  Rate Limiting    β”‚    β”‚  EMA, SMA, ATR,      β”‚
  β”‚  Kraken...   β”‚    β”‚  Error Handling   β”‚    β”‚  VWAP, Volume Ratio  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                          β”‚
                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                       β”‚          Feature Engineering                  β”‚
                       β”‚  Returns % | Volume Anomaly | Target Label   β”‚
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                              β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚                    AI Model Layer                        β”‚
             β”‚                                                          β”‚
             β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
             β”‚  β”‚   Random Forest     β”‚   β”‚        LSTM           β”‚    β”‚
             β”‚  β”‚  (Baseline, Fast)   β”‚   β”‚  (Sequential, Deep)   β”‚    β”‚
             β”‚  β”‚  Feature Importance β”‚   β”‚  Lookback Window: 60  β”‚    β”‚
             β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
             β”‚          TimeSeriesSplit β€” sem look-ahead bias           β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                          β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚                   Backtesting Engine                     β”‚
             β”‚  Capital Mgmt | Stop-Loss | Take-Profit | Slippage      β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                          β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚                    Results & Reporting                   β”‚
             β”‚   Sharpe Ratio | Max Drawdown | Win Rate | JSON + Logs  β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Fluxo de Dados

  1. DataIngestion conecta Γ  exchange via CCXT e busca N candles OHLCV com rate limiting automΓ‘tico
  2. TechnicalAnalysis enriquece o DataFrame com 15+ indicadores usando Pandas (sem dependΓͺncia de TA-Lib)
  3. Feature Engineering gera retornos percentuais, anomalias de volume e o target label binΓ‘rio
  4. AI Model treina com TimeSeriesSplit para respeitar a ordem temporal e evitar data leakage
  5. Backtester simula operaΓ§Γ΅es no conjunto de teste com custos realistas e gestΓ£o de risco
  6. Reporting salva mΓ©tricas em JSON e logs estruturados para auditoria

πŸ“ Estrutura de Pastas

ai_trading_bot/
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ data_ingestion.py      # MΓ³dulo de coleta de dados via CCXT
β”‚   β”œβ”€β”€ technical_analysis.py  # CΓ‘lculo de indicadores tΓ©cnicos
β”‚   β”œβ”€β”€ ai_model.py            # Random Forest + LSTM (BaseModel interface)
β”‚   └── backtesting.py         # Simulador de estratΓ©gias
β”‚
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── test_technical_analysis.py  # Testes unitΓ‘rios (pytest)
β”‚
β”œβ”€β”€ results/                   # JSONs de resultados (gerado automaticamente)
β”œβ”€β”€ logs/                      # Arquivos de log (gerado automaticamente)
β”‚
β”œβ”€β”€ main.py                    # Orquestrador do pipeline (CLI)
β”œβ”€β”€ requirements.txt
└── README.md

πŸš€ InstalaΓ§Γ£o

PrΓ©-requisitos

  • Python 3.11+
  • pip

Passo a Passo

# 1. Clone o repositΓ³rio
git clone https://github.com/seu-usuario/ai-trading-bot.git
cd ai-trading-bot

# 2. Crie e ative um ambiente virtual
python -m venv venv
source venv/bin/activate  # Linux/macOS
# ou: venv\Scripts\activate  # Windows

# 3. Instale as dependΓͺncias
pip install -r requirements.txt

# 4. (Opcional) Para usar o modelo LSTM
pip install tensorflow

πŸ’» Uso

Modo Dry-Run (recomendado para testes β€” sem API)

python main.py --dry-run

Com dados reais (Binance, sem autenticaΓ§Γ£o para dados pΓΊblicos)

# BTC/USDT, timeframe de 1 hora, 500 candles
python main.py --symbol BTC/USDT --timeframe 1h --limit 500

# ETH/USDT, timeframe de 4 horas
python main.py --symbol ETH/USDT --timeframe 4h --limit 1000

# Com modelo LSTM (requer TensorFlow instalado)
python main.py --model lstm --limit 2000 --dry-run

Executar Testes

pytest tests/ -v --cov=src --cov-report=term-missing

Argumentos da CLI

Argumento PadrΓ£o DescriΓ§Γ£o
--symbol BTC/USDT Par de trading da exchange
--timeframe 1h Intervalo dos candles
--limit 500 NΓΊmero de candles histΓ³ricos
--model random_forest Modelo de IA: random_forest ou lstm
--dry-run False Usa dados sintΓ©ticos (sem API)
--log-level INFO NΓ­vel de verbosidade dos logs
--output results/ DiretΓ³rio para salvar resultados

πŸ“¦ MΓ³dulos

src/data_ingestion.py β€” DataIngestion

Conecta a 100+ exchanges via CCXT. Features:

  • Busca candles OHLCV com retry automΓ‘tico
  • Rate limiting integrado (enableRateLimit=True)
  • Suporte a modo sandbox para testes seguros
  • Busca multi-sΓ­mbolo com tratamento de falhas parciais

src/technical_analysis.py β€” TechnicalAnalysis

Calcula indicadores diretamente com Pandas/NumPy (zero dependΓͺncia de TA-Lib):

  • MΓ©dias: SMA (20/50/200), EMA (9/21)
  • Momentum: RSI (14), MACD (12/26/9)
  • Volatilidade: Bollinger Bands, ATR
  • Volume: VWAP, Volume Ratio
  • API fluente com method chaining: ta.add_sma().add_rsi().add_macd()

src/ai_model.py β€” RandomForestModel / LSTMModel

Interface BaseModel abstrata (Strategy Pattern) com duas implementaΓ§Γ΅es:

Aspecto Random Forest LSTM
Dados mΓ­nimos ~300 candles ~2000 candles
Velocidade de treino Segundos Minutos
Interpretabilidade βœ… Feature Importance ❌ Caixa preta
Captura temporal Limitada Excelente
Recomendado para InΓ­cio e baseline Experimentos avanΓ§ados

src/backtesting.py β€” Backtester

Simula operaΓ§Γ΅es histΓ³ricas com:

  • GestΓ£o de capital por percentual (position_size_pct)
  • Custos reais: taxa Binance (0.1%) + slippage (0.05%)
  • Stop-loss e take-profit por candle
  • Filtro de confianΓ§a mΓ­nima do modelo (min_confidence)
  • MΓ©tricas: Sharpe Ratio, Max Drawdown, Win Rate, Profit Factor

πŸ§ͺ DecisΓ΅es de Design e Conceitos Importantes

Por que TimeSeriesSplit e nΓ£o train_test_split aleatΓ³rio?

Em sΓ©ries temporais, usar split aleatΓ³rio causa data leakage (vazamento de dados): o modelo "vΓͺ" o futuro durante o treino, inflando artificialmente as mΓ©tricas. O TimeSeriesSplit garante que o modelo seja sempre treinado com dados do passado e avaliado com dados do futuro.

Por que Random Forest como baseline?

Random Forest Γ© resistente a overfitting, treina rapidamente e fornece feature importance β€” essencial para entender quais indicadores tΓ©cnicos realmente contribuem para as previsΓ΅es. Γ‰ o ponto de partida ideal antes de escalar para modelos mais complexos.

Por que simular slippage no backtesting?

Slippage Γ© a diferenΓ§a entre o preΓ§o esperado e o preΓ§o executado, comum em mercados com pouca liquidez. IgnorΓ‘-lo produz backtests irrealisticamente otimistas (overfitting de estratΓ©gia).


⚠️ Disclaimer

Este projeto Γ© estritamente educacional e de portfΓ³lio.

  • NΓ£o constitui aconselhamento financeiro, de investimento ou recomendaΓ§Γ£o de qualquer tipo.
  • Resultados de backtesting nΓ£o garantem performance futura.
  • Trading de criptomoedas e outros ativos envolve risco substancial de perda.
  • Os autores nΓ£o se responsabilizam por qualquer perda financeira decorrente do uso deste cΓ³digo.
  • Consulte um profissional financeiro certificado antes de tomar decisΓ΅es de investimento.

Nunca use dinheiro que vocΓͺ nΓ£o pode se dar ao luxo de perder.


πŸ“„ LicenΓ§a

DistribuΓ­do sob a licenΓ§a MIT. Veja LICENSE para mais informaΓ§Γ΅es.


Feito com 🧠 e β˜• β€” Para aprender, questionar e evoluir.

About

πŸ€– Crypto Trading Bot com IA (Random Forest), anΓ‘lise tΓ©cnica automatizada (RSI, MACD, Bollinger) e 100% de cobertura de testes unitΓ‘rios.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages