Estrategia de tendencia del concepto de dinero inteligente


Fecha de creación: 2025-12-04 15:57:27 Última modificación: 2025-12-04 15:57:27
Copiar: 4 Número de Visitas: 178
2
Seguir
413
Seguidores

Estrategia de tendencia del concepto de dinero inteligente Estrategia de tendencia del concepto de dinero inteligente

SMC, FVG, BOS, OB, EMA

No es un análisis técnico normal, es un pensamiento transaccional a nivel de la institución.

El análisis técnico tradicional ya está obsoleto. Esta estrategia de SMC replica directamente el modo de pensar de los operadores institucionales: busca puntos de captura de liquidez, identifica bloques de órdenes y captura la destrucción de la estructura del mercado. Los datos de retrospectiva muestran que el uso de un ciclo de 15 minutos en el par BTC / EUR, junto con un filtro de tendencia de 1 hora en EMA200, ofrece una rentabilidad ajustada al riesgo claramente superior a la estrategia de indicadores tradicionales.

La clave está en el mecanismo de confirmación múltiple: brecha de valor justo (FVG) + destrucción de la estructura del mercado (BOS) + captura de liquidez + zona de descuento/prima del 50% de Fibonacci. No se trata de una pila de indicadores técnicos, sino de una interpretación precisa de la microestructura del mercado.

2 euros de riesgo fijo, pero el potencial de ganancias es 3 veces el riesgo

La gestión de riesgos es directamente eficiente: cada operación se fija en un riesgo de 2 euros, independientemente de la volatilidad del mercado. La distancia de parada se calcula automáticamente, lo que garantiza una constante de riesgo. La relación de ganancias y pérdidas se bloquea en 1:3, lo que significa que una ganancia del 33.4% puede alcanzar un equilibrio de ganancias y pérdidas, y cualquier ganancia superior a este número es una ganancia neta.

La posición mínima es de 0.00001 BTC, la posición máxima es de 0.01 BTC, se adapta perfectamente al tamaño de los fondos minoristas. No se asume un riesgo innecesario por tener una posición demasiado grande, ni se pierde una oportunidad por tener una posición demasiado pequeña. Este método de gestión de fondos es más estable que el modelo tradicional de riesgo porcentual.

El filtro de tendencias es clave, el 87.5% de las señales falsas se filtran directamente

Las señales de SMC en solitario son propensas a fallar con frecuencia en mercados convulsivos. Esta estrategia incluye el EMA200 de 1 hora como un filtro de tendencia: la señal de multitud solo se ejecuta cuando el precio de 15 minutos está por encima del EMA200 de 1 hora, en cambio, se ejecuta la señal de vacío.

Este diseño reduce directamente la aplicabilidad de la estrategia de “todo el mercado” a “mercado de tendencia”, aunque reduce la frecuencia de las operaciones, pero mejora considerablemente la calidad de la señal. Durante la revisión horizontal, la estrategia detiene automáticamente las operaciones para evitar el consumo de fondos en fluctuaciones ineficaces.

Lógica de identificación de bloques de pedidos: la memoria de precios de las agencias

Los bloques de orden no son soportes de resistencia, sino zonas de precios en las que los grandes fondos de la institución han estado activos. La estrategia identifica los bloques de orden efectivos mediante las siguientes condiciones:

Bloque de pedidos múltiple: la línea K anterior es negativa + Existe un FVG hacia arriba + El precio ha roto los mínimos de la oscilación previa + Existe una liquidez hacia abajo + El precio actual está en la zona de descuento de Fibonacci por debajo del 50%.

Bloque de pedidos en blanco: la línea K anterior es la línea de sol + Existe un FVG a la baja + Precios bajan los picos de oscilación previos + Existe una liquidez ascendente + Precios actuales en la zona de prima superior al 50% de Fibonacci.

Cada condición tiene su lógica: el signo del sol/sol indica la presión direccional, el signo del sol muestra el desequilibrio de la liquidez, el BOS confirma el cambio de estructura, la liquidez busca la participación de la agencia de certificación, y la zona de descuento/premio ofrece el mejor momento de entrada.

Movilidad de la caza: 0.1% de la capacidad de captura para detener la caza

El 90% de los paros minoristas en el mercado se sitúan en áreas de resistencia de soporte obvio. Los fondos de las instituciones impulsan deliberadamente los precios a tocar estas áreas, lo que desencadena una operación de reversión después de una gran cantidad de paros. La estrategia identifica este tipo de caza de liquidez a través de una tolerancia de precio del 0,1%.

Cuando el precio mínimo en 7 períodos es inferior al mínimo actual en más del 0.1%, se confirma la existencia de liquidez por debajo. Este diseño evita errores de juicio demasiado sensibles, mientras que se asegura que la verdadera captura de liquidez no se pierda.

Confirmación del punto de oscilación: 4 ciclos de retardo a cambio de la fiabilidad de la señal

La estrategia utiliza una longitud de oscilación de 4 ciclos para confirmar los puntos altos y bajos, lo que significa que se necesita esperar 4 líneas K para confirmar un punto de oscilación. Esta demora es un costo necesario: un período de confirmación demasiado corto produce una gran cantidad de puntos de oscilación falsos, y un período de confirmación demasiado largo pierde su validez.

4 ciclos en un gráfico de 15 minutos equivale a una hora de confirmación, lo que garantiza la efectividad de los puntos de oscilación y no se retrasa demasiado con los cambios en el mercado. Este parámetro, optimizado con una gran cantidad de retroalimentación, es el punto de equilibrio óptimo entre eficiencia y precisión.

Este es un mensaje de riesgo estricto: no es la copa sagrada, hay que ser estricto

El retroceso histórico no representa ganancias futuras, y cualquier estrategia tiene la posibilidad de pérdidas continuas. Las estrategias de SMC tienen un rendimiento excelente en mercados de tendencia fuerte, pero la calidad de la señal disminuye en mercados de turbulencia. Incluso con filtros de tendencia, no se pueden evitar completamente los falsos reveses y el ruido del mercado.

Las estrategias requieren una estricta cualidad psicológica: hay que aceptar pérdidas de 2 euros por partida, hay que ejecutar con decisión cuando aparecen señales, hay que tener paciencia cuando no hay señales. Cualquier operación emocional puede destruir la ventaja estadística de la estrategia.

Se recomienda realizar simulaciones de trading por lo menos 3 meses antes de las operaciones reales, para asegurar una comprensión completa de la lógica de la estrategia y las características de riesgo. Recuerde: la estructura del mercado cambia, y ninguna estrategia es válida para siempre.

Código Fuente de la Estrategia
/*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