Skip to main content

Qué es

Un Fair Value Gap (FVG) es una zona de precio donde solo hubo liquidez de un lado del mercado — se forma con una secuencia de 3 velas donde el precio se movió tan rápido que dejó un hueco sin trading en el medio. El indicador FVG (id interno fvg) es, en cantidad de parámetros, la implementación ICT más completa de la plataforma: detección con filtro ATR, clasificación ARJO, expiración adaptativa por temporalidad, agregación de gaps consecutivos, integración con el fractal del ISS y filtrado Premium/Discount.
Si todavía no conocés los conceptos base de estructura y liquidez, empezá por Estructura de Mercado y Trading Institucional — Liquidez. Esta página cubre cómo configurar el indicador, no la teoría ICT completa de FVGs.

Detección del gap

El gap se detecta sobre 3 velas consecutivas (bar1, bar2, bar3): la vela intermedia (bar2) debe tener un cuerpo significativo (≥30% de su rango) para que el gap cuente.

Tipos y clasificación ARJO

Clasificación ARJO (“regla de la 3ra vela”) — evalúa cómo cerró bar3 respecto a bar2, mismo criterio en frontend y backend:
  • EXPANSION (breakaway): BISI si bar3.close > bar2.high; SIBI si bar3.close < bar2.low. El precio “no tiene intención de volver” — probabilidad de hold más baja de retroceso porque el gap queda atrás como combustible, no como imán.
  • PERFECT: BISI si bar3.close > bar2.close y bar3 es alcista; SIBI si bar3.close < bar2.close y bar3 es bajista. Mayor probabilidad de que el gap actúe como soporte/resistencia al ser retesteado.
  • REVERSAL: cualquier otro caso — la vela 3 muestra debilidad, menor probabilidad de hold.
El schema del backend (FVGConfigSchema.min_arjo_class en backend/schemas/iss_engine.py) define una escala de letras A/R/J/O (default O) que no coincide literalmente con los 3 valores reales que produce la detección (EXPANSION/PERFECT/REVERSAL). Es configuración interna del motor ISS, no del indicador visual — no asumas que representa niveles adicionales de clasificación ARJO en el gráfico.

Estados y ciclo de vida

Un FVG recorre: CREATED → ACTIVE → TESTED / PARTIALLY_FILLED → MITIGATED → INVALIDATED, con dos estados terminales alternativos, IFVG y BPR (ver abajo). Mitigación se clasifica en 4 tipos según cuánto penetró el precio: CE_TEST (tocó el 50% pero relleno <90%), FULL_FILL (relleno ≥90% y tocó CE), PARTIAL (relleno 25-100% sin tocar CE), IOFED (relleno <25% — entrada superficial, “institutional order flow entry drill”).

IFVG (Inverted FVG)

Cuando un FVG pasa a INVALIDATED (el precio cerró a través), el indicador puede convertirlo a IFVG: cambia de rol y pasa a actuar como soporte/resistencia en la dirección opuesta a su tipo original.
  • BISI invalidado → se convierte en RESISTANCE.
  • SIBI invalidado → se convierte en SUPPORT.
Si el precio vuelve a testear ese nivel y es rechazado, el sistema lo marca como reclaim (reclaimCount incrementa). Controlado por showIFVG (default true).

BPR (Balanced Price Range)

Se forma cuando un BISI y un SIBI activos se solapan en precio — la zona de overlap se interpreta como equilibrio institucional (ni compradores ni vendedores dejaron ineficiencia neta). El umbral mínimo de solapamiento es 10% del gap más chico (minOverlapPercent, no expuesto como parámetro en la UI). Controlado por showBPR (default false).
El backend detecta además Vacuum FVGs (gap ≥3× ATR, actúa como “imán” de precio) y Propulsion FVGs (gap que solapa ≥50% con un Order Block activo) — ninguno de los dos está expuesto como filtro en la UI de este indicador (fvg.definition.ts), solo existen en backend/indicators/fvg/detector.py.

Expiración adaptativa

En modo ADAPTIVE (el default), la expiración real no usa expirationBars=100 — usa una tabla fija por temporalidad (EXPIRATION_BY_TIMEFRAME): Otros modos disponibles manualmente: SESSION (expira al cambio de sesión — Asia/Londres/NY/killzones), MITIGATION (expira cuando el estado pasa a MITIGATED), RECLAMATION (expira al N-ésimo toque, usa maxTouches), NEW_FRACTAL (expira cuando el ISS detecta un nuevo rango de estructura), MATRIX_RESET (expira tras N periodos fijos), MANUAL (nunca expira automáticamente).
Tres valores distintos para “edad máxima” según dónde mires: la UI expone expirationBars=100 (solo aplica en modo manual TIME_BARS); el detector standalone del backend (backend/indicators/fvg/detector.py) usa max_fvg_age=50; el schema del motor ISS (FVGConfigSchema.max_bars_without_mitigation) también usa 50. No son el mismo número ni necesariamente el mismo concepto — no asumas que coinciden.

Agregación de FVGs consecutivos

Cuando el precio deja varios gaps seguidos en la misma dirección, el indicador puede tratarlos como un solo bloque en vez de mostrarlos todos. Dos FVGs se consideran consecutivos si son del mismo tipo (ambos BISI o ambos SIBI), están separados por ≤consecutiveThreshold barras, y se solapan o están muy cerca en precio (tolerancia ~10% del tamaño del gap).
El selector de la UI también ofrece HIGHEST (“El más alto, para SIBI”) y LOWEST (“El más bajo, para BISI”), pero la implementación real (frontend/components/indicators/fvg/aggregation.ts) no tiene lógica para esos dos modos — el switch cae al default y no aplica ninguna agregación (se comporta como NONE). Si necesitás ese comportamiento, usá AVERAGE_CE o MERGED en su lugar.

Filtro fractal / integración con ISS

Conecta el FVG con el motor ISS (o con Swing Points) para filtrar gaps según el contexto de estructura en el que se formaron, en vez de mostrar todos los gaps del historial sin criterio. Cada FVG se enriquece con contexto del ISS al momento de formarse: fase de mercado (EXPANSION si hubo un break reciente, RETRACEMENT si el precio retrocede contra tendencia, CONSOLIDATION en rango) y origen del fractal (CURRENT, PREVIOUS, o FORMING si está cerca del extremo del rango activo).

Premium / Discount

De las 7 fuentes que ofrece el selector, solo ISS, Swing Points y Quarterly están realmente implementadas — Monthly Open, Weekly Open, Rango del día y Rango de sesión caen todos silenciosamente al rango del ISS como fallback (getPriceRange en premium-discount.ts). Elegirlas en el panel no rompe nada, pero tampoco usa el rango que dice el nombre.

Display

Presets

Recetas

Preset Estilo ICT del ISS (validación CLOSE, STRUCTURAL) + FVG con structureContextEnabled=true, structureSource=ISS, fractalFilterMode=CURRENT_FRACTAL, arjoFilter=PERFECT_EXPANSION, premiumDiscountEnabled=true. Te quedás solo con gaps del fractal activo, de alta probabilidad ARJO, y en la zona de precio correcta (Discount para BISI, Premium para SIBI).
Preset Scalping: expirationMode=SESSION (expira al cierre de Londres/NY), maxFVGs=10, extendRight=20. Combinalo con aggregationEnabled=true, aggregationMode=LAST para no ensuciar el gráfico con series de micro-gaps del mismo movimiento.
Preset Swing Trading: expirationMode=TIME_DAYS a 20 días, contexto de estructura activado contra el ISS. Sumale showQuartiles=true para afinar el punto de entrada dentro del gap (25%/75%) en vez de solo el CE.
Los archivos internos FVG_KNOWLEDGE.md y FVG_INSIGHTS.md (en frontend/components/indicators/fvg/) son notas de investigación del equipo con teoría ICT extendida (IOFED, IPDA, Silver Bullet, narrativa MTF) — útiles como contexto conceptual, pero no son spec de producto verificada línea por línea.

Innova Smart Structure (ISS)

El motor de estructura del que el FVG puede heredar fractal, rango y Premium/Discount.

PD Array Matrix

El FVG es uno de los 6 tipos de array que alimentan el Market Intention Score agregado.