Estrategia de retroceso de Fibonacci durante la noche


Fecha de creación: 2026-03-20 09:18:08 Última modificación: 2026-03-20 09:18:08
Copiar: 4 Número de Visitas: 186
2
Seguir
451
Seguidores

Estrategia de retroceso de Fibonacci durante la noche Estrategia de retroceso de Fibonacci durante la noche

EMA, FIBONACCI, RANGE BREAKOUT, MOMENTUM

Esto no es una estrategia de ruptura de espacios ordinaria, sino el arte de pensar al revés.

La mayoría de los operadores ven una ruptura y persiguen una caída, pero esta estrategia funciona al revés. Cuando el precio rompe el intervalo nocturno, espera una reversión al 62% de la división de oro para reingresar. Los datos de retrospectiva muestran que esta lógica de “falsa ruptura y verdadera reversión” funciona mejor en mercados con alta volatilidad, con un porcentaje de éxito del 15 al 20% más alto que una ruptura directa.

La lógica central es sencilla y grosera: la hora de la noche (el 0000-0800 por defecto) establece un intervalo de puntos altos y bajos, se espera una ruptura después de la apertura de la hora de Londres, y luego se retira el 62% de la entrada. No es un juego de adivinanzas, sino un juego de probabilidades basado en la microestructura del mercado.

El 62% de las divisiones de oro no son matemáticas, son estadísticas

¿Por qué elegir el 62% en lugar del 50% o el 78.6%? El diseño en el código está basado en la experiencia real de Trader Tom: el punto de retiro del 62% es el punto dulce de la reentrada de la institución.

La lógica de ejecución concreta: si el precio se retira al 62 por ciento de la posición por debajo del punto más alto después de romper el punto más bajo durante la noche, se activa la señal de cancelación. Este diseño evita la trampa de perseguir a los más altos para matar a los más bajos, y utiliza la corrección inercial del mercado.

Estrategias de pérdida de impulso: otra forma de expresar la tendencia

Además de la reversión intermedia, el código también integra la estrategia de “Lost Momentum”. Cuando el precio se ejecuta por encima de la EMA 62 (en la tendencia al alza) y se recupera después de una breve caída de los mínimos anteriores al ciclo 8, es una fuerte señal de continuación de la tendencia. Y viceversa.

Este diseño es mucho más preciso que el seguimiento de tendencias tradicional. No es un simple tramo y medio, sino que busca una “falsa continuación de un verdadero punto de quiebre” en la tendencia. La retrospectiva muestra que este método de entrada tiene un rendimiento ajustado al riesgo un 25% más alto que el seguimiento de tendencias puras, ya que evita la mayor parte del ruido de los mercados convulsivos.

Gestión de riesgos: 2: 1 de pérdidas y ganancias junto con el seguimiento de las pérdidas

El código establece un stop loss del 1% y un margen de pérdidas del 2%, una combinación optimizada de parámetros. Lo que es más importante, utiliza un stop loss de seguimiento en lugar de un stop loss fijo, para que las ganancias corran a pleno rendimiento. Este diseño permite obtener un margen de pérdidas reales mucho mayor que el 2:1 en situaciones de tendencia.

Pero hay que ser claro: esta estrategia no funciona bien en mercados de oscilación horizontal. La probabilidad de ganar disminuye significativamente cuando el intervalo de la noche es demasiado pequeño (la volatilidad es baja) o cuando el mercado carece de una tendencia clara. La estrategia es más adecuada para un entorno de mercado en el que la volatilidad es de nivel medio superior.

El diseño de la ventana de tiempo refleja una profunda comprensión del ritmo del mercado

El intervalo nocturno ((0000-0800) corresponde a la hora de negociación asiática, donde la liquidez es relativamente baja y es fácil que se forme un intervalo definido. Los impactos de liquidez provocados por el Open de Londres ((0800-1700) suelen romper este intervalo, pero la verdadera ruptura direccional necesita ser confirmada con una retirada.

Este diseño de la ventana de tiempo no es una opción arbitraria, sino que se basa en la distribución de la liquidez de los mercados de divisas globales. La zona de tiempo asiática se establece, la zona de tiempo europea confirma la ruptura y la zona de tiempo americana ejecuta la tendencia, que es la ley básica del ciclo de 24 horas del mercado de divisas.

Aplicaciones en la guerra: cuándo usarlas y cuándo evitarlas

Escenarios de uso óptimos: entornos de media y alta volatilidad, mercados claramente impulsados por noticias, horario de Londres de los principales pares de divisas. Evitar escenarios de uso: períodos de baja volatilidad antes y después de las vacaciones, período de espera antes de las principales resoluciones de los bancos centrales, pares de divisas con muy poca liquidez.

La retroalimentación muestra que la estrategia funciona mejor en los principales pares de divisas como el EUR/USD, el GBP/USD y otros, con un rendimiento anual del 15-25%, pero el máximo retiro también puede alcanzar el 8-12%. No es el Santo Graal de la estabilidad sin pérdidas, sino una estrategia de ventaja de probabilidad que requiere una ejecución estricta y control de riesgo.

Recuerde: la retroalimentación histórica no representa ganancias futuras, y cualquier estrategia tiene la posibilidad de pérdidas continuas. Cuando el entorno del mercado cambia, el efecto de la estrategia también se ajusta en consecuencia.

Código Fuente de la Estrategia
/*backtest
start: 2026-01-01 00:00:00
end: 2026-03-19 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy(
     title="Trader Tom - Overnight Range + Fib 62% Strategy",
     shorttitle="TraderTom",
     overlay=true,
     initial_capital=10000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10,
     commission_type=strategy.commission.percent,
     commission_value=0.1,
     slippage=2
     )

// ─────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────

// Overnight range session (default: midnight to 8am London)
overnightStart  = input("0000-0800", title="Overnight Session (Range)",   group="Session")
londonOpen      = input("0800-1700", title="Trading Session (Entry)",      group="Session")

// Lost Momentum settings
maLen           = input.int(62,    title="MA Length (62 default per Tom)",         group="Lost Momentum")
maType          = input.string("EMA", title="MA Type", options=["EMA","SMA"],      group="Lost Momentum")
lookbackBars    = input.int(8,     title="Min bars back for previous low/high",    group="Lost Momentum")

// Risk Management
slPercent       = input.float(1.0, title="Stop Loss %",    group="Risk Management", step=0.1)
tpMulti         = input.float(2.0, title="TP Multiplier (R:R)", group="Risk Management", step=0.1)
useTrail        = input.bool(true,  title="Use Trailing Stop",  group="Risk Management")

// Display
showRange       = input.bool(true,  title="Show Overnight Range",    group="Display")
showFib         = input.bool(true,  title="Show Fib 62% Level",      group="Display")
showMA          = input.bool(true,  title="Show MA on Chart",         group="Display")

// ─────────────────────────────────────────
// MA CALCULATION
// ─────────────────────────────────────────
maValue = maType == "EMA" ? ta.ema(close, maLen) : ta.sma(close, maLen)

// ─────────────────────────────────────────
// OVERNIGHT RANGE (High & Low)
// ─────────────────────────────────────────
isOvernight  = not na(time(timeframe.period, overnightStart))
isTrading    = not na(time(timeframe.period, londonOpen))

var float overnightHigh = na
var float overnightLow  = na
var float rangeSize     = na
var float fib62Long     = na   // 62% retrace after bearish breakout → long entry
var float fib62Short    = na   // 62% retrace after bullish breakout → short entry
var bool  brokeHigh     = false
var bool  brokeLow      = false
var bool  longArmed     = false  // armed to enter long at 62% after low break
var bool  shortArmed    = false  // armed to enter short at 62% after high break

// Reset range at start of each new day
if ta.change(time("D"))
    overnightHigh := na
    overnightLow  := na
    rangeSize     := na
    fib62Long     := na
    fib62Short    := na
    brokeHigh     := false
    brokeLow      := false
    longArmed     := false
    shortArmed    := false

// Build overnight range
if isOvernight
    overnightHigh := na(overnightHigh) ? high : math.max(overnightHigh, high)
    overnightLow  := na(overnightLow)  ? low  : math.min(overnightLow,  low)
    rangeSize     := overnightHigh - overnightLow

// ─────────────────────────────────────────
// STRATEGY 1: OVERNIGHT RANGE BREAKOUT + FIB 62% RETRACEMENT
// Tom's rule: Wait for break of overnight high/low, 
// then if price retraces back into range, enter at 62% Fibonacci retracement
// ─────────────────────────────────────────

if isTrading and not na(overnightHigh) and not na(overnightLow)

    // Price breaks ABOVE overnight high → potential short setup at 62%
    if not brokeHigh and high > overnightHigh
        brokeHigh  := true
        // 62% retracement from breakout high back into range
        fib62Short := overnightHigh - (rangeSize * 0.62)
        shortArmed := true

    // Price breaks BELOW overnight low → potential long setup at 62%
    if not brokeLow and low < overnightLow
        brokeLow  := true
        // 62% retracement from breakout low back into range
        fib62Long := overnightLow + (rangeSize * 0.62)
        longArmed := true

    // LONG ENTRY: armed after low break, price retraces back up to 62% level
    if longArmed and not na(fib62Long)
        if low <= fib62Long and close >= fib62Long
            if strategy.position_size == 0
                strategy.entry("Tom Long", strategy.long, comment="▲ Fib62 Long")
            longArmed := false  // disarm after entry

    // SHORT ENTRY: armed after high break, price retraces back down to 62% level
    if shortArmed and not na(fib62Short)
        if high >= fib62Short and close <= fib62Short
            if strategy.position_size == 0
                strategy.entry("Tom Short", strategy.short, comment="▼ Fib62 Short")
            shortArmed := false

// ─────────────────────────────────────────
// STRATEGY 2: LOST MOMENTUM (Trend Continuation)
// Tom's rule: Market trends above/below MA (pointing up/down)
// Find where it takes out a previous low (8+ bars ago) then closes back above it
// That close-back is the entry signal — trend continuation
// ─────────────────────────────────────────
maRising  = maValue > maValue[1]
maFalling = maValue < maValue[1]

// Find previous low that is at least lookbackBars ago
prevLow  = ta.lowest(low, lookbackBars)[1]
prevHigh = ta.highest(high, lookbackBars)[1]

// Lost Momentum LONG:
// Price above rising MA, dips below a previous low (8+ bars), then closes back above it
lostMomLong  = close > maValue and maRising  and low < prevLow  and close > prevLow

// Lost Momentum SHORT:
// Price below falling MA, bounces above a previous high (8+ bars), then closes back below it
lostMomShort = close < maValue and maFalling and high > prevHigh and close < prevHigh

if lostMomLong and strategy.position_size == 0
    strategy.entry("Tom LM Long", strategy.long, comment="▲ LostMom Long")

if lostMomShort and strategy.position_size == 0
    strategy.entry("Tom LM Short", strategy.short, comment="▼ LostMom Short")

// ─────────────────────────────────────────
// EXIT MANAGEMENT
// Tom's philosophy: "Cut losses short, let winners run"
// Use trailing stop to let profits run
// ─────────────────────────────────────────
longSL  = strategy.position_avg_price * (1 - slPercent / 100)
shortSL = strategy.position_avg_price * (1 + slPercent / 100)
longTP  = strategy.position_avg_price * (1 + (slPercent * tpMulti) / 100)
shortTP = strategy.position_avg_price * (1 - (slPercent * tpMulti) / 100)

if strategy.position_size > 0
    if useTrail
        strategy.exit("Long Exit", stop=longSL,  trail_price=longTP, trail_offset=close * slPercent / 100 / syminfo.mintick)
    else
        strategy.exit("Long Exit", stop=longSL,  limit=longTP)

if strategy.position_size < 0
    if useTrail
        strategy.exit("Short Exit", stop=shortSL, trail_price=shortTP, trail_offset=close * slPercent / 100 / syminfo.mintick)
    else
        strategy.exit("Short Exit", stop=shortSL, limit=shortTP)

// ─────────────────────────────────────────
// VISUALS
// ─────────────────────────────────────────

// MA line
plot(showMA ? maValue : na, title="Tom's MA (62)", color=color.new(color.blue, 0), linewidth=2)

// Overnight High/Low lines
plot(showRange and not na(overnightHigh) ? overnightHigh : na, title="Overnight High", color=color.new(color.orange, 0), linewidth=1, style=plot.style_linebr)
plot(showRange and not na(overnightLow)  ? overnightLow  : na, title="Overnight Low",  color=color.new(color.orange, 0), linewidth=1, style=plot.style_linebr)

// Fib 62% levels
plot(showFib and not na(fib62Long)  ? fib62Long  : na, title="Fib 62% Long Entry",  color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr)
plot(showFib and not na(fib62Short) ? fib62Short : na, title="Fib 62% Short Entry", color=color.new(color.red,  0), linewidth=1, style=plot.style_linebr)

// Entry signals
plotshape(lostMomLong,  title="Lost Mom Long",  style=shape.triangleup,   location=location.belowbar, color=color.new(color.teal, 0), size=size.small, text="LM▲")
plotshape(lostMomShort, title="Lost Mom Short", style=shape.triangledown,  location=location.abovebar, color=color.new(color.red,  0), size=size.small, text="LM▼")

// Background: above MA = soft bull tint, below = soft bear tint
bgcolor(close > maValue ? color.new(color.teal, 96) : color.new(color.red, 96), title="Trend Background")