Adaptive Trendstrategie für den Kanal Donchian

Schriftsteller:ChaoZhang, Datum: 2023-10-26
Tags:

img

Übersicht

Diese Strategie verwendet den Donchian Channel-Indikator, um Markttrends für den Trendhandel anpassungsfähig zu verfolgen.

Strategie Logik

  1. Berechnen Sie den höchsten Höchststand und den niedrigsten Tiefstand über einen bestimmten Zeitraum, um den Donchian-Kanal zu bilden.

  2. Öffnen Sie eine Long-Position, wenn der Preis über das obere Band des Kanals bricht.

  3. Nach der Eröffnung der Positionen verfolgt der Stop Loss die mittlere Linie des Kanals.

  4. Verluste reduzieren und Positionen schließen, wenn der Preis wieder in den Kanal fällt.

Analyse der Vorteile

  1. Die Strategie nutzt den Donchian Channel, um die Trendrichtung zu bestimmen und schnell Ausbrüche zu erfassen.

  2. Die Verwendung der mittleren Kanallinie für den Stop-Loss schützt den Gewinn.

  3. Das Gewinnziel wird nach dem vom Nutzer definierten Gewinnanteil vergrößert.

  4. Es passt sich den unterschiedlichen Marktbedingungen wie Konsolidierung, Ausbruch, Rückzug usw. an und passt die Positionsgröße flexibel an.

  5. Einfache und klare Handelslogik, leicht zu verstehen und zu beherrschen.

Risikoanalyse

  1. Die Strategie handelt nur mit Ausbrüchen und kann nicht effektiv mit der Konsolidierung umgehen.

  2. Es besteht die Gefahr falscher Ausbruchssignale, andere Indikatoren sind zur Überprüfung erforderlich.

  3. Unangemessene Stop-Loss- und Take-Profit-Einstellungen können zu einem vorzeitigen Ausstieg oder zu einem unzureichenden Gewinn führen.

  4. Eine falsche Kanalzeit Einstellung beeinträchtigt die Genauigkeit der Handelssignale.

  5. Eine übermäßige Positionsdimensionierung verstärkt die Risiken von Marktschwankungen.

  6. Unerwartete Roboterunterbrechungsrisiken bestehen, um die Zuverlässigkeit des Systems zu gewährleisten.

Anweisungen zur Verbesserung

  1. Fügen Sie Lautstärken hinzu, um falsche Ausbrüche zu vermeiden.

  2. Erhöhen Sie die Trendindikatorfilter, um die Genauigkeit des Eingangssignals zu verbessern.

  3. Optimieren Sie dynamische Stop-Loss- und Take-Profit-Algorithmen.

  4. Anpassung der Positionsgrößenstrategie anhand von Echtzeitmarktbedingungen.

  5. Forschung über Nacht und Daten vor dem Markteintritt für bessere Eintrittszeiten.

  6. Versuche verschiedene Parameterperioden, um optimale Kombinationen zu finden.

  7. Modellvalidierung hinzufügen, um Überanpassung zu vermeiden.

Schlussfolgerung

Im Großen und Ganzen ist dies eine einfache und praktische anpassungsfähige Trendfolgestrategie. Sie hat Vorteile wie die schnelle Erfassung von Trend-Breakouts und den Schutz von Gewinnen. Sie hat auch Nachteile wie Ineffizienz während der Konsolidierung und Verluste durch falsche Breakouts. Zukünftige Verbesserungen liegen in der Einbeziehung mehrer Signalfilter, dynamischer Stop-Loss / Take-Profit, um sich an mehr Marktbedingungen anzupassen.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's Donchian Strategy", shorttitle = "Donchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 10, minval = 1, title = "Take profit")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2
tpl = h * (100 + tp) / 100
tps = l * (100 - tp) / 100

//Lines
tpcol = showll ? color.lime : na
pccol = showll ? color.blue : na
slcol = showll ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tpcol, title = "TP Long")
plot(h, offset = offset, color = pccol, title = "Channel High")
plot(center, offset = offset, color = slcol, title = "Cannel Center")
plot(l, offset = offset, color = pccol, title = "Channel Low")
plot(tps, offset = offset, color = tpcol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center and low <= center ? 1 : mo[1]
if h > 0
    strategy.entry("Long", strategy.long, lot, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = tpl, stop = center)
    strategy.entry("Short", strategy.short, lot, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("TP Short", "Short", limit = tps, stop = center)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mehr