Esta estratégia projeta uma estratégia de negociação de pullback baseada no indicador do canal de Keltner.
Esta estratégia usa o indicador do canal de Keltner para julgar as tendências de preços. O canal de Keltner consiste em uma média móvel e uma faixa média verdadeira (ATR). O trilho superior é igual à média móvel mais N vezes ATR; o trilho inferior é igual à média móvel menos N vezes ATR. Quando o preço atravessa o trilho inferior do canal de baixo para cima, considera-se que o poder de alta é aumentado e as posições longas podem ser tomadas; quando o preço atravessa o trilho superior de cima para baixo, considera-se que o poder de baixa é aumentado e as posições curtas podem ser tomadas.
Além disso, a base da estratégia para julgar as oportunidades de retração é que o preço toca ou quebra novamente o limite do canal. Por exemplo, depois que o preço sobe para quebrar o trilho inferior, se cair novamente para tocar o trilho inferior sem tocar o trilho superior, é uma oportunidade para tomar um longo retração. A estratégia abrirá posições longas neste momento.
Trata-se de uma estratégia de negociação que utiliza as características de retração dos preços.
Os principais riscos desta estratégia são:
Contramedidas:
A estratégia pode ser otimizada nos seguintes aspectos:
Esta estratégia integra o julgamento da tendência e os métodos de negociação pullback, e tem vantagens únicas na captura de tendências de reversão.
/*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")