Estratégia de retração de rompimento do canal Keltner


Data de criação: 2023-12-27 14:49:39 última modificação: 2023-12-27 14:49:39
cópia: 0 Cliques: 761
1
focar em
1621
Seguidores

Estratégia de retração de rompimento do canal Keltner

Visão geral

Esta estratégia baseia-se no indicador de Keltner Channel para desenhar uma estratégia de retorno de negociação. A estratégia usa a comparação do preço com a relação entre o alto e o baixo do canal de Keltner para determinar o momento em que o preço pode reverter e executar a operação de tomada de posse apropriada.

Princípio da estratégia

Esta estratégia usa o indicador de canal de Keltner para determinar a tendência de preços. O canal de Keltner é composto por uma linha média e um real médio de amplitude (ATR). A trajetória superior do canal é igual a N vezes a linha média mais o ATR; a trajetória inferior é igual a N vezes a linha média menos o ATR.

Além disso, a estratégia baseia-se em uma oportunidade de retorno quando o preço toca novamente ou quebra o limite do canal. Por exemplo, depois que o preço sobe e quebra o trilho, ele cai novamente sem tocar o trilho, o que é uma oportunidade de fazer mais retiros. A estratégia abre a posição neste momento.

Análise de vantagens

É uma estratégia de negociação que utiliza a característica de retorno de preço.

  1. O uso do canal de Keltner para determinar a direção da tendência de preços pode filtrar eficazmente o ruído.
  2. Adotar estratégias de retorno que permitam entrar no campo antes da reviravolta e capturar a situação.

Análise de Riscos

Os principais riscos desta estratégia são:

  1. O mercado pode ser um mercado unilateral, com poucas oportunidades de retorno e pouco lucro.
  2. A falta de precisão no julgamento do sinal de retorno pode causar prejuízos.

Resposta:

  1. Optimizar os parâmetros, ajustar a largura do canal e adaptá-lo ao mercado.
  2. Aumentar a gestão de posições e reduzir as perdas individuais.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Filtragem de rupturas baseada em volume de transações para evitar falsas rupturas.
  2. Ajuste o tamanho da posição de acordo com a volatilidade.
  3. Atualizar o modo de parar e mover o stop para bloquear mais lucros.

Resumir

A estratégia integra métodos de análise de tendências e retração de negociações, com vantagens únicas em capturar situações de reversão. A estabilidade e a lucratividade da estratégia podem ser ainda mais aumentadas por meio de ajustes de parâmetros e extensão de funções.

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

//@version=2
strategy("Keltner bounce from border. No repaint. (by Zelibobla)", shorttitle="Keltner border bounce", overlay=true)

price = close

// build Keltner
keltnerLength = input(defval=200, minval=1, title="Keltner EMA Period Length")
keltnerATRLength = input(defval=200, minval=1, title="Keltner ATR Period Length (the same as EMA length in classic Keltner Channels)")
keltnerDeviation = input(defval=8, minval=1, maxval=15, title="Keltner band width (in ATRs)")
closeOnEMATouch = input(type=bool, defval=false, title="Close trade on EMA touch? (less drawdown, but less profit and higher commissions impact)")
enterOnBorderTouchFromInside = input(type=bool, defval=false, title="Enter on border touch from inside? (by default from outside, which is less risky but less profitable)")
SL = input(defval=50, minval=0, maxval=10000, title="Stop loss in ticks (leave zero to skip)")
EMA = sma(price, keltnerLength)
ATR = atr(keltnerATRLength)
top = EMA + ATR * keltnerDeviation
bottom = EMA - ATR * keltnerDeviation

buyEntry = crossover(price, bottom)
sellEntry = crossunder(price, top)
plot(EMA, color=aqua,title="EMA")
p1 = plot(top, color=silver,title="Keltner top")
p2 = plot(bottom, color=silver,title="Keltner bottom")
fill(p1, p2)

tradeSize = input(defval=1, minval=1, title="Trade size")

if ( enterOnBorderTouchFromInside and crossunder(price, bottom) )
    strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")
else
    if( crossover(price, bottom) )
        strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")

if( crossover(price,EMA) and closeOnEMATouch )
    strategy.close("BUY")

if( 0 != SL )
    strategy.exit("EXIT BUY", "BUY", qty=tradeSize, loss=SL)
    strategy.exit("EXIT SELL", "SELL", qty=tradeSize, loss=SL)
   
if( enterOnBorderTouchFromInside and crossover(price, bottom) )
    strategy.entry("SELL", strategy.long, qty=tradeSize, comment="SELL")
else
    if ( crossunder(price, top) )
        strategy.entry("SELL", strategy.short, qty=tradeSize, comment="SELL")
    
    
if( crossunder(price, EMA) and closeOnEMATouch )
    strategy.close("SELL")