Gegensätzliche Donchian-Kanal-Touch-Entry-Strategie mit Post-Stop-Loss-Pause und Trailing Stop-Loss

Schriftsteller:ChaoZhang, Datum: 2024-01-24 15:07:18
Tags:

img

Übersicht

Die Contrarian Donchian Channel Touch Entry Strategy ist eine quantitative Handelsstrategie, die auf dem Donchian Channel-Indikator basiert.

Die Strategie tritt in Long/Short-Positionen ein, wenn der Preis das obere/untere Band des Donchian Channel berührt. Stop-Loss- und Take-Profit-Level werden für jeden Trade festgelegt. Nach einem Stop-Loss-Hit gibt es eine Pause für eine Reihe von Bars, bevor ein neuer Trade in die gleiche Richtung aufgenommen wird. Während eines Trades wird Trailing Stop-Loss verwendet, um Gewinne zu erzielen.

Strategie Logik

Die Strategie verwendet den Donchian-Kanal mit 20 Perioden, bestehend aus Oberband, Unterband und Mittellinie.

Eintrittslogik

Gehen Sie lang, wenn der Preis das untere Band berührt; gehen Sie kurz, wenn der Preis das obere Band berührt.

Eine Pause (z. B. 3 Balken) ist nach einem vorherigen Stop-Loss in derselben Richtung erforderlich, um zu vermeiden, dass Trends verfolgt werden.

Verlieren lassen und Profit machen

Für jeden Handel einen festen Stop-Loss-Prozentsatz (z. B. 22%) und einen dynamischen Take-Profit festlegen, der auf der Grundlage der Risiko-Rendite-Ratio berechnet wird (z. B. 2)

Nachfolgender Stopverlust

Verwenden Sie einen Trailing-Stop-Loss während des Handels:

Bei Long-Trades, wenn der Preis über die Mittellinie geht, wird der Stop-Loss auf den mittleren Punkt des Einstiegspreises und der Mittellinie angepasst.

Umgekehrt bei Shortpositionen, die unterhalb der Mittellinie kreuzen.

Vorteile

  1. Fangen Sie Trendbewegungen mit Donchian Channel Breakouts.

  2. Der Kontrarian Touch-Eintrag passt zum Trading gegen die Trendidee.

  3. Effektives Risikomanagement mit Stop-Loss-Pause und Trailing-Stop.

  4. Klare und leicht umsetzbare Regeln.

Risiken

  1. Whipsaws auf seitlichen Märkten für ein Trend-Folgende System.

  2. Ein fester Stop-Loss könnte dazu neigen, vorzeitig gestoppt zu werden.

  3. Eine übermäßig aggressive Einstellung des Trailing Stop könnte profitable Trades zu früh ausschalten.

  4. Parameteroptimierung ist entscheidend.

Möglichkeiten zur Verbesserung

  1. Optimieren Sie die Donchian Channel Lookback Periode für die besten Parameter.

  2. Einbeziehung von Positionsgrößenregeln, z. B. regelmäßige Neustellung der Pausenzählung.

  3. Fügen Sie Filter mit anderen Indikatoren hinzu, um falsche Ausbrüche zu vermeiden.

  4. Experiment mit dynamischem Stop-Loss.

Zusammenfassung

Die Contrarian Donchian Channel Touch Entry Strategy integriert Trendidentifikation, Risikomanagement und mehr.


/*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)


Mehr