이 전략은 켈트너 채널 지표에 기반한 리브랙 거래 전략을 설계합니다. 켈트너 채널의 상부와 하부 레일과 가격을 비교하여 잠재적 인 가격 반전의 시기를 판단하고 적절한 긴 및 짧은 포지션을 취합니다.
이 전략은 가격 트렌드를 판단하기 위해 켈트너 채널 지표를 사용합니다. 켈트너 채널은 이동 평균과 평균 진정한 범위 (ATR) 로 구성됩니다. 상단 레일은 이동 평균 더하기 N × ATR에 해당하며, 하단 레일은 이동 평균 마이너스 N × ATR에 해당합니다. 가격이 아래에서 위로 채널의 하단 레일을 통과하면 상승 힘이 강화되고 긴 포지션을 취할 수 있다고 간주됩니다. 가격이 위에서 아래로 상단 레일을 통과하면 하단 파워가 강화되고 짧은 포지션을 취할 수 있다고 간주됩니다.
또한, 인하 기회를 판단하는 전략의 기초는 가격이 채널 경계를 다시 만지거나 뚫는 것입니다. 예를 들어, 가격이 하부 레일을 뚫기 위해 상승 한 후, 상부 레일을 만지지 않고 하부 레일을 만지기 위해 다시 떨어지면 긴 인하를 할 수있는 기회입니다. 전략은이 시점에서 긴 포지션을 열 것입니다.
이것은 가격의 인하 특성을 활용하는 거래 전략입니다. 이의 장점은 다음과 같습니다.
이 전략의 주요 위험은 다음과 같습니다.
대책:
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
이 전략은 트렌드 판단과 풀백 거래 방법을 통합하고 반전 트렌드를 포착하는 데 독특한 이점을 가지고 있습니다. 매개 변수를 조정하고 기능을 확장함으로써 전략의 안정성과 수익성이 더욱 향상 될 수 있습니다.
/*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")