Smart Scalper Pro Template + VWAP
📌 Author
Garry Evans
Independent system developer focused on:
Risk-first automation
Market structure & liquidity behavior
Discipline, consistency, and capital preservation
“The edge isn’t the market — it’s the man who survives it.”
⚙️ Risk Management & Position Sizing
The script is built around capital protection, not signal frequency.
Risk logic includes:
Fixed or dynamic risk per trade
Market-adaptive position sizing
Session-based trade limits
Daily trade caps and auto-lockout protection
Volatility-aware sizing (futures & crypto)
⚠️ Profit is pursued only after risk is controlled.
📊 Track Record
Backtested across multiple market environments
Forward-tested and actively used by the author
Real-account trades are logged where platform rules allow
Results vary by market, timeframe, and user-defined risk settings.
🌍 Supported Markets
Designed to work across all liquid markets, including:
Stocks
Crypto (spot & futures)
Options (signal-based framework)
Futures (indices, metals, crypto futures)
The system adapts to volatility and structure — it is not market-specific.
⚖️ Leverage
Leverage is not required
If used, leverage is fully user-controlled
Risk logic scales exposure conservatively
No martingale.
No revenge sizing.
No over-exposure logic.
🧪 Backtesting
✔ Yes
Strategy logic has been backtested
Filters reduce chop, noise, and forced trades
Focus on drawdown control over curve-fitting
🛠 Support
✔ Yes
Direct author support
Ongoing improvements and updates
Feature refinement based on real usage and feedback
👥 Community
✔ Yes
Private user access
High-quality feedback environment
No public signal spam or hype-driven chat rooms
⏳ Trial Period
✔ Yes
Limited trial access available
Designed for evaluation only
Trial users do not receive full feature access
🚫 Who This Script Is NOT For
This system is not for:
Traders looking for guaranteed profits
Users expecting copy-paste “signal calls”
Over-leveraged gamblers
Those unwilling to follow risk rules
Anyone seeking overnight results
This is a discipline and automation tool, not a shortcut.
🧠 Final Positioning
This is not a signal service.
This is a risk-controlled execution framework designed to:
Enforce discipline
Reduce emotional trading
Protect capital during bad market conditions
Scale responsibly during favorable ones
Genişlik Göstergeleri
Smart Scalper Pro Template + VWAP + FVG Invite-Only Trading Script
Private Access • Risk-First • Discipline-Driven
🔐 Access Tiers
Lifetime Access — $999
(Limited to 25 total seats)
One-time payment
Full script access
All future updates included
Priority support & early feature access
Locked pricing — never increases
Once lifetime seats are filled, this tier is permanently closed.
Level 2 Access — $199
Advanced Risk & Confirmation Module
Higher-confidence trade filters
Enhanced risk controls & lockout logic
Advanced session and volatility filters
Designed for experienced, disciplined traders
Reduces over-trading and low-quality setups
Level 2 is feature-based, not cosmetic — it adds stricter trade qualification.
Subscription Access — $99 / month
Core strategy framework
Risk-managed trade logic
Ongoing updates while subscribed
Ideal for evaluation or short-term usage
Subscription does not include Level 2 advanced filters.
📌 Author
Garry Evans
Independent system developer focused on:
Risk-first automation
Market structure & liquidity behavior
Discipline, consistency, and capital preservation
“The edge isn’t the market — it’s the man who survives it.”
⚙️ Risk Management & Position Sizing
The script is built around capital protection, not signal frequency.
Risk logic includes:
Fixed or dynamic risk per trade
Market-adaptive position sizing
Session-based trade limits
Daily trade caps and auto-lockout protection
Volatility-aware sizing (futures & crypto)
⚠️ Profit is pursued only after risk is controlled.
📊 Track Record
Backtested across multiple market environments
Forward-tested and actively used by the author
Real-account trades are logged where platform rules allow
Results vary by market, timeframe, and user-defined risk settings.
🌍 Supported Markets
Designed to work across all liquid markets, including:
Stocks
Crypto (spot & futures)
Options (signal-based framework)
Futures (indices, metals, crypto futures)
The system adapts to volatility and structure — it is not market-specific.
⚖️ Leverage
Leverage is not required
If used, leverage is fully user-controlled
Risk logic scales exposure conservatively
No martingale.
No revenge sizing.
No over-exposure logic.
🧪 Backtesting
✔ Yes
Strategy logic has been backtested
Filters reduce chop, noise, and forced trades
Focus on drawdown control over curve-fitting
🛠 Support
✔ Yes
Direct author support
Ongoing improvements and updates
Feature refinement based on real usage and feedback
👥 Community
✔ Yes
Private user access
High-quality feedback environment
No public signal spam or hype-driven chat rooms
⏳ Trial Period
✔ Yes
Limited trial access available
Designed for evaluation only
Trial users do not receive full feature access
🚫 Who This Script Is NOT For
This system is not for:
Traders looking for guaranteed profits
Users expecting copy-paste “signal calls”
Over-leveraged gamblers
Those unwilling to follow risk rules
Anyone seeking overnight results
This is a discipline and automation tool, not a shortcut.
🧠 Final Positioning
This is not a signal service.
This is a risk-controlled execution framework designed to:
Enforce discipline
Reduce emotional trading
Protect capital during bad market conditions
Scale responsibly during favorable ones
BK AK-Momentum Pivot Wolf🐺 BK AK–Momentum Pivot Wolf — Momentum / Pivots / Confluence 🐺
🙏 All glory to Gd.
Built with standards and discipline passed down by my mentor — thank you for the lens and the insistence on structure over noise.
Update / Record
A previous version of this publication was hidden due to insufficient description. This republish is a complete, self-contained explanation of what the script does, how it works, and how to use it.
✨ What this script does
Pivot Wolf is a TSI-based momentum oscillator system that focuses on extremes → pivots → confirmation, then adds confluence layers (VWAP, MTF alignment, SNR, volume, regime) to reduce chop and low-quality signals.
It’s built to help you:
Identify momentum extremes using dynamic or static bands
Detect pivot points in the oscillator at those extremes
Mark divergences (regular + hidden) between price and oscillator
Confirm/grade signals using a scoring system (or legacy hard filters)
Visualize context via VWAP gating, MTF alignment, and regime state
Project post-pivot expectation zones via T1/T2 targets
Optionally enable historical learning that only applies overrides when validation is strong
🧠 How it works (high level)
1) Momentum engine (TSI blend)
Computes Fast and Slow TSI.
Optionally blends them using volatility weighting (ATR% normalized over a lookback) to adapt responsiveness.
Smooths momentum with a Signal EMA for cross/shift confirmation.
2) Bands define “extremes”
Dynamic mode uses StdDev (or robust MAD) over a lookback to size bands.
Static mode uses a fixed ± level.
Extremes are simply “momentum beyond the band,” with optional tolerance/smoothing.
3) Pivot detection (the main signals)
Uses oscillator pivot highs/lows.
A “strong” pivot is when a pivot forms outside the band (oversold/overbought).
Marker styling, sizes, and tooltips are configurable.
4) Divergence logic
Tracks the last two oscillator pivots and compares them to the last two price pivots:
Bullish divergence: price makes a lower low while oscillator makes a higher low
Bearish divergence: price makes a higher high while oscillator makes a lower high
Includes hidden divergences and optional “require extreme” filtering.
5) Confluence + scoring (0–100)
Instead of only hard rules, Pivot Wolf can compute bull/bear scores using:
VWAP position and/or slope gating
MTF direction alignment across selected timeframes
Signal-to-noise ratio filter (momentum vs signal noise)
Volume confirmation and regime adjustments
Acceleration / deceleration behavior
Structure + consolidation penalties
Signals can be shown as strong or weak (optional), based on your thresholds.
6) Targets / projections
After confirmed pivots, it projects expectation zones using recent run behavior:
T1 = 0.618 projection
T2 = 1.000 projection
Targets can display continuously or only when momentum approaches.
7) Optional historical learning
If enabled, it records pivot outcomes after N bars and runs a train/validation check before applying any learned overrides. If validation fails, it stays on manual settings.
🧭 How to use (simple workflow)
🧩 Check MTF dashboard for alignment (avoid fighting the stack).
🧱 Let momentum reach band extremes (OB/OS).
🔻🔺 Take pivot signals more seriously when score is strong + VWAP gate agrees.
💎 Use divergence as added weight, not as the trigger.
🎯 Manage around T1/T2 as structured expectation zones.
👁️🗨️ King Solomon Lens
“Solomon didn’t predict. He judged. He built tests that made truth show itself. Pivot Wolf is that: pivots as boundary stones, momentum as witness, acceleration as the confession. No hammer in the Temple — rules are cut before entry. When it’s quiet, it’s saving you. When it speaks, it’s a ruling.”
This is not financial advice. This is structure. If you wanted a fortune teller, you’ll hate this script. If you wanted a system that makes the market prove itself before you strike—welcome to the Wolf.
🙏 All glory to G-d—the source of all wisdom and every true edge. 🙏
Chip Distribution Pro// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// Enhanced Position Cost Distribution - Auto-adaptive with improved visualization
// Works with ETFs, commodities, forex, crypto, stocks - any instrument
// @version=5
indicator('Chip Distribution Pro', overlay = true, max_lines_count = 500, max_bars_back = 500)
//#region Inputs
string GRP_GENERAL = "General Settings"
int LOOKBACK = input.int(1000, 'Lookback Bars', maxval = 20000, minval = 500, step = 250, group = GRP_GENERAL)
int CHART_X_OFFSET = input.int(100, 'Chart Offset', step = 10, group = GRP_GENERAL)
int LABEL_X_OFFSET = CHART_X_OFFSET + 4
int CHART_MAX_WIDTH = input.int(80, 'Max Width', maxval = 500, minval = 10, step = 10, group = GRP_GENERAL)
int NUM_BUCKETS = input.int(400, 'Price Buckets', maxval = 500, minval = 50, step = 50, group = GRP_GENERAL)
string GRP_AUTO = "Auto-Tuning"
bool AUTO_TUNE = input.bool(true, 'Enable Auto-Tuning', group = GRP_AUTO,
tooltip = 'Automatically adjusts turnover rate based on volatility and volume characteristics')
float MANUAL_DECAY = input.float(0.1, 'Manual Turnover Rate', minval = 0.01, maxval = 0.5, step = 0.01, group = GRP_AUTO,
tooltip = 'Only used when Auto-Tuning is disabled')
int VOLATILITY_PERIOD = input.int(20, 'Volatility Period', minval = 5, maxval = 100, group = GRP_AUTO)
string GRP_VISUAL = "Visualization"
string COLOR_SCHEME = input.string("Rainbow", "Color Scheme", options = , group = GRP_VISUAL)
color PROFIT_COLOR_LIGHT = input.color(#26a69a, 'Profit Light', group = GRP_VISUAL)
color PROFIT_COLOR_DARK = input.color(#004d40, 'Profit Dark', group = GRP_VISUAL)
color LOSS_COLOR_LIGHT = input.color(#ef5350, 'Loss Light', group = GRP_VISUAL)
color LOSS_COLOR_DARK = input.color(#b71c1c, 'Loss Dark', group = GRP_VISUAL)
color CURRENT_PRICE_COLOR = input.color(color.yellow, 'Current Price', group = GRP_VISUAL)
color AVG_PRICE_COLOR = input.color(#2196F3, 'Average Cost', group = GRP_VISUAL)
color PEAK_COLOR = input.color(#FF9800, 'Peak Concentration', group = GRP_VISUAL)
color STATS_COLOR = input.color(#434651, 'Stats Background', group = GRP_VISUAL)
string GRP_LEVELS = "Key Levels"
bool SHOW_SUPPORT_RESISTANCE = input.bool(true, 'Show Support/Resistance Zones', group = GRP_LEVELS)
bool SHOW_PEAK = input.bool(true, 'Show Peak Concentration', group = GRP_LEVELS)
float SR_THRESHOLD = input.float(0.7, 'S/R Detection Threshold', minval = 0.3, maxval = 0.95, step = 0.05, group = GRP_LEVELS,
tooltip = 'Minimum concentration (relative to peak) to mark as support/resistance')
string GRP_SIGNALS = "Signals Panel"
bool SHOW_SIGNALS = input.bool(true, 'Show Signal Panel', group = GRP_SIGNALS)
bool SHOW_KEY_LEVELS = input.bool(true, 'Show Key Price Levels', group = GRP_SIGNALS)
bool SHOW_TREND_ARROW = input.bool(true, 'Show Trend Arrow', group = GRP_SIGNALS)
bool SHOW_PRESSURE_BAR = input.bool(true, 'Show Pressure Bar', group = GRP_SIGNALS)
// Colors for key levels
color SUPPORT_COLOR = input.color(#00E676, 'Support Level', group = GRP_LEVELS)
color RESISTANCE_COLOR = input.color(#FF5252, 'Resistance Level', group = GRP_LEVELS)
color BREAKOUT_COLOR = input.color(#FFD600, 'Breakout Level', group = GRP_LEVELS)
//#endregion
//#region Candle Type
type Candle
int idx
float hi
float lo
float vol
float relativeVol
float atrPct
//#endregion
//#region PCD Type
type PCD
array candles
float minPrice
float maxPrice
float priceStep
array lines
label currentPriceLabel
label avgPriceLabel
label peakLabel
label statsLabel
label signalLabel
array srZones
float calculatedTurnover
// New visualization elements
line supportLine
line resistanceLine
line avgCostLine
label trendArrow
box pressureBar
box pressureFill
label pressureLabel
// Create a new price label
newPriceLabel(color bg, color txtColor) =>
label.new(0, 0, '', style = label.style_label_left, color = bg, textcolor = txtColor, size = size.small)
// Create a new PCD instance
newPCD() =>
array lns = array.new(NUM_BUCKETS)
for i = 0 to NUM_BUCKETS - 1
array.set(lns, i, line.new(0, 0, 0, 0))
PCD.new(
candles = array.new(0),
lines = lns,
currentPriceLabel = newPriceLabel(color.new(#00BCD4, 0), color.white),
avgPriceLabel = newPriceLabel(AVG_PRICE_COLOR, color.white),
peakLabel = newPriceLabel(PEAK_COLOR, color.white),
statsLabel = label.new(0, 0, '', style = label.style_label_up, size = size.small,
textalign = text.align_left, color = color.new(STATS_COLOR, 20), textcolor = color.white),
signalLabel = label.new(0, 0, '', style = label.style_label_left, size = size.small,
textalign = text.align_left, color = color.new(#1a1a2e, 20), textcolor = color.white),
srZones = array.new(0),
calculatedTurnover = 0.1,
minPrice = na,
maxPrice = na,
priceStep = na,
supportLine = line.new(0, 0, 0, 0, color = SUPPORT_COLOR, width = 2, style = line.style_dashed),
resistanceLine = line.new(0, 0, 0, 0, color = RESISTANCE_COLOR, width = 2, style = line.style_dashed),
avgCostLine = line.new(0, 0, 0, 0, color = AVG_PRICE_COLOR, width = 2, style = line.style_dotted),
trendArrow = label.new(0, 0, '', style = label.style_label_center, size = size.large, textcolor = color.white),
pressureBar = box.new(0, 0, 0, 0, bgcolor = color.new(#424242, 50), border_color = color.gray),
pressureFill = box.new(0, 0, 0, 0, bgcolor = color.green, border_color = na),
pressureLabel = label.new(0, 0, '', style = label.style_label_right, size = size.tiny, color = color.new(#000000, 100), textcolor = color.white))
// Auto-calculate turnover rate based on instrument characteristics
calcAdaptiveTurnover(float atrPct, float volRatio) =>
float safeAtrPct = na(atrPct) or atrPct <= 0 ? 0.02 : atrPct
float safeVolRatio = na(volRatio) or volRatio <= 0 ? 1.0 : volRatio
float volBasedTurnover = math.max(0.03, math.min(0.3, safeAtrPct * 3))
float volAdjustment = math.max(0.5, math.min(2.0, safeVolRatio))
float turnover = volBasedTurnover * volAdjustment
math.max(0.02, math.min(0.4, turnover))
// Store candle method
method storeCandle(PCD this, int barIdx, float hiPrice, float loPrice, float volVal, float avgVol, float atrPct) =>
if not na(hiPrice) and not na(loPrice) and not na(volVal) and volVal > 0
float safeAvgVol = na(avgVol) or avgVol <= 0 ? volVal : avgVol
float relVol = volVal / safeAvgVol
float safeAtrPct = na(atrPct) ? 0.02 : atrPct
bool modified = false
int candleSize = array.size(this.candles)
if candleSize > 0
Candle c = array.get(this.candles, candleSize - 1)
if c.idx == barIdx
c.hi := hiPrice
c.lo := loPrice
c.vol := volVal
c.relativeVol := relVol
c.atrPct := safeAtrPct
modified := true
if not modified
Candle c = Candle.new(barIdx, hiPrice, loPrice, volVal, relVol, safeAtrPct)
array.push(this.candles, c)
this.minPrice := na(this.minPrice) ? loPrice : math.min(this.minPrice, loPrice)
this.maxPrice := na(this.maxPrice) ? hiPrice : math.max(this.maxPrice, hiPrice)
float priceRange = this.maxPrice - this.minPrice
this.priceStep := priceRange > 0 ? priceRange / NUM_BUCKETS : 0.0001
// Get bucket index for price
method getBucketIndex(PCD this, float price) =>
if na(this.priceStep) or this.priceStep <= 0 or na(this.minPrice)
0
else
int idx = int(math.floor((price - this.minPrice) / this.priceStep))
math.max(0, math.min(idx, NUM_BUCKETS - 1))
// Get price for bucket index
method getBucketedPrice(PCD this, int bucketIdx) =>
int safeIndex = math.max(0, math.min(bucketIdx, NUM_BUCKETS - 1))
float safeStep = na(this.priceStep) or this.priceStep <= 0 ? 0.0001 : this.priceStep
float safeMin = na(this.minPrice) ? 0.0 : this.minPrice
(safeIndex + 0.5) * safeStep + safeMin
// Get rainbow color based on position (0.0 = bottom/red, 1.0 = top/violet)
getRainbowColor(float position, float intensityRatio) =>
float pos = math.max(0.0, math.min(1.0, position))
int transparency = int(math.round((1.0 - intensityRatio) * 50))
// Rainbow spectrum: red -> orange -> yellow -> green -> cyan -> blue -> violet
if pos < 0.166
color.new(color.from_gradient(pos, 0.0, 0.166, #FF0000, #FF7F00), transparency)
else if pos < 0.333
color.new(color.from_gradient(pos, 0.166, 0.333, #FF7F00, #FFFF00), transparency)
else if pos < 0.5
color.new(color.from_gradient(pos, 0.333, 0.5, #FFFF00, #00FF00), transparency)
else if pos < 0.666
color.new(color.from_gradient(pos, 0.5, 0.666, #00FF00, #00FFFF), transparency)
else if pos < 0.833
color.new(color.from_gradient(pos, 0.666, 0.833, #00FFFF, #0000FF), transparency)
else
color.new(color.from_gradient(pos, 0.833, 1.0, #0000FF, #8B00FF), transparency)
// Get color based on scheme and intensity
getColor(bool isProfitable, float intensity, float maxIntensity, int bucketIdx) =>
float safeMax = maxIntensity > 0 ? maxIntensity : 1.0
float ratio = math.max(0.0, math.min(1.0, intensity / safeMax))
float positionRatio = bucketIdx / math.max(1.0, NUM_BUCKETS - 1.0)
if COLOR_SCHEME == "Rainbow"
getRainbowColor(positionRatio, ratio)
else if COLOR_SCHEME == "Gradient"
if isProfitable
color.from_gradient(ratio, 0.0, 1.0, PROFIT_COLOR_DARK, PROFIT_COLOR_LIGHT)
else
color.from_gradient(ratio, 0.0, 1.0, LOSS_COLOR_DARK, LOSS_COLOR_LIGHT)
else if COLOR_SCHEME == "Heatmap"
color.from_gradient(ratio, 0.0, 1.0, #1a237e, #f44336)
else
if isProfitable
color.new(#5d606b, int(math.round((1.0 - ratio) * 70)))
else
color.new(#e91e63, int(math.round((1.0 - ratio) * 70)))
// Update method
method update(PCD this) =>
int candleCount = array.size(this.candles)
if candleCount > 0 and not na(this.priceStep) and this.priceStep > 0
// Create distribution array
array dist = array.new_float(NUM_BUCKETS, 0.0)
// Process each candle
for candleIdx = 0 to candleCount - 1
Candle candle = array.get(this.candles, candleIdx)
bool isFirstCandle = candleIdx == 0
float turnover = AUTO_TUNE ? calcAdaptiveTurnover(candle.atrPct, candle.relativeVol) : MANUAL_DECAY * candle.relativeVol
turnover := math.min(turnover, 0.95)
this.calculatedTurnover := turnover
int startIdx = this.getBucketIndex(candle.lo)
int endIdx = this.getBucketIndex(candle.hi)
int buckets = math.max(1, endIdx - startIdx + 1)
if isFirstCandle
float initialWeight = 1.0 / buckets
for i = startIdx to endIdx
array.set(dist, i, initialWeight)
else
float decayedAmount = 0.0
for i = 0 to NUM_BUCKETS - 1
float oldVal = array.get(dist, i)
float newVal = oldVal * (1.0 - turnover)
array.set(dist, i, newVal)
decayedAmount += oldVal - newVal
float addPerBucket = decayedAmount / buckets
for i = startIdx to endIdx
array.set(dist, i, array.get(dist, i) + addPerBucket)
// Normalize distribution
float totalWeight = 0.0
for i = 0 to NUM_BUCKETS - 1
totalWeight += array.get(dist, i)
if totalWeight > 0
for i = 0 to NUM_BUCKETS - 1
array.set(dist, i, array.get(dist, i) / totalWeight)
// Find peak
float maxWeight = array.max(dist)
if na(maxWeight) or maxWeight <= 0
maxWeight := 0.001
int peakIndex = array.indexof(dist, maxWeight)
if peakIndex < 0
peakIndex := 0
float peakPrice = this.getBucketedPrice(peakIndex)
// Find support/resistance zones
array srIndices = array.new(0)
if SHOW_SUPPORT_RESISTANCE
bool inZone = false
int zoneStart = 0
for i = 0 to NUM_BUCKETS - 1
bool isHighConcentration = array.get(dist, i) >= maxWeight * SR_THRESHOLD
if isHighConcentration and not inZone
inZone := true
zoneStart := i
else if not isHighConcentration and inZone
inZone := false
array.push(srIndices, int(math.floor((zoneStart + i) / 2)))
if inZone
array.push(srIndices, int(math.floor((zoneStart + NUM_BUCKETS - 1) / 2)))
// Clear old SR zones
int srZoneSize = array.size(this.srZones)
if srZoneSize > 0
for i = 0 to srZoneSize - 1
box b = array.get(this.srZones, i)
box.set_lefttop(b, 0, 0)
box.set_rightbottom(b, 0, 0)
// Draw the distribution
float lowestDisplayedPrice = na
float highestDisplayedPrice = na
for i = 0 to NUM_BUCKETS - 1
float weight = array.get(dist, i)
float price = (i + 0.5) * this.priceStep + this.minPrice
int width = int(math.round(weight / maxWeight * CHART_MAX_WIDTH))
line ln = array.get(this.lines, i)
if width > 0
if na(lowestDisplayedPrice)
lowestDisplayedPrice := price
highestDisplayedPrice := price
int x1 = bar_index + CHART_X_OFFSET
int x2 = x1 - width
bool isProfitable = price < close
color c = getColor(isProfitable, weight, maxWeight, i)
line.set_xy1(ln, x1, price)
line.set_xy2(ln, x2, price)
line.set_color(ln, c)
else
line.set_xy1(ln, 0, 0)
line.set_xy2(ln, 0, 0)
// Draw S/R zones
if SHOW_SUPPORT_RESISTANCE
int srCount = array.size(srIndices)
int leftBar = math.max(0, bar_index - LOOKBACK)
if srCount > 0
for i = 0 to srCount - 1
int idx = array.get(srIndices, i)
float zonePrice = this.getBucketedPrice(idx)
float zoneHalfHeight = this.priceStep * 3
box b = na
if i < array.size(this.srZones)
b := array.get(this.srZones, i)
box.set_lefttop(b, leftBar, zonePrice + zoneHalfHeight)
box.set_rightbottom(b, bar_index, zonePrice - zoneHalfHeight)
else
b := box.new(leftBar, zonePrice + zoneHalfHeight, bar_index, zonePrice - zoneHalfHeight, bgcolor = color.new(PEAK_COLOR, 85), border_color = color.new(PEAK_COLOR, 60))
array.push(this.srZones, b)
// Calculate cumulative distribution
array cumdist = array.copy(dist)
for i = 1 to NUM_BUCKETS - 1
array.set(cumdist, i, array.get(cumdist, i - 1) + array.get(cumdist, i))
// Highlight current price
int closeIndex = this.getBucketIndex(close)
if closeIndex >= 0 and closeIndex < NUM_BUCKETS
line.set_color(array.get(this.lines, closeIndex), CURRENT_PRICE_COLOR)
// Calculate stats
float totalShares = array.get(cumdist, NUM_BUCKETS - 1)
int profitIndex = math.min(closeIndex + 1, NUM_BUCKETS - 1)
float profitRatio = totalShares > 0 ? array.get(cumdist, profitIndex) / totalShares : 0.0
// Calculate average price
float avg = 0.0
for i = 0 to NUM_BUCKETS - 1
float weight = array.get(dist, i)
float price = this.getBucketedPrice(i)
avg += price * weight
int avgIndex = this.getBucketIndex(avg)
if avgIndex >= 0 and avgIndex < NUM_BUCKETS
line.set_color(array.get(this.lines, avgIndex), AVG_PRICE_COLOR)
// Peak concentration - highlight line
if SHOW_PEAK and peakIndex >= 0 and peakIndex < NUM_BUCKETS
line.set_color(array.get(this.lines, peakIndex), PEAK_COLOR)
// Smart label positioning - avoid overlaps
float priceRange = na(highestDisplayedPrice) or na(lowestDisplayedPrice) ? close * 0.01 : (highestDisplayedPrice - lowestDisplayedPrice)
float minLabelSpacing = priceRange * 0.025
// Sort prices and assign staggered X offsets
float currentY = close
float avgY = avg
float peakY = peakPrice
// Adjust avg label if too close to current
if math.abs(avgY - currentY) < minLabelSpacing
avgY := currentY > avgY ? avgY - minLabelSpacing : avgY + minLabelSpacing
// Adjust peak label if too close to current or avg
if SHOW_PEAK
if math.abs(peakY - currentY) < minLabelSpacing
peakY := currentY > peakY ? peakY - minLabelSpacing : peakY + minLabelSpacing
if math.abs(peakY - avgY) < minLabelSpacing
peakY := avgY > peakY ? peakY - minLabelSpacing : peakY + minLabelSpacing
// Position price labels - compact format, right side of distribution
label.set_text(this.currentPriceLabel, str.format('{0,number,#.##}', close))
label.set_xy(this.currentPriceLabel, bar_index + LABEL_X_OFFSET + 2, close)
label.set_style(this.currentPriceLabel, label.style_label_left)
label.set_size(this.currentPriceLabel, size.tiny)
label.set_text(this.avgPriceLabel, str.format('{0,number,#.##} AVG', avg))
label.set_xy(this.avgPriceLabel, bar_index + LABEL_X_OFFSET + 2, avgY)
label.set_style(this.avgPriceLabel, label.style_label_left)
label.set_size(this.avgPriceLabel, size.tiny)
if SHOW_PEAK
label.set_text(this.peakLabel, str.format('{0,number,#.##} PEAK', peakPrice))
label.set_xy(this.peakLabel, bar_index + LABEL_X_OFFSET + 2, peakY)
label.set_style(this.peakLabel, label.style_label_left)
label.set_size(this.peakLabel, size.tiny)
// Calculate ranges safely
float safeTotalShares = totalShares > 0 ? totalShares : 1.0
int idx05 = array.binary_search_leftmost(cumdist, safeTotalShares * 0.05)
int idx95 = array.binary_search_leftmost(cumdist, safeTotalShares * 0.95)
int idx15 = array.binary_search_leftmost(cumdist, safeTotalShares * 0.15)
int idx85 = array.binary_search_leftmost(cumdist, safeTotalShares * 0.85)
float ninetyPctLow = this.getBucketedPrice(idx05)
float ninetyPctHigh = this.getBucketedPrice(idx95)
float seventyPctLow = this.getBucketedPrice(idx15)
float seventyPctHigh = this.getBucketedPrice(idx85)
float rangeDenom = ninetyPctHigh - ninetyPctLow
float rangeOverlap = rangeDenom != 0 ? (seventyPctHigh - seventyPctLow) / rangeDenom : 0.0
// Calculate chip concentration
float concentration = rangeOverlap * 100
string concentrationDesc = concentration < 50 ? "High" : concentration < 70 ? "Medium" : "Dispersed"
// Pressure analysis
float safeAvg = avg > 0 ? avg : close
float priceVsAvg = ((close - safeAvg) / safeAvg) * 100
string pressure = priceVsAvg > 5 ? "Strong Bullish" : priceVsAvg > 1 ? "Bullish" :
priceVsAvg < -5 ? "Strong Bearish" : priceVsAvg < -1 ? "Bearish" : "Neutral"
// Price vs Peak
float safePeak = peakPrice > 0 ? peakPrice : close
float priceVsPeak = ((close - safePeak) / safePeak) * 100
string peakRelation = close > peakPrice ? "Above Peak" : close < peakPrice ? "Below Peak" : "At Peak"
// Stats panel - positioned at bottom, compact
float displayedRange = na(highestDisplayedPrice) or na(lowestDisplayedPrice) ? close * 0.02 : highestDisplayedPrice - lowestDisplayedPrice
label.set_text(this.statsLabel, str.format(
'90%: {0,number,#.##} - {1,number,#.##} | 70%: {2,number,#.##} - {3,number,#.##}',
ninetyPctLow, ninetyPctHigh, seventyPctLow, seventyPctHigh))
if not na(lowestDisplayedPrice) and displayedRange > 0
label.set_y(this.statsLabel, lowestDisplayedPrice - displayedRange * 0.05)
label.set_style(this.statsLabel, label.style_label_up)
label.set_x(this.statsLabel, bar_index + CHART_X_OFFSET - 30)
label.set_size(this.statsLabel, size.tiny)
// Signal panel - hidden (info moved to trend arrow and pressure bar)
label.set_text(this.signalLabel, "")
label.set_xy(this.signalLabel, bar_index, close)
// === NEW PROFESSIONAL VISUALIZATIONS ===
// 1. Key Level Lines - Support, Resistance, and Average Cost extending across chart
if SHOW_KEY_LEVELS
int chartLeft = math.max(0, bar_index - LOOKBACK)
int chartRight = bar_index + CHART_X_OFFSET - 5
// Average cost line (horizontal dotted blue line)
line.set_xy1(this.avgCostLine, chartLeft, avg)
line.set_xy2(this.avgCostLine, chartRight, avg)
line.set_color(this.avgCostLine, AVG_PRICE_COLOR)
// Find strongest support (highest concentration below current price)
float strongestSupport = na
float strongestSupportWeight = 0.0
float strongestResistance = na
float strongestResistanceWeight = 0.0
for i = 0 to NUM_BUCKETS - 1
float bucketPrice = this.getBucketedPrice(i)
float bucketWeight = array.get(dist, i)
if bucketPrice < close and bucketWeight > strongestSupportWeight
strongestSupport := bucketPrice
strongestSupportWeight := bucketWeight
if bucketPrice > close and bucketWeight > strongestResistanceWeight
strongestResistance := bucketPrice
strongestResistanceWeight := bucketWeight
// Support line (green dashed)
if not na(strongestSupport)
line.set_xy1(this.supportLine, chartLeft, strongestSupport)
line.set_xy2(this.supportLine, chartRight, strongestSupport)
line.set_color(this.supportLine, SUPPORT_COLOR)
else
line.set_xy1(this.supportLine, bar_index, close)
line.set_xy2(this.supportLine, bar_index, close)
line.set_color(this.supportLine, color.new(SUPPORT_COLOR, 100))
// Resistance line (red dashed)
if not na(strongestResistance)
line.set_xy1(this.resistanceLine, chartLeft, strongestResistance)
line.set_xy2(this.resistanceLine, chartRight, strongestResistance)
line.set_color(this.resistanceLine, RESISTANCE_COLOR)
else
line.set_xy1(this.resistanceLine, bar_index, close)
line.set_xy2(this.resistanceLine, bar_index, close)
line.set_color(this.resistanceLine, color.new(RESISTANCE_COLOR, 100))
// 2. Trend Direction Arrow
if SHOW_TREND_ARROW
string trendSymbol = priceVsAvg > 5 ? "▲▲" : priceVsAvg > 1 ? "▲" :
priceVsAvg < -5 ? "▼▼" : priceVsAvg < -1 ? "▼" : "◆"
color trendColor = priceVsAvg > 5 ? color.new(#00E676, 0) : priceVsAvg > 1 ? color.new(#4CAF50, 0) :
priceVsAvg < -5 ? color.new(#FF1744, 0) : priceVsAvg < -1 ? color.new(#EF5350, 0) : color.new(#9E9E9E, 0)
string trendText = trendSymbol + " " + pressure
label.set_text(this.trendArrow, trendText)
float arrowY = na(highestDisplayedPrice) ? close : highestDisplayedPrice + displayedRange * 0.12
label.set_xy(this.trendArrow, bar_index + CHART_X_OFFSET - 40, arrowY)
label.set_color(this.trendArrow, color.new(trendColor, 70))
label.set_textcolor(this.trendArrow, trendColor)
label.set_size(this.trendArrow, size.large)
// 3. Pressure Bar (Profit/Loss ratio visualization)
if SHOW_PRESSURE_BAR
float barWidth = 8.0
float barHeight = displayedRange * 0.25
float barX = bar_index + CHART_X_OFFSET + 5
float barTop = na(highestDisplayedPrice) ? close + barHeight/2 : highestDisplayedPrice - displayedRange * 0.02
float barBottom = barTop - barHeight
// Background bar
box.set_lefttop(this.pressureBar, int(barX), barTop)
box.set_rightbottom(this.pressureBar, int(barX + barWidth), barBottom)
box.set_bgcolor(this.pressureBar, color.new(#424242, 60))
// Fill based on profit ratio (green from bottom)
float fillHeight = barHeight * profitRatio
float fillTop = barBottom + fillHeight
color fillColor = profitRatio > 0.7 ? color.new(#00E676, 30) :
profitRatio > 0.5 ? color.new(#4CAF50, 30) :
profitRatio > 0.3 ? color.new(#FFC107, 30) : color.new(#FF5252, 30)
box.set_lefttop(this.pressureFill, int(barX), fillTop)
box.set_rightbottom(this.pressureFill, int(barX + barWidth), barBottom)
box.set_bgcolor(this.pressureFill, fillColor)
// Pressure label
string pressureText = str.format('{0,number,#}%', profitRatio * 100)
label.set_text(this.pressureLabel, pressureText)
label.set_xy(this.pressureLabel, int(barX - 1), barTop + displayedRange * 0.01)
label.set_textcolor(this.pressureLabel, fillColor)
//#endregion
//#region Main
= request.security(syminfo.tickerid, 'D', , lookahead = barmerge.lookahead_off)
float atrPercent = dailyClose > 0 ? dailyATR / dailyClose : 0.02
if timeframe.in_seconds(timeframe.period) <= timeframe.in_seconds('D')
var PCD pcd = newPCD()
if last_bar_index - bar_index < LOOKBACK
pcd.storeCandle(dailyBarIdx, dailyHigh, dailyLow, dailyVolume, avgVolume, atrPercent)
if barstate.islast
pcd.update()
//#endregion
Neeson bitcoin Dynamic ATR Trailing SystemNeeson bitcoin Dynamic ATR Trailing System: A Comprehensive Guide to Volatility-Adaptive Trend Following
Introduction
The Dynamic ATR Trailing System (DATR-TS) represents a sophisticated approach to trend following that transcends conventional moving average or breakout-based methodologies. Unlike standard trend-following systems that rely on price pattern recognition or fixed parameter oscillators, this system operates on the principle of volatility-adjusted position management—a nuanced approach that dynamically adapts to changing market conditions rather than imposing rigid rules on market behavior.
Originality and Innovation
Distinct Methodological Approach
What sets DATR-TS apart from hundreds of existing trend-following systems is its dual-layered conditional execution framework. While most trend-following systems fall into one of three broad categories—moving average crossovers, channel breakouts, or momentum oscillators—this system belongs to the more specialized category of volatility-normalized trailing stop systems.
Key Original Contributions:
Volatility-Threshold Signal Filtering: Most trend systems generate signals continuously, leading to overtrading during low-volatility periods. DATR-TS implements a proprietary volatility filter that requires minimum market movement before generating signals, effectively separating high-probatility trend opportunities from market noise.
Self-Contained Position State Management: Unlike traditional systems that require external position tracking, DATR-TS maintains an internal position state that prevents contradictory signals and creates a closed-loop decision framework.
Dynamic Risk Parameter Adjustment: The system doesn't use fixed percentage stops or rigid ATR multiples. Instead, it implements a responsive adjustment mechanism that widens stops during high volatility and tightens them during low volatility, creating an optimal balance between risk protection and opportunity capture.
Trader-Centric Visualization Philosophy: Beyond mere signal generation, the system provides a comprehensive visual feedback system designed to align with human cognitive patterns, reducing emotional decision-making through consistent color coding and information hierarchy.
Technical Implementation and Functionality
Core Operational Mechanism
DATR-TS implements a volatility-adjusted trend persistence model that operates on the principle that trending markets exhibit characteristic volatility signatures. The system specifically targets medium-term directional movements (typically lasting 5-20 days) rather than short-term scalping opportunities or long-term position trades.
The Four-Pillar Architecture:
Volatility Measurement and Normalization
Calculates Average True Range (ATR) over a user-defined period
Converts absolute volatility to percentage terms relative to price
Compares current volatility against user-defined thresholds to filter suboptimal conditions
Dynamic Trailing Stop Algorithm
Establishes an initial stop distance based on current volatility
Implements a four-state adjustment mechanism that responds to price action
Maintains stop position during trend continuation while allowing for trend reversal detection
Conditional Signal Generation
Generates entry signals only when price action meets both directional and volatility criteria
Produces exit signals based on trailing stop penetration
Incorporates position state awareness to prevent conflicting signals
Comprehensive Feedback System
Provides multi-layer visual information including dynamic stop lines, signal labels, and color-coded price action
Displays real-time metrics through an integrated dashboard
Offers configurable visualization options for different trading styles
Specific Trend-Following Methodology
DATR-TS employs a volatility-normalized trailing stop breakout approach, which differs significantly from common trend identification methods:
Not a moving average crossover system (like MACD or traditional MA crosses)
Not a channel breakout system (like Bollinger Band or Donchian Channel breaks)
Not a momentum oscillator system (like RSI or Stochastic trend following)
Not a price pattern recognition system (like head-and-shoulders or triangle breaks)
Instead, it belongs to the more specialized category of volatility-adjusted stop-and-reverse systems that:
Wait for market volatility to reach actionable levels
Establish positions when price confirms directional bias through stop penetration
Manage risk dynamically based on evolving market conditions
Exit positions when the trend exhausts itself through stop violation
Practical Application and Usage
Market Environment Optimization
Ideal Conditions:
Trending markets with sustained directional movement
Medium volatility environments (neither excessively calm nor chaotic)
Timeframes: 4-hour to daily charts for optimal signal quality
Instruments: Forex majors, commodity futures, equity indices
Suboptimal Conditions:
Ranging or consolidating markets
Extreme volatility events or news-driven spikes
Very short timeframes (below 1-hour)
Illiquid or highly manipulated instruments
Parameter Configuration Strategy
Core Parameter Philosophy:
ATR Length (Default: 21 periods)
Controls the system's memory of volatility
Shorter lengths increase sensitivity but may cause overtrading
Longer lengths provide smoother signals but may lag during volatility shifts
ATR Multiplier (Default: 6.3x)
Determines the initial risk buffer
Lower values (4-5x) create tighter stops for conservative trading
Higher values (6-8x) allow for larger trends but increase drawdown risk
Volatility Threshold (Default: 1.5%)
Filters out low-quality trading environments
Adjust based on market characteristics (higher for volatile markets)
Acts as a quality control mechanism for signals
Trading Workflow and Execution
Signal Interpretation and Action:
Entry Protocol:
Wait for BLUE "BUY" signal label appearance
Confirm volatility conditions meet threshold requirements
Enter long position at market or next reasonable opportunity
Set initial stop at displayed dynamic stop level
Position Management:
Monitor dynamic stop line for position adjustment
Allow profits to run while stop protects capital
No manual adjustment required—system manages stop automatically
Exit Protocol:
Exit on ORANGE "SELL" signal label appearance
Alternative exit if price hits dynamic stop level
System will generate new entry signal if conditions warrant re-entry
Risk Management Integration:
Position sizing based on distance to dynamic stop
Volatility filter prevents trades during unfavorable conditions
Clear visual feedback on current risk exposure
Built-in protection against overtrading
Philosophical Foundation and Market Theory
Core Trading Principles
DATR-TS embodies several foundational market principles:
Volatility Defines Opportunity
Markets don't trend continuously—they alternate between trending and ranging phases
Volatility provides the energy for trends to develop and sustain
By measuring and filtering volatility, we can focus on high-probability trend phases
Risk Should Be Proportional
Fixed percentage stops ignore market context
Dynamic stops that adjust with volatility provide more appropriate risk management
Position sizing should reflect current market conditions, not arbitrary rules
Simplicity Through Sophistication
Complex systems often fail in real-world conditions
A simple core algorithm with intelligent filtering outperforms complex multi-indicator approaches
Clear visual feedback reduces cognitive load and emotional interference
Trends Persist Until Proven Otherwise
Markets exhibit momentum characteristics
Once a trend establishes itself, it tends to continue
The trailing stop methodology captures this persistence while providing exit mechanisms
Mathematical and Statistical Foundation
The system operates on several statistical market observations:
Volatility Clustering Phenomenon
High volatility periods tend to follow high volatility periods
Low volatility periods tend to follow low volatility periods
By filtering for adequate volatility, we increase the probability of capturing meaningful trends
Trend Magnitude Distribution
Most trends are small to medium in magnitude
Very large trends are rare but account for disproportionate returns
The dynamic stop methodology allows capture of varying trend magnitudes
Autocorrelation in Price Movements
Price movements exhibit short-term positive autocorrelation during trends
This persistence allows trailing stops to capture continued movement
The system leverages this characteristic without requiring explicit autocorrelation calculation
Performance Characteristics and Expectations
Typical System Behavior
Signal Frequency:
Low to moderate signal generation (prevents overtrading)
Signals concentrated during trending market phases
Extended periods without signals during ranging conditions
Risk-Reward Profile:
Win rate typically 40-60% in trending conditions
Average win larger than average loss
Risk-reward ratios of 1:2 to 1:3 achievable
Drawdown Patterns:
Controlled through volatility adjustment
Larger drawdowns during extended ranging periods
Recovery typically follows when trending conditions resume
Comparison with Alternative Approaches
Versus Moving Average Systems:
Less prone to whipsaws during ranging markets
Better adaptation to changing volatility conditions
Clearer exit signals through stop levels
Versus Channel Breakout Systems:
More responsive to emerging trends
Lower false breakout probability
Dynamic risk adjustment rather than fixed parameters
Versus Momentum Oscillator Systems:
Better trend persistence capture
Less susceptible to overbought/oversold false signals
Clearer position management rules
Educational Value and Skill Development
Learning Opportunities
DATR-TS serves as more than just a trading tool—it provides educational value through:
Market Condition Awareness
Teaches traders to distinguish between trending and ranging markets
Develops understanding of volatility's role in trading opportunities
Encourages patience and selectivity in trade execution
Risk Management Discipline
Demonstrates dynamic position sizing principles
Illustrates the importance of adaptive stops
Reinforces the concept of risk-adjusted returns
Psychological Skill Development
Reduces emotional trading through clear rules
Builds patience through conditional execution
Develops discipline through systematic approach
Customization and Evolution
The system provides a foundation for further development:
Beginner Level:
Use default parameters for initial learning
Focus on signal recognition and execution discipline
Develop understanding of system behavior across market conditions
Intermediate Level:
Adjust parameters based on specific market characteristics
Combine with complementary analysis techniques
Develop personal variations based on trading style
Advanced Level:
Integrate with portfolio management systems
Develop automated execution frameworks
Create derivative systems for specialized applications
Conclusion: The Modern Trend-Following Paradigm
The Dynamic ATR Trailing System represents a significant evolution in trend-following methodology. By moving beyond simple price pattern recognition or fixed parameter oscillators, it embraces the complex reality of financial markets where volatility, trend persistence, and risk management interact dynamically.
This system doesn't claim to predict market direction or identify tops and bottoms. Instead, it provides a systematic framework for participating in trends when they emerge, managing risk appropriately as conditions change, and preserving capital during unfavorable environments.
For traders seeking a methodology that combines mathematical rigor with practical execution, adapts to changing market conditions rather than fighting against them, and provides clear, actionable information without cognitive overload, DATR-TS offers a sophisticated yet accessible approach to modern trend following.
The true value lies not in any single signal or parameter setting, but in the comprehensive philosophy of volatility-aware, risk-adjusted, conditionally-executed trend participation that the system embodies—a philosophy that aligns with how markets actually behave rather than how we might wish them to behave.
OHLC+ Pre Market + ORB + 9 21 200 EMAs + VWAPOHLC Suite - Complete Price Level & Technical Indicator Package
This all-in-one indicator provides essential price levels and technical indicators for intraday trading, combining multiple reference points in a single, customizable overlay.
Features:
📊 Previous Day's OHLC
Open, High, Low, and Close levels from the previous trading day
Helps identify key support/resistance levels and reference points
Customizable line styles (Solid/Dashed/Dotted) and colors
📈 Today's OHLC
Current day's Open, High, Low, and Close levels
Real-time updates as price action develops
Separate styling options from previous day levels
🌅 Premarket High/Low
Tracks high and low during premarket hours (4:00 AM - 9:30 AM ET)
Essential for gap trading and identifying early morning range
Displays after regular session opens
⚡ Opening Range Breakout (ORB)
Calculates high/low of first 15 minutes (9:30 AM - 9:45 AM ET)
Popular for momentum and breakout strategies
Shows range boundaries after initial period
📉 Exponential Moving Averages (EMAs)
EMA 9 (short-term trend)
EMA 21 (intermediate trend)
EMA 200 (long-term trend/major support-resistance)
Toggle each EMA independently
📊 Volume Weighted Average Price (VWAP)
Standard VWAP calculation using hlc3
Key institutional reference level
Useful for mean reversion and trend following
Customization Options:
Individual color and opacity controls for all elements
Show/hide any component independently
Adjustable line styles for different level types
Price labels with abbreviations or actual values
Clean, organized settings interface
Best For:
Day traders and swing traders
Multi-timeframe analysis
Support/resistance identification
Breakout and range trading strategies
Institutional level awareness
Settings:
All colors, transparencies, line styles, and visibility options are fully customizable through the indicator settings panel. Default configuration provides optimal visibility with distinct colors for different level types.
CVD-MACD### CVD-MACD (Research)
The CVD-MACD is a research-oriented indicator that combines Cumulative Volume Delta (CVD) with the classic MACD framework to provide insights into market momentum and potential reversals. Unlike a standard MACD based on price, this version uses CVD (the running total of buy vs. sell volume delta) as its input source, offering a volume-driven perspective on trend strength and divergences.
Key Features:
- **CVD-Based MACD Calculation**: Computes MACD using CVD instead of price, highlighting volume imbalances that may precede price moves.
- **Dual Divergence Detection**: Identifies bullish/bearish divergences on both the MACD line and histogram, with configurable pivot lookbacks and filters (e.g., momentum decay and zero-side consistency).
- **Visual Flexibility**: Toggle divergences in the indicator pane or overlaid on the main chart, with optional raw CVD line for reference.
- **Alerts**: Built-in conditions for bullish and bearish divergences to notify users of potential setups.
###This indicator is designed for research and experimentation—it's not financial advice. It performs best on liquid assets with reliable volume data (e.g., stocks, futures). I've shared this to gather community feedback: please test it thoroughly and point out any bugs, inefficiencies, or improvements! For example, if you spot issues with divergence detection on certain timeframes or symbols, let me know in the comments. Your input will help refine it.
Inspired by volume analysis techniques; open to collaborations or forks.
## User Manual for CVD-MACD (Research)
### Overview
The CVD-MACD indicator transforms traditional MACD by using Cumulative Volume Delta (CVD) as the base input. CVD accumulates the net delta between estimated buy and sell volume per bar, providing a volume-centric view of momentum. The indicator plots a MACD line, signal line, and histogram, while also detecting divergences on both the MACD line and histogram for potential reversal signals.
This manual covers setup, interpretation, and troubleshooting.
Note: This is a research tool—backtest and validate on your own data before using in live trading.
### Installation and Setup
1. **Add to Chart**: Search for "CVD-MACD (Research)" in TradingView's indicator library or paste the script into the Pine Editor and add it to your chart.
2. **Compatibility**: Works on any timeframe and symbol with volume data. Best on daily/intraday charts for stocks, forex, or futures. Avoid illiquid symbols where volume may be unreliable.
3. **Customization**: All inputs are configurable via the indicator's settings panel. Defaults are optimized for general use but can be tuned based on asset volatility.
### Input Parameters
The inputs are grouped for ease of use:
#### MACD Settings
- **Fast EMA (CVD)** (default: 12): Length of the fast EMA applied to CVD. Shorter values make it more responsive to recent volume changes.
- **Slow EMA (CVD)** (default: 26): Length of the slow EMA on CVD. Longer values smooth out noise for trend identification.
- **Signal EMA** (default: 9): Smoothing period for the signal line (EMA of the MACD line).
#### Divergence Logic (MACD Line)
- **Pivot Lookback (MACD Line)** (default: 5): Bars to look left/right for detecting pivots on the MACD line. Higher values detect larger swings but may miss smaller divergences.
- **Max Lookback Range (MACD Line)** (default: 50): Maximum bars between two pivots to consider a divergence valid. Prevents detecting outdated signals.
- **Enable Momentum Decay Filter (Histogram)** (default: false): When enabled, requires the histogram to show decaying momentum (absolute value decreasing) for MACD-line divergences to trigger.
#### Histogram Divergence
- **Pivot Lookback (Histogram)** (default: 5): Similar to above, but for histogram pivots.
- **Max Lookback Range (Histogram)** (default: 50): Max bars for histogram divergence detection.
- **Show Histogram Divergences in Indicator Pane** (default: true): Displays dashed lines and "H" labels for histogram divergences in the sub-window.
- **Show Histogram Divergences on Main Chart** (default: true): Overlays histogram divergences on the price chart with semi-transparent lines and labels.
- **Require Histogram to Stay on Same Side of Zero** (default: true): Filters divergences to only those where the histogram doesn't cross zero between pivots, ensuring consistent momentum direction.
#### Visuals (Dual View)
- **Show MACD-Line Divergences (Indicator Pane)** (default: true): Draws solid lines and "L" labels for MACD-line divergences in the sub-window.
- **Show MACD-Line Divergences (Main Chart)** (default: true): Overlays MACD-line divergences on the price chart.
- **Show Raw CVD Line** (default: false): Plots the underlying CVD as a faint gray line for reference.
### How to Interpret the Indicator
1. **Core Plots**:
- **MACD Line** (blue): Difference between fast and slow CVD EMAs. Above zero indicates building buy volume momentum; below zero shows sell dominance.
- **Signal Line** (orange): EMA of the MACD line. Crossovers can signal potential entries/exits (e.g., MACD above signal = bullish).
- **Histogram** (columns): MACD minus signal. Green shades for positive/expanding bars (bullish momentum); red for negative/contracting (bearish). Fading colors indicate weakening momentum.
- **Zero Line** (gray horizontal): Reference for bullish (above) vs. bearish (below) territory.
- **Raw CVD** (optional gray line): The cumulative buy-sell delta. Rising = net buying; falling = net selling.
2. **Divergences**:
- **Bullish (Green Lines/Labels)**: Occur when price makes lower lows, but MACD line or histogram makes higher lows. Suggests weakening downside momentum and potential reversal up. Look for "L" (MACD line) or "H" (histogram) labels.
- **Bearish (Red Lines/Labels)**: Price higher highs vs. MACD/histogram lower highs. Indicates fading upside and possible downturn.
- **Dual View**: Divergences appear in the indicator pane (sub-window) for clean analysis and overlaid on the main chart for price context. Histogram divergences use dashed lines to distinguish from MACD-line (solid).
- **Filters**: Momentum decay ensures only "hidden" or weakening divergences trigger. Zero-side filter prevents false signals from oscillating histograms.
3. **Alerts**:
- **Bullish Divergence (L or H)**: Triggers on either MACD-line or histogram bullish divergence. Message: "CVD-MACD Bullish Divergence detected on {{ticker}}".
- **Bearish Divergence (L or H)**: Similar for bearish. Use TradingView's alert setup to notify via email/SMS/webhook.
- Tip: Combine with price action (e.g., support/resistance) for confirmation.
### Usage Tips and Strategies
- **Trend Confirmation**: Use in uptrends for bullish divergences (pullback buys) or downtrends for bearish (short entries).
- **Timeframe Selection**: Higher timeframes (e.g., daily) for swing trading; lower (e.g., 15-min) for intraday. Adjust pivot lookbacks accordingly (shorter for faster charts).
- **Combination Ideas**: Pair with RSI for overbought/oversold confirmation or VWAP for intraday volume context.
- **Risk Management**: Divergences are probabilistic—not guarantees. Always use stop-losses based on recent swings.
- **Performance Notes**: Backtest on historical data via TradingView's Strategy Tester. CVD relies on accurate volume; test on exchanges like NYSE/NASDAQ.
### Known Limitations and Troubleshooting
- **Volume Dependency**: CVD estimation assumes linear buy/sell distribution based on bar position—may be less accurate on thin markets or during gaps.
- **Repainting**: Pivots and divergences can repaint as new data arrives (common in pivot-based indicators). Use on closed bars for reliability.
- **Resource Usage**: High max_bars_back (5000) ensures deep history; reduce if chart loads slowly.
- **No Signals on Low-Volume Bars**: If CVD flatlines, check symbol volume—some crypto/forex pairs have inconsistent data.
- **Community Feedback**: If you encounter bugs (e.g., false divergences on specific symbols/timeframes), missing alerts, or calculation errors, please comment below with details like symbol, timeframe, and screenshots. Suggestions for enhancements (e.g., more filters or visuals) are welcome!
If you have questions or find issues, drop a comment—let's improve this together!
MA 9 & MA 20 Crossover + EMA200 + CONFIRMED + RSI OB/OS (Alerts)Tesing this strategy. This will not work for all coins. this is short specific coins
Manual Backtest Dashboard (100 Trades)Manual Backtest Dashboard (100 Trades) is a lightweight TradingView indicator designed to help traders manually record and evaluate their trading performance directly on the chart. This tool is built specifically for discretionary traders such as SMC, price action, scalping, and intraday traders who want to analyze their win rate and overall performance without relying on the Strategy Tester.
The indicator works by allowing users to input their trade results manually through the settings panel. Each trade is recorded using simple values: 1 for a winning trade, -1 for a losing trade, and 0 for an empty or uncounted trade. The dashboard automatically calculates the total number of trades entered, the number of wins and losses, and the win rate percentage in real time. Users do not need to fill all 100 trade slots, as only trades with non-zero values are included in the calculations.
This indicator does not place trades or generate buy and sell signals. Instead, it focuses purely on performance evaluation, making it ideal for subjective backtesting, forward testing, and manual trading journals. The dashboard is clean, lightweight, and does not clutter the price chart, ensuring a smooth and distraction-free trading experience. The script is stable, efficient, and does not repaint, making it a reliable tool for traders who want to track and improve their consistency over time.
MTT Cyclical vs Defensive Z-ScoreThe MTT Cyclical vs Defensive Z-Score is a sophisticated sentiment and rotation indicator designed to measure the relative strength of "risk-on" sectors against "risk-off" havens. It calculates a ratio between two distinct baskets: Cyclicals (Consumer Discretionary, Industrials, Materials) and Defensives/Commodities (Consumer Staples, Health Care, Utilities, and the DBC Commodity Index).
By applying a Z-score calculation to this ratio, the indicator identifies how many standard deviations the current market leadership is away from its mean. This transforms a simple ratio into a powerful tool for identifying market extremes and potential pivot points.
How the Indicator Works
The script follows a logical three-step process to quantify market sentiment:
Basket Comparison: It pits growth-sensitive sectors (which thrive during economic expansion) against defensive sectors and commodities (which act as anchors or inflation hedges).
Mean Reversion: It uses a Simple Moving Average (SMA) and Standard Deviation over a 20-period lookback to determine the "normal" range for this relationship.
Standardization: The resulting Z-score oscillates around a zero line. Green columns represent periods where cyclicals are outperforming their recent average, while red columns indicate defensive leadership.
How to Use It for Trading
The Z-score serves as a barometer for overextended market moves:
Identifying Extreme Optimism: When the Z-score crosses above +2.0, cyclicals are significantly overextended. This suggests the "risk-on" move may be exhausted, signaling a potential pullback or a rotation back into defensive stocks.
Identifying Extreme Fear: When the Z-score drops below -2.0, defensives and commodities are heavily favored. This often coincides with market bottoms or "washouts," suggesting that a bounce in cyclical sectors (and the broader market) may be imminent.
Trend Confirmation: Crossing the 0.0 (Mean) line acts as a momentum shifter. Moving from negative to positive suggests a fresh bullish rotation is gaining traction.
Premarket + Previous Day High/LowPremarket & Previous Day High/Low Indicator for TradingView
This TradingView script displays two essential sets of price levels to help identify key support and resistance zones throughout the trading day:
🔍 What it Does
Premarket High/Low Levels
Tracks the high and low price between 4:00 AM and 9:30 AM EST (premarket session).
Once the market opens, it locks in those levels and plots them across the rest of the trading day for easy reference.
Helps you spot potential breakouts, rejections, or support/resistance around early session extremes.
Previous Day High/Low Levels
Displays the prior day’s high and low using data from the daily timeframe.
Useful for identifying major zones where price might bounce, reverse, or consolidate.
🎯 How Traders Use It
Identify potential gap fills, breakouts, or fakeouts.
Build trading setups using price action around key zones.
Combine with other indicators (RSI, volume, EMA, etc.) for confluence.
Use for risk management or stop loss placement near known levels.
Band Very Slow Moving Average (supfabio)Supfabio Band Very Slow M.A. is a clean, chart-friendly overlay built to help you **read trend context and price extremes** with a single “slow” baseline and a symmetric volatility-style band around it.
At its core, the script plots a **Very Slow Moving Average (SMA)** and two **percentage bands** (Upper/Lower) that expand/contract based on your chosen offset. The MA and bands **share the same trend color**, so you can instantly see whether the baseline is rising or falling without needing extra indicators.
### What you get on the chart
* **Very Slow MA (SMA)** as the main baseline (right scale).
* **Upper/Lower Bands** at a configurable % distance from the MA.
* Optional **band fill** and **trend background** for faster visual scanning.
* Optional **BUY / SELL labels** when price closes outside the bands (mean-reversion / exhaustion style context).
* Optional **CLOSE reference markers + horizontal target lines** to help you visualize potential “return-to-mean” or reaction levels.
### How the signals work (high level)
This indicator is **not a strategy** and does not “predict” the market. Instead, it highlights **conditions**:
* **BUY label**: when price closes **below the lower band** (potential downside extension).
* **SELL label**: when price closes **above the upper band** (potential upside extension).
* An optional **“Only first candle beyond band (cross)”** mode helps reduce repeated labels by triggering only on the first decisive move beyond the band.
* A **cooldown** option can further reduce repeated same-direction signals.
### CLOSE reference lines (visual guidance, not a promise)
When enabled, the script can draw **horizontal dotted reference lines** derived from the MA’s turning structure (using confirmed swing logic) and manage them to keep the chart readable. As price action evolves, these lines may:
* Extend with time while the “case” is active (dotted),
* Flip to **solid** when a valid touch/confirmation occurs (based on your settings),
* And optionally print a small **CLOSE marker** on the level.
To prevent clutter near the current price, the indicator includes a **“Merge dotted lines within ticks (near price)”** setting that consolidates nearby dotted levels into a cleaner view.
### Inputs you’ll care about
* **MA Length**: controls how “slow” the baseline is.
* **Band offset (%)**: sets the distance of the upper/lower band from the MA.
* **Signals**: toggle labels, cross-only behavior, and cooldown.
* **Close module**: toggle close markers/lines and adjust confirmation behavior.
* **Merge dotted lines (ticks)**: keeps the chart readable when multiple levels form close together.
### Alerts
The script supports alerts for:
* **BUY / SELL**
* **BUY_CLOSE / SELL_CLOSE**
These are meant to help with notifications and workflow automation. Always validate signals in your own process before acting.
### Notes & limitations
* Designed for **standard OHLC candles/bars**. Results may be misleading on non-standard chart types.
* Any swing/turn-based logic can appear **after confirmation**, which means some elements naturally print with a delay.
* This tool is best used as **context** alongside your own confirmation rules (structure, trend, volume, risk management).
**Disclaimer:** This indicator is for educational and informational purposes only and does not constitute financial advice. Trading involves risk; always test settings and use proper risk management.
Renko Velocity Meter [Chris Chapman]Here is the comprehensive copy for your Renko Velocity Meter indicator. This is structured to be used in a TradingView description, a manual, or a product listing.
Renko Velocity Meter
What is this Indicator?
The Renko Velocity Meter is a specialized momentum dashboard designed strictly for Renko Charts. Unlike standard oscillators (like RSI or MACD) which often fail on Renko due to the lack of time-based data, this tool uses "Brick Physics" to measure the actual speed and efficiency of price movement.
It answers the most critical question in Renko trading: "Is this a real trend, or just a choppy consolidation?"
Instead of giving you lagging signals, it provides a real-time Velocity Score (0-100) displayed on a dashboard directly on your chart. It automatically filters out "fake" moves and highlights high-probability "TURBO" conditions when the market enters a powerful extension phase.
How It Is Calculated
The Velocity Score is derived from a proprietary blend of three distinct mathematical checks:
1. Trend Efficiency ("The Snake Logic") The script calculates the ratio between the Net Price Move and the Total Distance Traveled over a lookback period.
High Efficiency: Price is moving in a straight line (Strong Trend).
Low Efficiency: Price is winding back and forth (Chop/Range).
2. Momentum Deviation (Auto-Brick Detection) The indicator automatically detects your specific Renko brick size (whether 2 pips, 10 points, or custom) without manual input. It then measures how many "Bricks" the price has pulled away from the baseline Moving Average.
If price is 6+ bricks away from the average, it signals a high-momentum extension.
3. HTF Trend Lock (Multi-Timeframe Filter) It internally checks a Higher Timeframe (default: 15-minute) to ensure you are trading with the dominant trend.
HTF LOCK: The Renko trend and the 15m trend are aligned (Green).
HTF MIX: The trends are conflicting. The score is automatically capped at 60 to prevent false signals.
4. The "Counter-Trend" Penalty To prevent buying tops or selling bottoms, the script instantly penalizes the score if a "Retracement Brick" forms.
Example: If the trend is UP, but a RED brick forms, the score is forced down to the "Yellow/Neutral" zone until the trend resumes.
Requirements
To use this indicator effectively, you must meet the following chart conditions:
Chart Type: Renko (This is mandatory. The math relies on fixed-size bricks).
Timeframe: Works on all timeframes, but optimized for standard scalping setups (e.g., 2-pip fixed bricks on EURUSD/Gold).
Data Feed: High-quality data is recommended. For maximum precision, use a 1-second (1s) interval setting for your Renko box generation if your TradingView plan allows it.
The Inputs (Settings)
You can customize the sensitivity of the meter to fit your specific asset class:
Trend Efficiency Period (Default: 14):
The number of bricks used to calculate how "straight" the trend is. Lower numbers make the score faster; higher numbers make it smoother.
Momentum Baseline (Default: 20):
The length of the internal Moving Average used as the "mean" price.
Max Momentum in Bricks (Default: 6):
How many bricks of extension are required to hit a "100% Score"? Increase this for volatile assets like Gold or Bitcoin.
HTF Support (Default: 15):
The Higher Timeframe used for the Trend Lock filter.
Meter Position:
Choose where the dashboard appears on your screen (Top Right, Bottom Left, etc.).
Dashboard Legend
GREEN (Score > 70): TURBO – Strong trend alignment. High probability of continuation.
YELLOW (Score 50-70): TREND – Active trend, but potentially stalling or retracing.
RED (Score < 50): CHOP – No clear direction or conflicting signals. Stay flat.
POSITION: Shows the current logic state (LONG/SHORT/FLAT).
Trend Entry Signal v2Used for entry signals. More efficient for scalp trades, at least 70% correct prediction, more efficent on stablecoins.
Teacher Agent: OBV-ADX+Volume Overlay V6This is an OBV ADX I modified from another user (kocurekc). I removed the histogram and made it an overlay then added volume multiplier to only throw signals when volume is above average.
AZ Trader V3.0AZ Trader – Trading from A to Z
AZ Trader is a professional all-in-one trading indicator designed to simplify market decisions and highlight high-quality trade opportunities.
Built on advanced price structure analysis combined with momentum and volatility filtering, AZ Trader focuses on delivering clean, precise, and actionable signals while reducing market noise.
The indicator supports multiple trading styles:
Scalping
Intraday trading
Swing trading
AZ Trader works across all timeframes and markets, including forex, gold, indices, and cryptocurrencies.
Key benefits:
High-confidence trade setups
Reduced false signals
Clear entries with logical trade management
Clean chart without unnecessary indicators
This script is Invite-Only.
Access is limited and the source code is fully protected.
---
AZ Trader – التداول من الاف الى الياء
AZ Trader هو مؤشر تداول احترافي شامل، مصمم لتبسيط قرارات التداول وإبراز فرص تداول عالية الجودة بوضوح.
يعتمد المؤشر على تحليل متقدم لهيكل السعر مع دمج الزخم وفلترة التقلبات، ليقدم إشارات دقيقة، واضحة، وقابلة للتنفيذ مع تقليل تشويش السوق.
يدعم AZ Trader عدة أساليب تداول:
السكالبينغ
التداول اليومي
التداول متوسط المدى
يعمل على جميع الفريمات والأسواق، بما فيها الفوركس، الذهب، المؤشرات، والعملات الرقمية.
أهم المميزات:
صفقات بثقة أعلى
تقليل الإشارات الخاطئة
نقاط دخول واضحة وإدارة صفقة منطقية
شارت نظيف بدون ازدحام
المؤشر Invite-Only
والوصول إليه محدود مع حماية كاملة للكود.
MACD Color [Winner3DFIN]The moving average convergence divergence is a momentum indicator that measures the difference between two moving averages, providing a direct, unbounded view of how two averages converge and diverge over time. It also offers a gauge of price momentum and short-term trends.
This version mod indicator show MACD Zone BUY/SELL
TX Ultra Zone Consolidation Detector## TX Ultra Zone Consolidation Detector ##
Overview TX Ultra Zone is an advanced market structure utility designed to automatically detect periods of consolidation, indecision, and sideways movement. By isolating ranging markets, it helps traders avoid "choppy" conditions and prepare for high-probability breakouts.
What It Does
Automatic Detection: Draws visual boxes around price action when volatility compresses.
Breakout Projection: Once price breaks the box, it projects a "Shadow Zone" forward. This shadow serves as a key reference for Support-becomes-Resistance (or vice versa) retests.
Noise Filtering: Helps you stay out of the market when no clear trend exists.
How It Works (Conceptual) The script uses a multi-layer detection engine:
Regime Detection: It analyzes market efficiency and volatility (using adaptive logic) to determine if the market is trending or ranging.
Geometry Confinement: When a range is detected, the script locks the High and Low boundaries.
Expansion & Breakout: The box dynamically expands if price pushes the boundary slightly without a true breakout. A valid breakout closes the box and triggers the Shadow Extension.
How to Use
Add to Chart: Works best on volatility-sensitive assets (Forex, Crypto, Indices).
Wait for the Box: When a Purple Box appears, the market is resting. Do not trade trends inside the box.
Trade the Breakout: Wait for a candle close outside the box.
Use the Shadow: The Grey Shadow Extension indicates where price might return to "retest" the breakout level. This is often a prime entry zone.
Settings & Tuning
Detection Engine: Switch between Adaptive Volatility (Standard) or Momentum Compression (Alternative).
Zone Threshold:
45-50: Sensitive (More boxes, catches micro-ranges).
55-60: Strict (Only catches very clear, tight consolidation).
Shadow Extension: Adjust how far into the future the support/resistance zone is projected.
Disclaimer This tool is for educational and analytical purposes only. Past performance does not guarantee future results. Always use proper risk management.
TVS
#Overview
The TVS strategy looks for areas of low volatility or ‘squeezes’ and then relies on momentum to identify a breakout. This is intended to help a trader wait for a consolidation phase before entering a market when energy is released.
---
How It Works
TVS uses Bollinger Bandwidth as a measure of market compression to define the "squeeze" conditions of low volatility. When the distance between the upper and lower Bollinger Bands contracts below its own average, the indicator flags the market as compressed and color codes candles purple. Once volatility expands and the squeeze ends, TVS toggles on momentum confirmation via RSI: candles light green as bullish momentum is in control and red when bearish momentum takes over. The color system observes strict priority whereby volatility compression overrides all trend signals, with any consideration of direction being subject to the release of the squeeze.
Color Priority
• Deep Purple: Active squeeze (low volatility)
• Green / Red: Squeeze released
– Green: Bullish
– Red: Bearish
---
Trading Checklist
-Purple candles? → Market is compressing
-Purple ended?→ Breakout phase
-Green or Red? → Direction confirmed
-Near key structure? → Manual validation
Settings and Usage
Timeframes: 15m–Daily
Best Markets: Forex majors, liquid stocks
Inputs: length (BB basis), mult (band sensitivity)
Risk Notes:
Squeezes can fail and reverse
No built-in stop-loss
News reduces signal reliability
Risk Management is mandatory.
Stable MES Fakeout AlertHow to read the new Dashboard
Bright Red Cell: The market is at +1000 or higher. This is your "Don't Buy/Start Shorting" zone.
Bright Green Cell: The market is at -1000 or lower. This is your "Don't Sell/Start Buying" zone.
Faded Green/Red: The market is trending but not yet at a mathematical extreme.
A Strategy Secret for the Reversal
When the Dashboard turns Bright Red (TICK > 1000) and the price hits the Red VWAP Band, don't just market sell.
Wait for the TICK value to start dropping (e.g., from 1100 down to 900).
Wait for the first Red Candle to close on your 1-minute chart.
Place your stop loss just a few ticks above the "swing high" created at the band.
This "waiting for the turn" ensures you aren't trying to catch a speeding freight train.






















