Estrategia de retroceso del canal de Keltner

El autor:¿ Qué pasa?, fecha: 2023-12-27 14:49:39
Las etiquetas:

img

Resumen general

Esta estrategia diseña una estrategia de negociación de retroceso basada en el indicador del canal de Keltner.

Principio de la estrategia

Esta estrategia utiliza el indicador del canal de Keltner para juzgar las tendencias de precios. El canal de Keltner consiste en un promedio móvil y un rango verdadero promedio (ATR). El tren superior es igual al promedio móvil más N veces ATR; el tren inferior es igual al promedio móvil menos N veces ATR. Cuando el precio atraviesa el tren inferior del canal desde abajo hacia arriba, se considera que el poder alcista se ve mejorado y se pueden tomar posiciones largas; cuando el precio atraviesa el tren superior desde arriba hacia abajo, se considera que el poder bajista se ve mejorado y se pueden tomar posiciones cortas.

Además, la base de la estrategia para juzgar las oportunidades de retroceso es que el precio toca o rompe el límite del canal de nuevo. Por ejemplo, después de que el precio sube para romper el rieles inferiores, si cae de nuevo para tocar el rieles inferiores sin tocar el rieles superiores, es una oportunidad para tomar un retroceso largo. La estrategia abrirá posiciones largas en este momento.

Análisis de ventajas

Se trata de una estrategia comercial que utiliza las características de retroceso de los precios.

  1. El uso del canal Keltner para juzgar la dirección de las tendencias de los precios puede filtrar eficazmente el ruido.
  2. La adopción de una estrategia de retroceso puede entrar en el mercado antes de las reversiones y capturar tendencias más grandes.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. En los mercados unidireccionales a largo plazo, puede haber menos oportunidades de retroceso, incapaces de obtener beneficios.
  2. Un juicio inexacto de las señales de retroceso puede llevar a pérdidas.

Contramedidas:

  1. Optimizar los parámetros para ajustar el ancho del canal para adaptarlo a las condiciones del mercado.
  2. Aumentar la gestión de posiciones para reducir la pérdida única.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Filtración de avances basada en el volumen de operaciones para evitar avances falsos.
  2. Ajustar el tamaño de la posición según la volatilidad.
  3. Actualice los métodos de stop loss con paradas móviles para obtener más ganancias.

Resumen de las actividades

Esta estrategia integra el juicio de tendencia y los métodos de negociación de retroceso, y tiene ventajas únicas en la captura de tendencias de reversión.


/*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")

Más.