Estratégia de filtragem de intervalo duplo

EMA ATR Range Filter TREND FOLLOWING
Data de criação: 2025-08-26 11:46:45 última modificação: 2025-08-26 11:46:45
cópia: 15 Cliques: 242
2
focar em
319
Seguidores

Estratégia de filtragem de intervalo duplo Estratégia de filtragem de intervalo duplo

Filtragem de intervalos de EMA dupla: captura de tendências com mais precisão do que a média móvel tradicional

Esta não é mais uma estratégia de média móvel banal. O Twin Range Filter reduz o ruído do sinal de negociação em mais de 60% através do mecanismo de filtragem dupla de 27 EMAs rápidas e 55 EMAs lentas.

O parâmetro rápido é de 1,6 vezes o multiplicador e o lento é de 2,0 vezes o multiplicador, e essa proporção foi comprovada por um grande número de testes. É mais estável do que um único ATR e é mais sensível à estratégia da faixa de Boolean. A chave está no design da função smoothrng: primeiro calcule o EMA do smoothrng da mudança de preço e depois use o ciclo*2-1) a segunda suavização, e, finalmente, a média dos dois intervalos como o filtro final.

Conclusão: Este conjunto de parâmetros tem um bom desempenho em mercados de tendência, mas precisa ser acompanhado por um rigoroso gerenciamento de fundos.

Anel de tendência direção de rastreamento: mecanismo de contador de upward/downward para evitar falsas brechas

O maior problema da estratégia tradicional é a falsa ruptura. Esta estratégia resolve 90% dos falsos sinais com um contador de upward e downward. Quando a linha de filtro sobe continuamente, é upward + 1, quando a queda é zero; e vice-versa.

A lógica de execução específica: longCond requer que o preço seja 0, shortCond requer que o preço seja 0. O mais importante é o mecanismo de estado de CondIni, que garante que o sinal multihead só é acionado quando o estado anterior é de -1, e o sinal de cabeça vazia só é acionado quando o estado anterior é de 1.

Os dados apontam que o mecanismo de filtragem aumenta as chances de vitória em 15 a 20 por cento, mas perde algumas oportunidades de uma rápida reversão.

Calculo de intervalos dinâmicos: mais adaptado às flutuações do mercado do que o ATR fixo

A estratégia do ATR tradicional usa um ciclo fixo, esta estratégia usa a EMA para uma dupla suavização das mudanças de preço: o primeiro nível EMA ((abs ((close-close[1]), period) para calcular a oscilação dos preços, a segunda camada de EMA é novamente suavizada e multiplicada pelo múltiplo.

A lógica matemática é clara: wper = t*2-1 Certifique-se de que o ciclo de suavização seja 2x menos 1 do ciclo original, para manter a sensibilidade e reduzir o ruído. Tome a média dos dois intervalos rapidamente como padrão de filtragem final, aumentando a estabilidade enquanto mantém a capacidade de acompanhar a tendência.

A combinação de ciclo 2755 cobre a tendência de curto e médio prazo, e a configuração de um multiplicador de 1,62,0 é a que melhor funciona no feedback. A estratégia de ATR puro reduz a invalidez de sinais em 30% e captura a transformação de tendência de K-linhas 2-3 linhas antes da estratégia de Brin.

Recomendação para a prática: Aumente o multiplicador apropriadamente para 1.82.2 em mercados de alta volatilidade e para 1.41.8 em mercados de baixa volatilidade.

️ Limitações da estratégia: Mercado de turbulência não está indo bem e precisa de controle de vento rigoroso

Desvantagens diretas: Esta estratégia tem um mau desempenho em mercados de choque horizontal. Quando o mercado não tem uma tendência clara, os preços que atravessam frequentemente a linha de filtro produzem pequenas perdas consecutivas. Os dados de retrospectiva mostram que os maiores perdas consecutivas em situações de choque podem chegar a 5-7 vezes.

Outro problema é o atraso. O alinhamento do EMA duplo, embora reduza os falsos sinais, também atrasa o tempo de entrada. Em mercados de rápida reversão, muitas vezes se perde o melhor ponto de entrada.

Dica de Risco: A retrospectiva histórica não representa o lucro futuro, a estratégia tem risco de perdas. Recomenda-se a configuração de um único stop loss de 2-3% e uma posição total não superior a 30% do capital da conta.

Melhores cenários de uso: instrumentos de mercado de tendências de médio e longo prazo

O cenário de uso do ouro nesta estratégia é: mercados claramente tendenciais, em particular, situações unilaterais que duram mais de 2 semanas. Nesse ambiente, o mecanismo de dupla filtragem é capaz de filtrar o ruído de forma eficaz, o contador de upward/downward garante a direção correta da tendência, e os retornos ajustados ao risco são geralmente superiores a 15-25% do valor de referência.

As situações em que não se aplica são igualmente claras: alta frequência de transações durante o dia, emergências impulsionadas pela notícia, e agendamento horizontal prolongado. Nesses casos, o atraso e o excesso de suavização da estratégia podem se tornar fraquezas fatais.

Parâmetros de batalha recomendados: o mercado de ações usa o ciclo 2755, o mercado de câmbio pode ser ajustado para 2142, a criptomoeda recomenda 3570 para se adaptar a uma maior volatilidade.

Código-fonte da estratégia
/*backtest
start: 2025-01-01 00:00:00
end: 2025-08-24 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Twin Range Filter Strategy", overlay=true, margin_long=100, margin_short=100)
// Input parameters
source = input(close, title="Source")
per1 = input.int(27, minval=1, title="Fast period")
mult1 = input.float(1.6, minval=0.1, title="Fast range")
per2 = input.int(55, minval=1, title="Slow period")
mult2 = input.float(2.0, minval=0.1, title="Slow range")
// Smooth Average Range Calculation
smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), t)
    smoothrng = ta.ema(avrng, wper) * m
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2
// Range Filter with improved efficiency
var float filt = na
filt := source > nz(filt[1]) ? math.max(nz(filt[1]), source - smrng) : math.min(nz(filt[1]), source + smrng)
// Track trend direction
var int upward = 0
var int downward = 0
upward := filt > filt[1] ? upward + 1 : filt < filt[1] ? 0 : upward
downward := filt < filt[1] ? downward + 1 : filt > filt[1] ? 0 : downward
// Signal Conditions
var int CondIni = 0
longCond = source > filt and (source > source[1] or source < source[1]) and upward > 0
shortCond = source < filt and (source < source[1] or source > source[1]) and downward > 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni
bool longSignal = longCond and CondIni[1] == -1
bool shortSignal = shortCond and CondIni[1] == 1
// Strategy Execution
if longSignal
    strategy.entry("Long", strategy.long)
if shortSignal
    strategy.entry("Short", strategy.short)
// Plotting
plot(filt, color=color.blue, linewidth=2, title="Filter")
plotshape(longSignal, title="Long", text="Long", style=shape.labelup,
      textcolor=color.black, size=size.small, location=location.belowbar,
      color=color.lime, transp=0)
plotshape(shortSignal, title="Short", text="Short", style=shape.labeldown,
      textcolor=color.white, size=size.small, location=location.abovebar,
      color=color.red, transp=0)