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.
¿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
- Abre el Pine Editor (parte inferior de TradingView).
- Pega el código de abajo (Pine Script v5) y reemplaza el contenido.
- «Add to chart» sobre el activo y temporalidad que operes (funciona en cualquier mercado; en XAUUSD intradía es donde más lo usamos).
- 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.
//@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.