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:
152
README.md
152
README.md
@@ -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)
|
||||
Reference in New Issue
Block a user