Team Ai
Apppublic

diegobeyl/backtesting

sourceHugging Faceupdated 9mo agoView on Hugging Face
2likes
debug_trailing_stop.py117 linesDownload Raw Back to debug
1"""
2Script de debug para verificar por qué no se actualizan los stops
3"""
4
5import sys
6import os
7sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backtesting_app', 'backtesting_app'))
8
9from datetime import datetime, timedelta
10import pandas as pd
11
12print("=" * 80)
13print("DEBUG: Trailing Stop Updates")
14print("=" * 80)
15print()
16
17# Simular un escenario
18print("ESCENARIO SIMULADO:")
19print()
20print("Trade LONG entra en barra 5:")
21print("  Entry price: $25")
22print("  Initial SL (soporte): $23")
23print("  _current_sl: $23")
24print()
25
26print("Barra 6:")
27print("  state.support = $24  (subió)")
28print("  Condición: $24 > $23?  → SÍ")
29print("  Acción: pos.sl_updates.append($24), _current_sl = $24")
30print("  Resultado: 1 SL Update ✅")
31print()
32
33print("Barra 7:")
34print("  state.support = $25  (subió más)")
35print("  Condición: $25 > $24?  → SÍ")
36print("  Acción: pos.sl_updates.append($25), _current_sl = $25")
37print("  Resultado: 2 SL Updates ✅")
38print()
39
40print("=" * 80)
41print("POSIBLES CAUSAS DEL BUG:")
42print("=" * 80)
43print()
44
45print("CAUSA 1: state.support es None")
46print("-" * 70)
47print("Si el algoritmo FAST no está calculando soporte correctamente,")
48print("state.support podría ser None en muchas barras.")
49print()
50print("Código actual:")
51print("  if state.support is not None:")
52print("      new_sl = state.support")
53print("      if new_sl > self._current_sl:")
54print("          pos.sl_updates.append(new_sl)")
55print()
56print("Si state.support = None → no entra al if → no actualiza")
57print()
58
59print("CAUSA 2: state.support NO cambia entre barras")
60print("-" * 70)
61print("El algoritmo podría estar devolviendo el mismo valor de soporte")
62print("en múltiples barras consecutivas.")
63print()
64print("Ejemplo:")
65print("  Barra 5: state.support = $23")
66print("  Barra 6: state.support = $23  (no cambió)")
67print("  Barra 7: state.support = $23  (no cambió)")
68print()
69print("Condición: $23 > $23?  → NO")
70print("Resultado: 0 SL Updates")
71print()
72
73print("CAUSA 3: El gráfico muestra línea interpolada")
74print("-" * 70)
75print("El gráfico podría estar interpolando entre valores,")
76print("mostrando una línea suave cuando en realidad los valores")
77print("son constantes.")
78print()
79print("Plotly por defecto conecta puntos con líneas, creando")
80print("la ilusión de que el soporte está subiendo gradualmente.")
81print()
82
83print("=" * 80)
84print("SOLUCIÓN: AGREGAR DEBUG AL BACKTESTER")
85print("=" * 80)
86print()
87print("Voy a modificar _update_position para imprimir debug info:")
88print()
89print("def _update_position(...):")
90print("    if pos.direction == 'LONG':")
91print("        print(f'Barra {bar_index}: support={state.support}, current_sl={self._current_sl}')")
92print("        if state.support is not None:")
93print("            new_sl = state.support")
94print("            if new_sl > self._current_sl:")
95print("                print(f'  → Actualizando SL de {self._current_sl} a {new_sl}')")
96print("                pos.sl_updates.append(new_sl)")
97print("            else:")
98print("                print(f'  → No actualiza: {new_sl} <= {self._current_sl}')")
99print()
100
101print("=" * 80)
102print("VERIFICACIÓN INMEDIATA")
103print("=" * 80)
104print()
105print("Para verificar ahora mismo, necesito:")
106print()
107print("1. Ver los primeros 10 valores de state.support del algoritmo")
108print("2. Ver si cambian entre barras o son constantes")
109print()
110print("¿Puedes hacer zoom en el gráfico en la zona del primer trade?")
111print("Específicamente en las barras alrededor de 2016-09-01")
112print()
113print("Mira si la línea verde:")
114print("  a) Sube gradualmente (smooth) → interpolación visual")
115print("  b) Sube en escalones (step) → valores reales cambiando")
116print()
117