Dies ist eine Dual-Momentum-Breakout-Strategie. Sie verwendet zwei Momentum-Indikatoren mit unterschiedlichen Parameter-Einstellungen und erzeugt Handelssignale, wenn beide Momentum-Indikatoren die Nulllinie durchbrechen.
Der Code legt zunächst Strategie-Eigenschaften wie Auftragsart, Provisionsschema usw. fest.
// 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 Basismomentumsindikator mit Länge i_len, Datenquelle i_src, ob Prozent berechnet werden soll, entscheidet i_percent.
mom1 ist der Impulsindikator mit mom0 als Datenquelle und Länge 1.
mom2 ist der Impulsindikator mit den ursprünglichen Daten i_src als Quelle und Länge 1.
Der Endmomentumsindikator momX wird standardmäßig auf mom1 festgelegt, kann auch mom2 auswählen.
Wenn mom0 und momX beide über die Nulllinie brechen, gehen Sie lang.
Durch die Verwendung von Doppelmomentindikatoren mit unterschiedlichen Einstellungen wird die Signalzuverlässigkeit durch doppelte Bestätigung und weniger falsche Signale verbessert.
Nur lange Eintritte und die Verwendung von Shorts für Ausgänge verringern die Handelsfrequenz und die Transaktionskosten.
Flexible Anpassungen der Impulsparameter sind für verschiedene Marktumgebungen geeignet.
Saubere Code-Struktur, leicht zu verstehen und zu ändern.
Handelsnachrichten aktiviert, integriert sich gut mit automatischen Handelssystemen.
Bei doppelter Dynamik können schwächere Trendsignale verfehlt werden, während falsche Signale reduziert werden.
Kurzzeitgeschäftsmöglichkeiten mit nur langen Einträgen verpassen.
Eine falsche Einstellung der Impulsparameter führt zu Überhandelungen oder verzögerten Signalen.
Unzureichende Rücktestdaten verursachen Parameterüberanpassung.
Doppelbestätigung reduziert, aber nicht beseitigt falsche Signale, müssen für die Gültigkeit im Live-Handel zu beobachten.
Testkombinationen von Längen- und Prozentsatzparametern, um das Optimum zu finden.
Erwägen Sie, nach der Trendbestätigung Short-Trade-Signale hinzuzufügen, um mehr Trades zu erfassen.
Verschiedene Impulsberechnungen wie ROC, RSI usw. für bessere Ergebnisse testen.
Fügen Sie Trendfilterung hinzu, um Whipsaw-Märkte zu vermeiden.
Optimieren Sie den Stop-Loss für maximale Rentabilität innerhalb der Risikogrenzen.
Dies ist eine typische Dual-Momentum-Breakout-Strategie. Es verwendet doppelte Bestätigung, um falsche Signale zu reduzieren und nur lange Einträge, um die Handelsfrequenz zu senken. Die Vorteile sind Einfachheit und Einfachheit der Implementierung, mit viel Raum für Verbesserungen bei Parameteroptimierung und Risikokontrolle. Insgesamt dient es als ein angemessenes Momentum-Breakout-Framework, benötigt aber marktspezifische Abstimmungen und Optimierungen für profitables Live-Handel.
/*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")