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())