← All Analyses
GOLDM26FEBFUT
PDH
//@version=5
strategy("Previous Day Liquidity Sweep Strategy",
overlay=true,
pyramiding=0,
process_orders_on_close=true,
initial_capital=100000)
// ───────────────────── Inputs ─────────────────────
pivotLength = input.int(3, "Swing pivot length", minval=1)
maxTrades = input.int(3, "Maximum trades per day", minval=1, maxval=3)
// ───────────────── Previous-day levels ─────────────
prevDayHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
prevDayLow = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
plot(prevDayHigh, "Previous Day High", color=color.red, linewidth=2, style=plot.style_linebr)
plot(prevDayLow, "Previous Day Low", color=color.lime, linewidth=2, style=plot.style_linebr)
// ─────────────────── Swing targets ─────────────────
pivotLow = ta.pivotlow(low, pivotLength, pivotLength)
pivotHigh = ta.pivothigh(high, pivotLength, pivotLength)
var float lastSwingLow = na
var float lastSwingHigh = na
if not na(pivotLow)
lastSwingLow := pivotLow
if not na(pivotHigh)
lastSwingHigh := pivotHigh
// ───────────────── Daily reset ─────────────────────
newDay = ta.change(time("D")) != 0
var int tradesToday = 0
var float dayHigh = na
var float dayLow = na
if newDay
tradesToday := 0
dayHigh := high
dayLow := low
else
dayHigh := na(dayHigh) ? high : math.max(dayHigh, high)
dayLow := na(dayLow) ? low : math.min(dayLow, low)
// ──────────────── Candle definitions ───────────────
redCandle = close < open
greenCandle = close > open
flat = strategy.position_size == 0
// ──────────────── Short-side state ─────────────────
var bool shortInitialLiquidityTouched = false
var bool shortCanSearch = false
var bool shortNeedNewHigh = false
var bool shortAwaitSweep = false
var float shortLastRedHigh = na
var int shortPendingBar = na
var float shortPendingLow = na
var float shortPendingHigh = na
var float shortPendingTarget = na
// ───────────────── Long-side state ─────────────────
var bool longInitialLiquidityTouched = false
var bool longCanSearch = false
var bool longNeedNewLow = false
var bool longAwaitSweep = false
var float longLastGreenLow = na
var int longPendingBar = na
var float longPendingHigh = na
var float longPendingLow = na
var float longPendingTarget = na
if newDay
shortInitialLiquidityTouched := false
shortCanSearch := false
shortNeedNewHigh := false
shortAwaitSweep := false
shortLastRedHigh := na
shortPendingBar := na
longInitialLiquidityTouched := false
longCanSearch := false
longNeedNewLow := false
longAwaitSweep := false
longLastGreenLow := na
longPendingBar := na
// ───── Detect finished trades and require new liquidity ─────
if strategy.position_size[1] < 0 and strategy.position_size == 0
shortAwaitSweep := true
if strategy.position_size[1] > 0 and strategy.position_size == 0
longAwaitSweep := true
// First liquidity touch: previous day high / low
if flat and not shortInitialLiquidityTouched and high > prevDayHigh
shortInitialLiquidityTouched := true
shortCanSearch := true
if flat and not longInitialLiquidityTouched and low < prevDayLow
longInitialLiquidityTouched := true
longCanSearch := true
// For a second/third short: sweep above the previous red candle high
if flat and shortAwaitSweep and high > shortLastRedHigh
shortAwaitSweep := false
shortCanSearch := true
// For a second/third long: sweep below the previous green candle low
if flat and longAwaitSweep and low < longLastGreenLow
longAwaitSweep := false
longCanSearch := true
// If previous setup did not confirm, require a new high / low of the day
if flat and shortNeedNewHigh and high > dayHigh[1]
shortNeedNewHigh := false
shortCanSearch := true
if flat and longNeedNewLow and low < dayLow[1]
longNeedNewLow := false
longCanSearch := true
// ─────── Strict next-candle confirmation of short setup ───────
shortCheckedThisBar = not na(shortPendingBar) and shortPendingBar == bar_index - 1
if shortCheckedThisBar
if flat and tradesToday < maxTrades and low < shortPendingLow and shortPendingTarget < close
shortId = "Short " + str.tostring(tradesToday + 1)
strategy.entry(shortId, strategy.short)
strategy.exit("Short Exit " + str.tostring(tradesToday + 1),
from_entry=shortId,
stop=shortPendingHigh,
limit=shortPendingTarget)
tradesToday += 1
shortLastRedHigh := shortPendingHigh
else
// Next candle did not break the red candle low:
// wait for a fresh high of the present day.
shortNeedNewHigh := true
shortPendingBar := na
// ─────── Strict next-candle confirmation of long setup ────────
longCheckedThisBar = not na(longPendingBar) and longPendingBar == bar_index - 1
if longCheckedThisBar
if flat and tradesToday < maxTrades and high > longPendingHigh and longPendingTarget > close
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by GoCharting. Read more in the Terms of Use.
Comments (0)
Loading comments…
