
A estratégia é um sistema avançado de rastreamento de tendências baseado no ATR e na série de Fibonacci. Combina a análise da volatilidade de vários períodos de tempo com a média ponderada de Fibonacci para construir um modelo de negociação sensível e adaptável. O núcleo da estratégia é capturar melhor as tendências do mercado através da distribuição dinâmica de pesos e usar o ATR para obter lucros precisos.
A estratégia utiliza um método de combinação de indicadores técnicos em vários níveis: primeiro, calcula-se o alcance real da oscilação (TR) e a pressão de compra (BP), em seguida, calcula-se o rácio de pressão para cada ciclo com base no período de tempo da sequência de Fibonacci (8,13,21,34,55); construir uma média ponderada aplicando diferentes pesos (5,4,3,2,1) a diferentes períodos; e, posteriormente, aplicar a suavização do SMA de 3 períodos. O sistema aciona o sinal de negociação com base no cruzamento do SMA com os limites predefinidos (de 58.0 e 42.0) e usa o ATR para projetar um mecanismo de liquidação em quatro etapas.
A estratégia, através da integração das técnicas de média ponderada ATR e Fibonacci, constrói um sistema de acompanhamento de tendências abrangente. Sua vantagem reside na análise multidimensional e na capacidade de adaptação dinâmica, mas também precisa prestar atenção à otimização de parâmetros e à filtragem do cenário de mercado. Com o aumento da otimização e do controle de vento contínuos, a estratégia deve manter um desempenho estável em diferentes cenários de mercado.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading
// The Fibonacci ATR Fusion Strategy is an advanced trading methodology that uniquely integrates Fibonacci-based weighted averages with the Average True Range (ATR) to
// identify and exploit significant market trends. Unlike traditional strategies that rely on single indicators or fixed parameters, this approach leverages multiple timeframes and
// dynamic volatility measurements to enhance accuracy and adaptability.
//@version=5
strategy("Fibonacci ATR Fusion - Strategy [presentTrading]", overlay=false, precision=3, commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=10000)
// Calculate True High and True Low
tradingDirection = input.string(title="Trading Direction", defval="Both", options=["Long", "Short", "Both"])
// Trading Condition Thresholds
long_entry_threshold = input.float(58.0, title="Long Entry Threshold")
short_entry_threshold = input.float(42.0, title="Short Entry Threshold")
long_exit_threshold = input.float(42.0, title="Long Exit Threshold")
short_exit_threshold = input.float(58.0, title="Short Exit Threshold")
// Enable or Disable 4-Step Take Profit
useTakeProfit = input.bool(false, title="Enable 4-Step Take Profit")
// Take Profit Levels (as multiples of ATR)
tp1ATR = input.float(3.0, title="Take Profit Level 1 ATR Multiplier")
tp2ATR = input.float(8.0, title="Take Profit Level 2 ATR Multiplier")
tp3ATR = input.float(14.0, title="Take Profit Level 3 ATR Multiplier")
// Take Profit Percentages
tp1_percent = input.float(12.0, title="TP Level 1 Percentage", minval=0.0, maxval=100.0)
tp2_percent = input.float(12.0, title="TP Level 2 Percentage", minval=0.0, maxval=100.0)
tp3_percent = input.float(12.0, title="TP Level 3 Percentage", minval=0.0, maxval=100.0)
true_low = math.min(low, close[1])
true_high = math.max(high, close[1])
// Calculate True Range
true_range = true_high - true_low
// Calculate BP (Buying Pressure)
bp = close - true_low
// Calculate ratios for different periods
calc_ratio(len) =>
sum_bp = math.sum(bp, len)
sum_tr = math.sum(true_range, len)
100 * sum_bp / sum_tr
// Calculate weighted average of different timeframes
weighted_avg = (5 * calc_ratio(8) + 4 * calc_ratio(13) + 3 * calc_ratio(21) + 2 * calc_ratio(34) + calc_ratio(55)) / (5 + 4 + 3 + 2 + 1)
weighted_avg_sma = ta.sma(weighted_avg,3)
// Plot the indicator
plot(weighted_avg, "Fibonacci ATR", color=color.blue, linewidth=2)
plot(weighted_avg_sma, "SMA Fibonacci ATR", color=color.yellow, linewidth=2)
// Define trading conditions
longCondition = ta.crossover(weighted_avg_sma, long_entry_threshold) // Enter long when weighted average crosses above threshold
shortCondition = ta.crossunder(weighted_avg_sma, short_entry_threshold) // Enter short when weighted average crosses below threshold
longExit = ta.crossunder(weighted_avg_sma, long_exit_threshold)
shortExit = ta.crossover(weighted_avg_sma, short_exit_threshold)
atrPeriod = 14
atrValue = ta.atr(atrPeriod)
if (tradingDirection == "Long" or tradingDirection == "Both")
if (longCondition)
strategy.entry("Long", strategy.long)
// Set Take Profit levels for Long positions
if useTakeProfit
tpPrice1 = strategy.position_avg_price + tp1ATR * atrValue
tpPrice2 = strategy.position_avg_price + tp2ATR * atrValue
tpPrice3 = strategy.position_avg_price + tp3ATR * atrValue
// Close partial positions at each Take Profit level
strategy.exit("TP1 Long", from_entry="Long", qty_percent=tp1_percent, limit=tpPrice1)
strategy.exit("TP2 Long", from_entry="Long", qty_percent=tp2_percent, limit=tpPrice2)
strategy.exit("TP3 Long", from_entry="Long", qty_percent=tp3_percent, limit=tpPrice3)
if (longExit)
strategy.close("Long")
if (tradingDirection == "Short" or tradingDirection == "Both")
if (shortCondition)
strategy.entry("Short", strategy.short)
// Set Take Profit levels for Short positions
if useTakeProfit
tpPrice1 = strategy.position_avg_price - tp1ATR * atrValue
tpPrice2 = strategy.position_avg_price - tp2ATR * atrValue
tpPrice3 = strategy.position_avg_price - tp3ATR * atrValue
// Close partial positions at each Take Profit level
strategy.exit("TP1 Short", from_entry="Short", qty_percent=tp1_percent, limit=tpPrice1)
strategy.exit("TP2 Short", from_entry="Short", qty_percent=tp2_percent, limit=tpPrice2)
strategy.exit("TP3 Short", from_entry="Short", qty_percent=tp3_percent, limit=tpPrice3)
if (shortExit)
strategy.close("Short")