Strategi Penembusan Saluran Donchian

Penulis:ChaoZhang, Tarikh: 2023-09-14 14:44:44
Tag:

Logika Strategi

Strategi penembusan saluran Donchian adalah strategi trend yang berdasarkan saluran Donchian. Ia menggunakan tertinggi tertinggi dan terendah terendah dalam tempoh tertentu untuk menentukan titik kemasukan dan hentian kerugian untuk kedudukan panjang dan pendek.

Peraturan kemasukan adalah: pergi lama apabila harga memecahkan di atas tertinggi tertinggi dalam tempoh melihat kembali (contohnya 20 hari), dan pergi pendek apabila harga memecahkan di bawah terendah rendah dalam tempoh melihat kembali lain (contohnya 10 hari).

Peraturan EXIT adalah: Posisi panjang dihentikan di jalur tengah atau bawah saluran; Posisi pendek dihentikan di jalur tengah atau atas.

Sebagai contoh, perdagangan BTCUSDT dengan parameter berikut:

  • Tempoh pemeriksaan entri panjang: 20 hari
  • Jangkaan jangka panjang untuk melihat semula stop loss: 10 hari
  • Stop loss pada jalur tengah: Ya
  • Tempoh pemeriksaan entri pendek: 10 hari
  • Tempoh pengamatan stop loss pendek: 20 hari
  • Stop loss pada jalur tengah: Ya

Peraturan masuk dan berhenti adalah:

  • Pergi panjang apabila harga pecah di atas paras tertinggi 20 hari
  • Stop loss panjang pada titik pertengahan maksimum dan minimum 10 hari
  • Pergi pendek apabila harga pecah di bawah paras terendah 10 hari
  • Stop loss pendek pada titik pertengahan maksimum dan minimum 20 hari

Dengan menyesuaikan tempoh melihat semula secara dinamik, strategi boleh dioptimumkan merentasi kitaran pasaran untuk menangkap trend dengan ganjaran / risiko yang lebih baik.

Kelebihan

  • Penembusan boleh mengenal pasti arah trend awal
  • Hentikan kerugian berhampiran harga membantu menguruskan risiko
  • Parameter fleksibel membolehkan pengoptimuman untuk kitaran yang berbeza

Risiko

  • Penembusan terdedah kepada whipsaws, perlu mengesahkan kesahihan
  • Penutupan Stop Loss yang terdedah kepada Shakeout di pasaran bergolak
  • Penyesuaian parameter yang tidak baik boleh membawa kepada perdagangan berlebihan atau berhenti yang tidak mencukupi

Ringkasan

Penembusan saluran Donchian menggunakan penembusan untuk mengenal pasti trend, dengan titik tengah saluran / pita sebagai berhenti untuk mengawal risiko. Mengoptimumkan tempoh melihat kembali boleh meningkatkan penangkapan trend dalam pergerakan yang kuat. Walau bagaimanapun, berhati-hati diperlukan mengenai kesahihan dan goncangan. Secara keseluruhan strategi ini sesuai untuk perdagangan trend jangka menengah hingga panjang, tetapi mungkin berjuang dalam pasaran yang bergolak.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Donchian Channel Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.036)

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Lebih lanjut