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.
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.
Verbesserungen
Es gibt Raum für weitere Optimierungen:
Andere Indikatoren können eingeführt werden, um einige ungültige Signale zu filtern, wie MACD, KD usw.
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.
Testen Sie die Auswirkungen verschiedener Parameter auf die Strategieleistung und optimieren Sie Parameterkombinationen, wie z. B. MA-Zykluslängen, Retracementkoeffizienten usw.
Die Strategie wird derzeit in zeitlich begrenzten Sitzungen gehandelt. Sie kann auch auf den gesamten Tageshandel angepasst werden. Dies kann zusätzliche Filterregeln erfordern.
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()