Caçador de Rebote de Fibonacci

EMA ATR Pivot FIBONACCI
Data de criação: 2025-09-08 13:30:35 última modificação: 2025-09-08 13:30:35
cópia: 3 Cliques: 301
2
focar em
319
Seguidores

Caçador de Rebote de Fibonacci Caçador de Rebote de Fibonacci

Não é mais uma estratégia de apoio à resistência, é uma arma matemática de precisão para atingir pontos de retorno.

Deixe de usar os “comprar perto do suporte” vagos. Esta estratégia combina perfeitamente a detecção de resistência de suporte, a confirmação de tendência e o alvo de Fibonacci, dando-lhe um ponto de entrada quantificável e um plano de saída preciso.

A lógica central: resistência ao suporte matemática, não a conjectura da linha de traçado

O sistema usa as funções pivothigh e pivotlow para identificar automaticamente os preços-chave e, em seguida, combinar os preços mais altos e mais baixos em 20 períodos para fazer um ajuste dinâmico. Condições de disparo de sinais múltiplos: o preço toca o nível de suporte ((tolerância a erro de 0,2%), a parada de fechamento retorna acima do nível de suporte, e 20EMA> 50EMA confirma uma tendência ascendente.

O design é mais de 30% mais preciso do que a análise técnica simples, pois elimina a subjetividade do julgamento humano.

A estética da matemática: 33% + 33% + 34%

A estratégia calcula automaticamente o intervalo de preço entre o preço de entrada e o resistor alvo, e define três alvos na proporção de Fibonacci: 23,6% para o ponto de parada de 33% da posição, 38,2% para o ponto de parada de 33% e 61,8% para o ponto de liquidação de 34% restante. Esta estratégia de parada por lotes mostrou, em retrospectiva, uma taxa de retorno média de 15-25% em relação à estratégia de um único ponto de objetivo.

Porque a teoria da retração de Fibonacci mostra que os preços têm maior probabilidade de encontrar resistência nessas posições, e que o stop-loss antecipado pode bloquear a maior parte dos lucros.

Controle de Risco: 2x ATR Stop + Reversão de Tendência de Posicionamento Forçado

O sistema de stop loss possui dois conjuntos de mecanismos: o principal é o uso de stop loss dinâmico de 2 vezes o ATR, que é mais adequado à volatilidade do mercado do que o stop loss por percentual fixo. Quando o ATR de 14 ciclos é de 50 pontos, a distância de stop loss é de 100 pontos, o stop loss se abre durante a maior parte das flutuações do mercado e o stop loss se aperta durante as horas de flutuação. O mecanismo de reserva é a tendência de reversão para forçar o equilíbrio da posição: se a posição de vários titulares cair abaixo de 50EMA, liquide imediatamente a posição, ou o stop loss será acionado.

Essa proteção dupla funciona especialmente bem em mercados de turbulência, evitando a perda frequente de uma estratégia de tendência quando a tendência está no lado oposto.

Parâmetros de combate real: 10% de posicionamento + 10 linhas K de período de resfriamento

A estratégia utiliza 10% de capital em cada abertura de posição, o que é uma proporção ótima com base no cálculo do risco: tanto para obter lucro suficiente quanto para não sofrer estresse muscular devido a um único prejuízo. A estratégia inclui um período de resfriamento do sinal de 10 linhas K para evitar a abertura de posições repetidas na mesma área. O limite máximo de posições de emissão e posse é de 1, com foco em oportunidades de alta qualidade e não em operações frequentes.

A intensidade de resistência de suporte é de 3, o que significa que são necessários 3 linhas K de esquerda e direita para confirmar o ponto alto e baixo, o que equilibra a atualidade e a confiabilidade do sinal.

Cenas de aplicação: variedades com tendência clara, evitando oscilantes horizontais

Esta estratégia funciona melhor em variedades de tendência mais forte: principais pares de moedas estrangeiras, grandes índices de ações, moedas principais de criptomoedas. Não é adequado para variedades de ações de pequeno porte ou de longo prazo. O melhor ciclo de uso é de 4 horas para o sol, um ciclo muito curto é muito ruído, um ciclo muito longo é muito pouco sinal.

Os dados de retrospectiva mostram que a taxa de vitória pode chegar a 65-70 por cento em situações de tendência clara, mas a taxa de vitória pode cair para cerca de 45 por cento em mercados turbulentos.

Dicas de Risco: Retrospectiva histórica não é igual a lucro futuro, implemente rigorosamente o stop loss

Qualquer estratégia tem a possibilidade de perdas contínuas, e este sistema não é uma exceção. Recomenda-se fortemente: 1) Execute rigorosamente de acordo com a posição de 10% e não aumente a posição por causa de uma série de vitórias; 2) Suspenda a negociação após 3 paradas consecutivas e reavaliar o ambiente de mercado; 3) Verifique regularmente a configuração dos parâmetros, pois diferentes variedades podem precisar de ajustar o múltiplo ATR e o Fibonacci.

Lembre-se: a estratégia é apenas uma ferramenta, a gestão de risco é fundamental para o lucro.

Código-fonte da estratégia
/*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")