Skip to content

Repository files navigation

📊 Crypto Trading Strategy System with Backtesting

Python License Status

Sistema profesional de backtesting para estrategias de trading en criptomonedas con arquitectura modular y Machine Learning

CaracterísticasInstalaciónUso RápidoEstrategiasDocumentación


🎯 Descripció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.

✨ Características Principales

  • 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)

📁 Estructura del Proyecto

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

📄 Descripción de Archivos

  • test_strategies.py - Script principal para ejecutar backtests y generar reportes consolidados
  • manager_marketdata.py - Gestión de datos y ejecución de backtesting
  • marketdata.py - Funciones base para obtener datos de mercado
  • indicators.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

🚀 Instalación

Requisitos Previos

  • Python 3.8 o superior
  • pip (gestor de paquetes de Python)

Pasos de Instalación

  1. Clonar el repositorio

    git clone https://github.com/alejandrorodm/Crypto-Strategy-with-Backtesting.git
    cd Crypto-Strategy-with-Backtesting
  2. Instalar dependencias

    pip install -r requirements.txt
  3. Verificar instalación

    python -c "import pandas, openpyxl, sklearn; print('✅ Instalación correcta')"

⚡ Uso Rápido

Ejemplo Básico

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
)

Ejecutar Ejemplo Predefinido

python manager_marketdata.py

🎯 Estrategias Disponibles

1. 📊 Stochastic RSI (stoch_rsi)

Descripció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'

2. 📈 ADX (adx)

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'

3. 🎯 Combinada (combined)

Descripción: Estrategia multi-indicador con confirmaciones múltiples.

Indicadores: ADX, RSI, EMA50, EMA200

Lógica de Compra (TODAS deben cumplirse):

  1. ADX > 25 (tendencia fuerte)
  2. +DI > -DI (tendencia alcista)
  3. RSI cruza sobre 30 (salida de sobreventa)
  4. Precio > EMA50 (confirmación alcista)

Lógica de Venta (CUALQUIERA):

  1. -DI > +DI con ADX > 25 (tendencia bajista)
  2. RSI cruza bajo 70 (salida de sobrecompra)
  3. ADX < 20 (tendencia débil)

Mejor para: Trading conservador, alta precisión

strategy='combined'

4. 🤖 Machine Learning (ml)

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'

📊 Indicadores Técnicos

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

📈 Resultados y Reportes

Archivo Excel Individual

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

Excel Data

Informe Agregado

Se genera un segundo Excel con resumen de todos los activos:

  • Comparación de ganancias por moneda
  • Estadísticas agregadas
  • Ranking de rendimiento

Excel Data Result


🛠️ Uso Avanzado

Comparar Múltiples Estrategias

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
    )

Usar Indicadores Directamente

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')

Crear Estrategia Personalizada

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()

📚 Documentación


⚙️ Configuración

Parámetros Principales

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)
)

Parámetros de Estrategias

ADX Strategy

strategies.strategyADX(
    excelFile='BTC-USDT.xlsx',
    capital=300,
    percentage=0.20,
    adx_threshold=25  # Umbral de ADX para considerar tendencia fuerte
)

Combined Strategy

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
)

ML Strategy

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
)

🧪 Testing y Validación

Backtesting Incluye:

  • 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

Recomendaciones de Testing:

  1. Periodo de prueba: Mínimo 6 meses de datos
  2. Múltiples activos: Probar en BTC, ETH, y altcoins
  3. Diferentes temporalidades: 1hour, 4hour, 1day
  4. Optimización de parámetros: Ajustar según resultados

🤝 Contribuir

¡Las contribuciones son bienvenidas! Para contribuir:

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

Ideas para Contribuir:

  • 🎯 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

📄 Licencia

Este proyecto está bajo la Licencia Apache 2.0. Ver el archivo LICENSE para más detalles.


👨‍💻 Autor

Alejandro Rodríguez Moreno (alejandrorodm)


📞 Soporte

Si tienes preguntas o problemas:

  1. Revisa la documentación
  2. Busca en Issues
  3. Abre un nuevo Issue si es necesario

🗺️ Roadmap

  • 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 ⭐

⬆ Volver arriba

About

Sistema que permite la obtención de precios y aplicación de estrategias como Backtesting a dichos datos.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages