Trendfolgestrategie basierend auf dem Crossover des TEMA-Indikators für mehrere Zeitrahmen


Erstellungsdatum: 2023-12-25 14:20:36 zuletzt geändert: 2023-12-25 14:20:36
Kopie: 0 Klicks: 671
1
konzentrieren Sie sich auf
1623
Anhänger

Trendfolgestrategie basierend auf dem Crossover des TEMA-Indikators für mehrere Zeitrahmen

Überblick

Die Strategie basiert auf einer Multi-Time-Frame-Crossing der TEMA-Indikatoren, um die Richtung der Markttrends zu erkennen, und kombiniert mit einer TEMA-Crossing der niedrigeren Zeiträume, um nach bestimmten Einstiegs- und Ausstiegsmomenten zu suchen. Die Strategie kann konfiguriert werden, um nur zu handeln, nur zu handeln oder in beide Richtungen zu handeln.

Strategieprinzip

Die Strategie verwendet zwei TEMA-Indikatoren, einen auf Basis von schnellen und langsamen Linien mit 5 und 15 Zyklen und einen anderen auf Basis von benutzerdefinierten hohen Zeiträumen wie Tages- oder Kreislinien. Die hochperiodische TEMA-Indikator-Kreuzung bestimmt die allgemeine Trendrichtung, wobei die schnellen Linien über die langsame Linie nach oben und nach unten gehen. Die niedrigen TEMA-Indikator-Kreuzungen werden verwendet, um spezifische Einstiegs- und Ausstiegsmomente zu finden.

Wenn die TEMA-Schnelllinie mit hoher Periode die langsame Linie durchbricht, kann die TEMA-Schnelllinie mit niedriger Periode die langsame Linie durchbrechen, um mehr zu spielen. Wenn die TEMA-Schnelllinie mit niedriger Periode die langsame Linie durchbricht, sollte die TEMA-Schnelllinie ausgespielt werden.

Strategische Vorteile

  1. TEMA-basierte Kreuzung, um sich von Geräuschen abzulenken
  2. Mehrfache Zeitrahmen, kombiniert mit hoher und niedriger Periodizität, um die Genauigkeit zu erhöhen
  3. Einseitige oder wechselseitige Transaktionen, flexible Konfiguration
  4. Die Regeln sind klar und leicht verständlich

Risikoanalyse

  1. Der TEMA-Index lag zurück und verpasste möglicherweise den ersten Moment der Preisänderung.
  2. Kurzfristige Anpassungen können zu unnötigen Rückwärtsbewegungen führen
  3. High-Periodic-Setting ist falsch gewählt und kann nicht den wahren Trend widerspiegeln
  4. Die falsche Auswahl der Low-Cycle-Setting erhöht das Risiko von Stop-Losses.

Die Risiken können auf folgende Weise gelöst werden:

  1. TEMA-Parameter angepasst und ausgeglichen
  2. Angemessene Lockerung der Stop-Loss-Marge
  3. Optimierung der Parameter Hoch-Low-Periode Setting
  4. Tests für die Stärke verschiedener Varietäten

Optimierungsrichtung

  1. Dynamische Anpassung der TEMA-Parameter zur Optimierung der Sensitivität des Indikators
  2. Erhöhen Sie die Filter für Dynamikindikatoren, um Trends nicht zu übersehen
  3. Erhöhung der Volatilitätsindikatoren und dynamische Anpassung der Stop-Loss-Werte
  4. Parameter für die Optimierung von Machine Learning Methoden

Zusammenfassen

Die Gesamtkonzeption der Strategie ist klar und verständlich, die Richtung der Trends wird anhand der TEMA-Mehrzeitrahmen-Kreuzung beurteilt und in Kombination mit der Niedrigzyklus-Kreuzung die Einstiegsmomente gefunden. Es gibt einige Vorteile, aber auch einige Verbesserungsmöglichkeiten. Insgesamt bietet die Strategie eine wertvolle Referenz für die Praxis des quantitativen Handels.

Strategiequellcode
/*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)