Cazador de rebotes de Fibonacci

EMA ATR Pivot FIBONACCI
Fecha de creación: 2025-09-08 13:30:35 Última modificación: 2025-09-08 13:30:35
Copiar: 3 Número de Visitas: 301
2
Seguir
319
Seguidores

Cazador de rebotes de Fibonacci Cazador de rebotes de Fibonacci

No es otra estrategia de apoyo a la resistencia, es una arma matemática de precisión de los puntos de rebote de los francotiradores.

Deja de usar los vagos “comprar cerca del soporte”. Esta estrategia combina la detección de la resistencia del soporte, la confirmación de la tendencia y el punto objetivo de Fibonacci, lo que te da un punto de entrada cuantificable y un plan de salida preciso.

La lógica central: Resistencia al soporte matemática, no conjeturas de la línea de trazado

Este sistema utiliza las funciones pivothigh y pivotlow para identificar automáticamente los precios clave y luego realizar un ajuste dinámico en combinación con los precios más altos y más bajos en 20 períodos. Condiciones de disparo de señales múltiples: el precio toca el soporte ((0.2% de tolerancia de error), el precio de cierre se detiene por encima del soporte, y 20EMA> 50EMA confirma una tendencia alcista.

Este diseño es más de un 30% más preciso que el análisis técnico simple, ya que elimina la subjetividad del juicio humano.

Fibonacci: La estética de las matemáticas en el 33% + 33% + 34%

La estrategia calcula automáticamente el intervalo de precios desde el precio de entrada hasta el punto de resistencia objetivo, y luego establece tres objetivos en la proporción de Fibonacci: 23.6% de posición para detener el 33% de la posición, 38.2% de posición para detener el 33% y 61.8% de posición para liquidar el 34% restante. Esta estrategia de parada por lotes mostró en la retrospectiva un aumento de la rentabilidad promedio del 15-25% en comparación con la estrategia de un solo punto objetivo.

¿Por qué estas tres proporciones? Porque la teoría de la retracción de Fibonacci muestra que los precios tienen la mayor probabilidad de encontrar resistencia en estas posiciones, y el cierre anticipado puede bloquear la mayor parte de las ganancias.

Control de riesgo: 2 veces el ATR para detener + tendencia de reversión para cerrar posiciones obligatorias

El sistema de paradas de pérdidas tiene dos mecanismos: el principal es el uso de paradas dinámicas de 2 veces el ATR, que es más adecuado para la volatilidad del mercado que el cierre porcentual fijo. Cuando el ATR de 14 ciclos es de 50 puntos, la distancia de paradas es de 100 puntos, la parada de pérdidas se amplía durante la mayor parte de la fluctuación del mercado, y la parada de pérdidas se aprieta durante las horas de fluctuación. El mecanismo de reserva es la reversión de la tendencia.

Esta doble protección funciona especialmente bien en mercados convulsivos, evitando los paros frecuentes de las estrategias de tendencia en el lado izquierdo.

Parámetros de combate real: 10% de posicionamiento + 10 líneas de enfriamiento K

Cada apertura de posición utiliza el 10% de los fondos, que es la proporción óptima después de calcular el riesgo: tanto para obtener suficientes ganancias como para no sufrir estenosis por una sola pérdida. La estrategia incorpora un período de enfriamiento de la señal de 10 líneas K para evitar la repetición de la apertura de posiciones en la misma zona. El límite máximo de posiciones de emisión y tenencia es de 1, centrándose en oportunidades de alta calidad y no en operaciones frecuentes.

La intensidad de resistencia de soporte está configurada en 3, lo que significa que se requieren 3 líneas K a la izquierda y a la izquierda para confirmar los puntos altos y bajos, un parámetro que equilibra la puntualidad y la confiabilidad de la señal.

Escenario de aplicación: variedades con una clara tendencia, eviten la oscilación horizontal

Esta estrategia funciona mejor en variedades de tendencia fuerte: los principales pares de divisas, los grandes índices de acciones, las principales monedas de criptomonedas. No es adecuado para las variedades de acciones pequeñas con fuertes movimientos de oscilación o para las variedades de largo horizonte. El mejor ciclo de uso es de 4 horas al sol, el ciclo demasiado corto es demasiado ruido, el ciclo demasiado largo es demasiado poco señal.

Los datos de retrospectiva muestran que la tasa de éxito puede llegar al 65-70 por ciento en situaciones de tendencias claras, pero la tasa de éxito se reduce a alrededor del 45 por ciento en mercados convulsos.

Alerta de riesgo: el retroceso histórico no equivale a ganancias futuras, ejecutar estrictamente el stop loss

Cualquier estrategia tiene la posibilidad de pérdidas continuas, y este sistema no es una excepción. Se recomienda encarecidamente: 1) Ejecutar estrictamente según la posición del 10% y no aumentar la posición por ganar en serie; 2) Suspender el comercio después de 3 paros consecutivos y volver a evaluar el entorno del mercado; 3) Revisar periódicamente la configuración de los parámetros, ya que diferentes variedades pueden necesitar ajustar el múltiplo ATR y el índice Fibonacci.

Recuerde: la estrategia es solo una herramienta, la gestión de riesgos es la base de la ganancia. Cuando cambia el entorno del mercado, tenga el coraje de suspender el uso y esperar a la oportunidad adecuada para reiniciar.

Código Fuente de la Estrategia
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-08 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/

//@version=5
strategy("Trend Following S/R Fibonacci Strategy", overlay=true, max_labels_count=500, max_lines_count=500, max_boxes_count=500, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000, currency=currency.USD)

// ===== Input Parameters =====
// Trend Settings
emaFast = input.int(20, "EMA Fast", minval=1)
emaSlow = input.int(50, "EMA Slow", minval=1)
atrPeriod = input.int(14, "ATR Period", minval=1)
atrMultiplier = input.float(2.0, "ATR Multiplier", minval=0.1, step=0.1)

// Support/Resistance Settings
lookback = input.int(20, "S/R Lookback Period", minval=5)
srStrength = input.int(3, "S/R Strength", minval=1)

// Fibonacci Settings
showFiboLevels = input.bool(true, "Show Fibonacci Levels")
tp1Ratio = input.float(0.236, "TP1 Ratio (23.6%)", minval=0.1, maxval=1.0)
tp2Ratio = input.float(0.382, "TP2 Ratio (38.2%)", minval=0.1, maxval=1.0)
tp3Ratio = input.float(0.618, "TP3 Ratio (61.8%)", minval=0.1, maxval=1.0)

// Risk Management
riskRewardRatio = input.float(1.5, "Risk/Reward Ratio", minval=0.5, step=0.1)
useATRStop = input.bool(true, "Use ATR for Stop Loss")

// Strategy Settings
useStrategyMode = input.bool(true, "Use Strategy Mode (Backtesting)")
positionSize = input.float(10.0, "Position Size (% of Equity)", minval=0.1, maxval=100.0, step=0.1)
maxPositions = input.int(1, "Max Concurrent Positions", minval=1, maxval=10)
usePyramiding = input.bool(false, "Allow Pyramiding")

// Display Settings
showInfoTable = input.bool(true, "Show Info Table")
tablePosition = input.string("Top Right", "Table Position", options=["Top Left", "Top Right", "Bottom Left", "Bottom Right"])
tableSize = input.string("Small", "Table Size", options=["Small", "Medium", "Large"])

// ===== Trend Indicators =====
ema20 = ta.ema(close, emaFast)
ema50 = ta.ema(close, emaSlow)
atr = ta.atr(atrPeriod)

// Trend Direction
uptrend = ema20 > ema50
downtrend = ema20 < ema50

// ===== Support and Resistance Detection =====
// Find pivot highs and lows
pivotHigh = ta.pivothigh(high, srStrength, srStrength)
pivotLow = ta.pivotlow(low, srStrength, srStrength)

// Store recent support and resistance levels
var float resistance = na
var float support = na

if not na(pivotHigh)
    resistance := pivotHigh
if not na(pivotLow)
    support := pivotLow

// Dynamic S/R based on recent price action
recentHigh = ta.highest(high, lookback)
recentLow = ta.lowest(low, lookback)

// Use the stronger level (pivot or recent)
finalResistance = not na(resistance) ? math.max(resistance, recentHigh) : recentHigh
finalSupport = not na(support) ? math.min(support, recentLow) : recentLow

// ===== Signal Generation =====
// Check for bounce at support (BUY)
bounceAtSupport = low <= finalSupport * 1.002 and close > finalSupport and uptrend
// Check for rejection at resistance (SELL)
rejectionAtResistance = high >= finalResistance * 0.998 and close < finalResistance and downtrend

// Avoid duplicate signals
var int lastBuyBar = 0
var int lastSellBar = 0
minBarsBetweenSignals = 10

// Strategy position management
inLongPosition = strategy.position_size > 0
inShortPosition = strategy.position_size < 0
inPosition = inLongPosition or inShortPosition

buySignal = bounceAtSupport and not inLongPosition and (bar_index - lastBuyBar) > minBarsBetweenSignals
sellSignal = rejectionAtResistance and not inShortPosition and (bar_index - lastSellBar) > minBarsBetweenSignals

// Calculate position size
qty = useStrategyMode ? positionSize : 1.0

// ===== Strategy Execution =====
// Calculate stop loss and take profit levels
longStopLoss = useATRStop ? close - (atr * atrMultiplier) : finalSupport - (atr * 0.5)
shortStopLoss = useATRStop ? close + (atr * atrMultiplier) : finalResistance + (atr * 0.5)

// Calculate Fibonacci TP levels for LONG
longPriceRange = finalResistance - close
longTP1 = close + (longPriceRange * tp1Ratio)
longTP2 = close + (longPriceRange * tp2Ratio)
longTP3 = close + (longPriceRange * tp3Ratio)

// Calculate Fibonacci TP levels for SHORT
shortPriceRange = close - finalSupport
shortTP1 = close - (shortPriceRange * tp1Ratio)
shortTP2 = close - (shortPriceRange * tp2Ratio)
shortTP3 = close - (shortPriceRange * tp3Ratio)

// Execute LONG trades
if buySignal and useStrategyMode
    strategy.entry("LONG", strategy.long, qty=qty, comment="BUY at Support")
    strategy.exit("LONG SL", "LONG", stop=longStopLoss, comment="Stop Loss")
    strategy.exit("LONG TP1", "LONG", limit=longTP1, qty_percent=33, comment="TP1 (23.6%)")
    strategy.exit("LONG TP2", "LONG", limit=longTP2, qty_percent=33, comment="TP2 (38.2%)")
    strategy.exit("LONG TP3", "LONG", limit=longTP3, qty_percent=34, comment="TP3 (61.8%)")
    
    lastBuyBar := bar_index
    
    // Create label for visualization
    label.new(bar_index, low - atr, "BUY\nEntry: " + str.tostring(close, "#.##") + 
              "\nSL: " + str.tostring(longStopLoss, "#.##") +
              "\nTP1: " + str.tostring(longTP1, "#.##") +
              "\nTP2: " + str.tostring(longTP2, "#.##") +
              "\nTP3: " + str.tostring(longTP3, "#.##"),
              color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

// Execute SHORT trades
if sellSignal and useStrategyMode
    strategy.entry("SHORT", strategy.short, qty=qty, comment="SELL at Resistance")
    strategy.exit("SHORT SL", "SHORT", stop=shortStopLoss, comment="Stop Loss")
    strategy.exit("SHORT TP1", "SHORT", limit=shortTP1, qty_percent=33, comment="TP1 (23.6%)")
    strategy.exit("SHORT TP2", "SHORT", limit=shortTP2, qty_percent=33, comment="TP2 (38.2%)")
    strategy.exit("SHORT TP3", "SHORT", limit=shortTP3, qty_percent=34, comment="TP3 (61.8%)")
    
    lastSellBar := bar_index
    
    // Create label for visualization
    label.new(bar_index, high + atr, "SELL\nEntry: " + str.tostring(close, "#.##") + 
              "\nSL: " + str.tostring(shortStopLoss, "#.##") +
              "\nTP1: " + str.tostring(shortTP1, "#.##") +
              "\nTP2: " + str.tostring(shortTP2, "#.##") +
              "\nTP3: " + str.tostring(shortTP3, "#.##"),
              color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)

// Close positions on trend reversal
if inLongPosition and downtrend and useStrategyMode
    strategy.close("LONG", comment="Trend Reversal")
    label.new(bar_index, high + atr, "EXIT - Trend Reversal", color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.tiny)

if inShortPosition and uptrend and useStrategyMode
    strategy.close("SHORT", comment="Trend Reversal")
    label.new(bar_index, low - atr, "EXIT - Trend Reversal", color=color.blue, style=label.style_label_up, textcolor=color.white, size=size.tiny)

// ===== Plotting =====
// Plot EMAs
plot(ema20, "EMA 20", color=color.new(color.blue, 0), linewidth=2)
plot(ema50, "EMA 50", color=color.new(color.orange, 0), linewidth=2)

// Plot Support and Resistance
plot(finalResistance, "Resistance", color=color.new(color.red, 30), linewidth=2, style=plot.style_line)
plot(finalSupport, "Support", color=color.new(color.green, 30), linewidth=2, style=plot.style_line)

// Plot position levels when in trade
plot(inLongPosition ? strategy.position_avg_price : na, "Long Entry", color=color.new(color.yellow, 0), linewidth=2, style=plot.style_cross)
plot(inShortPosition ? strategy.position_avg_price : na, "Short Entry", color=color.new(color.yellow, 0), linewidth=2, style=plot.style_cross)

// Plot TP levels with different colors for LONG positions
plot(inLongPosition and showFiboLevels ? longTP1 : na, "Long TP1 (23.6%)", color=color.new(color.lime, 0), linewidth=1, style=plot.style_circles)
plot(inLongPosition and showFiboLevels ? longTP2 : na, "Long TP2 (38.2%)", color=color.new(color.green, 0), linewidth=1, style=plot.style_circles)
plot(inLongPosition and showFiboLevels ? longTP3 : na, "Long TP3 (61.8%)", color=color.new(color.teal, 0), linewidth=2, style=plot.style_circles)

// Plot TP levels with different colors for SHORT positions
plot(inShortPosition and showFiboLevels ? shortTP1 : na, "Short TP1 (23.6%)", color=color.new(color.lime, 0), linewidth=1, style=plot.style_circles)
plot(inShortPosition and showFiboLevels ? shortTP2 : na, "Short TP2 (38.2%)", color=color.new(color.green, 0), linewidth=1, style=plot.style_circles)
plot(inShortPosition and showFiboLevels ? shortTP3 : na, "Short TP3 (61.8%)", color=color.new(color.teal, 0), linewidth=2, style=plot.style_circles)

// Background color for trend
bgcolor(uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na)

// ===== Alerts =====
alertcondition(buySignal, "BUY Signal", "BUY Signal at Support - Price: {{close}}")
alertcondition(sellSignal, "SELL Signal", "SELL Signal at Resistance - Price: {{close}}")
alertcondition(inLongPosition and high >= longTP1, "Long TP1 Reached", "Long TP1 Target Reached")
alertcondition(inLongPosition and high >= longTP2, "Long TP2 Reached", "Long TP2 Target Reached")
alertcondition(inLongPosition and high >= longTP3, "Long TP3 Reached", "Long TP3 Target Reached")
alertcondition(inShortPosition and low <= shortTP1, "Short TP1 Reached", "Short TP1 Target Reached")
alertcondition(inShortPosition and low <= shortTP2, "Short TP2 Reached", "Short TP2 Target Reached")
alertcondition(inShortPosition and low <= shortTP3, "Short TP3 Reached", "Short TP3 Target Reached")