Estratégia de acompanhamento de tendência ADX ascendente dinâmica


Data de criação: 2023-12-11 17:18:32 última modificação: 2023-12-11 17:18:32
cópia: 0 Cliques: 728
1
focar em
1621
Seguidores

Estratégia de acompanhamento de tendência ADX ascendente dinâmica

Visão geral

A estratégia permite o acompanhamento atempado da tendência, através do acompanhamento das mudanças dinâmicas nos indicadores do ADX, capturando mudanças iniciais nas tendências do mercado. Quando o ADX sobe rapidamente a partir de níveis baixos, indica que a tendência está se formando, que é um ótimo momento para entrar. Combinado com a ajuda da média móvel, pode efetivamente ignorar o diagnóstico de falhas.

Princípio da estratégia

A estratégia baseia-se principalmente na mudança dinâmica do indicador ADX para julgar o desenvolvimento da tendência. Quando o indicador ADX está em baixa, representa pouca mudança de tendência; Quando o ADX sobe rapidamente do baixo, indica que a tendência está se formando. A estratégia capta o desenvolvimento da tendência monitorando a rápida ascensão do ADX.

Em particular, o critério de admissão para a estratégia inclui os seguintes critérios:

  1. ADX sobre a travagem de um limiar definido (como 10)
  2. ADX sobe rapidamente
  3. Preços com média móvel simples ou média móvel indexada

Quando as condições acima são simultaneamente preenchidas, representa que a tendência está se formando, fazendo mais; quando o movimento atravessa a média móvel no momento, a posição está em equilíbrio. Usando duas médias móveis, pode-se julgar com mais precisão o desenvolvimento da tendência.

As condições de stop loss são semelhantes: quando o ADX desce rapidamente para baixo, ele fica em aberto; quando o preço atravessa a média móvel abaixo, ele fica em posição de equilíbrio.

Análise de vantagens

A maior vantagem da estratégia é capturar a evolução da tendência em tempo hábil. A abordagem tradicional de apenas olhar para o valor do ADX, muitas vezes é preciso esperar que o ADX suba para 20 ou 25 para confirmar a tendência, o que perdeu o melhor momento de entrada.

Além disso, a estratégia também introduziu uma média móvel para auxiliar a filtragem de erros de diagnóstico e melhorar a estabilidade da estratégia.

Análise de risco e otimização

O maior risco dessa estratégia é a própria atraso do indicador ADX. Embora seja possível reduzir o atraso por meio do rastreamento de ascensões rápidas, há um certo atraso. Isso pode levar a que alguns mercados que se revertem rapidamente não sejam capturados.

Além disso, o indicador ADX não é 100% preciso para avaliar as tendências, e é inevitável que ocorra algum tipo de diagnóstico errado. Embora a introdução da média móvel possa filtrar parte do ruído, ainda é necessário otimizar ainda mais.

A estratégia ainda tem muito espaço para otimização, a chave é melhorar ainda mais a precisão de captura dos indicadores de ADX. Pode-se considerar a introdução de métodos como aprendizado de máquina, modelos de treinamento para determinar a distribuição de probabilidade após a alteração do ADX. Também pode-se tentar diferentes combinações de parâmetros e outros indicadores auxiliares para otimização de testes.

Resumir

A estratégia de acompanhamento de tendências de ADX ascendentes dinâmicas permite o acompanhamento atempado das tendências, capturando pontos de mudança de mercado em ascensão rápida do ADX. A maior vantagem é que a tendência é extremamente ágil em termos de tempo e pode ser efetivamente capturada no início da tendência.

Código-fonte da estratégia
/*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)