Contrarian Donchian Channel Touch Entry Strategy dengan jeda selepas Stop Loss dan Trailing Stop Loss

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

img

Ringkasan

Strategi Contrarian Donchian Channel Touch Entry adalah strategi perdagangan kuantitatif berdasarkan penunjuk Saluran Donchian.

Strategi ini memasuki kedudukan panjang / pendek apabila harga menyentuh jalur atas / bawah Saluran Donchian. Stop loss dan mengambil tahap keuntungan ditetapkan untuk setiap perdagangan. Selepas stop loss hit, akan ada jeda selama beberapa bar sebelum mengambil perdagangan baru ke arah yang sama. Semasa perdagangan, stop loss digunakan untuk mengunci keuntungan.

Logika Strategi

Strategi ini menggunakan Saluran Donchian 20 tempoh, yang terdiri daripada Band Atas, Band Bawah dan Garis Pertengahan.

Logika kemasukan

Pergi panjang apabila harga menyentuh band bawah; pergi pendek apabila harga menyentuh band atas.

Satu jeda (contohnya 3 bar) diperlukan selepas stop loss sebelumnya dalam arah yang sama untuk mengelakkan mengejar trend.

Berhenti Kerugian dan Ambil Keuntungan

Untuk setiap perdagangan, tetapkan peratusan stop loss tetap (contohnya 22%) dan keuntungan mengambil dinamik yang dikira berdasarkan nisbah risiko-balasan (contohnya 2)

Penghentian Kerugian

Menggunakan stop loss semasa perdagangan:

Untuk perdagangan panjang, jika harga melintasi di atas garisan tengah, sesuaikan stop loss ke titik tengah harga kemasukan dan garisan tengah.

Sebaliknya untuk kedudukan pendek yang melintasi di bawah garis tengah.

Kelebihan

  1. Tangkap pergerakan trend menggunakan penembusan Saluran Donchian.

  2. Contrarian touch entry sejajar dengan perdagangan terhadap idea trend.

  3. Pengurusan risiko yang berkesan dengan hentian kehilangan berhenti dan hentian penggantungan.

  4. Peraturan yang jelas dan mudah dilaksanakan.

Risiko

  1. Whipsaws di pasaran sampingan untuk sistem trend-mengikuti.

  2. Stop loss tetap mungkin cenderung untuk dihentikan sebelum masa.

  3. Penyesuaian berhenti yang terlalu agresif boleh mengetuk perdagangan yang menguntungkan terlalu awal.

  4. Pengoptimuman parameter adalah penting.

Peluang Peningkatan

  1. Mengoptimumkan tempoh carian semula Saluran Donchian untuk parameter terbaik.

  2. Menggabungkan peraturan saiz kedudukan e.g. menetapkan semula bilangan jeda secara berkala.

  3. Tambah penapis menggunakan penunjuk lain untuk mengelakkan pecah palsu.

  4. Eksperimen dengan kehilangan berhenti dinamik.

Ringkasan

Strategi Contrarian Donchian Channel Touch Entry mengintegrasikan pengenalan trend, pengurusan 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 lanjut