← All Analyses
MCXGOLDM26FEBFUT

PDH

1w ago
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…