Sistema profesional de backtesting para estrategias de trading en criptomonedas con arquitectura modular y Machine Learning
Características • Instalación • Uso Rápido • Estrategias • Documentación
Sistema avanzado de backtesting que permite obtener datos históricos de criptomonedas de KuCoin, aplicar múltiples estrategias de trading (incluyendo Machine Learning), y evaluar resultados con reportes detallados en Excel. Diseñado con arquitectura modular para facilitar la extensión y mantenimiento.
- ⚡ Obtención rápida de datos mediante sistema multihilo optimizado
- 🎯 4 estrategias de trading listas para usar (Stochastic RSI, ADX, Combinada, ML)
- 🧠 Machine Learning con Random Forest para predicción de precios
- 📊 Indicadores técnicos profesionales (RSI, MACD, ADX, Bollinger Bands, EMAs)
- 🏗️ Arquitectura modular para fácil extensión
- 📈 Backtesting completo con comisiones, slippage y métricas detalladas
- 📑 Reportes Excel con señales visuales y estadísticas
- 🔄 Soporte para Spot y Futuros (spot implementado completamente)
Crypto-Strategy-with-Backtesting/
│
├── 🎯 test_strategies.py # Script principal - Ejecutar backtests y generar reportes
├── 🔧 manager_marketdata.py # Gestor de datos y ejecución de estrategias
├── 📊 marketdata.py # Obtención de datos de KuCoin API
├── 📈 indicators.py # Módulo de indicadores técnicos
├── 🎲 strategies.py # Módulo de estrategias de trading
├── 📉 graph.py # Utilidades para gráficos
│
├── 📝 README.md # Este archivo
├── 📖 GUIA_RAPIDA.md # Guía de inicio rápido
├── 🏗️ ESTRUCTURA_MODULAR.md # Documentación de arquitectura
│
├── 📦 requirements.txt # Dependencias del proyecto
└── 📂 results/ # Resultados de backtesting organizados por moneda
├── BTC/
│ └── Report_BTC_1hour_ADX_101224_101225/
│ └── BTC-USDT.1hour.10-12-2024.10-12-2025.xlsx
├── ETH/
└── Report_HH_MM_DD_MM_YYYY.xlsx # Reporte consolidado
test_strategies.py- Script principal para ejecutar backtests y generar reportes consolidadosmanager_marketdata.py- Gestión de datos y ejecución de backtestingmarketdata.py- Funciones base para obtener datos de mercadoindicators.py- Todos los indicadores técnicos (RSI, ADX, StochRSI, EMA, MACD)strategies.py- Todas las estrategias de trading (StochRSI, ADX, ML, Combined)graph.py- Utilidades para gráficos
- Python 3.8 o superior
- pip (gestor de paquetes de Python)
-
Clonar el repositorio
git clone https://github.com/alejandrorodm/Crypto-Strategy-with-Backtesting.git cd Crypto-Strategy-with-Backtesting -
Instalar dependencias
pip install -r requirements.txt
-
Verificar instalación
python -c "import pandas, openpyxl, sklearn; print('✅ Instalación correcta')"
from manager_marketdata import dataWithReport
# Ejecutar backtesting con estrategia ADX
dataWithReport(
coins=['BTC-USDT'], # Criptomonedas a analizar
temporality='4hour', # Temporalidad de velas
startDate=[2024, 1, 1, 0, 0, 0], # Fecha inicio
endDate=[2024, 6, 30, 0, 0, 0], # Fecha fin
capital=300, # Capital inicial
percentage=0.20, # 20% del capital por operación
spot=True, # Trading spot
strategy='adx' # Estrategia a usar
)python manager_marketdata.pyDescripción: Estrategia basada en cruces del RSI Estocástico.
Indicadores: Stochastic RSI, EMA50
Lógica:
- 🟢 Compra: %K cruza por encima de %D cuando %K < 20
- 🔴 Venta: %K cruza por debajo de %D cuando %K > 80
Mejor para: Mercados con momentum, movimientos rápidos
strategy='stoch_rsi'Descripción: Estrategia basada en fuerza y dirección de tendencia.
Indicadores: ADX, +DI, -DI, EMA50, EMA200
Lógica:
- 🟢 Compra: +DI cruza sobre -DI con ADX > 25 (tendencia fuerte)
- 🔴 Venta: -DI cruza sobre +DI con ADX > 25
Mejor para: Mercados con tendencias fuertes
strategy='adx'Descripción: Estrategia multi-indicador con confirmaciones múltiples.
Indicadores: ADX, RSI, EMA50, EMA200
Lógica de Compra (TODAS deben cumplirse):
- ADX > 25 (tendencia fuerte)
- +DI > -DI (tendencia alcista)
- RSI cruza sobre 30 (salida de sobreventa)
- Precio > EMA50 (confirmación alcista)
Lógica de Venta (CUALQUIERA):
- -DI > +DI con ADX > 25 (tendencia bajista)
- RSI cruza bajo 70 (salida de sobrecompra)
- ADX < 20 (tendencia débil)
Mejor para: Trading conservador, alta precisión
strategy='combined'Descripción: Predicción de dirección de precio usando Random Forest.
Indicadores: RSI, MACD, ADX, +DI, -DI, EMA50, Volume
Características:
- 🧠 Modelo: Random Forest (100 árboles)
- 📊 Features: 7 indicadores técnicos
- 🎯 Target: Dirección del precio (subida/bajada/estable)
- 📈 Train/Test Split: 70/30 por defecto
- ✅ Métricas: Accuracy del modelo incluida
Lógica:
- 🟢 Compra: Modelo predice subida > 0.5%
- 🔴 Venta: Modelo predice bajada > 0.5%
- ⚪ Hold: Modelo predice estabilidad
Mejor para: Análisis de patrones complejos, datos históricos extensos
strategy='ml'El sistema incluye los siguientes indicadores profesionales:
| Indicador | Descripción | Parámetros |
|---|---|---|
| RSI | Relative Strength Index | rsi_length=14 |
| ADX | Average Directional Index | period=14 |
| MACD | Moving Average Convergence Divergence | short=12, long=26, signal=9 |
| Stochastic RSI | RSI Estocástico | smooth_k=3, smooth_d=3 |
| EMAs | Exponential Moving Averages | periods=[50, 200] |
| Bollinger Bands | Bandas de Bollinger | window=20, std=2 |
Cada backtesting genera un archivo Excel con:
- 📗 Filas verdes: Señales de compra
- 🟧 Filas naranjas: Señales de venta
- 📊 Columnas: Timestamp, OHLCV, Indicadores, Señales, Capital, Posición, Ganancia
Cabecera incluye:
- Capital inicial y final
- Ganancia total (%)
- Número de operaciones
- Operaciones positivas/negativas
- Parámetros de la estrategia
Se genera un segundo Excel con resumen de todos los activos:
- Comparación de ganancias por moneda
- Estadísticas agregadas
- Ranking de rendimiento
strategies = ['stoch_rsi', 'adx', 'combined', 'ml']
for strat in strategies:
print(f"\n{'='*50}")
print(f"Testeando: {strat}")
print(f"{'='*50}\n")
dataWithReport(
coins=['BTC-USDT'],
temporality='4hour',
startDate=[2024, 1, 1, 0, 0, 0],
endDate=[2024, 6, 30, 0, 0, 0],
capital=300,
percentage=0.20,
spot=True,
strategy=strat
)import indicators
# Agregar indicadores a un archivo Excel existente
indicators.addRSI('BTC-USDT.xlsx', rsi_length=14)
indicators.addADX('BTC-USDT.xlsx', period=14)
indicators.addEMAs([50, 200], 'BTC-USDT.xlsx')
indicators.addMACD('BTC-USDT.xlsx')from strategies import BaseStrategy
class MiEstrategia(BaseStrategy):
def get_required_columns(self):
return ['RSI', 'EMA_Close_50', 'Close']
def generate_signals(self, df):
df['Signal'] = 0
for i in range(1, len(df)):
# Tu lógica aquí
if df.loc[i, 'RSI'] < 30 and df.loc[i, 'Close'] > df.loc[i, 'EMA_Close_50']:
df.loc[i, 'Signal'] = 1 # Compra
elif df.loc[i, 'RSI'] > 70:
df.loc[i, 'Signal'] = -1 # Venta
return df
# Usar tu estrategia
strategy = MiEstrategia('BTC-USDT.xlsx', capital=300)
resultado = strategy.backtest()- 📖 GUIA_RAPIDA.md - Guía de inicio rápido en español
- 🏗️ ESTRUCTURA_MODULAR.md - Arquitectura del sistema y cómo extenderlo
dataWithReport(
coins=['BTC-USDT', 'ETH-USDT'], # Lista de pares de trading
temporality='4hour', # 1min, 5min, 15min, 1hour, 4hour, 8hour, 1day, 1week, 1month
startDate=[2024, 1, 1, 0, 0, 0], # [año, mes, día, hora, minuto, segundo]
endDate=[2024, 6, 30, 0, 0, 0], # [año, mes, día, hora, minuto, segundo]
time_division='full', # 'full', 'yearly', 'monthly', 'weekly', 'daily'
capital=300, # Capital inicial en USDT
percentage=0.20, # Porcentaje del capital por operación (0.20 = 20%)
spot=True, # True para spot, False para futuros
strategy='adx', # 'stoch_rsi', 'adx', 'combined', 'ml'
leverage=5 # Solo para futuros (ignorado en spot)
)strategies.strategyADX(
excelFile='BTC-USDT.xlsx',
capital=300,
percentage=0.20,
adx_threshold=25 # Umbral de ADX para considerar tendencia fuerte
)strategies.strategyCombined(
excelFile='BTC-USDT.xlsx',
capital=300,
percentage=0.20,
adx_threshold=25,
rsi_oversold=30, # Nivel de sobreventa
rsi_overbought=70 # Nivel de sobrecompra
)strategies.strategyML(
excelFile='BTC-USDT.xlsx',
capital=300,
percentage=0.20,
train_size=0.7, # 70% para entrenamiento
price_change_threshold=0.005 # 0.5% cambio mínimo
)- ✅ Comisiones: 0.05% por operación (configurable)
- ✅ Slippage: Simulación de deslizamiento de precio
- ✅ Gestión de capital: Control de posiciones y capital disponible
- ✅ Métricas detalladas: Win rate, número de operaciones, ganancia total
- ✅ Validación de datos: Verificación de indicadores requeridos
- Periodo de prueba: Mínimo 6 meses de datos
- Múltiples activos: Probar en BTC, ETH, y altcoins
- Diferentes temporalidades: 1hour, 4hour, 1day
- Optimización de parámetros: Ajustar según resultados
¡Las contribuciones son bienvenidas! Para contribuir:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- 🎯 Nuevas estrategias de trading
- 📊 Nuevos indicadores técnicos
- 🤖 Mejoras en el modelo de ML
- 📈 Visualizaciones y gráficos
- 📝 Documentación y ejemplos
- 🐛 Corrección de bugs
Este proyecto está bajo la Licencia Apache 2.0. Ver el archivo LICENSE para más detalles.
Alejandro Rodríguez Moreno (alejandrorodm)
- GitHub: @alejandrorodm
Si tienes preguntas o problemas:
- Revisa la documentación
- Busca en Issues
- Abre un nuevo Issue si es necesario
- Interfaz gráfica (GUI)
- Trading en vivo (paper trading)
- Más estrategias de ML (LSTM, XGBoost)
- Optimización automática de parámetros
- Soporte para más exchanges
- Dashboard web interactivo
- Alertas y notificaciones
- Backtesting con múltiples activos simultáneos
⭐ Si este proyecto te resulta útil, considera darle una estrella ⭐

