Strategi perdagangan penembusan saluran Donchian menilai trend harga semasa dengan mengira saluran harga tertinggi dan terendah dalam tempoh tertentu dan berdagang panjang dan pendek berdasarkan penembusan saluran.
Strategi ini membina saluran dengan mengira harga tertinggi pcmax dan harga terendah pcmin dalam tempoh sejarah terakhir.
Rel atas yh = pcmax - (pcmax - pcmin) * (100 - peratusDev)/100
Rel bawah yl = pcmin + (pcmax - pcmin) * peratusDev/100
di mana peratusan Dev lalai kepada 13.
Isyarat panjang dihasilkan apabila harga menembusi rel atas. Isyarat pendek dihasilkan apabila harga menembusi rel bawah.
Logik khusus untuk menjana isyarat perdagangan adalah:
boundup = tinggi > yh untuk menentukan sama ada rel atas rosak
bounddn = rendah < yl untuk menentukan sama ada rel bawah rosak
upsign = sma(bounddn, 2) == 1 menggunakan sma daripada bounddn untuk menentukan pecah berterusan rel bawah
dnsign = sma(boundup, 2) == 1 menggunakan sma daripada boundup untuk menentukan pecah berterusan rel atas
exitup = dnsign breakout rel atas menghasilkan isyarat keluar
exitdn = upsign breakout rel bawah menghasilkan isyarat keluar
jika tanda upbreakout rel bawah menghasilkan isyarat panjang
jika gangguan tanda rel atas menghasilkan isyarat pendek
Strategi ini juga menetapkan waktu permulaan dan akhir dagangan untuk mengelakkan kedudukan semalam yang tidak perlu.
Menggunakan saluran Donchian untuk menentukan trend, hasil backtest yang baik
Mempunyai kedua-dua isyarat panjang dan pendek, membolehkan perdagangan dua hala
Menggunakan SMA untuk menapis isyarat dan mengelakkan perdagangan buruk
Pendapatan yang diperolehi daripada pelaburan
Tetapkan waktu permulaan dan akhir dagangan untuk mengelakkan risiko semalam
Sensitif kepada parameter sejarah dan peratusan Dev, memerlukan pengoptimuman untuk produk yang berbeza
Boleh menghasilkan isyarat palsu di pasaran terhad julat
Tidak mempertimbangkan pengurusan pesanan, mungkin memberi kesan kepada keuntungan dalam perdagangan langsung
Tidak mengambil kira saiz kedudukan, risiko kedudukan yang terlalu besar
Tidak mempertimbangkan pengurusan wang, memerlukan modal dagangan yang munasabah
Mengoptimumkan parameter sejarah dan peratusanDev untuk produk yang berbeza
Tambah penapis untuk mengelakkan isyarat palsu di pasaran pelbagai
Tambah modul saiz kedudukan untuk mengawal saiz kedudukan tunggal
Tambah modul pengurusan wang untuk mengehadkan saiz kedudukan keseluruhan
Tambah pengurusan pesanan untuk pelaksanaan pesanan yang optimum
Strategi penembusan saluran Donchian menggunakan penembusan saluran untuk menentukan trend dan isyarat perdagangan, dengan hasil backtest yang baik dan keupayaan untuk berdagang baik panjang dan pendek. Walau bagaimanapun, terdapat risiko mengenai pengoptimuman parameter, penapis, saiz kedudukan, pengurusan wang, pengurusan pesanan dll. Peningkatan yang betul dalam bidang ini diperlukan sebelum perdagangan langsung yang stabil. Secara keseluruhan, ini adalah strategi trend tradisional, dan dengan pengoptimuman boleh menjadi strategi perdagangan kuantitatif yang boleh dipercayai.
/*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)