
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.
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:
Markierung zwischen 00:00 und 09:30 Uhr:
Suche nach einem Einstiegspunkt (nur eine Stunde nach Börsenöffnung): Die Strategie bietet drei verschiedene Eintrittsmöglichkeiten:
Einbruch:
Trap Entry (auch bekannt als Trap Entry):
Reversal Entry (auch bekannt als “Reversal Entry”):
Geschäftsführung:
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.
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.
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.enableBreak、enableTrapUndenableReversalDie Parameter ermöglichen diese Flexibilität.
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.
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.
Keine komplizierten KennzahlenDie Strategie beruht nicht auf komplexen technischen Indikatoren, sondern auf reiner Preisbewegung und -struktur, wodurch das Risiko einer Überangleichung verringert wird.
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.
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.
Falsche DurchbruchgefahrDie Strategie integriert Trap- und Reverse-Entrance-Mode, um dieses Risiko zu mildern, muss jedoch sorgfältig überwacht werden.
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.
Opportunitätskosten durch zeitliche EinschränkungenEs ist jedoch auch eine Art Disziplin, um zu verhindern, dass zu viel gehandelt wird.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Anpassung an die SchadensausfallDie Anpassung des Stop-Loss-Niveaus an die dynamischen Marktschwankungen kann die Anpassungsfähigkeit der Strategie in unterschiedlichen Marktumgebungen verbessern.
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.
/*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")