Strategi penembusan saluran Dongguan adalah strategi pelacakan tren yang didasarkan pada saluran Dongguan. Strategi ini menggunakan harga tertinggi dan terendah dari berbagai periode untuk menentukan titik masuk dan titik berhenti untuk multihead dan head.
Aturan masuk ke dalam strategi ini adalah: Jika harga melewati harga tertinggi dalam periode yang ditentukan (misalnya 20 hari), maka melakukan over; Jika harga melewati harga terendah dalam periode yang ditentukan (misalnya 10 hari), maka melakukan over.
Aturan EXIT adalah: posisi multihead berhenti di tengah atau di bawah rel; posisi kosong berhenti di tengah atau di atas rel. rel adalah rata-rata harga tertinggi dan terendah dalam periode yang ditentukan (misalnya 10 hari).
Misalkan varian perdagangan adalah BTCUSDT, parameternya adalah sebagai berikut:
Jadi, aturan masuk dan berhenti adalah:
Dengan menyesuaikan parameter siklus masuk dan berhenti secara dinamis, dapat dioptimalkan dalam siklus pasar yang berbeda, dan mendapatkan keuntungan yang lebih baik dalam situasi tren.
Strategi penembusan saluran Tongxian digunakan untuk menentukan arah tren dengan melakukan penembusan, dengan titik stop loss yang ditetapkan sebagai titik tengah saluran atau naik ke bawah, yang dapat mengontrol risiko secara efektif. Dengan pengaturan parameter yang dioptimalkan, strategi dapat meningkatkan tingkat penangkapan dalam situasi yang sedang tren. Namun, perhatikan penilaian dan penggunaan hati-hati terhadap efektivitas penembusan, untuk menghindari ditargetkan atau terlalu sering diperdagangkan. Secara keseluruhan, strategi ini cocok untuk mengejar tren garis tengah, tetapi tidak cocok untuk digunakan dalam situasi yang bergoyang.
/*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()