Die Ressourcen sind geladen. Beförderung...

Momentumstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-26 15:16:56
Tags:

Übersicht

Die Momentum-Strategie ist eine Handelsstrategie, die dem Preistrend basierend auf der Preisbewegung folgt. Sie erzeugt Handelssignale, indem sie die Preisänderungen über einen bestimmten Zeitraum berechnet. Wenn der Kursanstieg identifiziert wird, löst sie ein Kaufsignal aus. Wenn der Preisabwärtstrend identifiziert wird, löst sie ein Verkaufssignal aus. Diese Strategie verwendet ein doppeltes Momentum-Indikator-Crossover, um Handelssignale zu erzeugen.

Strategie Logik

Diese Strategie berechnet die Kursdynamik, indem die Änderung des Schlusskurses im Vergleich zum Schlusskurs vor N Perioden gemessen wird.

Der erste Impulsindikator MOM0 wird wie folgt berechnet:

MOM0 = KLEIN - KLEIN[N]

wobei CLOSE der Schlusskurs des laufenden Zeitraumss und CLOSE[N] der Schlusskurs vor N Perioden ist. MOM0 > 0 gibt an, dass der laufende Schlusskurs höher ist als vor N Perioden, während MOM0 < 0 anzeigt, dass der laufende Schlusskurs niedriger ist als vor N Perioden.

Der zweite Impulsindikator MOM1 wird wie folgt berechnet:

MOM1 = MOM0 - MOM0 [1]

Es berechnet die Differenz zwischen dem aktuellen MOM0 und dem vorhergehenden Zeitraums MOM0. MOM1 > 0 bedeutet, dass MOM0 zunimmt, während MOM1 < 0 bedeutet, dass MOM0 abnimmt.

Der dritte Impulsindikator MOM2 wird wie folgt berechnet:

MOM2 = NAHE - NAHE [1]

Es berechnet die Differenz zwischen dem aktuellen Schlusskurs und dem Schlusskurs des vorangegangenen Zeitraums.

Wenn MOM0 > 0 und MOM1 > 0, zeigt es an, dass die Dynamik stetig steigt und löst ein Kaufsignal aus. Wenn MOM0 < 0 und MOM2 < 0, zeigt es an, dass die Dynamik stetig sinkt und löst ein Verkaufssignal aus.

Der Code enthält auch eine Zeitbedingung time_cond, um nur Signale während des angegebenen Backtesting-Zeitraums zu generieren.

Analyse der Vorteile

  • Erfasst Preisänderungstrends unabhängig vom Preisniveau selbst, vermeidet das Verfolgen von Höchstständen und das Abtöten von Tiefständen
  • Der doppelte Impulsindikator filtert falsche Ausbrüche und vermeidet falsche Signale
  • Zusätzliche Zeit- und Zustandskontrollen vermeiden unnötige Geschäfte
  • Einfache und leicht verständliche Logik, einfach umzusetzen
  • Flexible Parameter, die für verschiedene Marktbedingungen angepasst werden können

Risikoanalyse

  • Momentum-Indikatoren haben Verzögerungen und können Wendepunkte verpassen
  • Die doppelte Indikatorenübergang erhöht die Filtration, kann aber auch einige Chancen verpassen
  • Unmöglich, die Stärke und Geschwindigkeit des Preises nach oben oder unten zu bestimmen
  • Parameter müssen sorgfältig ausgewählt werden, zu empfindliche Einstellungen können die Handelsfrequenz und die Kosten für Schlupf erhöhen
  • Leistung beruht auf Parameteroptimierung, Parameter müssen für verschiedene Zeiträume angepasst werden

Die Risiken können durch Verkürzung der Momentumperioden, Hinzufügung der Trendbestimmung oder Konfiguration von Stop Loss reduziert werden.

Optimierungsrichtlinien

  • Verschiedene Impulsberechnungsmethoden wie ROC, RSI usw. testen.
  • Hinzufügen von Trendbestimmung, um Whipsaws in verschiedenen Märkten zu vermeiden
  • Einsatz von Stop-Loss-Strategien zur Kontrolle von Einzelhandelsverlusten
  • Kombination mit Volumenindikatoren zur Sicherstellung der Volumenunterstützung
  • Einführung von Algorithmen für maschinelles Lernen zur Dynamikoptimierung von Parametern
  • Mehrzeitrahmenstrategien zur Unterscheidung von kurz- und langfristigen Trends
  • Überlegen Sie, ob es sich um marktübergreifende Arbitrage-Strategien handelt, bei denen Preisbeziehungen zwischen Märkten verwendet werden

Zusammenfassung

Die Momentum-Strategie folgt den Preisänderungstrends anstelle von Preisniveaus und identifiziert effektiv Marktmomentum-Richtungen, um Auf- und Abwärtspreisbewegungen zu erfassen. Momentum hat jedoch Verzögerungsmerkmale und Parameterwahl und Kombinationsoptimierung sind entscheidend für die Strategieleistung. Diese Strategie verwendet eine doppelte Momentum-Indikator-Kreuzung als Basis, die etwas Lärm filtert. Die Leistung kann durch kontinuierliche Optimierung von Parametern, die Integration neuer technischer Indikatoren und die Nutzung von Maschinellen Lerntechniken weiter verbessert und die Risiken kontrolliert werden.


/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  = true

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
	strategy.cancel("MomSE")

plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")

Mehr