
Strategi ini adalah berdasarkan pada indikator reka bentuk saluran momentum untuk menghasilkan isyarat beli dan jual berdasarkan harga yang menembusi saluran naik dan turun. Strategi ini hanya melakukan perdagangan berganda, dan jika isyarat jual muncul, ia akan berada di kedudukan kosong ke kedudukan kosong.
Strategi ini menggunakan rata-rata SMA dan amplitudo pergerakan sebenar ATR untuk membina saluran momentum. Laluan atas dan bawah saluran adalah:
Laluan atas = SMA + ATR * faktor Laluan bawah = SMA - ATR * faktor
Apabila harga naik ke atas, ia menghasilkan isyarat beli; apabila harga turun ke bawah, ia menghasilkan isyarat jual.
Oleh kerana hanya melakukan lebih banyak kepala, jika ada isyarat menjual, membatalkan pesanan terbuka sebelumnya, dan meletakkan kedudukan kosong ke keadaan kosong.
Secara ringkasnya, logik strategi adalah seperti berikut:
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai risiko:
Kaedah pencegahan:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Strategi ini berdasarkan pada indikator saluran momentum, menangkap trend pasaran dengan mudah dan berkesan. Logik strategi jelas dan mudah difahami, menghasilkan isyarat perdagangan melalui harga yang menerobos saluran naik dan turun. Walaupun hanya melakukan pelbagai kepala dan tidak ada mekanisme keluar tidak mencukupi, tetapi dapat diperbaiki dengan pengoptimuman parameter, menambah modul kepala kosong, menambah henti rugi dan sebagainya. Secara keseluruhan, strategi ini mempunyai ruang untuk penambahbaikan yang sangat besar, dan merupakan strategi kuantitatif yang bernilai kajian 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)