Dual Momentum Indicator Breakout-Strategie


Erstellungsdatum: 2023-11-16 17:00:54 zuletzt geändert: 2023-12-01 14:59:44
Kopie: 1 Klicks: 648
1
konzentrieren Sie sich auf
1617
Anhänger

Dual Momentum Indicator Breakout-Strategie

Überblick

Diese Strategie ist eine Doppel-Dynamik-Durchbruchstrategie. Sie verwendet zwei Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik-Dynamik.

Strategieprinzip

Der Code setzt zunächst die Strategie-Eigenschaften ein, wie z. B. die Auftragsmethode, die Provisionen-Methode usw.; dann berechnet er zwei dynamische Indikatoren:

// Momentum settings

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 code

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

mom0 ist der Grunddynamik-Indikator, die Länge ist i_len, die Datenquelle ist i_src, ob der Prozentsatz berechnet wird, wird von i_percent bestimmt.

mom1 ist ein dynamischer Indikator mit einer Länge von 1 und einer Datenquelle von mom0.

mom2 ist ein dynamischer Indikator mit einer Länge von 1 und basiert auf der ursprünglichen Datenquelle i_src.

Der EndwertmomX ist die Defaultmom1 und kann auch als Mom2 gewählt werden.

Wenn mom0 und momX gleichzeitig über der 0er-Achse liegen, macht man Plus; wenn mom0 und momX gleichzeitig unter der 0er-Achse liegen, macht man Null.

Strategische Vorteile

  1. Die Verwendung von Doppel-Dynamik-Indikatoren in Kombination mit verschiedenen Parameter-Einstellungen kann die Zuverlässigkeit von Handelssignalen verbessern, und die Doppel-Bestätigung reduziert die Falschsignale.

  2. Nur mehrfache Einträge, die lediglich für die Platzierung verwendet werden, reduzieren die Handelsfrequenz und reduzieren die Handelskosten.

  3. Die Parameter des Dynamikindikators können an unterschiedliche Marktbedingungen angepasst werden.

  4. Der Code ist klar strukturiert, leicht zu verstehen und zu ändern.

  5. Die Einrichtung von Handelsnachrichten wurde hinzugefügt, die in Verbindung mit dem automatischen Handelssystem verwendet werden können.

Strategisches Risiko

  1. Der Doppel-Dynamik-Indikator reduziert zwar Falschsignale, kann aber auch schwache Trendsignale übersehen.

  2. Wenn Sie nur mehrere Geschäfte tätigen, können Sie die Gelegenheit zum leeren Handel verpassen.

  3. Die falsche Einstellung der Parameter des Dynamometer kann zu zu häufigen oder zu langsamen Transaktionen führen.

  4. Unzureichende Rückdaten können zu einer Überangleichung der Parameter führen.

  5. Doppelte Bestätigung reduziert zwar Falschmeldungen, kann aber nicht vollständig vermieden werden.

Richtung der Strategieoptimierung

  1. Die optimale Parameter kann aus einer Kombination von Parametern verschiedener Längen und der Berechnung von Prozentsätzen ermittelt werden.

  2. Es kann in Erwägung gezogen werden, nach der Trendbestätigung ein Hohlkopf-Handelssignal hinzuzufügen, um weitere Handelsmöglichkeiten zu erfassen.

  3. Verschiedene Methoden zur Berechnung von Dynamikindikatoren wie ROC, RSI usw. können getestet werden, um bessere Ergebnisse zu erzielen.

  4. Es ist möglich, Trends zu filtern, um zu verhindern, dass man in unsicheren Zeiten handelt.

  5. Es ist möglich, die Stop-Loss-Strategie zu optimieren und das Risiko zu kontrollieren, während die Gewinne maximiert werden.

Zusammenfassen

Diese Strategie ist eine typische Doppeldynamik-Durchbruchstrategie. Sie verwendet Doppelbestätigung, um Falschsignale zu reduzieren und nur mehrere Eintritte zu machen, um die Handelsfrequenz zu reduzieren. Die Strategie ist einfach, leicht umzusetzen und bietet viel Raum für Verbesserungen bei der Optimierung der Parameter und der Risikokontrolle.

Strategiequellcode
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Long 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)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.long)

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

// Momentum settings

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"])

// Messages for buy and sell
message_buy  = input("{{strategy.order.alert_message}}", title="Buy message")
message_sell = input("{{strategy.order.alert_message}}", title="Sell message")

// Momentum code

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
    
// Strategy Alerts    

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

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