
Die Cross-Movement-Trend-Tracking-Strategie ist ein einfaches und effizientes Handelssystem, das zwei technische Indikatoren, den Moving Average (SMA) und den Relativ Strong Index (RSI), geschickt kombiniert, um ein automatisiertes System zur Erzeugung von Kauf- und Verkaufssignalen zu bilden. Die Strategie nutzt die Preiskreuzung mit dem 20-Zyklus-SMA als primäre Signal-Triggerbedingungen, während die Dynamik in Verbindung mit der Bestätigung des RSI-Indikators einige minderwertige Handelssignale herausfiltert. Die Strategie enthält auch ein Performance-Tracking-Modul, das die Erfolgs- und Misserfolgsrate von Geschäften in Echtzeit überwacht und den Händlern eine Referenz für ihre Entscheidungen bietet.
Das Kernprinzip der Strategie besteht darin, Trendwechselpunkte durch die Kreuzung von Preis und Durchschnitt zu erfassen, während die RSI-Dynamik zur Signalbestätigung verwendet wird, wie folgt:
EinkaufsbedingungenWenn der Preis die 20-Zyklus-SMA nach oben überschreitet und der RSI-Wert größer als 60 ist, erzeugt das System ein Kaufsignal. Diese Bedingung kombiniert zwei Dimensionen von Trend und Dynamik: Ein Preisbruch zeigt an, dass ein Aufwärtstrend möglich ist, und ein RSI-Wert über 60 bestätigt die Existenz von Aufwärtsdynamik.
VerkaufsbedingungenWenn der Preis einen 20-Zyklus-SMA nach unten durchschreitet und der RSI-Wert unter 40 liegt, wird ein Verkaufssignal erzeugt. Ebenso identifiziert diese Bedingung eine mögliche Trendwende und bestätigt die Abwärtsdynamik durch einen RSI-Wert unter 40.
Leistungs-Tracking-MechanismenDie Strategie beinhaltet ein System zur Überwachung der Transaktionsleistung, das folgende Indikatoren verfolgt:
VisualisierungStrategie: Die Kauf- und Verkaufspunkte werden mit “B” (Buy) und “S” (Sell) in der Grafik markiert und die Performance-Statistiken werden in Echtzeit über die Tabelle angezeigt.
Kurz und effektivEs wurde ein vollständiges Handelssystem mit nur zwei gängigen technischen Indikatoren (SMA und RSI) erstellt, wodurch das Risiko von Überoptimierung und Überpassung verringert wurde.
Doppelte BestätigungDie Kombination von Trendindikatoren (SMA) und Dynamikindikatoren (RSI) erhöht die Signalsicherheit. Der Preis muss nicht nur die Durchschnittslinie durchbrechen, sondern auch genügend Dynamik haben, um einen Handel auszulösen.
Hohe AutomatisierungsrateStrategie: Die vollständig automatisierte Erzeugung von Kauf- und Verkaufssignalen reduziert die emotionalen Störungen durch Menschen und ist für systematisierte Händler geeignet.
Eingebettete LeistungsbeurteilungDie Strategie kann in der Lage sein, die Strategie in Echtzeit zu analysieren, um die Performance der Strategie zu beurteilen, die Parameter zu ändern oder aus der Strategie auszutreten, die schlecht funktioniert.
RisikokontrollbewusstseinDas Ziel ist es, die Risikomanagement-Bewusstheit zu fördern, indem das Preisverhalten innerhalb von sieben Kaufzyklen überwacht wird, um potenzielle Stopps zu identifizieren.
Intuitive VisualisierungDurch die Diagrammmarkierung und die Leistungstabelle kann der Händler die Strategieausführung intuitiv verstehen, um die Rückmeldungsanalyse und die Strategieverbesserung zu erleichtern.
Falsche DurchbruchgefahrTrotz der Filterung mit dem RSI kann die Strategie zu einer großen Anzahl von falschen Durchbruchsignalen in den konsolidierten Märkten führen, was zu häufigen Transaktionen und unnötigen Transaktionskosten führt.
ParameterempfindlichkeitStrategie-Performance hängt stark von der Auswahl der SMA-Zyklen (20) und RSI-Zyklen (8) und ihrer Schwellenwerte (60⁄40) ab. Diese festen Parameter können in verschiedenen Marktumgebungen oder Sorten schlecht abschneiden.
Mangelnde AnpassungsfähigkeitDie Strategie hat keine Fähigkeit, die Marktumgebung zu identifizieren. Sie funktioniert gut in Trendmärkten, kann aber häufig Verluste in Schokkelmärkten verursachen.
Einfache Stop-Loss-MechanismenDie Strategie verfolgt die Ausfallwahrscheinlichkeit, ohne jedoch die dynamische Stop-Loss-Funktion zu implementieren, was zu einem übermäßigen Verlust in extremen Situationen führen kann.
Mangelnde PositionsverwaltungStrategie: Eintritt und Ausstieg mit festen Positionen, ohne die Größe der Positionen an die Marktvolatilität oder die Signalstärke anzupassen und die Kapitalnutzung nicht zu optimieren.
Einschränkungen der LeistungsbewertungErfolg ist definiert als eine Preiserhöhung von 2%, wobei ein festgelegter Wert möglicherweise nicht für alle Marktumstände gilt und ein höherer Wert für hochschwankende Sorten erforderlich sein kann.
Einzug in die MarktumgebungsfilterEinführung von Volatilitätsindikatoren (z. B. ATR) oder Trendstärkenindikatoren (z. B. ADX), die zur Identifizierung von Marktzuständen beitragen und die Handelsfrequenz oder -parameter in einem wackligen Markt senken.
Anpassungsmechanismus der ParameterDie Strategie wird von der Strategie-Anpassungsfähigkeit verbessert, indem die SMA- und RSI-Parameter dynamisch angepasst werden und die automatische Optimierung der Zyklen und Abwertungen nach der jüngsten Marktentwicklung erfolgt.
Optimierung der PositionsführungDie Dynamik der Positionszuteilung basiert auf Signalstärke (z. B. RSI-Abweichung), Marktvolatilität oder Konto-Risiken.
Verbesserte SchadensbegrenzungDie Einführung von ATR-basierten dynamischen Stop-Loss- oder Stop-Loss-Tracking-Funktionen ermöglicht eine genauere Kontrolle des Risikos pro Transaktion.
Filterzeit erhöhenUm die Signalqualität zu verbessern, sollten Sie die Zeitfaktoren berücksichtigen, um außergewöhnliche Zeiten mit hoher Volatilität oder geringer Liquidität zu vermeiden.
Mehrzeitbestätigung: Mehrzeit-Analyse, die die Richtung der größeren Zeiträume mit der Richtung des Handels übereinstimmen soll, um Handelssignale zu filtern, die den Trend umkehren.
Optimierte LeistungsbeurteilungDie Definition von Erfolg/Niederlage kann verbessert werden, indem ein umfassenderer Bewertungsmechanismus, wie z. B. ein risikobereinigter Gewinn oder ein Gewinn/Risiko-Verhältnis, in Betracht gezogen wird.
Die Cross-Dynamic Trend Tracking Strategie ist ein einfaches und praktisches Handelssystem, das durch die Kombination von SMA und RSI-Indikatoren die Dynamik bestätigt, während die Trendwendepunkte identifiziert werden. Die Strategie ist besonders für Investoren geeignet, die erstmals mit quantifiziertem Handel in Berührung kommen.
Obwohl die Strategie relativ einfach in der Konstruktion ist, spiegelt sie wichtige Prinzipien des quantitativen Handels wider: Trendverfolgung, Signalbestätigung und Leistungsüberwachung. Durch die empfohlene Optimierung der Richtung, wie z. B. Filterung der Marktumgebung, Anpassung der Parameter und Verbesserung der Stop-Loss-Mechanismen, kann der Händler die Stabilität und Anpassungsfähigkeit der Strategie erheblich verbessern, während die Kernlogik der Strategie beibehalten wird.
Diese einfachen Strategien, die klassische technische Kennzahlen kombinieren, sind oft zuverlässiger und lebendiger als komplexe Algorithmen, insbesondere wenn sie Risikomanagement- und Performance-Assessment-Mechanismen integriert haben. Für Händler, die eine Einstiegs-Quantifizierungsstrategie suchen, ist dies ein idealer Startpunkt, der sowohl praktische Erfahrungen als auch die Grundlage für die Entwicklung von nachfolgenden Strategien bietet.
/*backtest
start: 2024-07-05 00:00:00
end: 2025-02-23 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("STOCKS TO BUY", overlay=true, fill_orders_on_standard_ohlc=true)
// Define 20-period SMA
sma20 = ta.sma(close, 20)
// RSI Calculation (8-period)
rsiValue = ta.rsi(close, 8)
// Buy Condition: Close crosses above 20-SMA and RSI > 60
buyCondition = ta.crossover(close, sma20) and rsiValue > 60
// Sell Condition: Close crosses below 20-SMA and RSI < 40
sellCondition = ta.crossunder(close, sma20) and rsiValue < 40
// Tracking Performance Metrics
var int totalSignals = 0 // Total number of 'B' signals
var int successCount = 0 // Times price rose >2% from 'B' candle close
var int failureCount = 0 // Times price fell below 'B' candle low within 7 bars
// Store entry price and low when signal occurs
var float entryPrice = na
var float entryLow = na
var int barCounter = na // Bar counter for tracking 7-candle window
if buyCondition
strategy.entry("Buy", strategy.long)
totalSignals := totalSignals + 1 // Increment 'B' count
entryPrice := close
entryLow := low
barCounter := 0 // Reset counter when new 'B' signal appears
if sellCondition
strategy.close("Buy") // Close the buy position on sell signal
// Monitor for 7 candles only
if not na(barCounter)
barCounter := barCounter + 1
// Check for Success (Price rises >2%)
success = high >= entryPrice * 1.02
if success
successCount := successCount + 1
entryPrice := na // Reset entry price after success
// Check for Failure (Price falls below entryLow within 7 candles)
failure = low < entryLow and barCounter <= 7
if failure
failureCount := failureCount + 1
entryLow := na // Reset entry low after failure
// Stop tracking after 7 candles
if barCounter > 7
barCounter := na
// Plot 'B' on chart when buy condition is met
plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="B")
// Plot 'S' on chart when sell condition is met
plotshape(series=sellCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")
// Display Performance Metrics Table
var table performanceTable = table.new(position=position.top_right, columns=2, rows=4, bgcolor=color.gray, border_width=1)
if bar_index % 10 == 0 // Update table every 10 bars for efficiency
table.cell(performanceTable, 0, 0, "Metric", text_color=color.white, bgcolor=color.blue)
table.cell(performanceTable, 1, 0, "Value", text_color=color.white, bgcolor=color.blue)
table.cell(performanceTable, 0, 1, "Total 'B' Signals", text_color=color.white)
table.cell(performanceTable, 1, 1, str.tostring(totalSignals), text_color=color.white)
table.cell(performanceTable, 0, 2, "Price Rose >2%", text_color=color.white)
table.cell(performanceTable, 1, 2, str.tostring(successCount), text_color=color.green)
table.cell(performanceTable, 0, 3, "Price Fell Below 'B' Low (7 bars)", text_color=color.white)
table.cell(performanceTable, 1, 3, str.tostring(failureCount), text_color=color.red)