この戦略は,ケルトナー・チャネル指標に基づく引き下げ取引戦略を設計する.ケルトナー・チャネルの上下線と価格を比較して,潜在的な価格逆転のタイミングを判断し,適切なロングとショートポジションを取ります.
この戦略は,価格動向を判断するためにケルトナーチャネル指標を使用する.ケルトナーチャネルは,移動平均値と平均値の真の範囲 (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")