Durchbruch in der quantitativen Handelsstrategie mit gewichteten gleitenden Durchschnittsintervallen im hohen Zeitrahmen

WMA HTF TP/SL Zone Trading Breakout Strategy risk management
Erstellungsdatum: 2025-05-26 14:50:17 zuletzt geändert: 2025-05-26 14:50:17
Kopie: 0 Klicks: 249
2
konzentrieren Sie sich auf
319
Anhänger

Durchbruch in der quantitativen Handelsstrategie mit gewichteten gleitenden Durchschnittsintervallen im hohen Zeitrahmen Durchbruch in der quantitativen Handelsstrategie mit gewichteten gleitenden Durchschnittsintervallen im hohen Zeitrahmen

Überblick

Die Strategie erzeugt Einstiegssignale, indem sie erkennt, ob der Preis auf oder abgeht. Die Strategie nutzt die Gewinne und die Stop-Loss-Einstellungen, um das Risiko zu verwalten. Die Kernstrategie besteht darin, die Gewichtung der Moving Average auf einem höheren Zeitfenster zu verwenden, um den kurzfristigen Marktrauschen zu beseitigen, und dann die Handelszonen auf dem aktuellen Zeitfenster zu konstruieren, was die Handelsentscheidung stabiler macht.

Strategieprinzip

Die Grundprinzipien dieser Strategie sind die Verwendung von gewichteten Moving Averages für hohe Zeitrahmen zur Konstruktion von Preisaktivitätsbereichen. Die konkreten Implementierungsschritte sind:

  1. Zunächst berechnet die Strategie den gewichteten Moving Average (WMA) für den Eröffnungspreis, den Höchstpreis, den Mindestpreis und den Abschlusspreis, wobei die Periode auf den vom Benutzer festgelegten Minimum-Perioden-Parametern basiert.
  2. Die Strategie wandelt diese WMA-Werte dann von einem höheren Zeitrahmen (der Default-Mondlinie) in den aktuellen Zeitrahmen des Handels um.
  3. Der mittlere Punkt des höheren oder niedrigeren gewichteten Moving Averages wird als Zentralpreis berechnet.
  4. Basierend auf dem zentralen Preis und der vom Benutzer definierten Prozentsatz ((0.1 oder 10%), werden Auf- und Untergleis (Widerstands- und Unterstützungsstellen) erstellt.
  5. Wenn der Preis nach oben überschreitet, wird ein Mehrsignal ausgelöst; wenn der Preis nach unten überschreitet, wird ein Leersignal ausgelöst.
  6. Die Strategie setzt zwei Stop-Loss-Ziele (default 10% und 20%), wobei jedes Ziel einen Teil der Position (default 50%) platziert.
  7. Der Stop-Loss (default 5%) wurde eingestellt, um potenzielle Verluste zu begrenzen.

Die Strategie nutzt visuelle Elemente wie Hintergrundfarbänderungen, benutzerdefinierte Grafiken und Ein-/Aus-Markierungen, um den Händlern eine intuitive Identifizierung der Handelsspanne und der aktuellen Marktlage zu ermöglichen. Darüber hinaus zeigt die Strategie die prozentualen Veränderungen der aktuellen Haltungen an und verwendet den Multiplikator ((Default 20)), um die Preisänderungen hervorzuheben.

Strategische Vorteile

Eine tiefere Analyse des Strategie-Codes zeigt folgende deutliche Vorteile:

  1. Filter für HochzeitsfensterDurch den Einsatz eines gewichteten Moving Averages für einen höheren Zeitrahmen ist es möglich, kurzfristige Marktgeräusche zu filtern, sinnvollere Preisbewegungen zu erfassen und falsche Signale zu reduzieren.

  2. Dynamische HandelsbereicheDie Strategie basiert auf der dynamischen Konstruktion von Handelsbereichen auf Basis von Preis-Mittelpunkten und -Prozentsätzen, die sich an unterschiedliche Marktbedingungen und -Volatilitäten anpassen und die Einschränkungen fester Unterstützungs-/Widerstandspunkte vermeiden.

  3. Klare Ein- und AusstiegsregelnStrategie: Die Strategie bietet klare Einstiegssignale ((Breakout Up/Down Track)) und Ausstiegsregeln ((Slot Stop and Loss)) und eliminiert Subjektivität in den Handelsentscheidungen.

  4. Risikomanagement-IntegrationDie integrierte Stop-Loss- und Batch-Stop-Mechanik hilft beim Kapitalschutz und der Gewinnsperre und ist ein vollständiges Handelssystem.

  5. Sehfeedback ist reichhaltigDie Strategie bietet zahlreiche visuelle Elemente, darunter die Hintergrundfarbe der Handelsspanne, die Kennzeichen für die Prozentänderung und die Ein-/Aus-Markierungen, um den Händlern zu helfen, die Marktlage schnell zu beurteilen.

  6. Flexible Einstellungen für ParameterDer Benutzer kann mehrere Parameter anpassen, die auf persönliche Vorlieben und unterschiedliche Marktbedingungen basieren, darunter Zeitrahmen, Moving Average-Perioden, Ratio-Prozentsätze, Stop/Loss-Levels und visuelle Elemente.

  7. Koordinierung der mehrfachen ZeitrahmenDie Strategie kombiniert die hohe Signalqualität des Zeitrahmens mit der Ausführungsgenauigkeit des aktuellen Zeitrahmens und ermöglicht die Koordination mehrerer Zeitrahmen.

Strategisches Risiko

Obwohl diese Strategie viele Vorteile hat, gibt es auch folgende potenzielle Risiken:

  1. Falschsignale durchbrechenUm dieses Risiko zu verringern, kann man erwägen, Bestätigungsmechanismen hinzuzufügen, wie z. B. die Aufrechterhaltung des Preises für eine gewisse Zeit nach dem Durchbruch oder die Bestätigung in Kombination mit anderen Indikatoren.

  2. Nicht geeignet für hochschwankende MärkteIn einem stark schwankenden Markt können die Preise häufig über die Grenzen der Zonen hinausgehen, was zu übermäßigen Transaktionen und potenziellen Verlusten führt. In diesem Fall kann die Zonenquote erhöht oder auf einen höheren Zeitrahmen umgestellt werden.

  3. Fixed Percentage Stop Loss/Stop Stop ist nicht flexibel genugEs kann in Betracht gezogen werden, die Stop/Stop-Ebene dynamisch anhand von Volatilitätsindikatoren (wie ATR) anzupassen.

  4. ParameterempfindlichkeitDie Strategie-Performance kann sehr empfindlich auf Parameter-Einstellungen wie WMA-Zyklen, Interval-Ratio und Stop/Loss-Prozentsatz reagieren. Eine ausreichende historische Rückvergleiche und Parameter-Optimierung sind notwendig.

  5. Überoptimierte RisikenÜbermäßige Anpassung an bestimmte historische Daten kann zu einer schlechten zukünftigen Performance führen. Es wird empfohlen, Rückprüfungen in mehreren Märkten und Zeitabschnitten durchzuführen und die Parameter relativ stabil zu halten.

  6. Anpassungsfähigkeit an veränderte MarkttrendsDie Strategie passt ihre Bandbrechen nach einem Bandbruch nicht an neue Markttrends an, was zu falschen Signalen in stark trendigen Märkten führen kann. Ein Trendfilter oder eine dynamische Anpassungsbandbreche können in Betracht gezogen werden.

Richtung der Strategieoptimierung

Aufgrund der tiefen Analyse des Codes kann diese Strategie in folgende Richtungen optimiert werden:

  1. Hinzufügen von DurchbruchbestätigungsmechanismenUm falsche Durchbrüche zu reduzieren, können zusätzliche Bestätigungsbedingungen hinzugefügt werden, z. B. die Anforderung eines Abschlusspreises nach dem Durchbruch, die Bestätigung des Umsatzes oder die Kreuzbestätigung mit anderen technischen Indikatoren (z. B. RSI, MACD).

  2. Dynamische Stop-Loss-EinstellungenStatt eines festen prozentualen Stop-Losses wird ein dynamischer Stop-Loss eingesetzt, der auf Marktvolatilität basiert, z. B. durch die Verwendung von ATR (Average True Range) als Multiplikator für die Einstellung des Stop-Losses, um die Strategie besser an unterschiedliche Marktbedingungen anzupassen.

  3. Trendfilter hinzufügen: Hinzufügen von Komponenten zur Trenderkennung, wie z. B. langfristige Moving Averages oder ADX-Indikatoren, um das Handeln in stark trendigen Märkten zu korrigieren, z. B. nur in Aufwärtstrends und nur in Abwärtstrends.

  4. Optimierung der ZulassungszeitDie aktuelle Strategie besteht darin, sofort zu treten, wenn der Preis gerade die Grenze der Zonen überschritten hat, und es kann in Betracht gezogen werden, auf Rückrufe oder die Bestätigung bestimmter Formen zu warten, um die Qualität der Einstiegsmomente zu verbessern.

  5. Erweiterung des Moduls zur Vermögensverwaltung: Ermöglicht eine komplexere Berechnung der Positionsgröße, indem die Positionsgröße dynamisch anhand der Kontogröße, der Marktvolatilität und des aktuellen Handelsrisikos angepasst wird, anstatt eine feste Position zu verwenden.

  6. Marktstatus-Filter hinzugefügtIdentifizieren von Marktzuständen (z. B. Trends, Schwankungen oder hohe Schwankungen) und Anpassung der Strategieparameter oder Aussetzung des Handels an unterschiedliche Marktzustände.

  7. Implementierung adaptiver ParameterDie Anpassung von Schlüsselparametern wie die Spanne, die WMA-Zyklen und andere Faktoren an historische Volatilität oder andere Markteigenschaften verbessert die Anpassungsfähigkeit der Strategie.

  8. Integration von mehreren ZeitrahmensignalenWMA kann nicht nur mit hohen Zeiträumen gebildet werden, sondern auch die Preisbewegungen und -indikatoren über mehrere Zeiträume hinweg analysiert werden, um eine umfassendere Marktanalyse und Handelsentscheidungen zu ermöglichen.

Zusammenfassen

Die High-Time-Frame-Gewogen-Moving-Average-Bereich-Breakout-Quantifizierungsstrategie ist ein gut strukturiertes Handelssystem, das durch die Kombination von High-Time-Frame-Gewogen-Moving-Averagen und Dynamischen-Bereichs-Konstruktionen entwickelt wurde, um Preis-Breakout-Gelegenheiten zu erfassen. Der Vorteil der Strategie liegt in ihrer Hochzeit-Frame-Filterfähigkeit, klaren Handelsregeln, integrierten Risikomanagement-Mechanismen und reichlichem visuellen Feedback. Sie hat jedoch auch Herausforderungen wie False-Signal-Breakthroughs, Parameter-Sensitivität und Marktadaptivität.

Durch die Umsetzung der empfohlenen Optimierungsrichtungen, wie z. B. Durchbruchbestätigungsmechanismen, dynamische Stop-Loss-Einstellungen, Trendfilter und Anpassungsparameter, kann die Stabilität und Profitabilität der Strategie weiter verbessert werden. Vor allem sollte der Händler die Strategieprinzipien umfassend verstehen und eine ausreichende historische Rückführung durchführen, um die Parameter an die spezifischen Markte und persönlichen Risikopräferenzen anzupassen, um das Potenzial der Strategie voll auszuschöpfen.

Diese Strategie, die auf einem Blitz basiert, eignet sich für mittel- und langfristige Händler, insbesondere für Händler, die versuchen, wichtige Preis- und Kurs-Breakthroughs zu erfassen, während sie Risikokontrolle beibehalten. Durch kontinuierliche Optimierung und Anpassung kann diese Strategie zu einer mächtigen Waffe in der Toolkit eines Händlers werden.

Strategiequellcode
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy('ZONE FLOW', overlay=true)

// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)

HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)

// Calculating mid-point
m = (h + l) / 2

// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1

// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100

// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100

// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)

// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)

// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)

// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')

// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)

plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)

// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)

// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)

// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na

// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na

// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
    if not na(tp1Line)
        line.delete(tp1Line)
    if not na(tp2Line)
        line.delete(tp2Line)
    if not na(stopLossLine)
        line.delete(stopLossLine)
    if not na(entryLine)
        line.delete(entryLine)
    if not na(tp1Label)
        label.delete(tp1Label)
    if not na(tp2Label)
        label.delete(tp2Label)
    if not na(stopLossLabel)
        label.delete(stopLossLabel)
    if not na(entryLabel)
        label.delete(entryLabel)
    if not na(percentLabel)
        label.delete(percentLabel)

// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)

if longCondition
    strategy.entry('Long', strategy.long)
    entryBarIndexLong := bar_index
    entryBarIndexLong

if shortCondition
    strategy.entry('Short', strategy.short)
    entryBarIndexShort := bar_index
    entryBarIndexShort

// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0  // Check if there's an open long position
    takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
    takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
    stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)

    // Display percentage change from entry price
    percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

if strategy.position_size < 0  // Check if there's an open short position
    takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
    takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
    stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)

    // Display percentage change from entry price
    percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')

// Remove old labels when they go out of scope
if bar_index % 50 == 0
    deleteOldLinesAndLabels()

// Define colors for candles based on background color
candleColorBull = bgColorSwitch  // Use background color for bullish candles
candleColorBear = bgColorSwitch  // Use background color for bearish candles
borderColorBull = color.black  // Border color for bullish candles
borderColorBear = color.black  // Border color for bearish candles

// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)