Team Ai
Apppublic

diegobeyl/backtesting

sourceHugging Faceupdated 9mo agoView on Hugging Face
2likes
test_timeframe_validation.py79 linesDownload Raw Back to tests
1#!/usr/bin/env python32"""3Test rápido para validar que el timeframe validator funciona correctamente4Prueba los límites que el usuario mencionó:5- 1h → máximo 1 mes6- 4h → máximo 3 meses  7- 1d → máximo 10 años8"""9 10from datetime import datetime, timedelta11from backtesting_app.core.validator import DataValidator, LIMIT_DESCRIPTIONS12 13print("=" * 80)14print("TEST DE VALIDACIÓN DE TIMEFRAME Y PERÍODO")15print("=" * 80)16 17test_cases = [18    # (symbol, timeframe, días, debería_pasar, descripción)19    ('BTC-USDT', '1h', 30, True, "1h por 1 mes - DEBERÍA PASAR"),20    ('BTC-USDT', '1h', 90, True, "1h por 3 meses - DEBERÍA PASAR"),21    ('BTC-USDT', '1h', 180, True, "1h por 6 meses - DEBERÍA PASAR"),22    ('BTC-USDT', '1h', 365, True, "1h por 1 año - DEBERÍA PASAR"),23    ('BTC-USDT', '1h', 365*2, True, "1h por 2 años - DEBERÍA PASAR"),24    ('BTC-USDT', '1h', 365*3, True, "1h por 3 años - DEBERÍA PASAR (LÍMITE)"),25    ('BTC-USDT', '1h', 365*4, False, "1h por 4 años - DEBERÍA FALLAR ❌"),26    ('BTC-USDT', '1h', 365*10, False, "1h por 10 años - DEBERÍA FALLAR ❌"),27    28    ('BTC-USDT', '4h', 90, True, "4h por 3 meses - DEBERÍA PASAR"),29    ('BTC-USDT', '4h', 365*3, True, "4h por 3 años - DEBERÍA PASAR"),30    ('BTC-USDT', '4h', 365*10, True, "4h por 10 años - DEBERÍA PASAR (LÍMITE)"),31    ('BTC-USDT', '4h', 365*11, False, "4h por 11 años - DEBERÍA FALLAR ❌"),32    33    ('BTC-USDT', '1d', 365*50, True, "1d por 50 años - DEBERÍA PASAR"),34]35 36passed = 037failed = 038 39for symbol, timeframe, days, should_pass, description in test_cases:40    start = datetime.now() - timedelta(days=days)41    end = datetime.now()42    43    is_valid, error = DataValidator.validate_request(symbol, timeframe, start, end)44    45    # Verificar que el resultado sea el esperado46    success = is_valid == should_pass47    48    status = "✅ PASS" if success else "❌ FAIL"49    passed += success50    failed += not success51    52    print(f"\n{status}: {description}")53    print(f"       Resultado: {'VÁLIDO ✅' if is_valid else 'INVÁLIDO ❌'}")54    55    if not success:56        print(f"       ⚠️  Se esperaba: {'VÁLIDO' if should_pass else 'INVÁLIDO'}")57    58    # Mostrar información del validador59    info = DataValidator.get_download_info(symbol, timeframe, start, end)60    print(f"       Días: {info['days']}, Años: {info['years']}, Velas: {info['candles']:,}/{info['max_candles']:,} ({info['usage_percent']:.1f}%)")61 62print("\n" + "=" * 80)63print(f"RESUMEN: {passed} PASADOS, {failed} FALLIDOS")64print("=" * 80)65 66if failed == 0:67    print("✅ ¡TODOS LOS TESTS PASARON!")68else:69    print(f"❌ {failed} tests fallaron")70 71# Mostrar límites configurados72print("\n" + "=" * 80)73print("LÍMITES CONFIGURADOS POR TIMEFRAME:")74print("=" * 80)75for tf in ['1m', '5m', '15m', '30m', '1h', '4h', '1d', '1wk', '1mo']:76    desc = LIMIT_DESCRIPTIONS.get(tf, {})77    max_days = desc.get('max_days', 'N/A')78    print(f"  {tf:5} → máximo {max_days:6.0f} días ({max_days/365:.1f} años) - {desc.get('reason', 'N/A')}")79