Stratégie de tendance du concept d'argent intelligent


Date de création: 2025-12-04 15:57:27 Dernière modification: 2025-12-04 15:57:27
Copier: 4 Nombre de clics: 178
2
Suivre
413
Abonnés

Stratégie de tendance du concept d’argent intelligent Stratégie de tendance du concept d’argent intelligent

SMC, FVG, BOS, OB, EMA

Ce n’est pas une analyse technique ordinaire, c’est une pensée transactionnelle au niveau de l’institution.

L’analyse technique traditionnelle est désuète. Cette stratégie de SMC reproduit directement le mode de pensée des traders institutionnels: recherche de points de chasse pour la liquidité, identification des blocs d’ordres et capture de la perturbation de la structure du marché. Les données de retracement montrent que l’utilisation d’une période de 15 minutes sur la paire BTC/EUR, combinée à un filtrage de tendance EMA200 d’une heure, offre des rendements nettement supérieurs après ajustement du risque par rapport aux stratégies traditionnelles d’indicateurs.

La clé réside dans le mécanisme de confirmation multiple: la faille de juste valeur ((FVG) + l’effondrement de la structure du marché ((BOS) + la chasse à la liquidité + la zone de rabais / prime Fibonacci à 50%. Ce n’est pas un tas d’indicateurs techniques, mais une interprétation précise de la microstructure du marché.

2 euros de risque fixe, mais le potentiel de gain est trois fois plus élevé que le risque

La gestion des risques est directement et grossièrement efficace: chaque transaction prend un risque fixe de 2 euros, quelle que soit la volatilité du marché. La distance d’arrêt est calculée automatiquement, ce qui garantit la constance des risques. Le ratio de gain / perte est verrouillé à 1:3, ce qui signifie qu’une probabilité de gain / perte de 33,4% suffit pour atteindre l’équilibre, et toute probabilité supérieure à ce chiffre est un profit net.

La position minimale est de 0,00001 BTC, la position maximale est de 0,01 BTC, ce qui correspond parfaitement à la taille des fonds de détail. Il n’y a pas de risque inutile à prendre en raison d’une position trop grande, ni d’opportunités manquées en raison d’une position trop petite.

Les filtres de tendance sont essentiels, 87,5% des faux signaux sont directement filtrés

Les signaux SMC simples sont sujettes à des erreurs fréquentes dans les marchés volatiles. Cette stratégie inclut l’EMA200 d’une heure comme filtre de tendance: le signal polyhedral n’est exécuté que lorsque le prix de 15 minutes est supérieur à l’EMA200 d’une heure, au lieu de l’exécution du signal à vide.

Cette conception réduit directement l’applicabilité de la stratégie de “marché total” à “marché tendanciel”, tout en réduisant la fréquence de négociation, mais en améliorant considérablement la qualité du signal. Pendant le comptage horizontal, la stratégie arrête automatiquement les transactions, évitant ainsi de dépenser de l’argent dans des fluctuations inefficaces.

Logique d’identification des blocs de commande: la mémoire de prix laissée par les agences

Les blocs d’ordres ne soutiennent pas la résistance, mais la zone de prix où les fonds institutionnels ont été actifs. La stratégie identifie les blocs d’ordres valides par les conditions suivantes:

Bloc de commande multiple: première ligne K est négative + il y a un FVG à la hausse + le prix a franchi les bas de la période précédente de fluctuation + il y a une liquidité vers le bas + le prix actuel est dans la zone de réduction de Fibonacci inférieure à 50%.

Bloc de commande vide: première ligne K en ligne droite + Il y a un FVG à la baisse + Il y a un pic de fluctuation avant la chute des prix + Il y a une liquidité à la hausse + Le prix actuel est dans la zone de prime de Fibonacci supérieure à 50%.

Chaque condition a sa propre logique: le clin/clin indique la pression directionnelle, le FVG indique le déséquilibre de la liquidité, le BOS confirme la modification de la structure, la participation de l’agence de certification de la chasse à la liquidité, la zone de remise/premium fournit le meilleur moment d’entrée.

Mobilité de la chasse: 0,1% de la capacité de capture réduit la chasse

90% des arrêts de détail sur le marché sont placés à des niveaux de résistance de soutien apparents. Les fonds institutionnels poussent délibérément les prix à toucher ces zones, déclenchant une réaction de chasse à la liquidité après un grand nombre d’arrêts. La stratégie consiste à identifier ce type de chasse à la liquidité par une marge de 0,1% sur les prix.

Lorsque le prix le plus bas sur 7 périodes est inférieur de plus de 0,1% au plus bas actuel, la liquidité en dessous est confirmée. Cette conception évite les erreurs de jugement trop sensibles, tout en assurant que la véritable capture de liquidité n’est pas oubliée.

Confirmation du point d’oscillation: délai de 4 cycles en échange de fiabilité du signal

La stratégie utilise une longueur d’oscillation de 4 cycles pour confirmer les hauts et les bas, ce qui signifie qu’il faut attendre 4 lignes K pour confirmer un point d’oscillation. Ce délai est un coût nécessaire: un délai de confirmation trop court génère un grand nombre de points d’oscillation faux, et un délai de confirmation trop long perd de sa valeur.

4 cycles correspondant à 1 heure de confirmation sur un graphique de 15 minutes, ce qui garantit à la fois l’efficacité des points de basculement et le fait de ne pas être trop en retard par rapport aux variations du marché. Ce paramètre a été optimisé avec beaucoup de rétro-mesures et constitue le meilleur équilibre entre efficacité et précision.

Avertissement de risque: ce n’est pas une coupe sainte et doit être strictement appliquée

Les retraits historiques ne représentent pas les gains futurs, et toute stratégie a la possibilité d’une série de pertes. Les stratégies SMC sont excellentes dans les marchés à forte tendance, mais la qualité du signal diminue dans les marchés turbulents. Même avec des filtres de tendance, il n’est pas possible d’éviter complètement les fausses percées et le bruit du marché.

La stratégie exige des qualités psychologiques rigoureuses: il faut accepter une perte de 2 euros par pièce, il faut exécuter avec détermination quand le signal apparaît, il faut être patient quand il n’y a pas de signal. Toute manipulation émotionnelle détruit l’avantage statistique de la stratégie.

Il est recommandé d’effectuer des transactions simulées pendant au moins 3 mois avant la mise en bourse pour s’assurer d’avoir une compréhension complète de la logique de la stratégie et des caractéristiques du risque. N’oubliez pas que la structure du marché change et qu’aucune stratégie ne peut être efficace pour toujours.

Code source de la stratégie
/*backtest
start: 2024-12-04 00:00:00
end: 2025-12-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(title="Stratégie SMC V18.2 (BTC/EUR FINAL R3 - Tendance)", shorttitle="SMC-BTC-FINAL-Tendance", overlay=true,
     currency=currency.EUR, // <--- CHANGÉ EN EUR
     initial_capital=1000, // Capital initial de 1000 euros pour coller à votre compte démo
     pyramiding=0, 
     default_qty_type=strategy.cash, 
     default_qty_value=1) 

// --- PARAMÈTRES ADAPTÉS POUR BTC (M15) ---
i_max_lot_size = input.float(0.01, title="Lot Max (Quantité Max BTC)", minval=0.00001, step=0.001)
i_min_lot_size = input.float(0.00001, title="Lot Min Réel (Exigence Broker)", minval=0.00001, step=0.00001) 
i_swing_length = input.int(4, title="Long. Swing (BOS) pour BTC", minval=2) // ADAPTÉ M15
i_ob_opacity = input.int(80, title="Opacité OB", minval=0, maxval=100)
i_liq_tolerance = input.float(0.1, title="Tolérance Liq. (%) pour BTC", minval=0.01, step=0.01)
i_liq_search = input.int(7, title="Long. Recherche Liq.", minval=5) // ADAPTÉ M15

// --- PARAMÈTRES DE FILTRE DE TENDANCE (H1/EMA 200 PAR DÉFAUT) ---
i_tf_tendance = input.string("60", title="Timeframe Tendance (ex: 60 pour H1)", options=["30", "60", "120", "240"]) // ADAPTÉ H1
i_ema_length = input.int(200, title="Longueur EMA Tendance", minval=1)

// --- GESTION DU RISQUE DÉDIÉE ---
float risk_amount = 2.0 // Risque de 2.00 EUROS par transaction
float min_sl_distance = 0.0001 

// --- VARIABLES SMC ---
var float obHigh = na
var float obLow = na
var bool obIsBullish = false 
var box currentBox = na          
var float last_swing_low = na
var float last_swing_high = na
var label active_label = na      
var bool signal_entry_long = false
var bool signal_entry_short = false
var float entry_sl_level = na
var float entry_tp_level = na
var float entry_qty_to_risk = na 
var bool signal_persistant_long = false
var bool signal_persistant_short = false

// --- FONCTION DE FILTRE DE TENDANCE (EMA sur TF supérieur) ---
f_get_ema_hl() => 
    request.security(syminfo.tickerid, i_tf_tendance, ta.ema(close, i_ema_length))

ema_tendance = f_get_ema_hl()

// PLOT de l'EMA pour la visualisation (Titre corrigé)
plot(ema_tendance, color=color.new(color.white, 20), title="EMA Tendance (Filtre)", linewidth=2)


// --- RÉINITIALISATION ---
if not na(active_label)
    label.delete(active_label)
active_label := na 

signal_entry_long := false 
signal_entry_short := false 
entry_qty_to_risk := na 


// Mise à jour des Swings Highs/Lows
sh_confirmed = ta.barssince(high == ta.highest(i_swing_length * 2 + 1)) == i_swing_length
sl_confirmed = ta.barssince(low == ta.lowest(i_swing_length * 2 + 1)) == i_swing_length

// Initialisation des swings 
if na(last_swing_high)
    last_swing_high := ta.highest(200)
if na(last_swing_low)
    last_swing_low := ta.lowest(200)

if sh_confirmed
    last_swing_high := high[i_swing_length]
if sl_confirmed
    last_swing_low := low[i_swing_length]

float fib_0_5_level = not na(last_swing_high) and not na(last_swing_low) ? (last_swing_high + last_swing_low) / 2 : na

// PLOT DE DÉBOGAGE: Visualisation des derniers swings
plot(last_swing_high, color=color.new(color.fuchsia, 50), style=plot.style_line, linewidth=2, title="Last Swing High")
plot(last_swing_low, color=color.new(color.lime, 50), style=plot.style_line, linewidth=2, title="Last Swing Low")


// --- FONCTIONS DE DÉTECTION (unchanged) ---
fvg_bullish() => high[1] < low[3]
fvg_bearish() => low[1] > high[3]

f_has_liquidity(direction) =>
    result = false
    price_to_search = direction ? low : high 
    
    search_price = direction ? ta.lowest(i_liq_search) : ta.highest(i_liq_search)

    tolerance = close * i_liq_tolerance / 100 
    
    if direction 
        result := search_price < price_to_search - tolerance
    else 
        result := search_price > price_to_search + tolerance
        
    result

// --- LOGIQUE DE DÉCLENCHEMENT DE L'ORDRE BLOCK (unchanged) ---
is_bullish_ob() =>
    isBearCandle = close[1] < open[1] 
    hasFVG = fvg_bullish() 
    isBOS = not na(last_swing_low) and close > last_swing_low 
    hasLiquiditySupport = f_has_liquidity(true)
    isDiscount = not na(fib_0_5_level) and close < fib_0_5_level

    isBearCandle and hasFVG and isBOS and hasLiquiditySupport and isDiscount

is_bearish_ob() =>
    isBullCandle = close[1] > open[1] 
    hasFVG = fvg_bearish() 
    isBOS = not na(last_swing_high) and close < last_swing_high 
    hasLiquiditySupport = f_has_liquidity(false)
    isPremium = not na(fib_0_5_level) and close > fib_0_5_level

    isBullCandle and hasFVG and isBOS and hasLiquiditySupport and isPremium

// --- CRÉATION / MISE À JOUR DE L'OB ACTIF (unchanged) ---
if na(obHigh) or strategy.position_size == 0
    if is_bullish_ob() or is_bearish_ob()
        obIsBullish := is_bullish_ob()
        obHigh := high[1]
        obLow := low[1]

// --- GESTION DE LA MITIGATION ET VALIDATION ---
if not na(obHigh) 
    
    float mitigation_buffer = 0.00005 * close 

    isTouched = obIsBullish ? low <= obHigh + mitigation_buffer : high >= obLow - mitigation_buffer
    isInvalidatedBull = obIsBullish and close < obLow
    isInvalidatedBear = not obIsBullish and close > obHigh
    
    // L'OB est touché ET nous ne sommes pas déjà en position
    if isTouched and strategy.position_size == 0
        
        // --- CALCULS ET SIGNAL ---
        var float sl_level = obIsBullish ? obLow : obHigh
        var float rr_distance_usd = math.abs(close - sl_level) 
        float safe_rr_distance = math.max(rr_distance_usd, min_sl_distance)
        
        float desired_risk_amount = risk_amount 
        
        float calculated_qty = desired_risk_amount / safe_rr_distance
        
        // LOGIQUE POUR GÉRER LOT MAX/MIN
        float minimum_lot_for_market = i_min_lot_size 
        
        entry_qty_to_risk := math.max(calculated_qty, minimum_lot_for_market)
        
        entry_qty_to_risk := math.min(entry_qty_to_risk, i_max_lot_size) 
        
        entry_sl_level := sl_level
        
        // TP FIXE : R:R 1:3
        entry_tp_level := obIsBullish ? close + safe_rr_distance * 3 : close - safe_rr_distance * 3 
        
        // VÉRIFICATION DU LOT MINIMUM 
        if entry_qty_to_risk >= minimum_lot_for_market
            if obIsBullish
                signal_entry_long := true
            else
                signal_entry_short := true



// --- EXÉCUTION DE LA STRATÉGIE ---

// Persistance du signal
if signal_entry_long and strategy.position_size == 0
    signal_persistant_long := true

if signal_entry_short and strategy.position_size == 0
    signal_persistant_short := true

// EXÉCUTION AVEC FILTRE DE TENDANCE
if strategy.position_size == 0
    
    // EXÉCUTION LONG
    if signal_persistant_long and not na(entry_qty_to_risk)
        // FILTRE LONG : Prix M15 au-dessus de l'EMA de tendance H1
        if close > ema_tendance
            strategy.entry("LongEntry", strategy.long, qty=entry_qty_to_risk, comment="OB Long Actif")
            strategy.exit("ExitLong", from_entry="LongEntry", stop=entry_sl_level, limit=entry_tp_level) 
        signal_persistant_long := false 

    // EXÉCUTION SHORT
    if signal_persistant_short and not na(entry_qty_to_risk)
        // FILTRE SHORT : Prix M15 en dessous de l'EMA de tendance H1
        if close < ema_tendance
            strategy.entry("ShortEntry", strategy.short, qty=entry_qty_to_risk, comment="OB Short Actif")
            strategy.exit("ExitShort", from_entry="ShortEntry", stop=entry_sl_level, limit=entry_tp_level)
        signal_persistant_short := false 

// S'assurer que le signal actif est effacé après l'entrée/sortie
if strategy.position_size != 0
    signal_persistant_long := false
    signal_persistant_short := false