Estratégia de Canal de Preço Adaptável


Data de criação: 2023-12-04 16:33:45 última modificação: 2023-12-04 16:33:45
cópia: 0 Cliques: 634
1
focar em
1619
Seguidores

Estratégia de Canal de Preço Adaptável

Visão geral

A estratégia é uma estratégia de canal de preço adaptável baseada no indicador de alcance real médio (ATR) e no indicador de direção média (ADX). O objetivo é identificar mercados e tendências de correção no movimento de preços e negociar de acordo com isso.

Princípio da estratégia

  1. Calcule o valor máximo ((HH) e o mínimo ((LL) da linha K da raiz de comprimento mais recente.

  2. De acordo com o aumento e queda do preço, calcule +DI e -DI, e depois calcule ADX.

  3. Se o ADX < 25, o mercado é avaliado como estabilizado. Se o preço de fechamento estiver acima do limite superior do canal de preços, então HH - ATR multiplicado por*ATR), faça mais; se o preço de fechamento estiver abaixo do limite inferior do canal de preço (LL + ATR multiplicado por*ATR), em tempo livre.

  4. Se o ADX é maior que 25 e o +DI é menor que -DI, é considerado um mercado de touros.

  5. Se o ADX > = 25 e + DI < - DI, então é considerado um mercado de fechamento. Neste momento, se o preço de fechamento estiver abaixo do limite inferior do canal de preço, faça um fechamento.

  6. Depois de entrar em posição, se a linha K não for interrompida após a raiz de exit_length, a parada de perda forçada é aplicada.

Análise de vantagens

  1. A estratégia pode ser automaticamente adaptada ao ambiente do mercado. A estratégia de corredor de preço é usada na consolidação do mercado e na negociação de tendências no mercado de tendências.

  2. O uso dos indicadores ATR e ADX assegura a auto-adaptabilidade da estratégia. O ATR é usado para ajustar a largura do canal de preços, enquanto o ADX é usado para julgar a tendência do mercado.

  3. O mecanismo de impedimento forçado contribui para a estabilidade da estratégia.

Análise de Riscos

  1. A ADX tem uma maior probabilidade de produzir um sinal errado.

  2. A configuração incorreta dos indicadores ATR e ADX pode levar a uma má eficácia da estratégia.

  3. O risco de uma mudança de comportamento não ser evitada com eficácia.

Direção de otimização

  1. Optimizar os parâmetros dos indicadores ATR e ADX para melhorar a auto-adaptação.

  2. Aumentar a linha de parada para reduzir o risco de perda.

  3. Aumentar a condição de filtro para o sinal de erro.

Resumir

A estratégia de canal de preço auto-adaptável usa vários indicadores e mecanismos em conjunto, adotando diferentes estratégias em diferentes situações, com certa auto-adaptabilidade e estabilidade. Mas, devido à limitação da configuração de indicadores e seleção de parâmetros, a estratégia também enfrenta um certo risco de erro de julgamento.

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

//@version=5
strategy("Adaptive Price Channel Strategy", overlay=true)

length = input(20, title="Length")
exit_length = input(10, title="Exit After X Periods")
atr_multiplier = input(3.2, title="ATR Multiplier")

startDate = input(defval = timestamp("2019-01-15T08:15:15+00:00"), title = "Start Date")
endDate = input(defval = timestamp("2033-04-01T08:15:00+00:00"), title = "End Date")

hh = ta.highest(high, length)
ll = ta.lowest(low, length)
atr = ta.atr(length)

// calculate +DI and -DI
upMove = high - high[1]
downMove = low[1] - low
plusDM = na(upMove[1]) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
minusDM = na(downMove[1]) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
plusDI = ta.rma(plusDM, length) / atr * 100
minusDI = ta.rma(minusDM, length) / atr * 100

// calculate ADX
dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, length)

var int barSinceEntry = na

if (not na(close[length]) )
    if (adx < 25) // Sideways market
        if (close > hh - atr_multiplier * atr)
            strategy.entry("PChLE", strategy.long, comment="PChLE")
            barSinceEntry := 0
        else if (close < ll + atr_multiplier * atr)
            strategy.entry("PChSE", strategy.short, comment="PChSE")
            barSinceEntry := 0
    else if (adx >= 25 and plusDI > minusDI) // Bullish market
        if (close > hh - atr_multiplier * atr)
            strategy.entry("PChLE", strategy.long, comment="PChLE")
            barSinceEntry := 0
    else if (adx >= 25 and plusDI < minusDI) // Bearish market
        if (close < ll + atr_multiplier * atr)
            strategy.entry("PChSE", strategy.short, comment="PChSE")
            barSinceEntry := 0

if (na(barSinceEntry))
    barSinceEntry := barSinceEntry[1] + 1
else if (barSinceEntry >= exit_length)
    strategy.close("PChLE")
    strategy.close("PChSE")
    barSinceEntry := na

plot(hh, title="Highest High", color=color.green, linewidth=2)
plot(ll, title="Lowest Low", color=color.red, linewidth=2)