6.7 KiB
🤖 Trading Bot - Semanas 1-2: Data Pipeline
Bot de trading algorítmico desarrollado desde cero. Esta es la primera fase enfocada en el pipeline de datos.
📋 Tabla de Contenidos
🔧 Requisitos
Software
- Python 3.10 o superior
- PostgreSQL 13 o superior
- Redis 6 o superior (opcional, para caché)
- Git
Hardware (mínimo para desarrollo)
- 8GB RAM
- 20GB espacio en disco
📦 Instalación
1. Clonar el repositorio
git clone <tu-repositorio>
cd trading-bot
2. Crear entorno virtual
python -m venv venv
# En Linux/Mac:
source venv/bin/activate
# En Windows:
venv\Scripts\activate
3. Instalar dependencias
pip install --upgrade pip
pip install -r requirements.txt
4. Instalar PostgreSQL
Ubuntu/Debian:
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
macOS (con Homebrew):
brew install postgresql
brew services start postgresql
Windows: Descargar instalador desde postgresql.org
5. Configurar base de datos
# Conectar a PostgreSQL
sudo -u postgres psql
# Crear base de datos y usuario
CREATE DATABASE trading_bot;
CREATE USER trading_user WITH PASSWORD 'tu_password_seguro';
GRANT ALL PRIVILEGES ON DATABASE trading_bot TO trading_user;
\q
6. Instalar Redis (opcional)
Ubuntu/Debian:
sudo apt install redis-server
sudo systemctl start redis
macOS:
brew install redis
brew services start redis
Windows: Descargar desde redis.io o usar WSL
⚙️ Configuración
1. Copiar archivo de configuración
cp .env.example .env
2. Editar .env con tus credenciales
# Exchange (para datos públicos no se necesita API key)
EXCHANGE_NAME=binance
API_KEY=
API_SECRET=
# Base de datos
DB_HOST=localhost
DB_PORT=5432
DB_NAME=trading_bot
DB_USER=trading_user
DB_PASSWORD=tu_password_seguro
# Redis (opcional)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0
# General
ENVIRONMENT=development
LOG_LEVEL=INFO
3. Verificar configuración de settings.yaml
El archivo config/settings.yaml contiene configuraciones generales que puedes ajustar:
trading:
symbols:
- BTC/USDT
- ETH/USDT
timeframes:
- 1h
- 4h
🚀 Uso
Ejecutar demo completo
python main.py
Este comando ejecutará el pipeline completo:
- Conexión al exchange (Binance por defecto)
- Descarga de datos históricos
- Procesamiento y limpieza
- Almacenamiento en PostgreSQL
- Verificación de datos
Uso programático
from src.data.fetcher import DataFetcher
from src.data.processor import DataProcessor
from src.data.storage import StorageManager
# Inicializar fetcher
fetcher = DataFetcher('binance')
# Obtener datos
df = fetcher.fetch_historical('BTC/USDT', timeframe='1h', days=7)
# Procesar
processor = DataProcessor()
df_clean = processor.clean_data(df)
# Guardar
storage = StorageManager(...)
storage.save_ohlcv(df_clean)
📁 Estructura del Proyecto
trading-bot/
├── config/ # Configuración
│ ├── settings.yaml # Configuración general
│ └── .env # Variables de entorno (no subir a git)
├── src/ # Código fuente
│ ├── data/ # Módulo de datos
│ │ ├── fetcher.py # Obtención de datos
│ │ ├── processor.py # Procesamiento
│ │ └── storage.py # Almacenamiento
│ └── utils/ # Utilidades
│ └── logger.py # Sistema de logging
├── tests/ # Tests unitarios
│ └── test_data.py # Tests del módulo de datos
├── data/ # Datos locales
│ └── historical/ # Datos históricos
├── logs/ # Archivos de log
├── requirements.txt # Dependencias Python
├── main.py # Punto de entrada
└── README.md # Este archivo
🧪 Testing
Ejecutar todos los tests
pytest tests/ -v
Ejecutar tests con cobertura
pytest tests/ --cov=src --cov-report=html
Ejecutar test específico
pytest tests/test_data.py::TestDataProcessor::test_clean_data_removes_duplicates -v
📊 Funcionalidades Implementadas
✅ Completado (Semanas 1-2)
- Sistema de logging robusto
- Conexión a exchanges vía CCXT
- Descarga de datos históricos
- Descarga incremental (continuar desde último timestamp)
- Procesamiento y limpieza de datos
- Detección de gaps y outliers
- Resampleo de timeframes
- Cálculo de retornos
- Almacenamiento en PostgreSQL
- Caché con Redis
- Tests unitarios
- Manejo de errores y reintentos
🔜 Próximos Pasos (Semanas 3-4)
- Engine de backtesting
- Métricas de performance (Sharpe, Sortino, Max Drawdown)
- Visualizaciones de resultados
- Estrategia simple de trading
- Simulación histórica
🐛 Troubleshooting
Error: "No se puede conectar a PostgreSQL"
Solución:
# Verificar que PostgreSQL está corriendo
sudo systemctl status postgresql
# Verificar credenciales en .env
# Verificar que el usuario tiene permisos
Error: "ModuleNotFoundError: No module named 'ccxt'"
Solución:
# Asegurarse de que el entorno virtual está activado
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Reinstalar dependencias
pip install -r requirements.txt
Error: Rate limit exceeded
Solución: El código ya incluye manejo de rate limiting, pero si persiste:
- Aumentar delays en
config/settings.yaml - Reducir el número de símbolos/timeframes
- Usar API keys para límites más altos
📝 Notas Importantes
⚠️ IMPORTANTE: Este bot es para fines educativos. No ejecutes trading real sin:
- Backtesting exhaustivo (mínimo 3-5 años)
- Paper trading extensivo (varios meses)
- Gestión de riesgo robusta
- Comprensión completa del código
🤝 Contribuir
Este es un proyecto de aprendizaje personal. Si encuentras bugs o tienes sugerencias:
- Documenta el issue claramente
- Incluye logs y pasos para reproducir
- Propón solución si es posible
📄 Licencia
MIT License - Usar bajo tu propio riesgo
📧 Contacto
Para dudas sobre el código o siguiente fase de desarrollo, consulta conmigo.
Versión actual: 0.1.0 (Semanas 1-2 completadas)
Última actualización: Enero 2026