Ini adalah strategi mengikuti tren berdasarkan indikator Saluran Donchian, dikombinasikan dengan stop loss dinamis berdasarkan indikator ATR untuk mengunci keuntungan.
Strategi ini menggunakan saluran Donchian 20 periode, di mana garis tengah saluran adalah rata-rata tertinggi tertinggi dan terendah terendah. Ini pergi panjang ketika harga melintasi di atas garis tengah saluran dan pergi pendek ketika harga melintasi di bawah garis tengah. Aturan keluar adalah ketika harga menyentuh garis stop loss dinamis, yang dihitung sebagai terendah terendah dari 3 bar terakhir dikurangi sepertiga dari nilai ATR untuk posisi panjang, dan tertinggi dari 3 bar terbaru ditambah sepertiga dari nilai ATR untuk posisi pendek.
Keuntungan utama dari strategi ini adalah:
Risiko utama dari strategi ini meliputi:
Beberapa arah optimasi untuk strategi ini:
Singkatnya, ini adalah strategi trend following yang sederhana dan praktis. Ini mengidentifikasi arah tren melalui Saluran Donchian dan mengunci keuntungan dengan stop loss trailing dinamis, yang dapat secara efektif mengikuti tren. Strategi ini cukup praktis digunakan, tetapi dapat dioptimalkan lebih lanjut dengan berbagai cara untuk kinerja yang lebih baik di lingkungan pasar yang lebih kompleks.
/*backtest start: 2023-11-29 00:00:00 end: 2023-12-06 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "dc", overlay = true) atrLength = input(title="ATR Length:", defval=20, minval=1) testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12) testEndDay = input(31, "Backtest Start Day") testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => true //time >= testPeriodStart ? true : false dcPeriod = input(20, "Period") dcUpper = highest(close, dcPeriod)[1] dcLower = lowest(close, dcPeriod)[1] dcAverage = (dcUpper + dcLower) / 2 atrValue=atr(atrLength) useTakeProfit = na useStopLoss = na useTrailStop = na useTrailOffset = na //@version=1 Buy_stop = lowest(low[1],3) - atr(20)[1] / 3 plot(Buy_stop, color=red, title="buy_stoploss") Sell_stop = highest(high[1],3) + atr(20)[1] / 3 plot(Sell_stop, color=green, title="sell_stoploss") plot(dcLower, style=line, linewidth=3, color=red, offset=1) plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1) plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average") strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage)) strategy.close("simpleBuy",when= ( close< Buy_stop)) strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) ) strategy.close("simpleSell",when=( close > Sell_stop)) //strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) //strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)