Estratégia de acompanhamento de tendências inteligentes ADX


Data de criação: 2023-11-28 14:04:00 última modificação: 2023-11-28 14:04:00
cópia: 0 Cliques: 884
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências inteligentes ADX

Visão geral

A estratégia inteligente de acompanhamento de tendências do ADX usa o índice de tendências médias (ADX) para avaliar a força da tendência, capturar a tendência quando a tendência é mais fraca e obter lucro com o acompanhamento da tendência forte. A estratégia de avaliar a força da tendência e, ao mesmo tempo, combinar a ruptura do preço para gerar um sinal de negociação é uma estratégia de acompanhamento de tendências.

Princípio da estratégia

A estratégia baseia-se principalmente no índice de tendência média (ADX) para determinar a força da tendência atual. O ADX representa a força da tendência através da medição do indicador de direção de flutuação de preços em um determinado período. Quando o ADX está abaixo do limite estabelecido, consideramos que a situação está se resolvendo.

Especificamente, a estratégia primeiro calcula o valor do ADX de 14 ciclos e considera a tendência fraca quando está abaixo de 18. Em seguida, calcula o alcance do quadrado formado pelo preço máximo e mínimo das últimas 20 linhas K. Quando o preço quebra esse quadrado, gera um sinal de compra e venda.

Esta estratégia combina o discernimento da força da tendência e sinais de ruptura, permitindo a captura de tendências mais fracas e a entrada em liquidação, evitando a negociação frequente em situações desordenadas. Quando uma tendência forte ocorre, o intervalo de parada é maior, permitindo obter mais lucro.

Vantagens estratégicas

  1. A combinação de uma análise das forças da tendência permite evitar a frequência de transações em situações desordenadas.
  2. A ruptura do quadrado adiciona um filtro para evitar que o objeto seja preso durante a vibração.
  3. A partir de agora, os investidores poderão ter mais espaço para parar em situações de tendência.
  4. Pode-se personalizar os parâmetros ADX, parâmetros quadrados, parâmetros de stop loss, etc., para adaptar-se a diferentes variedades.

Risco estratégico

  1. A configuração incorreta dos parâmetros ADX pode perder tendências ou erros de julgamento.
  2. O tamanho excessivo ou o tamanho excessivo de uma caixa pode afetar o resultado.
  3. Um coeficiente de parada de perda inadequado pode causar perda pequena ou parada prematura.

Pode ser otimizado por meio da adaptação de parâmetros ADX, parâmetros quadrados, parâmetros de stop loss, etc., para torná-lo mais adequado para diferentes variedades e condições de mercado. Ao mesmo tempo, a gestão rigorosa do dinheiro também é importante, controlar a taxa de stop loss único, para evitar grandes perdas único.

Direção de otimização da estratégia

  1. Os parâmetros ADX podem testar diferentes efeitos de ciclo.
  2. Os parâmetros do quadrado podem ser testados em diferentes comprimentos para determinar o tamanho ideal do alcance.
  3. O coeficiente de parada de prejuízo pode ser ajustado para otimizar a relação de risco-receita.
  4. Pode-se testar a eficácia de transações unilaterais com apenas mais ou apenas menos.
  5. Pode ser combinado com outros indicadores, como o indicador de aumento de potência.

Resumir

A estratégia inteligente de acompanhamento de tendências do ADX é, em geral, uma estratégia de tendências mais estável. Ela combina ao mesmo tempo o julgamento da força da tendência e os sinais de ruptura do preço, evitando, até certo ponto, o problema de perseguir altos e baixos nas estratégias comuns de acompanhamento de tendências.

Código-fonte da estratégia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Developer: Andrew Palladino. 
//Creator: Rob Booker.
//Date: 9/29/2017
//@version=5
//Date: 08/10/2022
//Updated to V5 from V1, default cash settings added and indicators made more easily visible by:
// @ Powerscooter

strategy("Rob Booker - ADX Breakout", shorttitle="ADX Breakout V5", overlay=true, default_qty_type = strategy.cash, default_qty_value = 100000, initial_capital = 100000)

adxSmoothPeriod = input(14, title="ADX Smoothing Period", group = "ADX Settings")
adxPeriod = input(14, title="ADX Period", group = "ADX Settings")
adxLowerLevel = input(18, title="ADX Lower Level", group = "ADX Settings")
boxLookBack = input(20, title="BreakoutBox Lookback Period", group = "BreakoutBox")
profitTargetMultiple = input(1.0, title="Profit Target Box Width Multiple", group = "Take Profit and Stop Loss")
stopLossMultiple = input(0.5, title="Stop Loss Box Width Multiple", group = "Take Profit and Stop Loss")
enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group = "Trade Direction")


// When the ADX drops below threshold limit, then we consider the pair in consolidation. 
// Set Box around highs and lows of the last 20 candles. with upper and lower boundaries. 
// When price breaks outside of box, a trade is taken. (on close or on touch?)
// Stop is placed, default 50%, of the size of the box. So if box is 200 pips, stop is at 100 pips. 
// Profit target is 100% of the size of the box. Default. User can set a profit target of 0.5, 1 full size, 2 or 3. 


dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxHigh(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	plus
	
adxLow(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	minus
	
sig = adx(adxSmoothPeriod, adxPeriod)
//sigHigh = adxHigh(dilen, adxlen)
//sigLow = adxLow(dilen, adxlen)

isADXLow = sig < adxLowerLevel

//boxUpperLevel = ta.highest(high, boxLookBack)[1]
//boxLowerLevel = ta.lowest(low, boxLookBack)[1]

var float boxUpperLevelCarry = 0
var float boxLowerLevelCarry = 0

boxUpperLevel = strategy.position_size == 0 ? ta.highest(high, boxLookBack)[1] : boxUpperLevelCarry
boxUpperLevelCarry := boxUpperLevel
boxLowerLevel = strategy.position_size == 0 ? ta.lowest(low, boxLookBack)[1] : boxLowerLevelCarry
boxLowerLevelCarry := boxLowerLevel

boxWidth = boxUpperLevel - boxLowerLevel

profitTarget = strategy.position_size > 0  ? strategy.position_avg_price + profitTargetMultiple*boxWidth : strategy.position_size < 0 ?  strategy.position_avg_price - profitTargetMultiple*boxWidth : na
stopLoss = strategy.position_size > 0 ? strategy.position_avg_price - stopLossMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price + stopLossMultiple*boxWidth : na

plot(strategy.position_size == 0 ? boxUpperLevel : na, color=color.white, style = plot.style_linebr)
plot(strategy.position_size == 0 ? boxLowerLevel : na, color=color.white, style = plot.style_linebr)


bgcolor(isADXLow ? color.purple : na, transp=72, title = "ADX limit")
plot(stopLoss, color=color.red, linewidth=2, style = plot.style_linebr, title="StopLossLine")
plot(profitTarget, color=color.blue, linewidth=2, style = plot.style_linebr, title="ProfitTargetLine")

isBuyValid = strategy.position_size == 0 and ta.cross(close, boxUpperLevel) and isADXLow

//Long Entry Condition
strategy.exit("close_long", from_entry="open_long", limit = profitTarget, stop = stopLoss)
if isBuyValid and strategy.opentrades == 0 and (enableDirection == -1 or enableDirection == 0)
    strategy.entry("open_long", strategy.long)

isSellValid = strategy.position_size == 0 and ta.cross(close, boxLowerLevel) and isADXLow

//Short Entry condition
strategy.exit(id="close_short", from_entry="open_short", limit = profitTarget, stop = stopLoss)
if isSellValid and strategy.opentrades == 0 and (enableDirection == 1 or enableDirection == 0)
    strategy.entry("open_short", strategy.short)