Strategi ini merancang strategi perdagangan pulback berdasarkan penunjuk Saluran Keltner. Ia menilai masa pembalikan harga yang berpotensi dengan membandingkan harga dengan rel atas dan bawah Saluran Keltner, dan mengambil kedudukan panjang dan pendek yang sesuai.
Strategi ini menggunakan penunjuk Saluran Keltner untuk menilai trend harga. Saluran Keltner terdiri daripada purata bergerak dan julat sebenar purata (ATR). Rel atas sama dengan purata bergerak ditambah N kali ATR; rel bawah sama dengan purata bergerak tolak N kali ATR. Apabila harga memecahkan rel bawah saluran dari bawah ke atas, ia dianggap bahawa kuasa menaik dipertingkatkan dan kedudukan panjang boleh diambil; apabila harga memecahkan rel atas dari atas ke bawah, ia dianggap bahawa kuasa penurunan dipertingkatkan dan kedudukan pendek boleh diambil.
Selain itu, asas untuk strategi untuk menilai peluang menarik balik adalah bahawa harga menyentuh atau memecahkan sempadan saluran lagi. Sebagai contoh, selepas harga naik untuk memecahkan rel bawah, jika jatuh lagi untuk menyentuh rel bawah tanpa menyentuh rel atas, ia adalah peluang untuk mengambil tarik balik yang panjang. Strategi akan membuka kedudukan panjang pada masa ini.
Ini adalah strategi dagangan yang menggunakan ciri-ciri pulback harga. Kelebihannya adalah:
Risiko utama strategi ini ialah:
Tindakan balas:
Strategi ini boleh dioptimumkan dalam aspek berikut:
Strategi ini mengintegrasikan penilaian trend dan kaedah perdagangan pullback, dan mempunyai kelebihan unik dalam menangkap trend pembalikan. Dengan menyesuaikan parameter dan mengembangkan fungsi, kestabilan dan keuntungan strategi dapat ditingkatkan lagi.
/*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")