Del monitoreo regulatorio a la inteligencia de riesgos: cómo anticipar los cambios que pueden transformar la industria mexicana en 2027

Del monitoreo regulatorio a la inteligencia de riesgos: cómo anticipar los cambios que pueden transformar la industria mexicana en 2027

México está entrando en una etapa en la que anticipar los cambios regulatorios puede ser tan importante como controlar los costos, asegurar el suministro o mejorar la productividad de una planta.

Para un director industrial, una nueva disposición puede significar modificar procesos, homologar proveedores, ajustar turnos o invertir en equipos. Para un inversionista, esa misma disposición puede alterar el CAPEX, el OPEX, el plazo de entrada al mercado y, finalmente, la rentabilidad esperada.

La pregunta estratégica ya no es solamente «¿qué nuevas leyes se están aprobando?», sino:

¿Cómo identificamos una señal regulatoria antes de que se convierta en una desviación operativa, financiera o comercial?

En AT Consulting estamos desarrollando una respuesta mediante un sistema que integra investigación regulatoria, análisis de riesgos, Value Stream Mapping (VSM) y monitoreo continuo.

En este artículo explicamos el método, presentamos once áreas de exposición regulatoria relevantes para México durante 2026–2027 y profundizamos en un caso reciente: el proyecto de norma ambiental PROY-NACDMX-010-AMBT-2026, publicado para consulta pública el 14 de octubre.

El framework ATC: de la evidencia a la decisión

Nuestra metodología parte de una idea que aplicamos transversalmente en cuatro disciplinas: trading institucional, mejora de procesos productivos, gestión de riesgos y monitoreo de señales externas.

Aunque los mercados financieros y las operaciones industriales son sistemas diferentes, comparten una característica: los resultados dependen de múltiples variables que interactúan, algunas visibles inmediatamente y otras que producen efectos con retraso.

En trading, estudiamos la estructura del precio, la liquidez, el volumen y las condiciones macrofinancieras. No basta con identificar una señal aislada: debemos comprender su contexto, evaluar su probabilidad, medir la exposición y establecer condiciones para actuar.

En producción, aplicamos una lógica semejante mediante el VSM: identificamos cómo una variación en materiales, capacidad, calidad, inventarios o tiempos de ciclo se propaga por la cadena de valor.

En gestión de riesgos, analizamos las causas, los controles existentes, la exposición residual y las consecuencias sobre continuidad, cumplimiento y rentabilidad.

Y en monitoreo regulatorio, trasladamos estos principios al entorno legislativo y normativo.

La metodología ATC sigue siete etapas:

  1. Detección. Identificar señales provenientes del DOF, gacetas parlamentarias, autoridades, cámaras industriales, organismos internacionales, medios especializados y análisis públicos.
  2. Validación. Confirmar la existencia del instrumento, su contenido, autoridad competente, etapa procesal y alcance territorial.
  3. Clasificación. Distinguir leyes vigentes, reformas aprobadas, reglamentos, proyectos de NOM, iniciativas y procesos de negociación comercial.
  4. Evaluación. Estimar la probabilidad de materialización y el impacto potencial mediante una metodología de puntuación institucional.
  5. Mapeo VSM. Traducir la disposición a efectos sobre materiales, mano de obra, procesos, capacidad, logística, costos y acceso al mercado.
  6. Decisión. Definir acciones preventivas, inversiones, controles, responsables y plazos.
  7. Seguimiento. Actualizar las conclusiones cuando cambia la evidencia.

Nuestro principio rector es:

PRECISIÓN antes que FRECUENCIA.
EVIDENCIA sobre PREDICCIÓN.
PROCESO más que RESULTADO.

No buscamos producir más alertas. Buscamos que cada alerta contribuya a tomar una mejor decisión.

Cómo funciona nuestra matriz de riesgos regulatorios

Para convertir información dispersa en prioridades comparables, utilizamos el Regulatory Risk Score (RRS):

RRS = Probabilidad (P) × Impacto (I)

Ambas variables se califican de 1 a 5, con un resultado máximo de 25 puntos.

La probabilidad se construye considerando cinco factores: estatus legislativo (30%), respaldo político (25%), alineación con la política pública (20%), avance reglamentario (15%) y presión externa (10%).

El impacto incorpora seis dimensiones: OPEX (25%), CAPEX (20%), capacidad y operación (20%), cadena de suministro (15%), acceso al mercado (10%) y responsabilidad legal o reputacional (10%).

Los resultados se interpretan mediante cuatro niveles:

  • Verde, 1–6: vigilancia.
  • Amarillo, 7–11: preparación.
  • Naranja, 12–17: plan de mitigación.
  • Rojo, 18–25: prioridad ejecutiva.

Estas puntuaciones son estimaciones analíticas ATC, no probabilidades estadísticas oficiales ni pronósticos jurídicos.

Existe, además, una distinción fundamental: cuando una ley ya está vigente, la probabilidad de aprobación deja de ser la variable relevante. En ese caso evaluamos la exposición a su implementación, fiscalización o adaptación operativa.

Esta separación evita confundir tres preguntas diferentes:

¿Ocurrirá el cambio? ¿Cuándo producirá efectos? ¿Qué tan vulnerable es nuestra operación?

Once señales que merecen atención industrial e inversionista

Nuestro Radar Regulatorio Industrial México 2026–2027 identifica once temas prioritarios. Los siguientes valores representan la evaluación ATC de referencia al 15 de octubre y deben ajustarse según sector, ubicación, productos y modelo de negocio.

01. Nueva Ley General del Equilibrio Ecológico y la Protección al Ambiente (LGEEPA)

P: 4.5 | I: 5 | RRS: 22.5/25 — Crítico

La iniciativa presentada el 31 de agosto propone actualizar el enfoque ambiental hacia prevención, ordenamiento ecológico, evaluación ambiental, biodiversidad y mayores mecanismos de control.

Su relevancia para la industria no reside únicamente en nuevas obligaciones de cumplimiento. Una modificación sustancial del marco ambiental puede alterar permisos, estudios, procedimientos de evaluación, inversiones preventivas y tiempos de ejecución de proyectos.

Para un inversionista que analiza instalar una planta en 2027, el riesgo principal es incorporar supuestos de autorización que podrían cambiar durante la estructuración del proyecto.

Decisión ATC: revisar permisos críticos, contingencias ambientales y escenarios de retraso antes de comprometer CAPEX irreversible.

02. Ley General de Economía Circular (LGEC) y su reglamentación

P: 5 | I: 5 | RRS: 25/25 — Crítico

La economía circular está evolucionando de una aspiración voluntaria hacia obligaciones de gestión, trazabilidad, recuperación y responsabilidad extendida del productor.

Para fabricantes, importadores y distribuidores, esto puede implicar rediseñar productos, modificar materias primas, documentar contenidos reciclados, establecer alianzas de recuperación y demostrar resultados.

El efecto no termina en la planta. Se extiende a proveedores, operadores logísticos, distribuidores y sistemas posconsumo.

Decisión ATC: desarrollar una línea base de materiales, residuos, reciclabilidad y trazabilidad, diferenciando obligaciones vigentes de requisitos reglamentarios todavía pendientes.

03. PROY-NACDMX-010-AMBT-2026: bolsas y productos plásticos

P: 4.5 | I: 4 | RRS: 18/25 — Crítico para empresas expuestas

Este proyecto, publicado el 14 de octubre para consulta pública en Ciudad de México, introduce una señal concreta sobre cómo pueden evolucionar las exigencias técnicas y administrativas para determinados productos plásticos.

Su importancia no es únicamente ambiental: vincula especificaciones de materiales, certificaciones, registros, trazabilidad y comercialización.

Un fabricante ubicado fuera de la capital podría verse afectado si sus productos se comercializan o distribuyen dentro de ella.

Decisión ATC: revisar el portafolio afectado y participar técnicamente en la consulta pública antes de que concluya.

04. Reforma laboral: transición hacia la jornada de 40 horas

P: 5 | I: 5 | RRS: 25/25 — Crítico

La transición gradual hacia una jornada semanal de 40 horas exige analizar su impacto desde la capacidad productiva y no solamente desde la administración de personal.

Una reducción de horas disponibles, sin mejoras compensatorias, puede afectar utilización de equipos, cobertura de turnos, productividad por trabajador y costo unitario.

Pero también puede convertirse en un catalizador de mejoras: eliminación de desperdicios, mantenimiento planificado, automatización selectiva, capacitación y rediseño de procesos.

Decisión ATC: simular capacidad, turnos, dotación, OEE y costo por unidad bajo distintos escenarios de disponibilidad laboral.

05. Ley Aduanera y su reglamentación

P: 5 | I: 5 | RRS: 25/25 — Crítico

Los cambios en controles, expedientes electrónicos, trazabilidad, valoración y fiscalización aduanera elevan la importancia de la consistencia documental en comercio exterior.

Para plantas dependientes de insumos importados, un incumplimiento puede convertirse en demoras, inventarios adicionales, interrupciones de suministro o mayores costos logísticos.

Decisión ATC: mapear el flujo completo de información desde compras y proveedores hasta pedimentos, inventarios, producción y exportaciones.

06. Revisión del T-MEC 2026–2027

P: 4.5 | I: 5 | RRS: 22.5/25 — Crítico

La revisión comercial de América del Norte introduce incertidumbre sobre reglas de origen, contenido regional, acceso a mercados, medidas comerciales y configuración de cadenas de suministro.

Aquí es indispensable distinguir entre la alta certeza de que existe un proceso de revisión y la incertidumbre sobre sus resultados específicos.

Para empresas con inversiones de largo plazo, la exposición depende de su mezcla de proveedores, mercados de exportación, contenido regional y flexibilidad productiva.

Decisión ATC: modelar escenarios de abastecimiento y acceso a mercado sin asumir anticipadamente un resultado de negociación.

07. Ley General de Aguas

P: 5 | I: 4 | RRS: 20/25 — Muy alto

El agua representa simultáneamente un recurso operativo, una obligación regulatoria y una variable territorial de inversión.

Las condiciones de disponibilidad, concesión, reúso, descargas y fiscalización pueden afectar la continuidad de una operación industrial.

No todas las plantas enfrentan el mismo riesgo. La localización y el estrés hídrico de la cuenca son determinantes.

Decisión ATC: incorporar seguridad hídrica y viabilidad de permisos en la evaluación de ubicación industrial.

08. Reglamento de la Ley de Infraestructura de la Calidad

P: 5 | I: 4 | RRS: 20/25 — Muy alto

La infraestructura de calidad vincula normalización, metrología, acreditación, evaluación de conformidad y vigilancia de mercado.

Sus implicaciones alcanzan diseño, ensayos, certificaciones, documentación técnica y comercialización.

Aunque puede incrementar costos de cumplimiento, también fortalece la confiabilidad de productos y la capacidad de competir en mercados exigentes.

Decisión ATC: integrar requisitos normativos y evidencia de conformidad desde el desarrollo del producto, no al final de la producción.

09. PROY-NOM-160-SEMARNAT-2026: residuos peligrosos

P: 4 | I: 4 | RRS: 16/25 — Alto

La evolución propuesta de los planes de manejo de residuos peligrosos pone atención en prevención, minimización, valorización, trazabilidad y control documental.

Su impacto potencial comprende procedimientos internos, proveedores autorizados, registros y costos de manejo.

Decisión ATC: verificar clasificación de residuos, generación, almacenamiento, manifiestos, proveedores y consistencia entre operaciones reales y documentación.

10. Tapas adheridas y diseño circular de envases

P: 3.5 | I: 4 | RRS: 14/25 — Alto sectorial

Las propuestas relacionadas con tapas adheridas, reciclabilidad y diseño circular pueden afectar moldes, equipos, especificaciones de empaque, materiales y homologación de proveedores.

Su relevancia es especialmente elevada para fabricantes de envases y empresas de alimentos y bebidas, pero puede ser reducida para otras industrias.

Decisión ATC: realizar análisis técnico y económico de alternativas de diseño sin tratar una iniciativa pendiente como obligación vigente.

11. Inteligencia artificial en el trabajo y automatización

P: 3.5 | I: 4 | RRS: 14/25 — Alto

Las iniciativas sobre IA laboral plantean preguntas sobre transparencia, supervisión humana, protección de datos, discriminación y responsabilidad en decisiones automatizadas.

El reto para las empresas no consiste solamente en adoptar tecnología. Consiste en demostrar que su utilización está gobernada, documentada y alineada con los derechos laborales.

Decisión ATC: establecer controles de gobernanza para algoritmos que intervengan en selección, evaluación, supervisión y decisiones sobre trabajadores.

4. Un caso concreto: PROY-NACDMX-010-AMBT-2026

El 14 de octubre de 2026 se publicó para consulta pública el proyecto de Norma Ambiental para la Ciudad de México PROY-NACDMX-010-AMBT-2026, relacionado con bolsas y determinados productos plásticos.

Este caso resulta especialmente útil para demostrar cómo funciona el sistema ATC de alerta temprana.

No estamos frente a una nueva obligación definitiva. Estamos frente a un proyecto normativo suficientemente avanzado para justificar evaluación y preparación.

¿Qué propone?

Entre las disposiciones técnicas y administrativas identificadas destacan:

Contenido reciclado posconsumo. El proyecto contempla un mínimo de 50% para determinadas bolsas reutilizables y bolsas destinadas a residuos inorgánicos. Esto puede requerir reformulación, nuevas fuentes de abastecimiento y controles sobre composición.

Compostabilidad certificada. Se consideran referencias técnicas como ASTM D6400, ISO 17088, EN 13432 y NMX-E-273. Su aplicación exige revisar materiales, formulaciones, pruebas y evidencia de conformidad.

Caracterización técnica. Se contemplan ensayos como FTIR, TGA y DSC para productos compostables, incrementando la importancia de verificar composición y compatibilidad de materiales.

Registro y evaluación de conformidad. El cumplimiento documental y los procedimientos administrativos pueden convertirse en condiciones relevantes para comercializar productos comprendidos por la norma.

Planes de manejo y recuperación. Los esquemas de retorno, informes y obligaciones de seguimiento pueden generar costos recurrentes de logística inversa.

Trazabilidad. Facturas, balances de materiales, bitácoras y cadena de custodia adquieren valor como evidencia verificable.

La señal estratégica es clara:

La circularidad empieza a traducirse en especificaciones medibles, evidencia documental y condiciones potenciales de acceso al mercado.

¿Por qué asignamos RRS = 18/25?

Nuestra evaluación de referencia utiliza:

Probabilidad: 4.5/5. El proyecto ya fue publicado oficialmente para consulta y ha avanzado más allá de una propuesta conceptual. Esto no garantiza que el texto final conserve todas sus disposiciones.

Impacto: 4/5. Para una empresa directamente expuesta, puede modificar materiales, procesos, certificaciones, proveedores, costos y condiciones de comercialización.

Resultado: 18/25 — Prioridad ejecutiva roja.

Para un fabricante cuya actividad dependa fuertemente de los productos regulados, el impacto podría alcanzar 5/5. En ese escenario, el RRS sería 22.5/25.

Por el contrario, una empresa sin productos comprendidos ni exposición comercial a CDMX podría registrar un impacto directo significativamente menor.

Este último punto es esencial: el riesgo no es una propiedad exclusiva de la norma; depende también de la exposición y de la vulnerabilidad de cada empresa.

El VSM: cómo una disposición se convierte en costo, riesgo u oportunidad

En el análisis tradicional, una nueva norma puede quedarse dentro del área jurídica o ambiental.

Nuestro enfoque busca identificar cómo se propaga a través de la cadena de valor:

REGULACIÓN → MATERIALES → PROCESOS → COSTO/CAPACIDAD → MERCADO → RIESGO → VALOR

Aplicado al proyecto de CDMX:

Regulación: especificaciones técnicas, registro, planes de manejo y trazabilidad.

Materiales: contenido reciclado posconsumo, compostabilidad, disponibilidad de insumos y homologación de proveedores.

Procesos: ensayos, controles de calidad, documentación, adecuaciones productivas y registros.

Costo y capacidad: inversiones de reformulación, certificaciones, gestión documental y logística inversa.

Mercado: posibilidad de comercializar productos, conservar clientes y cumplir especificaciones de cadenas comerciales.

Riesgo: restricciones comerciales, sanciones, interrupciones, pérdida de contratos o afectaciones reputacionales.

Valor: diferenciación, confiabilidad, acceso a mercados y capacidad para responder anticipadamente a futuras regulaciones.

El mismo cambio normativo puede producir consecuencias opuestas según la preparación de la empresa.

Una organización rezagada podría enfrentar mayores costos y pérdida de competitividad. Otra, con proveedores homologados, trazabilidad y productos adaptados, podría convertir el cumplimiento en una ventaja comercial.

La gestión del riesgo no consiste únicamente en evitar pérdidas; también permite identificar oportunidades de creación de valor.

La línea de tiempo: anticipar sin confundir proyección con certeza

El proyecto fue publicado el 14 de octubre de 2026, iniciando el procedimiento de consulta pública previsto.

Nuestra línea de vigilancia considera cuatro etapas:

Primera: publicación oficial. Evento confirmado.

Segunda: consulta pública. Ventana de participación técnica de 30 días naturales, cuyo cómputo exacto debe verificarse por una diferencia de redacción detectada en el aviso y sus transitorios. Como medida prudencial, recomendamos preparar observaciones antes del 13 de noviembre, sin considerar esa fecha un vencimiento oficial confirmado.

Tercera: revisión y eventual publicación definitiva. Fase futura condicionada a la valoración de observaciones y al procedimiento correspondiente.

Cuarta: entrada en vigor e implementación. Dependerá del texto definitivo y de sus disposiciones transitorias.

Esta distinción evita un error frecuente: asignar presupuestos y cronogramas obligatorios a fechas que todavía no han sido establecidas por la autoridad.

Sin embargo, esperar hasta la publicación definitiva también puede ser costoso si la adaptación requiere ensayos, reformulación, nuevos proveedores o inversiones.

Por eso proponemos preparar decisiones reversibles ahora y reservar compromisos irreversibles para cuando exista evidencia suficiente.

La alerta ejecutiva: qué debemos hacer desde ahora

Para el PROY-NACDMX-010-AMBT-2026 proponemos una secuencia de actuación de 90 días.

En los primeros 30 días:

Identificar productos potencialmente comprendidos, revisar especificaciones actuales, detectar brechas técnicas y preparar observaciones para la consulta pública, preferiblemente mediante coordinación con cámaras y asociaciones industriales.

Entre los días 31 y 60:

Evaluar disponibilidad de material reciclado posconsumo, capacidad de trazabilidad, laboratorios, organismos de certificación y alternativas de abastecimiento.

Entre los días 61 y 90:

Construir escenarios de CAPEX y OPEX, evaluar adecuaciones de procesos, revisar contratos con proveedores y clientes, y actualizar la matriz de riesgos conforme avance el procedimiento normativo.

Para inversionistas que consideran iniciar operaciones en México durante 2027, este análisis debe incorporarse al diseño de producto, la selección de ubicación, el modelo de suministro y la evaluación de retorno.

No se trata de detener inversiones por una propuesta regulatoria. Se trata de evitar que un requisito previsible aparezca demasiado tarde en el modelo financiero.


¿Qué sigue en el Sistema ATC?

Este Radar no es un informe estático. Es un sistema de monitoreo y aprendizaje que actualizaremos conforme evolucione la evidencia.

Nuestros próximos pasos son:

  • Dar seguimiento a la consulta y eventual publicación definitiva del PROY-NACDMX-010-AMBT-2026.
  • Actualizar el estado jurídico y los plazos de las once señales regulatorias del Radar.
  • Recalcular probabilidad, impacto y RRS cuando aparezcan nuevas evidencias.
  • Incorporar factores sectoriales y territoriales para diferenciar la exposición de cada empresa.
  • Contrastar los riesgos con escenarios financieros, capacidad operativa y decisiones de inversión.
  • Mantener un registro histórico de puntuaciones y resultados para evaluar la capacidad de anticipación del método.

En futuras versiones también distinguiremos explícitamente entre riesgo regulatorio y oportunidad competitiva, porque ambos pueden coexistir.

Reflexión final

En trading, una buena decisión no depende de acertar cada movimiento del mercado, sino de comprender el contexto, gestionar la exposición y ejecutar un proceso disciplinado.

En la industria ocurre algo semejante.

No podemos controlar cuándo se aprobará una norma, cómo evolucionará una negociación comercial o qué requisitos impondrá una autoridad.

Pero sí podemos controlar qué tan temprano detectamos las señales, qué tan rigurosamente las evaluamos y qué tan preparados estamos para responder.

Ese es el propósito del Sistema ATC de Alerta Temprana Regulatoria:

Convertir información en evidencia, evidencia en decisiones y decisiones en resiliencia y valor.

A continuacion dejo la transcripcion de un podcast en el que hablamos de esto con mi amiga Laura de Méxas.

¿Tus bolsas plásticas están preparadas para las nuevas reglas de la CDMX?
Podcast AT Consulting — Gestión Estratégica de Impacto y Riesgo
Participantes:
LAURA — Entrevistadora: Especialista en materiales plásticos, transformación, formulaciones y mercados.
ALEXANDER — Invitado: Especialista en normativa ambiental, sostenibilidad industrial y gestión de riesgos.

APERTURA — Una norma que puede cambiar más que una bolsa

LAURA:
Bienvenidos a este nuevo episodio.
Hoy vamos a hablar de algo que, a primera vista, parece un asunto exclusivo de fabricantes de bolsas plásticas. Pero cuando empezamos a revisar los detalles, descubrimos que puede involucrar a transformadores, proveedores de resinas, laboratorios, importadores, distribuidores y hasta inversionistas que están considerando instalar nuevas operaciones en México.
Nos referimos al PROY-NACDMX-010-AMBT-2026, un proyecto de norma ambiental para la Ciudad de México relacionado con bolsas y productos plásticos de un solo uso.
Y para entender sus implicaciones nos acompaña Alexander, especialista en gestión de riesgos y transformación industrial.
Alexander, bienvenido.
ALEXANDER:
Gracias, Laura. Es un gusto conversar sobre este tema, especialmente porque nos permite demostrar algo que siempre hemos defendido: la gestión regulatoria no debe comenzar cuando una obligación ya está vigente.
Debe comenzar cuando aparecen señales suficientemente relevantes para anticipar sus consecuencias.
Y este proyecto es un excelente ejemplo.
LAURA:
Eso me interesa. Porque en la industria solemos enterarnos de los cambios cuando el cliente nos exige un nuevo certificado, cuando compras nos pide otra formulación o, peor todavía, cuando alguien nos informa que ya no podemos comercializar determinado producto.
ALEXANDER:
Exactamente. Y entonces dejamos de gestionar un riesgo para comenzar a administrar una urgencia.
La diferencia entre ambas situaciones puede representar meses de preparación, inversiones imprevistas o incluso interrupciones comerciales.

BLOQUE 1 — ¿Qué es el PROY-NACDMX-010-AMBT-2026?
LAURA:
Comencemos por lo esencial. ¿De qué trata este proyecto y por qué debería interesarle a una empresa que fabrica plásticos?
ALEXANDER:
De acuerdo con la alerta temprana que preparamos, el proyecto fue publicado el 14 de octubre de 2026 en la Gaceta Oficial de la Ciudad de México para consulta pública.
Su propósito es actualizar la regulación ambiental aplicable a determinadas bolsas y productos plásticos de un solo uso, tomando como antecedente la NACDMX-010-AMBT-2019.
Entre sus ejes están la compostabilidad, la reutilización, el contenido reciclado, la trazabilidad y los planes de manejo.
Pero hay una distinción indispensable: estamos hablando de un proyecto sometido a consulta, no de una norma definitiva cuyas nuevas disposiciones ya sean exigibles.
LAURA:
Y eso cambia completamente la conversación. Porque una cosa es preparar una empresa para posibles requisitos y otra afirmar que mañana todos tienen que cambiar sus formulaciones.
ALEXANDER:
Correcto. Nuestro trabajo consiste en identificar qué disposiciones se proponen, a quiénes podrían afectar y qué preparación sería razonable antes de que exista un texto definitivo.
Además, hay una característica relevante: el alcance no se limita necesariamente a las fábricas ubicadas dentro de la Ciudad de México.
Una empresa que produce en otra entidad, pero comercializa o distribuye productos comprendidos en la CDMX, también podría resultar afectada.
LAURA:
Es decir, una planta en Puebla, Estado de México o Querétaro podría tener que revisar sus productos si abastece clientes en la capital.
ALEXANDER:
Así es, dependiendo del producto y del alcance que finalmente establezca la norma.
Por eso no basta con preguntar dónde está la fábrica. También hay que preguntar dónde se comercializa el producto y quién asume cada obligación dentro de la cadena de suministro.

BLOQUE 2 — Los requisitos que pueden transformar la industria
LAURA:
Entremos en la parte técnica.
Uno de los puntos que más llama la atención en nuestra guía es el contenido mínimo de material reciclado posconsumo.
Se habla de un 50% para determinadas bolsas plásticas reutilizables y bolsas para residuos inorgánicos.
¿Qué significa esto desde la perspectiva industrial?
ALEXANDER:
Significa que, para los productos comprendidos en esa disposición propuesta, la formulación podría dejar de depender exclusivamente de criterios de desempeño y costo.
También tendría que responder a un requisito específico de composición.
Y eso abre varias preguntas.
¿Existe suficiente material reciclado posconsumo con las características necesarias?
¿Tenemos proveedores confiables?
¿Podemos mantener las propiedades mecánicas del producto?
¿Tenemos evidencia documental del origen y contenido del material?
LAURA:
Y desde la transformación de plásticos sabemos que incorporar reciclado no es simplemente sustituir una resina por otra.
Hay variabilidad entre lotes, contaminación potencial, cambios en índice de fluidez, propiedades mecánicas y apariencia.
Dependiendo de la aplicación, también puede cambiar la estabilidad del proceso.
ALEXANDER:
Exactamente. Y ahí aparece una de las principales aportaciones del análisis VSM: una modificación regulatoria aguas arriba puede desencadenar consecuencias en toda la cadena de valor.
El requisito afecta materiales; los materiales afectan procesos; los procesos afectan costos y capacidad; y todo eso puede terminar afectando el acceso al mercado.
LAURA:
Otro asunto es la compostabilidad certificada.
Aquí conviene aclarar algo: que un material sea de origen biológico no significa automáticamente que sea compostable.
ALEXANDER:
Muy importante.
Y tampoco significa que cualquier producto identificado comercialmente como biodegradable cumpla los criterios de compostabilidad que pudiera exigir la regulación.
En el proyecto analizado aparecen referencias técnicas como ASTM D6400, ISO 17088, EN 13432 y NMX-E-273.
La implicación industrial es que los fabricantes podrían necesitar ensayos, certificaciones y documentación que respalden sus declaraciones.
LAURA:
Además, una certificación de materia prima no necesariamente sustituye la evaluación del producto terminado.
Los espesores, aditivos, tintas y configuraciones del producto pueden modificar su comportamiento.
ALEXANDER:
Y eso es precisamente lo que debe revisar cada empresa: qué exige el texto propuesto, qué evidencia tiene y qué ensayos adicionales podrían corresponderle.

BLOQUE 3 — ¿Por qué aparecen pruebas FTIR, TGA y DSC?
LAURA:
La guía menciona tres técnicas que muchos ingenieros conocemos, pero que pueden resultar poco familiares para un director financiero o un inversionista: FTIR, TGA y DSC.
Expliquémoslas sin convertir este podcast en una clase de laboratorio.
ALEXANDER:
De acuerdo.
La espectroscopía FTIR permite identificar características químicas de los materiales mediante su respuesta a la radiación infrarroja.
La TGA, o análisis termogravimétrico, estudia cómo cambia la masa de una muestra al variar la temperatura bajo condiciones controladas.
Y la DSC, calorimetría diferencial de barrido, permite estudiar transiciones térmicas de los materiales.
Son herramientas útiles para caracterizar formulaciones y detectar determinadas diferencias o incompatibilidades.
LAURA:
Pero ninguna de ellas, por sí sola, demuestra que una bolsa sea compostable.
ALEXANDER:
Exactamente.
No debemos confundir caracterización química o térmica con la demostración integral de compostabilidad.
Las pruebas deben interpretarse dentro del esquema de evaluación de conformidad que finalmente resulte aplicable.
Y desde la gestión de riesgos, el mensaje es sencillo: si una empresa necesita nuevos ensayos o certificaciones, debe anticipar disponibilidad de laboratorios, costos, tiempos y posibles ajustes de formulación.
LAURA:
Porque el cuello de botella no siempre está en la extrusora.
A veces está en el laboratorio, en la documentación o en la homologación de un proveedor.
ALEXANDER:
Y esos cuellos de botella también afectan la capacidad comercial.

BLOQUE 4 — Registro, trazabilidad y logística inversa
LAURA:
Hay otro grupo de disposiciones que podría ser particularmente relevante para empresas medianas: registro ante SEDEMA, evaluación de conformidad, planes de manejo, esquemas de retorno e informes semestrales.
¿Qué lectura haces de esto?
ALEXANDER:
Que la discusión ya no se limita al material.
Estamos hablando de sistemas de gestión.
La empresa tendría que evaluar cómo documenta el origen de sus insumos, cómo controla las transformaciones, cómo conserva evidencias y cómo organiza sus obligaciones administrativas.
También debe analizar los posibles costos de logística inversa y seguimiento.
LAURA:
Eso puede representar una carga importante, sobre todo para empresas que hoy cuentan con controles de producción, pero no necesariamente con trazabilidad documental completa del material reciclado.
ALEXANDER:
Así es.
Pensemos en una cadena con un proveedor de reciclado, un transformador, un distribuidor y una cadena comercial.
Si el cliente exige demostrar contenido reciclado, necesitamos definir qué documentos respaldan cada transferencia, quién conserva la evidencia y cómo se relaciona con el producto final.
Sin esa disciplina, una empresa puede tener un producto técnicamente adecuado y, aun así, enfrentar dificultades para demostrar su conformidad.
LAURA:
Es una idea poderosa: la conformidad debe poder demostrarse, no solamente declararse.
ALEXANDER:
Exactamente.
Y cuando incorporamos esta perspectiva al diseño del proceso desde el principio, la trazabilidad puede convertirse en una ventaja competitiva.

BLOQUE 5 — El método ATC: de la señal a la decisión
LAURA:
Quiero detenerme en la metodología.
En la guía aparece una evaluación ATC con probabilidad de 4.5 sobre 5, impacto de 4 sobre 5 y una puntuación de 18 sobre 25.
¿Por qué ese resultado?
ALEXANDER:
Porque utilizamos una matriz de riesgo regulatorio que combina dos dimensiones: probabilidad e impacto.
En este caso, asignamos una probabilidad analítica de 4.5 sobre 5 porque el proyecto había superado la elaboración técnica y había llegado a una etapa formal de publicación para consulta pública.
Eso es una señal de avance.
Pero quiero ser muy preciso: 4.5 no significa una probabilidad estadística del 90% de aprobación.
Es una calificación de madurez y exposición regulatoria dentro de nuestro método.
LAURA:
¿Y el impacto de cuatro?
ALEXANDER:
Responde a la posibilidad de que los requisitos propuestos afecten simultáneamente formulaciones, proveedores, pruebas, registros, procesos productivos, logística y comercialización.
Multiplicamos 4.5 por 4 y obtenemos 18 puntos sobre 25.
Dentro de nuestra metodología, ese resultado se clasifica como prioridad ejecutiva roja.
LAURA:
Pero no todas las empresas tienen el mismo riesgo.
ALEXANDER:
Correcto.
Una empresa con un portafolio altamente expuesto a los productos comprendidos en la propuesta y con ventas importantes en la CDMX puede tener una exposición elevada.
En cambio, una empresa que no fabrica, importa ni comercializa productos alcanzados podría tener una exposición directa muy baja.
La matriz sirve para priorizar una señal. Después necesitamos hacer el análisis específico por empresa.
LAURA:
Y aquí entra el VSM, ¿verdad?
ALEXANDER:
Exactamente.
Nuestro VSM regulatorio conecta siete elementos:
Regulación, materiales, procesos, costo y capacidad, mercado, riesgo y valor.
No buscamos únicamente identificar una obligación.
Queremos entender cómo se propaga a través de la operación y qué decisiones permitirían proteger o incluso mejorar la competitividad.

BLOQUE 6 — La consulta pública y la línea de tiempo
LAURA:
Hablemos del calendario.
La guía muestra la publicación del 14 de octubre, un periodo de consulta pública y una posible etapa posterior de revisión y publicación definitiva.
¿Cuál es el mensaje para las empresas?
ALEXANDER:
Que hay una ventana de intervención que no debe desperdiciarse.
Según el análisis inicial, el aviso establece un periodo de consulta de 30 días naturales, pero también identificamos una referencia al día hábil siguiente que requiere aclaración sobre el cómputo del plazo.
Por prudencia, recomendamos preparar las observaciones con anticipación y confirmar formalmente con SEDEMA la fecha límite aplicable.
LAURA:
Y las observaciones deberían ser técnicas, no simplemente manifestaciones de desacuerdo.
ALEXANDER:
Por supuesto.
Una contribución útil puede documentar disponibilidad de material reciclado, resultados de ensayos, capacidad de los laboratorios, costos de transición o dificultades de trazabilidad.
También puede proponer redacciones más precisas, plazos de implementación razonables o mecanismos verificables de cumplimiento.
LAURA:
¿Podemos afirmar que la norma definitiva estará publicada en 2027?
ALEXANDER:
No.
Podemos construir escenarios de planeación, pero no debemos presentar una fecha proyectada como un compromiso oficial.
La revisión de observaciones, la publicación definitiva y la entrada en vigor dependen del procedimiento y del texto que finalmente se apruebe.
Por eso nuestra alerta temprana distingue entre hechos confirmados, ventanas de participación y proyecciones de trabajo.

BLOQUE 7 — ¿Qué significa para quienes quieren invertir en México?
LAURA:
Pensemos ahora en un inversionista que planea iniciar operaciones en México durante 2027.
¿Debería preocuparse por un proyecto normativo local?
ALEXANDER:
Debería incorporarlo a su proceso de debida diligencia si su modelo de negocio está expuesto.
No necesariamente para detener una inversión, sino para evitar que una decisión de hoy genere costos de adaptación innecesarios mañana.
Por ejemplo, antes de seleccionar tecnología y proveedores conviene evaluar si la línea puede procesar materiales alternativos, qué certificaciones podrían necesitar los productos y qué capacidad de trazabilidad ofrece el sistema de gestión.
LAURA:
También podría cambiar la evaluación económica de una línea de producción.
ALEXANDER:
Exactamente.
Puede haber inversiones en control de calidad, ensayos, almacenamiento segregado, documentación, sistemas de información o desarrollo de proveedores.
Pero también hay oportunidades.
Una empresa que se prepara oportunamente puede responder antes a las exigencias de sus clientes, reducir incertidumbre y diferenciarse mediante evidencia verificable.
LAURA:
Entonces el cumplimiento no debe verse exclusivamente como gasto.
ALEXANDER:
Así es.
Una parte representa costo de cumplimiento. Otra puede representar inversión en capacidades que generan valor.
La diferencia está en evaluar correctamente qué exige la regulación, qué necesita el mercado y qué capacidades tiene la empresa.

BLOQUE 8 — Alerta temprana: ¿qué hacemos ahora?
LAURA:
Para cerrar, quiero pedirte algo muy concreto.
Imagina que nos escucha el director general de una empresa que fabrica bolsas o productos plásticos.
¿Qué debería hacer durante los próximos 90 días?
ALEXANDER:
Yo propondría cinco acciones.
Primera: identificar los productos del portafolio que podrían quedar comprendidos en la propuesta y sus canales de comercialización en la Ciudad de México.
Segunda: revisar formulaciones, contenido reciclado, documentación técnica y evidencias de conformidad disponibles.
Tercera: evaluar proveedores de reciclado posconsumo, laboratorios y organismos de certificación, incluyendo capacidad, costos y tiempos.
Cuarta: preparar observaciones técnicas durante la consulta pública, individualmente o mediante cámaras y asociaciones industriales, verificando primero el plazo oficial.
Quinta: elaborar escenarios financieros de adaptación y actualizar la matriz de riesgos conforme avance el procedimiento normativo.
LAURA:
Y después de esos primeros pasos, ¿qué sigue?
ALEXANDER:
Seguimiento.
Nuestro sistema de alerta temprana continuará observando cambios al proyecto, respuestas institucionales, publicaciones oficiales y cualquier definición sobre vigencia o periodos de transición.
Cuando aparezca nueva evidencia, revisaremos las puntuaciones de riesgo y las decisiones recomendadas.
Eso es lo que convierte a la metodología en un proceso dinámico.
LAURA:
Me quedo con una conclusión: no necesitamos esperar a que una norma entre en vigor para empezar a entender sus efectos.
Pero tampoco debemos actuar como si una propuesta ya fuera una obligación definitiva.
ALEXANDER:
Exactamente.
Y esa diferencia resume nuestra filosofía de trabajo:
Precisión antes que frecuencia.
Evidencia sobre predicción.
Proceso más que resultado.
Porque anticipar correctamente un cambio regulatorio puede proteger mucho más que el cumplimiento: puede proteger inversiones, continuidad operativa y acceso a mercados.

CIERRE
LAURA:
Hoy analizamos el PROY-NACDMX-010-AMBT-2026 desde la perspectiva de la industria plástica, la gestión de riesgos y las decisiones de inversión.
Revisamos sus principales disposiciones propuestas, las implicaciones para materiales y procesos, la importancia de la trazabilidad y las oportunidades que ofrece una preparación anticipada.
ALEXANDER:
Y recordemos algo fundamental: una alerta temprana no es una sentencia sobre lo que ocurrirá.
Es una herramienta para tomar mejores decisiones con la evidencia disponible.
LAURA:
Gracias por acompañarnos.
Si participas en la industria del plástico, la manufactura o la inversión industrial en México, te invitamos a seguir este espacio.
Nos escuchamos en el próximo episodio de AT Consulting — Gestión Estratégica de Impacto y Riesgo.
Este episodio es informativo. El análisis corresponde al proyecto y a la alerta regulatoria elaborada con corte al 15 de octubre de 2026. Las disposiciones propuestas no deben interpretarse como obligaciones definitivas sin verificar la publicación y vigencia del instrumento final.

PRECISIÓN > FRECUENCIA · EVIDENCIA > PREDICCIÓN · PROCESO > RESULTADO

AT Consulting
Gestión Estratégica de Impacto y Riesgo
alextorres.consulting

#GestiónDeRiesgos #IndustriaMexicana #RegulaciónAmbiental #EconomíaCircular #InversiónIndustrial

Pueden escuchar un podcast que es un poco más ácido en Spotify.

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)