Initial commit

This commit is contained in:
DaM
2026-01-26 18:57:42 +01:00
commit dcffd9dfad
23 changed files with 1639 additions and 0 deletions

315
README.md Normal file
View File

@@ -0,0 +1,315 @@
# 🤖 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](#requisitos)
- [Instalación](#instalación)
- [Configuración](#configuración)
- [Uso](#uso)
- [Estructura del Proyecto](#estructura-del-proyecto)
- [Testing](#testing)
- [Próximos Pasos](#próximos-pasos)
## 🔧 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
```bash
git clone <tu-repositorio>
cd trading-bot
```
### 2. Crear entorno virtual
```bash
python -m venv venv
# En Linux/Mac:
source venv/bin/activate
# En Windows:
venv\Scripts\activate
```
### 3. Instalar dependencias
```bash
pip install --upgrade pip
pip install -r requirements.txt
```
### 4. Instalar PostgreSQL
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
```
**macOS (con Homebrew):**
```bash
brew install postgresql
brew services start postgresql
```
**Windows:**
Descargar instalador desde [postgresql.org](https://www.postgresql.org/download/windows/)
### 5. Configurar base de datos
```bash
# 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:**
```bash
sudo apt install redis-server
sudo systemctl start redis
```
**macOS:**
```bash
brew install redis
brew services start redis
```
**Windows:**
Descargar desde [redis.io](https://redis.io/download) o usar WSL
## ⚙️ Configuración
### 1. Copiar archivo de configuración
```bash
cp .env.example .env
```
### 2. Editar `.env` con tus credenciales
```bash
# 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:
```yaml
trading:
symbols:
- BTC/USDT
- ETH/USDT
timeframes:
- 1h
- 4h
```
## 🚀 Uso
### Ejecutar demo completo
```bash
python main.py
```
Este comando ejecutará el pipeline completo:
1. Conexión al exchange (Binance por defecto)
2. Descarga de datos históricos
3. Procesamiento y limpieza
4. Almacenamiento en PostgreSQL
5. Verificación de datos
### Uso programático
```python
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
```bash
pytest tests/ -v
```
### Ejecutar tests con cobertura
```bash
pytest tests/ --cov=src --cov-report=html
```
### Ejecutar test específico
```bash
pytest tests/test_data.py::TestDataProcessor::test_clean_data_removes_duplicates -v
```
## 📊 Funcionalidades Implementadas
### ✅ Completado (Semanas 1-2)
- [x] Sistema de logging robusto
- [x] Conexión a exchanges vía CCXT
- [x] Descarga de datos históricos
- [x] Descarga incremental (continuar desde último timestamp)
- [x] Procesamiento y limpieza de datos
- [x] Detección de gaps y outliers
- [x] Resampleo de timeframes
- [x] Cálculo de retornos
- [x] Almacenamiento en PostgreSQL
- [x] Caché con Redis
- [x] Tests unitarios
- [x] 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:**
```bash
# 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:**
```bash
# 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:
1. Backtesting exhaustivo (mínimo 3-5 años)
2. Paper trading extensivo (varios meses)
3. Gestión de riesgo robusta
4. Comprensión completa del código
## 🤝 Contribuir
Este es un proyecto de aprendizaje personal. Si encuentras bugs o tienes sugerencias:
1. Documenta el issue claramente
2. Incluye logs y pasos para reproducir
3. 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