Archivos añadidos/actuaizados para comentar el bot con ChatGPT
This commit is contained in:
100
tests/test_optimizer.py
Normal file
100
tests/test_optimizer.py
Normal file
@@ -0,0 +1,100 @@
|
||||
# test_optimizer.py
|
||||
"""
|
||||
Script para probar el optimizador de parámetros
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# Añadir raíz del proyecto al path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from src.utils.logger import log
|
||||
from src.data.storage import StorageManager
|
||||
from src.strategies import MovingAverageCrossover
|
||||
from src.backtest.optimizer import ParameterOptimizer
|
||||
|
||||
def setup_environment():
|
||||
"""Carga variables de entorno"""
|
||||
env_path = Path(__file__).parent.parent / 'config' / 'secrets.env'
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
def test_optimizer():
|
||||
"""
|
||||
Prueba el optimizador con Moving Average Crossover
|
||||
"""
|
||||
log.info("="*70)
|
||||
log.info("🔧 TEST: OPTIMIZADOR DE PARÁMETROS")
|
||||
log.info("="*70)
|
||||
|
||||
# Setup
|
||||
setup_environment()
|
||||
|
||||
# Cargar datos
|
||||
storage = StorageManager(
|
||||
db_host=os.getenv('DB_HOST'),
|
||||
db_port=int(os.getenv('DB_PORT', 5432)),
|
||||
db_name=os.getenv('DB_NAME'),
|
||||
db_user=os.getenv('DB_USER'),
|
||||
db_password=os.getenv('DB_PASSWORD'),
|
||||
)
|
||||
|
||||
log.info("\n📥 Cargando datos...")
|
||||
end_date = datetime.now()
|
||||
start_date = end_date - timedelta(days=60)
|
||||
|
||||
data = storage.load_ohlcv(
|
||||
symbol='BTC/USDT',
|
||||
timeframe='1h',
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
use_cache=False
|
||||
)
|
||||
|
||||
log.success(f"✓ Datos cargados: {len(data)} velas")
|
||||
|
||||
# Crear optimizador
|
||||
log.info("\n🔧 Creando optimizador...")
|
||||
optimizer = ParameterOptimizer(
|
||||
strategy_class=MovingAverageCrossover,
|
||||
data=data,
|
||||
initial_capital=10000,
|
||||
commission=0.001
|
||||
)
|
||||
|
||||
# Definir parámetros a probar (pequeño para empezar)
|
||||
param_grid = {
|
||||
'fast_period': [5, 10, 15],
|
||||
'slow_period': [30, 50],
|
||||
'ma_type': ['sma', 'ema']
|
||||
}
|
||||
|
||||
log.info(f"\n📊 Grid de parámetros:")
|
||||
log.info(f" fast_period: {param_grid['fast_period']}")
|
||||
log.info(f" slow_period: {param_grid['slow_period']}")
|
||||
log.info(f" ma_type: {param_grid['ma_type']}")
|
||||
log.info(f" Total combinaciones: {3 * 2 * 2} = 12")
|
||||
|
||||
# Optimizar
|
||||
log.info("\n🚀 Iniciando optimización...")
|
||||
results_df = optimizer.optimize(param_grid)
|
||||
|
||||
# Mostrar resultados
|
||||
log.info("\n📊 RESULTADOS COMPLETOS:")
|
||||
print(results_df.to_string(index=False))
|
||||
|
||||
# Mejores parámetros
|
||||
log.info("\n🏆 ANÁLISIS:")
|
||||
best_params = optimizer.get_best_params(metric='sharpe_ratio')
|
||||
|
||||
# Guardar resultados (OPCIONAL - ya se guarda por defecto)
|
||||
optimizer.save_results()
|
||||
|
||||
storage.close()
|
||||
|
||||
log.success("\n✅ TEST COMPLETADO")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_optimizer()
|
||||
96
tests/test_visualizer.py
Normal file
96
tests/test_visualizer.py
Normal file
@@ -0,0 +1,96 @@
|
||||
# test_visualizer.py
|
||||
"""
|
||||
Script para probar las visualizaciones
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# Añadir raíz del proyecto al path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from src.utils.logger import log
|
||||
from src.data.storage import StorageManager
|
||||
from src.strategies import MovingAverageCrossover
|
||||
from src.backtest import BacktestEngine
|
||||
from src.backtest.visualizer import BacktestVisualizer
|
||||
|
||||
def setup_environment():
|
||||
"""Carga variables de entorno"""
|
||||
env_path = Path(__file__).parent.parent / 'config' / 'secrets.env'
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
def test_visualizer():
|
||||
"""
|
||||
Prueba las visualizaciones con un backtest
|
||||
"""
|
||||
log.info("="*70)
|
||||
log.info("📊 TEST: VISUALIZACIONES")
|
||||
log.info("="*70)
|
||||
|
||||
# Setup
|
||||
setup_environment()
|
||||
|
||||
# Cargar datos
|
||||
storage = StorageManager(
|
||||
db_host=os.getenv('DB_HOST'),
|
||||
db_port=int(os.getenv('DB_PORT', 5432)),
|
||||
db_name=os.getenv('DB_NAME'),
|
||||
db_user=os.getenv('DB_USER'),
|
||||
db_password=os.getenv('DB_PASSWORD'),
|
||||
)
|
||||
|
||||
log.info("\n📥 Cargando datos...")
|
||||
end_date = datetime.now()
|
||||
start_date = end_date - timedelta(days=60)
|
||||
|
||||
data = storage.load_ohlcv(
|
||||
symbol='BTC/USDT',
|
||||
timeframe='1h',
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
use_cache=False
|
||||
)
|
||||
|
||||
log.success(f"✓ Datos cargados: {len(data)} velas")
|
||||
|
||||
# Ejecutar backtest
|
||||
log.info("\n🧪 Ejecutando backtest...")
|
||||
strategy = MovingAverageCrossover(fast_period=15, slow_period=50, ma_type='sma')
|
||||
|
||||
engine = BacktestEngine(
|
||||
strategy=strategy,
|
||||
initial_capital=10000,
|
||||
commission=0.001,
|
||||
position_size=0.95
|
||||
)
|
||||
|
||||
results = engine.run(data)
|
||||
|
||||
log.info(f" Retorno: {results['total_return_pct']:.2f}%")
|
||||
log.info(f" Trades: {results['total_trades']}")
|
||||
|
||||
# Crear visualizador
|
||||
log.info("\n📊 Generando visualizaciones...")
|
||||
viz = BacktestVisualizer(results, data)
|
||||
|
||||
# Generar todos los gráficos
|
||||
viz.generate_all_plots('backtest_results')
|
||||
|
||||
log.info("\n💡 Los gráficos se guardaron en: backtest_results/")
|
||||
log.info(" Archivos generados:")
|
||||
log.info(" - equity_curve.png")
|
||||
log.info(" - drawdown.png")
|
||||
log.info(" - returns_distribution.png")
|
||||
log.info(" - trades_chart.png")
|
||||
log.info(" - dashboard.png")
|
||||
|
||||
storage.close()
|
||||
|
||||
log.success("\n✅ TEST COMPLETADO")
|
||||
log.info("\n👀 Abre la carpeta 'backtest_results/' para ver los gráficos")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_visualizer()
|
||||
Reference in New Issue
Block a user