
Die Donchian-Kanal-Trend-Tracking-Strategie ist eine Trend-Tracking-Strategie, die auf den Donchian-Kanal-Indikatoren basiert. Sie verwendet Donchian-Kanäle unterschiedlicher Länge, um Preistrends zu identifizieren und Handelssignale zu erzeugen, wenn der Preis den Kanal durchbricht.
Die Hauptidee der Strategie ist die Verwendung von Donchian-Kanälen mit langen Perioden, um die Richtung des großen Trends zu bestimmen, und die Verwendung von Donchian-Kanälen mit kurzen Perioden als Einstiegs- und Stoppsignale. Sie zielt darauf ab, die Preisentwicklung der mittleren und langen Linie zu erfassen, um nicht von kurzfristigen Schwankungen in den Märkten verblendet zu werden.
Die Berechnung der Höchst- und Niedrigstschlusskurs für eine lange Periode (z. B. 50 Tage) bildet den Donchian-Kanal. Wenn der Preis den Kanal aufbricht, ist er hoch, wenn er den Kanal verlässt, ist er leer. Dies ist die Grundlage für die Beurteilung des großen Trends.
Berechnen Sie die höchsten Schlusskosten und die niedrigsten Schlusskosten für einen kurzen Zeitraum (z. B. 20 Tage) als Maßstab für den Einstieg und den Verlust. Wenn der Preis den langen Kanal durchbricht, wird der Einstieg überschritten, wenn der Schlusskurs auch den kurzen Kanal durchbricht.
Wenn man eine Position mit mehreren Positionen hält, verliert man, wenn der Preis die kurze Linie unterbricht. Wenn man eine Position mit leeren Positionen hält, verliert man, wenn der Preis die kurze Linie überbricht.
Der Stop-Loss-Punkt ist auf das N-fache des ATR eingestellt. Dies kann automatisch an die Marktvolatilität angepasst werden, was dazu beiträgt, die Wahrscheinlichkeit zu verringern, dass der Stop-Loss aktiviert wird.
Die Option besteht darin, die Position vor dem Ende des Handels zu platzieren oder bis zum Verlust zu halten. Dies kann durch einen Eingabeparameter gesteuert werden.
Die Strategie berücksichtigt sowohl Trendbeurteilung als auch Gewinn- und Verlust-Stopp, um Preistrends zu erfassen und Risiken zu kontrollieren.
Wirkungsvolle Identifizierung von langfristigen Trends und Vermeidung von Kurzzeit-Marktlärm.
Automatische Stop-Loss-Mechanismen können einzelne Verluste begrenzen.
ATR-Stopps können die Stoppdistanz an die Volatilität des Marktes anpassen, um die Wahrscheinlichkeit zu verringern, dass die Stopps getroffen werden.
Die Option, die Position automatisch zu liquidieren, um das Risiko zu verwalten, wenn der Handel nicht möglich ist.
Die Strategie ist einfach, klar und verständlich.
In Märkten ohne klare Trends erzeugen Strategien mehr Transaktionen, was die Transaktionskosten erhöht und die Möglichkeit, Verluste zu verzeichnen.
Obwohl ein Stop-Loss-Mechanismus vorhanden ist, kann es unter außergewöhnlichen Umständen zu erheblichen Verlusten kommen, wenn die Preisgänge direkt über den Stop-Loss-Punkt fallen.
Die ATR-Berechnung basiert nur auf historischen Daten und kann zukünftige Trends und Volatilitäten nicht genau vorhersagen. Die tatsächliche Stopp-Distanz kann zu groß oder zu klein sein.
In der realen Welt ist die Ausführung eines Stop-Loss-Bots nicht 100%ig sicher. In extremen Fällen kann es zu Verlusten kommen, wenn der Stop-Loss-Bot übersprungen wird.
Anpassung der Donchian-Channel-Parameter zur Optimierung der Effektivität der Trenderkennung.
In Kombination mit anderen Indikatoren bestätigen Handelssignale wie MACD, KDJ usw. die Strategie-Stabilität.
Erhöhen Sie den mobilen Stop-Loss, so dass die Stop-Loss-Punkte mit dem Preis bewegen und die Verluste weiter begrenzen.
Die Auswirkungen von unterschiedlichen Positionszeiten auf die Gesamtwirkung werden getestet, um die optimale Positionsperiode zu bestimmen.
Berücksichtigen Sie die dynamische Anpassung der Positionsgröße und erhöhen Sie die Positionen bei Trends.
Die Donchian-Kanal-Trend-Tracking-Strategie integriert Trendbeurteilung und Risikokontrolle, um überschüssige Renditen durch Trenderkennung zu erzielen, während die Stop-Loss-Mechanismen das Risiko am Ende kontrollieren. Die Strategie eignet sich zur Identifizierung und Erfassung von mittleren und langen Preistrends und bietet nach Optimierung der Parameter und Ergänzung der Mechanismen einen stabilen positiven Ertrag.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Donchian", overlay=true, calc_on_every_tick=true)
// =============================================================================
// VARIABLES
// =============================================================================
donch_string = input.string(title="Lenght", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='20/10')
permit_long = input.bool(title = 'Permit long', defval = true)
permit_short = input.bool(title = 'Permit short', defval = true)
risk_percent = input.float(title="Position Risk %", defval=0.5, step=0.25)
stopOffset = input.float(title="ATR mult", defval=2.0, step=0.5)
atrLen = input.int(title="ATR Length", defval=20)
close_in_end = input.bool(title = 'Close in end', defval = true)
permit_stop = input.bool(title = 'Permit stop', defval = true)
// =============================================================================
// CALCULATIONS
// =============================================================================
donch_len_big =
donch_string == '50/20' ? 50 :
donch_string == '50/50' ? 50 :
donch_string == '20/20' ? 20 :
donch_string == '20/10' ? 20 :
donch_string == '100/100' ? 100 :
na
donch_len_small =
donch_string == '50/20' ? 20 :
donch_string == '50/50' ? 50 :
donch_string == '20/20' ? 20 :
donch_string == '20/10' ? 10 :
donch_string == '100/100' ? 100 :
na
big_maxclose = ta.highest(close, donch_len_big)
big_minclose = ta.lowest(close, donch_len_big)
small_maxclose = ta.highest(close, donch_len_small)
small_minclose = ta.lowest(close, donch_len_small)
atrValue = ta.atr(atrLen)[1]
tradeWindow = true
// =============================================================================
// NOTOPEN QTY
// =============================================================================
risk_usd = (risk_percent / 100) * strategy.equity
atr_currency = (atrValue * syminfo.pointvalue)
notopen_qty = risk_usd / (stopOffset * atr_currency)
// =============================================================================
// LONG STOP
// =============================================================================
long_stop_price = 0.0
long_stop_price :=
strategy.position_size > 0 and na(long_stop_price[1]) ? strategy.position_avg_price - stopOffset * atrValue :
strategy.position_size > 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price:
strategy.position_size > 0 ? long_stop_price[1] :
na
// =============================================================================
// SHORT STOP
// =============================================================================
short_stop_price = 0.0
short_stop_price :=
strategy.position_size < 0 and na(short_stop_price[1]) ? strategy.position_avg_price + stopOffset * atrValue :
strategy.position_size < 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price :
strategy.position_size < 0 ? short_stop_price[1] :
na
// =============================================================================
// PLOT BG VERTICAL COLOR
// =============================================================================
cross_up = strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
cross_dn = strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
bg_color = cross_up ? color.green : cross_dn ? color.red : na
bg_color := color.new(bg_color, 70)
bgcolor(bg_color)
// =============================================================================
// PLOT HORIZONTAL LINES
// =============================================================================
s1 = cross_up ? na : cross_dn ? na : strategy.position_size != 0 ? strategy.position_avg_price : na
s2 = cross_up ? na : cross_dn ? na : strategy.position_size > 0 ? small_minclose : strategy.position_size < 0 ? small_maxclose : na
s3 = cross_up ? na : cross_dn ? na : not permit_stop ? na :
strategy.position_size > 0 ? long_stop_price : strategy.position_size < 0 ? short_stop_price : na
plot(series=big_maxclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Maxclose Black")
plot(series=big_minclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Minclose Black")
plot(series=s1, style=plot.style_linebr, color=color.yellow, linewidth=2, title="Entry Yellow")
plot(series=s2, style=plot.style_linebr, color=color.red, linewidth=1, title="Donch Small Red")
plot(series=s3, style=plot.style_linebr, color=color.fuchsia, linewidth=2, title="Stop Fuchsia")
// =============================================================================
// ENTRY ORDERS
// =============================================================================
if strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
strategy.entry("Long", strategy.long, qty=notopen_qty)
if (strategy.position_size >= 0) and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
strategy.entry("Short", strategy.short, qty=notopen_qty)
// =============================================================================
// EXIT ORDERS
// =============================================================================
if strategy.position_size > 0 and permit_stop
strategy.exit(id="Stop", from_entry="Long", stop=long_stop_price)
if strategy.position_size < 0 and permit_stop
strategy.exit(id="Stop", from_entry="Short", stop=short_stop_price)
// ==========
if strategy.position_size > 0 and close == small_minclose and not barstate.islast
strategy.close(id="Long", comment='Donch')
if strategy.position_size < 0 and close == small_maxclose and not barstate.islast
strategy.close(id="Short", comment='Donch')
// ==========
if close_in_end
if not tradeWindow
strategy.close_all(comment='In end')
// =============================================================================
// END
// =============================================================================