> ## Documentation Index
> Fetch the complete documentation index at: https://docs.innova-trading.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Supertrend (Alpha Signals)

> El motor de tendencia basado en ATR que genera las señales automáticas de Alpha Signals — bandas, dirección, cruce, y los bloques de entrada del Builder

## Qué es

**Supertrend** es un indicador de tendencia basado en ATR: dibuja dos bandas alrededor del precio (superior e inferior) que se "pegan" al lado correcto del mercado, y su cruce con el precio marca cambios de dirección. En Innova Trading **no se usa como indicador de estructura suelto** — es el motor que alimenta el sistema de **Alpha Signals** (señales automáticas de entrada/salida con TP1/TP2/TP3 y SL).

<Info>
  El indicador canónico está marcado explícitamente `DO NOT MODIFY` en el código (`backend/services/alpha_indicators/supertrend.py`) — es el motor de producción, no un ajuste libre. Lo que el usuario ve en el chart bajo el nombre **Alpha Signals** es este mismo cálculo.
</Info>

## Parámetros canónicos

| Parámetro | Default | Rango | Qué hace | Cuándo cambiarlo |
| - | - | - | - | - |
| `factor` | **5.0** | 0.1–20 (UI oculto) | Multiplicador del ATR que define qué tan lejos del precio quedan las bandas | Nunca en producción — es el valor optimizado del motor. La UI lo mantiene `hidden: true` |
| `atr_period` | **10** | 1–50 (UI oculto) | Periodo del ATR usado para calcular el ancho de las bandas | Igual que arriba, fijo por diseño |

<Warning>
  En el chart, Supertrend se sigue exponiendo bajo el nombre de indicador **Alpha Signals** (`alpha-signals.definition.ts`) — ese es el motor de producción, con `factor`/`atrPeriod` marcados `hidden: true` en la UI ("valores por defecto optimizados, usar preset avanzado para cambiar"), sin slider visible para tocarlos desde el panel.

  Desde este pase existe además un `supertrend.definition.ts` separado (categoría `trend`, id `supertrend`) con los mismos valores canónicos (`factor=5.0`, `atrPeriod=10`) — pero es **metadata de catálogo/picker únicamente**. No tiene módulo de render propio registrado: montar uno duplicaría el Supertrend que ya dibuja `SupertrendModule` bajo "Alpha Signals". Si en el futuro se quiere una línea Supertrend suelta (sin todo el aparato de señales/TP/SL de Alpha Signals), ese es el punto de partida.
</Warning>

## Cómo se calcula

1. **Fuente (`src`)**: por defecto `HL2 = (high + low) / 2`. En producción, el generador de señales (`SignalGenerator`) le pasa explícitamente `OHLC4` en vez del HL2 por defecto de la clase.

2. **ATR**: True Range clásico (`max(high-low, |high-prevClose|, |low-prevClose|)`) suavizado con el método de Wilder — primer valor es la media simple de los primeros `atr_period` TRs, los siguientes usan `atr[i] = (atr[i-1]*(period-1) + tr[i]) / period`.

3. **Bandas superior e inferior**, con ajuste "sticky" respecto a la barra previa para que no floten libremente:
   ```
   upper = src + factor * ATR
   lower = src - factor * ATR

   lower_band[i] = lower  si (lower > lower_band[i-1]) o (close[i-1] < lower_band[i-1])
                 = lower_band[i-1]  en caso contrario

   upper_band[i] = upper  si (upper < upper_band[i-1]) o (close[i-1] > upper_band[i-1])
                 = upper_band[i-1]  en caso contrario
   ```

4. **Dirección**: arranca en `1` (bullista). Compara el supertrend previo contra la banda superior previa con tolerancia `0.0001` — si coincidían (el mercado venía bajista), la dirección cambia a alcista solo si el cierre actual supera la banda superior; si no coincidían (venía alcista), cambia a bajista solo si el cierre cae debajo de la banda inferior.

5. **Valor Supertrend**: `= lower_band` si la dirección es alcista, `= upper_band` si es bajista — es decir, la línea "salta" de una banda a la otra en cada cambio de dirección.

6. **Señal de cruce**: alcista cuando `close[i] > supertrend[i]` y `close[i-1] <= supertrend[i-1]`; bajista en el caso inverso. Es un método separado del cálculo principal (`detect_crossover`/`detect_crossunder`), no se dispara solo.

## Qué ve el usuario en el chart

El módulo de renderizado (`SupertrendModule.tsx`, indicador "Alpha Signals") tiene una particularidad importante:

<Warning>
  **La línea del Supertrend está permanentemente deshabilitada en el chart** (`showSupertrendLine = false`, marcado en el código como "PERMANENTLY DISABLED — only signals are shown"). Lo que el usuario ve son los **marcadores BUY/SELL** y las líneas de **TP1/TP2/TP3/SL**, no la línea de tendencia en sí.
</Warning>

Además del cruce puro, el chart aplica dos filtros de contexto para las señales visuales (no para el cálculo de Supertrend en sí):

| Filtro | Default | Qué hace |
| - | - | - |
| EMA 200 | `showEmaFilter=true`, `emaPeriod=200` | Filtro de tendencia de fondo — la línea existe pero está oculta (`showEmaLine=false`) |
| ADX | `showADXFilter=true`, `adxPeriod=14`, `adxThreshold=20` | Solo deja pasar señales cuando hay tendencia fuerte |

Las señales BUY/SELL/TP/SL que aparecen en el chart **siempre vienen del backend** (`useBackendSignals=true`) — no se recalculan en el navegador. El cálculo local en `frontend/lib/indicators/supertrend.ts` existe solo como motor de referencia/backtesting, no como fuente de verdad visual.

**Niveles de TP/SL**: `calculateLevels()` usa `SL = low_de_la_vela_señal − 2.2×ATR` (para BUY; simétrico para SELL), y luego TP1/TP2/TP3 son múltiplos de la distancia entry→SL: `TP1 = entry + distancia×0.5`, `TP2 = entry + distancia×1.0`, `TP3 = entry + distancia×2.0` (ratio riesgo:beneficio 0.5:1, 1:1, 2:1).

## Entry Blocks del Builder

El Strategy Builder expone Supertrend como 3 bloques de entrada independientes (`backend/blocks/entries/supertrend.py`):

| Bloque | Qué evalúa | Parámetros propios |
| - | - | - |
| **`SupertrendCrossEntry`** | BUY cuando la dirección pasa de bajista a alcista, SELL en el cruce inverso | `factor=5.0`, `atr_period=10`, `require_close=true` (si está activo, exige que el cierre — no solo la mecha — confirme el cruce) |
| **`SupertrendDirectionEntry`** | Entra cuando la dirección es favorable **y** el precio está cerca de la línea Supertrend (zona de entrada) | `factor=5.0`, `atr_period=10`, `entry_zone_pct=50%` (distancia máxima como % de `ATR(14)×factor`), `require_pullback=true` (exige retroceso reciente de 3 barras con tolerancia 0.2%) |
| **`SupertrendWithADXEntry`** | Reusa `SupertrendCrossEntry` con `require_close=true` forzado, y filtra por fuerza de tendencia | `factor=5.0`, `atr_period=10`, `adx_period=14`, `min_adx=20` |

Los tres bloques usan `factor=5.0`/`atr_period=10` como default — **coinciden con el canónico de producción**.

## La inconsistencia conocida: factor 3.0 en el optimizador de bloques

<Warning>
  Cuando Supertrend se agrega como **indicador optimizable** dentro del Builder (no como entry block, sino como bloque de indicador para búsqueda de hiperparámetros), `backend/blocks/configs/indicator_configs.py` define `SupertrendIndicatorConfig` con `factor` default **3.0** (rango 0.5–10.0, `optimizable: true`, step 0.5) — **distinto** del 5.0 canónico. El `atr_period=10` sí coincide.

  Esto es un punto de partida para que el optimizador busque el mejor factor dentro de ese rango, no un valor "oficial" del sistema. Si estás optimizando una estrategia en el Builder y ves que Supertrend arranca en 3.0, no es un error — es el rango de búsqueda del optimizador, distinto del 5.0 que usa el indicador Alpha Signals en producción. No los confundas al leer resultados de backtests o al comparar contra el chart en vivo.
</Warning>

## Recetas

<AccordionGroup>
  <Accordion title="1. Leer Alpha Signals en el chart tal cual viene">
    No hay nada que configurar — `factor`/`atrPeriod` están ocultos y fijos en 5.0/10. Lo único ajustable visualmente son los filtros de contexto (EMA 200, ADX) y la presentación de TP/SL. Confiá en las señales del backend, no en un recálculo local.
  </Accordion>

  <Accordion title="2. Armar una estrategia en el Builder con Supertrend + ADX">
    Usá el entry block `SupertrendWithADXEntry` con `min_adx=20` (default) para evitar señales en mercados sin tendencia clara. Si vas a optimizar el `factor`, recordá que el rango de búsqueda arranca en 3.0, no en 5.0 — comparalo contra el resultado con `factor=5.0` fijo (el valor de producción) antes de asumir que el optimizado es mejor.
  </Accordion>

  <Accordion title="3. Filtrar solo entradas con pullback confirmado">
    `SupertrendDirectionEntry` con `require_pullback=true` (default) — exige que el precio haya retrocedido en las últimas 3 barras antes de dar la señal, evitando entradas en el primer impulso del cruce.
  </Accordion>
</AccordionGroup>

***

<Card title="Volver a la Visión General" icon="arrow-left" href="/learn/indicators/overview">
  Ver el resto de indicadores propios de la plataforma.
</Card>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.