
Die Quantifizierung der ähnlich hohen Rechteck-Musterstrategie ist ein Handelssystem, das auf den Merkmalen der Preisschwankungen basiert und potenzielle Handelsmöglichkeiten durch die Identifizierung von Rechteck-Mustern mit ähnlich hohen Preisschwankungen im Markt erfasst. Die Strategie besteht im Kern darin, ähnliche Muster der Preisschwankungsbreite zu finden und kombiniert mit dem RSI, der Bestätigung der Transaktionsmenge und der dynamisch angepassten Stop-Loss-Marge, um Risiken zu verwalten und die Handelsergebnisse zu optimieren. Die Strategie ist für verschiedene Handelsarten geeignet und bietet den Händlern eine systematische Methode zur Identifizierung möglicher Trendumkehr- oder Weiterführungssignale durch präzise Berechnung der Preis-Höhen-Relation.
Die Kernprinzipien der Strategie basieren auf der Analyse der geometrischen Eigenschaften von Preisformationen, die sich hauptsächlich um folgende Schlüsselpunkte drehen:
HöhenmustererkennungDie Strategie konzentriert sich hauptsächlich auf zwei Arten von Höhenmodellen - die Haupthöhe (ein Prozentsatz des Preises, der vom Benutzer angepasst wird) und die Rücklaufhöhe (ein kleinerer Prozentsatz, der ebenfalls vom Benutzer definiert wird). Das System berechnet diese Höhenwerte dynamisch, um sich an unterschiedliche Marktbedingungen anzupassen.
Multiple-Mode-Erkennung:
Parameteroptimierung:
Filter für technische Kennzahlen:
Eintritts- und Ausstiegsstrategien:
Durch die tiefgreifende Analyse der Code-Implementierung zeigt sich, dass diese Strategie folgende wesentliche Vorteile aufweist:
Objektive SignalerzeugungsmechanismenDie Geometrie, die auf mathematischen Berechnungen und klar definierten Beziehungen basiert, reduziert den Einfluss subjektiver Urteile und macht die Handelsentscheidung systematischer und konsistenter.
Anpassung an MarktbedingungenDie Strategie kann sich automatisch an unterschiedliche Preisklassen und volatile Marktbedingungen anpassen, indem sie die Höhenparameter als Prozentsatz des Durchschnittspreises berechnet.
Mehrdimensionale BestätigungsmechanismenDie Kombination von Formerkennung, RSI-Indikatoren und Transaktionsmengenanalyse bietet eine vielschichtige Signalbestätigung, die hilft, minderwertige Handelssignale zu filtern.
Ein klares Risikomanagement-FrameworkDie Einführung von Stop-Loss- und Stop-Stop-Positions für jeden Handel hilft den Händlern, Risiken zu kontrollieren und ein gleichbleibendes Risiko-Rendite-Verhältnis zu erhalten.
Visuelle UnterstützungDie Symbole werden in der Tabelle dargestellt. Die Symbole werden in der Tabelle dargestellt. Die Symbole werden in der Tabelle dargestellt.
ParametergestaltungDie Strategie bietet mehrere anpassbare Parameter, die es dem Händler ermöglichen, nach bestimmten Marktbedingungen und individuellen Risikopräferenzen zu optimieren.
Identifizierung von mehreren ModellenDas System kann nicht nur die Entstehung der wichtigsten Trends erkennen, sondern auch die Chancen für einen Rückschlag in den Trends erfassen und so weitere Einstiegspunkte für den Handel bieten.
Obwohl diese Strategie zahlreiche Vorteile hat, gibt es folgende potenzielle Risiken:
ParameterempfindlichkeitStrategie-Performance ist stark von Parameter-Einstellungen abhängig. Fehlende Parameter können zu übertriebenen oder verpassten Signalen führen. Die Lösung besteht darin, die optimale Kombination von Parametern durch historische Rückverfolgung zu finden und die Wirksamkeit der Parameter regelmäßig zu überprüfen.
Falsche DurchbruchgefahrEs wird empfohlen, Bestätigungsmechanismen hinzuzufügen, z. B. die Wartezeit für die Bestätigung des Abschlusspreises oder die Kreuzprüfung in Verbindung mit anderen Indikatoren.
Festgelegte ProzentsatzbeschränkungDie Verwendung einer festen prozentualen Höhenrechnung ist möglicherweise nicht für Märkte geeignet, in denen die Volatilität stark variiert. Die Einführung einer dynamischen Höhenrechnung basierend auf der ATR oder der historischen Volatilität kann in Erwägung gezogen werden.
Rechenintensive VerarbeitungDie Strategie beinhaltet mehrere Loops und Conditional Judgments, die bei der Bearbeitung großer Datenmengen zu Leistungsproblemen führen können. Die Optimierung der Code-Struktur oder die Vereinfachung bestimmter Berechnungsschritte können die Ausführung effizienter machen.
Trends werden vereinfachtDerzeitige Trendbeurteilungen, die nur auf einfachen Vergleichen von Moving Averages basieren, können komplexe Marktstrukturen möglicherweise nicht genau erfassen. Erwägen Sie die Integration komplexerer Trenderkennungsalgorithmen zur Verbesserung der Genauigkeit.
Statik-Einstellungen für die StoppschaltungEs kann nicht flexibel genug sein, die Rücklaufhöhe und die Haupthöhe als Stopp- und Stoppschalter festzulegen. Es kann ein dynamischer Stoppschalter eingeführt werden, der auf Marktvolatilität basiert oder Widerstandspunkte unterstützt.
Auf der Grundlage der Code-Analyse können folgende Optimierungsmöglichkeiten für diese Strategie entwickelt werden:
Anpassung der dynamischen ParameterDie Einführung eines Anpassungsparametermechanismus, der die Parameter für die Höhe der Prozentsätze und die Modellbreite automatisch an die Marktvolatilität und den Handelsprozess anpasst. Dadurch können die Merkmale der verschiedenen Marktphasen besser angepasst werden.
Bestätigung der ZunahmeIntegration von komplexeren Methoden zur Trenderkennung, wie z. B. Mehrzeit-Trendanalyse, Brin-Bandbreitenänderungen oder DMI, um die Genauigkeit der Trendbeurteilung zu verbessern.
Optimierte SignalfilterungDie Einführung von zusätzlichen Filterbedingungen, wie z. B. die Positionsbeziehung von Preisen und Moving Averages, die Analyse der Mehrzeit-RSI-Konsistenz oder die Merkmale der Handelsvolumenverteilung, reduziert die Falschsignale.
Verbesserte RückmeldungenErweiterte Strategie-Bewertungsindikatoren wie Maximal-Rückzug, Sharpe-Ratio, Verlustfaktor usw. werden hinzugefügt, um die Strategie-Performance umfassend zu bewerten und die Optimierung der Parameter zu leiten.
Anpassungs- und SchadensbegrenzungAnpassung des Stop-Loss-Levels auf der Grundlage des ATR oder der jüngsten Volatilitätsdynamik, anstatt einfach eine feste Rücklaufhöhe zu verwenden, um die Effektivität des Risikomanagements zu verbessern.
Integration der Analyse der Marktumgebung: Hinzufügen von Klassifizierungsfunktionen für die Marktumgebung, um verschiedene Parameter-Einstellungen oder Handelslogiken für verschiedene Marktzustände (z. B. hohe Volatilität, niedrige Volatilität, starke Trends oder intermittierende Erschütterungen) zu verwenden
Optimierung der EffizienzUmstrukturierung der Algorithmen zur Erkennung von Mustern, Verringerung von Paddelzyklen und Repeating Computing, Verbesserung der Geschwindigkeit der Ausführung von Strategien in einer Echtzeitumgebung
Filterzeit erhöhenDas Programm wurde in zwei Schritten erweitert: Hinzufügen von zeitbasierten Filterbedingungen, um schwankende Zeiten wie Marktein- und Marktabschlüsse oder wichtige Pressemitteilungen zu vermeiden und die Signalqualität zu verbessern.
Die Quantifizierung der ähnlich rechteckigen Höhenmodellstrategie ist eine einzigartige Methode der technischen Analyse, um Handelschancen zu erfassen, indem sie die geometrischen Eigenschaften von Preisbewegungen präzise definiert und identifiziert. Ihre Kerninnovation besteht darin, abstrakte Diagrammmuster in quantifizierbare mathematische Beziehungen umzuwandeln und in Verbindung mit technischen Indikatoren für mehrfache Bestätigung zu verwenden. Die Strategie bietet einen vollständigen Handelsrahmen, der Einstiegssignale, Risikomanagement und grafische Darstellungen enthält, die für Händler geeignet sind, die eine systematische Handelsmethode anstreben.
Obwohl die Strategie einen neuen Blickwinkel für die Analyse der Märkte bietet, hängt ihre Wirksamkeit stark von der Optimierung der Parameter und der Marktappatibilität ab. Die Strategie hat das Potenzial, ein wirksames Werkzeug in den Werkzeugkasten der Händler zu werden, indem sie die Signalfiltermechanismen kontinuierlich verbessert, die Präzision bei der Trendbestimmung erhöht und die Risikomanagementmethoden optimiert. Vor allem sollte der Händler vor der Anwendung in der Praxis ausreichend historische Rückverfolgung und Simulation von Geschäften durchführen, um sicherzustellen, dass die Strategie mit dem individuellen Handelsstil und der Risikobereitschaft übereinstimmt.
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Similar Rectangle Heights - Strategy", overlay=true)
// Strategy parameters
lookbackPeriod = input.int(45, "Analysis period", minval=10)
primaryHeightPercent = input.float(5.0, "Primary height (% of price)", minval=0.5, maxval=20.0, step=0.5)
correctionHeightPercent = input.float(2.2, "Correction height (% of price)", minval=0.5, maxval=10.0, step=0.5)
minPatternBars = input.int(5, "Minimum pattern width (candles)", minval=3)
maxPatternBars = input.int(14, "Maximum pattern width (candles)", minval=5)
useVolume = input.bool(false, "Include volume")
useRSI = input.bool(true, "Include RSI")
rsiPeriod = input.int(23, "RSI period", minval=5)
rsiOverbought = input.int(55, "RSI overbought level", minval=50, maxval=90)
rsiOversold = input.int(50, "RSI oversold level", minval=10, maxval=50)
// Calculate primary height and correction height in price points
avgPrice = ta.sma(close, lookbackPeriod)
primaryHeight = avgPrice * primaryHeightPercent / 100
correctionHeight = avgPrice * correctionHeightPercent / 100
// Calculate RSI
rsi = ta.rsi(close, rsiPeriod)
// Function to detect a bullish pattern
bullishPattern(idx) =>
// Check if there is a low followed by a rise of a specified height
lowestLow = ta.lowest(low, minPatternBars)[idx]
highAfterLow = ta.highest(high, minPatternBars)[idx]
patternHeight = highAfterLow - lowestLow
// Check if pattern height matches the primary height
heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
// Check if pattern width is within range
patternWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and low[idx + i] == lowestLow
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and high[idx + j] == highAfterLow
patternWidth := j - i + 1
break
break
widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
// Check volume and RSI conditions
volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
rsiCondition = not useRSI or rsi[idx] < rsiOversold
// Return true if all conditions are met
heightMatch and widthMatch and volumeCondition and rsiCondition
// Function to detect a bearish pattern
bearishPattern(idx) =>
// Check if there is a high followed by a drop of a specified height
highestHigh = ta.highest(high, minPatternBars)[idx]
lowAfterHigh = ta.lowest(low, minPatternBars)[idx]
patternHeight = highestHigh - lowAfterHigh
// Check if pattern height matches the primary height
heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
// Check if pattern width is within range
patternWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and high[idx + i] == highestHigh
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and low[idx + j] == lowAfterHigh
patternWidth := j - i + 1
break
break
widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
// Check volume and RSI conditions
volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
rsiCondition = not useRSI or rsi[idx] > rsiOverbought
// Return true if all conditions are met
heightMatch and widthMatch and volumeCondition and rsiCondition
// Function to detect a bullish correction in an uptrend
bullishCorrection(idx) =>
// Check if there is a pullback of correction height after a rise
highBeforeCorrection = ta.highest(high, minPatternBars)[idx]
lowDuringCorrection = ta.lowest(low, minPatternBars)[idx]
correctionSize = highBeforeCorrection - lowDuringCorrection
// Check if correction height matches expected height
heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
// Check if correction width is within range
correctionWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and high[idx + i] == highBeforeCorrection
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and low[idx + j] == lowDuringCorrection
correctionWidth := j - i + 1
break
break
widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
// Check if we are in an uptrend
uptrend = ta.sma(close, lookbackPeriod)[idx] > ta.sma(close, lookbackPeriod)[idx + minPatternBars]
// Return true if all conditions are met
heightMatch and widthMatch and uptrend
// Function to detect a bearish correction in a downtrend
bearishCorrection(idx) =>
// Check if there is a pullback of correction height after a drop
lowBeforeCorrection = ta.lowest(low, minPatternBars)[idx]
highDuringCorrection = ta.highest(high, minPatternBars)[idx]
correctionSize = highDuringCorrection - lowBeforeCorrection
// Check if correction height matches expected height
heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
// Check if correction width is within range
correctionWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and low[idx + i] == lowBeforeCorrection
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and high[idx + j] == highDuringCorrection
correctionWidth := j - i + 1
break
break
widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
// Check if we are in a downtrend
downtrend = ta.sma(close, lookbackPeriod)[idx] < ta.sma(close, lookbackPeriod)[idx + minPatternBars]
// Return true if all conditions are met
heightMatch and widthMatch and downtrend
// Detecting signals
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
// Buy signal
buySignal = false
for i = 0 to 3
if bullishPattern(i) or (i > 0 and bullishCorrection(i))
buySignal := true
break
// Sell signal
sellSignal = false
for i = 0 to 3
if bearishPattern(i) or (i > 0 and bearishCorrection(i))
sellSignal := true
break
// Execute strategy
if buySignal
entryPrice := close
stopLoss := close - correctionHeight
takeProfit := close + primaryHeight
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop=stopLoss, limit=takeProfit)
if sellSignal
entryPrice := close
stopLoss := close + correctionHeight
takeProfit := close - primaryHeight
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop=stopLoss, limit=takeProfit)