1. Arquitetura do Sistema
O Trading Bot não é apenas um script, mas um ecossistema complexo que une análise técnica, inteligência artificial e execução em tempo real. Ele foi projetado para operar 24/7 sem intervenção humana, utilizando uma "Blindagem de Integridade" para evitar operações em momentos de falha de dados.
2. O Motor Python (Backend)
O coração do projeto está em backend/services/bybit_service.py. Ele gerencia toda a comunicação com a exchange. Abaixo está o código real da classe de integração, com as credenciais protegidas.
import os
from pybit.unified_trading import HTTP
class BybitEngine:
def __init__(self):
# Credenciais carregadas de variáveis de ambiente por segurança
self.api_key = os.getenv("BYBIT_API_KEY") # SUBST_SUA_CHAVE
self.api_secret = os.getenv("BYBIT_API_SECRET") # SUBST_SEU_SECRET
# Inicialização da Sessão Unificada (UTA)
self.session = HTTP(
testnet=False,
api_key=self.api_key,
api_secret=self.api_secret,
)
def get_candles(self, symbol="BTCUSDT", interval="1h", limit=100):
"""Busca velas históricas para análise técnica"""
res = self.session.get_kline(
category="spot",
symbol=symbol,
interval="60", # 1 hora
limit=limit
)
return res['result']['list'] # Retorna lista de velas (OHLCV)
Análise para Iniciantes:
O código acima cria um "telefone" para falar com a corretora Bybit. O método get_candles pede para a corretora o histórico de preços (velas). Sem esse histórico, o bot não saberia se o preço subiu ou desceu.
3. Inteligência de Indicadores
No arquivo indicators.py, transformamos preços brutos em decisões lógicas. O bot utiliza a EMA200 (Média Móvel Exponencial de 200 períodos) para saber se a tendência de longo prazo é de alta ou baixa.
def calculate_all(candles_1h):
df = pd.DataFrame(candles_1h)
# Média de 200 períodos: O divisor de águas
df['ema200'] = df['close'].ewm(span=200, adjust=False).mean()
# RSI: Indica se o mercado está "caro" ou "barato"
# RSI > 70 (Sobrecompra) | RSI < 30 (Sobrevenda)
delta = df['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
df['rsi'] = 100 - (100 / (1 + (gain / loss)))
# Regime de Mercado:
last = df.iloc[-1]
if last['close'] > last['ema200']:
regime = "TENDÊNCIA DE ALTA"
else:
regime = "TENDÊNCIA DE BAIXA"
4. O Tribunal de IA (Gemini 1.5)
O grande diferencial deste projeto é o uso de Inteligência Artificial para filtrar sinais falsos. O bot envia todos os dados técnicos para o Gemini e pergunta: "Vale a pena entrar?".
class GeminiAnalyst:
def analyze_trend(self, indicators):
prompt = f"""
Você é o JUIZ SUPREMO do Tribunal Nômade.
Analise os dados e responda se devemos COMPRAR ou ESPERAR.
DADOS: {indicators}
Responda em JSON: {{"signal": "BUY", "score": 85, "reasoning": "..."}}
"""
response = self.model.generate_content(prompt)
return response.text
5. Dashboard Front-end
O controle do bot é feito via uma interface web de alta tecnologia, utilizando trading.html e market.html. Ela se conecta ao Firebase para mostrar os dados em tempo real sem que você precise atualizar a página.
<!-- Exemplo da lógica de monitoramento em tempo real -->
<script type="module">
import { db } from './firebase-config.js';
import { ref, onValue } from "https://www.gstatic.com/firebasejs/10.12.0/firebase-database.js";
// Ouve o preço atual do Bitcoin no banco de dados
onValue(ref(db, 'market/BTCUSDT/current'), (snapshot) => {
const data = snapshot.val();
document.getElementById('btc-price').innerText = `$ ${data.price}`;
});
</script>