feat: Backtesting engine completo + documentación (Semanas 3-4)

 Motor de backtesting:
- BacktestEngine con simulación de trades
- Sistema de Trade y Position
- Gestión de capital y comisiones
- Slippage simulado

 Estrategias implementadas:
- MovingAverageCrossover (SMA/EMA configurable)
- RSIStrategy (umbrales personalizables)
- BuyAndHold (baseline)

 Métricas de performance:
- Sharpe Ratio, Sortino Ratio, Calmar Ratio
- Max Drawdown, Win Rate, Profit Factor
- Expectancy, Risk/Reward Ratio

 Scripts:
- backtest.py: Ejecutar backtests individuales
- backtest.py compare: Comparar múltiples estrategias

 Documentación:
- README actualizado con sección de backtesting
- Ejemplos de uso programático
- Estructura de proyecto actualizada
This commit is contained in:
DaM
2026-01-27 21:37:39 +01:00
parent 0522ea17ca
commit 9b34de3127
14 changed files with 2020 additions and 20 deletions

152
README.md
View File

@@ -18,8 +18,9 @@ Bot de trading algorítmico desarrollado desde cero con Python, PostgreSQL y Mac
## 🎯 Estado del Proyecto
### ✅ Completado (Semanas 1-2)
### ✅ Completado (Semanas 1-2 y 3-4)
**Semanas 1-2: Infraestructura de Datos**
- ✅ Sistema de logging robusto con rotación de archivos
- ✅ Conexión a exchanges vía CCXT (Binance por defecto)
- ✅ Descarga de datos históricos con reintentos automáticos
@@ -35,6 +36,23 @@ Bot de trading algorítmico desarrollado desde cero con Python, PostgreSQL y Mac
- ✅ Tests unitarios
- ✅ Manejo de errores y reintentos
**Semanas 3-4: Backtesting Engine**
- ✅ Motor de backtesting completo
- ✅ Clase base abstracta para estrategias
- ✅ Sistema de trades y posiciones
- ✅ 3 estrategias implementadas:
- Moving Average Crossover (SMA/EMA)
- RSI Strategy
- Buy & Hold (baseline)
- ✅ Métricas de performance:
- Sharpe Ratio, Sortino Ratio
- Max Drawdown, Calmar Ratio
- Win Rate, Profit Factor
- Expectancy, Risk/Reward
- ✅ Script de comparación de estrategias
- ✅ Simulación de comisiones y slippage
- ✅ Gestión de capital y position sizing
**Datos descargados actualmente:**
- 5 criptomonedas (BTC, ETH, BNB, SOL, XRP)
- 3 timeframes (1h, 4h, 1d)
@@ -43,9 +61,9 @@ Bot de trading algorítmico desarrollado desde cero con Python, PostgreSQL y Mac
### 🔄 En Progreso
-Backtesting Engine (Semanas 3-4)
-Estrategias de trading (Semanas 5-8)
- ⏳ Machine Learning (Semanas 5-8)
-Optimización de parámetros (en desarrollo)
-Visualizaciones de resultados (en desarrollo)
- ⏳ Machine Learning (Semanas 5-8 planificadas)
### 📅 Planificado
@@ -281,8 +299,33 @@ timeframes = ['1h', '4h', '1d']
days_back = 120 # Cambia aquí
```
### Backtesting
**Ejecutar backtest simple:**
```bash
python backtest.py
```
Esto ejecuta un backtest con:
- Estrategia: Moving Average Crossover (10/30)
- Símbolo: BTC/USDT
- Periodo: 60 días
- Capital inicial: $10,000
**Comparar múltiples estrategias:**
```bash
python backtest.py compare
```
Compara 4 estrategias diferentes:
- Buy & Hold
- MA Cross (10/30 SMA)
- MA Cross (20/50 EMA)
- RSI (30/70)
### Uso programático
**Pipeline de datos:**
```python
from src.data.fetcher import DataFetcher
from src.data.processor import DataProcessor
@@ -304,6 +347,34 @@ df_clean = processor.calculate_returns(df_clean)
storage.save_ohlcv(df_clean)
```
**Backtesting:**
```python
from src.data.storage import StorageManager
from src.backtest import BacktestEngine
from src.strategies import MovingAverageCrossover
# Cargar datos
storage = StorageManager(...)
data = storage.load_ohlcv('BTC/USDT', '1h')
# Crear estrategia
strategy = MovingAverageCrossover(fast_period=10, slow_period=30)
# Ejecutar backtest
engine = BacktestEngine(
strategy=strategy,
initial_capital=10000,
commission=0.001,
position_size=0.95
)
results = engine.run(data)
# Ver resultados
from src.backtest.metrics import print_backtest_report
print_backtest_report(results)
```
## 📁 Estructura del Proyecto
```
@@ -313,17 +384,32 @@ trading-bot/
│ └── secrets.env # Credenciales (NO subir a git)
├── src/ # Código fuente
│ ├── backtest/ # Motor de backtesting
│ │ ├── __init__.py
│ │ ├── engine.py # BacktestEngine
│ │ ├── strategy.py # Clase base Strategy
│ │ ├── trade.py # Trade, Position
│ │ └── metrics.py # Métricas de performance
│ │
│ ├── strategies/ # Estrategias de trading
│ │ ├── __init__.py
│ │ ├── moving_average.py # MA Crossover
│ │ ├── rsi_strategy.py # RSI Strategy
│ │ ├── buy_and_hold.py # Buy & Hold
│ │ ├── base.py # (futuro)
│ │ ├── ml_model.py # (futuro)
│ │ └── signals.py # (futuro)
│ │
│ ├── data/ # Módulo de datos
│ │ ├── __init__.py
│ │ ├── fetcher.py # Descarga desde exchanges
│ │ ├── processor.py # Limpieza y procesamiento
│ │ └── storage.py # PostgreSQL + Redis
│ │
│ ├── backtest/ # Motor de backtesting (próximo)
│ ├── strategies/ # Estrategias de trading (próximo)
│ ├── ml/ # Machine Learning (futuro)
│ └── utils/ # Utilidades
── logger.py # Sistema de logging
── __init__.py
│ ├── logger.py # Sistema de logging
│ └── alerts.py # (futuro)
├── tests/ # Tests unitarios
│ └── test_data.py
@@ -338,6 +424,7 @@ trading-bot/
├── main.py # Demo/testing
├── download_data.py # Descarga masiva
├── backtest.py # Backtesting runner
├── requirements.txt # Dependencias
├── .gitignore
└── README.md
@@ -488,6 +575,23 @@ python download_data.py
- Manejo de errores robusto
- Resumen final con estadísticas
### `backtest.py` - Backtesting
```bash
# Backtest simple
python backtest.py
# Comparar estrategias
python backtest.py compare
```
**Uso:** Evaluar estrategias sobre datos históricos
**Características:**
- Simulación de comisiones y slippage
- Métricas detalladas de performance
- Comparación de múltiples estrategias
- Informe completo de resultados
## 🧪 Testing
### Ejecutar todos los tests
@@ -511,29 +615,36 @@ pytest tests/test_data.py::TestDataProcessor::test_clean_data_removes_duplicates
## 🗺️ Roadmap
### ✅ Fase 1: Infraestructura de Datos (COMPLETADO)
### ✅ Fase 1: Infraestructura de Datos (COMPLETADO - Semanas 1-2)
- Sistema de descarga robusto
- Almacenamiento optimizado
- Procesamiento de datos
### 🔄 Fase 2: Backtesting (PRÓXIMO - Semanas 3-4)
### Fase 2: Backtesting (COMPLETADO - Semanas 3-4)
- Motor de backtesting
- Estrategia simple (moving average crossover)
- 3 estrategias implementadas
- Métricas de performance
- Visualizaciones
- Sistema de comparación
### 📅 Fase 3: Estrategias Avanzadas (Semanas 5-8)
- Indicadores técnicos
### 🔄 Fase 3: Optimización y Visualización (EN PROGRESO)
- Optimización de parámetros (grid search)
- Visualizaciones de resultados
- Gráficos de equity curve
- Walk-forward analysis
### 📅 Fase 4: Estrategias Avanzadas (Semanas 5-8)
- Indicadores técnicos avanzados
- Machine Learning básico
- Optimización de parámetros
- Feature engineering
- Optimización con validación
### 📅 Fase 4: Trading Real (Semanas 9-12)
### 📅 Fase 5: Trading Real (Semanas 9-12)
- Paper trading
- Gestión de riesgo
- Gestión de riesgo avanzada
- Ejecución de órdenes
- Monitoreo en tiempo real
### 📅 Fase 5: Producción (Futuro)
### 📅 Fase 6: Producción (Futuro)
- Dashboard web
- Alertas y notificaciones
- Multi-exchange
@@ -646,8 +757,9 @@ Para dudas sobre el código o siguientes fases de desarrollo, consulta conmigo.
---
**Versión actual:** 0.2.0 (Semanas 1-2 completadas, Semanas 3-4 en preparación)
**Versión actual:** 0.3.0 (Semanas 1-4 completadas)
**Última actualización:** Enero 2026
**Python:** 3.12.3
**PostgreSQL:** 16+
**Datos:** 5 símbolos, 3 timeframes, 120 días (~54k registros)
**Datos:** 5 símbolos, 3 timeframes, 120 días (~54k registros)
**Estrategias:** 3 implementadas (MA Cross, RSI, Buy&Hold)