Mehrzyklus-SMC-Fusionsstrategie


Erstellungsdatum: 2025-12-22 18:05:23 zuletzt geändert: 2026-01-23 13:53:53
Kopie: 11 Klicks: 255
2
konzentrieren Sie sich auf
413
Anhänger

Mehrzyklus-SMC-Fusionsstrategie Mehrzyklus-SMC-Fusionsstrategie

MTF, SMC, EMA, OB, FVG, BOS, SSL

Das SMC-System ist kein Scherz

Das ist eine der umfassendsten Smart Money Concepts-Implementierungen, die ich je gesehen habe. Es gibt drei Zeiträume pro Tag, Woche und Monat, jeder mit eigenständigen Risikomanagement-Parametern, und das ist keine einfache Art von Hobby.

1%, um 0,75%, um 0,5% - diese Abnahme ist sehr intelligent. Die langen Zyklussignale haben zwar eine höhere Genauigkeit, aber eine längere Haltedauer, daher ist es richtig, die Position zu senken. Die Stop-Loss-Einstellung ist 12 / 40 / 100 Punkte, die Rendite auf das Risiko ist 2: 3: 4, und die Daten sagen Ihnen: Je länger der Zeitrahmen, desto größer der Raum, desto höher ist die gewünschte Rendite.

Der Markt für Bestellblöcke und Fair Value-Lücke, die klassische Technik-Analyse, weint.

Die Kernkomponente dieses Systems ist die perfekte Kombination der drei Elemente des SMC: Order Blocks, Fair Value Gaps und Break of Structure. Es ist keine einfache Kreuzung von Moving Averages, sondern eine echte Verfolgung der Spuren von Institutionskapital.

Bestellblock-Prüfung: Die vorherige K-Linie schlägt negativ/negativ ab, der aktuelle Preis durchbricht die vorherige Hoch/Tief und die Brechungsbreite ist mehr als das 1,2-fache der vorherigen K-Linie. Diese 1,2-fache Schwelle ist von entscheidender Bedeutung - die meisten gefälschten Durchbrüche werden gefiltert und nur die wirklich starken institutionellen Verhaltensweisen erfasst.

Die FVG-Erkennung ist direkter: Der aktuelle Mindestpreis ist höher als der Höchstpreis vor den beiden K-Linien, die Abweichungsgröße kann angepasst werden. Sobald der Preis in die Abweichungsregion zurückkehrt, ist der potenzielle Wendepunkt.

Liquiditäts-Scan-Tests, das ist das wahre institutionelle Denken

Was mich am meisten beeindruckt hat, ist die Implementierung des Liquidity Sweep. Das System erkennt, ob der Preis die Höhen oder Tiefen der letzten 10 K-Linien durchbrochen hat, und dreht sich dann sofort um.

Liquiditätssweif der Verkäufer: Preisinnovation niedrig, aber der Schlusskurs kehrt in die obere Hälfte der K-Linie zurück, die Transaktionsmenge wird erhöht. Liquiditätssweif der Käufer: Preisinnovation hoch, aber der Schlusskurs kehrt in die untere Hälfte der K-Linie zurück.

Fusion Scoring, das das Gefühl quantifiziert

Der klügste Teil der Strategie ist der Fusion-Score-Mechanismus. Der Mindestwert für die Position ist 6 Punkte für die Sonnenlinie, 7 Punkte für die Kreislinie und 8 Punkte für die Mondlinie. Für jede Bedingung gibt es eine eindeutige Bewertung:

  • Mehrzykluskonformität: 2 Punkte
  • Auftragsblock + Rabatt-/Premium-Zone-Kombination: 2 Punkte
  • Liquiditätsausfall: 1 Punkt
  • Bestätigung der Transaktion: 1 Punkt
  • Beste Eintrittszeit: 1 Minute

Diese Bewertung wurde nicht erfunden, sondern basiert auf der quantitativen Umsetzung der SMC-Theorie. Je höher die Punktzahl, desto größer ist die Wahrscheinlichkeit, dass die Institution finanziell involviert ist. Die Mondlinie erfordert mehr als 8 Punkte, was im Wesentlichen die perfekte Einstellung von “Starry Moon” ist, um eine Position zu eröffnen.

Zeitfilter sind entscheidend, um die gefährlichsten Momente zu vermeiden

Die Strategie enthält einen Zeitfilter: Die optimale Eintrittszeit ist 9-12 und 14-16, um die Mittagspause von 12-14 und die 35 Minuten vor der Börsenöffnung zu vermeiden. Die Konstruktion basiert auf der Liquiditätsmerkmal der ES-Kontrakte - die Überschneidung der europäischen Börsenöffnung und der US-amerikanischen Börsenöffnung, in der die Institution am aktivsten ist.

In der Mittagspause wird der Umsatz zusammengefasst, die Preise sind leicht zu manipulieren und erzeugen falsche Signale. Die 35-Minuten-Gap vor dem Börsengang ist ein großes Risiko, und es ist eine kluge Wahl, auf die Preisstabilität zu warten und dann einzutreten.

Risikomanagement ist kein Aufsatz, sondern eine tiefe Einsicht in jedes Parameter

Die Stop-Loss-Design verwendet eine feste Punktzahl anstelle der ATR, was bei Standardverbindungen wie dem ES sinnvoller ist. Die 12-Punkt-Stopp-Loss-Daten sind ungefähr 0,25% der Schwankungen, die 40-Punkt-Stopp-Daten sind ungefähr 0,8% und die 100-Punkt-Stopp-Daten sind ungefähr 2% der Schwankungen.

Die zunehmende Gestaltung des Risico-Return-Verhältnisses (RRR) in 2:3:4 spiegelt die Eigenschaften unterschiedlicher Zyklen wider: Kurzzeitsignale sind häufig, aber laut, und Langzeitsignale sind selten, aber von hoher Qualität. Daher verlangen die Langzeitsignale eine höhere Rendite, um die Wartezeit zu kompensieren.

Die Grenzen dieser Strategie müssen deutlich gemacht werden.

Erstens wirken SMC-Strategien im Allgemeinen in schwankenden Märkten. Die Effektivität von Orderblöcken und FVGs sinkt, wenn der Markt keinen klaren Trend zeigt. Zweitens hängt die Strategie von Daten über mehrere Zeiträume ab, und es kann zu Datenverzögerungen in bestimmten Zeitabschnitten kommen.

Wichtig ist, dass das System ein tiefes Verständnis der SMC-Theorie benötigt, um es zu verwenden. Unzulässige Parameteranpassungen sind leicht zu optimieren und funktionieren nicht gut in der Realität. Es wird empfohlen, zuerst mindestens 3 Monate in einer Simulation zu arbeiten und sich mit der Leistung unter verschiedenen Marktbedingungen vertraut zu machen.

Die historische Rückschau ist kein Vorbild für zukünftige Gewinne, und jede Strategie birgt das Risiko einer fortlaufenden Verlustrate. Die Strategie wird streng nach den eingestellten Risikoparametern ausgeführt.

Strategiequellcode
/*backtest
start: 2025-12-14 00:00:00
end: 2026-01-21 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT","balance":500000}]
*/

//@version=5
strategy("Multi-Timeframe SMC Entry System", overlay=true, pyramiding=3)

// ============================================================================
// INPUT PARAMETERS
// ============================================================================

timeframe_group = "=== TIMEFRAME SELECTION ==="
enable_daily = input.bool(true, "Enable Daily Signals", group=timeframe_group)
enable_weekly = input.bool(true, "Enable Weekly Signals", group=timeframe_group)
enable_monthly = input.bool(true, "Enable Monthly Signals", group=timeframe_group)

risk_group = "=== RISK MANAGEMENT ==="
account_risk_daily = input.float(0.1, "Daily Risk %", minval=0, maxval=5, step=0.1, group=risk_group)
account_risk_weekly = input.float(0.075, "Weekly Risk %", minval=0, maxval=5, step=0.1, group=risk_group)
account_risk_monthly = input.float(0.05, "Monthly Risk %", minval=0, maxval=5, step=0.1, group=risk_group)

daily_stop_atr = input.float(1.5, "Daily Stop (ATR)", minval=0.5, maxval=5, step=0.5, group=risk_group)
weekly_stop_atr = input.float(2.5, "Weekly Stop (ATR)", minval=1, maxval=8, step=0.5, group=risk_group)
monthly_stop_atr = input.float(4.0, "Monthly Stop (ATR)", minval=2, maxval=12, step=0.5, group=risk_group)

daily_rr_ratio = input.float(2.0, "Daily R:R", minval=1.0, maxval=5.0, step=0.5, group=risk_group)
weekly_rr_ratio = input.float(3.0, "Weekly R:R", minval=1.0, maxval=6.0, step=0.5, group=risk_group)
monthly_rr_ratio = input.float(4.0, "Monthly R:R", minval=1.0, maxval=10.0, step=0.5, group=risk_group)

confluence_group = "=== CONFLUENCE THRESHOLDS ==="
daily_min_score = input.int(6, "Daily Min Score", minval=1, maxval=10, group=confluence_group)
weekly_min_score = input.int(7, "Weekly Min Score", minval=1, maxval=10, group=confluence_group)
monthly_min_score = input.int(8, "Monthly Min Score", minval=1, maxval=10, group=confluence_group)

smc_group = "=== SMC SETTINGS ==="
ob_length = input.int(20, "Order Block Lookback", minval=5, maxval=100, group=smc_group)
fvg_atr_mult = input.float(0.5, "FVG Min Size (ATR)", minval=0.1, maxval=2, step=0.1, group=smc_group)
liquidity_lookback = input.int(10, "Liquidity Lookback", minval=3, maxval=50, group=smc_group)
swing_lookback = input.int(50, "Swing Lookback", minval=20, maxval=200, group=smc_group)

visual_group = "=== VISUALS ==="
show_premium_discount = input.bool(true, "Premium/Discount Zones", group=visual_group)

// ============================================================================
// ATR CALCULATION - 核心参考指标
// ============================================================================

atr_period = 14
atr_value = ta.atr(atr_period)
atr_4h = request.security(syminfo.tickerid, "240", ta.atr(atr_period))
atr_daily = request.security(syminfo.tickerid, "D", ta.atr(atr_period))
atr_weekly = request.security(syminfo.tickerid, "W", ta.atr(atr_period))

// ============================================================================
// MULTI-TIMEFRAME DATA
// ============================================================================

ema20_4h = request.security(syminfo.tickerid, "240", ta.ema(close, 20))
ema50_4h = request.security(syminfo.tickerid, "240", ta.ema(close, 50))
ema20_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 20))
ema50_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 50))
ema20_weekly = request.security(syminfo.tickerid, "W", ta.ema(close, 20))
ema50_weekly = request.security(syminfo.tickerid, "W", ta.ema(close, 50))
ema12_monthly = request.security(syminfo.tickerid, "M", ta.ema(close, 12))
ema26_monthly = request.security(syminfo.tickerid, "M", ta.ema(close, 26))

// ============================================================================
// MARKET STRUCTURE
// ============================================================================

var float last_swing_high = na
var float last_swing_low = na

if ta.pivothigh(high, 3, 3)
    last_swing_high := high[3]
if ta.pivotlow(low, 3, 3)
    last_swing_low := low[3]

is_bullish_bos = not na(last_swing_high) and close > last_swing_high
is_bearish_bos = not na(last_swing_low) and close < last_swing_low

trend_bullish_4h = close > ema20_4h and ema20_4h > ema50_4h
trend_bearish_4h = close < ema20_4h and ema20_4h < ema50_4h
trend_bullish_daily = close > ema20_daily and close > ema50_daily
trend_bearish_daily = close < ema20_daily and close < ema50_daily
trend_bullish_weekly = close > ema20_weekly and close > ema50_weekly
trend_bearish_weekly = close < ema20_weekly and close < ema50_weekly
trend_bullish_monthly = close > ema12_monthly and close > ema26_monthly
trend_bearish_monthly = close < ema12_monthly and close < ema26_monthly

// ============================================================================
// PREMIUM/DISCOUNT ZONES
// ============================================================================

swing_range_high = ta.highest(high, swing_lookback)
swing_range_low = ta.lowest(low, swing_lookback)
swing_midpoint = (swing_range_high + swing_range_low) / 2

in_premium = close > swing_midpoint
in_discount = close < swing_midpoint

range_position = (swing_range_high != swing_range_low) ? ((close - swing_range_low) / (swing_range_high - swing_range_low)) * 100 : 50
deep_discount = range_position < 30
deep_premium = range_position > 70

// ============================================================================
// ORDER BLOCKS
// ============================================================================

var float bull_ob_high = na
var float bull_ob_low = na
var int bull_ob_bar = na
var float bear_ob_high = na
var float bear_ob_low = na
var int bear_ob_bar = na

if close[1] < open[1] and close > high[1] and (close - open) > (high[1] - low[1]) * 1.2
    bull_ob_high := high[1]
    bull_ob_low := low[1]
    bull_ob_bar := bar_index[1]

if close[1] > open[1] and close < low[1] and (open - close) > (high[1] - low[1]) * 1.2
    bear_ob_high := high[1]
    bear_ob_low := low[1]
    bear_ob_bar := bar_index[1]

in_bullish_ob = not na(bull_ob_high) and low <= bull_ob_high and high >= bull_ob_low and (bar_index - bull_ob_bar) < ob_length
in_bearish_ob = not na(bear_ob_high) and low <= bear_ob_high and high >= bear_ob_low and (bar_index - bear_ob_bar) < ob_length

bull_ob_fresh = not na(bull_ob_bar) and (bar_index - bull_ob_bar) < 10
bear_ob_fresh = not na(bear_ob_bar) and (bar_index - bear_ob_bar) < 10

// ============================================================================
// FAIR VALUE GAPS - 使用ATR作为阈值
// ============================================================================

fvg_threshold = atr_value * fvg_atr_mult
bullish_fvg = low > high[2] and (low - high[2]) >= fvg_threshold
bearish_fvg = high < low[2] and (low[2] - high) >= fvg_threshold

var float last_bull_fvg_top = na
var float last_bull_fvg_bottom = na
var float last_bear_fvg_top = na
var float last_bear_fvg_bottom = na

if bullish_fvg
    last_bull_fvg_top := low
    last_bull_fvg_bottom := high[2]

if bearish_fvg
    last_bear_fvg_top := low[2]
    last_bear_fvg_bottom := high

near_bullish_fvg = not na(last_bull_fvg_top) and low <= last_bull_fvg_top and high >= last_bull_fvg_bottom
near_bearish_fvg = not na(last_bear_fvg_top) and low <= last_bear_fvg_top and high >= last_bear_fvg_bottom

if near_bullish_fvg and low <= last_bull_fvg_bottom
    last_bull_fvg_top := na
    last_bull_fvg_bottom := na

if near_bearish_fvg and high >= last_bear_fvg_top
    last_bear_fvg_top := na
    last_bear_fvg_bottom := na

// ============================================================================
// LIQUIDITY SWEEPS
// ============================================================================

sellside_sweep = low < ta.lowest(low[1], liquidity_lookback) and close > open and close > low + (high - low) * 0.6
buyside_sweep = high > ta.highest(high[1], liquidity_lookback) and close < open and close < high - (high - low) * 0.6

var bool recent_ssl_sweep = false
var bool recent_bsl_sweep = false
var int ssl_sweep_bar = 0
var int bsl_sweep_bar = 0

if sellside_sweep
    recent_ssl_sweep := true
    ssl_sweep_bar := bar_index

if buyside_sweep
    recent_bsl_sweep := true
    bsl_sweep_bar := bar_index

if bar_index - ssl_sweep_bar > 10
    recent_ssl_sweep := false

if bar_index - bsl_sweep_bar > 10
    recent_bsl_sweep := false

// ============================================================================
// VOLUME FILTER
// ============================================================================

volume_avg = ta.sma(volume, 20)
volume_confirmation = volume > volume_avg * 1.2

// ============================================================================
// CONFLUENCE SCORING
// ============================================================================

daily_score = 0
if (trend_bullish_4h and trend_bullish_daily) or (trend_bearish_4h and trend_bearish_daily)
    daily_score += 2
if (in_bullish_ob and in_discount and trend_bullish_4h) or (in_bearish_ob and in_premium and trend_bearish_4h)
    daily_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    daily_score += 1
if volume_confirmation
    daily_score += 1
if is_bullish_bos or is_bearish_bos
    daily_score += 1
if near_bullish_fvg or near_bearish_fvg
    daily_score += 1
daily_score += 1

weekly_score = 0
if (trend_bullish_weekly and trend_bullish_monthly) or (trend_bearish_weekly and trend_bearish_monthly)
    weekly_score += 2
if (trend_bullish_daily and trend_bullish_weekly) or (trend_bearish_daily and trend_bearish_weekly)
    weekly_score += 2
if (deep_discount and trend_bullish_weekly) or (deep_premium and trend_bearish_weekly)
    weekly_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    weekly_score += 1
if in_bullish_ob or in_bearish_ob
    weekly_score += 1
if bull_ob_fresh or bear_ob_fresh
    weekly_score += 1
weekly_score += 1

monthly_score = 0
if (trend_bullish_monthly and trend_bullish_weekly) or (trend_bearish_monthly and trend_bearish_weekly)
    monthly_score += 2
if (in_bullish_ob and deep_discount) or (in_bearish_ob and deep_premium)
    monthly_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    monthly_score += 2
if (trend_bullish_daily and trend_bullish_weekly and trend_bullish_monthly) or (trend_bearish_daily and trend_bearish_weekly and trend_bearish_monthly)
    monthly_score += 2
if range_position < 20 or range_position > 80
    monthly_score += 1
monthly_score += 1

// ============================================================================
// ENTRY CONDITIONS
// ============================================================================

daily_long_condition = enable_daily and daily_score >= daily_min_score and trend_bullish_4h and in_discount and (in_bullish_ob or recent_ssl_sweep or near_bullish_fvg) 
daily_short_condition = enable_daily and daily_score >= daily_min_score and trend_bearish_4h and in_premium and (in_bearish_ob or recent_bsl_sweep or near_bearish_fvg) 
weekly_long_condition = enable_weekly and weekly_score >= weekly_min_score and trend_bullish_weekly and trend_bullish_daily and in_discount and (in_bullish_ob or recent_ssl_sweep)
weekly_short_condition = enable_weekly and weekly_score >= weekly_min_score and trend_bearish_weekly and trend_bearish_daily and in_premium and (in_bearish_ob or recent_bsl_sweep)
monthly_long_condition = enable_monthly and monthly_score >= monthly_min_score and trend_bullish_monthly and trend_bullish_weekly and deep_discount and in_bullish_ob
monthly_short_condition = enable_monthly and monthly_score >= monthly_min_score and trend_bearish_monthly and trend_bearish_weekly and deep_premium and in_bearish_ob

// ============================================================================
// STOP LOSS CALCULATION - 基于ATR
// ============================================================================

daily_stop_distance = atr_4h * daily_stop_atr
weekly_stop_distance = atr_daily * weekly_stop_atr
monthly_stop_distance = atr_weekly * monthly_stop_atr

// ============================================================================
// POSITION SIZING 
// ============================================================================

calculate_position_size(risk_pct, stop_distance) =>
    risk_amount = strategy.equity * (risk_pct / 100)
    // 止损距离就是每单位的风险金额
    position = risk_amount / stop_distance

daily_contracts = calculate_position_size(account_risk_daily, daily_stop_distance)
weekly_contracts = calculate_position_size(account_risk_weekly, weekly_stop_distance)
monthly_contracts = calculate_position_size(account_risk_monthly, monthly_stop_distance)

// ============================================================================
// STRATEGY EXECUTION
// ============================================================================

if daily_long_condition
    strategy.entry("Daily Long", strategy.long, qty=daily_contracts)
    strategy.exit("DL Exit", "Daily Long", stop=close - daily_stop_distance, limit=close + (daily_stop_distance * daily_rr_ratio))

if daily_short_condition
    strategy.entry("Daily Short", strategy.short, qty=daily_contracts)
    strategy.exit("DS Exit", "Daily Short", stop=close + daily_stop_distance, limit=close - (daily_stop_distance * daily_rr_ratio))

if weekly_long_condition
    strategy.entry("Weekly Long", strategy.long, qty=weekly_contracts)
    strategy.exit("WL Exit", "Weekly Long", stop=close - weekly_stop_distance, limit=close + (weekly_stop_distance * weekly_rr_ratio))

if weekly_short_condition
    strategy.entry("Weekly Short", strategy.short, qty=weekly_contracts)
    strategy.exit("WS Exit", "Weekly Short", stop=close + weekly_stop_distance, limit=close - (weekly_stop_distance * weekly_rr_ratio))

if monthly_long_condition
    strategy.entry("Monthly Long", strategy.long, qty=monthly_contracts)
    strategy.exit("ML Exit", "Monthly Long", stop=close - monthly_stop_distance, limit=close + (monthly_stop_distance * monthly_rr_ratio))

if monthly_short_condition
    strategy.entry("Monthly Short", strategy.short, qty=monthly_contracts)
    strategy.exit("MS Exit", "Monthly Short", stop=close + monthly_stop_distance, limit=close - (monthly_stop_distance * monthly_rr_ratio))

// ============================================================================
// VISUALS 
// ============================================================================

p1 = plot(show_premium_discount ? swing_range_high : na, color=na)
p2 = plot(show_premium_discount ? swing_midpoint : na, "EQ", color.new(color.white, 50), 1)
p3 = plot(show_premium_discount ? swing_range_low : na, color=na)
fill(p1, p2, color.new(color.red, 92))
fill(p2, p3, color.new(color.green, 92))

plotshape(daily_long_condition, "D Long", shape.triangleup, location.belowbar, color.new(color.lime, 0), size=size.small, text="D")
plotshape(daily_short_condition, "D Short", shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small, text="D")
plotshape(weekly_long_condition, "W Long", shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.normal, text="W")
plotshape(weekly_short_condition, "W Short", shape.triangledown, location.abovebar, color.new(color.maroon, 0), size=size.normal, text="W")
plotshape(monthly_long_condition, "M Long", shape.triangleup, location.belowbar, color.new(color.aqua, 0), size=size.large, text="M")
plotshape(monthly_short_condition, "M Short", shape.triangledown, location.abovebar, color.new(color.fuchsia, 0), size=size.large, text="M")

plotshape(sellside_sweep, "SSL", shape.labeldown, location.top, color.new(color.yellow, 20), size=size.tiny, text="SSL")
plotshape(buyside_sweep, "BSL", shape.labelup, location.bottom, color.new(color.yellow, 20), size=size.tiny, text="BSL")
plotshape(is_bullish_bos, "BOS↑", shape.circle, location.belowbar, color.new(color.lime, 50), size=size.tiny)
plotshape(is_bearish_bos, "BOS↓", shape.circle, location.abovebar, color.new(color.red, 50), size=size.tiny)