
Strategi ini didasarkan pada indikator desain saluran momentum sinyal perdagangan, berdasarkan harga menembus saluran naik dan turun untuk menghasilkan sinyal beli dan jual. Strategi ini hanya melakukan perdagangan multihead, jika ada sinyal jual, posisi kosong ke posisi kosong.
Strategi ini menggunakan rata-rata SMA dan amplitudo fluktuasi nyata ATR untuk membangun saluran momentum. Jalur atas dan bawah saluran adalah:
SMA + ATR * faktor Rel bawah = SMA - ATR * faktor
Ketika harga naik ke atas, sinyal beli dihasilkan; ketika harga turun ke bawah, sinyal jual dihasilkan.
Karena hanya melakukan overhead, maka jika muncul sinyal sell, maka batalkan order open sebelumnya, dan posisi kosong ke posisi kosong.
Secara khusus, logikanya adalah sebagai berikut:
Strategi ini memiliki keuntungan sebagai berikut:
Strategi ini juga memiliki beberapa risiko:
Tanggapan:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Strategi ini didasarkan pada indikator channel dinamis, menangkap tren pasar dengan mudah dan efektif. Logika strategi jelas dan mudah dimengerti, menghasilkan sinyal perdagangan melalui harga yang menerobos saluran naik dan turun. Meskipun hanya melakukan multihead dan tanpa mekanisme keluar tidak cukup, tetapi dapat ditingkatkan dengan mengoptimalkan parameter, menambahkan modul headless, menambahkan stop loss, dan lain-lain. Secara keseluruhan, strategi ini memiliki ruang untuk perbaikan yang sangat besar, layak untuk penelitian yang mendalam dan menerapkan strategi kuantitatif.
/*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)