diegobeyl/backtesting
2
1"""
2Script para verificar que los stops coinciden con soporte/resistencia
3"""
4
5import sys
6import os
7sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backtesting_app', 'backtesting_app'))
8
9print("=" * 80)
10print("VERIFICACIÓN: Stop Loss vs Soporte/Resistencia")
11print("=" * 80)
12print()
13
14print("📋 LÓGICA DEL ALGORITMO FAST:")
15print()
16print("1. SEÑAL LONG (compra):")
17print(" - Se genera cuando: rompe resistencia hacia arriba")
18print(" - Stop Loss debe ser: SOPORTE actual")
19print(" - Razón: El soporte es el nivel que protege la posición long")
20print()
21print("2. SEÑAL SHORT (venta):")
22print(" - Se genera cuando: rompe soporte hacia abajo")
23print(" - Stop Loss debe ser: RESISTENCIA actual")
24print(" - Razón: La resistencia es el nivel que protege la posición short")
25print()
26
27print("=" * 80)
28print("CÓDIGO DEL ALGORITMO (fast_ariascampos.py líneas 258-278)")
29print("=" * 80)
30print()
31print("# LONG: cuando rompe resistencia")
32print("if resistenceBroken and tendency_antes == 0 and tendency == 1:")
33print(" signal = TradeSignal(")
34print(" signal_type='LONG',")
35print(" stop_loss=support, ← CORRECTO: usa soporte")
36print(" )")
37print()
38print("# SHORT: cuando rompe soporte")
39print("if supportBroken and tendency_antes == 1 and tendency == 0:")
40print(" signal = TradeSignal(")
41print(" signal_type='SHORT',")
42print(" stop_loss=resistence, ← CORRECTO: usa resistencia")
43print(" )")
44print()
45
46print("=" * 80)
47print("¿POR QUÉ PUEDE VERSE INCONGRUENCIA EN EL GRÁFICO?")
48print("=" * 80)
49print()
50
51print("PROBLEMA 1: TIMING - El Stop se toma AL MOMENTO de la señal")
52print("-" * 70)
53print()
54print("El stop loss se captura en la BARRA donde se genera la señal.")
55print("Pero el soporte/resistencia puede CAMBIAR en barras posteriores.")
56print()
57print("Ejemplo:")
58print()
59print("Barra 5: Rompe resistencia en $230")
60print(" Soporte en ese momento: $220")
61print(" → Señal LONG con stop en $220 ✅")
62print()
63print("Barra 6: Precio sube a $240")
64print(" Soporte sube a $225")
65print(" → Stop se actualiza a $225 (trailing)")
66print()
67print("Barra 7: Mirando el gráfico VES soporte en $225")
68print(" Pero el STOP INICIAL era $220")
69print(" → Puede parecer incongruente si miras la línea actual")
70print()
71
72print("PROBLEMA 2: DISPLAY - Tabla muestra 'Stop Inicial'")
73print("-" * 70)
74print()
75print("La tabla de trades muestra:")
76print(" 'Stop Inicial': $220 ← El stop AL ENTRAR")
77print()
78print("Pero el gráfico muestra:")
79print(" Línea verde (soporte) en $225 ← El soporte ACTUAL (barra 7)")
80print()
81print("No coinciden porque son momentos diferentes.")
82print()
83
84print("PROBLEMA 3: LOOKBEHIND - Soporte puede estar barras atrás")
85print("-" * 70)
86print()
87print("Si lookbehind > 0, el soporte puede venir de barras anteriores:")
88print()
89print("Barra 5: Low = $220")
90print("Barra 6: Low = $225")
91print("Barra 7: Low = $230")
92print(" Con lookbehind=2, soporte = min($230, $225, $220) = $220")
93print()
94print("En el gráfico actual (barra 7) el low es $230,")
95print("pero el soporte usado es $220 (de 2 barras atrás).")
96print()
97
98print("=" * 80)
99print("SOLUCIÓN: AGREGAR COLUMNA 'SOPORTE/RESISTENCIA EN ENTRADA'")
100print("=" * 80)
101print()
102print("Para verificar la incongruencia, necesitamos agregar a la tabla:")
103print()
104print("Para LONG:")
105print(" - Stop Inicial: $220")
106print(" - Soporte en entrada: $220 ← Debería coincidir")
107print(" - Entrada: $230")
108print()
109print("Para SHORT:")
110print(" - Stop Inicial: $235")
111print(" - Resistencia en entrada: $235 ← Debería coincidir")
112print(" - Entrada: $225")
113print()
114
115print("=" * 80)
116print("CÓMO VERIFICAR")
117print("=" * 80)
118print()
119print("1. En la tabla de trades, mira:")
120print(" - Fecha Entrada")
121print(" - Stop Inicial")
122print()
123print("2. En el gráfico, busca la fecha de entrada")
124print()
125print("3. Mira qué valor tiene la línea verde/roja EN ESA FECHA")
126print(" - LONG → línea verde (soporte) debe coincidir con Stop Inicial")
127print(" - SHORT → línea roja (resistencia) debe coincidir con Stop Inicial")
128print()
129print("4. Si NO coinciden:")
130print(" - Verifica si hay lookbehind > 0 (mira barras anteriores)")
131print(" - Verifica si la señal se generó en la apertura de la barra")
132print(" - Puede haber un bug en la visualización del gráfico")
133print()
134
135print("=" * 80)
136print("ACCIÓN RECOMENDADA")
137print("=" * 80)
138print()
139print("Comparte:")
140print("1. Una captura de la tabla de trades (primera fila)")
141print("2. Una captura del gráfico en esa fecha específica")
142print("3. Los valores de:")
143print(" - Fecha Entrada")
144print(" - Dirección (LONG/SHORT)")
145print(" - Precio Entrada")
146print(" - Stop Inicial")
147print()
148print("Con esa info podré verificar si hay un bug real o es un problema")
149print("de interpretación del gráfico.")
150print()
151 