ADX Filtrado Chande Kroll Stop Loss Tendência Seguindo a Estratégia

Autora:ChaoZhang, Data: 2023-11-06 14:52:27
Tags:

img

Resumo

Esta estratégia combina o indicador de stop loss Chande Kroll e o indicador de índice de movimento direcional médio (ADX) para implementar uma estratégia de tendência relativamente simples.

Estratégia lógica

A estratégia primeiro calcula as linhas de stop longo e stop curto do stop loss de Chande Kroll. A linha longa é calculada com base no preço mais alto nos últimos p períodos. A linha curta é calculada com base no preço mais baixo nos últimos p períodos. O ponto mais alto das linhas longas e curtas nos últimos q períodos são então usados como as linhas de stop loss longas e curtas atuais. Isso filtra flutuações de preços de curto prazo e apenas desencadeia o stop loss nos pontos de reversão da tendência.

Quando o preço de fechamento cruza acima da linha curta stop_short, um sinal longo é gerado. Quando o preço de fechamento cruza abaixo da linha longa stop_long, um sinal curto é gerado.

Além disso, o indicador ADX é usado para julgar a força da tendência. Somente quando o ADX é maior que o limiar, o sinal de stop loss desencadeia a entrada. Isso filtra a serra não direcional na consolidação.

Vantagens

A estratégia combina as vantagens dos indicadores de tendência e indicadores de stop loss. Pode capturar oportunamente reversões de tendência, evitando flutuações em mercados não direcionais. A otimização dos parâmetros de stop loss do Chande Kroll pode suavizar a filtragem e garantir stop loss apenas em pontos de reversão de tendência. O indicador ADX garante a entrada apenas quando a tendência é significativa, evitando flutuações de stop loss durante a consolidação do mercado.

Riscos

Se o limiar ADX for definido muito alto, as oportunidades de entrada podem ser perdidas no início das tendências quando os valores ADX ainda são baixos.

Pontos de stop loss que estão muito próximos também podem causar abertura e fechamento frequentes de posições de estratégia. Isso aumentará os custos de negociação e deslizamento.

Optimização

Considere permitir que os sinais de stop loss sejam acionados apenas quando o ADX ultrapassar um limiar. Isso pode melhorar a confiabilidade do tempo de entrada. Outros indicadores de tendência também podem ser combinados para condições conjuntivas, como combinar valores do ADX com inclinações da EMA.

As linhas de stop loss também podem ser ajustadas dinamicamente com base no ATR, permitindo paradas mais amplas quando a volatilidade do mercado aumenta para evitar sensibilidade excessiva.

Resumo

A estratégia integra os pontos fortes dos indicadores de stop loss e ADX de Chande Kroll para construir uma estratégia de tendência relativamente simples e prática. Através da otimização de parâmetros, a estabilidade e rentabilidade da estratégia podem ser melhoradas.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, 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)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

Mais.