Strategi perdagangan penembusan saluran Donchian menilai tren harga saat ini dengan menghitung saluran harga tertinggi dan terendah selama periode tertentu dan perdagangan panjang dan pendek berdasarkan penembusan saluran.
Strategi ini membangun saluran dengan menghitung harga tertinggi pcmax dan harga terendah pcmin selama periode sejarah terakhir.
Rel atas yh = pcmax - (pcmax - pcmin) * (100 - persenDev)/100
Jalur bawah yl = pcmin + (pcmax - pcmin) * persenDev/100
dimana %Dev default ke 13.
Sinyal panjang dihasilkan ketika harga menembus rel atas. Sinyal pendek dihasilkan ketika harga menembus rel bawah.
Logika khusus untuk menghasilkan sinyal perdagangan adalah:
boundup = tinggi > yh untuk menentukan apakah rel atas rusak
bounddn = low < yl untuk menentukan apakah rel bawah rusak
upsign = sma(bounddn, 2) == 1 menggunakan sma dari bounddn untuk menentukan persisten pecahnya rel bawah
dnsign = sma(boundup, 2) == 1 menggunakan sma dari boundup untuk menentukan persisten pecahnya rel atas
exitup = dnsign breakout dari rel atas menghasilkan sinyal keluar
exitdn = upsign breakout dari rel bawah menghasilkan sinyal keluar
jika tanda atas dari rel bawah menghasilkan sinyal panjang
jika tanda pecah dari rel atas menghasilkan sinyal pendek
Strategi ini juga menetapkan waktu awal dan akhir perdagangan untuk menghindari posisi overnight yang tidak perlu.
Menggunakan saluran Donchian untuk menentukan tren, hasil backtest yang baik
Memiliki baik sinyal panjang dan pendek, memungkinkan perdagangan dua arah
Menggunakan SMA untuk menyaring sinyal dan menghindari perdagangan buruk
Pengecualian stop loss untuk mengontrol risiko
Menetapkan waktu awal dan akhir perdagangan untuk menghindari risiko overnight
Sensitif terhadap parameter sejarah dan %Dev, perlu dioptimalkan untuk produk yang berbeda
Dapat menghasilkan sinyal palsu di pasar yang terikat rentang
Tidak mempertimbangkan manajemen pesanan, dapat mempengaruhi profitabilitas dalam perdagangan langsung
Tidak mempertimbangkan ukuran posisi, risiko posisi yang terlalu besar
Tidak mempertimbangkan pengelolaan uang, membutuhkan modal perdagangan yang wajar
Mengoptimalkan parameter riwayat dan percentDev untuk produk yang berbeda
Tambahkan filter untuk menghindari sinyal palsu di pasar yang berbeda
Tambahkan modul ukuran posisi untuk mengontrol ukuran posisi tunggal
Tambahkan modul manajemen uang untuk membatasi ukuran total posisi
Tambahkan manajemen order untuk eksekusi order yang optimal
Donchian channel breakout strategy menggunakan channel breakout untuk menentukan tren dan sinyal trading, dengan hasil backtest yang baik dan kemampuan untuk trading baik long maupun short. Namun, ada risiko mengenai optimasi parameter, filter, ukuran posisi, pengelolaan uang, manajemen order dll. Peningkatan yang tepat di bidang ini diperlukan sebelum perdagangan live stabil. Secara keseluruhan, ini adalah strategi trend tradisional, dan dengan optimasi dapat menjadi strategi trading kuantitatif yang dapat diandalkan.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //////////////////////////////////////////////////////////// // Copyright by AlexInc v1.0 02/07/2018 @aav_1980 // PriceChannel strategy // If you find this script helpful, you can also help me by sending donation to // BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS // LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM //////////////////////////////////////////////////////////// //@version=3 strategy("AlexInc PriceChannel Str", overlay=false) history = input(20) percentDev = input(13) capital = input(100) needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usestoploss = input(true, defval = true, title = "Stop Loss") stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") bodymin = min( open, close) bodymax = max(open, close) pcmax = highest(bodymax, history) pcmin = lowest(bodymin, history) yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin plot(pcmax) plot(pcmin) plot(yh) plot(yl) //1 bounddn = low < yl ? 1 : 0 boundup = high > yh ? 1 : 0 upsign = sma(bounddn, 2) == 1 dnsign = sma(boundup, 2) == 1 //2 //upsign = crossover(bodymin, yl) //dnsign = crossunder(bodymax , yh) exitup = dnsign exitdn = upsign lot = strategy.equity / close * capital / 100 xATR = atr(history) nLoss = usestoploss ? stoplossmult * xATR : na stop_level_long = 0.0 stop_level_long := nz(stop_level_long[1]) stop_level_short = 0.0 stop_level_short := nz(stop_level_short[1]) pos = strategy.position_size if pos >0 and pos[1] <= 0 //crossover(pos, 0.5) stop_level_long = strategy.position_avg_price - nLoss if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5) stop_level_short = strategy.position_avg_price + nLoss if pos == 0 stop_level_long = bodymin - nLoss stop_level_short = bodymax + nLoss //plot(bodymax + nLoss, color=red) //plot(bodymin - nLoss, color=red) plot(stop_level_long, color=red) plot(stop_level_short, color=red) if upsign strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if dnsign strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if true strategy.close_all() //if strategy.position_size != 0 // strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long) // strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)