Initial commit
This commit is contained in:
315
README.md
Normal file
315
README.md
Normal 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
|
||||
Reference in New Issue
Block a user