Adaptive Backtest-Datumsbereichsauswahlstrategie auf der Grundlage von Doppel-MA

Schriftsteller:ChaoZhang, Datum: 2024-01-05 12:12:10
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, einen Rahmen zu implementieren, der den Backtest-Datumbereich flexibel auswählen kann, um den unterschiedlichen Bedürfnissen der Benutzer gerecht zu werden, so dass sie automatisch oder manuell die Start- und Endzeiten für den Backtest festlegen können.

Die Strategie bietet vier Optionen für die Auswahl des Datumsbereichs durch Eingabeparameter: die Verwendung aller Daten der Vergangenheit, die letzten angegebenen Tage, die letzten angegebenen Wochen oder die manuelle Angabe eines Datumsbereichs. Die Strategie setzt das Backtest-Fenster dynamisch auf der Grundlage des ausgewählten Datumsbereichs, wobei die Handelslogik unverändert bleibt, so dass die Leistungsdifferenz unter verschiedenen Zeitfenstern verglichen werden kann.

Strategieprinzip

Die Strategie besteht aus zwei Modulen: Auswahl des Backtest-Datumsbereichs und Doppel-MA-Handelsstrategie.

Modul zur Auswahl des Backtest-Datumsbereichs

  1. Bietet vier Optionen für die Auswahl des Datumsbereichs: alle Historiendaten (ALL), kürzlich angegebene Tage (DAYS), kürzlich angegebene Wochen (WEEKS), manuell angegebener Datumsbereich (MANUAL).
  2. Dynamisch wird die Start- und Endzeit des Backtests auf der Grundlage der Zeitstempelkonvertierung des ausgewählten Bereichs festgelegt.
  3. Benutzt die Zeitbedingungenfenster ((() Funktion, um Kerzen zu filtern und nur Backtest innerhalb des ausgewählten Datumsbereichs durchzuführen.

Doppel-MA-Handelsstrategie-Modul

  1. Die schnelle MA-Periode ist fastMA, Standard 14; die langsame MA-Periode ist slowMA, Standard 28.
  2. Lang, wenn der schnelle MA über den langsamen MA geht; nahe Position, wenn der schnelle MA unter den langsamen MA geht.
  3. Zeichnet schnelle und langsame MA-Kurven.

Analyse der Vorteile

  1. Flexible Auswahl verschiedener Backtest-Datumbereiche ohne Einschränkung, um unterschiedliche Versuchsbedürfnisse zu erfüllen.
  2. Kann die Auswirkungen verschiedener Periodenparameter innerhalb desselben Zeitrahmens mit Vergleichbarkeit der Ergebnisse testen.
  3. Einfach zu modifizierende Handelslogik, um als Rahmen für andere Strategien zu dienen.
  4. Einfach zu verstehen, doppelte MA-Strategie, leicht für Anfänger.

Analyse der Risiken und Lösungen

  1. Die Double MA-Strategie ist grob mit häufigen Kauf- / Verkaufsproblemen.
  2. Die manuelle Einstellung des Datumsbereichs erfordert Vorsicht, um Fehler zu vermeiden.
  3. Lange Historie Backtest erhöht Testzyklus. Kann die Hinzufügung von Slippage oder Gebühren, um häufige Trades zu reduzieren.

Richtungen für die Optimierung der Strategie

  1. Hinzufügen Sie Stop-Loss-Logik, um das Verlustrisiko zu senken.
  2. Filterbestände mit Beständen nach starker Indexrelevanz für eine höhere Stabilität.
  3. Hinzufügen von Filtern, um instabile Signale innerhalb bestimmter Zeiträume zu entfernen, um unnötige Trades zu reduzieren.
  4. Testleistung der Bestandsindizes zur Suche nach den besten Sorten.

Schlussfolgerung

Als flexibler und anpassbarer Rahmen für die Auswahl des Datumsbereichs erfüllen die Vorteile verschiedene Testbedürfnisse der Benutzer. In Kombination mit einer einfachen, aber effektiven doppelten MA-Handelslogik kann er Strategien schnell überprüfen und vergleichen. Nachfolgeoptimierungen wie das Hinzufügen von Filtern oder Stop-Loss-Logik können die Strategie für den Live-Handel praktischer machen. Zusammenfassend hat der Strategie-Rahmen eine gute Skalierbarkeit und einen guten Referenzwert.


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


Mehr