Momentum-optimierte Preisstatistik-Handelsstrategie basierend auf geglättetem Z-Score-Crossover

Z-SCORE SMA stdev PNL Momentum Filter
Erstellungsdatum: 2025-06-03 10:44:56 zuletzt geändert: 2025-06-03 10:44:56
Kopie: 0 Klicks: 330
2
konzentrieren Sie sich auf
319
Anhänger

Momentum-optimierte Preisstatistik-Handelsstrategie basierend auf geglättetem Z-Score-Crossover Momentum-optimierte Preisstatistik-Handelsstrategie basierend auf geglättetem Z-Score-Crossover

Überblick

Die Strategie basiert auf dem statistischen Konzept des Z-Score, um die statistische Abweichung von Preisen gegenüber ihren lokalen Durchschnittswerten zu identifizieren. Die Strategie berechnet den Z-Score des Schlusskurses und greift dann die kurz- und langfristigen Moving Averages an, um den Z-Score auszugleichen.

Strategieprinzip

Das Z-Score ist eine Statistik, die verwendet wird, um zu messen, wie weit ein Datenpunkt von dem Mustermittelwert abweicht, und zwar in Standarddifferenz. In dieser Strategie lautet die Formel zur Berechnung des Z-Score: Z = (Schlusskurs - SMA ((Schlusskurs, N)) / STDEV ((Schlusskurs, N)) N ist die benutzerdefinierte Basisphase.

Die Umsetzung der Strategie erfolgt wie folgt:

  1. Berechnung des ursprünglichen Z-Ratings für den Schlusskurs
  2. Kurzfristige Glatterung (SMA) auf den ursprünglichen Z-Rating angewendet
  3. Langfristige Glatterung (SMA) auf die ursprüngliche Z-Rating-Anwendung
  4. Wenn ein kurzfristiger Smooth Z-Rating auf einen langfristigen Smooth Z-Rating übertragen wird, wird eine Position eröffnet, wenn zusätzliche Bedingungen erfüllt sind
  5. Wenn ein langfristiger Smooth Z-Rating unter einem kurzfristigen Smooth Z-Rating getragen wird, wird die Position ausgeglichen, wenn zusätzliche Bedingungen erfüllt sind.

Zusätzliche Bedingungen sind:

  • Signalpausen: Zwischen zwei Signalen der gleichen Art (eingehend oder ausgehend) muss die kleinste Anzahl von K-Streifen liegen
  • Dynamik-Filter: Eintritt verboten, wenn drei oder mehr K-Linien in Folge aufsteigen; Ausgang verboten, wenn drei oder mehr K-Linien in Folge fallen

Strategische Vorteile

  1. Grundlegende StatistikenDer Z-Score ist ein erfahrenes statistisches Instrument, das die Abweichung von Preisen von ihrem Durchschnittswert effektiv identifiziert und geeignet ist, die Chancen zu erfassen, dass die Preise zum Durchschnitt zurückkehren.
  2. Glatte Behandlung: Kurz- und Langzeit-Gleichung durch Anwendung des ursprünglichen Z-Ratings, reduzierte Geräusche und verbesserte Signalqualität.
  3. Signal-IntervallsteuerungDurch die Einstellung des minimalen Signalintervalls wird ein Übertraden und eine Wiederholung des Signals wirksam reduziert.
  4. AntriebsfilterEs ist wichtig zu wissen, dass der Handel mit Aktien und Vermögenswerten in einer starken Trendphase verboten ist, um unnötige Verluste bei starken Trends zu vermeiden.
  5. EinfachheitStrategie: Die Strategie nutzt nur Schlusskursdaten, ist nicht auf eine komplexe Kombination von Indikatoren angewiesen und ist einfach zu verstehen und umzusetzen.
  6. Echtzeit-ÜberwachungDie Tabelle enthält eine Echtzeit-Anzeige der nicht realisierten Gewinne, die es den Händlern erleichtert, ihre Positionen zu überwachen.
  7. Flexibilität der ParameterZ-Rating: Benutzer können den Z-Rating-Basiszyklus und die Gleitparameter an unterschiedliche Märkte und Zeitrahmen anpassen, um die Anpassungsfähigkeit zu verbessern.

Strategisches Risiko

  1. Risiko der statistischen HypotheseZ-Rating: Der Z-Rating setzt eine annähernd normal verteilte Preisverteilung voraus, die in einem nicht normal verteilten Marktumfeld schlechter abschneiden kann.
  2. ParameterempfindlichkeitZ-Rating: Die Auswahl der Basisphase und der Gleitparameter hat einen signifikanten Einfluss auf die Strategie-Performance, wobei eine falsche Auswahl der Parameter zu einer Überfusion oder Signalverzögerung führen kann
  3. EinsfaktorbeschränkungDie Strategie basiert auf der Kreuzung von Signalen mit Z-Wert und fehlt an anderen Bestätigungsmerkmalen, was zu einem Falschsignal führen kann.
  4. Abhängigkeit vom MarktumfeldIn einem stark trendigen Markt kann eine Strategie, die auf der Rückkehr der Durchschnittswerte basiert, weiterhin falsche Signale erzeugen.
  5. SignalverzögerungDa ein gleitender Moving Average verwendet wird, kann das Signal zurückbleiben und die besten Einstiegs- oder Ausstiegspunkte verpassen.

Die Lösung:

  • Rücktests für unterschiedliche Marktumstände, um die optimale Kombination von Parametern zu finden
  • In Kombination mit einem Trendfilter reduzieren oder sperren Sie den Handel in stark trendigen Märkten
  • Hinzufügen von zusätzlichen Bestätigungskennzahlen wie Transaktionsanalyse oder anderen technischen Kennzahlen
  • Erwägen Sie die Verwendung von Anpassungsparametern, um die Z-Score-Parameter automatisch an die Marktvolatilität anzupassen

Optimierungsrichtung

  1. Trends erkennen und integrieren: Hinzufügen von Komponenten zur Trenderkennung und Anpassung der Strategie in Märkten, in denen die Richtung der Tendenz klar ist. Dies kann durch einen langfristigen Moving Average oder einen ADX-Indikator erreicht werden, um ein falsches Mittelwertrückkehrsignal bei starken Trends zu vermeiden.
  2. VolatilitätsanpassungDie Z-Rating-Parameter können anpassungsfähig angepasst werden, um die Basis- und Gleitzyklus-Parameter automatisch nach Marktvolatilität zu optimieren. Dies erhöht die Robustheit der Strategie in verschiedenen Marktumgebungen.
  3. Mehrfache ZeitrahmenanalyseZ-Rating-Signal für die Integration von höheren Zeitrahmen als Bestätigung, Handel nur, wenn mehrere Zeitrahmen-Signal übereinstimmen, Falschsignale zu reduzieren.
  4. Stop-Loss-MechanismenErmöglicht die Erreichung von dynamischen Stop-Losses basierend auf den Schwankungsbereichen des Z-Ratings, um die Risikomanagementfähigkeit zu verbessern. Zum Beispiel kann der Stop-Loss als ein spezifisches Abweichungs-Multiplikator für den Z-Rating eingestellt werden.
  5. Teil der GewinneUmsetzen von Segment-Profit-Strategien, Teil-Plating von Positionen, wenn ein Z-Score eine bestimmte Wertminderung erreicht, Optimierung der Kapitalverwaltung.
  6. Auftragsbestätigung: Hinzufügung von Transaktionsmengenanalyse als Transaktionsbestätigung, die Transaktionen nur ausführt, wenn das Z-Rating-Signal durch Transaktionsmengen unterstützt wird, um die Signalqualität zu verbessern.
  7. Index-KombinationDie Z-Score wird in Kombination mit anderen statistischen oder technischen Indikatoren, wie dem RSI oder den Brin-Bändern, verwendet, um ein Multifaktor-Entscheidungsmodell zu erstellen und die Strategie zuverlässig zu machen.

Zusammenfassen

Die dynamisch optimierte Preisstatistik-Trading-Strategie, basierend auf einer glatten Z-Rating-Kreuzung, ist ein auf statistischen Prinzipien basierendes, schlichtes Handelssystem, das sich auf die Abweichung und Regression von Preisen gegenüber ihren lokalen Durchschnittswerten konzentriert. Die Strategie reduziert den Noise-Trading effektiv und erhöht die Signalqualität durch Glattebehandlung, Signalintervallkontrolle und dynamische Filterung.

Die Strategie hat jedoch auch einige Einschränkungen, wie die Abhängigkeit von statistischen Hypothesen, Parameter-Sensitivität und Single-Factor-Entscheidungen. Die Robustheit und Leistung der Strategie können durch die Hinzufügung von Optimierungsmaßnahmen wie Trenderkennung, Volatilitätsanpassung, Multi-Time-Framework-Analyse, Stop-Loss-Mechanismen, Lieferumfang-Bestätigung und Multi-Faktor-Kombinationen erheblich verbessert werden.

Insgesamt ist es ein theoretischer Grundsatz, der eine einfache, leicht verständliche und erweiterbare Strategie ermöglicht, die als grundlegende Komponente eines Handelssystems oder als Lehrmittel geeignet ist, um Händlern zu helfen, die Anwendung von Statistik im Handel zu verstehen.

Strategiequellcode
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Price Statistical Strategy-Z Score V 1.01", overlay=true)

// === Enable / Disable Z-Score Strategy Block ===
enableZScore = input.bool(true, title="Enable Smoothed Z-Score Strategy", tooltip="When enabled, this block calculates a smoothed Z-Score of the closing price and generates entry/exit signals based on crossover behavior between short-term and long-term smoothed Z-Scores.\n\nRecommended for quick and classic detection of price deviation from mean.\nSensitive to outliers. Best suited for relatively normal-distributed market conditions.")

// === Z-Score Parameters ===
zBaseLength = input.int(3, minval=1, title="Z-Score Base Period")
shortSmooth = input.int(3, title="Short-Term Smoothing")
longSmooth = input.int(5, title="Long-Term Smoothing")

// === Z-Score Calculation Function ===
f_zscore(src, length) =>
    mean = ta.sma(src, length)
    std_dev = ta.stdev(src, length)
    z = (src - mean) / std_dev
    z

// === Z-Score Logic ===
zRaw = f_zscore(close, zBaseLength)
zShort = ta.sma(zRaw, shortSmooth)
zLong = ta.sma(zRaw, longSmooth)


// === Minimum gap between identical signals ===
gapBars = input.int(5, minval=1, title="Bars gap between identical signals", tooltip="Minimum number of bars required between two identical signals (entry or exit). Helps reduce signal noise.")


// === Candle-based momentum filters ===
bullish_3bars = close > close[1] and close[1] > close[2] and close[2] > close[3] and close[3] > close[4]
bearish_3bars = close < close[1] and close[1] < close[2] and close[2] < close[3] and close[3] < close[4]

// === Entry and Exit Logic with minimum signal gap and candle momentum filter ===
var int lastEntryBar = na
var int lastExitBar  = na

if enableZScore
    longCondition = (zShort > zLong)
    exitCondition = (zShort < zLong)

    if longCondition and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars) and not bullish_3bars
        strategy.entry("Z Score", strategy.long)
        lastEntryBar := bar_index

    if exitCondition and (na(lastExitBar) or bar_index - lastExitBar > gapBars) and not bearish_3bars
        strategy.close("Z Score", comment="Z Score")
        lastExitBar := bar_index

// === Real-time PnL Table for Last Open Position ===
var table positionTable = table.new(position.bottom_right, 2, 2, border_width=1)

// Header Labels
table.cell(positionTable, 0, 0, "Entry Price", text_color=color.white, bgcolor=color.gray)
table.cell(positionTable, 1, 0, "Unrealized PnL (%)", text_color=color.white, bgcolor=color.gray)

// Values (only when position is open)
isLong        = strategy.position_size > 0
entryPrice    = strategy.position_avg_price
unrealizedPnL = isLong ? (close - entryPrice) / entryPrice * 100 : na

// Define dynamic text color for PnL
pnlColor = unrealizedPnL > 0 ? color.green : unrealizedPnL < 0 ? color.red : color.gray

// Update Table Content
if isLong
    table.cell(positionTable, 0, 1, str.tostring(entryPrice, "#.####"), text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, str.tostring(unrealizedPnL, "#.##") + " %", text_color=pnlColor, bgcolor=color.new(pnlColor, 90))
else
    table.cell(positionTable, 0, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))