Strategi ini dirancang berdasarkan indikator Keltner Channel untuk menghasilkan sinyal perdagangan ketika harga menembus band atas dan bawah saluran.
Strategi ini menggunakan SMA dan ATR untuk membangun Saluran Keltner.
Band atas = SMA + ATR * Multiplier Band bawah = SMA - ATR * Multiplier
Ketika harga menembus band atas, sinyal beli dihasilkan.
Karena hanya berjalan lama, jika sinyal jual muncul, itu akan membatalkan pesanan sebelumnya dan meratakan posisi.
Logikanya adalah:
Keuntungan dari strategi ini:
Ada juga beberapa risiko:
Solusi:
Strategi dapat dioptimalkan dalam aspek berikut:
Strategi ini secara efektif menangkap tren pasar dengan aturan Keltner Channel yang sederhana. Logika jelas dan mudah dipahami. Meskipun kurangnya exit dan modul pendek, ia memiliki potensi besar untuk perbaikan seperti penyesuaian parameter, menambahkan berhenti, pergi pendek dll. Secara keseluruhan strategi kuantitatif yang berharga layak penelitian mendalam dan aplikasi.
/*backtest start: 2023-11-24 00:00:00 end: 2023-12-24 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Keltner Channel Strategy", overlay=true) source = close useTrueRange = input(true) length = input(20, minval=1) mult = input(1.0) ma = sma(source, length) range = useTrueRange ? tr : high - low rangema = sma(range, length) upper = ma + rangema * mult lower = ma - rangema * mult crossUpper = crossover(source, upper) crossLower = crossunder(source, lower) bprice = 0.0 bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1]) sprice = 0.0 sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) crossBcond = false crossBcond := crossUpper ? true : na(crossBcond[1]) ? false : crossBcond[1] crossScond = false crossScond := crossLower ? true : na(crossScond[1]) ? false : crossScond[1] cancelBcond = crossBcond and (source < ma or high >= bprice ) cancelScond = crossScond and (source > ma or low <= sprice ) if (cancelBcond) strategy.cancel("KltChLE") if (crossUpper) strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE") if (cancelScond) strategy.cancel("KltChSE") if (crossLower) strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)