
Die Strategie definiert zunächst die Preisspanne zu Beginn des Handelstages (in der Regel 5 Minuten nach der Eröffnung) und sucht dann nach der Situation, in der der Preis die Grenze dieses Bereichs durchbricht und sich mit der Fair-Value-Lücke verbindet, um als Handelssignal zu dienen. Die Strategie ist für den Tageshandel innerhalb einer bestimmten Zeitdauer, insbesondere für die regulären Handelszeiten des US-Marktes, konzipiert und kontrolliert die Risiken für jeden Handel durch eine Risikomanagement-Mechanik.
Die Kernprinzipien der Strategie basieren auf zwei wichtigen Konzepten der technischen Analyse:
Ein Durchbruch in der Open-Band-Bereich (ORB)- Die Strategie ermittelt zunächst die höchsten und niedrigsten Preise innerhalb eines bestimmten Zeitraums (default: 5 Minuten) nach der Eröffnung des Handelstages, um eine Preisspanne zu bilden. Diese Spanne wird als ein vorläufiges Urteil der Marktteilnehmer über die Preisentwicklung des Tages angesehen. Ein Durchbruch dieser Spanne kann die Bildung eines kurzfristigen Trends anzeigen.
Fair Value Gap (FVG)- Aus der SMC-Analysemethode wird ein bullisher FVG gebildet, wenn der aktuelle Hoch unter dem vorherigen Hoch liegt, und ein bearisher FVG, wenn der aktuelle Tief über dem vorherigen Hoch liegt. Diese Lücken werden als Zonen betrachtet, in denen sich die Preise in der Zukunft ausgleichen können, und stellen eine Ungleichgewichtung in der Marktstruktur dar.
Die Handelssignale für die Strategie entstehen unter folgenden Bedingungen:
Bei der Ausführung von Geschäften verwendet die Strategie eine risikobasierte Position-Management-Methode, bei der die spezifische Positiongröße für jeden Handel nach der Stop-Loss-Distanz berechnet wird, um sicherzustellen, dass die Risikogrenze für jeden Handel einheitlich ist. Der Stop-Loss wird auf den vorherigen tiefen Punkt für mehrere Geschäfte oder den vorherigen hohen Punkt für einen Leerverkauf gesetzt.
Kombination von mehreren Methoden der technischen Analyse- Durch die Integration von ORB- und FVG-Technischen Analysemethoden kann die Strategie die falschen Signale, die ein einzelner Indikator erzeugen könnte, filtern und die Qualität der Handelssignale verbessern.
Genaue Zeitrahmen für den Handel- Die Strategie definiert einen klar definierten Zeitrahmen für den Handel (Signalphasen und Handelsphasen), der es dem Händler ermöglicht, sich auf die Zeiten zu konzentrieren, in denen der Markt am aktivsten und mit der höchsten Signalqualität ist, um ungültige Geschäfte in Zeiten mit niedrigerer Aktivität zu vermeiden.
Risikobasierte Positionsführung- Die Strategie nutzt eine risikobasierte Methode zur Berechnung von Positionen, um sicherzustellen, dass der Anteil des Risikos pro Transaktion an der Gesamthöhe des Kontos einheitlich ist (default 1%), was der langfristigen Kapitalverwaltung und Risikokontrolle dient.
Flexible Parameterkonfiguration- Die Strategie bietet mehrere anpassbare Parameter, darunter die Einstellung der Handelszeit, die ORB-Dauer, die Dauer der Signalphase, das Risiko-Risiko-Risiko-Risiko-Risiko-Risiko-Risiko, so dass der Händler die Optimierung für verschiedene Märkte und persönliche Risikopräferenzen durchführen kann.
Visuelle Unterstützung- Die Strategie bietet zahlreiche visuelle Elemente, darunter die ORB-Horizontlinie, Handelssignalmarkierungen, Hintergrundhellungen für verschiedene Handelszeiten und Echtzeit-Statistiktabellen, die es dem Händler erleichtern, die Strategie zu überwachen und zu analysieren.
Unterstützung für mehrsprachige Verwaltung- Strategiegestaltung unterstützt die gleichzeitige Haltung mehrerer Handelspositionen (kontrolliert durch Pyramiding-Parameter), die es ermöglicht, mehrere Handelschancen am selben Handelstag zu erfassen und die Effizienz der Kapitalnutzung zu erhöhen.
Abhängigkeit von bestimmten Märkten- Die Strategie ist hauptsächlich für die regulären Handelszeiten der US-Börse konzipiert und kann in anderen Märkten oder Handelszeiten nicht wirksam sein. Die Öffnungsmerkmale und die Volatilitätsmuster in verschiedenen Märkten sind sehr unterschiedlich und erfordern eine gezielte Anpassung der Parameter.
Parameterempfindlichkeit- Die Strategie-Performance ist auf mehrere wichtige Parameter wie ORB-Dauer, Signalzeit und Risiko-Rendite-Ratio empfindlich. Die falsche Parameter-Einstellung kann zu übertriebenen oder verpassten Handelschancen führen.
Marktabhängigkeit- Strategie-Performance kann in einem hoch- oder niedrig-volatilen Marktumfeld ungleichmäßig sein. Besonders in einem niedrig-volatilen Markt kann die ORB-Bereich zu eng sein, was zu häufigen falschen Durchbruchsignalen führt.
Stop-Loss-Risiken- Strategie, die den Höhen-/Tiefenwert des vorherigen Strichs als Stop-Position verwendet, was in schnellen Märkten dazu führen kann, dass die Stop-Position zu breit wird, was zu einem niedrigeren Risiko-Rendite-Verhältnis oder zu einer zu kleinen Positionsgröße führt.
Abhängigkeit von historischen Preismodellen- Die Strategie geht davon aus, dass FVG-Regionen und ORB-Breakthroughs prognostizierbar sind, aber die Effektivität dieser Modelle durch Erhöhung der Markteffizienz oder Veränderungen des Handelsumfelds beeinträchtigt werden kann.
Technische Ausführungsrisiken- Probleme mit Ausrutschpunkten, Verzögerungen bei der Ausführung von Aufträgen und anderen Problemen, die die Übereinstimmung der tatsächlichen Transaktionsergebnisse mit den Rückmeldungen beeinträchtigen können.
Dauer der dynamischen ORB- Es kann in Betracht gezogen werden, die Dauer der ORBs automatisch an die Marktvolatilität anzupassen, z. B. die Verwendung einer längeren ORB-Zeit in einem hochvolatilen Marktumfeld, um falsche Durchbrüche zu vermeiden, und die Verkürzung der ORB-Zeit in einem niedrigvolatilen Umfeld, um mehr Handelsmöglichkeiten zu erfassen.
Filterbedingungen hinzufügen- Einführung zusätzlicher Filterbedingungen zur Verbesserung der Signalqualität, z. B. in Verbindung mit der Richtung des Gesamtmarkttrends ((nur in einem Aufwärtstrend mehr machen, in einem Abwärtstrend leer machen) oder Hinzufügung von Transaktionsbestätigungen ((nur handeln, wenn ein Durchbruch mit einer Erhöhung des Transaktionsvolumens einhergeht)).
Optimierung der Stop-Loss-Position- Erwägen Sie, dynamische Stop-Loss-Einstellungen basierend auf ATR oder Volatilität zu verwenden, anstelle der derzeitigen Fix-Stop-Methode, die auf dem vorherigen Hoch-Low-Punkt basiert, um möglicherweise eine vernünftigere Risikokontrolle zu gewährleisten.
Hinzufügen von Teilen der Gewinnmechanismen- Implementierung von Segmentierungsstrategien, z. B. Ausgleich von Positionen, wenn ein 1:1-Risiko-Rendite-Verhältnis erreicht wird, und Einrichtung von Stop-Loss- oder weiteren Gewinnzielen für die übrigen Positionen, um die Notwendigkeit von Gewinnschließungen und Trendverfolgung auszugleichen.
Zeit-Filter- Setzen Sie einen Zeitfilter ein, um bekannte Zeiten mit niedriger Qualität zu vermeiden, wie z. B. die schwache Periode der Mittagspause oder die hohe Periode vor und nach der Veröffentlichung wichtiger Wirtschaftsdaten.
Erhöhung der Adaptionsparameter- Die Einführung von Adaptionsparametern, die es der Strategie ermöglichen, Parameter automatisch an die jüngste Marktentwicklung anzupassen, z. B. die Risiko-Rendite-Rate dynamisch anzupassen oder die Risiko-Prozentzahl an die jüngste Gewinnrate anzupassen.
Die Strategie der Kombination von Breakout-Off-Bereich und Fair Value Gap ist ein sorgfältig konzipiertes Intra-Day-Trading-System, das durch die Kombination von ORB- und FVG-Technischen Analysemethoden nach hochprobablen Handelsmöglichkeiten sucht. Die Strategie läuft innerhalb von klar definierten Handelszeiten, verwendet eine risikobasierte Position-Management-Methode und bietet eine Fülle von Visualisierungs- und Statistikwerkzeugen zur Unterstützung von Handelsentscheidungen.
Die Hauptvorteile der Strategie liegen in ihrer klaren Handelslogik, flexiblen Parameter-Einstellung und umfassenden Risikomanagement-Mechanismen. Die Strategie ist jedoch auch mit Risiken wie Marktabhängigkeit, Parameter-Sensitivität und Marktzustandsabhängigkeit konfrontiert.
Es ist zu beachten, dass die Strategie nicht für alle Marktumgebungen und alle Handelsarten geeignet ist. Der Händler sollte vor der praktischen Anwendung ausreichende Rück- und Vorlauftests durchführen, um sicherzustellen, dass die Strategie mit seinen Risikopräferenzen und Handelszielen übereinstimmt. Durch kontinuierliche Optimierung und Anpassung an Marktveränderungen hat die Strategie das Potenzial, ein wirksames Werkzeug im Werkzeugkasten des Daytrader zu werden.
/*backtest
start: 2025-06-18 00:00:00
end: 2025-06-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// Based on https://www.youtube.com/watch?v=mzFXoK2pbNE
//@version=5
strategy("[Myth Busting] [ORB] Casper SMC - 16 Jun", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, pyramiding = 10)
// Input settings
show_orb = input.bool(true, "Show 5m Opening Range")
show_signals = input.bool(true, "Show FVG Intersection Signals")
show_stats = input.bool(true, "Show Statistics Table")
risk_per_trade = input.float(1.0, "Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1)
use_stop_loss = input.bool(true, "Use Stop Loss")
use_take_profit = input.bool(true, "Use Take Profit")
risk_reward_ratio = input.float(2.0, "Risk:Reward Ratio", minval=1.0, step=0.1)
// Session time inputs
session_start_hour = input.int(9, "Session Start Hour", minval=0, maxval=23, group="Session Settings")
session_start_minute = input.int(30, "Session Start Minute", minval=0, maxval=59, group="Session Settings")
session_end_hour = input.int(16, "Session End Hour", minval=0, maxval=23, group="Session Settings")
session_end_minute = input.int(0, "Session End Minute", minval=0, maxval=59, group="Session Settings")
session_timezone = input.string("America/New_York", "Session Timezone", group="Session Settings")
orb_duration_minutes = input.int(5, "ORB Duration (Minutes)", minval=1, maxval=60, group="Session Settings")
signal_end_offset = input.int(90, "Signal Period Duration (Minutes)", minval=30, maxval=300, group="Session Settings")
// Style settings
orb_high_color = input.color(color.new(color.green, 50), "ORB High Color")
orb_low_color = input.color(color.new(color.red, 50), "ORB Low Color")
bullish_signal_color = input.color(color.green, "Bullish Signal Color")
bearish_signal_color = input.color(color.red, "Bearish Signal Color")
// Variables to store ORB levels
var float orb_high = na
var float orb_low = na
var int orb_start_time = na
var int orb_end_time = na
var bool orb_set = false
// Position tracking
var int position_counter = 0
var int active_positions = 0
// Function to get current time in specified timezone
get_session_time() =>
current_hour = hour(time, session_timezone)
current_minute = minute(time, session_timezone)
current_hour * 60 + current_minute
// Calculate session times in minutes
session_start_minutes = session_start_hour * 60 + session_start_minute
session_end_minutes = session_end_hour * 60 + session_end_minute
orb_end_minutes = session_start_minutes + orb_duration_minutes
signal_end_minutes = session_start_minutes + signal_end_offset
// Check if we're in the ORB period
is_orb_period() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < orb_end_minutes
// Check if we're in the signal period
is_signal_period() =>
current_time = get_session_time()
current_time >= orb_end_minutes and current_time < signal_end_minutes
// Check if we're in the overall trading session
is_trading_session() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < session_end_minutes
// Reset ORB at the start of each trading session
new_session = is_trading_session() and not is_trading_session()[1]
if new_session or ta.change(dayofweek)
orb_high := na
orb_low := na
orb_start_time := na
orb_end_time := na
orb_set := false
position_counter := 0
// Capture ORB levels during the ORB period
if is_orb_period()
if na(orb_high) or na(orb_low)
orb_high := high
orb_low := low
orb_start_time := time
else
orb_high := math.max(orb_high, high)
orb_low := math.min(orb_low, low)
orb_end_time := time
// Mark ORB as set after the period ends
if not is_orb_period() and not na(orb_high) and not orb_set
orb_set := true
// Fair Value Gap detection
bullish_fvg = high[2] < low and not na(orb_high)
bearish_fvg = low[2] > high and not na(orb_low)
// Check for FVG intersection with ORB boundaries during signal period
bullish_intersection = false
bearish_intersection = false
// Count active positions
active_positions := strategy.opentrades
if is_signal_period() and orb_set
// Bullish FVG intersecting upper boundary
if bullish_fvg
if open[1] <= orb_high and close[1] >= orb_high
bullish_intersection := true
// Bearish FVG intersecting lower boundary
if bearish_fvg
if open[1] >= orb_low and close[1] <= orb_low
bearish_intersection := true
// Calculate position size based on risk per trade
calculate_position_size(entry, stop, is_long) =>
risk_amount = strategy.equity * (risk_per_trade / 100)
price_diff = is_long ? entry - stop : stop - entry
position_size = risk_amount / price_diff
position_size
// Strategy execution - Modified for multiple positions
if bullish_intersection
position_counter += 1
entry_price = close
stop_loss_price = low[1]
risk = entry_price - stop_loss_price
take_profit_price = entry_price + (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, true)
// Create unique entry ID
entry_id = "Long_" + str.tostring(position_counter)
exit_id = "LongExit_" + str.tostring(position_counter)
// Enter long position
strategy.entry(entry_id, strategy.long, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
if bearish_intersection
position_counter += 1
entry_price = close
stop_loss_price = high[1]
risk = stop_loss_price - entry_price
take_profit_price = entry_price - (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, false)
// Create unique entry ID
entry_id = "Short_" + str.tostring(position_counter)
exit_id = "ShortExit_" + str.tostring(position_counter)
// Enter short position
strategy.entry(entry_id, strategy.short, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
// Close all positions at end of trading session
if not is_trading_session() and strategy.position_size != 0
strategy.close_all("End of Trading Session")
// Plot ORB levels
plot(show_orb and orb_set ? orb_high : na, "ORB High", color=orb_high_color, linewidth=2, style=plot.style_line)
plot(show_orb and orb_set ? orb_low : na, "ORB Low", color=orb_low_color, linewidth=2, style=plot.style_line)
// Plot intersection signals
plotshape(series=show_signals and bullish_intersection, title="Bullish FVG Intersection", style=shape.triangleup, location=location.belowbar, color=bullish_signal_color, size=size.normal)
plotshape(series=show_signals and bearish_intersection, title="Bearish FVG Intersection", style=shape.triangledown, location=location.abovebar, color=bearish_signal_color, size=size.normal)
// Background highlights for different session periods
bgcolor(is_orb_period() ? color.new(color.yellow, 90) : na, title="ORB Period")
bgcolor(is_signal_period() and orb_set ? color.new(color.blue, 95) : na, title="Signal Period")
bgcolor(is_trading_session() and not is_signal_period() and not is_orb_period() ? color.new(color.gray, 98) : na, title="Trading Session")
// Plot session boundaries
plot(is_trading_session() ? high : na, "Session High", color=color.new(color.orange, 80), linewidth=1)
plot(is_trading_session() ? low : na, "Session Low", color=color.new(color.orange, 80), linewidth=1)