Este proyecto es un sistema completo de análisis, backtesting y ejecución en tiempo real de estrategias de trading algorítmico usando la API de Binance para derivados. Está construido con Python y Flask, e incluye una visualización tipo TradingView con datos históricos y en vivo mediante WebSocket.
trading_bot/
│
├── app/ # Aplicación web Flask
│ ├── routes/ # Rutas para dashboards, backtesting, órdenes, WebSocket
│ ├── templates/ # HTML con Jinja2
│ └── static/ # JS, CSS y visualización en tiempo real (Chart.js, WebSocket)
├── wsbridge/ # Microservicio WebSocket intermedio entre Binance y frontend
│
├── core/ # Núcleo del bot y lógica de trading
│ ├── repository/ # Acceso desacoplado a base de datos (Repository Pattern)
│
├── data/ # Scripts de carga, actualización y exportación
├── estrategias/ # Estrategias (SMA, ML, etc.)
├── indicadores/ # Cálculo de indicadores técnicos
├── websocket/ # Cliente WebSocket para Binance
├── backtesting/ # Motor de simulación histórica
├── config/ # Configuraciones y secretos
├── tests/ # Pruebas automatizadas
├── run.py # CLI de ejecución
└── requirements.txt # Dependencias
- Clona el repositorio
git clone https://github.com/tu_usuario/trading_bot.git
cd trading_bot- Crea un entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate- Instala las dependencias
pip install -r requirements.txt- Genera tu archivo
.envdesde el ejemplo
Ejecuta el siguiente comando para copiar config/.env.example a config/.env (si aún no existe):
python setup_env.pyLuego revisa y edita config/.env con tus credenciales y parámetros de entorno.
- Configura las variables sensibles
Edita el archivo config/.env con tus claves API y parámetros personalizados.
python run.pyAccede a: http://localhost:5000 para datos en vivo
o a: http://localhost:5000/backtest-ui para simulaciones.
from data.updater import obtener_datos_historicos
obtener_datos_historicos(["BTCUSDT"], ["1m", "5m"], "datos_historicos.db")# También puedes usar parámetros start_time y end_time opcionalmentefrom data.exporter import exportar_datos
exportar_datos("BTCUSDT", "1m", formato="csv", salida="export_btc.csv")curl -X POST http://localhost:5000/backtest \
-H "Content-Type: application/json" \
-d '{"symbol": "BTCUSDT", "interval": "1m", "strategy": "sma_cruce", "capital": 1000}'POST /backtest: Ejecuta un backtest con datos históricos locales. Requiere en el cuerpo JSON:{ "symbol": "BTCUSDT", "interval": "1m", "strategy": "sma_cruce", "capital": 1000, "start_date": "2024-01-01", "end_date": "2024-01-31" }
GET /metrics: Devuelve métricas de uso del sistema, CPU, RAM, uptime, etc.GET /cruces: Devuelve señales de cruce de medias móviles detectadas.GET /ultimos_cruces: Devuelve últimos cruces detectados y guardados en DB.
- WebSocket en
ws://localhost:8765/?symbol=BTCUSDT&interval=1m: Stream de precios y velas actualizado en vivo desde Binance.
Puedes gestionar órdenes en tiempo real:
GET /ordenes: lista todas las órdenesGET /ordenes?symbol=BTCUSDT: filtra por símboloGET /ordenes?estado=pendiente: filtra por estadoPOST /ordenes: crea una nueva ordenPUT /ordenes/<id>: actualiza el estadoDELETE /ordenes/<id>: elimina una orden
Ejemplo de POST:
{
"symbol": "BTCUSDT",
"lado": "compra",
"precio": 29500.5,
"cantidad": 0.01,
"estado": "pendiente"
}Este proyecto aplica varios patrones de software:
- Strategy → estrategias pluggables (
estrategias/base.py) - Factory → instanciación dinámica (
estrategias/factory.py) - State → control de lógica operativa (
core/state.py) - Repository → acceso a datos (
core/repository/) - MVC → estructura web con Flask
sma_cruce.py: Cruce de medias móviles simples.ml_predictor.py: Modelo ML (placeholder para predicción).ml_predictor.py: Placeholder actualmente. En versiones futuras se integrará conscikit-learny pipelines de entrenamiento para señales predictivas.- Sistema extensible vía
estrategias/factory.py.
Las estrategias pueden integrarse con el sistema de difusión en tiempo real mediante AsyncBroadcast, para enviar señales directamente al frontend.
- Gráfico de velas con indicadores técnicos y volumen
- Carga inicial optimizada usando rangos
startTimeyendTime - WebSocket en tiempo real con reconexión segura y soporte para múltiples clientes
- Panel de backtesting interactivo vía
/backtest-ui
La lógica de la visualización está dividida en módulos dentro de static/js/:
ws-handler.js: gestiona conexión y reconexión WebSocket.grafico_utils.js: renderiza el gráfico de velas y volumen.indicadores.js: calcula y aplica SMAs, EMAs, y otros indicadores.procesador_kline.js: transforma datos Kline para su uso en el gráfico.estrategias.js: integra señales de estrategia en el frontend.session_utils.js: mantiene estado de sesión y configuración.
Esto permite escalabilidad, reutilización y mantenimiento más sencillo del frontend.
Pruebas básicas disponibles:
pytest tests/Prueba de conexión WebSocket con Binance (usando Testnet o entorno real):
python websocket/test_ws_connection.pyTambién puedes probar el WebSocket local en ws://localhost:8765/?symbol=BTCUSDT&interval=1m, que transmite los datos en vivo recibidos desde Binance hacia múltiples clientes frontend mediante el servicio wsbridge.
Asegúrate de definir en tu archivo .env:
BINANCE_WS_URL=wss://fstream.binance.com/ws
o usar la testnet:
BINANCE_WS_URL=wss://stream.binancefuture.com/ws
Si estás en Mac M1/M2 y deseas usar TensorFlow localmente, instala: pip install -r requirements.macos.txt
Este servicio permite multiplexado de múltiples clientes con reconexión automática y gestión de estado por símbolo/intervalo.
- API Keys protegidas en
.env - Separación total entre módulos: web, lógica, datos
- Repositorios desacoplados para persistencia
- Patrón de diseño aplicado correctamente
Consulta:
core/bot.py: clase principal del botestrategias/: lógica de decisionesbacktesting/simulador.py: motor de simulaciónapp/templates/backtest.html: visualizador de pruebaswsbridge/: capa intermedia que maneja multiplexado y reconexión WebSocket
- Base de datos PostgreSQL integrada y operativa
- Añadir indicadores técnicos avanzados (MACD, Ichimoku)
- Integrar modelos ML y optimización con algoritmos genéticos
- Gestión de riesgo por orden en tiempo real
- Despliegue en Google Cloud Platform (VM + Base de datos)
- Optimización de estrategias con Grid Search y validación cruzada
Este diagrama muestra el flujo entre componentes:
- Binance WebSocket →
websocket/client.py→wsbridge→frontend - Backend Flask con rutas REST para backtesting, métricas y órdenes
- Sistema desacoplado con patrones de diseño aplicados por módulo
Pull requests y sugerencias son bienvenidas. Para cambios mayores, abre un issue primero para discutirlo.
