Strategi fusi SMC multi-siklus


Tanggal Pembuatan: 2025-12-22 18:05:23 Akhirnya memodifikasi: 2026-01-23 13:53:53
menyalin: 11 Jumlah klik: 255
2
fokus pada
413
Pengikut

Strategi fusi SMC multi-siklus Strategi fusi SMC multi-siklus

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

Triple Cycle Resonance, Sistem SMC Tidak Bercanda

Saya melihat strategi SMC multi-siklus ES ini dan langsung menyimpulkan: Ini adalah salah satu implementasi konsep Smart Money yang paling lengkap yang pernah saya lihat. Tiga kerangka waktu harian / mingguan / bulanan, masing-masing dengan parameter manajemen risiko yang independen, bukan praktik amatir.

Sunline risiko 1%, Periode 0,75%, Bulan 0,5% - Desain penurunan ini sangat cerdas. Meskipun sinyal jangka panjang memiliki akurasi yang lebih tinggi, tetapi jangka waktu yang lebih lama untuk memegang posisi, jadi menurunkan posisi adalah benar.

“Blok pesanan + nilai wajar, analisa teknis tradisional menangis”

Inti dari sistem ini adalah kombinasi sempurna dari tiga elemen utama SMC: Order Blocks, Fair Value Gaps, dan Break of Structure. Bukan sekedar persilangan rata-rata bergerak, tetapi benar-benar melacak jejak dana lembaga.

Logika deteksi blok pesanan: garis K sebelumnya bergeser ke bawah / ke bawah, harga saat ini menembus tinggi / rendah sebelumnya, dan tingkat penembusan lebih dari 1,2 kali lipat dari entitas garis K sebelumnya. Desain ambang 1,2 kali lipat ini sangat penting - memfilter sebagian besar penembusan palsu dan hanya menangkap perilaku lembaga yang benar-benar kuat.

Identifikasi FVG lebih langsung: harga terendah saat ini lebih tinggi dari harga tertinggi sebelum dua garis K, ukuran celah dapat disesuaikan. Jika harga kembali ke area celah, maka titik balik potensial. Data retrospektif menunjukkan bahwa FVG akan melakukan pengembalian pada arah tren, dan tingkat kemenangan bisa mencapai lebih dari 70%.

Deteksi Pencucian Likuiditas, Inilah Pemikiran Institusional yang Benar

Yang paling mengesankan bagi saya adalah implementasi dari Liquidity Sweep. Sistem ini mendeteksi apakah harga telah menembus titik tinggi atau rendah dari 10 garis K sebelumnya, dan segera membalikkannya.

Penjual liquidity sweep: harga inovasi rendah tetapi harga closeout kembali ke bagian atas K-line, volume transaksi meningkat. Pembeli liquidity sweep: harga inovasi tinggi tetapi harga closeout kembali ke bagian bawah K-line.

Fusion Score System, yang mengukur perasaan.

Strategi yang paling cerdas adalah sistem penilaian gabungan. Minimal 6 poin di garis matahari, 7 poin di garis lingkaran, dan 8 poin di garis bulan untuk membuka posisi. Setiap kondisi memiliki nilai yang jelas:

  • Konsistensi tren multi-siklus: 2 poin
  • Blok pesanan + area diskon / area premium: 2 poin
  • Pencucian uang: 1 poin
  • Konfirmasi pengiriman: 1 poin
  • Waktu terbaik masuk: 1 menit

Skor ini tidak dibuat-buat, tetapi berdasarkan implementasi kuantitatif dari teori SMC. Nilai yang lebih tinggi menunjukkan kemungkinan intervensi dana lembaga yang lebih besar.

Filter waktu adalah kunci untuk menghindari waktu yang paling berbahaya

Strategi ini menambahkan filter waktu: waktu masuk yang optimal adalah 9-12 dan 14-16, menghindari istirahat siang 12-14 dan 35 menit sebelum buka. Desain ini didasarkan pada karakteristik likuiditas dari kontrak ES - saat penutupan Eropa dan pembukaan saham AS tumpang tindih, lembaga ini paling aktif.

Pada jam istirahat siang, volume transaksi berkurang, harga mudah dimanipulasi, menghasilkan sinyal palsu. 35 menit sebelum buka, ada risiko besar, menunggu harga stabil dan masuk ke pasar adalah pilihan yang bijaksana.

Manajemen risiko bukan sesuatu yang sederhana, setiap parameter harus dipahami dengan mendalam

Stop loss didesain dengan menggunakan nilai tetap dan bukan ATR, yang lebih masuk akal pada senyawa standar seperti ES. Stop loss pada garis matahari 12 adalah sekitar 0,25% dari fluktuasi, di garis lingkar 40 sekitar 0,8 dan di garis bulan 100 sekitar 2%.

Desain peningkatan rasio risiko-reward ((2:3:4) mencerminkan karakteristik siklus yang berbeda: sinyal siklus pendek sering tetapi berisik, dan sinyal siklus panjang jarang tetapi berkualitas tinggi. Oleh karena itu, siklus panjang membutuhkan pengembalian yang lebih tinggi untuk mengkompensasi biaya menunggu.

Keterbatasan strategi ini harus jelas.

Pertama, strategi SMC umumnya berkinerja baik di pasar yang bergejolak. Kedua, strategi bergantung pada data dari beberapa kerangka waktu, dan pada beberapa waktu mungkin terjadi keterlambatan data.

Yang terpenting, sistem ini membutuhkan pemahaman yang mendalam tentang teori SMC untuk dapat digunakan dengan baik. Penyesuaian parameter yang tidak tepat mudah dioptimalkan dan tidak berkinerja baik di dunia nyata. Disarankan untuk menjalankan setidaknya 3 bulan di lingkungan simulasi dan terbiasa dengan berbagai kondisi pasar.

Retrospeksi sejarah tidak mewakili keuntungan masa depan, dan setiap strategi memiliki risiko kerugian berturut-turut. Lakukan dengan ketat sesuai dengan parameter risiko yang ditetapkan, jangan menambah posisi karena beberapa kali keuntungan.

Kode Sumber Strategi
/*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)