Adaptive Backtesting-Strategie zur Zeitbereichsauswahl basierend auf doppelter MA-Überlagerung


Erstellungsdatum: 2024-01-05 12:12:10 zuletzt geändert: 2024-01-05 12:12:10
Kopie: 0 Klicks: 589
1
konzentrieren Sie sich auf
1621
Anhänger

Adaptive Backtesting-Strategie zur Zeitbereichsauswahl basierend auf doppelter MA-Überlagerung

Überblick

Die Kernidee der Strategie ist die Einführung eines flexiblen Rahmenwerks für die Auswahl der Messzeiträume, so dass der Benutzer die Startzeit der Messung automatisch oder manuell anpassen kann, je nach Bedarf.

Die Strategie bietet vier Möglichkeiten zur Auswahl des Datumsbereichs durch Eingabe von Parametern: die Verwendung der gesamten Historik, der letzten Tage, der letzten Wochen oder die manuelle Festlegung des Datumsbereichs. Die Strategie setzt die Rückmeldungsfenster dynamisch auf den gewählten Datumsbereich, während die Handelslogik unverändert bleibt, so dass die Unterschiede in der Strategie unter verschiedenen Zeitfenstern verglichen werden können.

Strategieprinzip

Die Strategie besteht aus einem Modul zur Auswahl des Datumsbereichs und einem Modul zur Strategie für den Handel mit doppelter MA.

Modul zur Auswahl der Datumsrange

  1. Es gibt vier Datumsbereiche: gesamte historische Daten (ALL), zuletzt angegebene Tage (DAYS), zuletzt angegebene Wochen (WEEKS) und manuell angegebene Datumsbereiche (MANUAL).
  2. Abhängig von der gewählten Reichweite wird die Start-End-Zeit durch die dynamische Einstellung des Zeitfensters umgerechnet.
  3. Die Funktion Zeitbedingung window ((() filtert die K-Zeile, nur für den gewählten Datumsbereich.

Modul für die Strategie der Doppel-MA-Handelsstrategie

  1. FastMA ist fastMA, Standard 14; SlowMA ist slowMA, Standard 28.
  2. Wenn ein schneller MA über einen langsameren MA geht, macht man mehr; wenn ein schneller MA unter einen langsameren MA geht, ist die Position gleich.
  3. Zeichne die Kurve von MA langsam.

Strategische Stärkenanalyse

  1. Es gibt eine flexible und unbegrenzte Auswahl an Zeiträumen, die für verschiedene Versuchsanforderungen geeignet sind.
  2. Die Wirksamkeit verschiedener Periodenparameter kann im selben Zeitrahmen getestet werden. Die Ergebnisse sind vergleichbar.
  3. Die Modifizierung der Handelslogik ist einfach und kann als Rahmen für andere Strategien verwendet werden.
  4. Die Strategie der Dual-MA ist einfach zu verstehen und leicht zu bedienen.

Risikoanalyse und Lösungsansätze

  1. Die Double-MA-Strategie ist eher grob und es gibt häufige Kauf- und Verkaufsprobleme. Optimierungen wie die Einbeziehung eines Stop-Loss-Mechanismus können in Betracht gezogen werden.
  2. Die manuelle Einstellung des Datumsbereichs ist mit Vorsicht zu vermeiden, da falsche Datumsangaben angezeigt werden können.
  3. Eine zu lange Rücklaufzeit erhöht die Testphase. Es kann in Betracht gezogen werden, die Gleitpunkte zu erhöhen oder die Gebühren für häufige Geschäfte zu senken.

Richtung der Strategieoptimierung

  1. Erhöhung der Stop-Loss-Logik und Verringerung des Verlustrisikos.
  2. Die Aktienpools werden gefiltert, bevorzugte Aktien mit hoher Index-Konzentration werden ausgewählt und die Stabilität erhöht.
  3. Erhöhung der Filter für Handelssignale, Filterung von unbeständigen Signalen innerhalb eines bestimmten Zeitraums und Verringerung unnötiger Geschäfte.
  4. Testen Sie die Performance von Aktien, die mit verschiedenen Klassifikationsindizes verbunden sind, um die beste Sorte zu finden.

Zusammenfassen

Die Strategie ist als ein allgemeiner Rahmen für die Rückmessung von Datumsräumen flexibel und anpassbar, um die unterschiedlichen Testbedürfnisse der Benutzer zu erfüllen. Mit einer einfachen und effektiven Doppel-MA-Handelslogik kann die Strategie schnell verifiziert und verglichen werden.

Strategiequellcode
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA