Radar de operaciones institucionales para TradingView

Radar de operaciones institucionales para TradingView

Manual de uso y guía de estudio.

Momentum + Estructura + VWAP + Liquidez + Confirmación + Riesgo
Diseñado para lectura intradía de XAUUSD y adaptación a otros mercados.
Principios ATC: Precisión > frecuencia , Evidencia > predicción , Proceso > resultado

1. ¿Qué es el ATC Radar Institucional?

Una herramienta de lectura, no una máquina de señales

El ATC Radar Institucional organiza varias capas de evidencia en un solo gráfico. Su objetivo es responder, en orden, seis preguntas: ¿qué dirección domina?, ¿qué está haciendo el momentum?, ¿dónde está el precio respecto al valor ponderado?, ¿dónde está la liquidez?, ¿la estructura confirma? y ¿el riesgo permite operar?

CapaHerramientaPregunta
Momentum tácticoSet A: EMA 9/21¿Qué está cambiando ahora?
Estructura intradíaSet B: EMA 50/100¿Cuál es la dirección dominante?
ValorVWAP¿Precio por encima o debajo del valor ponderado?
LiquidezAsia / Londres / NY H-L¿Dónde pueden estar los stops y objetivos?
EstructuraBOS / CHOCH-MSS¿El precio confirmó el cambio?
EjecuciónFVG / OB + RR + ATR¿Existe una entrada defendible?

Regla principal

Nunca convertir una sola señal en una operación. El valor del Radar aparece cuando varias evidencias independientes convergen.

2. Anatomía del gráfico

Lectura visual de la versión consolidada

En la captura se observan simultáneamente el precio, las cuatro EMAs, VWAP, cruces A/B, panel MTF, volumen y niveles de sesión. El objetivo no es mirar todo al mismo tiempo: se lee por capas.

  1. Primero: Set B 50/100 para establecer la estructura dominante.
    1. Segundo: Set A 9/21 para identificar aceleración, corrección o giro táctico.
    1. Tercero: VWAP para ubicar el precio respecto al valor ponderado de la sesión.
    1. Cuarto: máximos y mínimos de sesiones previas para localizar liquidez.
    1. Quinto: estructura, volumen y zonas FVG/OB para confirmar.

3. Set A — EMA 9/21 (los periodos pueden ser cambiados)

La capa rápida: momentum táctico

Las EMA 9 y 21 reaccionan relativamente rápido al precio. Por eso el Set A sirve para detectar cambios de momentum antes que el Set B.

SituaciónLectura sencillaUso
EMA 9 > EMA 21Momentum alcistaBuscar confirmaciones de compra, no comprar automáticamente.
EMA 9 < EMA 21Momentum bajistaBuscar confirmaciones de venta, no vender automáticamente.
Cruce ▲ Alcista ACambio táctico hacia arribaPuede ser inicio de impulso o solo corrección.
Cruce ▼ Bajista ACambio táctico hacia abajoPuede ser inicio de caída o solo retroceso.
A = rápido. Detecta antes, pero también produce más señales falsas.

Ejemplo fácil

Si Set B sigue alcista y aparece ▼ Bajista A, la lectura inicial no es ‘vender’. Es: el mercado alcista está corrigiendo. Esperamos ver si esa corrección rompe estructura o si encuentra soporte y retoma la tendencia.

4. Set B — EMA 50/100 (los periodos pueden ser cambiados)

La capa lenta: estructura intradía

Las EMA 50 y 100 filtran más ruido. Sus cruces son menos frecuentes y representan cambios más estructurales. En el gráfico se distinguen visualmente del Set A.

SituaciónInterpretación
EMA 50 > EMA 100Estructura intradía predominantemente alcista
EMA 50 < EMA 100Estructura intradía predominantemente bajista
▲ Alcista BConfirmación estructural alcista más lenta
▼ Bajista BConfirmación estructural bajista más lenta
B = contexto estructural. No necesariamente da la entrada; ayuda a decidir qué señales A merecen atención.

Ejemplo fácil

Set A puede cruzar varias veces mientras Set B conserva la misma dirección. Eso es normal: A describe oscilaciones tácticas dentro de una estructura más lenta.

5. Matriz A × B

La lectura más importante del indicador

Set A 9/21Set B 50/100Lectura ATCConducta
🟢 Alcista🟢 AlcistaImpulso alcista alineadoPriorizar largos con confirmación.
🔴 Bajista🔴 BajistaImpulso bajista alineadoPriorizar cortos con confirmación.
🟢 Alcista🔴 BajistaCorrección alcista en estructura bajistaCuidado con comprar tarde.
🔴 Bajista🟢 AlcistaCorrección bajista en estructura alcistaCuidado con vender tarde.
Alineación A+B aumenta coherencia; divergencia A/B describe transición o corrección.

Idea para principiantes

Imagine un automóvil: Set B indica la carretera por la que viaja; Set A indica si en este momento acelera o frena. Frenar en una carretera ascendente no significa necesariamente que el viaje cambió de dirección.

6. VWAP

El eje de valor ponderado por volumen

VWAP significa Volume Weighted Average Price. Resume el precio medio de la sesión ponderando por volumen. En el Radar se utiliza como referencia de valor y como filtro adicional.

Precio vs VWAPLectura
Precio sobre VWAPSesgo táctico favorable a compradores
Precio bajo VWAPSesgo táctico favorable a vendedores
Cruces repetidos de VWAPEquilibrio / rango / baja claridad
Rechazo claro en VWAPVWAP actuando como referencia dinámica
VWAP confirma contexto; no sustituye estructura.

Ejemplo

A y B están alcistas, pero el precio cae bajo VWAP. La tendencia puede seguir siendo alcista, pero la ejecución perdió calidad. Esperar recuperación y aceptación sobre VWAP suele ser más disciplinado que comprar inmediatamente.

7. Cruces A y B

El marcador representa el evento técnico.

Los marcadores se anclan al nivel aproximado donde las dos EMAs coinciden en la vela que confirma el cruce. Así el evento visual se relaciona con las medias, no con la altura de la vela.

MarcadorSignificado
▲ Alcista AEMA 9 cruza sobre EMA 21
▼ Bajista AEMA 9 cruza bajo EMA 21
▲ Alcista BEMA 50 cruza sobre EMA 100
▼ Bajista BEMA 50 cruza bajo EMA 100
▲ verde NO significa ‘BUY’. ▼ rojo NO significa ‘SELL’. Significa: ocurrió un cambio observable; ahora buscamos confirmación.

Nota sobre timeframe

El marcador queda anclado al evento EMA/EMA, pero las EMAs siguen dependiendo del timeframe. Un cruce M15 no equivale a un cruce H1. Siempre leer el timeframe activo y el panel MTF.

8. Panel MTF

D1 → H4 → H1 → M15 → Actual

MTF significa Multi-Timeframe. El panel resume la dirección de los Set A y B en varios marcos temporales y muestra una medida relativa de separación/fuerza.

TFFunción didáctica
D1Contexto mayor
H4Estructura swing
H1Sesgo intradía
M15Ejecución / transición
ActualLectura inmediata del gráfico

Cómo leer 3/4 TF

Si tres de cuatro marcos están bajistas, el sesgo MTF es bajista. No significa certeza; significa predominio de evidencia

No necesitamos unanimidad. Necesitamos saber dónde está el desacuerdo y qué timeframe lo está produciendo..

9. Liquidez de sesiones

Asia, Londres y Nueva York

El Radar conserva los máximos y mínimos de las últimas sesiones completas. Estos niveles funcionan como referencias de liquidez porque alrededor de máximos y mínimos visibles suelen concentrarse órdenes.

NivelLectura habitual
Asia HLiquidez compradora potencial sobre el máximo asiático
Asia LLiquidez vendedora potencial bajo el mínimo asiático
London HReferencia importante para expansión hacia NY
London LReferencia importante para barridos/rechazos
NY HLiquidez sobre el máximo de NY previo
NY LLiquidez bajo el mínimo de NY previo

BSL y SSL

BSL (Buy-Side Liquidity) suele referirse a liquidez por encima de máximos. SSL (Sell-Side Liquidity) suele referirse a liquidez por debajo de mínimos.

Un nivel de liquidez es un lugar para observar comportamiento, no una orden automática.

10. Sweep vs Breakout

Dos comportamientos que un principiante debe distinguir

ComportamientoQué ocurreLectura
Sweep / barridoEl precio perfora el nivel y vuelve a cerrar dentroPosible captura de liquidez y rechazo.
Breakout / rupturaEl precio rompe y logra aceptación fuera del nivelPosible continuación.

Ejemplo sencillo

London H está en 4,180. El precio sube a 4,182 pero cierra nuevamente en 4,178: eso se parece a un sweep. Si rompe 4,180, consolida arriba y vuelve a defenderlo, se parece más a aceptación/continuación.

La mecha por sí sola no basta. Observe cierre, estructura posterior, volumen y reacción en VWAP/FVG/OB.

11. Estructura: BOS, CHOCH y MSS

El precio debe demostrar, no solo insinuar

TérminoDefinición para principiantesPregunta
  BOSBreak of Structure: ruptura de una estructura previa en la dirección dominante.  ¿La tendencia continuó?
CHOCHChange of Character: cambio inicial en el comportamiento estructural.¿Algo empezó a cambiar?
  MSSMarket Structure Shift: desplazamiento que confirma un cambio estructural relevante.  ¿El cambio tiene suficiente evidencia?

En la práctica, la nomenclatura puede variar entre metodologías. En ATC interesa más la evidencia objetiva: qué máximo/mínimo fue roto, con qué desplazamiento y qué ocurrió después.

Cruce EMA + ruptura estructural es más informativo que cruce EMA aislado.

12. FVG y OB

Zonas de interés para la ejecución

TérminoExplicación sencillaUso
FVGFair Value Gap: desequilibrio dejado por un desplazamiento rápido.Zona donde el precio puede regresar a reequilibrar.
OBOrder Block: zona estructural asociada al origen de un desplazamiento.Área de reacción potencial; requiere contexto.

Secuencia útil

Liquidez barrida → desplazamiento → cambio estructural → regreso a FVG/OB → confirmación con A/B y VWAP. Esta secuencia es mucho más robusta que entrar solo porque apareció un triángulo.

FVG y OB son zonas, no garantías.

13. Volumen, ATR y RR

Tres filtros para evitar buenas ideas en malas condiciones

ConceptoQué mideUso ATC
VolumenParticipación negociadaAyuda a validar expansión o agotamiento.
ATRRango verdadero promedioIndica régimen de volatilidad; no dirección.
RRReward/RiskCompara recompensa potencial contra riesgo asumido.

Un setup puede tener buena dirección y mala ejecución. Si el stop necesario es demasiado amplio o el objetivo razonable no permite RR suficientes, se descarta.

Regla operativa ATC: RR objetivo ≥ 1.5 cuando la estructura permite definirlo de forma coherente.

Ejemplo

Si arriesgar 10 unidades permite aspirar razonablemente a 15 o más, RR ≥ 1.5. Si para evitar ruido el stop necesita 20 pero el siguiente objetivo está a 15, la operación pierde calidad aunque el sesgo sea correcto.

14. Secuencia operativa ATC

CONTEXTO → ESTRUCTURA → MOMENTUM → VWAP → LIQUIDEZ → CONFIRMACIÓN → RIESGO

  • CONTEXTO: leer D1/H4/H1 y Set B. Definir si el mercado está alcista, bajista o mixto.
  • ESTRUCTURA: identificar swings, BOS/CHOCH/MSS y rango operativo.
  • MOMENTUM: observar Set A y si acelera a favor o contra Set B.
  • VWAP: comprobar dónde opera el precio respecto al valor ponderado.
  • LIQUIDEZ: marcar Asia/Londres/NY H-L y otros EQH/EQL relevantes.
  • CONFIRMACIÓN: buscar desplazamiento, volumen, FVG/OB y reacción.
  • RIESGO: definir invalidación, stop, objetivo y RR antes de ejecutar.

Si una capa crítica contradice la hipótesis, no se fuerza la operación.

15. Checklist de 30 segundos

Antes de hacer clic

✓Pregunta
□¿Set B define una estructura clara?
□¿Set A está alineado o sé que estoy operando una corrección?
□¿El precio está del lado correcto del VWAP para mi hipótesis?
□¿Sé qué liquidez está buscando el precio?
□¿Hubo BOS / CHOCH / MSS o desplazamiento válido?
□¿Existe FVG/OB o zona técnica defendible para ejecución?
□¿Volumen/ATR permiten operar sin perseguir precio?
□¿Stop e invalidación son estructurales, no emocionales?
□¿RR es al menos 1.5?
□¿Estoy entrando antes de que el movimiento ya esté extendido?
Una respuesta ‘no sé’ cuenta como NO. La ausencia de claridad es información.

16. Calificación del setup

A+ / A / B / NO TRADE

GradoCaracterísticasAcción
  A+A+B alineados, VWAP favorable, liquidez clara, estructura confirmada, entrada limpia, RR sólido.  Setup prioritario.
AMayoría de capas alineadas; una condición secundaria imperfecta.Operable con disciplina.
BContexto razonable pero transición, confirmación débil o RR justo.Esperar mejora / reducir interés.
  NO TRADEContradicciones importantes, rango confuso, entrada tardía o riesgo mal definido.  No operar.

La calificación no pretende predecir el resultado de una operación individual. Evalúa la calidad del proceso y de la evidencia disponible antes de entrar.

17. Casos prácticos fáciles

Aprender a narrar el gráfico

CasoLectura paso a paso
1. A alcista + B alcista + sobre VWAPContexto favorable. Buscar liquidez objetivo y confirmación estructural antes del largo.
  2. A bajista + B alcistaProbable corrección bajista dentro de estructura alcista. No vender tarde; observar soporte/liquidez y posible reanudación.
3. A alcista + B bajistaRebote/corrección contra estructura bajista. Comprar exige evidencia excepcional; vigilar rechazo en VWAP/OB.
4. A bajista + B bajista + bajo VWAPContexto bajista alineado. Esperar pullback/confirmación; no perseguir una vela ya extendida.
5. Sweep de London H + A gira bajistaPosible rechazo. Confirmar MSS/BOS, VWAP y espacio hasta siguiente liquidez antes de considerar corto.
El objetivo del alumno es poder contar la historia del mercado en una frase antes de pensar en una entrada.

 

Glosario para principiantes

Referencia rápida

TérminoDefinición
EMAExponential Moving Average. Media móvil que da más peso a datos recientes.
VWAPVolume Weighted Average Price. Precio medio ponderado por volumen.
MomentumVelocidad y dirección inmediata del movimiento.
EstructuraSecuencia de máximos y mínimos que organiza la tendencia.
Timeframe / TFMarco temporal de cada vela: M15, H1, H4, D1, etc.
MTFMulti-Timeframe. Lectura simultánea de varios marcos temporales.
BOSBreak of Structure. Ruptura de estructura.
CHOCHChange of Character. Cambio inicial del carácter estructural.
MSSMarket Structure Shift. Cambio estructural con desplazamiento.
Liquidity / LiquidezZonas donde pueden concentrarse órdenes y stops.
BSLBuy-Side Liquidity. Liquidez normalmente situada sobre máximos.
SSLSell-Side Liquidity. Liquidez normalmente situada bajo mínimos.
SweepBarrido de un nivel seguido de rechazo/retorno.
FVGFair Value Gap. Desequilibrio de precio dejado por desplazamiento.
OBOrder Block. Zona asociada al origen de un desplazamiento.
ATRAverage True Range. Medida de volatilidad/rango.
RRReward/Risk. Relación entre beneficio potencial y riesgo.
SesgoHipótesis direccional basada en evidencia.
PullbackRetroceso dentro de un movimiento mayor.
BreakoutRuptura con posible aceptación fuera de un rango/nivel.

18. Errores frecuentes y reglas finales

Qué evitar cuando el gráfico se ve convincente

  • Comprar únicamente porque apareció ▲ Alcista A.
  • Vender únicamente porque apareció ▼ Bajista B.
  • Confundir una corrección de Set A con reversión estructural de Set B.
  • Ignorar VWAP cuando el precio está oscilando repetidamente alrededor de él.
  • Tratar un High/Low de sesión como soporte/resistencia garantizado.
  • Entrar después de una expansión grande sin esperar retroceso o nueva estructura.
  • Mover el stop porque ‘seguro regresa’. La invalidación debe definirse antes.
  • Buscar unanimidad absoluta entre todos los timeframes.
  • Sobreoperar cuando ATR/volumen muestran condiciones pobres.
  • Evaluar el método por una sola operación en vez de por una muestra de ejecuciones disciplinadas.

Ejercicio final

Abra un gráfico M15 sin operar. En voz alta o por escrito complete: (1) Set B dice…, (2) Set A dice…, (3) VWAP dice…, (4) la liquidez más cercana está…, (5) la estructura confirma/no confirma…, (6) por tanto mi decisión es… Esperar también es una decisión.

Anexo- Script para Pine

RadarATC.pine
Texto plano
//@version=6
indicator("ATC - Radar Institucional - Mercado Global Sesiones XAUUSD", overlay=true, max_labels_count=500, max_lines_count=500)
//=====================================================================
// ATC RADAR INSTITUCIONAL
// Pine Script v6
//
// SET A 9/21 = Momentum tactico
// SET B 50/100 = Estructura intradia
// VWAP = Precio medio ponderado
//
// IMPORTANTE:
// EMAs + VWAP se dibujan directamente SOBRE EL PRECIO.
//=====================================================================
//=====================================================================
// 01. INPUTS GENERALES
//=====================================================================
showPanelEMAs = input.bool(
true,
"Panel EMAs MTF A/B",
group="01 - Paneles"
)
showPanelSMR = input.bool(
false,
"Panel SMR",
group="01 - Paneles"
)
showPanelSMC = input.bool(
false,
"Panel SMC Institucional",
group="01 - Paneles"
)
//=====================================================================
// 02. EMAs SET A
//=====================================================================
showEMAsA = input.bool(
true,
"Mostrar Set A",
group="02 - EMA Set A"
)
emaShortALen = input.int(
9,
"EMA corta A",
minval=1,
group="02 - EMA Set A"
)
emaLongALen = input.int(
21,
"EMA larga A",
minval=1,
group="02 - EMA Set A"
)
emaShortAColor = input.color(
color.lime,
"Color corta A",
group="02 - EMA Set A",
inline="A"
)
emaLongAColor = input.color(
color.orange,
"Color larga A",
group="02 - EMA Set A",
inline="A"
)
emaAWidth = input.int(
2,
"Grosor A",
minval=1,
maxval=5,
group="02 - EMA Set A"
)
//=====================================================================
// 03. EMAs SET B
//=====================================================================
showEMAsB = input.bool(
true,
"Mostrar Set B",
group="03 - EMA Set B"
)
emaShortBLen = input.int(
50,
"EMA corta B",
minval=1,
group="03 - EMA Set B"
)
emaLongBLen = input.int(
100,
"EMA larga B",
minval=1,
group="03 - EMA Set B"
)
emaShortBColor = input.color(
color.lime,
"Color corta B",
group="03 - EMA Set B",
inline="B"
)
emaLongBColor = input.color(
color.orange,
"Color larga B",
group="03 - EMA Set B",
inline="B"
)
emaBWidth = input.int(
2,
"Grosor B",
minval=1,
maxval=5,
group="03 - EMA Set B"
)
//=====================================================================
// 04. VWAP
//=====================================================================
showVWAP = input.bool(
true,
"Mostrar VWAP",
group="04 - VWAP"
)
vwapColor = input.color(
color.purple,
"Color VWAP",
group="04 - VWAP"
)
vwapWidth = input.int(
2,
"Grosor VWAP",
minval=1,
maxval=5,
group="04 - VWAP"
)
//=====================================================================
// 05. CRUCES
//=====================================================================
showCrossA = input.bool(
true,
"Mostrar cruces Set A",
group="05 - Cruces"
)
showCrossB = input.bool(
true,
"Mostrar cruces Set B",
group="05 - Cruces"
)
mostrarSoloUltimosCruces = input.bool(
true,
"Solo ultimos cruces A/B",
group="05 - Cruces",
tooltip="Activado: solo ultimo cruce alcista y bajista de cada Set. Desactivado: todos los cruces."
)
//=====================================================================
// 06. ALERTAS
//=====================================================================
alertEmaCrossA = input.bool(
true,
"Alertas cruces Set A",
group="06 - Alertas"
)
alertEmaCrossB = input.bool(
true,
"Alertas cruces Set B",
group="06 - Alertas"
)
alertVwapCross = input.bool(
true,
"Alertas cruces VWAP",
group="06 - Alertas"
)
alertRequireBias = input.bool(
false,
"Requerir sesgo institucional",
group="06 - Alertas"
)
alertRequireATR = input.bool(
false,
"Requerir ATR operativo",
group="06 - Alertas"
)
//=====================================================================
// 07. TRH
//=====================================================================
syncTRHwithPanel = input.bool(
true,
"Sincronizar TRH con Sesgo Institucional",
group="07 - Integracion TRH"
)
minTFbias = input.int(
3,
"Minimo TFs a favor",
minval=1,
maxval=4,
group="07 - Integracion TRH"
)
requireVWAP = input.bool(
true,
"Requerir Sesgo VWAP a favor",
group="07 - Integracion TRH"
)
//=====================================================================
// 08. CALCULO EMAs + VWAP
//=====================================================================
emaShortA = ta.ema(close, emaShortALen)
emaLongA = ta.ema(close, emaLongALen)
emaShortB = ta.ema(close, emaShortBLen)
emaLongB = ta.ema(close, emaLongBLen)
vwapLine = ta.vwap
// Alias de compatibilidad
emaShort = emaShortA
emaLong = emaLongA
emaShortLen = emaShortALen
emaLongLen = emaLongALen
//=====================================================================
// 09. DIBUJO SOBRE EL GRAFICO PRINCIPAL
//=====================================================================
// SET A - CONTINUAS
plot(
showEMAsA ? emaShortA : na,
title="EMA corta A",
color=emaShortAColor,
linewidth=emaAWidth,
style=plot.style_line
)
plot(
showEMAsA ? emaLongA : na,
title="EMA larga A",
color=emaLongAColor,
linewidth=emaAWidth,
style=plot.style_line
)
// SET B - PUNTEADAS VISUALES
// plot.style_circles mantiene el Set B claramente distinguible.
plot(
showEMAsB ? emaShortB : na,
title="EMA corta B",
color=emaShortBColor,
linewidth=emaBWidth,
style=plot.style_circles
)
plot(
showEMAsB ? emaLongB : na,
title="EMA larga B",
color=emaLongBColor,
linewidth=emaBWidth,
style=plot.style_circles
)
// VWAP - CONTINUA
plot(
showVWAP ? vwapLine : na,
title="VWAP",
color=vwapColor,
linewidth=vwapWidth,
style=plot.style_line
)
//=====================================================================
// 10. DETECCION DE CRUCES
//=====================================================================
cruceAlcistaA = ta.crossover(emaShortA, emaLongA)
cruceBajistaA = ta.crossunder(emaShortA, emaLongA)
cruceAlcistaB = ta.crossover(emaShortB, emaLongB)
cruceBajistaB = ta.crossunder(emaShortB, emaLongB)
cruceVWAPup = ta.crossover(close, vwapLine)
cruceVWAPdown = ta.crossunder(close, vwapLine)
//=====================================================================
// 11. ULTIMOS CRUCES SET A - ANCLADOS AL PRECIO DE LAS EMAs
//=====================================================================
var label ultimoCruceAlcistaA = na
var label ultimoCruceBajistaA = na
// Nivel visual del evento A.
// En la vela donde Pine confirma el crossover/crossunder,
// usamos el punto medio entre EMA 9 y EMA 21.
precioCruceA = (emaShortA + emaLongA) / 2
if cruceAlcistaA and mostrarSoloUltimosCruces
if not na(ultimoCruceAlcistaA)
label.delete(ultimoCruceAlcistaA)
if showCrossA
ultimoCruceAlcistaA := label.new(
bar_index,
precioCruceA,
"▲ Alcista A",
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_none,
textcolor=color.lime,
size=size.normal
)
if cruceBajistaA and mostrarSoloUltimosCruces
if not na(ultimoCruceBajistaA)
label.delete(ultimoCruceBajistaA)
if showCrossA
ultimoCruceBajistaA := label.new(
bar_index,
precioCruceA,
"▼ Bajista A",
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_none,
textcolor=color.red,
size=size.normal
)
//=====================================================================
// 12. ULTIMOS CRUCES SET B - ANCLADOS AL PRECIO DE LAS EMAs
//=====================================================================
var label ultimoCruceAlcistaB = na
var label ultimoCruceBajistaB = na
// Nivel visual del evento B.
// En la vela donde Pine confirma el crossover/crossunder,
// usamos el punto medio entre EMA 50 y EMA 100.
precioCruceB = (emaShortB + emaLongB) / 2
if cruceAlcistaB and mostrarSoloUltimosCruces
if not na(ultimoCruceAlcistaB)
label.delete(ultimoCruceAlcistaB)
if showCrossB
ultimoCruceAlcistaB := label.new(
bar_index,
precioCruceB,
"▲ Alcista B",
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_none,
textcolor=color.lime,
size=size.normal
)
if cruceBajistaB and mostrarSoloUltimosCruces
if not na(ultimoCruceBajistaB)
label.delete(ultimoCruceBajistaB)
if showCrossB
ultimoCruceBajistaB := label.new(
bar_index,
precioCruceB,
"▼ Bajista B",
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_none,
textcolor=color.red,
size=size.normal
)
//=====================================================================
// 13. TODOS LOS CRUCES - ANCLADOS AL EVENTO EMA/EMA
//=====================================================================
plotshape(
showCrossA and not mostrarSoloUltimosCruces and cruceAlcistaA ?
precioCruceA :
na,
title="Alcista A Historico",
style=shape.triangleup,
location=location.absolute,
color=color.lime,
size=size.normal,
text="Alcista A",
textcolor=color.lime
)
plotshape(
showCrossA and not mostrarSoloUltimosCruces and cruceBajistaA ?
precioCruceA :
na,
title="Bajista A Historico",
style=shape.triangledown,
location=location.absolute,
color=color.red,
size=size.normal,
text="Bajista A",
textcolor=color.red
)
plotshape(
showCrossB and not mostrarSoloUltimosCruces and cruceAlcistaB ?
precioCruceB :
na,
title="Alcista B Historico",
style=shape.triangleup,
location=location.absolute,
color=color.lime,
size=size.normal,
text="Alcista B",
textcolor=color.lime
)
plotshape(
showCrossB and not mostrarSoloUltimosCruces and cruceBajistaB ?
precioCruceB :
na,
title="Bajista B Historico",
style=shape.triangledown,
location=location.absolute,
color=color.red,
size=size.normal,
text="Bajista B",
textcolor=color.red
)
//=====================================================================
// 14. LIMPIEZA CRUCES
//=====================================================================
if not showCrossA or not mostrarSoloUltimosCruces
if not na(ultimoCruceAlcistaA)
label.delete(ultimoCruceAlcistaA)
ultimoCruceAlcistaA := na
if not na(ultimoCruceBajistaA)
label.delete(ultimoCruceBajistaA)
ultimoCruceBajistaA := na
if not showCrossB or not mostrarSoloUltimosCruces
if not na(ultimoCruceAlcistaB)
label.delete(ultimoCruceAlcistaB)
ultimoCruceAlcistaB := na
if not na(ultimoCruceBajistaB)
label.delete(ultimoCruceBajistaB)
ultimoCruceBajistaB := na
//=====================================================================
// 15. PANEL EMA MTF A/B
//=====================================================================
diff = math.abs(emaShortA - emaLongA)
maxDiff = ta.highest(diff, 200)
intensity =
maxDiff == 0.0 ?
0.0 :
diff / maxDiff
fuerzaPct = math.round(intensity * 100)
tendencia =
emaShortA > emaLongA ?
"Alcista" :
emaShortA < emaLongA ?
"Bajista" :
"Neutral"
tendenciaB =
emaShortB > emaLongB ?
"Alcista" :
emaShortB < emaLongB ?
"Bajista" :
"Neutral"
vwapEstado =
close > vwapLine ?
"Sobre VWAP" :
close < vwapLine ?
"Bajo VWAP" :
"En VWAP"
colorActual =
emaShortA > emaLongA ?
color.lime :
emaShortA < emaLongA ?
color.red :
color.yellow
colorActualB =
emaShortB > emaLongB ?
color.lime :
emaShortB < emaLongB ?
color.red :
color.yellow
colorVWAP =
close > vwapLine ?
color.lime :
close < vwapLine ?
color.red :
color.yellow
fuerzaIcon =
fuerzaPct >= 66 ?
"🟢" :
fuerzaPct >= 33 ?
"🟡" :
"🔴"
//=====================================================================
// 16. FUNCION MTF
//=====================================================================
f_tfData(tf, shortLen, longLen) =>
emaS = request.security(
syminfo.tickerid,
tf,
ta.ema(close, shortLen)
)
emaL = request.security(
syminfo.tickerid,
tf,
ta.ema(close, longLen)
)
d = math.abs(emaS - emaL)
maxD = request.security(
syminfo.tickerid,
tf,
ta.highest(
math.abs(
ta.ema(close, shortLen) -
ta.ema(close, longLen)
),
200
)
)
inten =
maxD == 0.0 ?
0.0 :
d / maxD
fuerza = math.round(inten * 100)
tend =
emaS > emaL ?
"Alcista" :
emaS < emaL ?
"Bajista" :
"Neutral"
col =
emaS > emaL ?
color.lime :
emaS < emaL ?
color.red :
color.yellow
icon =
fuerza >= 66 ?
"🟢" :
fuerza >= 33 ?
"🟡" :
"🔴"
[tend, fuerza, col, icon]
// SET A
[d1TA, d1FA, d1CA, d1IA] = f_tfData("D", emaShortALen, emaLongALen)
[h4TA, h4FA, h4CA, h4IA] = f_tfData("240", emaShortALen, emaLongALen)
[h1TA, h1FA, h1CA, h1IA] = f_tfData("60", emaShortALen, emaLongALen)
[m15TA, m15FA, m15CA, m15IA] = f_tfData("15", emaShortALen, emaLongALen)
// SET B
[d1TB, d1FB, d1CB, d1IB] = f_tfData("D", emaShortBLen, emaLongBLen)
[h4TB, h4FB, h4CB, h4IB] = f_tfData("240", emaShortBLen, emaLongBLen)
[h1TB, h1FB, h1CB, h1IB] = f_tfData("60", emaShortBLen, emaLongBLen)
[m15TB, m15FB, m15CB, m15IB] = f_tfData("15", emaShortBLen, emaLongBLen)
// Alias
d1T = d1TA
h4T = h4TA
h1T = h1TA
m15T = m15TA
//=====================================================================
// 17. SESGO GENERAL
//=====================================================================
alcistas =
(d1TA == "Alcista" ? 1 : 0) +
(h4TA == "Alcista" ? 1 : 0) +
(h1TA == "Alcista" ? 1 : 0) +
(m15TA == "Alcista" ? 1 : 0)
bajistas =
(d1TA == "Bajista" ? 1 : 0) +
(h4TA == "Bajista" ? 1 : 0) +
(h1TA == "Bajista" ? 1 : 0) +
(m15TA == "Bajista" ? 1 : 0)
alcistasB =
(d1TB == "Alcista" ? 1 : 0) +
(h4TB == "Alcista" ? 1 : 0) +
(h1TB == "Alcista" ? 1 : 0) +
(m15TB == "Alcista" ? 1 : 0)
bajistasB =
(d1TB == "Bajista" ? 1 : 0) +
(h4TB == "Bajista" ? 1 : 0) +
(h1TB == "Bajista" ? 1 : 0) +
(m15TB == "Bajista" ? 1 : 0)
sesgoGeneral =
alcistas > bajistas ?
"🟢 Alcista " + str.tostring(alcistas) + "/4 TF" :
bajistas > alcistas ?
"🔴 Bajista " + str.tostring(bajistas) + "/4 TF" :
"🟡 Mixto"
sesgoGeneralB =
alcistasB > bajistasB ?
"🟢 Alcista " + str.tostring(alcistasB) + "/4 TF" :
bajistasB > alcistasB ?
"🔴 Bajista " + str.tostring(bajistasB) + "/4 TF" :
"🟡 Mixto"
sesgoColor =
alcistas > bajistas ?
color.lime :
bajistas > alcistas ?
color.red :
color.yellow
sesgoColorB =
alcistasB > bajistasB ?
color.lime :
bajistasB > alcistasB ?
color.red :
color.yellow
lecturaAB =
tendencia == tendenciaB ?
"A/B alineados" :
tendencia == "Alcista" and tendenciaB == "Bajista" ?
"Correccion alcista / estructura bajista" :
tendencia == "Bajista" and tendenciaB == "Alcista" ?
"Correccion bajista / estructura alcista" :
"A/B mixtos"
lecturaABColor =
tendencia == tendenciaB ?
color.lime :
color.orange
//=====================================================================
// 18. PANEL A/B
//=====================================================================
panelBgGreenSoft = color.new(color.rgb(0,60,40), 60)
panelBgGreenHard = color.new(color.rgb(0,60,40), 40)
panelTextColor = color.white
var table infoPanel =
table.new(
position.bottom_left,
3,
8
)
if barstate.islast
if showPanelEMAs
table.cell(infoPanel, 0, 0, "TF", text_color=color.white, bgcolor=panelBgGreenHard)
table.cell(
infoPanel,
1,
0,
"SET A " + str.tostring(emaShortALen) + "/" + str.tostring(emaLongALen) + "\nMomentum",
text_color=color.white,
bgcolor=panelBgGreenHard
)
table.cell(
infoPanel,
2,
0,
"SET B " + str.tostring(emaShortBLen) + "/" + str.tostring(emaLongBLen) + "\nEstructura",
text_color=color.white,
bgcolor=panelBgGreenHard
)
table.cell(infoPanel, 0, 1, "Actual", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 1, fuerzaIcon + " " + tendencia + " " + str.tostring(fuerzaPct) + "%", text_color=colorActual, bgcolor=color.white)
table.cell(infoPanel, 2, 1, tendenciaB, text_color=colorActualB, bgcolor=color.white)
table.cell(infoPanel, 0, 2, "D1", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 2, d1IA + " " + d1TA + " " + str.tostring(d1FA) + "%", text_color=d1CA, bgcolor=color.white)
table.cell(infoPanel, 2, 2, d1IB + " " + d1TB + " " + str.tostring(d1FB) + "%", text_color=d1CB, bgcolor=color.white)
table.cell(infoPanel, 0, 3, "H4", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 3, h4IA + " " + h4TA + " " + str.tostring(h4FA) + "%", text_color=h4CA, bgcolor=color.white)
table.cell(infoPanel, 2, 3, h4IB + " " + h4TB + " " + str.tostring(h4FB) + "%", text_color=h4CB, bgcolor=color.white)
table.cell(infoPanel, 0, 4, "H1", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 4, h1IA + " " + h1TA + " " + str.tostring(h1FA) + "%", text_color=h1CA, bgcolor=color.white)
table.cell(infoPanel, 2, 4, h1IB + " " + h1TB + " " + str.tostring(h1FB) + "%", text_color=h1CB, bgcolor=color.white)
table.cell(infoPanel, 0, 5, "M15", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 5, m15IA + " " + m15TA + " " + str.tostring(m15FA) + "%", text_color=m15CA, bgcolor=color.white)
table.cell(infoPanel, 2, 5, m15IB + " " + m15TB + " " + str.tostring(m15FB) + "%", text_color=m15CB, bgcolor=color.white)
table.cell(infoPanel, 0, 6, "VWAP", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 6, vwapEstado, text_color=colorVWAP, bgcolor=color.white)
table.cell(infoPanel, 2, 6, lecturaAB, text_color=lecturaABColor, bgcolor=color.white)
table.cell(infoPanel, 0, 7, "Sesgo", text_color=color.black, bgcolor=color.white)
table.cell(infoPanel, 1, 7, sesgoGeneral, text_color=sesgoColor, bgcolor=color.white)
table.cell(infoPanel, 2, 7, sesgoGeneralB, text_color=sesgoColorB, bgcolor=color.white)
else
table.clear(
infoPanel,
0,
0,
2,
7
)
//=====================================================================
// 19. SMR
//=====================================================================
// Calculados en todas las velas para evitar warnings de consistencia.
highest3_smr = ta.highest(high, 3)
lowest3_smr = ta.lowest(low, 3)
highest5_smr = ta.highest(high, 5)
lowest5_smr = ta.lowest(low, 5)
bosBull_smr =
ta.crossover(
close,
highest3_smr
)
bosBear_smr =
ta.crossunder(
close,
lowest3_smr
)
var string lastChoch_smr = na
if bosBull_smr
lastChoch_smr := "CHOCH UP"
if bosBear_smr
lastChoch_smr := "CHOCH DOWN"
entry_smr = close
sl_smr =
bosBull_smr ?
lowest5_smr :
bosBear_smr ?
highest5_smr :
na
tp_smr =
bosBull_smr ?
entry_smr + (entry_smr - sl_smr) * 2 :
bosBear_smr ?
entry_smr - (sl_smr - entry_smr) * 2 :
na
rrRatio_smr =
not na(sl_smr) and not na(tp_smr) ?
math.abs(tp_smr - entry_smr) /
math.abs(entry_smr - sl_smr) :
na
smrLong =
bosBull_smr and
lastChoch_smr == "CHOCH UP"
smrShort =
bosBear_smr and
lastChoch_smr == "CHOCH DOWN"
entryLongCond_smr =
smrLong and
rrRatio_smr >= 1.5 and
close > vwapLine
entryShortCond_smr =
smrShort and
rrRatio_smr >= 1.5 and
close < vwapLine
atrValue = ta.atr(14)
atrOperativo =
atrValue < 2.0
sesgoAlineado =
(tendencia == "Alcista" and alcistas > bajistas) or
(tendencia == "Bajista" and bajistas > alcistas)
escenarioActivo =
entryLongCond_smr ?
"🟢 LONG (SMR)" :
entryShortCond_smr ?
"🔴 SHORT (SMR)" :
"🟡 Consolidacion"
rrClass_smr =
na(rrRatio_smr) ?
"N/A" :
rrRatio_smr < 1.0 ?
"🔴 BAJO" :
rrRatio_smr < 1.5 ?
"🟡 MEDIO" :
"🟢 ALTO"
rrColor_smr =
na(rrRatio_smr) ?
color.gray :
rrRatio_smr < 1.0 ?
color.red :
rrRatio_smr < 1.5 ?
color.yellow :
color.lime
liqEstado_smr =
close > vwapLine ?
"🟢 Sesgo VWAP Bullish" :
"🔴 Sesgo VWAP Bearish"
atrSignal =
atrValue < 1.0 ?
"🔴 BAJA" :
atrValue < 2.0 ?
"🟡 MEDIA" :
"🟢 ALTA"
var table panelSMR =
table.new(
position.top_right,
1,
8
)
if barstate.islast
if showPanelSMR
table.cell(panelSMR, 0, 0, "SMR", text_color=color.white, bgcolor=panelBgGreenHard)
table.cell(
panelSMR,
0,
1,
"ChOCh: " + (na(lastChoch_smr) ? "Neutral" : lastChoch_smr),
text_color=panelTextColor,
bgcolor=panelBgGreenSoft
)
table.cell(
panelSMR,
0,
2,
"RR: " + (na(rrRatio_smr) ? "N/A" : str.tostring(rrRatio_smr, format.mintick)) + " | " + rrClass_smr,
text_color=rrColor_smr,
bgcolor=panelBgGreenSoft
)
table.cell(panelSMR, 0, 3, "Escenario: " + escenarioActivo, text_color=color.white, bgcolor=panelBgGreenHard)
table.cell(panelSMR, 0, 4, liqEstado_smr, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelSMR, 0, 5, "ATR: " + str.tostring(atrValue, format.mintick), text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelSMR, 0, 6, "Vol: " + atrSignal, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelSMR, 0, 7, "", bgcolor=color.white)
else
table.clear(
panelSMR,
0,
0,
0,
7
)
//=====================================================================
// 20. SMC
//=====================================================================
left = input.int(
2,
"Left bars",
group="08 - SMC"
)
right = input.int(
2,
"Right bars",
group="08 - SMC"
)
htfChochTF = input.string(
"60",
"Timeframe CHOCH HTF",
options=["D","240","60","30","15","5","3"],
group="08 - SMC"
)
htfSwingHigh =
request.security(
syminfo.tickerid,
htfChochTF,
ta.pivothigh(high, left, right)
)
htfSwingLow =
request.security(
syminfo.tickerid,
htfChochTF,
ta.pivotlow(low, left, right)
)
var float htfLastHigh = na
var float htfLastLow = na
if not na(htfSwingHigh)
htfLastHigh := htfSwingHigh
if not na(htfSwingLow)
htfLastLow := htfSwingLow
htfBosBull =
not na(htfLastHigh) and
close > htfLastHigh
htfBosBear =
not na(htfLastLow) and
close < htfLastLow
var string lastHTFChoch = na
if htfBosBull
lastHTFChoch := "UP"
if htfBosBear
lastHTFChoch := "DOWN"
swingHigh = ta.pivothigh(high, left, right)
swingLow = ta.pivotlow(low, left, right)
var float lastHigh = na
var float lastLow = na
if not na(swingHigh)
lastHigh := swingHigh
if not na(swingLow)
lastLow := swingLow
liqBuy =
not na(lastHigh) and
high > lastHigh
liqSell =
not na(lastLow) and
low < lastLow
bosBull_smc =
liqBuy and
close > lastHigh
bosBear_smc =
liqSell and
close < lastLow
var float rrRatio_smc = na
if bosBull_smc and not na(lastLow) and not na(lastHigh)
rrRatio_smc :=
(close - lastLow) /
(lastHigh - lastLow)
if bosBear_smc and not na(lastLow) and not na(lastHigh)
rrRatio_smc :=
(lastHigh - close) /
(lastHigh - lastLow)
entryLongCond_smc =
bosBull_smc and
rrRatio_smc >= 1.5
entryShortCond_smc =
bosBear_smc and
rrRatio_smc >= 1.5
//=====================================================================
// 21. FILTRO TRH
//=====================================================================
if syncTRHwithPanel
allowLong =
alcistas >= minTFbias
allowShort =
bajistas >= minTFbias
allowLong :=
requireVWAP ?
allowLong and close > vwapLine :
allowLong
allowShort :=
requireVWAP ?
allowShort and close < vwapLine :
allowShort
entryLongCond_smc :=
entryLongCond_smc and
allowLong
entryShortCond_smc :=
entryShortCond_smc and
allowShort
//=====================================================================
// 22. VWAP MTF
//=====================================================================
dClose = request.security(syminfo.tickerid, "D", close)
dVWAP = request.security(syminfo.tickerid, "D", ta.vwap)
h4Close = request.security(syminfo.tickerid, "240", close)
h4VWAP = request.security(syminfo.tickerid, "240", ta.vwap)
h1Close = request.security(syminfo.tickerid, "60", close)
h1VWAP = request.security(syminfo.tickerid, "60", ta.vwap)
m15Close = request.security(syminfo.tickerid, "15", close)
m15VWAP = request.security(syminfo.tickerid, "15", ta.vwap)
bullCount =
(dClose > dVWAP ? 1 : 0) +
(h4Close > h4VWAP ? 1 : 0) +
(h1Close > h1VWAP ? 1 : 0) +
(m15Close > m15VWAP ? 1 : 0)
bearCount =
4 - bullCount
sesgoMTF =
bullCount > bearCount ?
"🟢 Alcista " + str.tostring(bullCount) + "/4 TF" :
bearCount > bullCount ?
"🔴 Bajista " + str.tostring(bearCount) + "/4 TF" :
"🟡 Neutral"
//=====================================================================
// 23. ESTRUCTURA MTF
//=====================================================================
dHigh5 = request.security(syminfo.tickerid, "D", ta.highest(high, 5))
dLow5 = request.security(syminfo.tickerid, "D", ta.lowest(low, 5))
h4High5 = request.security(syminfo.tickerid, "240", ta.highest(high, 5))
h4Low5 = request.security(syminfo.tickerid, "240", ta.lowest(low, 5))
h1High5 = request.security(syminfo.tickerid, "60", ta.highest(high, 5))
h1Low5 = request.security(syminfo.tickerid, "60", ta.lowest(low, 5))
m15High5 = request.security(syminfo.tickerid, "15", ta.highest(high, 5))
m15Low5 = request.security(syminfo.tickerid, "15", ta.lowest(low, 5))
bosD =
close > dHigh5 ?
"🟢 BOS UP" :
close < dLow5 ?
"🔴 BOS DOWN" :
"🟡 Rango"
bosH4 =
close > h4High5 ?
"🟢 BOS UP" :
close < h4Low5 ?
"🔴 BOS DOWN" :
"🟡 Rango"
bosH1 =
close > h1High5 ?
"🟢 BOS UP" :
close < h1Low5 ?
"🔴 BOS DOWN" :
"🟡 Rango"
bosM15 =
close > m15High5 ?
"🟢 BOS UP" :
close < m15Low5 ?
"🔴 BOS DOWN" :
"🟡 Rango"
//=====================================================================
// 24. PANEL SMC
//=====================================================================
var table panelInst =
table.new(
position.bottom_right,
1,
10
)
if barstate.islast
if showPanelSMC
table.cell(panelInst, 0, 0, "SMC INSTITUCIONAL", text_color=color.white, bgcolor=panelBgGreenHard)
table.cell(
panelInst,
0,
1,
"HTF CHOCH: " + (na(lastHTFChoch) ? "N/A" : lastHTFChoch + " (" + htfChochTF + ")"),
text_color=panelTextColor,
bgcolor=panelBgGreenSoft
)
table.cell(
panelInst,
0,
2,
"RR SMC: " + (na(rrRatio_smc) ? "N/A" : str.tostring(rrRatio_smc, format.mintick)),
text_color=panelTextColor,
bgcolor=panelBgGreenSoft
)
table.cell(
panelInst,
0,
3,
"Escenario: " + (entryLongCond_smc ? "🟢 LONG" : entryShortCond_smc ? "🔴 SHORT" : "🟡 Neutral"),
text_color=panelTextColor,
bgcolor=panelBgGreenHard
)
table.cell(panelInst, 0, 4, "Sesgo MTF: " + sesgoMTF, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelInst, 0, 5, "D1: " + bosD, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelInst, 0, 6, "H4: " + bosH4, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelInst, 0, 7, "H1: " + bosH1, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelInst, 0, 8, "M15: " + bosM15, text_color=panelTextColor, bgcolor=panelBgGreenSoft)
table.cell(panelInst, 0, 9, "", bgcolor=color.white)
else
table.clear(
panelInst,
0,
0,
0,
9
)
//=====================================================================
// 25. RADAR INSTITUCIONAL
//=====================================================================
// OFF POR DEFECTO
showRadar = input.bool(
false,
"Mostrar Radar Institucional",
group="09 - Radar Institucional"
)
modoNocturno = input.bool(
true,
"Modo nocturno",
group="09 - Radar Institucional"
)
geoRiskMode = input.string(
"Normal",
"Riesgo Geopolitico",
options=["Normal","Elevado","Critico"],
group="09 - Radar Institucional"
)
operacionManual = input.bool(
false,
"Activar operacion manualmente",
group="10 - Operacion"
)
var string operacionActiva = ""
if entryLongCond_smc
operacionActiva := "LONG"
if entryShortCond_smc
operacionActiva := "SHORT"
if operacionManual and operacionActiva == ""
operacionActiva := "MANUAL"
if not operacionManual and not entryLongCond_smc and not entryShortCond_smc
operacionActiva := ""
panelBgDarkSoft = color.new(color.rgb(20,20,20), 40)
panelBgDarkHard = color.new(color.rgb(20,20,20), 20)
bgSoft =
modoNocturno ?
panelBgDarkSoft :
panelBgGreenSoft
bgHard =
modoNocturno ?
panelBgDarkHard :
panelBgGreenHard
recBias =
bullCount > bearCount ?
"Sesgo Alcista. Buscar compras." :
bearCount > bullCount ?
"Sesgo Bajista. Buscar ventas." :
"Sesgo mixto. Priorizar gestion de riesgo."
recGeo =
geoRiskMode == "Critico" ?
"Riesgo geopolitico critico." :
geoRiskMode == "Elevado" ?
"Riesgo geopolitico elevado." :
"Riesgo geopolitico normal."
recVol =
atrValue < 1.0 ?
"Volatilidad baja." :
atrValue < 2.0 ?
"Volatilidad media." :
"Volatilidad alta."
var table radarPanel =
table.new(
position.top_left,
1,
7
)
if barstate.islast
if showRadar
table.cell(radarPanel, 0, 0, "ATC RADAR", text_color=color.white, bgcolor=bgHard)
table.cell(radarPanel, 0, 1, "Sesgo: " + sesgoMTF, text_color=color.white, bgcolor=bgSoft)
table.cell(radarPanel, 0, 2, recBias, text_color=color.white, bgcolor=bgSoft)
table.cell(radarPanel, 0, 3, recGeo, text_color=color.white, bgcolor=bgSoft)
table.cell(radarPanel, 0, 4, recVol, text_color=color.white, bgcolor=bgSoft)
table.cell(radarPanel, 0, 5, "Operacion: " + operacionActiva, text_color=color.white, bgcolor=bgHard)
table.cell(radarPanel, 0, 6, lecturaAB, text_color=color.white, bgcolor=bgSoft)
else
table.clear(
radarPanel,
0,
0,
0,
6
)
//=====================================================================
// 26. SESIONES
//=====================================================================
// TODO APAGADO POR DEFECTO
showSessions = input.bool(
false,
"Mostrar sesiones institucionales",
group="11 - Sesiones"
)
asiaBgCfg = input.bool(
false,
"Fondo Asia",
group="11 - Sesiones"
)
londonBgCfg = input.bool(
false,
"Fondo Londres",
group="11 - Sesiones"
)
nyBgCfg = input.bool(
false,
"Fondo Nueva York",
group="11 - Sesiones"
)
asiaSessionColor = input.color(
color.new(color.yellow, 88),
"Color fondo Asia",
group="11 - Sesiones"
)
londonSessionColor = input.color(
color.new(color.orange, 88),
"Color fondo Londres",
group="11 - Sesiones"
)
nySessionColor = input.color(
color.new(color.aqua, 88),
"Color fondo NY",
group="11 - Sesiones"
)
// UTC-6
asiaRange = "1700-0200"
londonRange = "0200-1000"
nyRange = "0700-1600"
asiaInSession =
not na(
time(
timeframe.period,
asiaRange,
"Etc/GMT+6"
)
)
londonInSession =
not na(
time(
timeframe.period,
londonRange,
"Etc/GMT+6"
)
)
nyInSession =
not na(
time(
timeframe.period,
nyRange,
"Etc/GMT+6"
)
)
bgcolor(
showSessions and asiaBgCfg and asiaInSession ?
asiaSessionColor :
na
)
bgcolor(
showSessions and londonBgCfg and londonInSession ?
londonSessionColor :
na
)
bgcolor(
showSessions and nyBgCfg and nyInSession ?
nySessionColor :
na
)
//=====================================================================
// 27. MAPA DE LIQUIDEZ - SESIONES ANTERIORES
//=====================================================================
showPreviousSessionHL = input.bool(
true,
"Mostrar H/L sesiones anteriores",
group="12 - Liquidez Sesiones"
)
showAsiaHL = input.bool(
true,
"Asia H/L",
group="12 - Liquidez Sesiones"
)
showLondonHL = input.bool(
true,
"London H/L",
group="12 - Liquidez Sesiones"
)
showNyHL = input.bool(
true,
"NY H/L",
group="12 - Liquidez Sesiones"
)
showSessionHLLabels = input.bool(
true,
"Mostrar vinetas grandes",
group="12 - Liquidez Sesiones"
)
sessionHLDecimals = input.int(
2,
"Decimales en viñetas H/L",
options=[0, 1, 2],
group="12 - Liquidez Sesiones"
)
asiaHLColor = input.color(
color.yellow,
"Color Asia",
group="12 - Liquidez Sesiones"
)
londonHLColor = input.color(
color.orange,
"Color Londres",
group="12 - Liquidez Sesiones"
)
nyHLColor = input.color(
color.aqua,
"Color Nueva York",
group="12 - Liquidez Sesiones"
)
sessionHLWidth = input.int(
2,
"Grosor H/L",
minval=1,
maxval=4,
group="12 - Liquidez Sesiones"
)
//=====================================================================
// 28. INICIO / FIN SESIONES
//=====================================================================
asiaStart =
asiaInSession and
not asiaInSession[1]
asiaEnd =
not asiaInSession and
asiaInSession[1]
londonStart =
londonInSession and
not londonInSession[1]
londonEnd =
not londonInSession and
londonInSession[1]
nyStart =
nyInSession and
not nyInSession[1]
nyEnd =
not nyInSession and
nyInSession[1]
//=====================================================================
// 29. ACUMULADORES
//=====================================================================
var float asiaCurrentHigh = na
var float asiaCurrentLow = na
var float asiaPreviousHigh = na
var float asiaPreviousLow = na
var float londonCurrentHigh = na
var float londonCurrentLow = na
var float londonPreviousHigh = na
var float londonPreviousLow = na
var float nyCurrentHigh = na
var float nyCurrentLow = na
var float nyPreviousHigh = na
var float nyPreviousLow = na
// ASIA
if asiaStart
asiaCurrentHigh := high
asiaCurrentLow := low
else if asiaInSession
asiaCurrentHigh :=
na(asiaCurrentHigh) ?
high :
math.max(asiaCurrentHigh, high)
asiaCurrentLow :=
na(asiaCurrentLow) ?
low :
math.min(asiaCurrentLow, low)
if asiaEnd
asiaPreviousHigh := asiaCurrentHigh
asiaPreviousLow := asiaCurrentLow
// LONDRES
if londonStart
londonCurrentHigh := high
londonCurrentLow := low
else if londonInSession
londonCurrentHigh :=
na(londonCurrentHigh) ?
high :
math.max(londonCurrentHigh, high)
londonCurrentLow :=
na(londonCurrentLow) ?
low :
math.min(londonCurrentLow, low)
if londonEnd
londonPreviousHigh := londonCurrentHigh
londonPreviousLow := londonCurrentLow
// NUEVA YORK
if nyStart
nyCurrentHigh := high
nyCurrentLow := low
else if nyInSession
nyCurrentHigh :=
na(nyCurrentHigh) ?
high :
math.max(nyCurrentHigh, high)
nyCurrentLow :=
na(nyCurrentLow) ?
low :
math.min(nyCurrentLow, low)
if nyEnd
nyPreviousHigh := nyCurrentHigh
nyPreviousLow := nyCurrentLow
//=====================================================================
// 30. LINEAS H/L VIVAS
//=====================================================================
var line asiaHighLine = na
var line asiaLowLine = na
var line londonHighLine = na
var line londonLowLine = na
var line nyHighLine = na
var line nyLowLine = na
// ASIA
if asiaEnd
if not na(asiaHighLine)
line.delete(asiaHighLine)
if not na(asiaLowLine)
line.delete(asiaLowLine)
if showPreviousSessionHL and showAsiaHL
asiaHighLine := line.new(
bar_index,
asiaPreviousHigh,
bar_index + 1,
asiaPreviousHigh,
xloc=xloc.bar_index,
extend=extend.right,
color=asiaHLColor,
width=sessionHLWidth,
style=line.style_solid
)
asiaLowLine := line.new(
bar_index,
asiaPreviousLow,
bar_index + 1,
asiaPreviousLow,
xloc=xloc.bar_index,
extend=extend.right,
color=asiaHLColor,
width=sessionHLWidth,
style=line.style_dotted
)
// LONDRES
if londonEnd
if not na(londonHighLine)
line.delete(londonHighLine)
if not na(londonLowLine)
line.delete(londonLowLine)
if showPreviousSessionHL and showLondonHL
londonHighLine := line.new(
bar_index,
londonPreviousHigh,
bar_index + 1,
londonPreviousHigh,
xloc=xloc.bar_index,
extend=extend.right,
color=londonHLColor,
width=sessionHLWidth,
style=line.style_solid
)
londonLowLine := line.new(
bar_index,
londonPreviousLow,
bar_index + 1,
londonPreviousLow,
xloc=xloc.bar_index,
extend=extend.right,
color=londonHLColor,
width=sessionHLWidth,
style=line.style_dotted
)
// NY
if nyEnd
if not na(nyHighLine)
line.delete(nyHighLine)
if not na(nyLowLine)
line.delete(nyLowLine)
if showPreviousSessionHL and showNyHL
nyHighLine := line.new(
bar_index,
nyPreviousHigh,
bar_index + 1,
nyPreviousHigh,
xloc=xloc.bar_index,
extend=extend.right,
color=nyHLColor,
width=sessionHLWidth,
style=line.style_solid
)
nyLowLine := line.new(
bar_index,
nyPreviousLow,
bar_index + 1,
nyPreviousLow,
xloc=xloc.bar_index,
extend=extend.right,
color=nyHLColor,
width=sessionHLWidth,
style=line.style_dotted
)
//=====================================================================
// FORMATO DE PRECIOS H/L
//=====================================================================
f_sessionPrice(value) =>
sessionHLDecimals == 0 ?
str.tostring(value, "#") :
sessionHLDecimals == 1 ?
str.tostring(value, "#.0") :
str.tostring(value, "#.00")
//=====================================================================
// 31. VINETAS GRANDES H/L
//=====================================================================
var label asiaHighLabel = na
var label asiaLowLabel = na
var label londonHighLabel = na
var label londonLowLabel = na
var label nyHighLabel = na
var label nyLowLabel = na
if barstate.islast
// Limpiar las etiquetas de la vela anterior
if not na(asiaHighLabel)
label.delete(asiaHighLabel)
if not na(asiaLowLabel)
label.delete(asiaLowLabel)
if not na(londonHighLabel)
label.delete(londonHighLabel)
if not na(londonLowLabel)
label.delete(londonLowLabel)
if not na(nyHighLabel)
label.delete(nyHighLabel)
if not na(nyLowLabel)
label.delete(nyLowLabel)
asiaHighLabel := na
asiaLowLabel := na
londonHighLabel := na
londonLowLabel := na
nyHighLabel := na
nyLowLabel := na
// ASIA
if showPreviousSessionHL and showSessionHLLabels and showAsiaHL and not na(asiaPreviousHigh)
asiaHighLabel := label.new(
bar_index + 3,
asiaPreviousHigh,
"● ASIA H " + f_sessionPrice(asiaPreviousHigh),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(asiaHLColor, 80),
textcolor=asiaHLColor,
size=size.large
)
asiaLowLabel := label.new(
bar_index + 3,
asiaPreviousLow,
"● ASIA L " + f_sessionPrice(asiaPreviousLow),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(asiaHLColor, 80),
textcolor=asiaHLColor,
size=size.large
)
// LONDON
if showPreviousSessionHL and showSessionHLLabels and showLondonHL and not na(londonPreviousHigh)
londonHighLabel := label.new(
bar_index + 3,
londonPreviousHigh,
"● LONDON H " + f_sessionPrice(londonPreviousHigh),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(londonHLColor, 80),
textcolor=londonHLColor,
size=size.large
)
londonLowLabel := label.new(
bar_index + 3,
londonPreviousLow,
"● LONDON L " + f_sessionPrice(londonPreviousLow),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(londonHLColor, 80),
textcolor=londonHLColor,
size=size.large
)
// NY
if showPreviousSessionHL and showSessionHLLabels and showNyHL and not na(nyPreviousHigh)
nyHighLabel := label.new(
bar_index + 3,
nyPreviousHigh,
"● NY H " + f_sessionPrice(nyPreviousHigh),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(nyHLColor, 80),
textcolor=nyHLColor,
size=size.large
)
nyLowLabel := label.new(
bar_index + 3,
nyPreviousLow,
"● NY L " + f_sessionPrice(nyPreviousLow),
xloc=xloc.bar_index,
yloc=yloc.price,
style=label.style_label_left,
color=color.new(nyHLColor, 80),
textcolor=nyHLColor,
size=size.large
)
//=====================================================================
// 32. LIQUIDITY SWEEPS
//=====================================================================
asiaHighSweep =
showPreviousSessionHL and
showAsiaHL and
not na(asiaPreviousHigh) and
high > asiaPreviousHigh and
close < asiaPreviousHigh
asiaLowSweep =
showPreviousSessionHL and
showAsiaHL and
not na(asiaPreviousLow) and
low < asiaPreviousLow and
close > asiaPreviousLow
londonHighSweep =
showPreviousSessionHL and
showLondonHL and
not na(londonPreviousHigh) and
high > londonPreviousHigh and
close < londonPreviousHigh
londonLowSweep =
showPreviousSessionHL and
showLondonHL and
not na(londonPreviousLow) and
low < londonPreviousLow and
close > londonPreviousLow
nyHighSweep =
showPreviousSessionHL and
showNyHL and
not na(nyPreviousHigh) and
high > nyPreviousHigh and
close < nyPreviousHigh
nyLowSweep =
showPreviousSessionHL and
showNyHL and
not na(nyPreviousLow) and
low < nyPreviousLow and
close > nyPreviousLow
//=====================================================================
// 33. ALERTAS
//=====================================================================
f_alertAllowed() =>
condBias =
alertRequireBias ?
sesgoAlineado :
true
condATR =
alertRequireATR ?
atrOperativo :
true
condBias and condATR
alertcondition(
alertEmaCrossA and cruceAlcistaA and f_alertAllowed(),
"Cruce EMA Alcista A",
"EMA corta A cruzo ARRIBA de EMA larga A"
)
alertcondition(
alertEmaCrossA and cruceBajistaA and f_alertAllowed(),
"Cruce EMA Bajista A",
"EMA corta A cruzo ABAJO de EMA larga A"
)
alertcondition(
alertEmaCrossB and cruceAlcistaB and f_alertAllowed(),
"Cruce EMA Alcista B",
"EMA corta B cruzo ARRIBA de EMA larga B"
)
alertcondition(
alertEmaCrossB and cruceBajistaB and f_alertAllowed(),
"Cruce EMA Bajista B",
"EMA corta B cruzo ABAJO de EMA larga B"
)
alertcondition(
alertVwapCross and cruceVWAPup and f_alertAllowed(),
"Cruce VWAP Alcista",
"Precio cruzo ARRIBA del VWAP"
)
alertcondition(
alertVwapCross and cruceVWAPdown and f_alertAllowed(),
"Cruce VWAP Bajista",
"Precio cruzo ABAJO del VWAP"
)
alertcondition(
asiaHighSweep,
"Asia High Sweep",
"Barrido de liquidez sobre Asia High"
)
alertcondition(
asiaLowSweep,
"Asia Low Sweep",
"Barrido de liquidez bajo Asia Low"
)
alertcondition(
londonHighSweep,
"London High Sweep",
"Barrido de liquidez sobre London High"
)
alertcondition(
londonLowSweep,
"London Low Sweep",
"Barrido de liquidez bajo London Low"
)
alertcondition(
nyHighSweep,
"NY High Sweep",
"Barrido de liquidez sobre NY High"
)
alertcondition(
nyLowSweep,
"NY Low Sweep",
"Barrido de liquidez bajo NY Low"
)

Cuando el dato correcto produce la reacción correcta… pero el mercado se niega a confirmarla.

Cuando el dato correcto produce la reacción correcta… pero el mercado se niega a confirmarla.

October 2, 2026

ATC | Postapocalipsis fundamentales

Caso de estudio: Semana del 28 de septiembre al 2 de octubre de 2026. Corte ATC: cierre de mercado, viernes 2 de octubre, 3:00 p. m. UTC−6

Esta semana dejó una de las demostraciones más útiles que hemos encontrado para el VSM geofinanciero. No porque las correlaciones hayan funcionado perfectamente, sino precisamente porque dejaron de hacerlo.

El flujo que veníamos estudiando era:

Macro / Geopolítica → WTI → US2Y / US10Y → DXY → XAUUSD / NAS100 / J225

El error habitual sería pensar que esta cadena representa una relación matemática fija. Esta semana demostró lo contrario: el VSM sirve para localizar dónde cambia la información, dónde se interrumpe la transmisión y qué activo está dominando realmente el proceso.

Y ahora, viernes, nos dejó el laboratorio perfecto.


Aguas arriba: la semana comenzó en el petróleo, no en el oro

El lunes 28, el conflicto EE. UU.–Israel–Irán continuaba manteniendo una prima energética importante. El rechazo estadounidense a una propuesta iraní disparó inicialmente el petróleo más de $4; posteriormente, las expectativas de nuevas conversaciones moderaron el movimiento. WTI terminó en $92.60 y Brent en $105.28. Simultáneamente, el US2Y llegó aproximadamente a 4.937%, el US10Y se mantenía sobre 5%, el dólar rondaba 101.20 y Gold cayó 3.61%. Reuters

Ahí apareció el primer mapa VSM de la semana:

Riesgo geopolítico aumenta → petróleo / riesgo inflacionario aumenta → expectativa de tasas altas por más tiempo aumenta → yields aumenta → USD respaldado → Gold baja → costo de capital sube → presión sobre equities.

Esto explica algo importante: Gold no estaba negociando simplemente “guerra = refugio seguro”.

El mercado estaba procesando otra cadena: guerra → energía → inflación → Fed → yields reales/nominales → Gold.

Y esta fue nuestra primera gran lección de la semana…


El verdadero protagonista fue el mercado de los bonos.

El martes, el US10Y llegó aproximadamente a 5.27%, mientras el dólar alcanzaba niveles no vistos frente a varias monedas desde hacía más de un año. El DXY llegó alrededor de 101.40. Reuters

Para el miércoles 30, el diagnóstico ya era estructural: septiembre había sido uno de los peores meses en años para los bonos globales. El US10Y registró su mayor incremento mensual desde 2022 y, trimestralmente, su mayor aumento desde 2009. Reuters vinculó explícitamente el fenómeno con energía, inflación, crecimiento y expectativas de tipos elevados durante más tiempo. Reuters

Aquí nuestro VSM comenzó a revelar algo que terminaría siendo decisivo el viernes:

US10Y estaba convirtiéndose en el principal sensor aguas arriba.

El US2Y continuaba siendo excelente para leer expectativas inmediatas de la Fed. Pero el US10Y estaba incorporando algo mayor: Inflación energética + prima por plazo + deuda/oferta de bonos + crecimiento + riesgo fiscal + régimen global de tasas.

Por eso US2Y y US10Y no debían tratarse como un único bloque llamado “yields”.


Miércoles: Aparece la primera grieta.

El miércoles llegó un dato que, aisladamente, debería haber sido favorable para activos sensibles a tasas: la inflación PCE estadounidense de agosto resultó más moderada de lo esperado.

Eso redujo nuevamente las expectativas de una subida de la Fed en octubre. Reuters registró que el dato produjo una caída en el US2Y, aunque el mercado de bonos largos seguía sometido al régimen de inflación/energía. Reuters

Esto produjo nuestra primera correlation failure importante: esperando PCE más suave → Fed expectations bajan → US2Y baja… pero no necesariamente implicó que US10Y bajando sostenidamente.

¿Por qué?

Porque PCE estaba actuando sobre política monetaria inmediata, mientras petróleo, inflación futura y prima por plazo seguían actuando sobre el extremo largo.

Este es exactamente el tipo de desviación que un VSM permite identificar, y demuestra cómo su dinamismo es una ventaja. Y nos llevamos otra gran lección apenas a mitad de semana.


Jueves: La Fed empieza a quitar presión.

El jueves 1 de octubre, altos funcionarios de la Fed comenzaron a señalar paciencia. El vicepresidente Philip Jefferson indicó que podía ser necesario esperar más información antes de volver a modificar las tasas. Reuters registró que tanto Jefferson como John Williams se inclinaban contra una segunda subida consecutiva en octubre. Investing.com

Nuestro mapa entonces parecía bastante lógico: PCE suave + Fed paciente → probabilidad hike octubre disminuye → US2Y debería bajar → DXY debería perder impulso → Oro debería recuperar.

Y llegamos al viernes esperando que NFP resolviera la discusión. Lo hizo. Pero solo durante 45 minutos.


Viernes 6:30 a. m.: el NFP

Esto merece quedar registrado con absoluta precisión:

NFP septiembre: 29K Consenso, 90K esperado, Agosto revisado bajo de 162K a 133K*; y además Desempleo sube un punto y llega a 4.2%

  • Las revisiones de julio y agosto eliminaron 60K empleos previamente reportados. Reuters

No había ambigüedad direccional alguna. El mercado laboral había generado mucho menos empleo de lo esperado. Inmediatamente disminuyó la probabilidad de una subida de 25 pb en octubre. Al cierre, CME FedWatch situaba esa probabilidad alrededor de 22.7%, frente a 64.2% una semana antes. Reuters

La reacción fue impecablemente VSM

NFP débil → Fed hike probability disminuye → US2Y disminuye → US10Y inicialmente disminuye → DXY baja → XAUUSD sube.

En nuestro gráfico, XAUUSD produjo aproximadamente: 4,176 → 4,225 en el displacement inicial.

Article content

Y aquí apareció nuestro segundo laboratorio: volumen versus precio.

Vamos a aplicar algo de Wyckoff para este ejercicio financiero, la primera vela tuvo esfuerzo extraordinario + resultado extraordinario. Lo cual es perfectamente coherente.

Después comenzó a aparecer algo un poco diferente: volumen elevado + desplazamiento progresivamente menor. Esa fue nuestra primera advertencia.

No porque una vela roja invalidara NFP, sino porque el mercado empezaba a demostrar que cada unidad adicional de esfuerzo comprador producía menos resultado.

Estimado lector, si esta correlación entre esfuerzo y resultado a nivel financiero te parece interesante, te recomiendo leer los libros de Rubén Villahermosa Chaves.


7:30 am UTC-6 NY entra: Reacción NO es igual a Confirmación.

Esta probablemente sea la lección ATC más importante de toda la semana.

Cuando Nueva York comenzó a participar plenamente, la relación volumen-precio se volvió mucho más interpretable. El precio dejó de comportarse como una explosión algorítmica de noticia y empezó a mostrar aceptación, rechazo y eficiencia.

Nuestra zona crítica era:

  • 4,225 liquidez post-NFP
  • 4,214 Battle Line
  • 4,200 nivel de aceptación
  • 4,190–4,191 invalidación estructural
  • 4,176 origen del displacement.

Inicialmente, parecía posible construir: 4,200 defendido → HL → recuperación 4,214 → continuación.

Pero no ocurrió.

  1. El precio perdió 4,200.
  2. Después perdió 4,190.
  3. Y no regresó inmediatamente.

Eso transformó una perforación en failed acceptance. Y tuvimos el show final de la semana: la reacción macro había sido correcta y la confirmación estructural había fallado.


El correlation failure que explicó todo.

Mientras Oro devolvía el movimiento, ocurrió algo mucho más importante aguas arriba.

Los Treasury yields revirtieron su caída inicial.

Alrededor de las 2:20 p. m. ET, Reuters registró: US10Y: 5.283%, +4.93 pb y US2Y: 4.833%, +4.6 pb. Es decir: después de recibir un NFP de solo 29K, los yields terminaron subiendo. Reuters

Esta fue la anomalía que había que escuchar, pues el mercado estaba diciendo:

Sí, el empleo reduce la necesidad inmediata de otro hike. Pero eso no elimina el problema inflacionario, energético y de duration.

Y por eso tuvimos una bifurcación extraordinariamente educativa:

NFP débil → hike odds bajando ✅

NFP débil → DXY bajando ✅

Pero:

NFP débil → yields bajando sostenidamente ❌

Especialmente: US10Y sube y el Oro, pierde soporte.

Al cierre, Reuters situaba spot Gold aproximadamente en $4,140.06, −0.9%, después del rally inicial; además, terminó la semana aproximadamente en menos 3.4%. Reuters

Ese recorrido: ~4,176 → ~4,225 → ~4,140 es nuestro caso ATC de la semana.


¿Entonces el NFP “no funcionó”?

Todo lo contrario. Funcionó perfectamente como catalizador de reacción.

Lo que falló fue asumir que reacción es igual a aceptación.

Esta es una distinción crítica. Un fundamental puede explicar correctamente por qué aparece una vela sin explicar dónde terminará aceptando valor el mercado.

Nuestro flujo real fue:

NFP débil baja las expectativas de incremento de la Fed y el bono US2Y bajó inicialmente junto al DXY, y el Oro bajó hasta 4,225.

Y después agreguemos el siguiente flujo: inflación energética + sell-off global de bonos + prima por plazo bajan, US10Y recupera y supera 5.28%, US2Y también recupera; el buen Oro no consigue aceptar precio arriba de 4,200, el nivel de 4,190 falla y la estructura bajista continúa hacia el nivel de los 4,140.

Este es VSM geofinanciero, no correlación decorativa. Ahora sí, la metodología VSM empieza a demostrar que funciona donde sea.


Bonus track: ¿Qué hicieron NAS100 y J225?

Aquí aparece otra correlation failure útil.

Con NFP débil y menor probabilidad de subidas, las acciones estadounidenses sí consiguieron beneficiarse del repricing monetario. Al cierre, el Nasdaq subió 1.19%, S&P 500 0.73% y Dow 0.49%. Reuters

Eso significa que los yields altos implican automáticamente NAS100 bajando; tampoco fue una relación suficiente.

La menor probabilidad de un hike inmediato y el persistente entusiasmo por las IA consiguieron sostener equities; durante la semana los fondos de acciones estadounidenses recibieron unos $20.6 mil millones, y el Nasdaq había venido alcanzando máximos apoyado por el complejo IA. Reuters

Por eso NAS100 actuó más como sensor de apetito por crecimiento/liquidez que como simple espejo inverso del US10Y.

Para J225, el marco es todavía más complejo porque debemos incorporar: US yields → USDJPY → yen → exporters japoneses → Nikkei, pero también JGB yields + expectativa BOJ + petróleo importado.

Con USDJPY alrededor de 157.79 el viernes, el yen seguía extremadamente débil. Reuters

Eso significa que J225 continúa siendo un sensor particularmente interesante de la colisión entre yen débil favorable a exportadores y energía/tasas elevadas adversas para Japón.


Pero, ¿Quién vio primero el cambio?

Nuestro ranking ATC de sensores esta semana queda así:

1. WTI / Brent — sensor inflacionario geopolítico. Detectó el problema antes de que apareciera en las expectativas Fed.

2. US10Y — sensor dominante del régimen. Fue quien mejor explicó por qué Gold no consiguió sostener la reacción NFP.

3. US2Y — sensor Fed. Excelente para medir el repricing inmediato del FOMC, pero insuficiente por sí solo.

4. DXY — confirmación monetaria. Útil, pero esta semana Gold demostró que puede caer incluso con un dólar debilitándose si los yields largos dominan.

5. XAUUSD — activo receptor.

6. NAS100/J225 — receptores con motores propios.

Esto cambia nuestro VSM pues ya no debemos preguntar:

¿DXY confirma XAUUSD?

Debemos preguntar: ¿Qué variable aguas arriba está dominando hoy?


Post-apocalipsis fundamentales.

Después de una semana cargada de petróleo, guerra, PCE, Fed y NFP, el gráfico queda lleno de restos de narrativas.

Ahí empieza el verdadero análisis. Una vez que termina la explosión fundamental, el mercado nos deja evidencia:

¿Dónde aceptó precio? ¿Dónde rechazó? ¿Qué liquidez tomó? ¿Qué correlation failure apareció? ¿Qué sensor dejó de confirmar? ¿Qué estructura sobrevivió?

Eso es el post-apocalipsis fundamentales. No buscamos predecir qué titular vendrá ahora buscamos determinar qué narrativa sobrevivió al precio.

Conclusión

La gran lección de esta semana no fue que el NFP de 29K fuera bajista para el dólar o alcista para Gold. Eso era la parte fácil.

La lección fue descubrir que el Oro recibió correctamente esa información, subió aproximadamente $50… y después la rechazó por completo.

El mercado de bonos nos había dejado la explicación aguas arriba, pues mientras todos miraban el empleo, US10Y estaba diciendo que el problema de inflación, petróleo y duration todavía no había desaparecido.

Ahí está el valor del VSM, ya que no intenta adivinar el siguiente precio.

Intenta localizar dónde se transforma la información en flujo, dónde el flujo deja de producir resultado y qué variable está controlando realmente el sistema.

Esta semana el sensor ganador no fue el Oro, fue el bono.

Precisión sobre frecuencia. Evidencia sobre predicción. Proceso sobre resultado.

ATC — AlexTorres Consulting | VSM Geofinanciero

De la geopolítica al precio: un Value Stream Map para entender los mercados

De la geopolítica al precio: un Value Stream Map para entender los mercados

Aguas arriba explica. Aguas abajo confirma.

Por Alexander Torres Rodríguez, AT Consulting — Gestión Estratégica de Impacto y Riesgo


Hay conceptos profesionales que uno aprende para resolver un problema específico y que, años después, reaparecen en un contexto completamente distinto; y eso me ocurrió recientemente con dos expresiones que he utilizado durante años en sostenibilidad, operaciones y cadenas de suministro: “aguas arriba” y “aguas abajo”.

En gestión industrial son conceptos naturales. Si una planta enfrenta una interrupción, rara vez basta con observar dónde apareció el problema. Investigamos proveedores, materias primas, energía, transporte, inventarios, capacidad, procesos y clientes. Queremos comprender cómo se propagó una perturbación a través del sistema.

En gestión de riesgos ocurre exactamente lo mismo. Y recientemente descubrí que también es una excelente manera de interpretar los mercados financieros.

Porque cuando vemos caer el oro, subir el petróleo o reaccionar violentamente un índice tecnológico, estamos observando fundamentalmente el extremo aguas abajo de un proceso mucho más amplio.

El precio es visible, pero el precio no necesariamente es el origen. Y esa distinción cambia por completo la forma de analizar el riesgo.

Article content
De la geopolítica al precio, la película.

El error de comenzar por el precio.

Imagine una planta industrial en la que la producción disminuye 15%. Podríamos mirar inmediatamente la máquina donde apareció la pérdida e intentar corregirla. Pero un buen análisis de causa, amigas y amigos, no comienza necesariamente allí.

Tal vez el proveedor modificó una especificación. Quizás hubo una interrupción logística. Puede haber aumentado la variabilidad de una materia prima, cambiado la presión de suministro o existir una restricción en una operación anterior.

El síntoma apareció aguas abajo. La causa estaba aguas arriba.

En los mercados y resultados financieros tendemos a cometer el siguiente error cuando vemos: XAUUSD ↓ Y nos preguntamos: “¿Por qué está cayendo el oro?”

Pero podríamos formular una pregunta considerablemente más poderosa:

¿Qué ocurrió aguas arriba y mediante qué canales se transmitió hasta el oro?

Esta segunda pregunta nos debe obligar a abandonar el análisis aislado del activo y comenzar a observar el sistema.

Aquí aparece una conexión que me resulta especialmente interesante con una herramienta clásica de ingeniería:

Value Stream Mapping — VSM.

Article content
Mapa del flujo de valor macrofinanciero

Del Value Stream Map industrial al macrofinanciero.

En operaciones utilizamos un Value Stream Map para visualizar cómo fluyen materiales e información a través de un proceso.

No observamos solamente la salida. Buscamos entender un flujo:

Origen → proceso → transferencia → transformación → resultado.

Y, convenientemente, podemos aplicar en concepto la misma lógica al mercado.

Un shock geopolítico, una decisión monetaria, un problema energético o un dato de inflación constituye una entrada al sistema. Después comienzan los mecanismos de transmisión observables.

Por ejemplo:

Geopolítica ↓ Energía / commodities ↓ Expectativas de inflación ↓ Tasas y rendimientos ↓ Divisas ↓ Liquidez y valoración ↓ Activos financieros

El precio que finalmente aparece en nuestra pantalla es, en gran medida, la salida de ese proceso de transmisión. Esto es lo medible.

Por eso he comenzado a visualizarlo como un:

VSM Macrofinanciero

No pretendo afirmar que los mercados funcionen como una línea de producción determinista. Pues no lo hacen.

Su utilidad está en otra parte: obligarnos a identificar las conexiones entre causas, canales de transmisión y consecuencias antes de tomar una decisión.

Y eso nos lleva directamente a nuestra querida y siempre importante gestión de riesgos.


Aguas arriba: donde nace el riesgo.

En Enterprise Risk Management sabemos que los riesgos raramente aparecen de forma independiente y que se conectan.

Un riesgo geopolítico puede convertirse en riesgo energético, y dicho riesgo energético puede transformarse en inflación.

A su vez, la inflación puede modificar la política monetaria. Y ya sabemos, gracias a la FED, que las tasas pueden afectar el costo de capital. Y la variación del costo de capital puede modificar decisiones de inversión.

Y finalmente, todo ello puede convertirse en riesgo financiero, operacional o estratégico.

Es decir que:

un evento cambia de naturaleza conforme atraviesa el sistema.

Consideremos algunos ejemplos de factores aguas arriba:

  • Conflictos y tensiones geopolíticas;
  • Interrupciones energéticas;
  • Sanciones;
  • Cambios en políticas arancelarias;
  • Decisiones de bancos centrales;
  • Inflación y empleo (o desempleo);
  • Acuerdos o disputas comerciales;
  • Problemas de deuda y liquidez;
  • Cambios regulatorios;
  • Disrupciones tecnológicas.

El inversionista puede verlos como noticias, pero un gestor de riesgos debería verlos como fuentes potenciales de propagación.

La pregunta relevante deja de ser solamente: ¿Qué ocurrió? Para pasar a ser: ¿Por dónde puede transmitirse?


Cinco sensores para observar el sistema.

Para estudiar esa transmisión, propongo trabajar con cinco grupos de activos que cumplen funciones diferentes dentro del mapa.

El primero es WTI (Oil).

El petróleo funciona como un extraordinario sensor de energía, oferta y riesgo geopolítico. Una interrupción relevante puede elevar el precio del crudo y trasladarse a expectativas inflacionarias.

Después aparecen US2Y y US10Y.

No son simplemente tasas; haríamos mal por nuestra salud financiera futura verlas de manera tan simple. Funcionan como sensores del precio del dinero y de las expectativas del mercado sobre crecimiento, inflación y política monetaria.

El US2Y suele reaccionar especialmente a cambios en expectativas sobre la Reserva Federal; el US10Y incorpora además expectativas de crecimiento, inflación y prima por plazo.

Después tenemos DXY.

El dólar actúa como uno de los principales canales financieros de transmisión global. Diferenciales de tasas, búsqueda de liquidez y aversión al riesgo pueden modificar los flujos hacia USD y, a partir de ahí, afectar numerosos activos denominados en dólares, los famosos pares.

Y finalmente observamos tres grandes receptores aguas abajo, como ejemplos, pues son los que vengo estudiando desde hace meses:

XAUUSD, NAS100 y J225.

Cada uno responde de manera diferente. Y precisamente ahí comienza lo interesante… Veamos cada uno a continuación.


El oro demuestra por qué correlación no significa causalidad.

Una interpretación simplificada podría decir: “Hay guerra → sube el oro.” Mucha gente la hace sin darse cuenta de que hay guerras que necesitan liquidez en efectivo y más bien hay que vender reservas para hacerse rápido de efectivo para comprar recursos. Si no, pregúntale a muchos generales que perdieron guerras, no batallas, guerras; a causa de que se quedaron sin recursos.

Pero el sistema es mucho más complejo. Como te decía, un shock geopolítico puede activar simultáneamente dos o más canales.

Canal refugio

Riesgo geopolítico ↑ → aversión al riesgo ↑ → demanda de refugio ↑ → Oro ↑

Pero puede aparecer otro canal:

Canal inflación/tasas

Problema geopolítico → Oil ↑ → inflación esperada ↑ → yields ↑ → USD ↑ → costo de oportunidad del oro ↑ → Gold ↓

Mismo evento, dos mecanismos y resultados potencialmente opuestos.

Por eso el objetivo no debería ser memorizar correlaciones, sino más bien debería ser identificar:

¿Cuál es el canal dominante en este régimen de mercado?

Esta es una idea perfectamente trasladable a Enterprise Risk Management.

Dos organizaciones expuestas al mismo riesgo externo pueden experimentar consecuencias completamente diferentes debido a su estructura financiera, cadena de suministro, inventarios, cobertura, ubicación o capacidad de respuesta.

El evento no determina por sí solo el resultado. Lo determina también cómo se transmite a través del sistema.


NAS100: Cuando el costo del dinero llega a la valoración.

Ahora sigamos el flujo hacia tecnología, y supongamos:

Oil ↑ → inflación esperada ↑ → yields ↑

Una compañía tecnológica no necesita consumir grandes cantidades de petróleo para verse afectada, pero el mecanismo puede llegar por otro camino.

Tasas mayores implican mayor costo de capital y una tasa de descuento superior sobre flujos de caja futuros, y resulta que las compañías cuyo valor depende en gran medida de expectativas de crecimiento futuro pueden ser particularmente sensibles. Por eso NAS100 puede reaccionar negativamente.

Pero nuevamente debemos evitar el automatismo, pues puede existir simultáneamente:

Liderazgo tecnológico → crecimiento esperado → inversión en IA → expansión de beneficios.

Entonces aparecen fuerzas contrapuestas, y el análisis correcto no consiste en decir: “Yields arriba = NAS100 abajo.” ¡Qué fácil sería la vida, mi querido lector, si fuera así de simple!

Consiste en observar si efectivamente el mercado está transmitiendo esa relación.


J225: La misma perturbación, otra exposición.

Japón añade otra dimensión al mapa.

Es una economía fuertemente dependiente de importaciones energéticas. Por ello, un shock petrolero puede tener implicaciones distintas de las que tendría para una economía exportadora de energía.

Además intervienen: JPY + BOJ + JGB yields + comercio global + semiconductores.

Entonces un mismo shock aguas arriba puede recorrer una ruta muy diferente: Oil ↑ → costo energético japonés ↑ → presión sobre márgenes/importaciones → inflación → expectativas BOJ → JPY/JGB → J225

Aquí aparece nuevamente una lección de gestión de riesgos:

La vulnerabilidad depende tanto del peligro como de la exposición.

Dos compañías pueden enfrentar el mismo aumento energético y tener impactos radicalmente diferentes, y es lo mismo que ocurre con dos índices bursátiles.


Geopolítica: De “noticia” a mapa de transmisión.

Este enfoque cambia también la manera de leer geopolítica.

Una tensión en una ruta marítima crítica no debería analizarse simplemente como: “Riesgo geopolítico alto”.

Podemos descomponerla de nuevo en una primera ruta como esta: Evento geopolítico → posible interrupción logística → oferta energética → petróleo → inflación → expectativas monetarias → curva de rendimientos → dólar → activos.

Pero un acuerdo comercial produciría otra ruta diferente, como esta: Reducción de tensiones comerciales → riesgo ↓ → expectativas de crecimiento ↑ → cadenas de suministro más eficientes → posibles presiones inflacionarias ↓ → expectativas de tasas cambian → apetito de riesgo ↑ → índices reaccionan.

Y unas sanciones financieras podrían recorrer otra más: Sanciones → restricciones de capital → búsqueda de liquidez → USD → condiciones financieras → activos de riesgo.

Por tanto, clasificar correctamente el shock es tan importante como detectar el shock.


Aquí aparece la verdadera conexión con Enterprise Risk Management.

Hasta aquí podríamos pensar que simplemente hemos construido una metodología interesante de análisis intermarket. Pero se que en tu astucia y experiencia ya te diste cuenta de que existe una implicación mucho mayor, pues el mismo razonamiento puede utilizarse para analizar riesgos empresariales.

Pensemos en una compañía manufacturera y en cómo un conflicto geopolítico puede comenzar muy lejos de sus instalaciones y sin embargo provocar la siguiente cadena de sucesos: Geopolítica → petróleo ↑ → flete ↑ → materias primas ↑ → inflación ↑ → tasas ↑ → financiamiento ↑ → demanda ↓ → margen operativo ↓.

Lo que comenzó como riesgo geopolítico terminó convertido en:

riesgo de suministro + riesgo financiero + riesgo comercial + riesgo operacional.

Eso es propagación de riesgo, y convenientemente un VSM puede ayudarnos a visualizarla, pues en vez de preguntarnos únicamente: “¿Cuáles son nuestros riesgos?”, podemos y debemos preguntar, sin temer la respuesta: “¿Cómo fluye cada riesgo a través de nuestra cadena de valor?”

Ese pequeño cambio conceptual es enorme pues convierte el registro de riesgos en algo dinámico.


Del Risk Register al Risk Transmission Map

Muchas organizaciones poseen matrices de riesgos muy bien construidas y con colores de valoración segun la prioridad que la Junta le da a estos elementos:

  • Probabilidad.
  • Impacto.
  • Mitigación.
  • Responsable.

Pero existe una dimensión adicional que merece atención:

transmisión.

Un riesgo de baja probabilidad pero alta conectividad puede ser extraordinariamente relevante.

Entonces, permiteme añadirle unas cuantas preguntas a tu entrevista de riesgos:

¿Dónde nace? ¿Qué proceso toca primero? ¿Qué variables funcionan como indicadores adelantados? ¿Qué áreas reciben el impacto después? ¿Dónde existen buffers? ¿Dónde puede amplificarse? ¿Qué evidencia confirmaría que la transmisión comenzó?

Eso se parece mucho al análisis que hacemos observando en estos turbulentos entornos: Oil → US2Y/US10Y → DXY → XAUUSD/NAS100/J225.

Los instrumentos dejan de ser únicamente activos negociables y se convierten en sensores del sistema.


La información más valiosa puede ser una correlación que deja de funcionar.

Existe una idea especialmente poderosa, dejame exponertela.

Supongamos que históricamente esperamos: Oil ↑ → yields ↑ → DXY ↑ → Gold ↓

Pero observamos: Oil ↑ Yields ↑ DXY ↑

y, sin embargo: ¡el Oro deja de caer!

¿Qué hacemos?

La respuesta menos útil sería concluir inmediatamente que Gold debe subir y tomar decisiones equivocadas que pondran en riesgo nuestros recursos. La reacción correcta y más interesante debe ser: investigar por qué dejó de responder.

Y las respuestas son los multiples sospechosos de siempre:

  • Puede existir absorción.
  • Puede estar apareciendo demanda refugio.
  • Puede haber cambiado el posicionamiento.
  • Quizá el mercado ya descontó suficientemente el shock.
  • O quizá otro factor comenzó a dominar.

A esto podemos llamarlo correlation failure, que lejos de ser ruido, puede constituir información.

En operaciones industriales ocurre algo muy parecido: Si modificamos una variable aguas arriba y el proceso aguas abajo deja de responder como históricamente lo hacía, un ingeniero no ignora esa divergencia. La investiga.

La ausencia de la reacción esperada también es evidencia.

Article content
De la teoría a la práctica, flujo de trabajo ATC.

Del análisis a la decisión: la doctrina ATC.

Todo esto necesita terminar en una metodología de decisión, ya que un mapa sin reglas de ejecución sigue siendo solamente un mapa.

La secuencia que utilizamos puede resumirse así:

MACRO → INTERMARKET → LIQUIDITY → STRUCTURE → EXECUTION

  1. Primero identificamos qué ocurrió aguas arriba.
  2. Después determinamos qué canal de transmisión parece dominar.
  3. A continuación observamos dónde se está posicionando la liquidez.
  4. Después esperamos que la estructura del precio confirme o contradiga nuestra hipótesis.
  5. Y sólo entonces consideramos ejecución.

Esto se complementa con una segunda secuencia:

ZONA → REACCIÓN → CONFIRMACIÓN → EJECUCIÓN

Es importante este orden, pues conocer perfectamente la geopolítica no proporciona por sí mismo una entrada, entender la Reserva Federal tampoco. Ni tampoco conocer a la perfección tambien el dato de inflación solamente.

Todo eso es lo que nos está construyendo el contexto.

El precio debe confirmar que esa información está siendo transmitida de la manera esperada.


No operamos el evento. Operamos la transmisión y la reacción.

Esta probablemente sea la principal conclusión de todo el ejercicio.

  • Una noticia puede ser correcta y nuestra operación incorrecta.
  • Nuestro análisis macro puede ser correcto y el timing equivocado.
  • Incluso podemos identificar perfectamente un riesgo y equivocarnos sobre el canal que dominará.

He visto a muchos traders experimentados perder mucho dinero en los eventos de noticias como los de esta semana que recien empieza:

Article content
Calendario de noticias económicas principales para la semana del 27 de septiembre del 2026. Fuente: https://www.forexfactory.com/

Por eso permiteme separarte tres cosas en tus conceptos bases para el razonamiento:

Evento ≠ interpretación ≠ ejecución.

Sigamos esta secuencia: El evento ocurre. -> El mercado lo interpreta. ->Los diferentes activos transmiten esa interpretación. -> Y finalmente la estructura del precio nos ofrece, o no, una oportunidad.

Por eso una regla sencilla adquiere enorme importancia:

No operar el dato. Operar la reacción.


De trader a observador de sistemas.

Quizá ésta sea la lección que más me interesa:

Cuanto más estudio los mercados, menos útiles me parecen las explicaciones aisladas. De la misma manera que se estudian los flujos de valor en una operación fabril o comercial, se deberia de llegar a esta misma conclusión…

  • El oro no existe aislado del dólar.
  • El dólar no existe aislado de las tasas.
  • Las tasas no existen aisladas de inflación, empleo y política monetaria.
  • La inflación no existe aislada de energía, cadenas de suministro y geopolítica.
  • Y la geopolítica tampoco existe aislada del comercio, la tecnología y los flujos de capital.

Es un sistema trabajando engranado. Exactamente como una organización. Exactamente como una cadena de suministro. Exactamente como una economía.

Y cuando observamos un sistema, necesitamos comprender no sólo sus componentes, sino también sus interdependencias y mecanismos de transmisión.

Ahí es donde conceptos procedentes de ingeniería, sostenibilidad, gestión de riesgos y mercados financieros comienzan sorprendentemente a hablar el mismo idioma.


Aguas arriba explica. Aguas abajo confirma.

El Value Stream Mapping nació para ayudarnos a ver el flujo.

Aplicado conceptualmente al análisis macro-financiero, puede ayudarnos a ver algo que una gráfica individual difícilmente muestra:

de dónde viene el riesgo, por dónde viaja y dónde finalmente aparece.

Y aplicado a Enterprise Risk Management plantea una pregunta todavía más relevante:

¿Estamos administrando riesgos individuales o entendiendo cómo esos riesgos se propagan a través de nuestro sistema?

Probablemente necesitemos de ambas cosas.

En los mercados, observar aguas arriba proporciona contexto y observar aguas abajo proporciona evidencia. Y entre ambos existe un territorio crítico, permíteme insistir:

la transmisión.

Es precisamente allí donde una narrativa puede confirmarse, debilitarse, amplificarse o romperse.

Por eso he terminado resumiendo esta forma de pensar en dos frases:

El precio no es el origen del movimiento. Es la salida del proceso.

Y quizá ésa sea también una buena forma de entender el riesgo empresarial.

No basta con saber qué puede ocurrir. Necesitamos comprender cómo podría llegar hasta nosotros.


AT Consulting | Gestión Estratégica de Impacto y Riesgo Decisiones informadas. Riesgos gestionados. Valor sostenible.

One Process / One Risk, de pares de trading a gestión de operaciones.

One Process / One Risk, de pares de trading a gestión de operaciones.

Una lección de Gestión de Riesgos desde la experiencia del Trading Profesional.

En los laboratorios de Gestión de Riesgos utilizando operaciones de trading como mesas de juego estratégicas, estábamos discutiendo lo conveniente que es operar solo un par y salimos con una potente guía de estudio:

Pero a nosotros nos interesa más hacer una transferencia conceptual muy potente para el enfoque de gestión industrial: el principio de “Operar un solo par” puede convertirse en “Gestionar un riesgo crítico a la vez, dentro de un proceso claramente delimitado”.

La clave es no copiar el trading literalmente, sino trasladar la lógica de concentración, especialización, memoria operacional y control de exposición.

Del Trading a la Fábrica

Trading — One PairGestión de Riesgos en fábrica
Elegir un solo parConcentrarse en un proceso / línea / flujo crítico
Conocer profundamente el comportamiento del parConocer profundamente el comportamiento del proceso
VolatilidadVariabilidad del proceso
Rango diarioRango normal de variación de producción, calidad, scrap, OEE, demanda, etc.
SpreadIncertidumbre / margen de error operativo
LiquidezDisponibilidad de materiales, capacidad, recursos y respuesta
Sesión de Londres/NYVentana operativa crítica: turno, cambio de modelo, arranque, mantenimiento, etc.
Stop LossLímite de control / condición de parada
Take ProfitObjetivo operacional
Lot sizeNivel de exposición al riesgo
CuentaPatrimonio / capacidad de absorción de pérdidas de la operación
1% de riesgoMáxima exposición aceptable por evento
Multi-pairAbrir demasiados frentes simultáneamente
One-pair masteryDominio profundo de un proceso crítico

1. El concepto central cambia

En trading:

No necesitas operar todo. Necesitas dominar una cosa.

En fábrica:

No necesitas controlar todo con la misma intensidad. Necesitas identificar qué procesos pueden destruir valor y concentrar allí la gestión.

Esto cambia bastante la filosofía tradicional de gestión de riesgos.

No significa ignorar los demás procesos. Significa asignar intensidad de gestión proporcional al riesgo.

Ejemplo

Una planta puede tener:

  • Recepción de materias primas
  • mezclado
  • termoformado
  • impresión
  • corte
  • empaque
  • almacén
  • Mantenimiento
  • despacho

Pero quizá el termoformado concentra:

  • 45% del consumo energético
  • 60% del scrap
  • Mayor variabilidad de espesor
  • Mayor costo de paro
  • Mayor impacto sobre entregas.

Entonces no tendría sentido dedicar la misma energía gerencial a todos.

Ese proceso es tu “XAUUSD”.


2. “One Pair” → “One Critical Value Stream”

Aquí creo que podemos convertirlo en una herramienta propia de la metodología.

ONE CRITICAL FLOW

Primero preguntamos:

¿Dónde está concentrada la mayor exposición de valor?

Y seleccionamos un flujo crítico.

Por ejemplo:

Materia prima → Extrusión → Termoformado → Inspección → Empaque

En lugar de abrir 15 proyectos simultáneos de mejora, se estudia ese flujo de extremo a extremo.

Se busca conocerlo hasta el punto de reconocer:

  • comportamiento normal
  • comportamiento anormal
  • restricciones
  • cuellos de botella
  • variabilidad
  • pérdidas
  • modos de falla
  • señales tempranas
  • capacidad de recuperación.

Exactamente como un trader que termina conociendo profundamente el comportamiento de un solo instrumento.


3. Volatilidad → Variabilidad operacional

Esta es probablemente la equivalencia más interesante.

En trading:

Alta volatilidad ≠ necesariamente mala.

Significa que el instrumento se mueve más y exige una gestión de riesgo diferente.

En fábrica:

Alta variabilidad ≠ necesariamente un proceso malo.

Pero sí significa que exige mayor control y mayor capacidad de absorción.

Por ejemplo:

VariableProceso estableProceso volátil
Scrap2–3%2–12%
Velocidad98–102% estándar75–115%
Espesor±2%±8%
Paros1 h/semana8 h/semana
Consumo energéticoestablealtamente variable

El error gerencial sería decir:

“Este proceso tiene problemas.”

La pregunta correcta sería:

“¿Cuál es su distribución normal de comportamiento y cuándo deja de ser normal?”

Eso es exactamente lo que hace un trader profesional con la volatilidad.


4. El Stop Loss industrial

Aquí podemos hacer una conexión especialmente poderosa para tu curso.

Un trader define:

“Si llega aquí, mi hipótesis quedó invalidada.”

En una operación industrial:

“Si llegamos aquí, nuestra condición de operación dejó de ser aceptable.”

Ejemplos:

Seguridad

  • Vibración > límite
  • Temperatura > límite
  • presión > límite
  • concentración > límite

Calidad

  • defecto > X%
  • dimensión fuera de especificación
  • tendencia de rechazo creciente

Producción

  • OEE < determinado nivel
  • velocidad < capacidad mínima
  • backlog > límite

Mantenimiento

  • MTBF cayendo
  • MTTR aumentando
  • condición crítica detectada.

Entonces:

STOP LOSS = condición objetiva de intervención.

No es una opinión del supervisor.


5. El gran error: “Multi-Pair Management”

Aquí la analogía se vuelve brutalmente útil para una gerencia.

El trader abre:

EUR/USD + XAU/USD + GBP/JPY + BTC + NASDAQ + petróleo…

y termina sin conocer realmente ninguno.

En fábrica sucede algo equivalente:

Lean + TPM + SMED + energía + scrap + digitalización + mantenimiento + seguridad + ESG + inventarios + productividad…

todo simultáneamente.

Resultado:

  • muchas reuniones
  • muchos KPIs
  • muchos proyectos
  • poca profundidad
  • poca ejecución
  • fatiga organizacional.

Es el equivalente industrial de tener 12 gráficos abiertos.


6. One-Pair → One Operational Focus

Podríamos establecer una regla:

ONE OPERATIONAL FOCUS

En cada ciclo de gestión:

1 proceso crítico
↓
1 problema dominante
↓
1 hipótesis causal
↓
1 conjunto de controles
↓
1 ventana de observación
↓
1 decisión

No significa que la fábrica deje de operar el resto.

Significa que la capacidad cognitiva de la organización se concentra donde el impacto marginal de la gestión es mayor.


7. Y aquí aparece el concepto de “Risk Budget”

En trading:

No puedo arriesgar más del 1% de mi cuenta.

En fábrica:

No puedo permitir que un evento de determinado tipo consuma más de X% de mi capacidad, margen, servicio o seguridad operacional.

Podríamos construir un Operational Risk Budget:

Riesgo financiero

  • $ máximo de pérdida

Riesgo de capacidad

  • horas máximas de paro

Riesgo de calidad

  • % máximo de scrap/rechazo

Riesgo de servicio

  • pedidos máximos afectados

Riesgo energético

  • desviación máxima kWh/unidad

Riesgo ambiental

  • desviación máxima de emisiones/residuos

Riesgo de seguridad

  • tolerancia cero para ciertos eventos críticos

Y aquí hay una precisión importante:

No todos los riesgos pueden tratarse con un porcentaje.

En seguridad de personas, cumplimiento legal o riesgos catastróficos, el criterio puede ser ALARP, eliminación, ingeniería de controles o tolerancia cero, no simplemente “aceptar 1%”.


8. Las dos preguntas del “One Pair” se vuelven industriales

Nuestros estudios en Trading utilizan dos preguntas:

Q1 —¿Cuál es tu cuenta?

En fábrica:

¿Cuál es tu capacidad de absorción?

¿Estamos hablando de una línea de:

  • $100k/hora de producción?
  • $500k de inventario?
  • 8 horas de capacidad?
  • 2 días de inventario?
  • 50,000 unidades/día?

Q2 —¿Cuándo puedes operar?

En trading:

La sesión determina tu ventaja.

En fábrica:

La condición operacional determina tu exposición.

Por ejemplo:

  • arranque
  • cambio de formato
  • cambio de materia prima
  • turno nocturno
  • mantenimiento
  • alta demanda
  • producto nuevo
  • proveedor nuevo.

Una línea que normalmente tiene un riesgo bajo puede convertirse en alta exposición durante un cambio de formato.


9. El equivalente industrial de “Master the One Pair”

Podría quedar así:

No necesitas controlar cada variable al mismo nivel. Necesitas dominar las variables que controlan el comportamiento del proceso.

Y eso nos lleva directamente a Value Stream Mapping + Risk Management.

Primero:

¿Dónde se crea valor?

Después:

¿Dónde puede destruirse valor?

Después:

¿Qué variables anuncian que estamos entrando en una zona peligrosa?

Y finalmente:

¿Qué acción debemos ejecutar antes de que ocurra la pérdida?

Eso ya no es simplemente gestión de riesgos.

Es gestión anticipada de la variabilidad del flujo de valor.


10. Y ahora esto se convierte en una herramienta propia para la Gestión de Riesgo y a la Administración de las Operaciones

Esta es una versión industrial de la guía:

GUÍA ESENCIAL — OPERAR UN SOLO PROCESO

① ELIGE TU FLUJO CRÍTICO

¿Dónde está concentrado el mayor impacto?

② CONOCE SU COMPORTAMIENTO

¿Cuál es su variabilidad normal?

③ DEFINE SU EXPOSICIÓN

¿Cuánto valor puede perderse?

④ IDENTIFICA SUS SEÑALES

¿Qué indicadores anticipan la desviación?

⑤ DEFINE TU STOP OPERACIONAL

¿Cuándo debes intervenir?

⑥ OPERA CON FOCO

Un problema crítico → una hipótesis → una acción.

⑦ DOMINA ANTES DE ESCALAR

Primero estabilizar → después optimizar → finalmente replicar.

Cerrando con una frase equivalente a la del trading:

“No necesitas mejorar toda la fábrica. Necesitas dominar el flujo que más valor puede destruir.”

Validación Post-Ejecución del Pronóstico Institucional

Validación Post-Ejecución del Pronóstico Institucional

XAUUSD — Semana del 13 al 17 de julio de 2026

Metodología evaluada: ATC Suite (ATC Radar Institucional + Institutional Scoring Engine + Decision Matrix + Executive Brief)

Objetivo de la revisión

Evaluar objetivamente la calidad del análisis emitido antes de la apertura semanal, contrastándolo con el comportamiento real del mercado, e identificar oportunidades de mejora bajo principios de mejora continua, Lean Thinking y gestión profesional del riesgo.

Resumen Ejecutivo

La revisión evidencia que el análisis institucional anticipó correctamente el contexto macro, las zonas de liquidez relevantes y la secuencia operacional esperada, aun cuando durante la semana el mercado estuvo influenciado por noticias macroeconómicas y geopolíticas que incrementaron la volatilidad.

Desde una perspectiva de gestión de riesgos, el modelo no buscó predecir cada movimiento, sino identificar dónde existía mayor probabilidad de intervención institucional y dónde el riesgo era más eficiente.

Ese objetivo se cumplió de forma satisfactoria.

Comparación Pronóstico vs Realidad

AspectoPronósticoResultadoEvaluación
Contexto HTF bajistaSíSí✅ Excelente
Zona institucional 4005–3980Identificada previamenteRespetada y generó rebote✅ Excelente
Esperar evidencia antes de comprarSíCorrecto✅ Excelente
Rebote técnico desde demandaProbableOcurrió✅ Correcto
Evitar compras en mitad del rangoSíCorrecto✅ Excelente
Zona de venta 4135–4160MarcadaPrecio aún no la alcanza⏳ Pendiente
Zona institucional 4185–4215Marcada como decisión mayorAún no visitada⏳ Vigente

Validación de Hipótesis

Hipótesis 1

La zona 4005–3980 concentraba liquidez institucional.

Resultado

Confirmada.

El mercado descendió directamente hacia esa región.

Posteriormente apareció absorción de ventas y comenzó un rebote.

Esto coincide con la lectura de:

  • Discount
  • Buy Side Liquidity
  • Mitigation
  • Demand Zone

Evaluación

✅ Confirmada

Hipótesis 2

No existía confirmación para compras antes de llegar a demanda.

Resultado.

Correcto.

Comprar antes de alcanzar la zona hubiera significado asumir riesgo innecesario.

El mercado continuó cayendo exactamente hasta la región institucional.

Evaluación

✅ Confirmada

Hipótesis 3

El contexto HTF seguía siendo bajista.

Resultado.

Aunque apareció un rebote importante, la estructura principal continúa descendente.

En H4 todavía no existe evidencia suficiente de reversión estructural.

Evaluación

✅ Confirmada

Validación del Institutional Scoring Engine

Score emitido

56 /100

Clasificación

WATCH

En retrospectiva, este puntaje fue consistente con el desarrollo del mercado.

No existía suficiente evidencia para aprobar un escenario Premium.

El mercado permaneció:

  • lateral
  • correctivo
  • dependiente de noticias

El ISE evitó clasificar prematuramente un escenario como institucional.

Evaluación

Excelente calibración del modelo.

Gestión del Riesgo

Uno de los mayores aciertos fue que el modelo priorizó:

Esperar evidencia.

En vez de:

Anticipar el rebote.

Desde una óptica de Risk Management, esto reduce:

  • operaciones innecesarias
  • entradas impulsivas
  • drawdowns evitables
  • exposición emocional

En términos Lean, esto equivale a eliminar desperdicio operativo (muda) derivado de decisiones sin confirmación.

Influencia de Eventos Exógenos

Durante la semana existieron movimientos acelerados asociados a:

  • noticias geopolíticas,
  • fortaleza/debilidad del DXY (visible en el gráfico aportado),
  • expectativas macroeconómicas sobre el dólar.

Estos factores generaron volatilidad adicional que no puede inferirse únicamente desde la estructura técnica.

No obstante, el modelo mantuvo su utilidad porque delimitó previamente las zonas donde esa volatilidad tenía mayor probabilidad de encontrar respuesta institucional.

Oportunidades de Mejora

1. Incorporar un Índice de Riesgo Macroeconómico (MRI)

El análisis podría incluir un indicador cualitativo que clasifique la semana según exposición a eventos externos:

  • 🟢 Baja volatilidad esperada
  • 🟡 Moderada
  • 🔴 Alta (CPI, FOMC, NFP, conflictos geopolíticos, etc.)

Esto ayudaría a ajustar expectativas sin alterar la lectura estructural.

2. Medir la precisión de las zonas

Conviene comenzar a registrar métricas como:

  • porcentaje de reacción por zona,
  • profundidad máxima de penetración,
  • tiempo hasta la reacción,
  • extensión del movimiento posterior.

Con suficientes muestras, ATC Suite podría construir estadísticas propias sobre la eficacia de sus zonas institucionales.

3. Crear un KPI de «Calidad del Pronóstico»

Más allá de acertar la dirección, evaluar:

  • precisión de niveles,
  • calidad del contexto,
  • gestión del riesgo,
  • eficiencia de las entradas,
  • control del drawdown.

Esto alinearía el análisis con métricas ejecutivas, no solo con resultados de mercado.

Lecciones Aprendidas

La revisión refuerza varios principios fundamentales de la metodología:

  • El contexto prevalece sobre la entrada.
  • Las zonas institucionales son áreas de evaluación, no órdenes automáticas.
  • La confirmación reduce riesgo, aunque implique entrar más tarde.
  • La calidad del proceso es más importante que el resultado aislado de una operación.

Conclusión

Desde una perspectiva de gobierno, gestión de riesgos y mejora continua, la metodología ATC Suite mostró un desempeño sólido durante la semana evaluada.

Los principales logros fueron:

  • anticipación correcta de las zonas de mayor interés institucional;
  • preservación del contexto bajista de alta temporalidad;
  • evitación de entradas prematuras mediante un enfoque basado en evidencia;
  • adecuada calibración del Institutional Scoring Engine (clasificación WATCH), coherente con un mercado sin confirmación estructural alcista.

Las oportunidades identificadas se orientan a fortalecer la metodología mediante la integración de variables macroeconómicas y la creación de indicadores cuantitativos de desempeño.

Evaluación global del proceso

DimensiónResultado
Precisión del contexto HTF9.5/10
Precisión de zonas institucionales9.5/10
Gestión del riesgo10/10
Adaptabilidad a volatilidad exógena8.5/10
Calidad metodológica9.5/10
Calificación global9.4/10

Siguientes pasos.

El siguiente paso natural para ATC Suite es evolucionar desde una herramienta de análisis hacia un sistema medible de inteligencia institucional. Cada pronóstico debería registrarse y auditarse posteriormente, generando indicadores históricos de precisión, eficacia de las zonas, control del riesgo y comportamiento bajo distintos regímenes de mercado. Ese enfoque convertiría la metodología en un sistema de mejora continua basado en evidencia, comparable a un cuadro de mando integral utilizado por una organización para optimizar sus procesos.

📊 XAUUSD | ¿Rebote técnico o continuación de la distribución institucional?

📊 XAUUSD | ¿Rebote técnico o continuación de la distribución institucional?

Este fin de semana contrastamos dos enfoques diferentes de lectura del mercado sobre XAUUSD.

El primero, una lectura técnica tradicional realizada por uno de los Directivos que toma el curso de Gestión de Riesgos bajo enfoque de Trading, basada en estructura multi-timeframe y niveles operativos.

El segundo, mi análisis mediante ATC Suite, una metodología enfocada en Smart Money Concepts (SMC), ICT, Wyckoff, Order Flow y evaluación institucional basada en evidencia estructural.

Lo interesante es que, aunque ambos parten de metodologías distintas, las conclusiones convergen en los niveles clave.

Coincidencias más relevantes

🔴 Contexto Macro

La estructura de fondo continúa siendo correctiva.

Aunque aparecen rebotes en temporalidades menores, el contexto de mayor jerarquía (D1 y H4) todavía mantiene presión bajista.

En gestión profesional del riesgo, el contexto siempre tiene prioridad sobre la entrada.


🟢 Zona de soporte institucional

Ambos análisis identifican como área crítica:

4005 – 4040

Desde la óptica institucional, esta zona concentra:

✅ Liquidez compradora (SSL)

✅ Mitigation Blocks

✅ Descuento (Discount)

✅ Probable absorción de órdenes

Mientras esta región permanezca defendida, el mercado conserva capacidad para generar rebotes técnicos.


🔴 Zona de oferta institucional

La primera zona donde esperaríamos presión vendedora es:

4135 – 4160

Y la verdadera prueba institucional continúa siendo:

4185 – 4215

En ATC Suite esta región reúne varios factores de confluencia:

• Bearish Order Blocks

• Liquidez de Buy Side

• Posible mitigación institucional

• Confluencia dinámica con medias

• Zona Premium del rango actual

No significa que el precio deba caer allí.

Significa que es donde tendría sentido que los participantes institucionales vuelvan a decidir.


Escenario con mayor probabilidad

La evidencia visible sugiere el siguiente flujo:

1️⃣ Impulso hacia 4135–4160.

2️⃣ Si el momentum continúa, extensión hacia 4185–4215.

3️⃣ En esa región evaluar:

  • Confirmación de ruptura (BOS + CHOCH + aceptación).
  • Rechazo institucional.
  • Distribución.
  • Toma de beneficios.

No anticipar.

Esperar evidencia.


Lo que muestra el Institutional Scoring Engine (ISE)

Nuestro modelo cuantitativo asigna actualmente un escenario WATCH (56/100).

¿Por qué?

Porque todavía no existe suficiente evidencia para clasificar el mercado como un setup institucional de alta calidad.

Aspectos pendientes:

  • CHOCH confirmado.
  • Market Structure Shift validado.
  • BOS alcista de mayor jerarquía.
  • Recuperación sostenida de la zona 4185–4215.

Hasta entonces, el sesgo estratégico sigue siendo de observación, no de persecución del precio.


La diferencia entre operar y gestionar riesgo

Muchos traders preguntan:

«¿Compra o venta?»

Los participantes institucionales hacen una pregunta distinta:

¿Existe suficiente evidencia para asumir este riesgo?

Ese cambio de enfoque transforma por completo la toma de decisiones.

En ATC Suite no buscamos adivinar el siguiente movimiento.

Buscamos determinar si el mercado ofrece una ventaja estadística respaldada por estructura, liquidez y contexto.

Porque en los mercados, como en la gestión empresarial, una buena decisión no siempre produce un buen resultado; pero una mala metodología casi siempre termina produciendo malos resultados.


Zonas a vigilar durante la semana

🟢 Compradores

  • 4085–4065
  • 4040–4020
  • 4005–3980

🔴 Vendedores

  • 4135–4160
  • 4185–4215

La clave no será el nivel en sí, sino cómo reaccione el precio cuando llegue a él.

La evidencia sigue teniendo la última palabra.


Análisis desarrollado mediante ATC Suite — ATC Radar Institucional + Institutional Scoring Engine + Decision Matrix + Executive Brief.

#XAUUSD #Gold #Trading #SmartMoney #ICT #SMC #OrderFlow #RiskManagement #TechnicalAnalysis #TradingView #ATCSuite #InstitutionalTrading #Liquidity #Wyckoff #alextorresconsulting

Alertas Institucionales con SMC: Mejora tu Trading

Alertas Institucionales con SMC: Mejora tu Trading

Este script SMC_BOS_FVG_OB_Pinbar_Sessions_Alerts, es un modelo institucional diseñado para identificar zonas de alta probabilidad basadas en estructura, liquidez y confirmación de intención. Su objetivo es estandarizar la lectura del mercado y ejecutar únicamente cuando se cumplen condiciones institucionales verificables.

A continuación, el manual que documenta la metodología, reglas operativas y ejemplos visuales para su aplicación profesional.

🎯 Objetivo

Este enfoque se fundamenta en:

  • Identificar dónde el mercado toma liquidez.
  • Esperar una ruptura estructural real (BOS).
  • Confirmar intención mediante pinbar institucional.
  • Ejecutar únicamente en mitigación institucional (FVG u OB).
  • Validar con la siguiente vela.
  • Filtrar por RR mínimo y sesión operativa.

Este proceso tiene el objetivo de eliminar ruido, reducir entradas falsas y alinear la ejecución con el comportamiento de mesas institucionales.

⚙️ Configuración Inicial

ParámetroDescripciónRecomendación
Left / Right barsSensibilidad de pivotes2–3 para intradía
RR mínimoRatio mínima para alertar entrada1.5 o superior
SesiónFiltro horarioAsia / Londres / NY según tu operativa
Dibujar zonaVisualización de FVG/OBActivado para backtest, desactivado para ejecución
AlertasActivar/desactivar eventosMantén activadas las de entrada y toque

🔍 Jerarquía de Confirmación

  1. Liquidity Taken → se limpia un extremo previo.
  2. Break of Structure (BOS) → ruptura real del último swing.
  3. Pinbar → rechazo fuerte institucional.
  4. Zona más cercana (FVG u OB) → punto de mitigación.
  5. Toque real de zona → precio entra en la zona.
  6. Confirmación de la siguiente vela → dirección validada.
  7. RR ≥ X y sesión válida → entrada activada.

🧩 Alertas Institucionales

El sistema genera alertas para:

  • BOS
  • Pinbar
  • Toque
  • Entrada

Cada alerta incluye:

  • Dirección (LONG/SHORT)
  • Entry
  • SL
  • TP
  • RR
  • Sesión

Esto permite operar sin estar pegado al gráfico.

TipoDescripciónMensaje 
BOSRuptura estructural“BOS ALCISTA/BAJISTA detectado” 
PinbarRechazo fuerte“Pinbar ALCISTA/BAJISTA detectado” 
ToqueMitigación real“TOQUE de zona (LONG/SHORT)” 
EntradaConfirmación completa“ENTRY LONG/SHORT ACTIVADAEntry: XSL: YTP: ZRR: nSesión: NY”

🧠 Interpretación Visual

  • Líneas amarillas: FVG (rango de desequilibrio).
  • Líneas naranjas: OB (última vela institucional).
  • Líneas rojas / verdes: SL y TP.
  • Línea amarilla continua: punto de entrada.

🧩 Reglas de Ejecución

  • No se anticipan entradas.
  • No se opera sin BOS.
  • No se opera sin pinbar.
  • No se opera sin toque real.
  • No se opera sin confirmación de la siguiente vela.
  • No se opera si RR < mínimo.
  • No se opera fuera de sesión.
  • SL siempre en el swing que generó la liquidez.
  • TP automático a 2R.

🧮 Optimización sugerida

SesiónCaracterísticasRecomendación
AsiaRango y acumulaciónPreparar liquidez
LondresExpansiónMayor frecuencia de BOS
NYManipulaciónMejor confirmación

Conclusiones

El sistema SMC Sniper permite ejecutar con precisión institucional, eliminando ruido y estandarizando la lectura del mercado. Su fortaleza radica en la secuencia lógica y la disciplina operativa.

Script para Pine

//@version=5
indicator("SMC_BOS_FVG_OB_Pinbar_Sessions_Alerts", overlay = true, max_labels_count = 500, max_lines_count = 500)
//---------------------------------------------------------
// INPUTS
//---------------------------------------------------------
left = input.int(2, "Left bars")
right = input.int(2, "Right bars")
showZone = input.bool(true, "Dibujar zona elegida (FVG u OB)")
// Alertas
alertBOS = input.bool(true, "Alerta: BOS detectado")
alertPinbar = input.bool(true, "Alerta: Pinbar detectado")
alertTouch = input.bool(true, "Alerta: Toque de zona")
alertEntry = input.bool(true, "Alerta: Entrada confirmada")
// Filtro de RR mínimo (ratio)
minRR = input.float(1.5, "RR minimo para alertar entrada", step = 0.1)
// Filtro de sesión
sessionChoice = input.string("Londres", "Sesion para alertar entrada", options = ["Asia", "Londres", "Nueva York"])
//---------------------------------------------------------
// SESIONES (ajusta horarios a tu broker si hace falta)
//---------------------------------------------------------
asiaSession = time(timeframe.period, "1800-0000")
londonSession = time(timeframe.period, "0200-0500")
newYorkSession = time(timeframe.period, "0700-1100")
inAsia = not na(asiaSession)
inLondon = not na(londonSession)
inNewYork = not na(newYorkSession)
sessionOK =
(sessionChoice == "Asia" and inAsia) or
(sessionChoice == "Londres" and inLondon) or
(sessionChoice == "Nueva York" and inNewYork)
//---------------------------------------------------------
// 1. Swings (estructura + liquidez)
//---------------------------------------------------------
swingHigh = ta.pivothigh(high, left, right)
swingLow = ta.pivotlow(low, left, right)
var float lastHigh = na
var float lastLow = na
if not na(swingHigh)
lastHigh := swingHigh
if not na(swingLow)
lastLow := swingLow
//---------------------------------------------------------
// 2. Liquidity Taken
//---------------------------------------------------------
liqBuy = not na(lastHigh) and high > lastHigh
liqSell = not na(lastLow) and low < lastLow
//---------------------------------------------------------
// 3. BOS
//---------------------------------------------------------
bosBull = liqBuy and close > lastHigh
bosBear = liqSell and close < lastLow
//---------------------------------------------------------
// 4. FVG
//---------------------------------------------------------
bullFVG = low[1] > high[2]
bearFVG = high[1] < low[2]
var float fvgTop = na
var float fvgBot = na
if bullFVG
fvgTop := low[1]
fvgBot := high[2]
if bearFVG
fvgTop := high[2]
fvgBot := low[1]
//---------------------------------------------------------
// 5. OB (Order Block)
//---------------------------------------------------------
var float obHigh = na
var float obLow = na
if bosBull
obHigh := high[1]
obLow := low[1]
if bosBear
obHigh := high[1]
obLow := low[1]
//---------------------------------------------------------
// 6. Pinbar Confirmation
//---------------------------------------------------------
body = math.abs(close - open)
upperWick = high - math.max(close, open)
lowerWick = math.min(close, open) - low
pinbarBull = lowerWick >= body * 2 and close > open
pinbarBear = upperWick >= body * 2 and close < open
//---------------------------------------------------------
// 7. ELECCION AUTOMATICA: FVG u OB (la mas cercana)
//---------------------------------------------------------
var float zone = na
var bool isFVG = false
// LONG
if bosBull and pinbarBull and not na(fvgBot) and not na(obHigh)
distFVG = math.abs(close - fvgBot)
distOB = math.abs(close - obHigh)
if distFVG < distOB
zone := fvgBot
isFVG := true
else
zone := obHigh
isFVG := false
// SHORT
if bosBear and pinbarBear and not na(fvgTop) and not na(obLow)
distFVG = math.abs(close - fvgTop)
distOB = math.abs(close - obLow)
if distFVG < distOB
zone := fvgTop
isFVG := true
else
zone := obLow
isFVG := false
//---------------------------------------------------------
// 8. TOQUE DE ZONA
//---------------------------------------------------------
touch = not na(zone) and low <= zone and high >= zone
//---------------------------------------------------------
// 9. CONFIRMACION DE LA SIGUIENTE VELA
//---------------------------------------------------------
bullNextConfirm = touch[1] and close > open and close > (low + (high - low) * 0.5)
bearNextConfirm = touch[1] and close < open and close < (high - (high - low) * 0.5)
//---------------------------------------------------------
// 10. ENTRADA FINAL + RR (ratio)
//---------------------------------------------------------
var float entry = na
var float sl = na
var float tp = na
var float rrRatio = na
// LONG
if bullNextConfirm
entry := zone[1]
sl := lastLow
tp := entry + (entry - sl) * 2.0
risk = math.abs(entry - sl)
reward = math.abs(tp - entry)
rrRatio := risk > 0 ? reward / risk : na
// SHORT
if bearNextConfirm
entry := zone[1]
sl := lastHigh
tp := entry - (sl - entry) * 2.0
risk = math.abs(sl - entry)
reward = math.abs(entry - tp)
rrRatio := risk > 0 ? reward / risk : na
//---------------------------------------------------------
// 11. DIBUJAR ZONA ELEGIDA
//---------------------------------------------------------
if showZone and not na(zone)
if isFVG
line.new(bar_index, fvgTop, bar_index - 1, fvgTop, extend = extend.right, color = color.new(color.yellow, 70))
line.new(bar_index, fvgBot, bar_index - 1, fvgBot, extend = extend.right, color = color.new(color.yellow, 70))
else
line.new(bar_index, zone, bar_index - 1, zone, extend = extend.right, color = color.new(color.orange, 70))
//---------------------------------------------------------
// 12. PLOTS
//---------------------------------------------------------
plot(entry, "Entry", color = color.new(color.yellow, 0), style = plot.style_linebr)
plot(sl, "SL", color = color.new(color.red, 0), style = plot.style_linebr)
plot(tp, "TP", color = color.new(color.green, 0), style = plot.style_linebr)
//---------------------------------------------------------
// 13. ALERTAS INSTITUCIONALES (simplificadas)
//---------------------------------------------------------
// BOS
if alertBOS and bosBull
alert("BOS ALCISTA detectado (LONG)", alert.freq_once_per_bar)
if alertBOS and bosBear
alert("BOS BAJISTA detectado (SHORT)", alert.freq_once_per_bar)
// PINBAR
if alertPinbar and pinbarBull
alert("Pinbar ALCISTA detectado", alert.freq_once_per_bar)
if alertPinbar and pinbarBear
alert("Pinbar BAJISTA detectado", alert.freq_once_per_bar)
// TOQUE
if alertTouch and touch
dir = bosBull ? "LONG" : bosBear ? "SHORT" : "NA"
alert("TOQUE de zona (" + dir + ")", alert.freq_once_per_bar)
// ENTRADA FINAL (con filtros RR + sesion)
entryLong = bullNextConfirm and not na(rrRatio) and rrRatio >= minRR and sessionOK
entryShort = bearNextConfirm and not na(rrRatio) and rrRatio >= minRR and sessionOK
if alertEntry and entryLong
msgLong = "ENTRY LONG | Entry: " + str.tostring(entry, format.mintick) +
" | SL: " + str.tostring(sl, format.mintick) +
" | TP: " + str.tostring(tp, format.mintick) +
" | RR: " + str.tostring(rrRatio, format.mintick) +
" | Sesion: " + sessionChoice
alert(msgLong, alert.freq_once_per_bar)
if alertEntry and entryShort
msgShort = "ENTRY SHORT | Entry: " + str.tostring(entry, format.mintick) +
" | SL: " + str.tostring(sl, format.mintick) +
" | TP: " + str.tostring(tp, format.mintick) +
" | RR: " + str.tostring(rrRatio, format.mintick) +
" | Sesion: " + sessionChoice
alert(msgShort, alert.freq_once_per_bar)

Ejemplo visual

En esta imagen vemos la entrada un poco mas arriba de la línea amarilla (por el lag de tiempo del trader), luego del ticker Alcista, triangulo verde a las 820 del 20262005  (este viene del script publicado antes de esta publicación: https://alextorres.consulting/2026/05/15/como-leer-el-mercado-integracion-del-panel-multitimeframe/), nos indica un TP que se cumple una hora después (20260520 0915) y sin tocar SL (línea roja en el gráfico), en un momento volátil del XAUUSD ese 20 de mayo del 2026 que se esperaba las FOMC Meeting Minutes a las 12 pm:

Ilustraciòn tomada de https://www.forexfactory.com

Cómo Leer el Mercado: Integración del Panel Multitimeframe

Cómo Leer el Mercado: Integración del Panel Multitimeframe

Integración del Panel Multitimeframe y el Mapa de Sesiones

🧠 1. Fundamento Institucional

El mercado no se mueve por azar.
Cada desplazamiento responde a intenciones institucionales: acumulación, manipulación y distribución.
El objetivo del trader profesional es leer esas intenciones, no adivinarlas.

Por eso, este sistema combina dos herramientas:

  • Panel Multitimeframe Institucional → lectura fractal de tendencia y fuerza.
  • Mapa de Sesiones → lectura contextual de comportamiento por zonas horarias (Asia, Londres, Nueva York).

Juntas forman una visión completa del flujo institucional:
quién mueve el mercado, cuándo lo hace y hacia dónde lo empuja.

🧩 2. Estructura del análisis

Paso 1 – Análisis macro (D1 y H4)

Empieza con las temporalidades mayores; luego de que la sesión de Nueva York lleva al menos 30 minutos, yo opero en el horario diurno de América.
Dibuja las zonas clave: FVG, fractalidad, order blocks, zonas de liquidez.
Estas líneas son tu mapa institucional: muestran dónde el dinero grande entra o sale.

El Sesgo General del panel te indica si esas zonas están alineadas con el flujo institucional.
Si el sesgo es 🟢 alcista, prioriza zonas de demanda (long o compras); si es 🔴 bajista, enfócate en zonas de oferta (short o ventas).

Paso 2 – Contexto de sesiones

Usa el Mapa de Sesiones para observar cómo actuaron las tres principales zonas horarias:

  • Asia → acumulación o manipulación inicial.
  • Londres → expansión o ruptura.
  • Nueva York → distribución o reversión.

El panel te muestra qué sesión fue la más volátil y su dirección.
Esto te permite entender quién tuvo el control del día y si el movimiento actual tiene respaldo institucional.

Paso 3 – Ejecución operativa (3 m – 5 m – 1 m)

Aquí entra la precisión.
Operas solo con la tendencia del panel inferior izquierdo.
Esperas una reversión local (bajista → alcista o viceversa) y entras con confirmación.

Tu entrada se apoya en:

  • Cambio de color o dirección en el panel.
  • Reacción en zona institucional (FVG, order block, fractal).
  • Confirmación sobre VWAP.

El Sesgo General actúa como filtro maestro:
si el sesgo es alcista, tus compras tienen respaldo institucional; si es bajista, tus ventas están alineadas con el flujo dominante.

⚙️ 3. Fundamento técnico del Sesgo General

La línea Sesgo General resume el comportamiento de las cuatro temporalidades clave (D1, H4, H1, M15) en una sola lectura ejecutiva. Su función es mostrar la coherencia o divergencia institucional entre los distintos marcos de análisis.

🧩 Qué mide exactamente?

  1. Cuenta cuántos timeframes están alineados en dirección alcista o bajista.
  2. Evalúa la fuerza institucional del movimiento:
    • Si 3 o 4 TF coinciden → tendencia sólida y con respaldo institucional.
    • Si 2 TF coinciden → mercado mixto o en transición.
    • Si 1 TF domina → ruido o manipulación local.
  3. Asigna color y texto dinámico:
    • 🟢 Verde → mayoría alcista (sesgo comprador).
    • 🔴 Rojo → mayoría bajista (sesgo vendedor).
    • 🟡 Amarillo → mixto o indeciso.

⚙️ Cómo se interpreta operativamente

SituaciónLectura del Sesgo GeneralAcción sugerida
🟢 Alcista 3/4 TF o 4/4 TFAlta coherencia institucionalBuscar entradas en retrocesos alcistas o confirmaciones sobre VWAP
🔴 Bajista 3/4 TF o 4/4 TFSesgo vendedor dominanteBuscar ventas en retrocesos bajistas o rupturas bajo VWAP
🟡 Mixto 2/4 TFMercado en transiciónEsperar confirmación o consolidación antes de operar

💡 Ventaja institucional

El Sesgo General te da una visión macro instantánea sin cambiar de gráfico. Es como tener un “panel de control” que te dice si el mercado está alineado o fragmentado, permitiéndote:

  • Filtrar operaciones que van contra el flujo institucional.
  • Evitar entradas en zonas de indecisión.
  • Sincronizar tus setups con la dirección dominante del día.

🧘 4. Psicología y disciplina

El Sesgo General también cumple una función psicológica:
te obliga a esperar confirmación, evitando el overtrading y el revenge trading.

  • Si el sesgo no está alineado, no operas.
  • Si el sesgo cambia, revalúas.
  • Si el sesgo confirma, ejecutas con convicción.

La paciencia se convierte en tu ventaja institucional.
Operas solo cuando el mercado y las temporalidades están sincronizados.

5. Scripts utilizados en Pine de TradingView

Panel

//@version=5
indicator("EMAs personalizables + VWAP + Cruces (Modular)", overlay=true)
// === INPUTS DE VISIBILIDAD ===
showEmaShort = input.bool(true, "Mostrar EMA corta")
showEmaLong = input.bool(true, "Mostrar EMA larga")
showVWAP = input.bool(true, "Mostrar VWAP")
showSignals = input.bool(true, "Mostrar cruces")
// === INPUTS DE PERIODOS ===
emaShortLen = input.int(9, "Periodo EMA corta", minval=1)
emaLongLen = input.int(21, "Periodo EMA larga", minval=1)
// === INPUTS DE COLORES ===
emaShortColor = input.color(color.blue, "Color EMA corta")
emaLongColor = input.color(color.orange, "Color EMA larga")
vwapColor = input.color(color.purple, "Color VWAP")
// === INPUTS DE GROSOR ===
emaShortWidth = input.int(2, "Grosor EMA corta", minval=1, maxval=5)
emaLongWidth = input.int(2, "Grosor EMA larga", minval=1, maxval=5)
vwapWidth = input.int(1, "Grosor VWAP", minval=1, maxval=5)
// === INPUTS DE ESTILO ===
emaShortStyleOpt = input.string("line", "Estilo EMA corta", options=["line","histogram","area","columns","circles","stepline"])
emaLongStyleOpt = input.string("line", "Estilo EMA larga", options=["line","histogram","area","columns","circles","stepline"])
vwapStyleOpt = input.string("line", "Estilo VWAP", options=["line","histogram","area","columns","circles","stepline"])
// === CONVERSIÓN DE ESTILO ===
emaShortStyle = emaShortStyleOpt == "histogram" ? plot.style_histogram :
emaShortStyleOpt == "area" ? plot.style_area :
emaShortStyleOpt == "columns" ? plot.style_columns :
emaShortStyleOpt == "circles" ? plot.style_circles :
emaShortStyleOpt == "stepline" ? plot.style_stepline : plot.style_line
emaLongStyle = emaLongStyleOpt == "histogram" ? plot.style_histogram :
emaLongStyleOpt == "area" ? plot.style_area :
emaLongStyleOpt == "columns" ? plot.style_columns :
emaLongStyleOpt == "circles" ? plot.style_circles :
emaLongStyleOpt == "stepline" ? plot.style_stepline : plot.style_line
vwapStyle = vwapStyleOpt == "histogram" ? plot.style_histogram :
vwapStyleOpt == "area" ? plot.style_area :
vwapStyleOpt == "columns" ? plot.style_columns :
vwapStyleOpt == "circles" ? plot.style_circles :
vwapStyleOpt == "stepline" ? plot.style_stepline : plot.style_line
// === EMAs ===
emaShort = ta.ema(close, emaShortLen)
emaLong = ta.ema(close, emaLongLen)
// === VWAP ===
vwapLine = ta.vwap(close)
// === PLOTS ===
plot(showEmaShort ? emaShort : na, title="EMA corta", color=emaShortColor, linewidth=emaShortWidth, style=emaShortStyle)
plot(showEmaLong ? emaLong : na, title="EMA larga", color=emaLongColor, linewidth=emaLongWidth, style=emaLongStyle)
plot(showVWAP ? vwapLine : na, title="VWAP", color=vwapColor, linewidth=vwapWidth, style=vwapStyle)
// === CRUCES ===
cruceAlcista = ta.crossover(emaShort, emaLong)
cruceBajista = ta.crossunder(emaShort, emaLong)
plotshape(showSignals and cruceAlcista, title="Cruce Alcista", style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), size=size.small, text="▲ Alcista")
plotshape(showSignals and cruceBajista, title="Cruce Bajista", style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.small, text="▼ Bajista")
// === ALERTAS ===
alertcondition(cruceAlcista, title="Alerta Cruce Alcista", message="EMA corta cruzó arriba de EMA larga")
alertcondition(cruceBajista, title="Alerta Cruce Bajista", message="EMA corta cruzó abajo de EMA larga")
// === PANEL INSTITUCIONAL MULTITF (CORREGIDO + SESGO GENERAL) ===
// === CÁLCULOS BASE TF ACTUAL ===
diff = math.abs(emaShort - emaLong)
maxDiff = ta.highest(diff, 200)
intensity = maxDiff == 0.0 ? 0.0 : diff / maxDiff
fuerzaPct = math.round(intensity * 100)
tendencia = emaShort > emaLong ? "Alcista" : emaShort < emaLong ? "Bajista" : "Neutral"
vwapEstado = close > vwapLine ? "Sobre VWAP" : close < vwapLine ? "Bajo VWAP" : "En VWAP"
// === COLOR PARA TF ACTUAL Y VWAP ===
colorActual = emaShort > emaLong ? color.lime : emaShort < emaLong ? color.red : color.yellow
colorVWAP = close > vwapLine ? color.lime : close < vwapLine ? color.red : color.yellow
// === FUNCIÓN MULTITF (datos + color) ===
f_tfData(tf) =>
emaS = request.security(syminfo.tickerid, tf, ta.ema(close, emaShortLen))
emaL = request.security(syminfo.tickerid, tf, ta.ema(close, emaLongLen))
d = math.abs(emaS - emaL)
maxD = request.security(syminfo.tickerid, tf, ta.highest(math.abs(emaS - emaL), 200))
inten = maxD == 0.0 ? 0.0 : d / maxD
fuerza = math.round(inten * 100)
tend = emaS > emaL ? "Alcista" : emaS < emaL ? "Bajista" : "Neutral"
col = emaS > emaL ? color.lime : emaS < emaL ? color.red : color.yellow
[tend, fuerza, col]
// === MULTITIMEFRAME ===
[d1T, d1F, d1C] = f_tfData("D")
[h4T, h4F, h4C] = f_tfData("240")
[h1T, h1F, h1C] = f_tfData("60")
[m15T, m15F, m15C] = f_tfData("15")
// === SESGO GENERAL ===
alcistas = (d1T == "Alcista" ? 1 : 0) + (h4T == "Alcista" ? 1 : 0) + (h1T == "Alcista" ? 1 : 0) + (m15T == "Alcista" ? 1 : 0)
bajistas = (d1T == "Bajista" ? 1 : 0) + (h4T == "Bajista" ? 1 : 0) + (h1T == "Bajista" ? 1 : 0) + (m15T == "Bajista" ? 1 : 0)
sesgoGeneral = alcistas > bajistas ? "🟢 Alcista " + str.tostring(alcistas) + "/4 TF" :
bajistas > alcistas ? "🔴 Bajista " + str.tostring(bajistas) + "/4 TF" : "🟡 Mixto"
sesgoColor = alcistas > bajistas ? color.lime : bajistas > alcistas ? color.red : color.yellow
// === PANEL ===
var table infoPanel = table.new(position.bottom_left, 2, 8, border_width=1, frame_color=color.new(color.white, 80))
// Encabezados
table.cell(infoPanel, 0, 0, "TF Actual", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 1, "D1", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 2, "H4", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 3, "H1", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 4, "M15", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 5, "VWAP", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 6, "Sesgo General", text_color=color.white, bgcolor=color.black)
table.cell(infoPanel, 0, 7, "", text_color=color.white, bgcolor=color.black)
// Valores
table.cell(infoPanel, 1, 0, tendencia + ", " + str.tostring(fuerzaPct) + "%", text_color=colorActual, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 1, d1T + ", " + str.tostring(d1F) + "%", text_color=d1C, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 2, h4T + ", " + str.tostring(h4F) + "%", text_color=h4C, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 3, h1T + ", " + str.tostring(h1F) + "%", text_color=h1C, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 4, m15T + ", " + str.tostring(m15F) + "%", text_color=m15C, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 5, vwapEstado, text_color=colorVWAP, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 6, sesgoGeneral, text_color=sesgoColor, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 7, "", text_color=sesgoColor, bgcolor=color.new(color.black, 0))

Panel de Sesiones

//@version=5
indicator("Panel Sesiones – OHLC + Rango + Dirección + Resumen", overlay=true, max_labels_count=500)
//────────────────────────────────────────────
// INPUTS
//────────────────────────────────────────────
showPanel = input.bool(true, "Mostrar Panel")
showAsia = input.bool(true, "Asia")
showLondon = input.bool(true, "Londres")
showNY = input.bool(true, "Nueva York")
// Timeframe fijo configurable
fixedTF = input.timeframe("5", "Timeframe fijo para cálculos")
useFixedTF = input.bool(true, "Usar timeframe fijo para cálculos")
// Sesiones (CST México)
asiaSess = input.session("0000-0500", "Sesión Asia")
londonSess = input.session("0200-1000", "Sesión Londres")
nySess = input.session("0730-1500", "Sesión Nueva York")
// Columnas
colShowSession = input.bool(true, "Columna: Sesión")
colShowOpen = input.bool(true, "Columna: Apertura")
colShowHigh = input.bool(true, "Columna: Máximo")
colShowLow = input.bool(true, "Columna: Mínimo")
colShowClose = input.bool(true, "Columna: Cierre")
colShowRange = input.bool(true, "Columna: Rango")
colShowDirection = input.bool(true, "Columna: Dirección")
// Colores
colorAsia = color.new(color.gray, 0)
colorLondon = color.new(color.blue, 0)
colorNY = color.new(color.orange, 0)
//────────────────────────────────────────────
// FUNCIONES
//────────────────────────────────────────────
inSession(sess) =>
time(timeframe.period, sess) != 0
f_sessionOHLC(sess) =>
var float hi = na
var float lo = na
var float op = na
var float cl = na
if inSession(sess)
hi := na(hi) ? high : math.max(hi, high)
lo := na(lo) ? low : math.min(lo, low)
op := na(op) ? open : op
cl := close
[op, hi, lo, cl]
f_sessionClosed(sess) =>
not inSession(sess) and inSession(sess)[1]
//────────────────────────────────────────────
// TIMEFRAME BASE
//────────────────────────────────────────────
tfSource = useFixedTF ? fixedTF : timeframe.period
[asiaOp, asiaHi, asiaLo, asiaCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(asiaSess))
[londonOp, londonHi, londonLo, londonCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(londonSess))
[nyOp, nyHi, nyLo, nyCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(nySess))
//────────────────────────────────────────────
// VALORES FINALES DE SESIÓN (INDEPENDIENTES DEL TF DEL GRÁFICO)
//────────────────────────────────────────────
var float asiaOpFinal = na
var float asiaHiFinal = na
var float asiaLoFinal = na
var float asiaClFinal = na
var float londonOpFinal = na
var float londonHiFinal = na
var float londonLoFinal = na
var float londonClFinal = na
var float nyOpFinal = na
var float nyHiFinal = na
var float nyLoFinal = na
var float nyClFinal = na
// Detectar cierre de sesión usando el timeframe fijo
[asiaClosed, londonClosed, nyClosed] = request.security(syminfo.tickerid, tfSource, [f_sessionClosed(asiaSess), f_sessionClosed(londonSess), f_sessionClosed(nySess)])
if asiaClosed
asiaOpFinal := asiaOp[1]
asiaHiFinal := asiaHi[1]
asiaLoFinal := asiaLo[1]
asiaClFinal := asiaCl[1]
if londonClosed
londonOpFinal := londonOp[1]
londonHiFinal := londonHi[1]
londonLoFinal := londonLo[1]
londonClFinal := londonCl[1]
if nyClosed
nyOpFinal := nyOp[1]
nyHiFinal := nyHi[1]
nyLoFinal := nyLo[1]
nyClFinal := nyCl[1]
//────────────────────────────────────────────
// PANEL
//────────────────────────────────────────────
var table panel = table.new(position.top_right, 7, 5, border_width=1)
// Variables para resumen fijo
var string resumenFijo = na
var color colorFijo = na
f_fillRow(_row, _name, _op, _hi, _lo, _cl, _bgColor) =>
dir = (not na(_cl) and not na(_op)) ? (_cl > _op ? "Alcista" : _cl < _op ? "Bajista" : "Neutro") : "-"
rangeVal = (not na(_hi) and not na(_lo)) ? _hi - _lo : na
rangeStr = not na(rangeVal) ? str.tostring(rangeVal, format.mintick) : "-"
if colShowSession
table.cell(panel, 0, _row, _name, bgcolor=_bgColor)
if colShowOpen
table.cell(panel, 1, _row, na(_op) ? "-" : str.tostring(_op, format.mintick), bgcolor=_bgColor)
if colShowHigh
table.cell(panel, 2, _row, na(_hi) ? "-" : str.tostring(_hi, format.mintick), bgcolor=_bgColor)
if colShowLow
table.cell(panel, 3, _row, na(_lo) ? "-" : str.tostring(_lo, format.mintick), bgcolor=_bgColor)
if colShowClose
table.cell(panel, 4, _row, na(_cl) ? "-" : str.tostring(_cl, format.mintick), bgcolor=_bgColor)
if colShowRange
table.cell(panel, 5, _row, rangeStr, bgcolor=_bgColor)
if colShowDirection
table.cell(panel, 6, _row, dir, bgcolor=_bgColor)
[rangeVal, dir]
//────────────────────────────────────────────
// RENDER PANEL + RESUMEN
//────────────────────────────────────────────
if showPanel
// Encabezados
table.cell(panel, 0, 0, "SESIÓN", bgcolor=color.black, text_color=color.white)
table.cell(panel, 1, 0, "APERTURA", bgcolor=color.black, text_color=color.white)
table.cell(panel, 2, 0, "MÁXIMO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 3, 0, "MÍNIMO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 4, 0, "CIERRE", bgcolor=color.black, text_color=color.white)
table.cell(panel, 5, 0, "RANGO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 6, 0, "DIRECCIÓN", bgcolor=color.black, text_color=color.white)
row = 1
[rangeAsia, dirAsia] = f_fillRow(row, "Asia", asiaOpFinal, asiaHiFinal, asiaLoFinal, asiaClFinal, color.new(colorAsia, 80))
row += 1
[rangeLondon, dirLondon] = f_fillRow(row, "Londres", londonOpFinal, londonHiFinal, londonLoFinal, londonClFinal, color.new(colorLondon, 80))
row += 1
[rangeNY, dirNY] = f_fillRow(row, "Nueva York", nyOpFinal, nyHiFinal, nyLoFinal, nyClFinal, color.new(colorNY, 80))
row += 1
//────────────────────────────────────────────
// RESUMEN
//────────────────────────────────────────────
validRanges = array.new_float()
if not na(rangeAsia)
array.push(validRanges, rangeAsia)
if not na(rangeLondon)
array.push(validRanges, rangeLondon)
if not na(rangeNY)
array.push(validRanges, rangeNY)
maxRange = array.size(validRanges) > 0 ? array.max(validRanges) : na
string sesionMasVolatil = "—"
string dirMasVolatil = "—"
if not na(maxRange)
if rangeAsia == maxRange
sesionMasVolatil := "Asia"
dirMasVolatil := dirAsia
else if rangeLondon == maxRange
sesionMasVolatil := "Londres"
dirMasVolatil := dirLondon
else if rangeNY == maxRange
sesionMasVolatil := "Nueva York"
dirMasVolatil := dirNY
string resumen = ""
color colorResumen = color.new(color.gray, 70)
if useFixedTF
if na(resumenFijo) and sesionMasVolatil != "—"
resumenFijo := "Sesión más volátil: " + sesionMasVolatil + " – " + dirMasVolatil
if dirMasVolatil == "Alcista"
colorFijo := color.new(color.green, 0)
else if dirMasVolatil == "Bajista"
colorFijo := color.new(color.red, 0)
else
colorFijo := color.new(color.gray, 70)
resumen := na(resumenFijo) ? "Sesión más volátil: —" : resumenFijo
colorResumen := na(colorFijo) ? color.new(color.gray, 70) : colorFijo
else
resumen := "Sesión más volátil: " + sesionMasVolatil + " – " + dirMasVolatil
if dirMasVolatil == "Alcista"
colorResumen := color.new(color.green, 0)
else if dirMasVolatil == "Bajista"
colorResumen := color.new(color.red, 0)
else
colorResumen := color.new(color.gray, 70)
table.cell(panel, 0, 4, resumen, bgcolor=colorResumen, text_color=color.white)

🧭 6. Conclusión operativa

El sistema completo te da una visión de flujo institucional en tiempo real:

  1. Mapa macro (líneas SMC) → estructura y zonas de reacción.
  2. Mapa de Sesiones → comportamiento por zonas horarias.
  3. Panel Multitimeframe → fuerza y dirección fractal.
  4. Sesgo General → confirmación institucional y disciplina operativa.

Este enfoque no busca adivinar el mercado, sino leerlo con precisión.
Y esa precisión es lo que diferencia al trader impulsivo del trader institucional.

#Trading #ForexTrading #InstitutionalTrading #SmartMoneyConcepts #RiskManagement

7. Resultados de Testing Real

A una semana de pruebas, los resultados son prometedores en XAUUSD.

Interpretación Ejecutiva de Resultados

1. El sistema es rentable, pero aún está en fase de optimización

Una tasa de acierto del 64.18% indica que la lectura de mercado y la selección de entradas tienen una precisión sólida.
Sin embargo, el factor de ganancia de 1.1 revela algo importante:

El sistema gana más veces de las que pierde, pero todavía no capitaliza completamente sus operaciones ganadoras.

En términos institucionales:

  • La ventaja estadística existe.
  • La gestión del trade todavía tiene espacio para mejorar eficiencia.
  • El edge ya es positivo y sostenible si se mantiene la disciplina.

2. El riesgo está relativamente controlado

Los datos muestran:

  • Operaciones ganadoras promedio: +$3.17
  • Operaciones perdedoras promedio: -$5.15

Esto significa que:

  • Las pérdidas individuales son mayores que las ganancias promedio.
  • El sistema depende actualmente de la frecuencia de acierto para mantenerse rentable.

Ejecutivamente, esto sugiere:

Prioridad estratégica:

Mejorar el manejo de salida y dejar correr más las operaciones válidas.

No necesariamente necesitas “ganar más veces”.
Necesitas:

  • aumentar ligeramente el profit promedio,
  • o reducir marginalmente la pérdida promedio.

Con pequeños ajustes, el factor de ganancia podría escalar rápidamente a 1.3–1.5.

3. Excelente control emocional y operativo

El tiempo medio de retención es extremadamente revelador:

Tipo de operaciónTiempo
Ganadoras28 min
Perdedoras34 min

Esto transmite algo muy importante:

No existe una sobreexposición emocional extrema.

La diferencia entre trades positivos y negativos es pequeña.
Eso normalmente significa:

  • disciplina operativa,
  • ejecución consistente,
  • ausencia de “revenge trading” agresivo,
  • y capacidad de cortar operaciones relativamente rápido.

Muchos traders minoristas muestran exactamente lo contrario:

  • pérdidas enormes en duración,
  • ganancias cortas por miedo.

Aquí no se observa ese patrón destructivo.

4. Los resultados grandes confirman capacidad de captura

Las operaciones destacadas en Gold muestran capturas de:

  • +52 USD
  • +33 USD
  • +32 USD
  • +28 USD

Eso confirma que:

  • el sistema sí identifica movimientos con expansión,
  • existe capacidad real de explotar volatilidad,
  • y el trader no depende únicamente de micro-scalps.

Esto es clave porque valida:

“La estrategia puede escalar”.

Diagnóstico Ejecutivo Final

Fortalezas

✅ Alta tasa de acierto
✅ Consistencia operativa
✅ Control emocional visible en tiempos de exposición
✅ Capacidad de capturar movimientos amplios
✅ Sistema estadísticamente positivo

Áreas de mejora

⚠️ Profit factor aún bajo para escalamiento agresivo
⚠️ Ganancia promedio pequeña frente a pérdida promedio
⚠️ Optimización pendiente en gestión de salida y runners

Conclusión Estratégica

Los datos muestran algo más valioso que una simple rentabilidad:

Existe estructura operativa repetible.

Y eso, en trading profesional, es mucho más importante que un resultado aislado.

La consistencia ya está construida.
Ahora el siguiente nivel consiste en:

  • optimizar el R:R,
  • aumentar eficiencia de salida,
  • y convertir precisión en crecimiento exponencial controlado.

📘 MANUAL DE USO – PANEL DE SESIONES (OHLC + Rango + Dirección + Resumen Institucional)

📘 MANUAL DE USO – PANEL DE SESIONES (OHLC + Rango + Dirección + Resumen Institucional)

1. Introducción

El Panel de Sesiones es un indicador institucional diseñado para mostrar, de forma clara y compacta:

  • Los valores OHLC (Apertura, Máximo, Mínimo, Cierre) de cada sesión.
  • El rango (High – Low).
  • La dirección (Alcista, Bajista o Neutro).
  • Un resumen automático que identifica la sesión más volátil y su dirección.
  • La opción de trabajar con un timeframe fijo (M3, M5, M15…) para mantener los valores estables sin importar el timeframe del gráfico.

Este panel está optimizado para análisis institucional, backtesting visual y toma de decisiones rápidas.

2. Objetivo del Indicador

El objetivo es ofrecer una vista ejecutiva de las tres sesiones principales:

  • Asia
  • Londres
  • Nueva York

Mostrando:

  • Cómo se comportó cada sesión.
  • Qué tan amplia fue su volatilidad.
  • En qué dirección cerró.
  • Cuál fue la sesión dominante del día.

3. Configuración Inicial

El indicador incluye varios parámetros configurables desde el panel de Inputs.

3.1. Mostrar/Ocultar Panel

Permite activar o desactivar el panel completo.

3.2. Selección de Sesiones

Puedes activar o desactivar individualmente:

  • Asia
  • Londres
  • Nueva York

3.3. Timeframe Fijo

Este es uno de los elementos clave del indicador.

  • fixedTF: selecciona el timeframe base (ej. M3, M5, M15).
  • useFixedTF:
    • ON → El panel y el resumen se calculan exclusivamente desde el timeframe fijo.
    • OFF → El panel se adapta dinámicamente al timeframe del gráfico.

Ventaja:
Cuando useFixedTF = true, cambiar el timeframe del gráfico no altera los valores del panel.

4. Columnas del Panel

El panel muestra hasta 7 columnas:

  1. Sesión
  2. Apertura (Open)
  3. Máximo (High)
  4. Mínimo (Low)
  5. Cierre (Close)
  6. Rango (High – Low)
  7. Dirección (Alcista / Bajista / Neutro)

Cada columna puede activarse o desactivarse según tus necesidades.

5. Cálculo de OHLC por Sesión

El indicador calcula los valores OHLC de cada sesión usando:

  • El timeframe fijo (si está activado).
  • O el timeframe del gráfico (si está desactivado).

El cálculo es robusto y funciona correctamente en cualquier timeframe, incluso si la sesión no coincide con el cierre exacto de una vela.

6. Cierre de Sesión y Valores Finales

El indicador detecta automáticamente el cierre real de cada sesión, sin depender del timeframe del gráfico.

Cuando una sesión termina:

  • Se guardan sus valores finales.
  • Estos valores permanecen estables durante el resto del día.
  • El panel siempre muestra los datos de la última sesión completada.

7. Rango y Dirección

7.1. Rango

Es la diferencia entre el máximo y el mínimo de la sesión:

Rango = High – Low

7.2. Dirección

Se determina comparando el cierre con la apertura:

  • Alcista → Cierre > Apertura
  • Bajista → Cierre < Apertura
  • Neutro → Cierre = Apertura

8. Resumen Institucional

En la última fila del panel aparece un resumen:

“Sesión más volátil: Londres – Bajista”

Este resumen identifica:

  • La sesión con mayor rango.
  • Su dirección.
  • Su color (verde, rojo o gris).

Modo Fijo

Cuando useFixedTF = true:

  • El resumen se calcula una sola vez.
  • Permanece estable aunque cambies de timeframe.

Modo Dinámico

Cuando useFixedTF = false:

  • El resumen se recalcula en cada timeframe.
  • Útil para análisis intradía.

9. Interpretación del Panel

9.1. Lectura rápida

El panel permite identificar en segundos:

  • Qué sesión tuvo mayor volatilidad.
  • Qué sesión dominó el día.
  • Si el mercado estuvo tendencial o lateral.
  • Si hubo continuidad o reversión entre sesiones.

9.2. Ejemplos

Ejemplo 1 – Día tendencial alcista

  • Asia: Alcista
  • Londres: Alcista
  • NY: Alcista
  • Resumen: “Londres – Alcista”

Ejemplo 2 – Reversión

  • Asia: Alcista
  • Londres: Bajista
  • NY: Bajista
  • Resumen: “Nueva York – Bajista”

Ejemplo 3 – Volatilidad en Asia

  • Asia: Rango amplio
  • Londres: Rango pequeño
  • NY: Rango medio
  • Resumen: “Asia – Neutro”

10. Recomendaciones de Uso

  • Usa fixedTF = M5 para análisis institucional.
  • Usa fixedTF = M3 para scalping.
  • Usa fixedTF = M15 para swing trading.
  • Mantén useFixedTF = true si quieres estabilidad entre timeframes.
  • Cambia a useFixedTF = false si quieres ver cómo se comporta cada sesión en distintos marcos.

11. Ventajas del Indicador

  • Claridad institucional.
  • Datos consistentes entre timeframes.
  • Resumen automático.
  • Ideal para backtesting visual.
  • Perfecto para presentaciones, reportes y análisis ejecutivos.
  • Diseño limpio y profesional.

12. Conclusión

Este indicador te permite entender el comportamiento diario del mercado de forma inmediata, precisa y visualmente clara.
Es una herramienta diseñada para traders que buscan orden, consistencia y análisis institucional.

13. Script de Pine para uso en Trading View

//@version=5
indicator("Panel Sesiones – OHLC + Rango + Dirección + Resumen", overlay=true, max_labels_count=500)
//────────────────────────────────────────────
// INPUTS
//────────────────────────────────────────────
showPanel = input.bool(true, "Mostrar Panel")
showAsia = input.bool(true, "Asia")
showLondon = input.bool(true, "Londres")
showNY = input.bool(true, "Nueva York")
// Timeframe fijo configurable
fixedTF = input.timeframe("5", "Timeframe fijo para cálculos")
useFixedTF = input.bool(true, "Usar timeframe fijo para cálculos")
// Sesiones (CST México)
asiaSess = input.session("0000-0500", "Sesión Asia")
londonSess = input.session("0200-1000", "Sesión Londres")
nySess = input.session("0730-1500", "Sesión Nueva York")
// Columnas
colShowSession = input.bool(true, "Columna: Sesión")
colShowOpen = input.bool(true, "Columna: Apertura")
colShowHigh = input.bool(true, "Columna: Máximo")
colShowLow = input.bool(true, "Columna: Mínimo")
colShowClose = input.bool(true, "Columna: Cierre")
colShowRange = input.bool(true, "Columna: Rango")
colShowDirection = input.bool(true, "Columna: Dirección")
// Colores
colorAsia = color.new(color.gray, 0)
colorLondon = color.new(color.blue, 0)
colorNY = color.new(color.orange, 0)
//────────────────────────────────────────────
// FUNCIONES
//────────────────────────────────────────────
inSession(sess) =>
time(timeframe.period, sess) != 0
f_sessionOHLC(sess) =>
var float hi = na
var float lo = na
var float op = na
var float cl = na
if inSession(sess)
hi := na(hi) ? high : math.max(hi, high)
lo := na(lo) ? low : math.min(lo, low)
op := na(op) ? open : op
cl := close
[op, hi, lo, cl]
f_sessionClosed(sess) =>
not inSession(sess) and inSession(sess)[1]
//────────────────────────────────────────────
// TIMEFRAME BASE
//────────────────────────────────────────────
tfSource = useFixedTF ? fixedTF : timeframe.period
[asiaOp, asiaHi, asiaLo, asiaCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(asiaSess))
[londonOp, londonHi, londonLo, londonCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(londonSess))
[nyOp, nyHi, nyLo, nyCl] = request.security(syminfo.tickerid, tfSource, f_sessionOHLC(nySess))
//────────────────────────────────────────────
// VALORES FINALES DE SESIÓN (INDEPENDIENTES DEL TF DEL GRÁFICO)
//────────────────────────────────────────────
var float asiaOpFinal = na
var float asiaHiFinal = na
var float asiaLoFinal = na
var float asiaClFinal = na
var float londonOpFinal = na
var float londonHiFinal = na
var float londonLoFinal = na
var float londonClFinal = na
var float nyOpFinal = na
var float nyHiFinal = na
var float nyLoFinal = na
var float nyClFinal = na
// Detectar cierre de sesión usando el timeframe fijo
[asiaClosed, londonClosed, nyClosed] = request.security(syminfo.tickerid, tfSource, [f_sessionClosed(asiaSess), f_sessionClosed(londonSess), f_sessionClosed(nySess)])
if asiaClosed
asiaOpFinal := asiaOp[1]
asiaHiFinal := asiaHi[1]
asiaLoFinal := asiaLo[1]
asiaClFinal := asiaCl[1]
if londonClosed
londonOpFinal := londonOp[1]
londonHiFinal := londonHi[1]
londonLoFinal := londonLo[1]
londonClFinal := londonCl[1]
if nyClosed
nyOpFinal := nyOp[1]
nyHiFinal := nyHi[1]
nyLoFinal := nyLo[1]
nyClFinal := nyCl[1]
//────────────────────────────────────────────
// PANEL
//────────────────────────────────────────────
var table panel = table.new(position.top_right, 7, 5, border_width=1)
// Variables para resumen fijo
var string resumenFijo = na
var color colorFijo = na
f_fillRow(_row, _name, _op, _hi, _lo, _cl, _bgColor) =>
dir = (not na(_cl) and not na(_op)) ? (_cl > _op ? "Alcista" : _cl < _op ? "Bajista" : "Neutro") : "-"
rangeVal = (not na(_hi) and not na(_lo)) ? _hi - _lo : na
rangeStr = not na(rangeVal) ? str.tostring(rangeVal, format.mintick) : "-"
if colShowSession
table.cell(panel, 0, _row, _name, bgcolor=_bgColor)
if colShowOpen
table.cell(panel, 1, _row, na(_op) ? "-" : str.tostring(_op, format.mintick), bgcolor=_bgColor)
if colShowHigh
table.cell(panel, 2, _row, na(_hi) ? "-" : str.tostring(_hi, format.mintick), bgcolor=_bgColor)
if colShowLow
table.cell(panel, 3, _row, na(_lo) ? "-" : str.tostring(_lo, format.mintick), bgcolor=_bgColor)
if colShowClose
table.cell(panel, 4, _row, na(_cl) ? "-" : str.tostring(_cl, format.mintick), bgcolor=_bgColor)
if colShowRange
table.cell(panel, 5, _row, rangeStr, bgcolor=_bgColor)
if colShowDirection
table.cell(panel, 6, _row, dir, bgcolor=_bgColor)
[rangeVal, dir]
//────────────────────────────────────────────
// RENDER PANEL + RESUMEN
//────────────────────────────────────────────
if showPanel
// Encabezados
table.cell(panel, 0, 0, "SESIÓN", bgcolor=color.black, text_color=color.white)
table.cell(panel, 1, 0, "APERTURA", bgcolor=color.black, text_color=color.white)
table.cell(panel, 2, 0, "MÁXIMO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 3, 0, "MÍNIMO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 4, 0, "CIERRE", bgcolor=color.black, text_color=color.white)
table.cell(panel, 5, 0, "RANGO", bgcolor=color.black, text_color=color.white)
table.cell(panel, 6, 0, "DIRECCIÓN", bgcolor=color.black, text_color=color.white)
row = 1
[rangeAsia, dirAsia] = f_fillRow(row, "Asia", asiaOpFinal, asiaHiFinal, asiaLoFinal, asiaClFinal, color.new(colorAsia, 80))
row += 1
[rangeLondon, dirLondon] = f_fillRow(row, "Londres", londonOpFinal, londonHiFinal, londonLoFinal, londonClFinal, color.new(colorLondon, 80))
row += 1
[rangeNY, dirNY] = f_fillRow(row, "Nueva York", nyOpFinal, nyHiFinal, nyLoFinal, nyClFinal, color.new(colorNY, 80))
row += 1
//────────────────────────────────────────────
// RESUMEN
//────────────────────────────────────────────
validRanges = array.new_float()
if not na(rangeAsia)
array.push(validRanges, rangeAsia)
if not na(rangeLondon)
array.push(validRanges, rangeLondon)
if not na(rangeNY)
array.push(validRanges, rangeNY)
maxRange = array.size(validRanges) > 0 ? array.max(validRanges) : na
string sesionMasVolatil = "—"
string dirMasVolatil = "—"
if not na(maxRange)
if rangeAsia == maxRange
sesionMasVolatil := "Asia"
dirMasVolatil := dirAsia
else if rangeLondon == maxRange
sesionMasVolatil := "Londres"
dirMasVolatil := dirLondon
else if rangeNY == maxRange
sesionMasVolatil := "Nueva York"
dirMasVolatil := dirNY
string resumen = ""
color colorResumen = color.new(color.gray, 70)
if useFixedTF
if na(resumenFijo) and sesionMasVolatil != "—"
resumenFijo := "Sesión más volátil: " + sesionMasVolatil + " – " + dirMasVolatil
if dirMasVolatil == "Alcista"
colorFijo := color.new(color.green, 0)
else if dirMasVolatil == "Bajista"
colorFijo := color.new(color.red, 0)
else
colorFijo := color.new(color.gray, 70)
resumen := na(resumenFijo) ? "Sesión más volátil: —" : resumenFijo
colorResumen := na(colorFijo) ? color.new(color.gray, 70) : colorFijo
else
resumen := "Sesión más volátil: " + sesionMasVolatil + " – " + dirMasVolatil
if dirMasVolatil == "Alcista"
colorResumen := color.new(color.green, 0)
else if dirMasVolatil == "Bajista"
colorResumen := color.new(color.red, 0)
else
colorResumen := color.new(color.gray, 70)
table.cell(panel, 0, 4, resumen, bgcolor=colorResumen, text_color=color.white)

📘 MAPA INSTITUCIONAL DE SESIONES

📘 MAPA INSTITUCIONAL DE SESIONES

Cómo se comporta cada mercado, quién impulsa, quién corrige y por qué Asia rellena los vacíos de Londres


🎯 1. Estructura general del día institucional

Tres sesiones, tres roles distintos.
El precio no se mueve igual porque cada sesión tiene distinta liquidez, participantes y objetivos.

🟦 ASIA — Consolida y corrige

  • Volumen bajo.
  • Rango estrecho (Asian Range).
  • Reequilibra el precio → rellena FVG/imbalances.
  • Ajuste de inventarios de market makers.
  • Prepara el terreno para Londres.

Rol: Consolidación + Corrección + Relleno de vacíos.


🟩 LONDRES — Impulsa

  • Alta liquidez institucional.
  • Rompe el Asian Range.
  • Crea tendencia del día.
  • Genera desequilibrios (FVG, imbalances).
  • Movimientos direccionales limpios.

Rol: Impulso + Creación de desequilibrios.


🟥 NUEVA YORK — Decide

  • Mayor volumen del día.
  • Confirma o revierte lo que Londres inició.
  • Barridas de liquidez (liquidity grabs).
  • Movimientos violentos en apertura y cierre.
  • Crea nuevos desequilibrios.

Rol: Confirmación o reversión + Barridas + Decisión del día.


🧩 2. ¿Por qué Asia rellena los vacíos de Londres?

No es magia. Es mecánica de mercado.

✔ 1. Menor liquidez → precio vuelve al equilibrio

Sin órdenes grandes, el precio tiende a suavizar los excesos previos.

✔ 2. Los algoritmos buscan eficiencia

Los desequilibrios creados por Londres/NY suelen ser rellenados en sesiones de bajo volumen.

✔ 3. Market makers ajustan inventarios

Antes de Londres necesitan volver a zonas de valor.

✔ 4. Asia opera dentro del “fair value”

Por eso rellena FVG, imbalances y vuelve a zonas institucionales.


📐 3. Mapa visual del flujo del día

00:00–05:00 CST — ASIA

  • Rango estrecho
  • Correcciones
  • Relleno de FVG
  • Reequilibrio

02:00–04:00 CST — Pre-Londres

  • Pequeñas trampas
  • Liquidez inducida
  • Últimos ajustes

02:00–10:00 CST — LONDRES

  • Ruptura del Asian Range
  • Impulso direccional
  • Creación de FVG
  • Tendencia del día

07:30–15:00 CST — NUEVA YORK

  • Confirmación o reversión
  • Barridas
  • Movimientos violentos
  • Cierre del día

🎛 4. Cómo usar esto en tu sistema (aplicado a XAUUSD, DXY, USDJPY)

Paso 1 — Marca el Asian Range

Te da el “campo de batalla” del día.

Paso 2 — Identifica los FVG creados por Londres

Son los desequilibrios que Asia suele rellenar.

Paso 3 — Observa si Asia reequilibra

Si Asia rellena → Londres tendrá un movimiento más limpio.
Si Asia NO rellena → Londres suele ir a rellenar primero.

Paso 4 — Opera retrocesos en Londres

Tu estilo de vender retrocesos en tendencia bajista encaja perfecto aquí.

Paso 5 — NY decide

Si Londres marcó tendencia, NY la confirma o la revierte.


🧭 5. Plantilla institucional para tus análisis diarios

Puedes copiar esto y usarlo cada mañana:

1. Asian Range:

  • Alto:
  • Bajo:
  • ¿Rellenó FVG? Sí/No
  • ¿Consolidó? Sí/No

2. Londres:

  • ¿Rompió el Asian Range?
  • ¿Creó FVG?
  • ¿Dirección dominante?

3. NY:

  • ¿Confirma o revierte?
  • ¿Barrida previa?
  • ¿Liquidez objetivo?

Glosario

He aquí algunos conceptos utilizados en este artículo que podrían resultarte interesantes:

Un imbalance es un fallo en la eficiencia del mercado donde un flujo masivo de órdenes unilaterales desplaza el precio agresivamente, dejando niveles sin negociar. Esta «deuda» de liquidez actúa como un imán técnico que el precio tiende a buscar para reequilibrarse antes de validar la continuidad de una tendencia.

Un FVG es un desequilibrio de liquidez entre tres velas donde los extremos de la primera y la tercera no se solapan, dejando un vacío en el precio. Funciona como un imán de alta probabilidad que el mercado tiende a rellenar para corregir ineficiencias antes de continuar su tendencia estructural.

No confundas un movimiento rápido con un imbalance operativo. Un movimiento veloz con mechas largas que se solapan no es un imbalance, es volatilidad. El verdadero desequilibrio es aquel que deja espacio en blanco entre los extremos de las velas circundantes. Si el precio no deja una «huella» de ineficiencia clara, no hay obligación de que regrese pronto.

Debes entender que el imbalance es un cambio de estado en el sistema, mientras que la volatilidad es solo una oscilación térmica. No operes el movimiento; opera la aceptación o rechazo de los niveles de volumen que ese movimiento deja atrás.

Si no ves un vacío claro en el perfil de volumen, no hay imbalance; solo hay gente operando con pánico.

En la próxima publicación encontrarás una herramienta, un script para Pine donde podrás ver información importante de las sesiones de mercado directo en tu Trading View.