Esta estratégia rastreia as mudanças dinâmicas do indicador ADX para capturar as mudanças iniciais nas tendências do mercado para seguir a tendência em tempo hábil. Quando o ADX sobe rapidamente a partir de níveis baixos, ele sinaliza que uma tendência está se formando, o que apresenta uma grande oportunidade de entrar. Com a ajuda de médias móveis, ele pode filtrar sinais falsos de forma eficaz.
O núcleo desta estratégia consiste em julgar o desenvolvimento da tendência com base nas mudanças dinâmicas do indicador ADX. ADX baixo significa pequenas flutuações nas tendências. Quando o ADX sobe rapidamente a partir de níveis baixos, ele sinaliza uma tendência está se formando. A estratégia captura o surgimento da tendência monitorando o aumento acentuado do ADX.
Especificamente, o sinal de entrada consiste nos seguintes factores:
Quando todas as condições acima são atendidas, ele sinaliza uma tendência de alta está se formando para ir longo. Quando o preço cai abaixo das médias móveis, fechar posições. Duas médias móveis são usadas para julgar as tendências com mais precisão.
A lógica de stop loss é semelhante: vá curto quando o ADX cai rapidamente e feche posições quando o preço sobe acima das médias móveis.
A maior vantagem aqui é a captura oportuna de tendências emergentes. A maneira convencional de olhar para os valores absolutos do ADX geralmente requer confirmação acima de 20 ou 25 para chamar uma tendência, perdendo assim o tempo de entrada ideal. Esta estratégia capta o desenvolvimento inicial da tendência rastreando o rápido aumento do ADX.
Além disso, as médias móveis ajudam a filtrar sinais falsos de forma eficaz, aumentando a estabilidade da estratégia.
O maior risco provém da natureza atrasada do próprio ADX. Apesar de alcançar a rápida subida para reduzir o atraso, ainda há algum atraso. Isso faz com que se percam alguns mercados que se revertem rapidamente.
Além disso, o ADX não julga perfeitamente as tendências e inevitavelmente as diagnostica erroneamente de tempos em tempos.
Ainda há um grande espaço para otimizar essa estratégia, principalmente melhorando a precisão do ADX
Esta estratégia de acompanhamento da tendência ADX em ascensão dinâmica capta mudanças de tendência rapidamente, identificando aumentos acentuados da ADX, seguindo assim as tendências em tempo hábil.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © dhilipthegreat //@version=4 //Rising ADX strategy strategy(title="Rising ADX strategy", overlay=false) adxlen = input(14, title="ADX Length", minval=1) threshold = input(10, title="threshold", minval=5) hline(threshold, color=color.black, linestyle=hline.style_dashed) atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen=input(20, title="Moving average 1 ",minval=1, maxval=50) avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen2=input(20, title="Moving average 2",minval=1, maxval=200) avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na //ADX&DI dilen = 14 dirmov(len,_high,_low,_tr) => up = change(_high) down = -change(_low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(_tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen,_high,_low,_tr) => [plus, minus] = dirmov(dilen,_high,_low,_tr) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [plus, minus] = dirmov(dilen,high,low,tr) sig = adx(dilen, adxlen,high,low,tr) prev_sig = adx(dilen, adxlen,high[1],low[1],tr) plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2) ////// longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2 barcolor(longCondition ? color.yellow: na) Long_side = input(true, "Long side") if Long_side strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1) exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2 strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2 barcolor(shortCondition ? color.gray: na) Short_side = input(true, "Short side") if Short_side strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1) sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2 strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all barcolor(strategy.position_size>1 ? color.lime: na) bgcolor(strategy.position_size>1 ? color.lime: na) barcolor(strategy.position_size<0 ? color.orange: na) bgcolor(strategy.position_size<0 ? color.orange: na)