16 agentes en líneaXAUUSD 4 552,4Sesión: London KillzonePróximo análisis: 04:12
Indicadores · Pine Script v5 · ICT / SMC
● Gratis · TradingView

STX OB Retest Fib: entrada en Order Block con objetivos Fibonacci

STX OB Retest Fib automatiza una lectura ICT clásica: detecta un rompimiento de estructura (BOS) con desplazamiento, marca el Order Block que lo originó y, cuando el precio retestea esa zona, dibuja la entrada, el stop y tres objetivos por extensión de Fibonacci del impulso. Una herramienta para entrenar tu ojo en el retest de zonas institucionales.

Herramienta de estudio y visualización. Las zonas y niveles se aproximan en Pine a partir de la estructura del precio; es un apoyo a la decisión, no una recomendación ni una señal de compra/venta. No garantiza resultados.

Añadir en TradingViewVer el códigoDescargar .pine

¿Qué hace?

  • Detección de BOS con desplazamiento. Marca el rompimiento de un swing previo solo cuando la vela supera un umbral de rango medido en ATR (evita rupturas débiles).
  • Order Block automático. Dibuja una caja sobre la última vela contraria antes del impulso (teal en compras, roja en ventas): la huella institucional.
  • Señal en el retest. Espera a que el precio regrese a la zona del Order Block (con tolerancia en ATR) antes de marcar la entrada — no en la ruptura.
  • Entrada, SL y 3 TP Fibonacci. Traza la entrada, el stop (buffer por ATR) y TP1/TP2/TP3 como extensiones 1.618 / 2.0 / 2.618 del impulso, con etiquetas de precio.
  • Una señal por Order Block. Opción para limitar a un único disparo por zona y evitar el ruido de reentradas.
  • Parámetros ajustables. Lookback de swings, umbral de desplazamiento, tolerancia de retest, buffer de SL y longitud de las líneas.

Cómo se lee

Cuando aparece un triángulo verde (BUY) debajo de la vela o rojo (SELL) encima, el precio acaba de retestear un Order Block tras un rompimiento con desplazamiento. Las líneas proyectan la entrada, el SL y los tres objetivos. La caja teal/roja te recuerda de dónde salió el movimiento. El indicador no ejecuta ni recomienda: te muestra el escenario para que tú decidas con tu propia gestión del riesgo.

El activo, en vivo

Gráfico de referencia (XAUUSD). Carga el indicador en tu propia cuenta de TradingView para ver las zonas y niveles sobre el precio en tiempo real.

Cómo instalarlo en TradingView

  1. Abre el Pine Editor (parte inferior de TradingView).
  2. Pega el código de abajo (Pine Script v5) y reemplaza el contenido.
  3. «Add to chart» sobre el activo y temporalidad que operes (funciona en cualquier mercado; en XAUUSD intradía es donde más lo usamos).
  4. Ajusta los parámetros a tu estilo y guarda con Ctrl/Cmd + S.

Código Pine Script v5

STX OB Retest Fib · Pine v5 · 105 líneas · código abierto.

Descargar .pine
//@version=5
indicator("STX OB Retest Fib", overlay=true, max_lines_count=300, max_labels_count=120, max_boxes_count=80)

swing = input.int(5, "Swing lookback", minval=2)
dispATR = input.float(1.0, "Displacement x ATR", minval=0.1, step=0.1)
retestTol = input.float(0.1, "Retest tol x ATR", minval=0.0, step=0.05)
f1 = input.float(1.618, "TP1 x legA", step=0.001)
f2 = input.float(2.0, "TP2 x legA", step=0.001)
f3 = input.float(2.618, "TP3 x legA", step=0.001)
slBuf = input.float(0.25, "SL buffer x ATR", minval=0.0, step=0.05)
extend = input.int(40, "Line length", minval=5)
oncePerOB = input.bool(true, "1 signal per OB")

atr = ta.atr(14)
ph = ta.pivothigh(swing, swing)
pl = ta.pivotlow(swing, swing)

var float lastPH = na
var float lastPL = na
lastPH := not na(ph) ? ph : lastPH
lastPL := not na(pl) ? pl : lastPL

var float lastDownHi = na
var float lastDownLo = na
var float lastUpHi = na
var float lastUpLo = na
if close < open
    lastDownHi := high
    lastDownLo := low
if close > open
    lastUpHi := high
    lastUpLo := low

bullBOS = not na(lastPH) and close > lastPH and close[1] <= lastPH and (high - low) > dispATR * atr
bearBOS = not na(lastPL) and close < lastPL and close[1] >= lastPL and (high - low) > dispATR * atr

var float bHi = na
var float bLo = na
var float bLeg = na
var bool bUsed = true
var float sHi = na
var float sLo = na
var float sLeg = na
var bool sUsed = true

if bullBOS and not na(lastDownLo)
    bHi := lastDownHi
    bLo := lastDownLo
    bLeg := high - lastDownLo
    bUsed := false
    box.new(bar_index, bHi, bar_index + 6, bLo, border_color=color.teal, bgcolor=color.new(color.teal, 85))

if bearBOS and not na(lastUpHi)
    sHi := lastUpHi
    sLo := lastUpLo
    sLeg := lastUpHi - low
    sUsed := false
    box.new(bar_index, sHi, bar_index + 6, sLo, border_color=color.red, bgcolor=color.new(color.red, 85))

tol = retestTol * atr
bullRetest = not na(bHi) and (not bUsed or not oncePerOB) and low <= bHi + tol and low >= bLo - tol and close > bLo
bearRetest = not na(sHi) and (not sUsed or not oncePerOB) and high >= sLo - tol and high <= sHi + tol and close < sHi

var float buyE = na
var float sellE = na

if bullRetest
    buyE := bHi
    sl = bLo - slBuf * atr
    t1 = buyE + f1 * bLeg
    t2 = buyE + f2 * bLeg
    t3 = buyE + f3 * bLeg
    line.new(bar_index, buyE, bar_index + extend, buyE, color=color.gray, width=2)
    line.new(bar_index, sl, bar_index + extend, sl, color=color.red, style=line.style_dashed)
    line.new(bar_index, t1, bar_index + extend, t1, color=color.green)
    line.new(bar_index, t2, bar_index + extend, t2, color=color.green)
    line.new(bar_index, t3, bar_index + extend, t3, color=color.green)
    label.new(bar_index + extend, buyE, "ENTRY " + str.tostring(buyE, format.mintick), style=label.style_label_left, color=color.gray, textcolor=color.white, size=size.small)
    label.new(bar_index + extend, sl, "SL " + str.tostring(sl, format.mintick), style=label.style_label_left, color=color.red, textcolor=color.white, size=size.small)
    label.new(bar_index + extend, t1, "TP1 " + str.tostring(t1, format.mintick), style=label.style_label_left, color=color.green, textcolor=color.black, size=size.small)
    label.new(bar_index + extend, t2, "TP2 " + str.tostring(t2, format.mintick), style=label.style_label_left, color=color.green, textcolor=color.black, size=size.small)
    label.new(bar_index + extend, t3, "TP3 " + str.tostring(t3, format.mintick), style=label.style_label_left, color=color.green, textcolor=color.black, size=size.small)
    bUsed := true

if bearRetest
    sellE := sLo
    sl = sHi + slBuf * atr
    t1 = sellE - f1 * sLeg
    t2 = sellE - f2 * sLeg
    t3 = sellE - f3 * sLeg
    line.new(bar_index, sellE, bar_index + extend, sellE, color=color.gray, width=2)
    line.new(bar_index, sl, bar_index + extend, sl, color=color.red, style=line.style_dashed)
    line.new(bar_index, t1, bar_index + extend, t1, color=color.lime)
    line.new(bar_index, t2, bar_index + extend, t2, color=color.lime)
    line.new(bar_index, t3, bar_index + extend, t3, color=color.lime)
    label.new(bar_index + extend, sellE, "ENTRY " + str.tostring(sellE, format.mintick), style=label.style_label_left, color=color.gray, textcolor=color.white, size=size.small)
    label.new(bar_index + extend, sl, "SL " + str.tostring(sl, format.mintick), style=label.style_label_left, color=color.red, textcolor=color.white, size=size.small)
    label.new(bar_index + extend, t1, "TP1 " + str.tostring(t1, format.mintick), style=label.style_label_left, color=color.lime, textcolor=color.black, size=size.small)
    label.new(bar_index + extend, t2, "TP2 " + str.tostring(t2, format.mintick), style=label.style_label_left, color=color.lime, textcolor=color.black, size=size.small)
    label.new(bar_index + extend, t3, "TP3 " + str.tostring(t3, format.mintick), style=label.style_label_left, color=color.lime, textcolor=color.black, size=size.small)
    sUsed := true

plotshape(bullRetest, title="BUY", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(bearRetest, title="SELL", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

Preguntas frecuentes

¿Qué es un Order Block?

Es la última vela contraria al movimiento impulsivo que le sigue: la zona donde las instituciones colocaron órdenes antes de que el precio se moviera con fuerza. El indicador la dibuja como una caja y espera a que el precio regrese a ella.

¿En qué se basan los objetivos?

Los tres objetivos son extensiones de Fibonacci (1.618, 2.0 y 2.618) medidas sobre el impulso que rompió la estructura. Son niveles de proyección, no promesas: el precio puede no alcanzarlos.

¿Sirve para cualquier activo?

Sí. Al basarse en estructura del precio y ATR, funciona en Forex, índices, cripto o el oro. Nosotros lo usamos sobre todo en XAUUSD intradía, pero puedes ajustarlo.

¿Da señales de compra/venta?

No. Marca contextos y niveles según la metodología ICT. Es una herramienta educativa de apoyo a la decisión, no una recomendación de inversión ni una señal automática.

¿Es gratis?

Sí, el código está disponible para copiar y descargar. Solo necesitas una cuenta de TradingView (el plan gratuito es suficiente).

Contenido exclusivamente educativo; no constituye asesoramiento financiero ni garantiza resultados. El trading implica riesgo de pérdida de capital.

¿Quieres entender el porqué de cada zona? Aprende la metodología ICT / Smart Money paso a paso en la Escuela de Trading gratuita, o descubre la sala STX Desk.