Ini adalah strategi trend berikut berdasarkan penunjuk Saluran Donchian, digabungkan dengan stop loss dinamik berdasarkan penunjuk ATR untuk mengunci keuntungan.
Strategi ini menggunakan Saluran Donchian 20 tempoh, di mana garis tengah saluran adalah purata tertinggi tertinggi dan terendah terendah. Ia pergi lama apabila harga melintasi di atas garis tengah saluran dan pergi pendek apabila harga melintasi di bawah garis tengah. Peraturan keluar adalah apabila harga menyentuh garis stop loss dinamik, yang dikira sebagai terendah terendah dari 3 bar baru-baru ini dikurangkan satu pertiga daripada nilai ATR untuk kedudukan panjang, dan tertinggi dari 3 bar baru-baru ini ditambah satu pertiga daripada nilai ATR untuk kedudukan pendek.
Kelebihan utama strategi ini ialah:
Risiko utama strategi ini termasuk:
Beberapa arah pengoptimuman untuk strategi ini:
Ringkasnya, ini adalah strategi trend berikut yang mudah dan praktikal. Ia mengenal pasti arah trend melalui Saluran Donchian dan mengunci keuntungan dengan stop loss trailing dinamik, yang dapat mengikuti trend dengan berkesan. Strategi ini agak praktikal untuk digunakan, tetapi boleh dioptimumkan dengan pelbagai cara untuk prestasi yang lebih baik dalam persekitaran pasaran 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)