Penunjuk dan strategi
Anchored VWAP Bands v3.3 [JopAlgo]Anchored VWAP — a fair-value compass you can trust on any timeframe
If Volume Profile shows where business concentrated, Anchored VWAP (AVWAP) shows what the crowd has paid on average since a moment that matters. It’s a running average of price weighted by traded volume, reset at a point you choose (the “anchor”). That makes AVWAP a reliable fair-value line: above it, the average participant since the anchor is in profit; below it, they’re under water. Markets naturally react around that line.
This version focuses on the parts that make AVWAP practical for real trading:
Clear, event-anchored VWAP so you can ask “since this moment, where is fair value?”
Optional higher-timeframe anchors (e.g., Weekly AVWAP) to define regime
Simple visuals so newer traders can read it instantly, and advanced traders can layer multiple anchors without clutter
(When you add screenshots: image #1 should point to the main AVWAP line with a label “fair value since anchor”, and show a bounce/reject. Image #2 can show confluence: AVWAP kissing VAL/VAH from Volume Profile v3.2 or a clean reclaim through AVWAP.)
What you’re seeing (and why price cares)
The AVWAP line: the volume-weighted average price since your anchor time.
Price above AVWAP → average long (since anchor) is in profit → pullbacks to AVWAP tend to support.
Price below AVWAP → average long is losing → rallies to AVWAP tend to resist.
Multiple anchors (optional): you can plot more than one AVWAP (e.g., Weekly AVWAP and an Event AVWAP) to separate regime (weekly) from tactical timing (event/session).
AVWAP works because it ties “fair value” to time and participation, not just price. When price departs far from AVWAP and then returns, participants frequently defend the line. When price accepts on the other side (closes and holds), that’s often a regime change relative to the anchor.
Anchors: how to pick them (and what changes when you do)
An anchor is simply the timestamp where you start the calculation. Changing it changes both context and expectations:
Session anchors (intraday) — e.g., session open, London/NY open.
Use: scalps/intraday plays.
Behavior: frequent tests; strong for fade-to-mean trades and quick reclaims.
Event anchors — listing, major news, ETF approval, earnings, a swing high/low.
Use: track how price behaves since the catalyst.
Behavior: excellent for measured pullbacks and “is the market digesting this event yet?”
Weekly/Monthly anchors — the Weekly AVWAP is a regime line.
Use: swing/position bias.
Behavior: clean “reclaim” and “rejection” signals; great with Volume Profile’s VAH/VAL.
Rule of thumb:
Choose the slowest anchor that defines your bias (e.g., Weekly AVWAP for swings) and one faster anchor for timing (e.g., Session/Event AVWAP). Too many lines → hesitation.
How to use AVWAP on any timeframe
The framework doesn’t change—only your anchor choices and expectations do.
Scalping (1–5m charts)
Anchors: Session open, London/NY open, or the prior swing low/high.
Setup: If price trends away from the session AVWAP, fade back to AVWAP only when flow isn’t showing absorption against you (pair with CVDv1). If price reclaims AVWAP after a push below, look for inside-back retests at the line.
Intraday (15m–1H)
Anchors: Session open + important event AVWAP (FOMC-like news, ETF day, etc.).
Setup: Use pullbacks to AVWAP to join trend; require acceptance above/below (close and hold) before flipping bias. Confluence of AVWAP with VP v3.2’s VAH/VAL = high-quality location.
Swing (2H–4H)
Anchors: Weekly AVWAP for regime + event AVWAP for timing.
Setup: Reclaim of Weekly AVWAP → prefer longs on pullbacks to that line; rejection → fade rallies into Weekly AVWAP (target POC/HVNs from VP). The best entries are AVWAP + VP edge with CVDv1 not flashing Absorption.
Position (1D–1W)
Anchors: Monthly/Quarterly/Cycle AVWAP.
Setup: Treat the higher-timeframe AVWAP as the mean. Acceptance through it (and hold) often marks cycle transitions. Add on pullbacks to the line that hold.
Reading reclaims, rejections, and “acceptance”
Reclaim: price trades below AVWAP, then closes back above and holds on a retest → bullish signal since the anchor.
Rejection: price pops above AVWAP, prints rejection wick and closes back under → bearish.
Acceptance: multiple bars closing and holding beyond AVWAP, ideally with CVDv1 Alignment OK and no Absorption → higher odds the move persists.
With Volume Profile v3.2, treat AVWAP at VAL/VAH as A-tier locations:
VAL + AVWAP reclaim → mean-reversion long to POC is common.
VAH + AVWAP rejection → fade back to POC or to the next HVN.
Settings that matter (and simple defaults)
Names may vary by version, but these are the ideas you’ll see.
Anchor Time — pick a timestamp (session open, event, week start). Newer traders: start with Session AVWAP intraday; add Weekly AVWAP for swings.
Multiple anchors — if enabled, you can show Weekly AVWAP alongside your custom anchor. Keep it to two lines to stay decisive.
Smoothing / Display — most traders use raw AVWAP (no smoothing). Make sure the line is visible across zoom levels.
Theme & Colors — use distinct colors for each anchor (e.g., white for Weekly, aqua for Session/Event) so you don’t mix them up.
How AVWAP pairs with other tools
Cumulative Volume Delta v1 (CVDv1) — confirms flow quality at AVWAP.
Don’t chase a tag through AVWAP if CVD Absorption is red (typical failed break conditions).
Do prefer reclaims when Alignment = OK and Imbalance % is strong for your anchor.
Volume Profile v3.2 — gives you objective levels (POC/VAH/VAL/HVNs).
AVWAP + VAH/VAL confluence is where you plan trades.
Passing through an LVN toward AVWAP often travels fast; use that to manage risk.
(Add a screenshot that highlights AVWAP touching VAL with CVDv1 “Efficient” → clean bounce to POC.)
A simple, durable playbook
Pick one slow anchor (e.g., Weekly) for bias and one fast anchor (Session/Event) for timing.
Trade at the line, not mid-air: reclaims and rejections at AVWAP are your signals.
Require confirmation from flow: CVDv1 Alignment OK, Imbalance strong, Absorption ≠ red on the trigger bar.
Add Volume Profile v3.2 for targets (POC/HVNs) and edges (VAH/VAL).
If price accepts beyond AVWAP (closes and holds), stop fading and instead join pullbacks to the line.
Common mistakes AVWAP solves
“Mean keeps moving, my MA lies.” AVWAP weights actual traded volume, so fair value adapts to where business was done, not just where price wandered.
“It broke the line and reversed.” That’s no acceptance (or CVDv1 flagged Absorption). Wait for the retest/hold.
“Too many lines, can’t decide.” Keep two anchors max: one for bias, one for timing.
Practical defaults to start with
Intraday: Session AVWAP only. Add an Event AVWAP on special days.
Swing: Weekly AVWAP + one Event AVWAP (start of move or weekly open).
Colors: Distinct but readable (e.g., white for Weekly, aqua for Session/Event).
No smoothing. Let the line be honest—your eyes adjust quickly.
Open source & disclaimer
This indicator is provided open source so you can learn, test, and adapt it to your workflow. Trading involves risk; tools guide decisions but don’t remove uncertainty.
Disclaimer — Not Financial Advice.
The “Anchored VWAP ” indicator and this description are for educational purposes only and do not constitute financial or investment advice. Markets involve risk, including possible loss of capital. makes no warranties and assumes no responsibility for any trading decisions or outcomes resulting from the use of this script. Past performance is not indicative of future results.
Use Anchored VWAP for the where and when around fair value; let CVDv1 judge who’s pushing, and let Volume Profile v3.2 define targets and edges. That trio stays reliable across any timeframe.
SM OTC style Supply/Demand Zones Lite+//@version=6
indicator("OTC SD MTF Lite+", "OTCSDmtf+", overlay=true, max_boxes_count=200, max_labels_count=200)
// ================= Inputs =================
useH4 = input.bool(true, "Show 4H zones")
useD1 = input.bool(true, "Show 1D zones")
useW1 = input.bool(true, "Show 1W zones")
useM1 = input.bool(false, "Show 1M zones")
baseLen = input.int(2, "Base length (HTF bars)", 1, 5)
wickPctMax = input.float(35.0, "Max wick % in base", 0, 100)
impulseX = input.float(1.5, "Departure body vs ATR (x)", 0.5, 5.0)
atrLen = input.int(14, "ATR length (HTF)")
extendBars = input.int(2000, "Extend bars on chart", 200, 10000)
maxPerTF = input.int(12, "Max zones per TF", 3, 30)
showLegend = input.bool(true, "Show tiny legend (4H/1D/1W/1M)")
onlyNearest = input.bool(false, "Show ONLY nearest zone above/below")
hideOverlapTF = input.bool(true, "Hide overlapping zones within each TF (keep newest)")
showNearestLabels = input.bool(false, "Show distance labels to nearest above/below")
// --- Hard cap for future drawing with xloc.bar_index ---
FUTURE_CAP = 500
// Colors (Demand hues per TF). Supply uses red for contrast.
colH4 = color.new(color.teal, 78)
colD1 = color.new(color.blue, 78)
colW1 = color.new(color.orange, 78)
colM1 = color.new(color.purple, 78)
colSup= color.new(color.red, 78)
// ================= Helpers =================
wickiness(h, l, o, c) =>
rng = math.max(h - l, syminfo.mintick)
topW = h - math.max(o, c)
botW = math.min(o, c) - l
100.0 * (topW + botW) / rng
// Returns: (dTrig, dProx, dDist, sTrig, sProx, sDist)
f_htfSignals(baseBars, wickMax, xImpulse, aLen) =>
float _o = open
float _h = high
float _l = low
float _c = close
float _atr = ta.atr(aLen)
bool ok = true
for i = 1 to baseBars
ok := ok and (wickiness(_h , _l , _o , _c ) <= wickMax)
bool bullDepart = _c > _o and (_c - _o) > xImpulse * _atr
bool bearDepart = _c < _o and (_o - _c) > xImpulse * _atr
float dTrig = 0.0
float dProx = na
float dDist = na
float sTrig = 0.0
float sProx = na
float sDist = na
if ok and bullDepart
float hi = ta.highest(_h, baseBars)
float lo = ta.lowest(_l, baseBars)
dTrig := 1.0
dProx := lo
dDist := hi
if ok and bearDepart
float hi2 = ta.highest(_h, baseBars)
float lo2 = ta.lowest(_l, baseBars)
sTrig := 1.0
sProx := hi2
sDist := lo2
// ================= Pull HTF signals =================
= request.security(syminfo.tickerid, "240", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "D", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "W", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "M", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
// ================= Storage per TF =================
var zH4 = array.new_box()
var aH4 = array.new_bool()
var lH4 = array.new_label()
var sH4 = array.new_int() // 1 = Demand, -1 = Supply
var zD1 = array.new_box()
var aD1 = array.new_bool()
var lD1 = array.new_label()
var sD1 = array.new_int()
var zW1 = array.new_box()
var aW1 = array.new_bool()
var lW1 = array.new_label()
var sW1 = array.new_int()
var zM1 = array.new_box()
var aM1 = array.new_bool()
var lM1 = array.new_label()
var sM1 = array.new_int()
// ================= Overlap utils =================
overlap(topA, botA, topB, botB) =>
not (topA < botB or botA > topB)
purgeOverlaps(arrB, arrA, arrL, newTop, newBot) =>
if hideOverlapTF and array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box bOld = array.get(arrB, i)
float t = box.get_top(bOld)
float btm = box.get_bottom(bOld)
if overlap(newTop, newBot, t, btm)
box.delete(bOld)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= Add zone =================
addZone(arrB, arrA, arrL, arrS, topV, botV, baseColor, isDemand) =>
purgeOverlaps(arrB, arrA, arrL, topV, botV)
int leftX = bar_index - 1
int rightX = bar_index + math.min(extendBars, FUTURE_CAP) // respect +500 cap
box b = box.new(leftX, topV, rightX, botV, xloc=xloc.bar_index, bgcolor=baseColor, border_color=color.new(color.black, 0))
float ly = isDemand == 1 ? topV : botV
st = isDemand == 1 ? label.style_label_down : label.style_label_up
string tagTxt = isDemand == 1 ? "Demand" : "Supply"
label l = label.new(leftX, ly, tagTxt, xloc=xloc.bar_index, style=st, textcolor=color.white, color=color.new(color.black, 0), size=size.tiny)
array.push(arrB, b)
array.push(arrA, true)
array.push(arrL, l)
array.push(arrS, isDemand)
if array.size(arrB) > maxPerTF
box.delete(array.shift(arrB))
array.shift(arrA)
label.delete(array.shift(arrL))
array.shift(arrS)
// ================= Maintain / Invalidate =================
extendAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_right(array.get(arrB, i), bar_index + math.min(extendBars, FUTURE_CAP)) // respect +500 cap
invalidate(arrB, arrA, arrL) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
// Close outside band → remove
if close > t or close < btm
box.delete(b)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= New HTF bar flags (strict booleans) =================
int chH4 = ta.change(time("240"))
int chD1 = ta.change(time("D"))
int chW1 = ta.change(time("W"))
int chM1 = ta.change(time("M"))
bool newBarH4 = useH4 and (not na(chH4)) and (chH4 != 0)
bool newBarD1 = useD1 and (not na(chD1)) and (chD1 != 0)
bool newBarW1 = useW1 and (not na(chW1)) and (chW1 != 0)
bool newBarM1 = useM1 and (not na(chM1)) and (chM1 != 0)
// ================= Create zones on new HTF bar =================
if newBarH4
if d4t > 0 and not na(d4p) and not na(d4d)
addZone(zH4, aH4, lH4, sH4, d4d, d4p, colH4, 1)
if s4t > 0 and not na(s4p) and not na(s4d)
addZone(zH4, aH4, lH4, sH4, s4p, s4d, colSup, -1)
if newBarD1
if d1t > 0 and not na(d1p) and not na(d1d)
addZone(zD1, aD1, lD1, sD1, d1d, d1p, colD1, 1)
if s1t > 0 and not na(s1p) and not na(s1d)
addZone(zD1, aD1, lD1, sD1, s1p, s1d, colSup, -1)
if newBarW1
if w1t > 0 and not na(w1p) and not na(w1d)
addZone(zW1, aW1, lW1, sW1, w1d, w1p, colW1, 1)
if swt > 0 and not na(swp) and not na(swd)
addZone(zW1, aW1, lW1, sW1, swp, swd, colSup, -1)
if newBarM1
if m1t > 0 and not na(m1p) and not na(m1d)
addZone(zM1, aM1, lM1, sM1, m1d, m1p, colM1, 1)
if smt > 0 and not na(smp) and not na(smd)
addZone(zM1, aM1, lM1, sM1, smp, smd, colSup, -1)
// ================= Maintain & Invalidate (every bar) =================
extendAll(zH4, aH4)
extendAll(zD1, aD1)
extendAll(zW1, aW1)
extendAll(zM1, aM1)
invalidate(zH4, aH4, lH4)
invalidate(zD1, aD1, lD1)
invalidate(zW1, aW1, lW1)
invalidate(zM1, aM1, lM1)
// ================= Nearest across all TFs =================
tfNearest(arrB, arrA) =>
int upIdx = -1
int dnIdx = -1
float upDist = 1e10
float dnDist = 1e10
float upBtm = na
float dnTop = na
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
if btm >= close
float d = btm - close
if d < upDist
upDist := d
upIdx := i
upBtm := btm
if t <= close
float d2 = close - t
if d2 < dnDist
dnDist := d2
dnIdx := i
dnTop := t
= tfNearest(zH4, aH4)
= tfNearest(zD1, aD1)
= tfNearest(zW1, aW1)
= tfNearest(zM1, aM1)
float upBest = 1e10, dnBest = 1e10
int upArr = -1, upIdxSel = -1, dnArr = -1, dnIdxSel = -1
color upColor = color.new(color.white, 100), dnColor = color.new(color.white, 100)
if (not na(uh4y)) and uh4d < upBest
upBest := uh4d, upArr := 0, upIdxSel := uh4i, upColor := colH4
if (not na(ud1y)) and ud1d < upBest
upBest := ud1d, upArr := 1, upIdxSel := ud1i, upColor := colD1
if (not na(uw1y)) and uw1d < upBest
upBest := uw1d, upArr := 2, upIdxSel := uw1i, upColor := colW1
if (not na(um1y)) and um1d < upBest
upBest := um1d, upArr := 3, upIdxSel := um1i, upColor := colM1
if (not na(dh4y)) and dh4d < dnBest
dnBest := dh4d, dnArr := 0, dnIdxSel := dh4i, dnColor := colH4
if (not na(dd1y)) and dd1d < dnBest
dnBest := dd1d, dnArr := 1, dnIdxSel := dd1i, dnColor := colD1
if (not na(dw1y)) and dw1d < dnBest
dnBest := dw1d, dnArr := 2, dnIdxSel := dw1i, dnColor := colW1
if (not na(dm1y)) and dm1d < dnBest
dnBest := dm1d, dnArr := 3, dnIdxSel := dm1i, dnColor := colM1
// ================= Nearest-only visibility (optional) =================
hideAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_bgcolor(array.get(arrB, i), color.new(color.white, 100))
box.set_border_color(array.get(arrB, i), color.new(color.white, 100))
showOne(arrB, arrA, arrS, idx, demColor) =>
if idx >= 0 and idx < array.size(arrB)
if array.get(arrA, idx)
bool isDemand = array.get(arrS, idx) == 1
color c = isDemand ? demColor : colSup
box.set_bgcolor(array.get(arrB, idx), c)
box.set_border_color(array.get(arrB, idx), color.new(color.black, 0))
if onlyNearest
hideAll(zH4, aH4), hideAll(zD1, aD1), hideAll(zW1, aW1), hideAll(zM1, aM1)
if upArr == 0
showOne(zH4, aH4, sH4, upIdxSel, upColor)
if upArr == 1
showOne(zD1, aD1, sD1, upIdxSel, upColor)
if upArr == 2
showOne(zW1, aW1, sW1, upIdxSel, upColor)
if upArr == 3
showOne(zM1, aM1, sM1, upIdxSel, upColor)
if dnArr == 0
showOne(zH4, aH4, sH4, dnIdxSel, dnColor)
if dnArr == 1
showOne(zD1, aD1, sD1, dnIdxSel, dnColor)
if dnArr == 2
showOne(zW1, aW1, sW1, dnIdxSel, dnColor)
if dnArr == 3
showOne(zM1, aM1, sM1, dnIdxSel, dnColor)
// ================= Nearest distance labels (optional) =================
var label nearUp = na
var label nearDn = na
makeNearLabel(y, txt) =>
label.new(bar_index, y, txt, xloc=xloc.bar_index, style=label.style_label_left, color=color.new(color.black, 0), textcolor=color.white, size=size.tiny)
if showNearestLabels
if not na(nearUp)
label.delete(nearUp)
if not na(nearDn)
label.delete(nearDn)
if upArr != -1
box bUp = upArr == 0 ? array.get(zH4, upIdxSel) : upArr == 1 ? array.get(zD1, upIdxSel) : upArr == 2 ? array.get(zW1, upIdxSel) : array.get(zM1, upIdxSel)
float upBtm = box.get_bottom(bUp)
float pctUp = math.round(10000.0 * (upBtm - close) / close) / 100.0
nearUp := makeNearLabel(upBtm, "Nearest Above ~ " + str.tostring(pctUp) + "%")
if dnArr != -1
box bDn = dnArr == 0 ? array.get(zH4, dnIdxSel) : dnArr == 1 ? array.get(zD1, dnIdxSel) : dnArr == 2 ? array.get(zW1, dnIdxSel) : array.get(zM1, dnIdxSel)
float dnTop = box.get_top(bDn)
float pctDn = math.round(10000.0 * (close - dnTop) / close) / 100.0
nearDn := makeNearLabel(dnTop, "Nearest Below ~ " + str.tostring(pctDn) + "%")
// ================= Tiny legend (dots) =================
var table legend = na
if showLegend and na(legend)
legend := table.new(position.top_left, 4, 1)
if showLegend and not na(legend)
table.cell(legend, 0, 0, "● 4H", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 1, 0, "● 1D", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 2, 0, "● 1W", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 3, 0, "● 1M", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell_set_bgcolor(legend, 0, 0, color.new(color.teal, 70))
table.cell_set_bgcolor(legend, 1, 0, color.new(color.blue, 70))
table.cell_set_bgcolor(legend, 2, 0, color.new(color.orange, 70))
table.cell_set_bgcolor(legend, 3, 0, color.new(color.purple, 70))
DTM 444 BANDS 🚀DTM 444 BANDS 🚀:
The DTM 444 BANDS 🚀 is a powerful, multi-purpose trading indicator combining Supertrend, Dynamic Band Levels, Breakout Signals, and Volume Confirmation to help traders identify high-probability trade setups across different timeframes.
🔧 Key Features
✅ Multi-Timeframe Support
Analyze price action across any timeframe using the Timeframe input.
All band calculations (High, Low, Midline, and Supertrend) are pulled from a higher timeframe for clearer context.
✅ Dynamic Bands Based on Supertrend
High Band: Rolling highest of Supertrend over hiLen period.
Low Band: Rolling lowest of Supertrend over loLen period.
Midline: Midpoint of the above.
Acts like dynamic support/resistance, ideal for trend-following and breakout strategies.
✅ Dual Signal System
Breakout Signals (Buy and Sell): Triggered when price breaks the bands with volume confirmation.
Supertrend Crossover Signals (Buy1 and Sell1): Classic momentum entries with a confirmation twist.
Exit Signals: Optional take-profit/neutral indicators when price reverses.
✅ Volume Confirmation Filter (Optional)
Only triggers signals if the volume exceeds its 20-period SMA.
Helps filter out false breakouts and weak trends in low-liquidity periods.
✅ Visual Enhancements
Color-coded candles based on band positioning (e.g., red = weak, green = strong, etc.)
On-chart labels for each signal for quick reference.
Real-time Signal Dashboard using Pine Script tables showing:
Current signal
Volume filter status
Live volume vs volume SMA
🧪 Practical Use Cases
Trend Traders: Use the Supertrend cross and band breakouts to ride trends early.
Breakout Traders: Catch high-probability moves outside established ranges.
Swing Traders: Time entries and exits using color-coded bars and exit labels.
Volume-Sensitive Traders: Focus on trades with strong volume backing.
📊 Backtest Snapshot
Based on the example chart for Reliance Industries (RELIANCE.NS) on the weekly timeframe:
Several profitable buy and breakout signals during uptrends.
Timely exits and breakdown alerts before reversals.
Volume filter keeps trades clean and avoids noise.
⚙️ Customizable Parameters
High Length and Low Length (default: 19)
Supertrend Multiplier and ATR Length
Volume Filter: Toggle ON/OFF
Volume SMA Length: Default 20
Custom Timeframe: Choose any higher timeframe for multi-timeframe analysis
📢 Alerts Ready
Fully integrated with TradingView alerts:
Breakout & Breakdown
Supertrend crossovers
All alerts respect the volume filter setting
🏁 Final Thoughts
DTM 444 BANDS 🚀 is a versatile and adaptive trading system that blends trend analysis, volatility bands, and volume validation. Whether you're a trend trader, breakout hunter, or swing trader — this tool gives you a structured edge with clear visual cues and real-time alerts.
Relative Volume (RVOL) [JopAlgo]Relative Volume (RVOL) — “Filter Fakes, Ride Real Moves”
What it does:
Shows how today’s volume compares to its own average.
RVOL = current volume ÷ SMA(volume, length)
RVOL > cutoff → participation above normal (green)
RVOL < cutoff → participation below normal (red)
Use it to confirm breaks, filter entries, and avoid chasing moves fueled by thin volume.
Read it in 5 seconds
Above/Below the cutoff line (white) = high/low participation now.
Spikes through the cutoff on a break = real interest.
Dry-ups (well below cutoff) into support/resistance = good risk for mean-revert or pullback entries.
If you remember one rule: don’t chase a breakout with RVOL under the cutoff.
Simple playbook (copy this)
Breakout confirmation
Break at VAH/LVN/structure and RVOL > cutoff → take the retest that holds.
If RVOL stays below cutoff on the break → likely fake; wait for reclaim.
Pullback in trend
Trend up, price pulls to AVWAP / VAL / MA cluster with RVOL below cutoff → take the bounce when price turns; add if RVOL rises on the resume.
Fade the exhaustion
Into resistance, huge RVOL spike but no follow-through (long wick, CVD Absorption) → look for the fail back inside value.
Do less in chop
When RVOL hugs below cutoff all session, expect range; trade edges only.
Timeframe guide
1–5m (scalps): Signals are frequent. Keep cutoff ≥ 1.5; demand RVOL on breaks.
15m–1H (intraday): Sweet spot. cutoff 1.5–2.0 is a solid filter.
2H–4H (swing): Look for clustered bars > cutoff during expansions; dry-ups flag pullback entries.
1D+: Use RVOL to separate true trend days from drift.
Settings that matter
Length (default 14):
Shorter = reacts faster; Longer = smoother baseline.
Intraday: 14–20
Swing/Daily: 20–30
Cutoff (default 1.0):
Set the bar for “real” volume.
Conservative confirmation: 1.5–2.0
For slower pairs/timeframes: 1.2–1.5
Tune by scrolling back and marking where good breaks happened.
Color logic: green above cutoff, red below—no surprises.
Best combos (kept simple)
Volume Profile v3.2 : Confirm breaks of VAH/VAL/LVNs with RVOL > cutoff; target POC/HVNs.
Anchored VWAP : Reclaims/rejections with RVOL > cutoff stick more often.
CVDv1 :
Yes: RVOL high and CVD Alignment OK and no Absorption → higher-quality move.
No: RVOL high but Absorption red → don’t chase; look for fail/reclaim.
Pattern cheat sheet
Trend day: RVOL stays > cutoff on pushes; pullbacks show RVOL dip, then re-expand.
False break: Price pokes level, RVOL < cutoff, quick give-back.
Accumulation: Series of low-RVOL bars compressing under a level → watch for the first RVOL pop to go.
Exhaustion wick: RVOL spike + long wick into resistance/support → likely trap unless next bar accepts.
Notes & pitfalls
Exchange volume varies (crypto): use the same feed you trade and calibrate cutoff there.
RVOL ≠ direction: it’s participation. Always pair with location, structure, and flow.
Quick defaults to start
Length: 20
Cutoff: 1.5 (intraday) / 1.8–2.0 (for stricter confirmation)
Process: Level → RVOL above/below cutoff → CVD quality → Execute with structure-based risk
Mini-disclaimer
Educational tool, not financial advice. Test first, size sensibly, and always anchor decisions to levels, flow, and risk.
Live Position SizerThis position calculator locks onto the live price in real time and calculates your lot and quantity size for you. Best for scalping if you don't want to open a limit order. You input all the necessary data (Account size, risk, SL placement, LONG/SHORT position, etc...) It also has a nifty feature of allowing you the ability to see TP brackets (+1R, +2R, +3R).
The best way I have used it is seeing where my potential SL will go before I consider opening a position and inputting that. Then when I'm ready to open a position, I already have it calculated for me.
“VWAP Precision Suite — EMA Cloud + RTH Anchored Zones”🧠 “VWAP Precision Suite — EMA Cloud + RTH Anchored Zones”
(Alternative titles for testing engagement)
“VWAP Zone Pro — EMA Cloud + RTH Levels”
“VWAP Fusion System — EMA Bias & Daily Anchors”
“Session Flow Pro — VWAP + EMA Trend Matrix”
📜 Description
🔹 Overview
The VWAP Precision Suite is an all-in-one market structure indicator built for intra-day precision and trend confirmation.
It combines institutional-grade tools — VWAP bands, EMA trend zones, and RTH high/low anchors — to help traders identify momentum shifts, session extremes, and volume-weighted fair value zones in real time.
Whether you’re a scalper, swing trader, or futures/day trader, this tool adapts to any trading style with fully customizable inputs.
⚙️ Core Features
✅ Dynamic VWAP Bands — plots ±1/2 ATR deviation zones around the VWAP for intraday fair-value mean reversion and trend extension tracking.
✅ EMA Cloud Zone (9/21 by default) — identifies short-term bias shifts using a color-coded cloud between EMAs.
✅ RTH High/Low Mapping — tracks live session high/low levels plus the previous day’s anchors.
✅ Anchored VWAP (Daily Reset) — plots rolling session VWAP using volume-weighted price action for precision mean tracking.
✅ Trend Color Background — visually highlights bias direction for quick momentum reads.
✅ Customizable Everything — modify EMA lengths, VWAP ATR multipliers, visibility toggles, and background colors to fit your playbook.
🧩 Suggested Starter Settings
Use these settings to begin, then fine-tune to your strategy:
Setting Recommended Description
VWAP Bands ✅ On ±1×ATR for precision zones
EMA Zone ✅ On Fast EMA: 9 / Slow EMA: 21
Anchored VWAP ✅ On Daily reset for new session
RTH High/Low ✅ On Shows live and prior session levels
Trend Background ✅ On Visual bias filter
Color Scheme Green = Bullish Bias / Red = Bearish Bias
💡 Tip:
Scalpers can tighten ATR multipliers (0.8–1.2).
Swing traders can widen ATR multipliers (1.5–2.0).
Adjust EMA 9/21 to faster (5/13) or slower (20/50) based on volatility.
📊 Use Case Examples
📈 Fade the VWAP deviation band and ride back to mean.
🔁 Trade reversals using EMA cloud color flips.
🕒 Mark confluence between Anchored VWAP + RTH highs/lows for breakout zones.
💹 Combine with order-flow or volume profile for higher conviction.
⚠️ Disclaimer
This indicator is for educational purposes only and does not constitute financial advice.
Trading involves risk and may result in losses.
The author is not responsible for any financial decisions made using this tool.
Always use sound risk management and back test before trading live.
© 2025. All rights reserved. Redistribution or resale of this indicator, in full or in part, is strictly prohibited without the author’s written consent.
Reversal Nexus Pro Suite — Smart Scalper/Swing Trader/Hybrid 📝 Description
The Reversal Suite (5–15m) is a dynamic price-action-driven indicator built for scalpers and intraday traders who want to catch high-probability reversals with precision.
This system combines SFP (Swing Failure Patterns), Volume Climax filters, EMA bias, and momentum confirmation logic — all customizable to match your personal trading style.
The default configuration is tuned for NASDAQ futures (NQ1!) and similar indices on 5–15-minute charts, but it can adapt seamlessly to crypto, forex, and equities.
⚙️ How It Works
The indicator looks for exhaustion points in price where:
Volume Climax confirms liquidity sweeps,
EMA bias determines directional filters (single or dual-EMA),
Reclaim and rejection mechanics confirm structure shifts,
Momentum thrust ensures strength on reversal confirmation.
Each setup requires multi-factor alignment to reduce noise and increase signal precision.
🧩 Default Custom Settings (Recommended Start)
Setting Value Description
Mode Custom Enables full manual control
Signals must align within N bars 6 Forces confluence across recent bars
TP1 / TP2 (R-Multiples) 1.5 / 2.5 Default reward zones
RSI Divergence Enabled Adds secondary reversal confirmation
Volume Climax Enabled Detects high-volume exhaustion
Vol SMA Length 21 Volume baseline calculation
Climax ≥ k × SMA 7 Strength multiplier for volume spikes
EMA Length 200 Trend bias reference
Bias Both Allows both long and short setups
Dual EMA Bias Enabled Uses fast (21) vs slow (100) bias tracking
Min Distance from EMA Bias 2.55% Filter to avoid signals too close to MAs
Reclaim Buffer After Sweep 0.22% Ensures valid break-and-reclaim setups
Max Bars for Retest 1 Tight retest condition
Momentum Thrust Confirm Enabled Ensures volume and price thrust
Body ≥ ATR -6 Controls candle thrust sizing
TR SMA Length 20 Measures dynamic volatility
Body ≥ k × TR-SMA -4.4 Confirms structure-based rejection
Opposite-Signal Exit Enabled Auto-clears opposite signals
Opposite Signal Window 5 bars Short-term conflict filter
Swing Lookback (SFP) 2 Finds recent liquidity highs/lows
Cooldown Bars After Signal 8 Prevents over-triggering
🟢 Inputs are fully adjustable, so traders can optimize for:
Scalping (lower EMA, smaller swing lookback)
Swing trading (higher EMA, larger retest window)
Aggressive vs conservative confirmations
🧭 Recommended Use
Works best on 5m–15m timeframes
Pair with VWAP or EMA cloud overlays for directional context
Use Trend Guard to align only with higher-timeframe trend
Ideal for indices, forex majors, and large-cap stocks
🚀 Highlights
✅ Smart confluence-based reversal detection
✅ Built-in retest and rejection logic
✅ Dual EMA and volume climax filters
✅ Customizable momentum thrust confirmation
✅ Optimized for scalpers and intraday swing traders
🧱 Suggested Layout
Chart type: Candlestick
Timeframe: 5m or 15m
Overlay: VWAP / EMA Cloud / ORB Zone
Optional filters: ATR Bands, Volume Profile (VPVR), Session Boxes
⚠️ Disclaimer
The Reversal Nexus Pro indicator is provided for educational and informational purposes only. It is not financial advice and should not be interpreted as a recommendation to buy, sell, or trade any financial instrument.
Trading involves significant risk and may not be suitable for all investors. Past performance does not guarantee future results. Always perform your own analysis and use proper risk management before placing any trades.
The author of this script is not responsible for any financial losses or decisions made based on the use of this tool.
By using this indicator, you acknowledge that you understand these terms and accept full responsibility for your own trading results.
© 2025. All rights reserved. Redistribution or resale of this indicator, in full or in part, is strictly prohibited without the author’s written consent.
Williams Alligator Spread Oscillator (WASO)Short description (About box)
Williams Alligator Spread Oscillator (WASO) converts Bill Williams’ Alligator into a 0–100 oscillator that measures the average distance between Lips/Teeth/Jaw relative to ATR. High = expansion/trend (default), low = compression/range — making sideways markets easier to spot. Includes adaptive normalization, configurable thresholds, background shading, and alerts.
Full description (Description field)
What it does
The Williams Alligator Spread Oscillator (WASO) transforms Bill Williams’ Alligator into a single, adaptive 0–100 scale. It computes the average pairwise distance among the Alligator lines (Lips/Teeth/Jaw), normalizes it by ATR and a rolling min–max window, and smooths the result. This makes the signal robust across symbols and timeframes and explicitly improves detection of sideways (ranging) conditions by highlighting compression regimes.
Why it helps
Sideways detection made easier: Low WASO marks compressed regimes that commonly align with consolidation/range phases, helping you identify chop and plan breakout strategies.
Trend/expansion clarity: High WASO indicates the Alligator lines are widening relative to volatility, pointing to trending or expanding conditions.
You can flip the direction if you prefer “High = Range.”
How it is calculated (plain English)
Smooth price with RMA (SMMA-like) to get Jaw, Teeth, Lips.
Compute the average pairwise distance between these three lines.
Divide by ATR to remove price-scale effects.
Normalize with a rolling min–max window to map values to 0–100.
Optionally apply EMA smoothing to the oscillator.
Key settings
Jaw/Teeth/Lips Lengths: Alligator periods (SMMA-like via ta.rma).
ATR Length: Volatility benchmark for scaling.
Normalization Lookback: Longer = steadier; shorter = more responsive.
Smoothing (EMA): Evens out noise.
High Value = Large Spread (Trend): Toggle to invert semantics.
Upper/Lower Thresholds: 70/30 are practical starting points.
Signals / interpretation
Sideways / Compression (easier to spot):
Default direction: WASO below Lower Threshold (e.g., <30).
With inverted direction OFF: WASO above Upper Threshold (e.g., >70).
Trend / Expansion:
Default direction: WASO above Upper Threshold (e.g., >70).
With inverted direction OFF: WASO below Lower Threshold (e.g., <30).
Midline (50): Neutral zone; flips around 50 can hint at regime shifts.
Alerts included
Range Start (sideways/compression)
Trend Start (expansion/trend)
Notes & limitations
This implementation omits the classic forward shift of Alligator lines to keep signals usable on live bars.
If market behavior shifts (very quiet or very volatile), tune Lookback and ATR Length.
Combine WASO with breakout levels or momentum filters for entries/exits.
Credits & disclaimer
Inspired by Bill Williams’ Alligator.
For educational purposes only. Not financial advice.
Release Notes (v1.0):
Initial release of Williams-Alligator Spread Oscillator (WASO) with ATR-based scaling and adaptive 0–100 normalization.
Direction toggle (High = Trend by default), adjustable thresholds, background shading, and two alert conditions.
Two-Part Supply & Demand Zones with Role ReversalWill show demand and supply with boxes
Once a zone is used it will be removed to keep the chart clean
Europe & US Session Highlighter
Bitcoin trading volumes peak during the Europe-US session overlap (13:30–17:00 UTC), driven by institutional activity and market news. This indicator helps traders:
- Focus on high-liquidity periods for better trade execution.
- Avoid low-volume, high-volatility periods outside major sessions.
- Plan entries and exits during Bitcoin’s most active hours.
How to Use:
- Apply the indicator to any Bitcoin intraday chart (e.g., 1M, 5M, 15M).
- Look for blue (London), green (NY), or purple (overlap) backgrounds to identify active sessions.
MACD Zones (Background Only)Indicator which shows the convergence and divergence zones directly on the graph by highlighting in red (convergence) and green (divergence).
Alternating KAMA-MACD Buy/Sell Triangles//@version=6
indicator("Alternating KAMA-MACD Buy/Sell Triangles", overlay=true)
// === Inputs ===
fastLen = input.int(10, "Fast KAMA Length", minval=2)
slowLen = input.int(30, "Slow KAMA Length", minval=2)
signalLen = input.int(9, "Signal KAMA Length", minval=1)
fastSCPeriod = input.int(2, "KAMA Fast SC period", minval=1)
slowSCPeriod = input.int(30, "KAMA Slow SC period", minval=2)
// === Helper: Kaufman's Adaptive Moving Average ===
// src = source series
// n = efficiency lookback length
// fastP, slowP = periods for smoothing constant (SC)
f_kama(src, n, fastP, slowP) =>
var float kama = na
if bar_index == 0
kama := src
else
change = math.abs(src - src )
vol = 0.0
for i = 0 to n - 1
vol += math.abs(src - src )
er = vol == 0.0 ? 0.0 : change / vol
fastSC = 2.0 / (fastP + 1.0)
slowSC = 2.0 / (slowP + 1.0)
sc = math.pow(er * (fastSC - slowSC) + slowSC, 2)
kama := nz(kama , src) + sc * (src - nz(kama , src))
kama
// === Compute KAMA-based MACD ===
kamaFast = f_kama(close, fastLen, fastSCPeriod, slowSCPeriod)
kamaSlow = f_kama(close, slowLen, fastSCPeriod, slowSCPeriod)
macd_line = kamaFast - kamaSlow
signalKama = f_kama(macd_line, signalLen, fastSCPeriod, slowSCPeriod)
hist = macd_line - signalKama
// === Raw Signals ===
buyRaw = ta.crossover(macd_line, signalKama) and hist > 0
sellRaw = ta.crossunder(macd_line, signalKama) and hist < 0
// === Alternating filter ===
var int lastSignal = 0 // 1 = last Buy, -1 = last Sell, 0 = none
buySignal = buyRaw and lastSignal != 1
sellSignal = sellRaw and lastSignal != -1
if buySignal
lastSignal := 1
if sellSignal
lastSignal := -1
// === Plot Triangles ===
plotshape(buySignal, title="Buy Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.large, text="BUY")
plotshape(sellSignal, title="Sell Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.large, text="SELL")
Multi EMAs + BB High/Low (4, 9, 18, 50, 200)Shows 5 EMAs (4, 9, 18, 50, 200) with distinct, easy-to-read
Pops Master Overlay -Soft Cloud + EMA 5/20/200 + EMA 13/48/200 ⚙️ SETUP & PURPOSE
This indicator combines everything you and I built into one clean, eye-friendly suite:
Soft Cloud Bands for volatility & trend confirmation
Bollinger & Keltner “Squeeze” logic for compression signals
Two EMA families for short-term vs. momentum trend
VWAP toggle for intraday equilibrium reference
🧭 QUICK START
Apply to Chart
Add the script (overlay=true) — works best on 2-minute to daily timeframes.
Choose Theme
Default: Graphite Gray (gentle and easy on the eyes)
You can switch to Soft Teal or Smoke Blue in settings.
Adjust Cloud
“Show Cloud Fill” → toggles the soft volatility zone
“Cloud Transparency” → 92–96 = softer background
“Show Background Tint” → adds a barely visible page hue
🧠 EMA SYSTEMS (Your Two Trading Views)
🔹 Set A – 5 / 20 / 200 EMA
Purpose: Fast, reactive, perfect for momentum & scalp entries
EMA 5 → micro trend (very short-term speed)
EMA 20 → intraday rhythm
EMA 200 → master bias line (above = bullish, below = bearish)
Usage Tip:
When EMA 5 crosses above EMA 20 while price is above the 200, that’s your “early push” confirmation.
Reverse for short bias.
➡ Toggle visibility:
Settings → EMA Set A → turn each one on/off individually.
🔹 Set B – 13 / 48 / 200 EMA
Purpose: Slower, smoother, designed for swing trades & trend filtering
EMA 13 → trend guide
EMA 48 → intermediate momentum
EMA 200 → long-term direction
Usage Tip:
Look for 13 > 48 > 200 stacking for clean, trending structure.
If they’re twisted together, it’s chop — step aside.
➡ Toggle visibility:
Settings → EMA Set B → turn each one on/off individually.
You can run both sets at once to compare momentum vs. structure.
💥 SQUEEZE ZONE
Red dots appear when Bollinger Bands are inside Keltner Channels → low volatility (squeeze forming).
Green dots appear when the squeeze releases → breakout conditions.
💡 Combine this with your EMAs:
If the squeeze releases while both EMA sets align bullishly, it’s often your best breakout timing.
🧮 VWAP
Toggle “Show VWAP (intraday)” to anchor your price bias around session mean value.
Price above VWAP = buyers control; below = sellers control.
👁️ RECOMMENDED SETTINGS
Setting Recommended
Cloud Theme Graphite Gray
Cloud Transparency 92–96
Band Lines Transparency 45
EMA Lines Set A for Day Trading, Set B for Swing
Squeeze Dots ON for momentum confirmation
🕹️ TIPS FOR TOGGLING EMAs
To switch quickly:
Open gear ⚙️ → scroll to “EMA Set A” or “EMA Set B.”
Turn off the ones you don’t want.
You can rename colors in settings to keep them separate (e.g., Green/Gold for A, Lighter Green/Gold for B).
Visual layering trick:
Run Set A (solid) for live momentum.
Run Set B (faint) to see long-term structure behind it.
🌤️ POPS RULE OF THUMB
“When both EMA sets line up, the squeeze releases, and price rides above the cloud —
that’s not a maybe… that’s a momentum wave.”
Microgaps (plots-only, 4-channel, same-day only)Purpose:
This indicator visually highlights 3-bar price gaps on your chart, showing clear visual structure for gap zones without lag or diagonal artifacts.
It draws two outer lines (top and bottom of the gap) for every valid 3-bar gap, and optionally a midline when the gap is considered “large.”
⚙️ How it works
A bull gap is detected when the current bar’s low is higher than the high from two bars ago (low > high ).
A bear gap is detected when the current bar’s high is lower than the low from two bars ago (high < low ).
The lines are centered at the middle bar of the 3-bar sequence.
Gaps are only drawn within the same trading day to avoid false overnight gaps.
To prevent overlapping artifacts, up to four concurrent gap channels can be drawn efficiently using GPU-friendly plot() lines.
🔵 Midline logic
The midline (center of the gap) is only displayed when the gap’s vertical size is “large” relative to recent volatility.
“Large” means the gap height is greater than a user-defined fraction of the average bar range over the past N bars.
Example: if the average 8-bar range = 2 points, and the threshold = 0.3, then only gaps larger than 0.6 points will show the midline.
🧩 Parameters
Setting Description
Bull Gap Color / Width Style of bullish gaps (top and bottom lines).
Bear Gap Color / Width Style of bearish gaps (top and bottom lines).
Mid Gap Color / Width Style of the optional midline (shown only when “large”).
Large Gap — Lookback (bars) Number of bars used to calculate the average range (default: 8).
Large Gap — Size vs Avg Range Fraction of the average range that defines a “large” gap (default: 0.5). Set lower (e.g. 0.3) to show more midlines.
💡 Tips
Set threshold lower (0.2–0.4) for more midlines, higher (0.6–1.0) to highlight only extreme gaps.
Works best on intraday timeframes (1-min to 30-min).
Fully GPU-efficient — can scroll back thousands of bars without lag.
MTF Bollinger Bands (W/D/4H)MTF Bollinger Bands (W/D/4H)
Always mark the 1W 1D 4H bolinger band regardless of the time frame.
50 SMA 5-Candle Crossover50 SMA 5-Candle Crossover. Testing out. Not for trading but for investing. HOLD