DEV Community

Cover image for Low Volume Node (LVN) Rejection / Acceptance Strategy
Ranga
Ranga

Posted on

Low Volume Node (LVN) Rejection / Acceptance Strategy

#ai

Overview

This strategy models low-volume node behavior by identifying low-participation price zones and monitoring how price reacts when revisiting them.
Low-volume nodes often behave as areas where price either:

  • rejects sharply due to lack of acceptance, or
  • moves quickly through if accepted The script attempts to capture both reactions using a simplified rolling-volume imbalance model.

Strategy Logic

LVN Approximation
Since Pine Script has limited native volume-profile access in strategy scripts, this model approximates low-volume nodes using:

  • rolling average price
  • ATR-based zone width
  • relative low-volume detection

Rejection Setup

  • Price enters the LVN zone
  • Fails to remain there
  • Closes back outside the zone

Acceptance Setup

  • Price enters LVN
  • Holds beyond zone boundary
  • Signals continuation potential

Risk Management

  • ATR-based stop-loss
  • Fixed risk-to-reward targets
  • Adaptive to volatility conditions

Intended Use

This strategy is designed for:

  • testing auction-market concepts
  • studying imbalance zones
  • experimenting with value/acceptance behavior

Results vary by symbol and timeframe.

Pine Script v6 Strategy Code

//@version=6
strategy("LVN Rejection / Acceptance Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=5)

// ───── INPUTS ─────
zoneLen    = input.int(40, "LVN Detection Length")
atrLen     = input.int(14, "ATR Length")
zoneWidth  = input.float(0.8, "LVN Width ATR")
stopMult   = input.float(1.5, "Stop ATR Multiplier")
rr         = input.float(2.0, "Risk Reward")

// ───── LVN APPROXIMATION ─────
basis   = ta.sma(close, zoneLen)
atrVal  = ta.atr(atrLen)

lvnUpper = basis + atrVal * zoneWidth
lvnLower = basis - atrVal * zoneWidth

// Relative volume check
avgVol = ta.sma(volume, zoneLen)
lowVol = volume < avgVol * 0.8

// ───── REJECTION / ACCEPTANCE LOGIC ─────
bullReject = low < lvnLower and close > lvnLower and lowVol
bearReject = high > lvnUpper and close < lvnUpper and lowVol

bullAccept = close > lvnUpper and close[1] > lvnUpper
bearAccept = close < lvnLower and close[1] < lvnLower

// ───── ENTRY CONDITIONS ─────
longCondition  = bullReject or bullAccept
shortCondition = bearReject or bearAccept

if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long)

if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short)

// ───── RISK MANAGEMENT ─────
longStop   = strategy.position_avg_price - atrVal * stopMult
longTarget = strategy.position_avg_price + atrVal * stopMult * rr

shortStop   = strategy.position_avg_price + atrVal * stopMult
shortTarget = strategy.position_avg_price - atrVal * stopMult * rr

strategy.exit("Exit Long", from_entry="Long", stop=longStop, limit=longTarget)
strategy.exit("Exit Short", from_entry="Short", stop=shortStop, limit=shortTarget)

// ───── VISUALS ─────
plot(basis, title="LVN Mid", color=color.orange)
plot(lvnUpper, title="LVN Upper", color=color.red)
plot(lvnLower, title="LVN Lower", color=color.green)

Enter fullscreen mode Exit fullscreen mode

Top comments (0)