Strategi Contrarian Donchian Channel Touch Entry adalah strategi perdagangan kuantitatif berdasarkan indikator Donchian Channel.
Strategi ini memasuki posisi panjang/pendek ketika harga menyentuh band atas/bawah Saluran Donchian. Stop loss dan take profit level ditetapkan untuk setiap perdagangan. Setelah stop loss hit, akan ada jeda selama beberapa bar sebelum mengambil perdagangan baru ke arah yang sama.
Strategi ini menggunakan 20 periode Donchian Channel, yang terdiri dari Upper Band, Lower Band dan Middle Line.
Pergi panjang ketika harga menyentuh band bawah; pergi pendek ketika harga menyentuh band atas.
Sebuah jeda (misalnya 3 bar) diperlukan setelah stop loss sebelumnya dalam arah yang sama untuk menghindari mengejar tren.
Untuk setiap perdagangan, tetapkan persentase stop loss tetap (misalnya 22%) dan take profit dinamis yang dihitung berdasarkan rasio risiko-manfaat (misalnya 2)
Gunakan stop loss saat berdagang:
Untuk perdagangan panjang, jika harga melintasi di atas garis tengah, sesuaikan stop loss ke titik tengah harga masuk dan garis tengah.
Sebaliknya untuk posisi pendek yang melintasi di bawah garis tengah.
Menangkap gerakan tren menggunakan Donchian Channel breakouts.
Contrarian touch entry selaras dengan trading melawan ide tren.
Manajemen risiko yang efektif dengan jeda stop loss dan trailing stop.
Aturan yang jelas dan mudah diterapkan.
Whipsaws di pasar sisi untuk sistem tren-mengikuti.
Stop loss tetap bisa cenderung untuk berhenti terlalu dini.
Penyesuaian stop trailing yang terlalu agresif bisa mengakhiri perdagangan yang menguntungkan terlalu dini.
Optimasi parameter sangat penting.
Optimalkan periode pencarian saluran Donchian untuk parameter terbaik.
Masukkan aturan ukuran posisi, misalnya mengatur ulang hitungan jeda secara berkala.
Tambahkan filter menggunakan indikator lain untuk menghindari kebocoran palsu.
Eksperimen dengan stop loss dinamis.
Strategi Contrarian Donchian Channel Touch Entry mengintegrasikan identifikasi tren, manajemen risiko dan banyak lagi.
/*backtest start: 2023-01-17 00:00:00 end: 2024-01-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity) // Inputs length = input(20, minval=1, title="Donchian Channel Length") riskRewardRatio = input(2, title="Risk/Reward Ratio") stopLossPercent = input(0.22, title="Stop Loss (%)") / 100 pauseCandles = input(3, minval=1, title="Pause After SL (Candles)") // Donchian Channel Calculation upper = highest(high, length) lower = lowest(low, length) centerline = (upper + lower) / 2 // Calculating the Centerline // Plotting Donchian Channel and Centerline plot(upper, color=color.red, title="Upper Band") plot(lower, color=color.green, title="Lower Band") plot(centerline, color=color.blue, title="Centerline") // Tracking Stop Loss Hits and Pause var longSLHitBar = 0 var shortSLHitBar = 0 var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none // Update SL Hit Bars if (strategy.position_size[1] > 0 and strategy.position_size == 0) if (close[1] < strategy.position_avg_price[1]) longSLHitBar := bar_index lastTradeDirection := 1 if (strategy.position_size[1] < 0 and strategy.position_size == 0) if (close[1] > strategy.position_avg_price[1]) shortSLHitBar := bar_index lastTradeDirection := -1 // Entry Conditions - Trigger on touch longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1) shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1) // Trade Execution if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Initial Stop Loss and Take Profit Calculation stopLoss = strategy.position_avg_price * (1 - stopLossPercent) takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio) // Trailing Stop Loss Logic var float trailingStopLong = na var float trailingStopShort = na // Update Trailing Stop for Long Position if (strategy.position_size > 0) if (close > centerline) trailingStopLong := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss) // Update Trailing Stop for Short Position if (strategy.position_size < 0) if (close < centerline) trailingStopShort := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss) // Setting Stop Loss and Take Profit for each trade strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit) strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)