Mehrstufige Preisstrukturidentifizierung und quantitatives Handelssystem zur Fair-Value-Gap-Analyse

CHoCH FVG Pivot Points Risk-Reward Ratio Price Structure SWING POINTS Quantitative Trading
Erstellungsdatum: 2025-06-03 10:50:29 zuletzt geändert: 2025-06-03 10:50:29
Kopie: 0 Klicks: 347
2
konzentrieren Sie sich auf
319
Anhänger

Mehrstufige Preisstrukturidentifizierung und quantitatives Handelssystem zur Fair-Value-Gap-Analyse Mehrstufige Preisstrukturidentifizierung und quantitatives Handelssystem zur Fair-Value-Gap-Analyse

Überblick

Multi-Level-Price Structure Identification and Fair Value Gap Quantification Trading System ist eine auf Preisverhalten basierende, automatisierte Handelsstrategie, die zwei wichtige Handelskonzepte kombiniert: Change Character (CHoCH, Change of Character) und Fair Value Gap (FVG, Fair Value Gap). Diese Strategie erfasst hochprobable Handelschancen durch die Identifizierung von Punkten von Veränderungen in der Marktstruktur und von Ungleichgewichtszonen, um exakte Ein- und Ausgangskontrollen zu ermöglichen, wenn die Preise zu den Fair Value Gap zurückkehren. Diese systematische Methode ermöglicht es dem Händler, den Markt objektiv zu analysieren, Emotionen zu beseitigen und über klare Risikomanagementregeln zu verfügen.

Strategieprinzip

Das Quantifizierungssystem arbeitet nach folgenden Kernprinzipien:

  1. Identifizierung der PreisstrukturDie Pivot Points-Technologie identifiziert die Schwingungshöhen und Schwingungshöhen in einem Markt, die wichtige Bestandteile der Marktstruktur sind. Die Systeme verwenden eine parametrische Schwingungslänge (default 5 Zyklen) um diese Schlüsselpunkte zu identifizieren.

  2. CHoCH-Untersuchung:

    • Multiple Choch: Preise brechen nach niedrigeren Tiefs die vorherigen Schwankungshöhen
    • Blank CHoCH: Der Preis durchbricht die vorherigen Schwankungen nach der Bildung eines höheren Hochs Das System verlangt, dass die Zeitintervalle für die Bildung von CHoCH die Mindeststreckenanforderungen erfüllen (standardmäßig 10 Zyklen), um die ungültigen Signale zu filtern.
  3. Identifizierung von Fair Value Gaps (FVG):

    • Mehrköpfige FVG: Die Tiefststände des aktuellen Phasen sind höher als die Höchststände der beiden vorherigen Phasen
    • FVG: Höchstwert des aktuellen Pfunds niedriger als die Tiefstwerte der beiden vorangegangenen Pfunds Das System setzt die minimale FVG-Größe-Schwelle (default 2 Punkte) ein, um sicherzustellen, dass nur bedeutende Preisungleichgewichte erfasst werden.
  4. Eingangslogik:

    • Multiple-Entry: Warten Sie, bis die Preise in den Multiple-FVG-Bereich zurückgezogen werden, nachdem der Multiple-CHoCH bestätigt wurde
    • Eintritt in den Luftraum: Warten Sie, bis der Preis in den Luftraum-FVG-Bereich zurückkehrt, nachdem der Luftraum-CHoCH bestätigt wurde Die Eintrittspreise werden als Mittelpunkt der FVG-Region festgelegt und bieten einen ausgewogenen Eintrittspreis.
  5. Risikomanagement:

    • Stop-Loss-Einstellungen für die jüngsten Schwingungsschwellen (Mehrköpfe) oder Schwingungsschwellen (Leerköpfe)
    • Stopps basieren auf dem RRR (Standard 2.0) oder auf einer festen Zielpunktzahl
    • Optionale automatische Positionsanpassung, die Positionsgröße berechnet auf Basis des Konto-Risiko-Prozentsatzes und der Stop-Loss-Distanz

Strategische Vorteile

Nach einer eingehenden Analyse des Codes weist diese Strategie folgende deutliche Vorteile auf:

  1. Strukturierte MarktanalyseDie Strategie basiert auf den Prinzipien der Veränderung der Preisstruktur und der Marktungleichgewichte und nicht auf einer einfachen Kennzifferkreuzung, was sie zu einem einzigartigen Vorteil bei der Identifizierung von Marktwendepunkten macht.

  2. Genaue EintrittszeitenDurch die Wartezeit auf die Bildung der FVG nach dem CHoCH kann die Strategie den Einstieg zu einem günstigen Preisniveau verhindern, die Überschneidung zu vermeiden und die Einstiegsqualität zu verbessern.

  3. Anpassung des RisikomanagementsStrategie: Die automatische Anpassung der Stop-Loss-Position an die tatsächliche Marktstruktur statt der Verwendung von festen Punkten entspricht eher den tatsächlichen Schwankungen des Marktes.

  4. Elemente der Transaktion visualisierenStrategie: Die Strategie bietet umfassende Visualisierungsfunktionen, einschließlich CHoCH-Tags, FVG-Boxen, Schwankungen und Handelslinien, die es dem Händler ermöglichen, die Marktstruktur und die Strategielogik intuitiv zu verstehen.

  5. Flexible PositionsverwaltungDas Konto ist in der Lage, die Risikogrenze automatisch an die Volatilität anzupassen, während das Konto das Geld schützt.

  6. Performance-optimierte DesignDer Code beinhaltet eine Mechanik, um die alten FVG-Boxen zu bereinigen, um sicherzustellen, dass die Systemleistung nicht nachlässt, wenn man lange läuft.

  7. Integrierte LeistungsüberwachungStrategie: Die Strategie bietet eine Echtzeit-Performance-Tabelle mit wichtigen Kennzahlen wie Strategie-Status, Gewinnrate und Profitfaktoren, um den Händlern die Strategie-Performance zu bewerten.

Strategisches Risiko

Obwohl die Strategie so konzipiert ist, gibt es einige potenzielle Risiken und Einschränkungen:

  1. Falsche DurchbruchgefahrDas CHoCH-Signal kann ein falscher Durchbruch sein, der zu einem schnellen Rückzug des Preises führt und einen Stop-Loss auslöst. Um dieses Risiko zu mildern, kann es in Betracht gezogen werden, Bestätigungsmechanismen zu erweitern, z. B. die Bestätigung des Durchbruchs durch die Dogen-K-Linie.

  2. Gefahr der LückeIn einem volatilen Markt oder bei Übernachtungen können Preise über die Stop-Loss-Position springen, was zu einem höheren Verlust als erwartet führt. Es wird empfohlen, einen garantierten Stop-Loss-Auftrag zu verwenden (wenn möglich) oder die Position zu verkleinern.

  3. ParameterempfindlichkeitDie Strategie-Performance hängt stark von Parameter-Einstellungen wie Schwunglänge, minimale CHoCH-Distanz und FVG-Größe ab. Unterschiedliche Märkte und Zeitrahmen können unterschiedliche Kombinationen von Parametern benötigen, daher wird eine umfassende Rückmeldungsoptimierung empfohlen.

  4. Abhängigkeit vom MarktumfeldDie Strategie funktioniert besser in Trendmärkten und kann häufige Fehlsignale bei der Berücksichtigung von Märkten erzeugen. Erwägen Sie, Trendfilter oder Marktsituationserkennungsmechanismen hinzuzufügen.

  5. RechenkomplexitätStrategie: Die Verwendung von mehreren Arrays und Bedingungskontrollen kann auf geringer konfigurierten Geräten zu Leistungsproblemen führen. Obwohl der Code eine Reinigungsmechanik enthält, ist auf den Ressourcenverbrauch auf lange Sicht zu achten.

  6. Unzureichende RückzugshaltungDie Strategie berücksichtigt derzeit keine dynamischen Anpassungen der Positionsgröße unter unterschiedlichen Marktbedingungen, was zu einem größeren Rückzug führen kann, wenn die Umstände nach wie vor ungünstig sind. Es wird empfohlen, eine Beschränkung der Rücknahme von Konten und eine schrittweise Positionsreduzierung einzuführen.

Richtung der Strategieoptimierung

Auf Basis der Code-Analyse wurden folgende Optimierungsmöglichkeiten vorgeschlagen:

  1. Mehrfache ZeitrahmenbestätigungEinführung von Marktanalysen für höhere Zeitrahmen, die nur in Richtung der Haupttrends handeln. Zum Beispiel kann ein Trendfilter für die Tageszeiten hinzugefügt werden, der nur dann ausgeführt wird, wenn die Tageszeiten in der Richtung der Tageszeiten entsprechen.

  2. Optimierung der dynamischen Parameter: Ein System von Parametern, die automatisch an die Marktvolatilität angepasst werden, wie z. B. die Erhöhung der Mindest-FVG-Größe und der CHoCH-Abstandsanforderung bei hoher Volatilität und die Verringerung dieser Parameter bei niedriger Volatilität.

  3. Einstiegsoptimierung:

    • Implementierung von Batch-Entry-Strategien, z. B. mehrere Eintrittspunkte auf verschiedenen Ebenen des FVG-Bereichs
    • Hinzufügen von zusätzlichen Eintrittsbestätigungen, z. B. Durchschnittsumsatz oder Dynamikbestätigung
  4. Erweiterte Risikomanagement:

    • Einführung von Stop-Loss-Tracking-Funktionen, die die Stop-Loss-Position automatisch an die Gewinne anpassen
    • Hinzufügen von Teilgewinn-Funktionen, die Teilpositionen ausgleichen, wenn ein gewisses Gewinnniveau erreicht wird
    • Einführung von Maximal-Widerrufsbeschränkungen, die automatisch die Positionsgröße reduzieren oder den Handel aussetzen, wenn ein Konto-Widerruf den Margin erreicht
  5. Anpassung der Marktlage:

    • Hinzufügen von Marktsituationserkennung ((Trend/Bildung/Hochschwankung) und Anpassung der Strategieparameter an die verschiedenen Zustände
    • Verringerung oder Vermeidung von Transaktionen auf dem Konzessionsmarkt
    • Ein konservativerer Positionsumfang bei plötzlicher Erhöhung der Volatilität
  6. Maschinelles Lernen verstärktEinführung eines Algorithmus für die Analyse historischer Choch- und FVG-Muster, um die Merkmale der Modelle mit höherer Erfolgsrate zu identifizieren und die Eintrittsentscheidungsgewichtung entsprechend anzupassen.

  7. Filterung der TransaktionszeitDas Ziel ist es, den Handel zu einem Zeitfenster zu erleichtern, das sich von wichtigen Pressemitteilungen und hohen Schwankungen bei Markteintritten und -abschluss abhebt und sich auf die am besten flüssigen Handelszeiten konzentriert.

Zusammenfassen

Das Multi-Level-Price Structure Identification and Fair Value Gap Quantitative Trading System ist eine vollständige Handelslösung, die eine Kombination aus fortschrittlicher Theorie des Preisverhaltens enthält. Es schützt das Trading-Kapital durch die Identifizierung von Marktstrukturänderungen (CHoCH) und Preisschwankungen (FVG) bei idealen Preisniveaus und durch systematische Risikomanagementmethoden.

Der größte Vorteil der Strategie liegt in der Analyse, die auf der tatsächlichen Marktstruktur basiert, anstatt auf Rückstandskennzahlen zu verlassen, was es ermöglicht, die Wendepunkte des Marktes früher zu identifizieren. Die ausgefeilte Visualisierung und das Performance-Monitoring-System ermöglichen es den Händlern, die Strategie-Logik intuitiv zu verstehen und ihre Wirksamkeit zu bewerten.

Obwohl Risiken wie False Breakouts und Parameter-Sensitivität bestehen, können die Stabilität und die Leistung der Strategie durch die vorgeschlagene Optimierungsrichtung, insbesondere die Bestätigung von mehreren Zeitrahmen, die Anpassung der dynamischen Parameter und die Erweiterung der Risikomanagementfunktionen, erheblich verbessert werden.

Diese Strategie bietet einen soliden Rahmen für Investoren, die eine systematische Methode des Handels nutzen möchten, indem sie sowohl die Essenz des traditionellen Preisverhaltensgeschäfts aufnimmt als auch die Objektivität und die Disziplin der quantifizierten Systeme nutzt. Durch die kontinuierliche Optimierung der Parameter und die Anpassung an die Marktauslastung hat die Strategie das Potenzial, eine stabile Handelsleistung in verschiedenen Marktumgebungen zu erzielen.

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

//@version=5
strategy("ICT CHoCH & FVG Strategy - NQ1!", overlay=true, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false, max_boxes_count=500, max_lines_count=100, max_labels_count=100)

// ============================================================================
// INPUT PARAMETERS
// ============================================================================

// Strategy Settings
riskRewardRatio = input.float(2.0, title="Risk:Reward Ratio", minval=0.5, maxval=10.0, group="Strategy Settings")
fixedTarget = input.int(40, title="Fixed Target (Ticks)", minval=5, maxval=200, group="Strategy Settings")
useRRTarget = input.bool(true, title="Use Risk:Reward Target", tooltip="If false, uses fixed target", group="Strategy Settings")
riskPercent = input.float(2.0, title="Risk % of Account", minval=0.1, maxval=10.0, group="Strategy Settings")
useAutoSize = input.bool(false, title="Auto Size Positions", tooltip="Size based on risk % and stop distance", group="Strategy Settings")

// Visual Settings
showCHoCH = input.bool(true, title="Show CHoCH Labels", group="Visual Settings")
showFVG = input.bool(true, title="Show FVG Boxes", group="Visual Settings")
showSwings = input.bool(true, title="Show Swing Points", group="Visual Settings")
showTradeLines = input.bool(true, title="Show Entry/SL/TP Lines", group="Visual Settings")

// CHoCH Detection Settings
swingLength = input.int(5, title="Swing Detection Length", minval=2, maxval=20, group="CHoCH Settings")
minCHoCHDistance = input.int(10, title="Min CHoCH Distance (bars)", minval=5, maxval=50, group="CHoCH Settings")

// FVG Settings
minFVGSize = input.float(2.0, title="Min FVG Size (ticks)", minval=0.25, maxval=10.0, group="FVG Settings")
maxFVGAge = input.int(50, title="Max FVG Age (bars)", minval=10, maxval=200, group="FVG Settings")

// ============================================================================
// VARIABLES AND ARRAYS
// ============================================================================

// Swing point detection
var float lastSwingHigh = na
var float lastSwingLow = na
var int lastSwingHighBar = na
var int lastSwingLowBar = na

// CHoCH tracking
var bool bullishCHoCH = false
var bool bearishCHoCH = false
var float chochLevel = na
var int chochBar = na
var bool waitingForFVG = false

// FVG tracking
var array<box> bullishFVGs = array.new<box>()
var array<box> bearishFVGs = array.new<box>()
var float activeFVGTop = na
var float activeFVGBottom = na
var bool lookingForEntry = false

// Trade management
var float stopLossLevel = na
var float takeProfitLevel = na
var bool inPosition = false

// ============================================================================
// HELPER FUNCTIONS
// ============================================================================

// Convert ticks to price for NQ
ticksToPrice(ticks) => ticks * 0.25

// Calculate position size based on risk
calcPositionSize(stopDistance) =>
    if useAutoSize and strategy.equity > 0
        accountValue = strategy.equity
        riskAmount = accountValue * (riskPercent / 100)
        stopDistancePrice = stopDistance * syminfo.mintick
        math.max(1, math.floor(riskAmount / stopDistancePrice))
    else
        1

// ============================================================================
// SWING POINT DETECTION
// ============================================================================

// Detect swing highs and lows
swingHigh = ta.pivothigh(high, swingLength, swingLength)
swingLow = ta.pivotlow(low, swingLength, swingLength)

// Update swing points
if not na(swingHigh)
    lastSwingHigh := swingHigh
    lastSwingHighBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingHigh, "SH", style=label.style_triangledown, color=color.red, size=size.tiny)

if not na(swingLow)
    lastSwingLow := swingLow
    lastSwingLowBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingLow, "SL", style=label.style_triangleup, color=color.green, size=size.tiny)

// ============================================================================
// CHoCH DETECTION
// ============================================================================

// Check for bullish CHoCH (break above prior swing high after making lower low)
bullishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       high > lastSwingHigh and 
                       lastSwingLow < lastSwingHigh and
                       bar_index - lastSwingHighBar > minCHoCHDistance and
                       strategy.position_size == 0

// Check for bearish CHoCH (break below prior swing low after making higher high)
bearishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       low < lastSwingLow and 
                       lastSwingHigh > lastSwingLow and
                       bar_index - lastSwingLowBar > minCHoCHDistance and
                       strategy.position_size == 0

// Process CHoCH signals
if bullishCHoCHCondition and not bullishCHoCH
    bullishCHoCH := true
    bearishCHoCH := false
    chochLevel := lastSwingHigh
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


if bearishCHoCHCondition and not bearishCHoCH
    bearishCHoCH := true
    bullishCHoCH := false
    chochLevel := lastSwingLow
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


// ============================================================================
// FVG DETECTION
// ============================================================================

// Check for FVG formation (3-candle pattern)
if bar_index >= 2
    // Bullish FVG: low[0] > high[2]
    bullishFVG = low[0] > high[2] and (low[0] - high[2]) >= ticksToPrice(minFVGSize)
    
    // Bearish FVG: high[0] < low[2]  
    bearishFVG = high[0] < low[2] and (low[2] - high[0]) >= ticksToPrice(minFVGSize)
    
    // Process bullish FVG after bullish CHoCH
    if bullishFVG and bullishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[0]
        fvgBottom = high[2]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true
    
    // Process bearish FVG after bearish CHoCH
    if bearishFVG and bearishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[2]
        fvgBottom = high[0]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true

// ============================================================================
// ENTRY LOGIC
// ============================================================================

// Long entry: price touches bullish FVG after bullish CHoCH
longCondition = lookingForEntry and bullishCHoCH and 
               not na(activeFVGTop) and not na(activeFVGBottom) and
               low <= activeFVGTop and high >= activeFVGBottom and
               strategy.position_size == 0

// Short entry: price touches bearish FVG after bearish CHoCH  
shortCondition = lookingForEntry and bearishCHoCH and  not na(activeFVGTop) and not na(activeFVGBottom) and low <= activeFVGTop and high >= activeFVGBottom and  strategy.position_size == 0

// Process long entries
if longCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingLow
    stopDistance = entryPrice - stopLoss
    
    if useRRTarget
        takeProfit := entryPrice + (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice + ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bullishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    


// Process short entries
if shortCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingHigh
    stopDistance = stopLoss - entryPrice
    
    if useRRTarget
        takeProfit := entryPrice - (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice - ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bearishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    

// ============================================================================
// POSITION MANAGEMENT
// ============================================================================

// Reset position state when trade is closed
if inPosition and strategy.position_size == 0
    inPosition := false
    stopLossLevel := na
    takeProfitLevel := na

// ============================================================================
// VISUAL SIGNALS
// ============================================================================

// Plot entry signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green, 
          style=shape.triangleup, size=size.normal)

plotshape(shortCondition, title="Short Entry", location=location.abovebar, color=color.red, 
          style=shape.triangledown, size=size.normal)

// Plot active stop loss and take profit levels
plot(inPosition ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(inPosition ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)

// ============================================================================
// CLEANUP
// ============================================================================

// Clean up old FVG boxes (helps with performance)
if bar_index % 100 == 0
    while array.size(bullishFVGs) > 20
        box.delete(array.shift(bullishFVGs))
    while array.size(bearishFVGs) > 20
        box.delete(array.shift(bearishFVGs))

// ============================================================================
// ALERTS
// ============================================================================

// Alert conditions
alertcondition(longCondition, title="Long Entry Signal", message="ICT Strategy: Long entry at FVG - SL: {{strategy.position_avg_price}}")
alertcondition(shortCondition, title="Short Entry Signal", message="ICT Strategy: Short entry at FVG - SL: {{strategy.position_avg_price}}")