Стратегия, основанная на концепции «умных денег» и трендах.


Дата создания: 2025-12-04 15:57:27 Последнее изменение: 2025-12-04 15:57:27
Копировать: 4 Количество просмотров: 178
2
Подписаться
413
Подписчики

Стратегия, основанная на концепции «умных денег» и трендах. Стратегия, основанная на концепции «умных денег» и трендах.

SMC, FVG, BOS, OB, EMA

Это не обычный технический анализ, это транзакционная мысль на институциональном уровне

Традиционный технический анализ устарел. Этот набор стратегий SMC непосредственно копирует мышление институциональных трейдеров: поиск точек поглощения ликвидности, выявление блоков заказов, захват рыночных структурных сбоев. Отзывные данные показывают, что в паре BTC/EUR используются 15-минутные циклы, совмещенные с 1-часовой EMA200 фильтрацией тенденций, и прибыль после корректировки риска значительно выше, чем в традиционных стратегиях показателей.

Ключевой момент заключается в многократном подтверждении механизма: пробел справедливой стоимости ((FVG) + разрушение структуры рынка ((BOS) + ликвидность охоты + 50% дисконтная/премиальная зона Fibonacci. Это не набор технических показателей, а точная интерпретация микроструктуры рынка.

2 евро фиксированный риск, но потенциал прибыли в 3 раза больше риска

Управление рисками напрямую грубо эффективно: каждая сделка фиксируется на риске 2 евро, независимо от того, насколько сильно рынок колеблется. Стоп-лосс расчет автоматически, чтобы обеспечить постоянный риск. Уровень прибыли и убытка зафиксирован в 1: 3, что означает, что 33.4% шансов достичь прибыли и убытка баланса, любая победа выше этого числа является чистой прибылью.

Минимальная позиция 0.00001 BTC, максимальная позиция 0.01 BTC, идеально подходит для розничного капитала. Вы не будете брать на себя ненужные риски из-за слишком большой позиции и не будете упускать возможности из-за слишком маленькой позиции. Этот способ управления капиталом более стабилен, чем традиционная модель процентной доли риска.

Тренд-фильтр - ключ к успеху, 87,5% ложных сигналов отфильтрованы напрямую

Одиночные сигналы SMC часто ошибаются на волатильных рынках. Эта стратегия включает в себя 1-часовую EMA200 в качестве фильтра тренда: многоголовый сигнал выполняется только тогда, когда 15-минутная цена находится на 1 час выше EMA200, и наоборот, выполняет пустой сигнал.

Эта конструкция напрямую сужает применимость стратегии от “всех рынков” до “тенденционных рынков”, хотя и уменьшает частоту торгов, но значительно повышает качество сигнала. Во время поперечной корректировки стратегия автоматически останавливает торговлю, избегая расходования средств в неэффективных колебаниях.

Логика распознавания блоков заказов: память цены, оставленная организацией

Блоки заказов не являются поддержкой сопротивления, а ценовыми зонами, в которых были активны крупные финансовые учреждения. Стратегия выявления эффективных блоков заказов основана на следующих условиях:

Многоглавный заказ: предыдущая K-линия - нижняя + существует FVG вверх + цена пробивает предварительные колебательные минимумы + существует нижняя ликвидность + текущая цена находится в зоне дисконта ниже 50% от Fibonacci.

Пустая заказная часть: предыдущая K-линия является солнечной линией + Существует нисходящая FVG + Существует высокая волатильность цены перед падением + Существует верхняя ликвидность + Текущая цена находится в области премии Fibonacci свыше 50%.

Каждое из условий имеет свою логику: ино/яно означает направленное давление, FVG показывает неравновесие ликвидности, BOS подтверждает изменение структуры, ликвидность охотится за участием подтверждающих органов, зона скидок/премий обеспечивает оптимальное время входа.

Мобильность охоты: 0.1% дефицит улова, снижающий охоту

90% розничных стоп на рынке находятся в явно поддерживающих устойчивых позициях. Институциональные фонды намеренно подталкивают цены к этим зонам, вызывая реверсивную операцию после большого количества стоп-увещаний.

Когда минимальная цена за 7 циклов ниже текущего минимума на 0,1% или более, подтверждается наличие нижней ликвидности. Эта конструкция позволяет избежать слишком чувствительных ошибочных суждений, а также гарантирует, что настоящая охота на ликвидность не будет пропущена.

Подтверждение точки колебания: задержка 4 циклов в обмен на надежность сигнала

Стратегия использует длину колебаний в 4 цикла для подтверждения высоких и низких точек, что означает необходимость ждать 4 K-линии, чтобы подтвердить одну колебательную точку. Такая задержка является необходимой ценой: слишком короткий период подтверждения создает большое количество ложных колебательных точек, слишком длительный период подтверждения теряет свою эффективность.

4 цикла на 15-минутном графике эквивалентно 1 часе подтверждения, что гарантирует эффективность колебательных точек и не задерживается излишне от изменения рынка. Этот параметр, оптимизированный после большого количества обратных измерений, является оптимальной точкой баланса эффективности и точности.

Строгое предупреждение: это не священная чаша, ее нужно строго соблюдать

Исторический отсчет не означает будущую прибыль, и любая стратегия имеет возможность продолжения потерь. Стратегия SMC превосходно работает на рынке с сильной тенденцией, но качество сигнала снижается на рынке со сдвигом. Даже при наличии фильтров тренда невозможно полностью избежать ложных прорывов и рыночного шума.

Стратегия требует строгих психологических качеств: нужно принимать убытки в размере 2 евро, нужно действовать решительно, когда появляется сигнал, нужно быть терпеливым, когда его нет. Любые эмоциональные действия разрушают статистическое преимущество стратегии.

Рекомендуется проводить трейдинг в симуляторе не менее 3 месяцев до начала реального трейдинга, чтобы полностью понять логику стратегии и особенности риска. Помните: структура рынка меняется, и никакая стратегия не может быть эффективной навсегда.

Исходный код стратегии
/*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