
Une stratégie de négociation quantitative qui combine une rupture de la zone d’ouverture (ORB) et une rupture de la juste valeur (FVG) dans les concepts de fonds intelligents (SMC). La stratégie définit d’abord la zone de prix au début de la journée de négociation (généralement 5 minutes après l’ouverture) et cherche ensuite la situation où le prix franchit la frontière de la zone et se trouve à la croisée de la porte de la juste valeur comme signal de négociation. La stratégie est conçue pour les transactions intra-journalières sur une période donnée, en particulier les heures de négociation habituelles sur le marché américain, et contrôle la faille de risque de chaque transaction grâce à un mécanisme de gestion des risques.
Les principes centraux de cette stratégie reposent sur deux concepts clés de l’analyse technique:
Bénéfices de l’ORB- La stratégie détermine d’abord le prix le plus élevé et le prix le plus bas pendant une période donnée (en 5 minutes par défaut) après l’ouverture de la journée de négociation, formant une fourchette de prix. Cette fourchette est considérée comme un jugement préliminaire des acteurs du marché sur l’évolution des prix de la journée, et la rupture de cette fourchette peut indiquer la formation d’une tendance à court terme.
La faille de juste valeur (FVG)- une méthode d’analyse tirée du concept de Smart Money (SMC), qui forme un FVG haussier lorsque le sommet actuel est inférieur au sommet du sommet précédent et un FVG baissier lorsque le sommet actuel est supérieur au sommet du sommet précédent. Ces lacunes sont considérées comme des zones où les prix sont susceptibles de se rattraper à l’avenir et représentent des déséquilibres dans la structure du marché.
Les signaux de négociation de la stratégie sont générés par les conditions suivantes:
Lors de l’exécution des transactions, la stratégie utilise une méthode de gestion de position basée sur le risque, calculant la taille de la position spécifique de chaque transaction en fonction de la distance de stop-loss, afin de s’assurer que le seuil de risque de chaque transaction est cohérent. Le stop-loss est défini sur le point le plus bas de la transaction précédente ou sur le point le plus élevé de la transaction précédente.
Une combinaison de plusieurs méthodes d’analyse technique- En intégrant les deux méthodes d’analyse technique ORB et FVG, la stratégie est capable de filtrer les faux signaux qui peuvent être générés par un seul indicateur et d’améliorer la qualité des signaux de négociation.
Un calendrier précis pour les transactions- La stratégie définit clairement la période à laquelle les transactions sont effectuées (signal et session), ce qui permet aux traders de se concentrer sur les périodes où le marché est le plus actif et la qualité du signal la plus élevée, et d’éviter les transactions invalides pendant les périodes de faible activité.
Gestion de position basée sur le risque- La stratégie utilise une méthode de calcul de position basée sur le risque, qui garantit que chaque transaction représente un risque proportionnel cohérent au capital total du compte (default 1%), ce qui favorise la gestion des fonds à long terme et le contrôle des risques.
Configuration flexible des paramètres- La stratégie offre plusieurs paramètres réglables, y compris la configuration de la période de négociation, la durée de l’ORB, la durée de la période de signal, le ratio de risque et le ratio de retour sur risque, etc., permettant aux traders d’optimiser en fonction de différents marchés et de leurs préférences personnelles en matière de risque.
Aide visuelle- Les stratégies offrent de nombreux éléments de visualisation, y compris la ligne horizontale ORB, les marqueurs de signaux de négociation, la haute luminosité du fond pour les différentes périodes de négociation et des tableaux de données statistiques en temps réel, qui permettent aux traders de surveiller et d’analyser la mise en œuvre de la stratégie.
Prise en charge de la gestion multipartite- La stratégie de conception prend en charge la détention simultanée de plusieurs positions de négociation (contrôlées par des paramètres de pyramiding), permettant de capturer plusieurs opportunités de négociation au cours d’une même journée de négociation et d’améliorer l’efficacité de l’utilisation des fonds.
Dépendance à un marché spécifique- La stratégie est principalement conçue pour les heures de négociation régulières du marché boursier américain. Elle peut ne pas être efficace dans d’autres marchés ou heures de négociation. Les caractéristiques d’ouverture et les modèles de volatilité des différents marchés sont très variables et nécessitent des paramètres d’ajustement adaptés.
Paramètre Sensibilité- Les performances stratégiques sont sensibles à plusieurs paramètres clés, tels que la durée de l’ORB, la durée de la période de signal et le rapport de retour sur risque. Une mauvaise configuration des paramètres peut entraîner une survente ou une perte d’occasions de trading importantes.
Dépendance du marché- Les performances de la stratégie peuvent être incohérentes dans des environnements de marché à forte ou faible volatilité. En particulier dans les marchés à faible volatilité, les intervalles ORB peuvent être trop étroits, ce qui entraîne fréquemment le déclenchement de faux signaux de rupture.
Risque de défaillance de position- La stratégie utilise le haut/bas de la première barre comme position de stop-loss, ce qui peut entraîner une position de stop-loss trop large dans un marché rapide, ce qui réduit le rapport de risque/rendement ou entraîne une taille de position trop petite.
Dépendance à des modèles de prix historiques- La stratégie suppose que la rupture des zones FVG et ORB est prévisible, mais que l’amélioration de l’efficacité du marché ou le changement de l’environnement de négociation peuvent affaiblir l’efficacité de ces modèles.
Risques de mise en œuvre technique- Dans les transactions réelles, il est possible de rencontrer des problèmes tels que des points de glissement, des retards dans l’exécution des commandes, ce qui affecte la cohérence des résultats des transactions réelles avec les résultats de la rétroanalyse.
Durée de l’ORB dynamique- On peut envisager d’ajuster automatiquement la durée de l’ORB en fonction de la volatilité du marché, par exemple en utilisant une durée d’ORB plus longue dans un environnement de marché à forte volatilité pour éviter de fausses ruptures, et une durée d’ORB plus courte dans un environnement à faible volatilité pour capturer plus d’opportunités de transaction.
Ajouter des conditions de filtrage- l’introduction de conditions de filtrage supplémentaires pour améliorer la qualité du signal, par exemple en combinant la direction de la tendance du marché dans son ensemble ((faire plus dans une tendance à la hausse et moins dans une tendance à la baisse)) ou en ajoutant la confirmation de transaction ((trader uniquement lorsque la rupture est accompagnée d’une augmentation de la transaction))
Optimisation de la position de rupture- Considérer l’utilisation de paramètres de stop-loss dynamiques basés sur l’ATR ou la volatilité, au lieu des méthodes de stop-loss fixes actuelles basées sur les hauts et les bas de la précédente chaîne, qui pourraient offrir une maîtrise des risques plus rationnelle.
Ajout d’un mécanisme de profit partiel- Mettre en œuvre des stratégies de profit par tranches, par exemple en liquidant une partie de la position lorsque le rapport de risque/rendement est de 1:1, et en fixant des objectifs de profit plus éloignés pour le reste, afin d’équilibrer la nécessité de verrouiller les profits et de suivre les tendances.
Filtre par temps- Ajouter un filtre temporel pour éviter les périodes de transactions de qualité inférieure connues, comme les périodes de faible volatilité pendant les heures de déjeuner ou les périodes de forte volatilité avant et après la publication de données économiques importantes.
Ajout de paramètres d’adaptation- l’introduction de paramètres d’adaptation permettant à la stratégie d’ajuster automatiquement les paramètres en fonction de la performance récente du marché, tels que l’ajustement dynamique du taux de rendement du risque ou l’ajustement du pourcentage de risque en fonction du taux de victoire le plus récent.
La stratégie combinant la rupture de la marge d’ouverture et l’écart de juste valeur est un système de négociation intraday soigneusement conçu pour rechercher des opportunités de négociation à haute probabilité en combinant les méthodes d’analyse technique ORB et FVG. La stratégie fonctionne dans des périodes de négociation bien définies, utilise une approche de gestion de position basée sur le risque et fournit une richesse d’outils de visualisation et de statistiques pour aider à la décision de négociation.
Les principaux avantages de la stratégie résident dans sa logique de négociation claire, sa configuration de paramètres flexible et son mécanisme de gestion des risques complet. Cependant, la stratégie est également exposée à des risques tels que la dépendance au marché, la sensibilité aux paramètres et la dépendance aux états du marché.
Il est à noter que la stratégie ne s’applique pas à tous les environnements de marché et à toutes les variétés de transactions. Les traders doivent effectuer des tests de rétroaction et de prospective suffisants avant de l’appliquer réellement, afin de s’assurer que la stratégie est conforme à leurs préférences en matière de risque et à leurs objectifs de trading.
/*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)