
이 전략은 마치 숙련된 사냥꾼처럼, 이러한 덫을 전문적으로 식별하고 역으로 작동합니다. 간단히 말해서, 가격이 의도적으로 중요한 지지를 지탱하는 저항 지점을 “사기 뚫고” 빠르게 끌어 올렸을 때, 우리는 큰 자본의 리듬에 따라 진입합니다!
비중을 맞추세요!이 전략은 세 가지의 방어망을 사용합니다.
🔸 트렌드 필터200주기 EMA는 마치 오래된 운전기사처럼, 지금 경사가 올라가고 있는지 내려가고 있는지 알려줍니다. 🔸 키비트 식별“전사들이 싸워야 할 곳”을 자동으로 찾아내기 🔸 유동성 검출“위안부”는 “위안부”의 일부러 만들어진 “위안부”입니다.
어류가 어디에 있는지, 어떤 낚을 사용하는지, 언제 낚을 하는지를 알아야 하는 것과 같습니다.
예를 들어, 당신이 우유 차를 사려고 줄을 서 있는데, 갑자기 누군가가 “무료!“라고 외치면, 모든 사람들이 몰려들었고, 결국은 가짜였지만, 똑똑한 사람들은 무작위로 줄을 섰습니다.
시장도 마찬가지입니다. 가격이 먼저 지지율을 넘어간다고 “인척”하고 (Sweeping Stop Losses) 그 다음 빠르게 다시 끌어올립니다. 이 때 가장 좋은 진입 시점입니다. 전략은 0.6배의 ATR의 버퍼 지역을 설정하여 진정한 돌파가 아닌 “sweeping”를 보장합니다.
구덩이 피하기 위한 지침많은 사람들이 거래하는 것은 안전벨트 없이 운전하는 것과 같습니다. 이 전략은 위험과 수익의 비율을 1:2로 강제합니다!
이 전략은 15분 주기의 금 거래에 가장 적합합니다. 왜냐하면 금 시장은 유동성이 좋고, 가짜 돌파가 분명하고, 15분 주기는 너무 많은 소음을 필터링 할 수 있기 때문입니다.
기억하세요: 탐욕하지 마세요. 전략이 좋은 위치를 찾게 해주고 나머지는 시장과 시간에 맡겨주세요.
/*backtest
start: 2025-10-06 00:00:00
end: 2025-11-05 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Gold 15m: Trend + S/R + Liquidity Sweep (RR 1:2)", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, commission_type=strategy.commission.percent, commission_value=0.0)
// ---------------------- INPUTS ----------------------
symbol_input = input.string(title="Symbol (for reference only)", defval="XAUUSD")
tf_note = input.timeframe(title="Intended timeframe", defval="15")
ema_len = input.int(200, "Trend EMA length", minval=50)
pivot_left = input.int(5, "Pivot left bars", minval=1)
pivot_right = input.int(5, "Pivot right bars", minval=1)
sweep_atr_mult = input.float(0.6, "Liquidity sweep buffer (ATR ×)", step=0.1)
sl_atr_mult = input.float(0.5, "SL buffer beyond pivot (ATR ×)", step=0.1)
min_sweep_bars = input.int(1, "Max bars between sweep and reclaim", minval=1)
use_only_trend = input.bool(true, "Only trade with trend (EMA filter)")
rr = input.float(2.0, "Reward/Risk (TP = RR × Risk)", minval=1.0, step=0.1)
enable_long = input.bool(true, "Enable Longs")
enable_short = input.bool(true, "Enable Shorts")
show_zones = input.bool(true, "Plot pivots / zones")
// ---------------------- INDICATORS ----------------------
ema_trend = ta.ema(close, ema_len)
atr = ta.atr(14)
// ---------------------- PIVOT S/R DETECTION ----------------------
// Using builtin pivots: returns price of pivot when formed, else na
ph = ta.pivothigh(high, pivot_left, pivot_right)
pl = ta.pivotlow(low, pivot_left, pivot_right)
// We'll track last confirmed pivot prices and bar index
var float lastPivotHigh = na
var int lastPivotHighBar = na
var float lastPivotLow = na
var int lastPivotLowBar = na
if not na(ph)
lastPivotHigh := ph
lastPivotHighBar := bar_index - pivot_right
if not na(pl)
lastPivotLow := pl
lastPivotLowBar := bar_index - pivot_right
// ---------------------- LIQUIDITY SWEEP DETECTION ----------------------
// For a bullish liquidity sweep (buy):
// 1) Price makes a new low wick below lastPivotLow - (atr * sweep_atr_mult) (sweep candle)
// 2) Within `min_sweep_bars` the price reclaims: close > lastPivotLow => bullish signal
var int sweepLowBar = na
var int sweepHighBar = na
// detect sweep down (wick pierce)
isSweepDown = false
if not na(lastPivotLow)
// a candle with low sufficiently below pivot
isSweepDown := low < (lastPivotLow - atr * sweep_atr_mult)
// detect sweep up (wick pierce)
isSweepUp = false
if not na(lastPivotHigh)
isSweepUp := high > (lastPivotHigh + atr * sweep_atr_mult)
// record bar of sweep
if isSweepDown
sweepLowBar := bar_index
if isSweepUp
sweepHighBar := bar_index
// check reclaim after sweep: close back above pivot (buy reclaim) or close back below pivot (sell reclaim)
// ensure reclaim happens within `min_sweep_bars` bars after sweep
bullReclaim = false
bearReclaim = false
if not na(lastPivotLow) and not na(sweepLowBar)
if (bar_index - sweepLowBar) <= min_sweep_bars and close > lastPivotLow
bullReclaim := true
if not na(lastPivotHigh) and not na(sweepHighBar)
if (bar_index - sweepHighBar) <= min_sweep_bars and close < lastPivotHigh
bearReclaim := true
// ---------------------- TREND FILTER ----------------------
in_uptrend = close > ema_trend
in_downtrend = close < ema_trend
// final entry conditions
longCondition = enable_long and bullReclaim and (not use_only_trend or in_uptrend)
shortCondition = enable_short and bearReclaim and (not use_only_trend or in_downtrend)
// Note: variable name required by Pine, we set from input
use_only_trend := use_only_trend // no-op to fix linter if needed
// ---------------------- ORDER EXECUTION & SL/TP CALC ----------------------
var int tradeId = 0
// For buy: SL = lastPivotLow - (atr * sl_atr_mult)
// risk = entry - SL
// TP = entry + rr * risk
if longCondition
// compute SL and TP
sl_price = lastPivotLow - atr * sl_atr_mult
entry_price = close
risk_amt = entry_price - sl_price
tp_price = entry_price + (risk_amt * rr)
// safety: only place trade if positive distances
if risk_amt > 0 and tp_price > entry_price
tradeId += 1
// send entry and exit with stop & limit
strategy.entry("Long_"+str.tostring(tradeId), strategy.long)
strategy.exit("ExitLong_"+str.tostring(tradeId), from_entry="Long_"+str.tostring(tradeId), stop=sl_price, limit=tp_price)
// For sell: SL = lastPivotHigh + (atr * sl_atr_mult)
// risk = SL - entry
// TP = entry - rr * risk
if shortCondition
sl_price_s = lastPivotHigh + atr * sl_atr_mult
entry_price_s = close
risk_amt_s = sl_price_s - entry_price_s
tp_price_s = entry_price_s - (risk_amt_s * rr)
if risk_amt_s > 0 and tp_price_s < entry_price_s
tradeId += 1
strategy.entry("Short_"+str.tostring(tradeId), strategy.short)
strategy.exit("ExitShort_"+str.tostring(tradeId), from_entry="Short_"+str.tostring(tradeId), stop=sl_price_s, limit=tp_price_s)
// ---------------------- PLOTTING ----------------------
// EMA (trend)
plot(ema_trend, title="EMA Trend", linewidth=2)
// arrows and markers for entries
plotshape(longCondition, title="Buy Signal", location=location.belowbar, style=shape.labelup, text="BUY", textcolor=color.white, size=size.tiny, color=color.green)
plotshape(shortCondition, title="Sell Signal", location=location.abovebar, style=shape.labeldown, text="SELL", textcolor=color.white, size=size.tiny, color=color.red)
// plot last SL/TP lines for last trade (visual reference)
// find last open position and plot currently active SL/TP if any
if strategy.position_size > 0
last_sl = strategy.position_avg_price - (strategy.position_avg_price - (lastPivotLow - atr * sl_atr_mult))
// instead use exit order price from last exit? Simpler: plot SL/TP computed earlier if long
// This may plot approximate lines; TradingView native order lines will also display.
// We skip redundant plotting to avoid confusion.