Alertas Institucionales con SMC: Mejora tu Trading

Alertas Institucionales con SMC: Mejora tu Trading

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

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

🎯 Objetivo

Este enfoque se fundamenta en:

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

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

⚙️ Configuración Inicial

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

🔍 Jerarquía de Confirmación

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

🧩 Alertas Institucionales

El sistema genera alertas para:

  • BOS
  • Pinbar
  • Toque
  • Entrada

Cada alerta incluye:

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

Esto permite operar sin estar pegado al gráfico.

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

🧠 Interpretación Visual

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

🧩 Reglas de Ejecución

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

🧮 Optimización sugerida

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

Conclusiones

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

Script para Pine

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

Ejemplo visual

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

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

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

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

Integración del Panel Multitimeframe y el Mapa de Sesiones

🧠 1. Fundamento Institucional

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

Por eso, este sistema combina dos herramientas:

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

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

🧩 2. Estructura del análisis

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

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

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

Paso 2 – Contexto de sesiones

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

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

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

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

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

Tu entrada se apoya en:

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

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

⚙️ 3. Fundamento técnico del Sesgo General

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

🧩 Qué mide exactamente?

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

⚙️ Cómo se interpreta operativamente

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

💡 Ventaja institucional

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

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

🧘 4. Psicología y disciplina

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

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

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

5. Scripts utilizados en Pine de TradingView

Panel

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

Panel de Sesiones

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

🧭 6. Conclusión operativa

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

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

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

#Trading #ForexTrading #InstitutionalTrading #SmartMoneyConcepts #RiskManagement

7. Resultados de Testing Real

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

Interpretación Ejecutiva de Resultados

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

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

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

En términos institucionales:

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

2. El riesgo está relativamente controlado

Los datos muestran:

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

Esto significa que:

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

Ejecutivamente, esto sugiere:

Prioridad estratégica:

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

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

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

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

3. Excelente control emocional y operativo

El tiempo medio de retención es extremadamente revelador:

Tipo de operaciónTiempo
Ganadoras28 min
Perdedoras34 min

Esto transmite algo muy importante:

No existe una sobreexposición emocional extrema.

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

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

Muchos traders minoristas muestran exactamente lo contrario:

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

Aquí no se observa ese patrón destructivo.

4. Los resultados grandes confirman capacidad de captura

Las operaciones destacadas en Gold muestran capturas de:

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

Eso confirma que:

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

Esto es clave porque valida:

“La estrategia puede escalar”.

Diagnóstico Ejecutivo Final

Fortalezas

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

Áreas de mejora

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

Conclusión Estratégica

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

Existe estructura operativa repetible.

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

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

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

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

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

1. Introducción

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

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

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

2. Objetivo del Indicador

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

  • Asia
  • Londres
  • Nueva York

Mostrando:

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

3. Configuración Inicial

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

3.1. Mostrar/Ocultar Panel

Permite activar o desactivar el panel completo.

3.2. Selección de Sesiones

Puedes activar o desactivar individualmente:

  • Asia
  • Londres
  • Nueva York

3.3. Timeframe Fijo

Este es uno de los elementos clave del indicador.

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

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

4. Columnas del Panel

El panel muestra hasta 7 columnas:

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

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

5. Cálculo de OHLC por Sesión

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

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

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

6. Cierre de Sesión y Valores Finales

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

Cuando una sesión termina:

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

7. Rango y Dirección

7.1. Rango

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

Rango = High – Low

7.2. Dirección

Se determina comparando el cierre con la apertura:

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

8. Resumen Institucional

En la última fila del panel aparece un resumen:

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

Este resumen identifica:

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

Modo Fijo

Cuando useFixedTF = true:

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

Modo Dinámico

Cuando useFixedTF = false:

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

9. Interpretación del Panel

9.1. Lectura rápida

El panel permite identificar en segundos:

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

9.2. Ejemplos

Ejemplo 1 – Día tendencial alcista

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

Ejemplo 2 – Reversión

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

Ejemplo 3 – Volatilidad en Asia

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

10. Recomendaciones de Uso

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

11. Ventajas del Indicador

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

12. Conclusión

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

13. Script de Pine para uso en Trading View

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

📘 MAPA INSTITUCIONAL DE SESIONES

📘 MAPA INSTITUCIONAL DE SESIONES

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


🎯 1. Estructura general del día institucional

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

🟦 ASIA — Consolida y corrige

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

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


🟩 LONDRES — Impulsa

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

Rol: Impulso + Creación de desequilibrios.


🟥 NUEVA YORK — Decide

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

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


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

No es magia. Es mecánica de mercado.

✔ 1. Menor liquidez → precio vuelve al equilibrio

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

✔ 2. Los algoritmos buscan eficiencia

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

✔ 3. Market makers ajustan inventarios

Antes de Londres necesitan volver a zonas de valor.

✔ 4. Asia opera dentro del “fair value”

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


📐 3. Mapa visual del flujo del día

00:00–05:00 CST — ASIA

  • Rango estrecho
  • Correcciones
  • Relleno de FVG
  • Reequilibrio

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

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

02:00–10:00 CST — LONDRES

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

07:30–15:00 CST — NUEVA YORK

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

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

Paso 1 — Marca el Asian Range

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

Paso 2 — Identifica los FVG creados por Londres

Son los desequilibrios que Asia suele rellenar.

Paso 3 — Observa si Asia reequilibra

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

Paso 4 — Opera retrocesos en Londres

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

Paso 5 — NY decide

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


🧭 5. Plantilla institucional para tus análisis diarios

Puedes copiar esto y usarlo cada mañana:

1. Asian Range:

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

2. Londres:

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

3. NY:

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

Glosario

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

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

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

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

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

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

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

📘 MANUAL DE USO – Indicador “EMAs personalizables + VWAP + Cruces (Modular)”

📘 MANUAL DE USO – Indicador “EMAs personalizables + VWAP + Cruces (Modular)”

1. Introducción

El indicador EMAs personalizables + VWAP + Cruces (Modular) es una herramienta diseñada para ofrecer una lectura clara, flexible y profesional de la estructura del mercado mediante:

  • Dos medias móviles exponenciales (EMA corta y EMA larga).
  • La línea VWAP institucional.
  • Señales visuales de cruces entre EMAs.
  • Un panel institucional que resume tendencia, fuerza, distancia, relación con VWAP y sesgo general.

Este indicador es ideal para traders que buscan simplicidad, modularidad y una lectura ejecutiva del mercado.

2. Objetivo del Indicador

El objetivo es proporcionar:

  • Una lectura clara de la tendencia mediante EMAs.
  • Confirmación institucional mediante VWAP.
  • Señales de cruce para entradas o cambios de sesgo.
  • Un panel que sintetiza la información en un vistazo.
  • Configuración modular para activar solo lo que necesitas.

3. Componentes del Indicador

El indicador está compuesto por cuatro módulos principales:

3.1. EMAs (Exponential Moving Averages)

  • EMA corta (por defecto 9).
  • EMA larga (por defecto 21).
  • Ambas totalmente configurables en:
    • Periodo
    • Color
    • Grosor
    • Estilo de línea

3.2. VWAP (Volume Weighted Average Price)

  • Línea institucional que muestra el precio promedio ponderado por volumen.
  • Útil para identificar zonas de valor y desequilibrio.

3.3. Señales de Cruce

  • Flecha verde (▲) cuando la EMA corta cruza por encima de la EMA larga.
  • Flecha roja (▼) cuando la EMA corta cruza por debajo.
  • Activables/desactivables desde el panel.

3.4. Panel Institucional

Incluye:

  • Tendencia actual
  • Fuerza porcentual
  • Distancia entre EMAs
  • Intensidad (nube)
  • Estado respecto a VWAP
  • Termómetro visual
  • Sesgo general

Todo con colores dinámicos y fondo adaptativo.

4. Inputs del Indicador

4.1. Visibilidad

Puedes activar o desactivar cada módulo:

  • Mostrar EMA corta
  • Mostrar EMA larga
  • Mostrar VWAP
  • Mostrar señales de cruce

Esto permite usar el indicador como:

  • Sistema completo
  • Solo EMAs
  • Solo VWAP
  • Solo señales
  • O cualquier combinación

4.2. Periodos

Define los periodos de cálculo:

  • EMA corta (default 9)
  • EMA larga (default 21)

Puedes adaptarlos a tu estilo:

  • Scalping → 5/13
  • Intradía → 9/21
  • Swing → 20/50

4.3. Colores

Cada línea tiene su propio color configurable:

  • EMA corta
  • EMA larga
  • VWAP

4.4. Grosor

Controla el grosor de cada línea (1–5).

4.5. Estilo de Línea

Puedes elegir entre:

  • Line
  • Histogram
  • Area
  • Columns
  • Circles
  • Stepline

Esto permite adaptar el indicador a tu estilo visual.

5. Señales de Cruce

El indicador detecta automáticamente:

Cruce Alcista

  • EMA corta cruza por encima de EMA larga
  • Señal: ▲ verde
  • Ubicación: debajo de la vela

Cruce Bajista

  • EMA corta cruza por debajo de EMA larga
  • Señal: ▼ roja
  • Ubicación: arriba de la vela

Estas señales pueden usarse como:

  • Confirmación de entrada
  • Cambio de sesgo
  • Filtro de tendencia

6. Panel Institucional

El panel aparece en la esquina inferior izquierda y muestra:

6.1. Tendencia

Determina si:

  • EMA corta > EMA larga → Alcista
  • EMA corta < EMA larga → Bajista
  • Igual → Neutral

Color dinámico:

  • Verde → Alcista
  • Rojo → Bajista
  • Amarillo → Neutral

6.2. Fuerza (%)

Mide qué tan separadas están las EMAs respecto al máximo histórico reciente.

Interpretación:

  • 0–40% → Débil
  • 40–70% → Tendencia moderada
  • 70–100% → Tendencia fuerte

6.3. Distancia entre EMAs

Valor numérico de separación entre ambas EMAs.

Útil para:

  • Identificar compresión
  • Detectar expansión
  • Medir momentum

6.4. Intensidad (Nube)

Valor entre 10 y 90 que representa la fuerza relativa.

6.5. Estado respecto a VWAP

  • ▲ Sobre VWAP → Sesgo alcista institucional
  • ▼ Bajo VWAP → Sesgo bajista institucional
  • ⚪ En VWAP → Zona de equilibrio

6.6. Termómetro Visual

Barra de 10 bloques:

  • Más bloques llenos → mayor fuerza
  • Color dinámico según tendencia

6.7. Sesgo General

Combinación de:

  • Tendencia
  • Fuerza
  • Relación con VWAP

Puede ser:

  • 🟢 Fuerte Alcista
  • 🔴 Fuerte Bajista
  • 🟡 Tendencia Débil
  • 🟡 Neutral

7. Cómo Usarlo en tu Trading

7.1. Confirmación de Tendencia

  • EMA corta > EMA larga
  • Precio sobre VWAP
  • Fuerza > 60%

→ Sesgo alcista confiable.

7.2. Entradas por Cruce

  • Cruce alcista → buscar compras
  • Cruce bajista → buscar ventas

7.3. Filtros Institucionales

  • No operar contra VWAP
  • Evitar señales con fuerza < 40%
  • Confirmar con el termómetro

7.4. Gestión de Riesgo

  • Entrar en retrocesos hacia EMA corta
  • Salir cuando fuerza cae por debajo de 30%
  • Evitar operar cuando el panel marca “Neutral”

8. Recomendaciones Finales

  • Mantén el indicador limpio: activa solo lo que necesitas.
  • Usa VWAP como filtro institucional.
  • No operes cruces débiles.
  • Observa la fuerza y el termómetro antes de entrar.
  • El panel es tu brújula: úsalo para confirmar contexto.

9. Conclusión

Este indicador combina simplicidad, modularidad y lectura institucional en un solo paquete.
Es ideal para traders que buscan claridad, confirmación y una visión ejecutiva del mercado.

10. Script en Pine

//@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 (ESQUINA SUPERIOR IZQUIERDA)
// =========================
var table infoPanel = table.new(position.bottom_left, 2, 7, border_width=1, frame_color=color.new(color.white, 80))

// Cálculos base
diff    = math.abs(emaShort - emaLong)
maxDiff = ta.highest(diff, 200)
intensity = maxDiff == 0.0 ? 0.0 : diff / maxDiff
opacity = 90 - (intensity * 70)
opacity := math.min(math.max(opacity, 10.0), 90.0)
tendencia = emaShort > emaLong ? "▲ Alcista" : emaShort < emaLong ? "▼ Bajista" : "⚪ Neutral"
fuerzaPct = math.round(intensity * 100)
distancia = diff
vwapEstado = close > vwapLine ? "▲ Sobre VWAP" : close < vwapLine ? "▼ Bajo VWAP" : "⚪ En VWAP"

// Termómetro visual (0–100% → 10 bloques)
blocks = math.round(fuerzaPct / 10)
barra = ""
for i = 1 to 10
    barra += i <= blocks ? "▓" : "░"
// Colores dinámicos
tendColor     = emaShort > emaLong ? color.new(color.lime, 0) : emaShort < emaLong ? color.new(color.red, 0) : color.new(color.yellow, 0)
fuerzaColor   = fuerzaPct > 70 ? color.new(color.lime, 0) : fuerzaPct > 40 ? color.new(color.yellow, 0) : color.new(color.red, 0)
vwapTextColor = close > vwapLine ? color.new(color.lime, 0) : close < vwapLine ? color.new(color.red, 0) : color.new(color.yellow, 0)
termColor     = tendColor
// Sesgo general
sesgo      = "🟡 Neutral"
sesgoColor = color.new(color.yellow, 0)
if fuerzaPct > 70 and emaShort > emaLong and close > vwapLine
    sesgo      := "🟢 Fuerte Alcista"
    sesgoColor := color.new(color.lime, 0)
else if fuerzaPct > 70 and emaShort < emaLong and close < vwapLine
    sesgo      := "🔴 Fuerte Bajista"
    sesgoColor := color.new(color.red, 0)
else if fuerzaPct > 40
    sesgo      := "🟡 Tendencia Débil"
    sesgoColor := color.new(color.yellow, 0)
// Fondo institucional y adaptativo (más transparente para no tapar líneas)
bgPanel   = color.new(color.black, 85)
bgDynamic = bgPanel
if sesgo == "🟢 Fuerte Alcista"
    bgDynamic := color.new(color.lime, 90)
else if sesgo == "🔴 Fuerte Bajista"
    bgDynamic := color.new(color.red, 90)
else if sesgo == "🟡 Tendencia Débil"
    bgDynamic := color.new(color.yellow, 90)
// Encabezados
table.cell(infoPanel, 0, 0, "Tendencia",       text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 1, "Fuerza (%)",      text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 2, "Distancia EMAs",  text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 3, "Intensidad nube", text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 4, "VWAP",            text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 5, "Termómetro",      text_color=color.white, bgcolor=bgDynamic)
table.cell(infoPanel, 0, 6, "Sesgo General",   text_color=color.white, bgcolor=bgDynamic)
// Valores
table.cell(infoPanel, 1, 0, tendencia,                         text_color=tendColor,     bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 1, str.tostring(fuerzaPct) + "%",      text_color=fuerzaColor,   bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 2, str.tostring(distancia, format.mintick), text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 3, str.tostring(opacity),              text_color=color.white,   bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 4, vwapEstado,                         text_color=vwapTextColor, bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 5, barra,                              text_color=termColor,     bgcolor=color.new(color.black, 0))
table.cell(infoPanel, 1, 6, sesgo,                              text_color=sesgoColor,    bgcolor=color.new(color.black, 0))

11. Y se ve así:

Guía de sistema híbrido de Trading para XAUUSD y más

Guía de sistema híbrido de Trading para XAUUSD y más

 

📘 SISTEMA HÍBRIDO DE TRADING

Guía visual institucional

Optimizado para XAUUSD, DXY, USDJPY y BTCUSD

  1. Introducción

Este manual presenta un sistema híbrido diseñado para scalping e intradía, combinando estructura, impulso, volumen y dirección institucional.

Está optimizado para usarse en TradingView y ejecutarse en Vantage Raw ECN o en Capital.

La idea es analizar si es viable y hasta qué punto es simple.

  1. Filosofía del sistema

El sistema se sostiene en cuatro pilares:

  1. Dirección institucional (VWAP)
    Define si el día favorece compras o ventas.
  2. Impulso (EMA20)
    Marca la velocidad del movimiento.
  3. Estructura (EMA50)
    Determina si la tendencia es sostenible.
  4. Confirmación (Volumen)
    Valida si el movimiento tiene fuerza real.

3. Configuración de TradingView

Estética institucional

  • Fondo gris neutro
  • Velas verdes/rojas suaves
  • Líneas limpias, sin franjas
  • Acentos en azul petróleo y naranja suave

Paneles

  • Panel principal: precio + EMA20 + EMA50 + VWAP
  • Panel inferior: volumen filtrado
  • Panel opcional: ATR
  1. Indicadores y parámetros

EMA20

  • Color: azul petróleo
  • Grosor: 2

EMA50

  • Color: naranja suave
  • Grosor: 2

VWAP diario

  • Color: morado institucional
  • Reinicio automático

Volumen filtrado

  • Panel separado
  • MA20 del volumen

ATR 14

  • Línea blanca
  • Grosor: 1
  1. Estructura del Mercado
Tipo de tendenciaNivel 1Nivel 2Nivel 3Nivel 4
Tendencia AlcistaPrecio ↑EMA20 ↑EMA50 ↑VWAP ↑
Tendencia BajistaPrecio ↓EMA20 ↓EMA50 ↓VWAP ↓

Interpretación:

  • Si el precio está por encima de todo → compras.
  • Si está por debajo → ventas.
  • Si está dentro del VWAP → evitar operar.

  1. Reglas de Entrada

Entrada Alcista

  1. Precio rompe EMA20 con vela sólida
  2. EMA20 > EMA50
  3. VWAP debajo del precio
  4. Volumen creciente
  5. Spread bajo (<0.3 en XAUUSD)
  6. ATR moderado

Entrada Bajista

  1. Precio rompe EMA20 hacia abajo
  2. EMA20 < EMA50
  3. VWAP arriba del precio
  4. Volumen creciente
  5. Spread bajo
  6. ATR moderado

7. Reglas de Salida

  • Volumen cae → salida parcial
  • Precio toca EMA50 → salida total
  • Vela contraria fuerte con volumen → salida inmediata
  • Spread se amplía → no continuar
  1. Gestión de Riesgo
  • Riesgo por operación: 0.5% – 1%
  • Máximo diario: 2%
  • Stop-loss recomendado:
    • XAUUSD: 1.5 × ATR
    • DXY: 1 × ATR
  • Break-even automático al avanzar 1R
  1. Checklist Operativo

Antes de operar, responde:

  1. ¿Estoy en Londres o NY?
  2. ¿El spread está bajo?
  3. ¿EMA20 y EMA50 están alineadas?
  4. ¿VWAP confirma la dirección?
  5. ¿El volumen acompaña?
  6. ¿ATR está en rango normal?
  7. ¿Mi riesgo está dentro del 1%?

Si una respuesta es NO → no operas.

  1. Ejemplos Visuales (Descriptivos)

Ejemplo de Compra Ideal

  • Precio rompe EMA20
  • VWAP queda abajo
  • Volumen sube
  • EMA20 cruza EMA50
  • Entrada en retroceso a EMA20

Ejemplo de Venta Ideal

  • Precio rompe EMA20 hacia abajo
  • VWAP arriba
  • Volumen sube
  • Entrada en pullback a EMA20
  1. Errores Comunes
  • Operar dentro del VWAP
  • Entrar sin volumen
  • Operar en Asia
  • Ignorar el spread
  • No respetar el 1% de riesgo
  1. Rutina Diaria del Trader

Antes de operar

  • Revisar calendario económico
  • Marcar zonas clave
  • Dibujar sesiones
  • Ver ATR y spread

Durante la sesión

  • Esperar confirmaciones
  • No perseguir el precio
  • Mantener disciplina

Después de operar

  • Registrar trades
  • Evaluar emociones
  • Ajustar reglas si es necesario.

 

📘 HORARIOS OFICIALES DE MERCADOS

Zona horaria: El Salvador (CST‑6)

Aplicable a Capital.com

🟩 1. Tabla Institucional de Apertura y Cierre

InstrumentoApertura OficialMini‑cierres diariosCierre SemanalNotas Operativas
XAUUSD (Oro)Domingo — 4:00 pm3:00 pm – 4:00 pmViernes — 4:00 pmSigue horario CME Globex. Pausa diaria obligatoria.
USDJPY (Forex)Domingo — 4:00 pmNingunoViernes — 4:00 pmForex 24/5 continuo.
DXY (Índice del dólar)Domingo — 5:00 pmNingunoViernes — 4:00 pmAbre 1 hora después del mercado FX.
QQQ (ETF NASDAQ)Lunes — 8:30 amNingunoLunes — 3:00 pmHorario regular del NASDAQ. Sin pre‑market ni after‑hours en Capital.com.

🟦 2. Notas Institucionales por Activo

XAUUSD (Oro)

  • Apertura semanal: domingo 4:00 pm
  • Mini‑cierre diario: 3:00–4:00 pm
  • Cierre semanal: viernes 4:00 pm
  • Relevancia: activo de alta liquidez y volatilidad; respeta estrictamente las pausas CME.

USDJPY

  • Apertura semanal: domingo 4:00 pm
  • Sin pausas intradía
  • Cierre semanal: viernes 4:00 pm
  • Relevancia: par mayor, comportamiento estable en sesiones asiáticas.

DXY

  • Apertura semanal: domingo 5:00 pm
  • Sin pausas intradía
  • Cierre semanal: viernes 4:00 pm
  • Relevancia: índice clave para correlaciones macro (XAUUSD, USDJPY, índices).

QQQ

  • Apertura diaria: 8:30 am (lunes a viernes)
  • Cierre diario: 3:00 pm
  • Relevancia: proxy del NASDAQ 100; útil para medir apetito de riesgo tecnológico.

 

Sistema híbrido – Resumen Ejecutivo

Objetivo: decisiones rápidas basadas en estructura, impulso, volumen y VWAP.

Componentes clave:

  • VWAP: dirección institucional
  • EMA20: impulso
  • EMA50: estructura
  • Volumen: confirmación
  • ATR: riesgo

Condiciones de entrada:

  • Ruptura de EMA20
  • Alineación EMA20–EMA50
  • VWAP confirma
  • Volumen creciente
  • Spread bajo

Condiciones de salida:

  • Volumen cae
  • Toca EMA50
  • Vela contraria fuerte

Riesgo:

  • 0.5–1% por operación
  • 2% máximo diario

Sesiones recomendadas:

  • Londres
  • Nueva York

Ahora seguiré probando otras estrategias con la idea de ir simplificando la operación.

Stay tuned folks!