Chiến lược hợp nhất SMC đa chu kỳ


Ngày tạo: 2025-12-22 18:05:23 sửa đổi lần cuối: 2026-01-23 13:53:53
sao chép: 11 Số nhấp chuột: 255
2
tập trung vào
413
Người theo dõi

Chiến lược hợp nhất SMC đa chu kỳ Chiến lược hợp nhất SMC đa chu kỳ

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

Triple Cycle Resonance, hệ thống SMC không hề đùa

Đây là một trong những triển khai hoàn chỉnh nhất của Khái niệm Tiền thông minh mà tôi từng thấy. Có ba khung thời gian hàng ngày/tuần/tháng, mỗi khung có các tham số quản lý rủi ro độc lập, không phải là một cách nghiệp dư đơn giản.

Rủi ro đường mặt trời là 1%, đường chu kỳ là 0,75%, đường mặt trăng là 0,5% - thiết kế giảm dần này rất thông minh. Dấu hiệu chu kỳ dài, mặc dù có độ chính xác cao hơn, nhưng thời gian giữ vị trí dài, vì vậy việc giảm vị trí là đúng.

Lỗ hổng giá trị công bằng của đơn đặt hàng, phân tích kỹ thuật truyền thống sẽ khóc

Cốt lõi của hệ thống này là sự kết hợp hoàn hảo của ba yếu tố lớn của SMC: Order Blocks, Fair Value Gaps và Break of Structure. Không chỉ đơn giản là một đường chéo trung bình di chuyển, mà thực sự đang theo dõi dấu chân của quỹ tổ chức.

Logic phát hiện khối đơn đặt hàng: Dòng K trước kết thúc âm / dương, giá hiện tại phá vỡ trước cao / thấp, và tỷ lệ phá vỡ vượt quá 1,2 lần so với thực thể K trước. Thiết kế ngưỡng 1,2 lần này rất quan trọng - lọc hầu hết các đột phá giả mạo và chỉ bắt được hành vi của cơ quan thực sự mạnh mẽ.

FVG nhận diện trực tiếp hơn: Giá thấp nhất hiện tại cao hơn giá cao nhất trước hai đường K, kích thước lỗ hổng có thể được điều chỉnh. Một khi giá trở lại khu vực lỗ hổng là điểm đảo ngược tiềm năng. Dữ liệu tra cứu cho thấy, FVG bù đắp theo hướng xu hướng, tỷ lệ thắng có thể đạt hơn 70%

Kiểm tra thanh toán thanh khoản, đây là suy nghĩ thực sự của cơ quan

Điều gây ấn tượng nhất đối với tôi là việc thực hiện Liquidity Sweep. Hệ thống sẽ phát hiện xem giá đã vượt qua đỉnh hay đáy của 10 đường K trước đó và ngay lập tức đảo ngược. Đây là “Stop Hunt” điển hình - các cơ quan sẽ quét lỗ hổng của người bán lẻ trước khi chạy theo hướng thực sự.

Hành động thanh toán thanh khoản của người bán: giá sáng tạo thấp nhưng giá đóng cửa trở lại nửa phía trên của đường K, khối lượng giao dịch tăng lên. Hành động thanh toán thanh khoản của người mua: giá sáng tạo cao nhưng giá đóng cửa trở lại nửa phía dưới của đường K.

Hệ thống đánh giá kết hợp, định lượng cảm giác.

Chiến lược thông minh nhất là hệ thống điểm kết hợp. Điểm tối thiểu là 6 điểm trên đường mặt trời, 7 điểm trên đường vòng tròn và 8 điểm trên đường mặt trăng. Mỗi điều kiện có điểm số rõ ràng:

  • Xu hướng đa chu kỳ: 2 điểm
  • Bảng đặt hàng + Phòng giảm giá / Phòng thưởng: 2 điểm
  • Kiểm tra thanh khoản: 1 điểm
  • Xác nhận giao dịch: 1 điểm
  • Thời gian nhập cảnh: 1 phút

Điểm số này không phải là một ý tưởng, mà là một thực hiện định lượng dựa trên lý thuyết của SMC. Điểm số càng cao, xác suất của các tổ chức tài chính sẽ càng lớn.

Bộ lọc thời gian là chìa khóa để tránh những thời điểm nguy hiểm nhất

Chiến lược này đã thêm bộ lọc thời gian: thời gian nhập cảnh tối ưu là 9-12 và 14-16, tránh giờ nghỉ trưa 12-14 và 35 phút trước khi mở. Thiết kế này dựa trên tính năng thanh khoản của hợp đồng ES - thời gian đóng cửa châu Âu và mở cửa chứng khoán Mỹ chồng lên nhau, cơ quan hoạt động nhiều nhất.

Lượng giao dịch giảm mạnh trong giờ nghỉ trưa, giá dễ bị điều khiển, tạo ra tín hiệu sai. Khoảng cách 35 phút trước khi mở cửa có nguy cơ cao, chờ đợi giá ổn định và sau đó vào thị trường là một lựa chọn khôn ngoan.

Quản lý rủi ro không phải là một sự sắp đặt, mỗi tham số đều có ý nghĩa sâu sắc.

Thiết kế lỗ hổng sử dụng số điểm cố định thay vì ATR, điều này hợp lý hơn trên hợp đồng tiêu chuẩn ES. Đường mặt trời 12 điểm dừng lỗ là khoảng 0,25% biến động, đường quanh quãng 40 khoảng 0,8 và đường mặt trăng 100 khoảng 2% .

Thiết kế gia tăng tỷ lệ rủi ro / lợi nhuận (2: 3: 4) thể hiện các đặc điểm của các chu kỳ khác nhau: tín hiệu chu kỳ ngắn thường xuyên nhưng ồn ào, tín hiệu chu kỳ dài hiếm nhưng chất lượng cao. Vì vậy, chu kỳ dài yêu cầu lợi nhuận cao hơn để bù đắp chi phí chờ đợi.

Những hạn chế của chiến lược này cần được nói rõ.

Thứ nhất, chiến lược SMC thường hoạt động trong thị trường bất ổn. Khi thị trường không có xu hướng rõ ràng, hiệu quả của khối đơn đặt hàng và FVG sẽ giảm. Thứ hai, chiến lược phụ thuộc vào dữ liệu trong nhiều khung thời gian và có thể có sự chậm trễ dữ liệu trong một số khoảng thời gian.

Quan trọng nhất, hệ thống này cần hiểu sâu về lý thuyết SMC để sử dụng tốt. Điều chỉnh tham số không đúng cách rất dễ bị tối ưu hóa quá mức, hoạt động kém trong thực tế.

Lịch sử phản hồi không đại diện cho lợi nhuận trong tương lai, bất kỳ chiến lược nào cũng có nguy cơ thua lỗ liên tục. Thực hiện nghiêm ngặt theo các tham số rủi ro được thiết lập, đừng tăng vị trí vì đã kiếm được vài lần.

Mã nguồn chiến lược
/*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)