
A estratégia é um sistema de negociação integrado de acompanhamento de tendências e sincronia de momentum, que identifica oportunidades de negociação de alta probabilidade com base no julgamento de tendências lineares e na confirmação de momentum de um índice relativamente forte (RSI). O núcleo da estratégia segue a filosofia de negociação de “avanço” e procura o melhor ponto de entrada somente após a confirmação da direção da tendência dominante do mercado.
O princípio de funcionamento da estratégia é baseado em quatro módulos-chave: identificação de tendências, julgamento de condições de entrada, gestão de riscos e otimização de lucros.
Identificação de tendências:
Critérios de admissão:
Gestão de Riscos:
Otimização de lucro:
A implementação da estratégia usa cálculos matemáticos precisos para determinar o tamanho da posição ideal, garantindo que o risco de cada transação seja controlado em níveis predefinidos, permitindo ao mesmo tempo o ajuste de parâmetros para diferentes condições de mercado.
A estratégia tem as seguintes vantagens significativas:
Sinais de negociação de alta qualidade: Confirmação de sincronia com a tendência e a dinâmica, abrindo posições apenas na direção de alta probabilidade, aumentando significativamente a taxa de vitória.long_trend_okelong_rsi_recoveryUma combinação de condições para garantir a qualidade do sinal de negociação.
Gestão de risco adaptativaA estratégia é baseada no ATR e permite que a estratégia ajuste automaticamente os parâmetros de risco de acordo com a volatilidade do mercado. Em um ambiente de mercado de alta volatilidade, o uso de paradas mais flexíveis, em vez de paradas mais apertadas em mercados tranquilos, permite um controle de risco ideal.
Optimizar a gestão de fundosO mecanismo de lucro intermitente ((50% das posições são lucrativas em 2.1R e o restante usa um stop loss de seguimento) realiza um equilíbrio que garante lucro e maximiza a captura de tendências.long_tp1_hitelong_trail_stopAs variáveis de equilíbrio controlam este processo com precisão.
Regras objetivamente clarasA estratégia é totalmente quantificada, a interferência emocional na negociação é eliminada, a execução é disciplinada. Todas as decisões de negociação são baseadas em cálculos matemáticos e condições lógicas claras, evitando julgamentos subjetivos.
Ajudar na tomada de decisões através da visualizaçãoA estratégia fornece um sistema de feedback visual completo, incluindo a coloração de fundo da tendência, a marcação de sinais de entrada e a visualização de objetivos de stop/take, para facilitar a compreensão e o monitoramento da estratégia pelo comerciante.
Ajustabilidade dos parâmetrosOs parâmetros centrais, como o ciclo EMA, o RSI, o ATR, etc., podem ser ajustados para que a estratégia se adapte a diferentes cenários de mercado e preferências de risco individuais.
Apesar das múltiplas vantagens desta estratégia, existem os seguintes riscos potenciais:
Identificação de tendências de atrasoA solução é considerar o aumento de indicadores de confirmação de tendências de curto prazo ou ajustar os parâmetros da EMA para aumentar a sensibilidade.
Risco de Falso Breakout: O sinal de reversão do RSI pode apresentar falsas rupturas, resultando em negociações erradas. Para esse risco, pode-se adicionar condições de confirmação, como mudanças no volume de transação ou confirmação de sincronia de outros indicadores de momentum.
Inadequado para o mercado horizontalA estratégia funciona melhor em mercados de tendência visível, e pode produzir frequentes sinais errados e negociações perdidas durante a fase de correção horizontal. Recomenda-se que a estratégia seja suspensa quando o mercado está em uma onda de turbulência de intervalos visíveis, o que pode ser identificado por meio do aumento do filtro de intensidade da tendência.
Sensibilidade do parâmetroO desempenho da estratégia é sensível à escolha de parâmetros, especialmente a configuração de EMA e os limites do RSI. Recomenda-se otimizar os parâmetros em diferentes condições de mercado através do histórico de retrospectiva, evitando a superação.
Riscos de gestão de fundos: A gestão de risco de percentagem fixa pode ainda levar a perdas consecutivas em condições de mercado extremas. Recomenda-se considerar a implementação de mecanismos de ajuste de risco dinâmicos, reduzindo gradualmente o tamanho da posição após perdas consecutivas.
De acordo com a análise do código da estratégia, as seguintes são possíveis direções de otimização:
Confirmação de sincronia de múltiplos períodos de tempo: Integração de tendências e sinais de momentum de vários períodos de tempo, aumentando a precisão das decisões de negociação. Por exemplo, pode-se verificar se a tendência do dia-línea está de acordo com a dinâmica de 4 horas, apenas para negociar quando a direção está de acordo.
Filtragem de intensidade de tendênciaIntrodução de indicadores de intensidade de tendência, como o ADX (indicador de direção média), abrindo posições apenas quando a tendência é forte o suficiente para evitar sinais errados de tendência fraca ou mercado horizontal.uptrendedowntrendAumentar a intensidade do julgamento.
Ajuste dinâmico dos parâmetros de riscoAjustar a proporção de risco de cada transação com base na volatilidade do mercado, na curva de juros da conta ou na dinâmica dos indicadores de desempenho da estratégia. Aumentar o risco moderadamente quando a estratégia funciona bem e reduzir o risco quando funciona mal.
Análise do cenário de mercado integradoIntrodução de módulos de identificação do cenário de mercado macroeconômico, como índices de volatilidade ou análise de estrutura de mercado, para ajustar automaticamente os parâmetros de estratégia ou ativação seletiva de acordo com diferentes fases do mercado.
Otimização do mecanismo de retençãoA estratégia atual usa o 2.1R fixo como o primeiro ponto de parada, podendo ser considerado o ajuste dinâmico da posição de parada com base na resistência de suporte ou na taxa de flutuação, para lucrar perto dos níveis de preço críticos.
Aumentar o filtro de tempo de transaçãoConsidere o filtro de tempo ou condições de volume de transação, evite períodos de baixa mobilidade ou condições de volume de transação anormais, melhore a qualidade do sinal.
Otimização de aprendizagem de máquina: Utiliza algoritmos de aprendizagem de máquina para prever dinamicamente o melhor conjunto de parâmetros ou ponderação de transações, ajustando-se automaticamente às condições de mercado em tempo real.
A estratégia de negociação quantitativa de gestão de risco ponderada de sincronização com a dinâmica da tendência é um sistema de negociação completo que integra a identificação de tendências, a confirmação da dinâmica, o controle de risco preciso e a gestão inteligente de fundos. A linha de equilíbrio EMA determina a direção do mercado, o indicador de dinâmica RSI confirma o melhor momento de entrada, enquanto o mecanismo de parada de perda dinâmica e de ganhos intercalados baseado no ATR permite o melhor equilíbrio entre riscos e ganhos.
A maior vantagem da estratégia reside na sua sistematização e disciplina, eliminando a interferência emocional no processo de negociação por meio de regras de quantificação claras, adequadas para os comerciantes de quantificação que buscam um estilo de negociação robusto. Ao mesmo tempo, o módulo de gerenciamento de risco da estratégia garante que os perdas individuais sejam limitados e o potencial de lucro seja ilimitado, de acordo com os princípios centrais da negociação bem-sucedida.
Apesar de existirem algumas limitações inerentes, como o atraso no julgamento de tendências e a insuficiente adaptabilidade dos mercados horizontais, as orientações de otimização apresentadas anteriormente, como a análise de múltiplos períodos de tempo, a filtragem da intensidade da tendência e o ajuste do risco dinâmico, podem aumentar ainda mais a robustez e a adaptabilidade das estratégias. A orientação de desenvolvimento futuro deve se concentrar em aumentar a capacidade de adaptação das estratégias, permitindo que elas mantenham um desempenho estável em diferentes ambientes de mercado.
Para os investidores que buscam uma abordagem de negociação sistemática, esta estratégia fornece um quadro de base sólido que pode ser ainda mais personalizado e otimizado de acordo com as preferências de risco individuais e a compreensão do mercado.
/*backtest
start: 2024-06-17 00:00:00
end: 2025-06-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("Crypto Swing Trading Strategy (1-5 Day)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false)
// ============================================================================
// STRATEGY INPUTS
// ============================================================================
// Trend Filter Settings
ema_fast_length = input.int(50, title="Fast EMA Length", minval=1, group="Trend Filter")
ema_slow_length = input.int(200, title="Slow EMA Length", minval=1, group="Trend Filter")
// RSI Settings
rsi_length = input.int(14, title="RSI Length", minval=1, group="Momentum")
rsi_oversold = input.int(45, title="RSI Oversold Level", minval=1, maxval=50, group="Momentum")
rsi_overbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=99, group="Momentum")
// ATR Settings
atr_length = input.int(14, title="ATR Length", minval=1, group="Risk Management")
atr_stop_mult = input.float(1.5, title="ATR Stop Loss Multiplier", minval=0.1, step=0.1, group="Risk Management")
atr_trail_mult = input.float(1.0, title="ATR Trailing Stop Multiplier", minval=0.1, step=0.1, group="Risk Management")
// Risk Management
risk_per_trade = input.float(1.0, title="Risk Per Trade (%)", minval=0.1, maxval=5.0, step=0.1, group="Risk Management")
reward_ratio = input.float(2.1, title="Initial Take Profit Ratio (R:R)", minval=1.0, step=0.1, group="Risk Management")
// Strategy Settings
pullback_distance = input.float(1.0, title="Max Distance from 50 EMA for Pullback (ATR)", minval=0.1, step=0.1, group="Entry Conditions")
enable_shorts = input.bool(true, title="Enable Short Trades", group="Strategy Settings")
enable_longs = input.bool(true, title="Enable Long Trades", group="Strategy Settings")
// ============================================================================
// INDICATOR CALCULATIONS
// ============================================================================
// Moving Averages
ema_fast = ta.ema(close, ema_fast_length)
ema_slow = ta.ema(close, ema_slow_length)
// RSI
rsi = ta.rsi(close, rsi_length)
// ATR
atr = ta.atr(atr_length)
// ============================================================================
// TREND IDENTIFICATION
// ============================================================================
// Primary trend based on EMA relationship
uptrend = ema_fast > ema_slow
downtrend = ema_fast < ema_slow
// ============================================================================
// ENTRY CONDITIONS
// ============================================================================
// Long Entry Conditions
long_trend_ok = uptrend and enable_longs
long_pullback = math.abs(close - ema_fast) <= (pullback_distance * atr) and close < ema_fast[1]
long_rsi_oversold = rsi[1] < rsi_oversold
long_rsi_recovery = rsi > rsi_oversold and rsi[1] <= rsi_oversold
long_entry_condition = long_trend_ok and long_pullback and long_rsi_oversold and long_rsi_recovery
// Short Entry Conditions
short_trend_ok = downtrend and enable_shorts
short_pullback = math.abs(close - ema_fast) <= (pullback_distance * atr) and close > ema_fast[1]
short_rsi_overbought = rsi[1] > rsi_overbought
short_rsi_decline = rsi < rsi_overbought and rsi[1] >= rsi_overbought
short_entry_condition = short_trend_ok and short_pullback and short_rsi_overbought and short_rsi_decline
// ============================================================================
// POSITION SIZING
// ============================================================================
// Calculate position size based on risk per trade and ATR stop distance
calculate_position_size(entry_price, stop_price, risk_percent) =>
risk_amount = strategy.equity * (risk_percent / 100)
stop_distance = math.abs(entry_price - stop_price)
position_size = stop_distance > 0 ? risk_amount / stop_distance : 0
position_size
// ============================================================================
// STRATEGY VARIABLES
// ============================================================================
var float long_entry_price = na
var float long_stop_price = na
var float long_tp1_price = na
var float long_trail_stop = na
var bool long_tp1_hit = false
var float short_entry_price = na
var float short_stop_price = na
var float short_tp1_price = na
var float short_trail_stop = na
var bool short_tp1_hit = false
// ============================================================================
// LONG TRADE MANAGEMENT
// ============================================================================
// Long Entry
if long_entry_condition and strategy.position_size == 0
long_entry_price := close
long_stop_price := close - (atr_stop_mult * atr)
long_tp1_price := close + (reward_ratio * (close - long_stop_price))
long_trail_stop := long_stop_price
long_tp1_hit := false
// Calculate position size
pos_size = calculate_position_size(long_entry_price, long_stop_price, risk_per_trade)
strategy.entry("Long", strategy.long, qty=pos_size)
strategy.exit("Long Stop", "Long", stop=long_stop_price)
// Long TP1 Management (Take 50% profit at 2:1 R:R)
if strategy.position_size > 0 and not long_tp1_hit and high >= long_tp1_price
long_tp1_hit := true
strategy.close("Long", qty_percent=50, comment="TP1 - 50%")
// Move stop to breakeven
long_trail_stop := long_entry_price
strategy.cancel("Long Stop")
// Long Trailing Stop (for remaining 50% position)
if strategy.position_size > 0 and long_tp1_hit
// Calculate new trailing stop
highest_since_tp1 = ta.highest(high, 1)
new_trail_stop = highest_since_tp1 - (atr_trail_mult * atr)
// Only move stop up, never down
if new_trail_stop > long_trail_stop
long_trail_stop := new_trail_stop
// Exit on trailing stop or trend reversal
if close <= long_trail_stop or not uptrend
strategy.close("Long", comment=not uptrend ? "Trend Reversal" : "Trailing Stop")
// ============================================================================
// SHORT TRADE MANAGEMENT
// ============================================================================
// Short Entry
if short_entry_condition and strategy.position_size == 0
short_entry_price := close
short_stop_price := close + (atr_stop_mult * atr)
short_tp1_price := close - (reward_ratio * (short_stop_price - close))
short_trail_stop := short_stop_price
short_tp1_hit := false
// Calculate position size
pos_size = calculate_position_size(short_entry_price, short_stop_price, risk_per_trade)
strategy.entry("Short", strategy.short, qty=pos_size)
strategy.exit("Short Stop", "Short", stop=short_stop_price)
// Short TP1 Management (Take 50% profit at 2:1 R:R)
if strategy.position_size < 0 and not short_tp1_hit and low <= short_tp1_price
short_tp1_hit := true
strategy.close("Short", qty_percent=50, comment="TP1 - 50%")
// Move stop to breakeven
short_trail_stop := short_entry_price
strategy.cancel("Short Stop")
// Short Trailing Stop (for remaining 50% position)
if strategy.position_size < 0 and short_tp1_hit
// Calculate new trailing stop
lowest_since_tp1 = ta.lowest(low, 1)
new_trail_stop = lowest_since_tp1 + (atr_trail_mult * atr)
// Only move stop down, never up
if new_trail_stop < short_trail_stop
short_trail_stop := new_trail_stop
// Exit on trailing stop or trend reversal
if close >= short_trail_stop or not downtrend
strategy.close("Short", comment=not downtrend ? "Trend Reversal" : "Trailing Stop")
// ============================================================================
// PLOTTING
// ============================================================================
// Plot EMAs
plot(ema_fast, title="EMA 50", color=color.blue, linewidth=2)
plot(ema_slow, title="EMA 200", color=color.red, linewidth=2)
// Color background based on trend
bgcolor(uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na, title="Trend Background")
// Plot RSI levels (scaled to price for visualization)
hline(rsi_overbought, title="RSI Overbought", color=color.red, linestyle=hline.style_dashed)
hline(rsi_oversold, title="RSI Oversold", color=color.green, linestyle=hline.style_dashed)
// Plot entry signals
plotshape(long_entry_condition, title="Long Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal)
plotshape(short_entry_condition, title="Short Entry", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)
// Plot stop losses and targets for current position
plot(strategy.position_size > 0 ? long_trail_stop : na, title="Long Trailing Stop", color=color.red, style=plot.style_stepline, linewidth=2)
plot(strategy.position_size < 0 ? short_trail_stop : na, title="Short Trailing Stop", color=color.red, style=plot.style_stepline, linewidth=2)
plot(strategy.position_size > 0 and not long_tp1_hit ? long_tp1_price : na, title="Long TP1", color=color.green, style=plot.style_cross, linewidth=2)
plot(strategy.position_size < 0 and not short_tp1_hit ? short_tp1_price : na, title="Short TP1", color=color.green, style=plot.style_cross, linewidth=2)
// ============================================================================
// INFORMATION DISPLAY (Using Labels instead of Table)
// ============================================================================
// Display key information using labels on the last bar
if barstate.islast
// Create info label with key metrics
trend_text = uptrend ? "UP" : downtrend ? "DOWN" : "SIDE"
position_text = strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE"
info_text = "Trend: " + trend_text + "\nRSI: " + str.tostring(math.round(rsi, 1)) + "\nATR: " + str.tostring(math.round(atr, 2)) + "\nPosition: " + position_text
label.new(bar_index, high + atr, info_text,
color=uptrend ? color.new(color.green, 80) : downtrend ? color.new(color.red, 80) : color.new(color.gray, 80),
textcolor=color.white, style=label.style_label_down, size=size.normal)
// ============================================================================
// ALERTS
// ============================================================================
// Alert conditions
alertcondition(long_entry_condition, title="Long Entry Signal", message="LONG: Swing trading signal for {{ticker}} at {{close}}")
alertcondition(short_entry_condition, title="Short Entry Signal", message="SHORT: Swing trading signal for {{ticker}} at {{close}}")
alertcondition(strategy.position_size > 0 and long_tp1_hit, title="Long TP1 Hit", message="LONG TP1: First target hit for {{ticker}} at {{close}}")
alertcondition(strategy.position_size < 0 and short_tp1_hit, title="Short TP1 Hit", message="SHORT TP1: First target hit for {{ticker}} at {{close}}")
// ============================================================================
// STRATEGY SUMMARY
// ============================================================================
// This strategy implements the full swing trading approach described in the document:
// 1. Trend filtering using 50/200 EMA (only trade with the trend)
// 2. RSI momentum for entry timing (buy oversold in uptrend, sell overbought in downtrend)
// 3. ATR-based position sizing and stop losses (volatility-adjusted risk management)
// 4. Partial profit taking at 2:1 R:R (50% of position)
// 5. Trailing stops for remaining position using ATR
// 6. Trend reversal exits (close all when trend changes)
//
// Key Features:
// - Configurable parameters for different market conditions
// - Risk management with consistent 1% risk per trade
// - Visual indicators for trend, signals, and trade management
// - Information table showing key metrics
// - Alert system for automated notifications
//
// Recommended for: BTC, ETH, XRP on daily timeframes
// Holding period: 1-5 days typical