Dynamisches Preisbereichs-Ausbruch-Pullback-Umkehr-Multi-Strategie-Handelssystem

FVG 5M 1M R:R RANGE TRADING SCALPING
Erstellungsdatum: 2025-08-22 09:55:06 zuletzt geändert: 2025-08-22 09:55:06
Kopie: 0 Klicks: 333
2
konzentrieren Sie sich auf
319
Anhänger

Dynamisches Preisbereichs-Ausbruch-Pullback-Umkehr-Multi-Strategie-Handelssystem Dynamisches Preisbereichs-Ausbruch-Pullback-Umkehr-Multi-Strategie-Handelssystem

Überblick

Die Strategie integriert drei verschiedene Einstiegsmodi: Breakout-Entry, Trap-Entry und Reverse-Entry, die durch die Identifizierung von Fair Value Gaps (FVG) und Preisbereich-Breakout-Modellen gehandelt werden. Die Strategie konzentriert sich auf die hohe Volatilität in der ersten Stunde nach der Eröffnung der US-Aktienmarkt (09:30-10:30 EST), handelt in 1-Minuten-Charts und verwendet eine festgelegte 2:1-Risiko-Return-Tabelle, um Verluste zu verhindern.

Strategieprinzip

Die Kernprinzipien der Strategie basieren auf dem Verhaltensmuster, das der Preis nach der Bildung eines Anfangsbereichs am Morgen aufweist. Die konkrete Operation besteht aus drei Schritten:

  1. Markierung zwischen 00:00 und 09:30 Uhr:

    • Warten Sie auf die ersten 5 Minuten nach dem Start der K-Linie ((9:30-9:35)
    • Markieren Sie die höchsten und niedrigsten Punkte der K-Linie als Transaktionsbereich
    • Wechseln Sie zu einem 1-Minuten-Chart, um tatsächlich zu handeln
  2. Suche nach einem Einstiegspunkt (nur eine Stunde nach Börsenöffnung): Die Strategie bietet drei verschiedene Eintrittsmöglichkeiten:

    • Einbruch:

      • Voraussetzungen für die Erfüllung der Fair Value Gap (FVG)
      • Der Kursbruch einer beliebigen K-Linie in der FVG
      • FVG definiert als die drei K-Linien, die den Sprung formen (Wick-Gap)
    • Trap Entry (auch bekannt als Trap Entry):

      • Die Preise überschreiten zunächst die Grenzen der Zonen
      • Und dann zurück in den Bereich.
      • Der letzte Schlusskurs findet außerhalb der Zone statt.
    • Reversal Entry (auch bekannt als “Reversal Entry”):

      • Der Preis nach dem Scheitern eines Durchbruchs in eine Richtung
      • FVGs, die in die entgegengesetzte Richtung auftreten, kehren zurück in die Zone
  3. Geschäftsführung:

    • Stop-Loss-Einstellung:
      • Durchbruch/Falle-Strategie: Einsatz der ersten Schließung an der untersten/höchsten Stelle der K-Linie außerhalb des Bereichs
      • Umkehrstrategie: Minimum/Höchstpunkt der ersten K-Linie im FVG-Modus
    • Einstellungen für die Anschaltfläche:
      • Das Risiko-Rendite-Verhältnis ist immer 2:1.
      • Das Risiko ist 100 Dollar, der Gewinn ist 200 Dollar.

Der Strategie-Code realisiert einen vollständigen Logikrahmen, der automatische Entdeckung von Handelsräumen, die Identifizierung verschiedener Einstiegsbedingungen, die Einstellung von Stop-Loss-Stopp-Niveaus und die Berechnung der geeigneten Positionsgröße umfasst. Das System enthält auch einen Zeitfilter, der sicherstellt, dass nur in bestimmten Zeiträumen gehandelt wird, und kann verschiedene Einstiegsstrategien selektiv aktivieren oder deaktivieren.

Strategische Vorteile

  1. Kurze und klare RegelnStrategie-Regeln sind klar und intuitiv, ohne subjektive Beurteilung und reduzieren den Einfluss von Emotionen auf Handelsentscheidungen. Die bedingte Logik und Status-Tracking im Code gewährleisten die strikte Umsetzung der Regeln.

  2. Flexibilität bei verschiedenen ZugangsmöglichkeitenDie Codes werden in der folgenden Tabelle dargestellt: bietet drei verschiedene Einstiegsstrategien (Breakthrough, Trap und Reversal), die es den Händlern ermöglichen, sich an unterschiedliche Marktumgebungen anzupassen.enableBreakenableTrapUndenableReversalDie Parameter ermöglichen diese Flexibilität.

  3. Konzentrieren Sie sich auf Zeiten mit hoher WahrscheinlichkeitStrategie: Handel nur in der ersten Stunde nach dem Börsengang, um die hohe Volatilität und Liquidität zu nutzen, die normalerweise in dieser Zeit vorhanden ist.inWindowBedingung, die sicherstellt, dass die Transaktionen nur zwischen 9:30 und 10:30 durchgeführt werden.

  4. Strenge Risikomanagement: Fixed 2:1 RRR und Stop-Loss-Einstellungen basierend auf spezifischen Preisbewegungen, die eine klare Risikokontrolle für jeden Handel ermöglichen.riskPctDie Parameter erlauben dem Benutzer, den Risikoprozentsatz für jeden Handel an seine eigenen Risikopräferenzen anzupassen.

  5. Keine komplizierten KennzahlenDie Strategie beruht nicht auf komplexen technischen Indikatoren, sondern auf reiner Preisbewegung und -struktur, wodurch das Risiko einer Überangleichung verringert wird.

  6. Saisonale UmgehungDer Code beinhaltet eine Blacklist für die Feiertage (vom 15. Dezember bis zum 15. Januar), um eine Zeit zu vermeiden, in der der Markt instabil oder weniger flüssig sein könnte.

  7. Flexible PositionsverwaltungDas System bietet zwei Arten der Positionsverwaltung, basierend auf einem Risikoprozentsatz oder einer festen Anzahl von Verträgen, die an unterschiedliche Geldmanagementanforderungen angepasst sind.

Strategisches Risiko

  1. Falsche DurchbruchgefahrDie Strategie integriert Trap- und Reverse-Entrance-Mode, um dieses Risiko zu mildern, muss jedoch sorgfältig überwacht werden.

  2. SpannweitenproblemeWenn der K-Linienbereich in den ersten 5 Minuten nach dem Start zu breit oder zu eng ist, kann dies die Effektivität der Strategie beeinträchtigen. Ein zu enger Bereich kann zu häufigen Triggersignalen führen, und ein zu breiter Bereich kann zu einem zu weit entfernten Stop-Loss führen.

  3. Opportunitätskosten durch zeitliche EinschränkungenEs ist jedoch auch eine Art Disziplin, um zu verhindern, dass zu viel gehandelt wird.

  4. Einschränkungen des Fixed-Risk-Return-RatioObwohl ein RRR von 2:1 für Konsistenz sorgt, ist es unter bestimmten Marktbedingungen möglicherweise nicht die optimale Option. In stark trendigen Märkten kann ein höherer RRR besser geeignet sein.

  5. Marktunregelmäßigkeiten während der FerienzeitObwohl die Strategie den Handel zwischen dem 15. Dezember und dem 15. Januar vermieden hat, kann das Marktverhalten vor und nach den anderen Feiertagen abnormal sein und die Strategie beeinflussen.

  6. Abhängigkeit von FVGStrategie: Die Strategie beruht auf dem FVG-Modell bei Durchbrüchen und Rückschlägen, aber unter bestimmten Marktbedingungen kann es sein, dass FVGs nicht leicht zu bilden oder zu erkennen sind.

  7. Die Einschränkungen eines einzigen ZeitrahmensDie Strategie, sich vollständig auf die 1-Minuten-Charts zu stützen, kann wichtige Marktstrukturen in größeren Zeitrahmen übersehen.

Richtung der Strategieoptimierung

  1. Anpassung der BandbreiteEs kann in Betracht gezogen werden, die Bandbreite an die dynamischen Marktschwankungen anzupassen, z. B. eine breitere Bandbreite an Tagen mit hoher Volatilität und eine schmalere Bandbreite an Tagen mit geringer Volatilität. Dies kann durch Berechnung der aktuellen durchschnittlichen realen Bandbreite der Volatilität (ATR) oder eines ähnlichen Indikators erreicht werden.

  2. Optimierung der ZeitfensterEs ist möglich, die optimale Handelszeitfenster für verschiedene Märkte zu untersuchen, anstatt sie auf 9:30-10:30 zu fixieren. In einigen Märkten kann es zu unterschiedlichen Zeiten zu deutlicheren Pausenbrechungen kommen.

  3. Dynamische Risiko-Rendite-EinstellungenDas Risiko-Rendite-Verhältnis kann je nach Marktlage und Volatilitätsdynamik angepasst werden, z. B. durch Erhöhung des Ziels bei starken Trends und Verringerung des Ziels bei Marktstabilisierungen.

  4. Integration der MarktmotivationsindikatorenEs kann in Erwägung gezogen werden, Marktbreiten- oder Volatilitätsindikatoren als Filter zu verwenden, um einen Handel in unfairen Marktbedingungen zu vermeiden.

  5. Mehrfache ZeitrahmenbestätigungDie Ausführung des Handels bleibt auf dem 1-Minuten-Chart, es können jedoch Bestätigungsbedingungen für höhere Zeitrahmen hinzugefügt werden, wie z. B. die Überprüfung der Trendrichtung auf dem 15-Minuten- oder 1-Stunden-Chart.

  6. Optimierung der FVG-DefinitionDie derzeitige FVG-Definition ist relativ einfach und lässt sich mit komplexeren oder präziseren Definitionen der Ungleichgewichtszonen, wie z. B. mit dem Körper und nicht nur mit der Schattenlinie, vergleichen.

  7. Hinzufügen von TransaktionsbestätigungenDas Hinzufügen der Bestätigung der Transaktionsmenge zu den Einstiegsbedingungen kann die Signalqualität verbessern, insbesondere für den Durchbruch.

  8. Anpassung an die SchadensausfallDie Anpassung des Stop-Loss-Niveaus an die dynamischen Marktschwankungen kann die Anpassungsfähigkeit der Strategie in unterschiedlichen Marktumgebungen verbessern.

Zusammenfassen

Ein dynamisches Breakout-Retreat-Reverse-Multi-Strategie-Trading-System ist eine strukturierte, klar regulierte Tageshandelsstrategie, die nach Handelsmöglichkeiten sucht, indem sie die Preisspanne erkennt, in der der Frühstück gebildet wird, und die anschließenden Breakout-, Trap- oder Reverse-Muster. Die Hauptvorteile dieser Strategie liegen in ihrer Einfachheit und Flexibilität bei verschiedenen Einstiegsmethoden, während strenge Zeitbeschränkungen und Risikomanagementprinzipien dazu beitragen, die Handelsdisziplin zu wahren.

Die Strategie ist jedoch auch mit Risiken verbunden, wie z. B. falsche Durchbrüche, unangemessene Bandbreite und Abhängigkeit von bestimmten Preismodellen. Die Stabilität und Adaptivität der Strategie kann durch Optimierung der Bandbreite, Anpassung der Zeitfenster, dynamische Einstellung der Risiko-Rendite-Verhältnis und Integration von Multi-Zeitrahmen-Analysen weiter verbessert werden.

Letztendlich bietet diese Strategie einen systematischen Rahmen für Short-Line-Händler und eignet sich besonders für Investoren, die effiziente Geschäfte während der täglichen Öffnungszeiten tätigen möchten. Wie bei allen Handelsstrategien sollten vor der praktischen Anwendung ausreichende Rückmeldungen und ein angemessenes Risikomanagement durchgeführt werden.

Strategiequellcode
/*backtest
start: 2025-07-22 00:00:00
end: 2025-08-21 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Three-Step 9:30 Range Scalping (Backtest)", overlay=true, calc_on_every_tick=false, process_orders_on_close=true,
     initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)

// -------------------- Inputs
enableBreak    = input.bool(true,  "Enable Break Entry")
enableTrap     = input.bool(false, "Enable Trap Entry")
enableReversal = input.bool(true, "Enable Reversal Entry")
rr             = input.float(2.0,  "Take-Profit R Multiple", step=0.25, minval=0.25)
oneTradePerDay = input.bool(false,  "One Trade Per Day")
showRange      = input.bool(true,  "Show 9:30 5m Range")

// Risk management
riskPct        = input.float(1.0,  "Risk % of Equity per Trade", step=0.1, minval=0.1, maxval=100.0)
sizeMode       = input.string("Risk %", "Position Sizing Mode", options=["Risk %", "Fixed contracts"])
fixedContracts = input.int(1, "Fixed Contracts", minval=1)

// Optional: warn if not on 1-minute chart (execution timeframe per PRD)
onOneMinute = timeframe.isminutes and timeframe.multiplier == 1

// -------------------- Time helpers (chart is assumed New York time)
newDay   = ta.change(time("D")) != 0
// Trade the first hour only: 9:30:00 to 10:29:59
inWindow = (hour == 9 and minute >= 30) or (hour == 10 and minute <= 29)
// Holiday blackout window: Do not trade Dec 15 – Jan 15
inBlackout = (month == 12 and dayofmonth >= 15) or (month == 1 and dayofmonth <= 15)

// -------------------- First 5-min range (use the actual 9:30 5m candle via security())
var float rangeHi = na
var float rangeLo = na
var bool  haveRange = false

// -------------------- State for entries
var bool  breakUpFound           = false
var bool  breakDownFound         = false
var float initBreakUpLow         = na    // for Break/Trap long SL
var float initBreakDownHigh      = na    // for Break/Trap short SL
var bool  trapUpRetestedInside   = false
var bool  trapDownRetestedInside = false
var bool  tradedToday            = false

// Reset daily state at midnight (chart timezone)
if newDay
    rangeHi := na
    rangeLo := na
    haveRange := false
    breakUpFound := false
    breakDownFound := false
    initBreakUpLow := na
    initBreakDownHigh := na
    trapUpRetestedInside := false
    trapDownRetestedInside := false
    tradedToday := false

// Pull the 5-minute bar that STARTS at 9:30 (value available on its close at 9:35)
sess0930Hi = request.security(syminfo.tickerid, "5", (hour == 9 and minute == 30) ? high : na, barmerge.gaps_off, barmerge.lookahead_off)
sess0930Lo = request.security(syminfo.tickerid, "5", (hour == 9 and minute == 30) ? low  : na, barmerge.gaps_off, barmerge.lookahead_off)

// Lock the range when the 9:30 5m candle closes (value appears non-na exactly then)
if not haveRange and not na(sess0930Hi) and not na(sess0930Lo)
    rangeHi := sess0930Hi
    rangeLo := sess0930Lo
    haveRange := true
    // reset session-specific flags at start of trading window
    breakUpFound := false
    breakDownFound := false
    initBreakUpLow := na
    initBreakDownHigh := na
    trapUpRetestedInside := false
    trapDownRetestedInside := false
    tradedToday := false

// -------------------- Visuals
plot(showRange and haveRange ? rangeHi : na, "Range High", color=color.new(color.teal, 0), style=plot.style_linebr, linewidth=2)
plot(showRange and haveRange ? rangeLo : na, "Range Low",  color=color.new(color.orange, 0), style=plot.style_linebr, linewidth=2)

plotchar(not onOneMinute, title="Use 1-minute chart", char="⚠", location=location.top, color=color.new(color.red, 0), size=size.tiny)
plotchar(inBlackout, title="Holiday blackout (Dec 15–Jan 15)", char="⛔", location=location.top, color=color.new(color.red, 0), size=size.tiny)

// -------------------- Convenience conditions
closeAbove  = haveRange and close > rangeHi
closeBelow  = haveRange and close < rangeLo
closeInside = haveRange and close <= rangeHi and close >= rangeLo

// Track first body-close outside the range in each direction (initial break-close)
if haveRange and inWindow and not tradedToday
    if not breakUpFound and closeAbove
        breakUpFound := true
        initBreakUpLow := low
        trapUpRetestedInside := false
    if not breakDownFound and closeBelow
        breakDownFound := true
        initBreakDownHigh := high
        trapDownRetestedInside := false

// Trap retest flags (retest back inside after first break)
if haveRange and inWindow and not tradedToday
    if breakUpFound and not trapUpRetestedInside and closeInside
        trapUpRetestedInside := true
    if breakDownFound and not trapDownRetestedInside and closeInside
        trapDownRetestedInside := true

// -------------------- FVG detectors (three-candle imbalance)
// Simple wick-gap definition, preserved through the third candle
// Bullish: gap exists if Candle C low > Candle A high AND Candle B low > Candle A high
// Bearish: gap exists if Candle C high < Candle A low  AND Candle B high < Candle A low
bullFVG = not na(high[2]) and (low[1] > high[2]) and (low > high[2])
bearFVG = not na(low[2])  and (high[1] < low[2])  and (high < low[2])

// -------------------- Entry gating
allowEntry = haveRange and inWindow and not inBlackout and strategy.position_size == 0 and (not oneTradePerDay or not tradedToday)

// Calculate contracts based on selected sizing mode
calcOrderQty(entryPrice, stopPrice) =>
    qty = 0
    if sizeMode == "Fixed contracts"
        qty := fixedContracts
    else
        riskCash = strategy.equity * riskPct / 100.0
        riskPerContract = math.abs(entryPrice - stopPrice) * syminfo.pointvalue
        qty := riskPerContract > 0 ? math.floor(riskCash / riskPerContract) : 0
    qty

// -------------------- BREAK Entries (needs FVG and ANY of the 3 bars closes outside)
if enableBreak and allowEntry
    // Long BREAK
    breakLongOk  = bullFVG and (close > rangeHi or close[1] > rangeHi or close[2] > rangeHi)
    if breakLongOk
        // Stop at the FIRST candle that closed outside among the 3 FVG candles
        float stopL = na
        stopL := close[2] > rangeHi ? low[2] : stopL
        stopL := na(stopL) and close[1] > rangeHi ? low[1] : stopL
        stopL := na(stopL) and close > rangeHi ? low : stopL
        entryL = close
        if entryL > stopL
            tpL = entryL + rr * (entryL - stopL)
            qtyL = calcOrderQty(entryL, stopL)
            if qtyL > 0
                strategy.entry("LONG_BREAK", strategy.long, qty=qtyL)
                strategy.exit("LONG_BREAK_TP/SL", from_entry="LONG_BREAK", stop=stopL, limit=tpL)
                tradedToday := oneTradePerDay ? true : tradedToday
    // Short BREAK
    breakShortOk = bearFVG and (close < rangeLo or close[1] < rangeLo or close[2] < rangeLo)
    if breakShortOk
        // Stop at the FIRST candle that closed outside among the 3 FVG candles
        float stopS = na
        stopS := close[2] < rangeLo ? high[2] : stopS
        stopS := na(stopS) and close[1] < rangeLo ? high[1] : stopS
        stopS := na(stopS) and close < rangeLo ? high : stopS
        entryS = close
        if entryS < stopS
            tpS = entryS - rr * (stopS - entryS)
            qtyS = calcOrderQty(entryS, stopS)
            if qtyS > 0
                strategy.entry("SHORT_BREAK", strategy.short, qty=qtyS)
                strategy.exit("SHORT_BREAK_TP/SL", from_entry="SHORT_BREAK", stop=stopS, limit=tpS)
                tradedToday := oneTradePerDay ? true : tradedToday

// -------------------- TRAP Entries (Break → Retest inside → Reclose outside; FVG not required)
if enableTrap and allowEntry
    // Long TRAP
    if breakUpFound and trapUpRetestedInside and closeAbove
        stopL  = na(initBreakUpLow) ? low : initBreakUpLow
        entryL = close
        if entryL > stopL
            tpL = entryL + rr * (entryL - stopL)
            qtyL = calcOrderQty(entryL, stopL)
            if qtyL > 0
                strategy.entry("LONG_TRAP", strategy.long, qty=qtyL)
                strategy.exit("LONG_TRAP_TP/SL", from_entry="LONG_TRAP", stop=stopL, limit=tpL)
                tradedToday := oneTradePerDay ? true : tradedToday
    // Short TRAP
    if breakDownFound and trapDownRetestedInside and closeBelow
        stopS  = na(initBreakDownHigh) ? high : initBreakDownHigh
        entryS = close
        if entryS < stopS
            tpS = entryS - rr * (stopS - entryS)
            qtyS = calcOrderQty(entryS, stopS)
            if qtyS > 0
                strategy.entry("SHORT_TRAP", strategy.short, qty=qtyS)
                strategy.exit("SHORT_TRAP_TP/SL", from_entry="SHORT_TRAP", stop=stopS, limit=tpS)
                tradedToday := oneTradePerDay ? true : tradedToday

// -------------------- REVERSAL Entries (Failed break + opposite FVG back into range)
if enableReversal and allowEntry
    // After bearish break, bullish FVG back into range → LONG
    if breakDownFound and bullFVG and closeInside
        stopL  = low[2]  // first candle of the FVG
        entryL = close
        if entryL > stopL
            tpL = entryL + rr * (entryL - stopL)
            qtyL = calcOrderQty(entryL, stopL)
            if qtyL > 0
                strategy.entry("LONG_REV", strategy.long, qty=qtyL)
                strategy.exit("LONG_REV_TP/SL", from_entry="LONG_REV", stop=stopL, limit=tpL)
                tradedToday := oneTradePerDay ? true : tradedToday
    // After bullish break, bearish FVG back into range → SHORT
    if breakUpFound and bearFVG and closeInside
        stopS  = high[2] // first candle of the FVG
        entryS = close
        if entryS < stopS
            tpS = entryS - rr * (stopS - entryS)
            qtyS = calcOrderQty(entryS, stopS)
            if qtyS > 0
                strategy.entry("SHORT_REV", strategy.short, qty=qtyS)
                strategy.exit("SHORT_REV_TP/SL", from_entry="SHORT_REV", stop=stopS, limit=tpS)
                tradedToday := oneTradePerDay ? true : tradedToday

// -------------------- Markers
plotshape(enableBreak and (bullFVG and (close > rangeHi or close[1] > rangeHi or close[2] > rangeHi)) and allowEntry,  title="Break Long",  style=shape.triangleup,   color=color.new(color.teal, 0),   size=size.tiny, location=location.belowbar, text="Break")
plotshape(enableBreak and (bearFVG and (close < rangeLo or close[1] < rangeLo or close[2] < rangeLo)) and allowEntry,  title="Break Short", style=shape.triangledown, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Break")
plotshape(enableTrap  and breakUpFound   and trapUpRetestedInside   and closeAbove and allowEntry,  title="Trap Long",  style=shape.circle, color=color.new(color.teal, 0),   size=size.tiny, location=location.belowbar, text="Trap")
plotshape(enableTrap  and breakDownFound and trapDownRetestedInside and closeBelow and allowEntry,  title="Trap Short", style=shape.circle, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Trap")
plotshape(enableReversal and breakDownFound and bullFVG and closeInside and allowEntry, title="Reversal Long",  style=shape.diamond, color=color.new(color.teal, 0),   size=size.tiny, location=location.belowbar, text="Rev")
plotshape(enableReversal and breakUpFound   and bearFVG and closeInside and allowEntry, title="Reversal Short", style=shape.diamond, color=color.new(color.orange, 0), size=size.tiny, location=location.abovebar, text="Rev")