
Esta estrategia diseña una estrategia de retracción basada en el indicador de la vía de Keltner. Esta estrategia compara la relación entre el precio y la subida y bajada de la vía de Keltner para determinar el momento en que el precio puede revertirse y tomar la acción de hacer más o menos apropiada.
Esta estrategia utiliza el indicador de la vía de Keltner para determinar la tendencia de los precios. La vía de Keltner se compone de la línea media y la amplitud real media (ATR). La vía superior es igual a la línea media más N veces la ATR; la vía inferior es igual a la línea media menos N veces la ATR.
Además, la estrategia determina la oportunidad de retracción en función de si el precio vuelve a tocar o si se rompe el límite del canal. Por ejemplo, si el precio sube y se rompe el tren descendente, y luego cae nuevamente sin tocar el tren superior y toca el tren inferior, esta es una oportunidad para hacer más salidas. La estrategia abrirá la posición para hacer más en este momento.
Se trata de una estrategia de negociación que aprovecha las características de retracción del precio.
Los principales riesgos de esta estrategia son:
Respuesta:
La estrategia puede ser optimizada en los siguientes aspectos:
Esta estrategia integra métodos de análisis de tendencias y retracción de operaciones, y tiene una ventaja única en la captura de situaciones de reversión. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante el ajuste de parámetros y la extensión de funciones.
/*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")