Skip to main content

Qué es el ISS

Innova Smart Structure (ISS) no es “un indicador más” — es un motor. Todos los demás módulos de estructura (rangos dinámicos, líneas de break, FVGs con contexto de fractal, el panel de stats multi-temporalidad) leen del mismo cálculo central:
En la práctica esto significa que cuando configurás el ISS no estás ajustando “un dibujito en el gráfico” — estás ajustando la fuente de verdad que también usan el backtest, el motor de señales y otros indicadores (por ejemplo, FVG puede filtrar sus gaps usando el fractal que calcula el ISS).
Si todavía no tenés claro qué es un swing point, un BOS o un CHoCH, empezá por Estructura de Mercado y Swing Points — acá asumimos que ya conocés la teoría y nos enfocamos en cómo configurarlo.
El indicador en el gráfico se llama ISS (id interno innovastructure) y equivale conceptualmente a “Smart Money Concepts (SMC)” de LuxAlgo en TradingView, pero con validación configurable, dos niveles de análisis (N1/N2) y filtros de ruptura que ese indicador no tiene.

Swing Points — la base de todo

Antes de poder dibujar un rango o detectar un CHoCH, el ISS necesita saber dónde están los puntos de giro del precio. Esto se configura en la sección Detección.

Método de detección

El motor soporta tres métodos (SwingDetectionConfig.detection_method en el backend):
El indicador ISS y el indicador Swing Points solo exponen el método fractal en su UI. zigzag y atr existen en el schema del backend (backend/schemas/iss_engine.py) y están disponibles vía API (POST /api/iss/query con swing_config_overrides) o trading-bridge, pero hoy no hay un selector visual para cambiarlos.

Fuerza del fractal (swing_strength)

Cuántas barras a cada lado deben tener un high/low menor (o mayor) para confirmar el swing. Es el parámetro más importante de todo el motor — todo lo demás depende de qué swings detectó primero.
Discrepancia UI vs backend: el schema (SwingDetectionConfig.swing_strength) permite hasta 10 (le=10). La UI del ISS y la de Swing Points limitan el slider a máximo 5. Si necesitás más de 5 tenés que llamar la API directamente con swing_config_overrides.

Validación por precio

Un swing recién detectado no es automáticamente “confirmado” — puede quedar en estado ACTIVO esperando que el precio lo valide.
  • validationEnabled (default true en ISS): si está apagado, todo candidato pasa a VALIDADO de inmediato — más rápido, más ruido.
  • validationType (default WICK): qué parte de la vela debe confirmar el swing.
    • WICK: cualquier mecha (high/low) — el más permisivo.
    • BODY: solo apertura o cierre.
    • CLOSE: solo el cierre — el más estricto, menos falsos swings.

Pause Mode (Larry Williams)

Controla qué pasa durante la “pausa” que sigue a un swing recién formado — el período en el que técnicamente todavía podría aparecer un swing más extremo antes de que el anterior quede confirmado.
Discrepancia UI vs backend: el default del schema (PauseMode) es FLEXIBLE. Tanto el indicador ISS como el indicador Swing Points arrancan con strict en su UI (confirmado en useInnovaStructure.ts y en swingpoints.definition.ts). El comportamiento real que ve un usuario que arrastra el indicador al gráfico sin tocar nada es strict, no flexible.

Filtros de ruido

Estos existen en SwingDetectionConfig pero no están expuestos en la UI de ningún indicador de estructura hoy (ISS ni Swing Points). Solo son accesibles vía API/trading-bridge:

Jerarquía ST/IT/LT (Larry Williams)

Una vez detectados los swings, el motor los clasifica en tres niveles jerárquicos según el método de Larry Williams (Long-Term Secrets to Short-Term Trading, capítulo 1). La clasificación es estructural, no numérica — no depende de un lookback en barras, sino de la relación de cada swing con sus vecinos del mismo tipo.
1

Todo swing arranca como ST (Short Term)

Cualquier swing high/low detectado por el fractal es, por definición, un ST.
2

Un ST se vuelve IT (Intermediate) si sus dos vecinos ST son más débiles

Un ST High es IT High si el ST High anterior y el ST High siguiente son ambos más bajos. Un ST Low es IT Low si sus vecinos ST Low son ambos más altos.
3

Un IT se vuelve LT (Long Term) con la misma regla, un nivel arriba

Un IT High es LT High si el IT High anterior y el siguiente son ambos más bajos. Análogo para IT Low → LT Low.
Cómo leer tendencia con la jerarquía: mirá los swings IT — si forman HH/HL (higher highs, higher lows) consecutivos, la tendencia intermedia es alcista. Si los swings LT también forman HH/HL, tenés confluencia de tendencia de corto, medio y largo plazo — la señal más fuerte. Cuando el ST dice una cosa y el IT dice otra, el IT manda (es la estructura “padre”).
Un vecino más importante para el trading: como un swing recién formado empieza siendo ST, su clasificación puede cambiar (subir a IT, y eventualmente a LT) a medida que aparecen nuevos swings que lo confirman como extremo local. El motor reclasifica automáticamente en cada actualización.

Cómo activarla

  • Swing Points (indicador standalone): toggle showHierarchy (default false) + preset dedicado “Larry Williams (Jerarquía)”.
  • ISS: la jerarquía se calcula siempre internamente (alimenta derived_levels con it_low_1/2, it_high_1/2, lt_low_1/2, lt_high_1/2) pero no tiene un toggle visual propio en el panel — se consume vía all_swings (cada swing trae su campo hierarchy).

Modo de clasificación (HH/HL/LH/LL)

Independiente de ST/IT/LT, cada swing también recibe una etiqueta HH/HL/LH/LL/FIRST (classification_mode): El indicador Swing Points sí deja elegir los 3 modos (classificationMode, default STRUCTURAL).

Estructura: BOS vs CHoCH

  • BOS (Break of Structure): el precio rompe un swing en la dirección de la tendencia actual → confirma continuación.
  • CHoCH (Change of Character): el precio rompe un swing en contra de la tendencia actual → alerta de posible reversión.
(Ver la teoría completa en Estructura de Mercado.) Lo que documentamos acá es cómo el ISS decide cuándo considerar que un break ocurrió de verdad.

Validación de la ruptura

rangeBreakValidation (UI, default BODY) define qué parte de la vela debe romper el nivel:
Discrepancia UI vs backend: el schema CHoCHBOSConfig.break_validation tiene default CLOSE (además soporta OPEN, CLOSE_ABOVE y CLOSE_BELOW, que no están en la UI). La UI del ISS arranca en BODY, no en CLOSE. La UI tampoco expone require_candle_close (default backend true) ni confirmation_bars (default backend 0) como toggles independientes.

Filtros de tamaño de ruptura

Para evitar que un micro-quiebre por 0.1 pip cuente como BOS/CHoCH real, hay 4 formas de exigir un tamaño mínimo (breakFilterType, default NONE — coincide con el backend): El backend además soporta RANGE_PERCENT (% del rango actual) que no está en la UI.
Un cuarto knob, pipValue (default 0.0001), es un campo de conveniencia solo de la UI para convertir “pips” a unidades de precio reales según el instrumento (forex vs oro vs cripto) — no existe como tal en el schema Pydantic.

Rangos: cómo se define la “caja”

El ISS dibuja un rango dinámico (rangeHigh/rangeLow) entre dos swings — ese rango es la base de Premium/Discount y de los break lines. Hay dos conceptos que se confunden fácilmente porque comparten nombre en la UI:
Ojo con el nombre: el campo detectionMode de la sección “Detección” del ISS, etiquetado como “Modo de Swing”, en realidad no cambia el algoritmo de detección de swings — controla RangeDetectionMode, es decir, qué swing define el límite del rango. El método de detección del swing en sí (fractal/zigzag/atr, visto arriba) es un campo distinto que hoy no está expuesto en esta UI.
El backend además define ULTIMATE (solo considera swings desde el último CHoCH) — ese modo no se selecciona directamente acá; es, en la práctica, lo que hace el Nivel 2 del ISS (ver abajo).

Premium / Discount / Equilibrium

El rango se divide en zonas usando la posición del precio como % del rango (0 = low, 100 = high):
Estos tres thresholds (RangeConfig.premium_threshold, discount_threshold, equilibrium_zone) no tienen ningún control en la UI del ISS hoy — se calculan siempre con los defaults del backend (50/50, banda de 5%). Solo son ajustables llamando la API directamente. El indicador FVG sí puede consumir esa clasificación (Premium/Discount) para filtrar gaps, pero tampoco puede cambiar los thresholds.

N1 vs N2 (Ultimate) — los dos niveles del ISS

El ISS puede mostrar simultáneamente dos niveles de estructura sobre el mismo gráfico, sin cambiar de temporalidad:
  • Toggle: showN1 (default true)
  • Es el análisis “normal”: swings fractales del timeframe actual, rango dinámico, CHoCH/BOS.
  • Sub-toggles: showRangeLines, showCHoCH, showBOS, showImpulseCount (contador de velas de impulso desde el último break).
Patrón de uso típico: activar N2 para leer el bias (¿el “timeframe superior sintético” está en tendencia alcista o bajista?) y usar N1 para el timing de la entrada — solo tomar señales de N1 que vayan en la dirección del último evento N2. Es el mismo principio de “HTF bias + LTF entry” pero sin cambiar de gráfico.

Panel de estadísticas MTF

Además de N1/N2, el ISS tiene un panel flotante opcional (showISSStatsPanel, default false) que muestra el estado de estructura de hasta 4 temporalidades simultáneas (statsTF1-statsTF4, defaults D1/H4/M15/Actual) — útil para ver confluencia multi-temporalidad de un vistazo sin cambiar de gráfico ni abrir 4 pestañas.

Qué más trae el motor (y todavía no tiene UI dedicada)

El ISSEngineConfig completo incluye configuración para Order Blocks, Fair Value Gaps y Liquidity Sweeps — pero estos viven como sub-configs del motor, consumibles hoy vía API (POST /api/iss/query) o trading-bridge, no como toggles del panel del indicador ISS: El engine también produce, siempre activo (no configurable desde el panel), la capa PD Array Matrix: Breaker Blocks, Rejection Blocks, Volume Imbalances, Mitigation Blocks, un Market Intention Score agregado (bias ponderado -∞ a +∞ con clasificación strong_bullish → strong_bearish) y eventos CISD (Change In State of Delivery, cuando 3+ arrays del mismo lado fallan). Igual que Order Blocks y Liquidity, es consumible hoy solo vía API/trading-bridge, sin UI en el chart — ver PD Array Matrix para el detalle completo de parámetros y cómo consultarlo.

Presets

Hay dos conjuntos de presets distintos que no hay que confundir: los del motor backend (Python, usados vía API/trading-bridge para configuraciones programáticas) y los del indicador frontend (los que aparecen en el selector de presets cuando arrastrás el ISS al gráfico).

Presets del motor (backend)

Presets del indicador (frontend UI)


Recetas — combinaciones útiles

Usá el indicador Swing Points standalone (no el ISS completo): strength=3-5, showHierarchy=true, classificationMode=STRUCTURAL, showOnlyClassified=true. Mirá solo los swings marcados LT — si forman HH/HL consecutivos la tendencia de largo plazo es alcista. Ignorá el ruido de los swings ST/IT que aparecen y desaparecen en el camino.
ISS con swingStrength=1, detectionMode=PREBREAK (rangos más reactivos, siguen al swing más reciente en vez del extremo), breakFilterType=NONE, showUltimate=false. Partí del preset Scalping y ajustá detectionMode a PREBREAK manualmente — el preset de fábrica no lo cambia.
Preset Estilo ICT del ISS (N1, STRUCTURAL, validación CLOSE) + indicador FVG con structureContextEnabled=true, structureSource='ISS', fractalFilterMode='CURRENT_FRACTAL' — así el FVG solo muestra gaps dentro del fractal activo de estructura. Para los sweeps de liquidez en sí (barrido de highs/lows), hoy no hay indicador visual dedicado — se leen manualmente mirando mechas que rompen un swing N1 y cierran de vuelta adentro, o se consume liquidity_levels/LiquiditySweepConfig vía API/trading-bridge.
Preset Dual Level (N1+N2) del ISS en un solo gráfico. Regla de uso: solo tomar entradas de N1 (CHoCH/BOS) que vayan en la misma dirección del último evento N2 (U-CHoCH/U-BOS). Si N1 da una señal contraria a N2, tratarla como pullback, no como reversión.

Siguiente: indicador Swing Points (standalone)

La versión liviana del detector de swings del ISS — sin CHoCH/BOS ni rangos, solo puntos de giro y jerarquía.