
MTF, SMC, EMA, OB, FVG, BOS, SSL
Apabila melihat strategi SMC multi-siklus ES ini, saya langsung menyimpulkan: Ini adalah salah satu daripada penerapan konsep wang pintar yang paling lengkap yang pernah saya lihat. Tiga bingkai masa harian / minggu / bulan, masing-masing mempunyai parameter pengurusan risiko yang bebas, bukan amalan amatur yang serba boleh.
Risiko garis matahari 1%, garis pusingan 0.75%, garis bulan 0.5% - reka bentuk penurunan ini adalah bijak. Isyarat jangka panjang, walaupun lebih tepat, mempunyai jangka masa yang lebih lama, jadi penurunan kedudukan adalah betul.
Sistem ini adalah gabungan sempurna antara tiga elemen utama SMC: Order Blocks, Fair Value Gaps, dan Break of Structure. Ia bukan sekadar persilangan purata bergerak, tetapi sebenarnya menjejaki jejak dana institusi.
Logik pengesanan blok pesanan: garisan K terdahulu ditutup dengan negatif / positif, harga semasa menembusi tinggi / rendah terdahulu, dan ketinggian penembusan melebihi 1.2 kali ganda daripada entiti garisan K terdahulu. Reka bentuk ambang 1.2 kali ganda ini sangat penting - menapis kebanyakan penembusan palsu dan hanya menangkap tindakan institusi yang benar-benar kuat.
FVG dikenali lebih langsung: harga terendah semasa lebih tinggi daripada harga tertinggi sebelum dua garis K, saiz jurang boleh disesuaikan. Apabila harga kembali ke kawasan jurang adalah titik pembalikan yang berpotensi. Data retrospeksi menunjukkan bahawa FVG membalas dalam arah trend, kadar kemenangan dapat mencapai lebih dari 70%
Apa yang paling menarik perhatian saya ialah pengimplementasian Liquidity Sweep. Sistem ini akan mengesan sama ada harga telah menembusi titik tertinggi atau terendah sepanjang 10 garis K dan akan segera berbalik.
Penjual penyingkiran likuiditi: Inovasi harga rendah tetapi harga penutupan kembali ke bahagian atas garis K, jumlah transaksi meningkat. Pembeli penyingkiran likuiditi: Inovasi harga tinggi tetapi harga penutupan kembali ke bahagian bawah garis K. Logik pengenalan ini secara langsung pada kaedah pengendalian badan penunjuk, bukan dalam meneka, tetapi mengikuti.
Strategi yang paling bijak adalah sistem penilaian gabungan. Minimum 6 mata di garis matahari, 7 mata di garis bulatan, dan 8 mata di garis bulan untuk membuka kedudukan. Setiap syarat mempunyai nilai yang jelas:
Skor ini bukan dicipta, tetapi berdasarkan teori kuantitatif SMC. Skor yang lebih tinggi, menunjukkan kemungkinan lebih besar untuk melibatkan dana institusi. Bulan memerlukan lebih daripada 8 mata, dan pada dasarnya adalah tetapan yang sempurna untuk “Bulan Bintang” untuk membuka kedudukan.
Strategi ini menambah penapis masa: waktu kemasukan yang optimum adalah 9-12 dan 14-16, mengelakkan rehat tengah hari 12-14 dan 35 minit sebelum pembukaan. Reka bentuk ini berdasarkan ciri-ciri kecairan kontrak ES - penutupan Eropah dan pembukaan saham AS bertindih ketika institusi paling aktif.
Tempoh waktu rehat tengah hari menyebabkan jumlah dagangan berkurangan, harga mudah dimanipulasi, menghasilkan isyarat palsu. 35 minit sebelum pembukaan adalah risiko yang besar, menunggu harga stabil dan kemudian masuk adalah pilihan yang bijak.
Reka bentuk hentikan kerugian menggunakan nombor titik tetap dan bukan ATR, yang lebih masuk akal pada kompaun standard seperti ES. Hentikan kerugian pada titik 12 sunset adalah kira-kira 0.25% dari turun naik, pada garis lingkaran 40 kira-kira 0.8 dan pada garis bulan 100 kira-kira 2%.
Reka bentuk peningkatan nisbah ganjaran risiko ((2:3:4) mencerminkan ciri-ciri kitaran yang berbeza: isyarat kitaran pendek kerap tetapi bising, isyarat kitaran panjang jarang tetapi berkualiti tinggi. Oleh itu, kitaran panjang memerlukan pulangan yang lebih tinggi untuk mengimbangi kos menunggu.
Pertama, strategi SMC biasanya berfungsi di pasaran yang bergolak. Kesan blok pesanan dan FVG akan menurun apabila pasaran tidak mempunyai trend yang jelas. Kedua, strategi bergantung pada data dalam pelbagai bingkai masa, di mana data mungkin tertunda pada masa tertentu.
Yang paling penting, sistem ini memerlukan pemahaman yang mendalam mengenai teori SMC untuk digunakan dengan baik. Penyesuaian parameter yang tidak wajar mudah dioptimumkan dan tidak berfungsi dengan baik di lapangan.
Pemantauan semula sejarah tidak mewakili keuntungan masa depan, strategi apa pun mempunyai risiko kerugian berturut-turut. Lakukan dengan ketat mengikut parameter risiko yang ditetapkan, jangan menambah kedudukan kerana beberapa kali mendapat keuntungan.
/*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)