
A estratégia é um sistema de negociação de acompanhamento de tendências baseado em múltiplos índices de médias móveis (EMA) e indicadores relativamente fracos (RSI). A estratégia combina sinais de cruzamento de EMAs (20,30,200) em nível de linha de sol, confirmação de dinâmica RSI e mecanismo de stop loss dinâmico, com o objetivo de capturar oportunidades de tendências de longo prazo no mercado.
A lógica central da estratégia inclui os seguintes componentes principais:
A estratégia, através da colaboração de múltiplos indicadores técnicos, constrói um sistema de negociação de acompanhamento de tendências completo. A principal característica da estratégia é a combinação de julgamento de tendências de médio e longo prazo com controle de risco dinâmico, adequado para operar em ambientes de mercado com tendências claras.
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Talbuaia Signal", overlay=true)
// Request EMAs on the daily timeframe
ema20_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 20), lookahead=barmerge.lookahead_on)
ema30_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 30), lookahead=barmerge.lookahead_on)
ema200_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 200), lookahead=barmerge.lookahead_on)
// RSI Calculation
rsi = ta.rsi(close, 14)
// Plot daily EMAs
plot(ema20_daily, color=color.blue, title="Daily EMA 20")
plot(ema30_daily, color=color.orange, title="Daily EMA 30")
plot(ema200_daily, color=color.red, title="Daily EMA 200")
// Plot RSI
hline(50, "RSI Midline", color=color.gray)
plot(rsi, color=color.purple, title="RSI")
// Entry condition: 20 EMA crosses above 30 EMA, price is above 200 EMA, and RSI > 50
bullishEntry = ta.crossover(ema20_daily, ema30_daily) and close > ema200_daily and rsi > 50
// Variables to track entry price, take profit, and trailing stop
var float entryPriceLong = na
var float highestPriceSinceEntry = na
var float takeProfitLevel = na
var float trailingStopLevel = na
// Entry Logic
if bullishEntry
strategy.entry("Long", strategy.long)
entryPriceLong := close
highestPriceSinceEntry := close // Initialize the highest price since entry
takeProfitLevel := entryPriceLong * 1.50 // Set take profit at 50% above entry price
trailingStopLevel := na // Reset trailing stop
label.new(bar_index, close, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white)
// Update highest price and trailing stop dynamically
if strategy.position_size > 0
highestPriceSinceEntry := math.max(highestPriceSinceEntry, close) // Track the highest price reached
trailingStopLevel := highestPriceSinceEntry * (1 - 0.25) // Set trailing stop at 25% below the highest price
// Exit Logic: Take profit or trailing stop
if strategy.position_size > 0 and (close >= takeProfitLevel or close <= trailingStopLevel)
strategy.close("Long")
label.new(bar_index, close, "EXIT LONG", style=label.style_label_down, color=color.red, textcolor=color.white)
// Plot trailing stop and take profit levels on the chart
plot(trailingStopLevel, "Trailing Stop", color=color.red, linewidth=2, style=plot.style_line)
plot(takeProfitLevel, "Take Profit", color=color.green, linewidth=2, style=plot.style_line)