Esta é uma estratégia de negociação quantitativa que combina cruzamento de média móvel exponencial (EMA) com um filtro de faixa média verdadeira (ATR). A estratégia visa identificar tendências fortes e executar negociações em condições de mercado de alta volatilidade, melhorando efetivamente a taxa de Sharpe e o desempenho geral.
A lógica principal consiste em dois componentes principais: determinação de tendência e filtragem de volatilidade. Para a determinação de tendência, a estratégia usa uma EMA de 50 períodos como a linha rápida e uma EMA de 200 períodos como a linha lenta, gerando sinais longos quando a linha rápida cruza acima da linha lenta e sinais curtos quando ela cruza abaixo. Para a filtragem de volatilidade, a estratégia calcula o valor ATR de 14 períodos e a converte em uma porcentagem do preço, permitindo apenas posições quando a porcentagem ATR excede um limite pré-estabelecido (default 2%).
Esta estratégia combina indicadores técnicos clássicos com conceitos modernos de gerenciamento de risco. Usando crossovers EMA para capturar tendências enquanto emprega um filtro ATR para controlar o tempo do comércio, a estratégia mantém a simplicidade enquanto alcança uma forte praticidade. Embora existam alguns riscos inerentes, a estratégia ainda possui bom valor de aplicação através de otimização adequada e medidas de gerenciamento de risco.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Inputs for Moving Averages fastLength = input.int(50, title="Fast EMA Length") slowLength = input.int(200, title="Slow EMA Length") // Inputs for ATR Filter atrLength = input.int(14, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrThreshold = input.float(0.02, title="ATR Threshold (%)") // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Calculate ATR atr = ta.atr(atrLength) // Convert ATR to a percentage of price atrPct = atr / close // Define Long Condition (Cross and ATR filter) longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Short Condition shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100 // Define Exit Conditions exitConditionLong = ta.crossunder(fastEMA, slowEMA) exitConditionShort = ta.crossover(fastEMA, slowEMA) // Long Entry if (longCondition) strategy.entry("Long", strategy.long) // Short Entry if (shortCondition) strategy.entry("Short", strategy.short) // Long Exit if (exitConditionLong) strategy.close("Long") // Short Exit if (exitConditionShort) strategy.close("Short") // Plot EMAs for visual reference plot(fastEMA, title="50 EMA", color=color.blue) plot(slowEMA, title="200 EMA", color=color.red) // Plot ATR for reference plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line) hline(atrThreshold / 100, "ATR Threshold", color=color.green)