Trendverfolgungs-Umkehrstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-03 16:34:28
Tags:

img

Übersicht

Die Trend-Tracking-Umkehrstrategie ist eine Trend-Handelsstrategie, die auf gleitenden Durchschnitten und Preisextremen basiert. Die Strategie verwendet zwei gleitende Durchschnitte, um Preistrends zu verfolgen und öffnet umgekehrte Positionen, wenn sich die Trends umkehren. Gleichzeitig berechnet sie auch einen Preiskanal, der auf den höchsten und niedrigsten Preisen der jüngsten K-Linien basiert, um Verluste zu stoppen, wenn sich die Preise den Kanalgrenzen nähern, wodurch Risiken weiter kontrolliert werden.

Strategie Logik

Die Strategie verwendet 3-Perioden-Hoch- und Tiefpunkt- gleitende Durchschnitte hma und lma, um die Kursentwicklung zu verfolgen.

Die Strategie berechnet auch die oberen und unteren Schienen (uplevel und dnlevel) des Preiskanals auf der Grundlage der höchsten und niedrigsten Preise innerhalb der jüngsten Balken K-Linien. Uplevel ist der höchste Preis in den jüngsten Balken K-Linien zuzüglich eines Rückgriffskoeffizienten aufwärts; dnlevel ist der niedrigste Preis in den jüngsten Balken K-Linien abzüglich eines Rückgriffskoeffizienten aufwärts. Dies bildet den Preiskanalbereich.

Bei der Eröffnung von Long-Positionen wird der Stop-Loss-Preis an der oberen Schiene des Kanals gesetzt; bei der Eröffnung von Short-Positionen wird der Stop-Loss-Preis an der unteren Schiene des Kanals gesetzt.

Wenn ein Umkehrsignal erscheint, wird die Strategie sofort offene Positionen umkehren, um den neuen Kurstrend zu verfolgen.

Vorteile

  • Die Strategie nutzt gleitende Durchschnitte voll aus, um Trends zu verfolgen und Preisbewegungen schnell zu erfassen.
  • Es wendet Preiskanäle und umgekehrte Eröffnungspositionen an, um Risiken zu kontrollieren und Gewinne effektiv zu erzielen.
  • Die Strategielogik ist einfach und klar, leicht verständlich und umsetzbar.
  • Anpassungsfähige Parameter wie Trendbeurteilungslänge, Retracement-Koeffizienten usw. passen sich den unterschiedlichen Produkten an.
  • Unterstützung der Pyramidenbildung in gleicher Richtung, vollständige Nutzung von Trendchancen.

Risiken

  • Anfällig für falsche Signale bei Preiskonsolidierungen.
  • Trendenumkehrungen führen möglicherweise nicht immer zu einem Stop-Loss, der maximale Verlust kann nicht kontrolliert werden.
  • Eine unsachgemäße Einstellung der Parameter kann zu empfindlichen oder langsamen Reaktionen führen.
  • Für optimale Ergebnisse müssen geeignete Produkte und Zeitrahmen ausgewählt werden.

Verbesserungen

  1. Nicht gültige Signale mit anderen Indikatoren ausfiltern;
  2. Hinzufügen von beweglichen Stop-Loss, um Gewinne zu sperren und maximale Drawdowns zu begrenzen;
  3. Test und Optimierung von Parametern für verschiedene Produkte und Zyklen.

Optimierungsrichtlinien

Es gibt Raum für weitere Optimierungen:

  1. Andere Indikatoren können eingeführt werden, um einige ungültige Signale zu filtern, wie MACD, KD usw.

  2. Dazu kann eine anpassungsfähige Stop-Loss-Logik hinzugefügt werden, wie z. B. ein bewegliches Stop-Loss, ein Balance-Stop-Loss usw., um Risiken weiter zu kontrollieren.

  3. Testen Sie die Auswirkungen verschiedener Parameter auf die Strategieleistung und optimieren Sie Parameterkombinationen, wie z. B. MA-Zykluslängen, Retracementkoeffizienten usw.

  4. Die Strategie wird derzeit in zeitlich begrenzten Sitzungen gehandelt. Sie kann auch auf den gesamten Tageshandel angepasst werden. Dies kann zusätzliche Filterregeln erfordern.

Schlussfolgerung

Zusammenfassend ist dies eine Trendumkehr-Handelsstrategie, die Preiskanäle und gleitende Durchschnitte kombiniert. Durch die Verfolgung von Trends und zeitnahe Umkehrung der Eröffnungspositionen kann sie den Preisbewegungen effektiv folgen. Gleichzeitig ermöglichen die Risikokontrollmaßnahmen von Preiskanälen und Umkehrung auch, einzelne Verluste effektiv zu kontrollieren. Die Strategieidee ist einfach und klar und lohnt sich bei Live-Handel weiter zu testen und zu optimieren.


/*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"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
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")

len = input(3)

hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Long stop", strategy.short, 0, stop = lma)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
    strategy.entry("Short stop", strategy.long, 0, stop = hma)
    
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()

Mehr