Contrarian Donchian Channel Touch Entry Strategy dengan Post-Stop Loss Pause dan Trailing Stop Loss

Penulis:ChaoZhang, Tanggal: 2024-01-24 15:07:18
Tag:

img

Gambaran umum

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.

Logika Strategi

Strategi ini menggunakan 20 periode Donchian Channel, yang terdiri dari Upper Band, Lower Band dan Middle Line.

Logika entri

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.

Hentikan Kerugian dan Dapatkan Keuntungan

Untuk setiap perdagangan, tetapkan persentase stop loss tetap (misalnya 22%) dan take profit dinamis yang dihitung berdasarkan rasio risiko-manfaat (misalnya 2)

Penghentian Rugi

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.

Keuntungan

  1. Menangkap gerakan tren menggunakan Donchian Channel breakouts.

  2. Contrarian touch entry selaras dengan trading melawan ide tren.

  3. Manajemen risiko yang efektif dengan jeda stop loss dan trailing stop.

  4. Aturan yang jelas dan mudah diterapkan.

Risiko

  1. Whipsaws di pasar sisi untuk sistem tren-mengikuti.

  2. Stop loss tetap bisa cenderung untuk berhenti terlalu dini.

  3. Penyesuaian stop trailing yang terlalu agresif bisa mengakhiri perdagangan yang menguntungkan terlalu dini.

  4. Optimasi parameter sangat penting.

Peluang Peningkatan

  1. Optimalkan periode pencarian saluran Donchian untuk parameter terbaik.

  2. Masukkan aturan ukuran posisi, misalnya mengatur ulang hitungan jeda secara berkala.

  3. Tambahkan filter menggunakan indikator lain untuk menghindari kebocoran palsu.

  4. Eksperimen dengan stop loss dinamis.

Ringkasan

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)


Lebih banyak