Integra todo lo aprendido en un sistema profesional, robusto y monitoreable
CCXT WebSocket · yfinance · PostgreSQL/TimescaleDB
scikit-learn · LSTM · Feature Importance · Optuna
Mean Rev · Momentum · Grid · DCA · Backtrader
Kelly Criterion · Dynamic SL/TP · Drawdown limits
Docker · Prometheus · Grafana · Telegram
Exponential backoff · Circuit breaker · Dead letter Q
# Estructura de archivos del bot de producción trading-bot/ ├── bot.py # Punto de entrada principal ├── config.py # Config desde variables de entorno ├── requirements.txt ├── Dockerfile ├── docker-compose.yml ├── .env.example ├── .gitignore ├── prometheus.yml │ ├── data/ # Capa de datos │ ├── ccxt_client.py # Conexión al exchange con retry │ ├── websocket_feed.py # WebSocket en tiempo real │ â”â€�── database.py # PostgreSQL + TimescaleDB │ ├── features/ # Feature Engineering │ ├── technical.py # TA-Lib: RSI, MACD, BB, ATR │ ├── volume.py # OBV, VWAP, MFI │ â”â€�── pipeline.py # Pipeline completo │ ├── models/ # ML Models │ ├── train.py # Entrenamiento + TimeSeriesSplit │ ├── predict.py # Inferencia en tiempo real │ â”â€�── saved/ # Modelos serializados (joblib) │ ├── strategies/ # Estrategias │ ├── base.py # Clase base Strategy │ ├── rsi_mean_rev.py │ ├── ml_momentum.py │ â”â€�── grid.py │ ├── risk/ # Gestión de riesgo │ ├── position_sizing.py # Kelly Criterion fraccionado │ ├── stop_loss.py # SL/TP dinámico con ATR │ â”â€�── portfolio.py # LÃmites de drawdown │ ├── execution/ # Ejecución de órdenes │ ├── order_manager.py │ â”â€�── paper_trading.py # Modo dry-run │ ├── monitoring/ # Observabilidad │ ├── metrics.py # prometheus_client │ â”â€�── alerts.py # Telegram + Discord │ â”â€�── backtest/ # Backtesting ├── engine.py â”â€�── report.py
#!/usr/bin/env python3 """Bot de trading autónomo � versión producción""" import asyncio, logging, signal, sys from config import Config from data.ccxt_client import ExchangeClient from data.database import Database from features.pipeline import FeaturePipeline from models.predict import ModelPredictor from strategies.ml_momentum import MLMomentumStrategy from risk.portfolio import PortfolioRisk from execution.order_manager import OrderManager from monitoring.metrics import start_metrics_server from monitoring.alerts import Alerter logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s') log = logging.getLogger('bot.main') class TradingBot: def __init__(self): cfg = Config() self.db = Database(cfg.db_url) self.exchange = ExchangeClient(cfg.exchange, cfg.api_key, cfg.secret) self.features = FeaturePipeline() self.model = ModelPredictor(cfg.model_path) self.strategy = MLMomentumStrategy(self.model) self.risk = PortfolioRisk(max_dd=cfg.max_drawdown) self.orders = OrderManager(self.exchange, dry_run=cfg.dry_run) self.alerts = Alerter(cfg.telegram_token, cfg.telegram_chat) async def run(self): await self.alerts.send("🚀 Bot iniciado") start_metrics_server(port=8080) async for candle in self.exchange.stream_ohlcv('BTC/USDT', '1m'): features = self.features.transform(candle) signal = self.strategy.generate_signal(features) if signal and self.risk.approve(signal): order = await self.orders.execute(signal) await self.alerts.notify_trade(order) async def main(): bot = TradingBot() loop = asyncio.get_event_loop() loop.add_signal_handler(signal.SIGTERM, lambda: loop.stop()) await bot.run() if __name__ == '__main__': asyncio.run(main())