Trend nach Strategie auf der Grundlage von Multi-Timeframe TEMA Crossover

Schriftsteller:ChaoZhang, Datum: 2023-12-25 14:20:36
Tags:

img

Übersicht

Diese Strategie identifiziert die Markttrendrichtung basierend auf dem Crossover des TEMA-Indikators über mehrere Zeitrahmen und verwendet TEMA-Crossover in niedrigeren Zeitrahmen, um spezifische Ein- und Ausstiegspunkte zu finden.

Strategie Logik

Die Strategie verwendet zwei TEMA-Indikatoren, einer mit einer schnellen und einer langsamen Linie basierend auf 5 und 15 Perioden, der andere basiert auf einem vom Benutzer definierten höheren Zeitrahmen wie täglich oder wöchentlich.

Wenn die TEMA-Schnelllinie über die langsame Linie überschreitet, kann ein langer Eintrag ausgelöst werden, wenn die TEMA-Schnelllinie über die langsame Linie überschreitet; ein Ausgangssignal wird gegeben, wenn die schnelle Linie unter die langsame Linie überschreitet.

Vorteile

  1. Basierend auf dem TEMA-Crossover vermeidet Lärminterferenz
  2. Das Multi-Timeframe-Design kombiniert hohe und niedrigere Zyklen und verbessert die Genauigkeit
  3. Flexible Konfiguration nur für lange, nur für kurze oder für beide Richtungen
  4. Einfache Regeln, leicht verständlich und umsetzbar

Risikoanalyse

  1. TEMA hat Verzögerungseffekt, kann anfängliche Preisänderung verpassen
  2. Kurzfristige Korrekturen bei höheren TF können zu unnötigen Umkehrgeschäften führen
  3. Die falsche Einstellung der höheren TF spiegelt den tatsächlichen Trend nicht wider
  4. Eine unsachgemäße Einstellung der unteren TF erhöht das Stop-Loss-Risiko

Risikolösungen:

  1. Feinabstimmungsparameter TEMA für das Gleichgewicht
  2. Moderate Erleichterung der Stop-Loss-Marge
  3. Optimieren Sie die Einstellungen für hohe und niedrige Zyklen
  4. Robustheit der Prüfparameter für alle Produkte

Möglichkeiten zur Verbesserung

  1. Dynamische Anpassung der TEMA-Parameter zur Optimierung der Empfindlichkeit
  2. Hinzufügen eines Impulsfilters, um fehlende Trends zu vermeiden
  3. Hinzufügen eines Volatilitätsindex für die dynamische Stop-Loss-Größenordnung
  4. Maschinelles Lernen für die Optimierung von Parametern

Zusammenfassung

Die Strategie insgesamt ist einfach und klar in der Logik, Identifizierung Trendverzerrung über TEMA Crossover auf mehrere Zeitrahmen, und stützt sich auf zusätzliche Crossover auf niedrigere TF zu Zeiteinträgen.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2010)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)

Mehr