Volume Financial Footer ProNew version Volume Footer Financial Pro is a smart volume indicator built for traders who operate across multiple asset classes, including Forex, Crypto, Commodities, Indices, and Stocks. It combines a Proxy Volume Engine with a candle-based delta intensity system to deliver meaningful volume analysis even on platforms that do not provide real volume data.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE PROBLEM THIS INDICATOR SOLVES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Most retail brokers and CFD platforms — particularly those offering Forex, metals, and index CFDs — do not provide real volume data. The standard volume indicator on these platforms either returns zero, returns meaningless tick counts, or simply shows nothing. This makes volume-based analysis impossible for a large portion of the trading community.
Volume Financial Pro solves this with a built-in Proxy Volume Engine.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW THE PROXY VOLUME ENGINE WORKS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The indicator automatically detects the current symbol and maps it to a liquid equivalent source that provides real, reliable volume data. For example:
• XAUUSD → COMEX:GC1! (Gold Futures)
• EURUSD → FX:EURUSD
• BTCUSD → BINANCE:BTCUSDT
• NDQUSD → OANDA:NAS100USD
• AAPL → NASDAQ:AAPL
Over 80 symbols are mapped across all major asset classes. If the platform provides native volume, it is used directly. If not, the proxy volume is fetched and applied transparently — no configuration needed from the user.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DELTA-BASED COLOR SYSTEM
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Each volume bar is colored based on sell intensity, calculated from the relationship between the candle body size and its full high-low range. This approximates the proportion of buying versus selling pressure within each bar.
• Bullish bars → cyan
• Bearish bars with moderate selling → light red
• Bearish bars with high selling intensity (above 60%) → dark red
This gives traders an immediate visual read on conviction behind each move — not just whether price went up or down, but how aggressively it was bought or sold.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EMA OVERLAY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
An optional EMA (default: 9 periods) is plotted over the volume histogram to help identify trends in volume activity and spot anomalies such as volume spikes or dry-up zones that may precede price reversals.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• EMA Length — adjustable period for the volume EMA (default: 9).
• Show EMA — toggle the EMA line on or off.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPATIBLE WITH
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Forex majors, minors and exotics · Crypto (via Binance) · Gold, Silver, Platinum, Palladium · Oil and Natural Gas · Agricultural commodities · US Dollar Index · Major global indices: DOW, NASDAQ, S&P 500, Nikkei, DAX, FTSE, CAC, MIB, ASX, Hang Seng · Top US and European stocks.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NOTES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This indicator is an original work. The Proxy Volume Engine, symbol mapping table, and delta intensity color logic were developed independently by the author and do not derive from any existing published script.
Indicator

Market Network Confirmation [NeuralMarkets]Market Network Confirmation
Price tells you where the market moved. The network tells you whether the market moved together.
A strong index move can look convincing on the surface and still be structurally weak underneath.
Sometimes SPY rallies while only a handful of sectors participate.
Sometimes the index is flat while participation quietly broadens.
Sometimes the market looks healthy, but the sector network is already fragmenting.
This indicator was built to measure that difference.
What this indicator is designed to answer
Not:
"Is SPY up or down?"
But:
"Is the current move actually supported by the market underneath it?"
Market Network Confirmation analyzes the internal structure of the S&P 500 through its major sector ETFs and combines breadth with graph-based network analytics.
The result is a structural read on whether the current move is broad, narrow, deteriorating, recovering, or fragmented.
The Market as a Network
The indicator models the major SPDR sector ETFs as nodes in a financial network:
XLK - Technology
XLF - Financials
XLY - Consumer Discretionary
XLC - Communication Services
XLI - Industrials
XLV - Health Care
XLP - Consumer Staples
XLE - Energy
XLU - Utilities
XLB - Materials
XLRE - Real Estate
Rolling relationships between sector returns form the edges of the network.
The indicator then evaluates the structure using multiple graph-theory measures instead of relying on a single breadth statistic.
Market States
Broad Confirmation
The index move is supported by broad sector participation and a healthy underlying network.
This is the cleanest confirmation state.
Narrow Advance
SPY is moving higher, but participation is limited or leadership is overly concentrated.
The move may still continue, but the internal structure is less convincing.
Internal Divergence
SPY continues to advance while network health deteriorates underneath.
Price strength and internal structure are moving in opposite directions.
Recovery Broadening
SPY remains weak, but internal network conditions are improving.
Participation may be strengthening before the index itself fully recovers.
Distribution
Selling is broadly confirmed while network health remains weak.
The decline is not isolated to a small part of the market.
Fragmentation
The sector network breaks into weakly connected groups.
In this environment, the market behaves less like one coherent system and more like a collection of disconnected sectors.
Healthy Rotation
No major structural warning is present, but the market is rotating rather than moving with strong broad confirmation.
Network Health
The indicator creates a composite Network Health score from several graph measures:
• Mean network connectivity
• Strong-edge density
• Clustering coefficient
• Minimum Spanning Tree compactness
• Network entropy
• Decentralization
• Connected components
The score is normalized from 0 to 100.
A high Network Health score means the sector network is structurally coherent and broadly connected.
A low score means relationships are weaker, more fragmented, or overly concentrated.
Important:
High Network Health is not automatically bullish.
A market can be strongly connected while rising or while falling.
Network Health measures structural coherence, not direction.
Participation
Participation measures how many sectors are moving in the same direction as SPY.
For example:
SPY rising + 9 of 11 sectors rising
indicates broad bullish participation.
SPY rising + only 4 of 11 sectors rising
indicates a narrow advance.
Participation tells you how many sectors agree.
Network Health tells you how structurally connected the market is.
Those are not the same thing.
Move Confirmation
Move Confirmation combines:
• Network Health
• Sector Participation
• Distribution of influence across the network
This creates a 0-100 measure of how strongly the internal market structure supports the current index move.
The dashboard classifies confirmation as:
• High
• Moderate
• Low
This is not a probability of future returns.
It is a measure of structural agreement behind the current move.
Internal Trend
The indicator also tracks whether network health is:
• Improving
• Stable
• Deteriorating
This becomes useful when price and internal structure start moving in opposite directions.
For example:
SPY making new highs while Network Health declines
is very different from:
SPY making new highs while Network Health strengthens.
Sector Network
The Sector Network panel shows which sectors are:
• Supporting the current SPY direction
• Diverging from it
This gives a fast view of whether the move is broad or being carried by only a few sectors.
Network Diagnostics
For users who want to inspect the underlying graph structure, the indicator exposes the individual network metrics.
Connectivity
Average strength of relationships across the sector network.
Strong Edge Density
Percentage of strong relationships currently present in the network.
Clustering
Measures whether sectors are forming tightly connected groups.
MST Compactness
Uses a Minimum Spanning Tree to measure how efficiently the full sector network can be connected.
Entropy
Measures how broadly network influence is distributed.
Decentralization
Shows whether the network is broadly distributed rather than dominated by a small number of nodes.
Connectedness
Measures how close the system is to behaving as one connected network.
Fragmentation
Measures how disconnected the market has become.
Why use network analysis?
Traditional breadth tools usually count:
• Advancers vs decliners
• Positive vs negative sectors
• Stocks above moving averages
• New highs vs new lows
Those are useful.
But they do not measure how relationships between market components are changing.
Two markets can both have 8 bullish sectors.
One may be tightly connected and behaving as a coherent market.
The other may contain several disconnected clusters with very weak relationships.
Graph analysis can distinguish between those structures.
Practical Use
Market Network Confirmation can be used as a second layer of analysis when evaluating:
• Breakouts
• Trend continuation
• Rally quality
• Selloff confirmation
• Market breadth
• Sector rotation
• Internal divergence
• Recovery attempts
Research tool only. Not a standalone buy/sell signal. Indicator

Indicator

Indicator

Indicator

Trade Wzrd - Rift [Rampage Series]✨ THE RAMPAGE SERIES Is a growing series of roughly thirty volume-and-structure indicators, each built around the same conviction: price is the story, volume is the evidence, and levels are where the two negotiate. Every script in the series reads the market through traded volume - profiles, deltas, liquidity, nodes - and every single one ships with built-in automation . Not a bolted-on alert hack: a real order-string layer, the kind these tools almost never come with. Each Rampage script is an educational shell for learning and testing. None of them is a signal service.
Rift is the profile engine of the family - the one that finds the voids.
⚡ WHAT RIFT IS
Rift rebuilds a live volume profile every bar from lower-timeframe data - anchored to the clock (session, day, week) or to market structure (confirmed swing pivots) - and renders it as one clean instrument in the chart margin: delta-graded rows, Point of Control, Value Area, Point of Void, and the gaps where nobody traded at all.
Most profile tools show volume at price. Very few show the DELTA at each price - who was actually buying and who was selling inside every row - without paid order-flow data. Rift rebuilds that from the intrabar feed : each lower-timeframe bar's volume is signed by its direction and distributed across the price rows it traded through. The result is a profile that doesn't just say where volume traded, but who showed up to trade it.
The design rule is one region, one story. The profile lives in the right margin as a single silhouette - never scattered across your candles - while price itself carries only what you can act on.
✨ THE POINT OF VOID - WHY "RIFT"
Inside every Value Area there is one row where volume is thinnest - the weakest node, the place price met the least resistance on its way through. Rift measures it, names it, and marks it in orange: the Point of Void.
That thin crust is the rift. When price drives through it with delta support, it isn't hitting a wall - it's falling through open air, and it tends to travel. Sweeps fade. Bounces react. A void break continues. Three different events, three different trades, one engine that knows which is which.
⚡ THE THREE HUNTS
▶ Sweep & Reclaim - price pierces the Value Area edge and closes back inside. The raid that failed. Optionally gated by CVD divergence: price prints a new extreme while cumulative delta refuses to agree - the fingerprint of absorption.
▶ POC Bounce - rejection of the developing Point of Control, the single most-traded price of the profile.
▶ POV Void - price drives through the Point of Void with bar-delta support. Continuation, not a fade.
Every signal carries a typed chip (BUY · SWEEP, SELL · VOID...) with a hover deep-dive: node, ATR distance, wick %, bar delta, CVD, trend. Node-episode dedup keeps the engine honest - the same direction cannot re-fire at the same node inside the cooldown unless price has genuinely moved to a new one. An optional filter stack (ATR momentum guard, rejection wick, EMA trend, session window) sits underneath for those who want it.
✨ RISK THAT SITS ON STRUCTURE
Stops and targets can be framed two ways:
▶ ATR mode - the classic: stop a multiple beyond the sweep extreme, target by reward:risk.
▶ Structure mode - the Rift way: the stop sits a small buffer beyond the exact node the signal was born from, and the target is the nearest opposing profile node - POC, POV, or a Value Area edge. The trade is invalidated by structure breaking, not by an arbitrary distance, and it aims at the level the market itself built.
⚡ THE TRADE BOX - IT FREEZES WHERE IT DIES
Every signal draws its position as one object : entry line with a price tag, dashed stop, solid target, shaded risk and reward zones. The box follows price bar by bar - and the moment the stop or the target is hit, it freezes exactly there and leaves a TP HIT or SL HIT tag on the chart. Your past trades stay visible as they actually happened, not as you remember them. If one bar tags both sides, Rift calls the stop first - honest over flattering, always.
✨ LEVELS WITH MEMORY
▶ Retest lines - every signal draws the node it came from as a thin level that lives until breached or expired. Then, instead of vanishing, it stays on chart as darker dotted history: you can see which levels got filled and which held.
▶ Liquidity pools - swing highs and lows hold resting stops. Rails extend right until raided, die on the raid bar, and leave a faint swept zone when price pokes through and closes back inside. Where the stops were, where they got run.
▶ Level rails - neon POC, dotted POV, Value Area zone, and past profiles' POC/VAH/VAL kept on chart until crossed.
✨ HOW TO READ IT
• The margin profile is one silhouette: row width is volume, row color is delta, gold is the POC, orange is the POV, volume numbers print inside heavy rows (auto-inverted so they never camouflage), and the outline tint tells you who owns the profile - cyan buyers, pink sellers. The delta-% label on top opens the full stats on hover.
• A chip is a trade idea with receipts - hover it before you judge it.
• The trade box is the position. When it freezes, the idea is over; the tag says how.
• Dotted dark levels are filled history. Bright levels are still alive.
• The dashboard is the instrument panel: profile levels, session CVD, bar delta, regime, whale state, last signal, POC touches, automation state.
⚡ HOW TO USE
1) Add the script to a clean chart. Defaults are tuned for XAUUSD intraday; any symbol with volume works.
2) Choose the anchor: Period (D for day traders, W for swing) or Swing (structure-anchored).
3) Set the Intrabar Feed lower than your chart timeframe - 1-minute is the safe default.
4) Pick a signal model and a risk mode. ATR framing is the default; Structure framing ties stops and targets to the nodes.
5) Automation is built in.
✨ DEFAULTS
• Anchor: Period (Daily) | Intrabar Feed: 1m | Row height: ATR(14)/8 | Value Area: 70%
• Margin profile: 30 rows, offset 8 bars, max width 40 bars, outline + stats on | Signal cooldown: 8 bars
• Signals: All three models, CVD divergence 30 bars, bar delta confirm on, filters off
• Risk: ATR mode - stop ATR(14) × 1.5 beyond sweep, target 2R | Structure mode optional - node buffer 0.25 ATR, next-node target
• Trade box on | Filled retest lines kept as dotted history (20 max) | Liquidity rails on (pivot 5, 6 per side, swept zones on)
• Automation on: entries with SL/TP, close on opposite signal, close on TP/SL hit
⚡ LIMITATIONS AND HONEST NOTES
• This is an educational shell, not a validated strategy. It makes no performance claim and no edge claim. Nothing here is financial advice.
• Buy/sell split is estimated from intrabar direction (close vs previous close), not true tick-level bid/ask - on 1-minute data this is a close approximation; coarser feeds are coarser reads.
• Swing anchors and liquidity pivots confirm with a delay equal to the pivot length.
• The margin profile shows the current developing profile only; finished periods remain as POC/VAH/VAL level lines.
• TP/SL-hit detection is bar-based: on a bar that tags both, the stop is called first.
• Structure-mode targets depend on the developing profile; a fresh profile can move the nodes.
• Requires a symbol with volume data. Seconds feeds ("1S") depend on your plan's data availability.
• Past results do not predict future results. Not intended for non-standard chart types (Heikin Ashi, Renko, etc.). You own symbol mapping, risk, and execution choices.
No external links are required to understand or use this script.
Open source - Mozilla Public License 2.0.
Indicator

MBA S1# MBA S1 (Invite-Only)
## Overview
**MBA S1** is a comprehensive intraday trading indicator designed to help traders identify high-probability market opportunities using a structured combination of trend analysis, institutional price levels, and price action confirmation.
Instead of relying on a single technical indicator, MBA S1 integrates multiple market concepts into one streamlined framework, providing traders with a cleaner and more disciplined approach to intraday trading.
The indicator has been primarily optimized for **5-minute charts** and supports both **NSE** and **MCX** instruments.
---
## Key Features
### Trend Confirmation
MBA S1 combines:
* EMA 9
* EMA 21
* VWAP
to identify the prevailing market trend and filter potential trading opportunities.
---
### Institutional Price Levels
The indicator automatically plots important market reference levels including:
* Previous Day High (PDH)
* Previous Day Low (PDL)
* Previous Day Close (PDC)
* Central Pivot Range (CPR)
* Top Central (TC)
* Bottom Central (BC)
* Resistance Levels (R1, R2, R3)
* Support Levels (S1, S2, S3)
* Opening Range High (ORH)
* Opening Range Low (ORL)
These levels often act as key areas where price may react, reverse, or continue its movement.
---
### Adaptive Market Logic
MBA S1 uses an ATR-based adaptive calculation to adjust its proximity and breakout sensitivity according to current market volatility.
This helps the indicator remain effective during both low and high volatility trading sessions.
---
### Smart BUY & SELL Signals
Trading signals are generated only after multiple technical conditions align, including:
* Trend Confirmation
* EMA Alignment
* VWAP Confirmation
* Strong Candle Body
* Price Interaction with Key Levels
* Confirmed 5-Minute Candle Close
This multi-condition approach is intended to reduce unnecessary market noise and improve signal quality.
---
### Breakout Detection
MBA S1 monitors important breakout opportunities such as:
* PDH Breakout
* PDL Breakdown
* ORH Breakout
* ORL Breakdown
* R1 / R2 / R3 Breakouts
* S1 / S2 / S3 Breakdowns
---
### Bounce & Rejection Signals
The indicator also highlights potential:
* Bullish Bounce setups
* Bearish Rejection setups
around important support and resistance zones.
---
### Dynamic Alert System
MBA S1 includes built-in alerts for all major trading events, allowing traders to receive timely notifications without continuously monitoring charts.
---
### Clean Chart Experience
The indicator is designed to provide meaningful information while maintaining a clean and organized chart layout with clearly labeled market levels.
---
## Recommended Timeframe
**Primary Timeframe:** 5 Minutes
MBA S1 is specifically optimized for 5-minute charts. A reminder is displayed when the indicator is applied to other timeframes.
---
## Suitable Markets
* NSE Stocks
* NIFTY
* BANKNIFTY
* FINNIFTY
* MIDCPNIFTY
* MCX Crude Oil
* MCX Gold
* MCX Silver
* MCX Natural Gas
---
## Best Suited For
MBA S1 is designed for traders who prefer:
* Intraday Trading
* Price Action Trading
* Level-Based Trading
* Breakout Strategies
* Trend Following
* Structured Decision Making
---
## Important Notice
MBA S1 is a decision-support tool and should be used alongside sound trading practices, proper risk management, and independent market analysis.
No technical indicator can predict future market movements or guarantee trading results.
---
## Invite-Only Access
MBA S1 is currently available as an **Invite-Only** indicator.
Access is provided only to selected users for personal use and evaluation. The script remains under active development, and future updates may include additional features, optimizations, and performance improvements.
Unauthorized copying, redistribution, reverse engineering, or republication of this script is strictly prohibited.
---
### Version
**MBA S1 – Version 1.0**
**Developed & Maintained by**
**Sarita Shukla**
**All Rights Reserved.**
Indicator

Indicator

CVD_Behav_V3Here is a comprehensive English explanation of the **CVD Pro: Institutional Behavior Panorama V3.0** indicator for PulseWire.
---
## CVD Pro: Institutional Behavior Panorama V3.0 – User Guide
### 1. Overview & Core Logic
This indicator is designed to **detect institutional (whale) activity** by combining **CVD (Cumulative Volume Delta)** with price position, volume purity, and slope analysis. It visualizes accumulation, distribution, attacks, absorption, churn, and momentum exhaustion in real time.
**Core Calculation:**
- **CVD** = cumulative sum of (buy volume – sell volume) estimated from intra-bar price action.
- **Normalized CVD** = (raw CVD – 50‑period SMA) / 50‑period stdev → z‑score for cross‑asset comparability.
- **Acceleration** = weighted change of CVD, multiplied by volume factor to filter noise.
**Three‑dimensional validation** ensures signals are meaningful:
1. **Price position** – relative to 100‑period high/low (bottom 30% / top 30%).
2. **Volume purity** – volume > 1.5× its 20‑period average (adjustable), but not extreme (>5×) to avoid outliers.
3. **Slope comparison** – 20‑period linear regression slopes of price and CVD.
---
### 2. Chart Signals (Overlay on Price)
| Symbol | Color / Shape | Meaning | Action |
|--------|---------------|---------|--------|
| **吸** (Accumulate) | Green label below bar | Price falling but CVD rising – smart money buying in a downtrend. | Light long, stop below signal low. |
| **发** (Distribute) | Red label above bar | Price rising but CVD falling – smart money selling into strength. | Reduce or exit longs; do not chase. |
| **攻** (Attack) | Purple triangle below bar | Price & CVD both rising, CVD slope > 0.5× price slope – genuine breakout with real volume. | Aggressive entry on breakout, stop below signal low. |
| **托** (Support) | Blue dot below bar | Price near 20‑day low, CVD stabilises – large passive bids absorbing selling. | Short‑term bounce play, but light position. |
| **换** (Absorption) | Orange diamond below bar | Narrow range (width <3%) with CVD surging – accumulation within a consolidation, often a handover between institutions. | Accumulation zone; wait for breakout above range high. |
| **对倒** (Churn) | Maroon triangle above bar | Price spikes (>1% slope) but CVD flat/declining – fake breakout via wash trading. | Avoid chasing; tighten stops on existing positions. |
| **减速** (Slowdown) | Yellow arrow above bar | After an “Attack”, acceleration declines for 3 bars – momentum fading. | Do not add; consider partial exit. |
| **B** (Bullish Divergence) | Green “B” below bar | Price makes new low, CVD does not – potential reversal. | Watch for confirmation with support. |
| **S** (Bearish Divergence) | Fuchsia “S” above bar | Price makes new high, CVD does not – potential top. | Reduce risk; tighten stops. |
---
### 3. Sub‑Chart (Lower Panel) – CVD & Acceleration
- **Purple line** – Normalized CVD (z‑score). Up = net buying, down = net selling.
- **Yellow line (fast)** – 5‑period EMA of normalized CVD.
- **Blue line (slow)** – 20‑period EMA of normalized CVD.
- **Golden cross (fast > slow)** = institutional thrust increasing (bullish).
- **Death cross (fast < slow)** = institutional thrust decreasing (bearish).
- **Red / Green histogram** – CVD acceleration (weighted).
- **Green & growing** = institutional acceleration (momentum increasing).
- **Red & growing** = deceleration (momentum decreasing).
- *Height reflects the strength of the change.*
---
### 4. Multi‑Timeframe Dashboard (Top‑Left Corner)
Displays the **fast vs slow CVD status** for 15m, 1h, 4h, and Daily:
- 🟢 Green dot = CVD fast > slow (bullish trend on that timeframe).
- 🔴 Red dot = CVD fast < slow (bearish trend).
**Position sizing guide:**
- All green → heavy (conviction).
- One red, three green → light.
- All red → stay in cash or short.
---
### 5. Step‑by‑Step Trading Workflow
1. **Set the macro bias** – Check the background colour:
- **Light green** = price above 200‑EMA → only long signals are valid.
- **Light red** = price below 200‑EMA → only short signals (or no signals) are valid.
- *Ignore counter‑trend signals.*
2. **Assess the dashboard** – Confirm the multi‑timeframe trend. All green → high confidence; mixed → reduce position size.
3. **Look for behaviour labels** that align with the macro trend:
- In a green background: **攻**, **吸**, or **换** are actionable buy signals.
- In a red background: ignore all buy labels.
4. **Monitor acceleration and divergences** for risk management:
- **S** or **减速** → tighten stops or take partial profits.
- **B** → watch for a possible reversal, but wait for confirmation.
---
### 6. Parameter Tuning Recommendations
| Parameter | Default | When to Adjust |
|-----------|---------|----------------|
| **Fast MA Length** | 5 | Lower (3) for more sensitivity (scalping); higher (13) for smoother signals (swing). |
| **Slow MA Length** | 20 | Increase for less frequent crossovers; decrease for earlier signals. |
| **Lookback (Position)** | 100 | Increase to 200 for stricter “bottom/top” definition on weekly charts. |
| **Volume Threshold** | 1.5 | Raise to 2.0 for crypto/futures to reduce noise; lower to 1.2 for stocks. |
| **EMA Period (Trend)** | 200 | Use 50 for short‑term trend; 200 for long‑term. |
| **Show options** | All true | Toggle off CVD, MA, or acceleration for cleaner view. |
---
### 7. Alerts (Notifications)
The indicator provides **one‑time alerts** (on first occurrence) for:
- High‑confidence Attack / Accumulate / Distribute
- Absorption (range accumulation)
- Bullish / Bearish divergence
- Momentum slowdown
- Churn (fake breakout)
**Set up alerts** via the PulseWire alarm dialog – select the condition and enable push notifications.
---
### 8. Important Risk Disclaimers
- **Data limitations** – CVD is estimated from OHLC data, not tick‑by‑tick order flow. The indicator is a **tool for analysis, not a guaranteed predictor**.
- **Lag** – Signals appear 1‑2 bars after the actual event. Always combine with price action (support/resistance, candlestick patterns).
- **False signals** – Especially in low timeframes (<15 min). Use higher timeframes for reliability.
- **Backtesting** – Past performance does not guarantee future results. Always paper‑trade first.
- **Stop‑loss** – For any signal, place your stop **below the signal bar’s low** (for longs) or **above its high** (for shorts). Never trade without a stop.
---
### 9. Quick Reference Card
| You see... | Background | Dashboard | Action |
|------------|------------|-----------|--------|
| **攻** + green acceleration | Light green | All green | Aggressive long |
| **吸** | Light green | Mixed green/red | Light long, scale in |
| **换** | Light green | Any | Accumulate, wait for breakout |
| **对倒** or **减速** | Any | Any | Tighten stops, do not add |
| **发** or **S** | Light red | Mostly red | Short or exit longs |
| **B** | Light red | Red | Wait; do not buy yet |
---
### 10. Final Words
This indicator transforms raw volume and price data into **actionable institutional footprints**. It does not replace your own judgment but provides an objective framework to **filter noise, confirm trends, and manage risk**.
Use it with discipline – always combine signals with proper risk management and your own market context.
Happy trading! 📈 Indicator

OSAMA ZALLOUM V2//@version=6
indicator("XAUUSD SMC/ICT System", shorttitle="XAU SMC-ICT", overlay=true, max_boxes_count=300, max_lines_count=300, max_labels_count=300)
// ============================================================================
// INPUTS
// ============================================================================
swingLen = input.int(5, "Swing Pivot Length", minval=2, maxval=50, group="Market Structure", tooltip="Lower = faster/more sensitive. Higher = major structure only. Suggested: H4/D=7-8, H1=5-6, M15=5, M5=8-10.")
showStructure = input.bool(true, "Show BOS / CHoCH Labels", group="Market Structure")
showSwingSR = input.bool(true, "Show Auto Support/Resistance", group="Market Structure")
maxSRLines = input.int(6, "Max S/R Lines Kept", minval=1, maxval=20, group="Market Structure")
showOB = input.bool(true, "Show Order Blocks", group="Order Blocks")
obSearchBars = input.int(15, "OB Search Window (bars)", minval=3, maxval=50, group="Order Blocks")
maxOBBoxes = input.int(4, "Max Order Blocks per Side", minval=1, maxval=20, group="Order Blocks")
bullOBColor = input.color(color.new(color.teal, 82), "Bullish OB Color", group="Order Blocks")
bearOBColor = input.color(color.new(color.red, 82), "Bearish OB Color", group="Order Blocks")
showFVG = input.bool(true, "Show Fair Value Gaps", group="Fair Value Gap")
maxFVGBoxes = input.int(5, "Max FVG Boxes per Side", minval=1, maxval=30, group="Fair Value Gap")
minFVGSizeATR = input.float(0.0, "Min FVG Size (x ATR, 0 = off)", minval=0.0, maxval=5.0, step=0.1, group="Fair Value Gap", tooltip="Filters out small gaps. Raise to 0.3-0.5 during strong trends when FVGs stack up too much.")
bullFVGColor = input.color(color.new(color.blue, 82), "Bullish FVG Color", group="Fair Value Gap")
bearFVGColor = input.color(color.new(color.orange, 82), "Bearish FVG Color", group="Fair Value Gap")
showLiquidity = input.bool(true, "Show Equal Highs/Lows", group="Liquidity")
eqTolerancePct = input.float(0.10, "Equal High/Low Tolerance (%)", minval=0.01, maxval=2.0, step=0.01, group="Liquidity")
maxEQLines = input.int(6, "Max Liquidity Lines Kept", minval=1, maxval=20, group="Liquidity")
showSweeps = input.bool(true, "Show Liquidity Sweeps", group="Liquidity")
showFib = input.bool(true, "Show Auto Fibonacci (last swing leg)", group="Fibonacci")
showOTEZone = input.bool(true, "Highlight OTE Zone (0.618 - 0.79)", group="Fibonacci")
fibExtendBars = input.int(20, "Fibonacci Right Extension (bars)", minval=5, maxval=100, group="Fibonacci")
// ============================================================================
// SWING / MARKET STRUCTURE (BOS / CHoCH)
// ============================================================================
ph = ta.pivothigh(high, swingLen, swingLen)
pl = ta.pivotlow(low, swingLen, swingLen)
var float lastSwingHighVal = na
var int lastSwingHighBar = na
var float prevSwingHighVal = na
var int prevSwingHighBar = na
var float lastSwingLowVal = na
var int lastSwingLowBar = na
var float prevSwingLowVal = na
var int prevSwingLowBar = na
var bool brokeHighFlag = false
var bool brokeLowFlag = false
var int trendState = 0
if not na(ph)
prevSwingHighVal := lastSwingHighVal
prevSwingHighBar := lastSwingHighBar
lastSwingHighVal := ph
lastSwingHighBar := bar_index - swingLen
brokeHighFlag := false
if not na(pl)
prevSwingLowVal := lastSwingLowVal
prevSwingLowBar := lastSwingLowBar
lastSwingLowVal := pl
lastSwingLowBar := bar_index - swingLen
brokeLowFlag := false
bullBreak = not na(lastSwingHighVal) and close > lastSwingHighVal and not brokeHighFlag
bearBreak = not na(lastSwingLowVal) and close < lastSwingLowVal and not brokeLowFlag
if bullBreak
brokeHighFlag := true
if showStructure
label.new(bar_index, low, trendState == 1 ? "BOS" : "CHoCH", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
trendState := 1
if bearBreak
brokeLowFlag := true
if showStructure
label.new(bar_index, high, trendState == -1 ? "BOS" : "CHoCH", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, size=size.tiny)
trendState := -1
var array srLines = array.new()
if showSwingSR and not na(ph)
srLineH = line.new(bar_index - swingLen, ph, bar_index, ph, color=color.new(color.red, 40), style=line.style_dashed, extend=extend.right)
array.push(srLines, srLineH)
if array.size(srLines) > maxSRLines
line.delete(array.shift(srLines))
if showSwingSR and not na(pl)
srLineL = line.new(bar_index - swingLen, pl, bar_index, pl, color=color.new(color.teal, 40), style=line.style_dashed, extend=extend.right)
array.push(srLines, srLineL)
if array.size(srLines) > maxSRLines
line.delete(array.shift(srLines))
// ============================================================================
// ORDER BLOCKS
// ============================================================================
var array bullOBBoxes = array.new()
var array bearOBBoxes = array.new()
if showOB and bullBreak
float obTop = na
float obBottom = na
int obBar = na
for i = 1 to obSearchBars
if close < open
obTop := high
obBottom := low
obBar := bar_index - i
break
if not na(obBar)
obBoxBull = box.new(left=obBar, top=obTop, right=bar_index, bottom=obBottom, border_color=color.teal, bgcolor=bullOBColor, text="OB", text_size=size.tiny, text_color=color.teal)
array.push(bullOBBoxes, obBoxBull)
if array.size(bullOBBoxes) > maxOBBoxes
box.delete(array.shift(bullOBBoxes))
if showOB and bearBreak
float obTop2 = na
float obBottom2 = na
int obBar2 = na
for i = 1 to obSearchBars
if close > open
obTop2 := high
obBottom2 := low
obBar2 := bar_index - i
break
if not na(obBar2)
obBoxBear = box.new(left=obBar2, top=obTop2, right=bar_index, bottom=obBottom2, border_color=color.red, bgcolor=bearOBColor, text="OB", text_size=size.tiny, text_color=color.red)
array.push(bearOBBoxes, obBoxBear)
if array.size(bearOBBoxes) > maxOBBoxes
box.delete(array.shift(bearOBBoxes))
if array.size(bullOBBoxes) > 0
for i = array.size(bullOBBoxes) - 1 to 0
obB = array.get(bullOBBoxes, i)
if close < box.get_bottom(obB)
box.delete(obB)
array.remove(bullOBBoxes, i)
else
box.set_right(obB, bar_index)
if array.size(bearOBBoxes) > 0
for i = array.size(bearOBBoxes) - 1 to 0
obB2 = array.get(bearOBBoxes, i)
if close > box.get_top(obB2)
box.delete(obB2)
array.remove(bearOBBoxes, i)
else
box.set_right(obB2, bar_index)
// ============================================================================
// FAIR VALUE GAPS (FVG)
// ============================================================================
atrVal = ta.atr(14)
var array bullFVGBoxes = array.new()
var array bearFVGBoxes = array.new()
bullFVG = low > high and (minFVGSizeATR == 0 or (low - high ) > atrVal * minFVGSizeATR)
bearFVG = high < low and (minFVGSizeATR == 0 or (low - high) > atrVal * minFVGSizeATR)
if showFVG and bullFVG
fvgBoxBull = box.new(left=bar_index - 2, top=low, right=bar_index, bottom=high , border_color=color.blue, bgcolor=bullFVGColor, text="FVG", text_size=size.tiny, text_color=color.blue)
array.push(bullFVGBoxes, fvgBoxBull)
if array.size(bullFVGBoxes) > maxFVGBoxes
box.delete(array.shift(bullFVGBoxes))
if showFVG and bearFVG
fvgBoxBear = box.new(left=bar_index - 2, top=low , right=bar_index, bottom=high, border_color=color.orange, bgcolor=bearFVGColor, text="FVG", text_size=size.tiny, text_color=color.orange)
array.push(bearFVGBoxes, fvgBoxBear)
if array.size(bearFVGBoxes) > maxFVGBoxes
box.delete(array.shift(bearFVGBoxes))
if array.size(bullFVGBoxes) > 0
for i = array.size(bullFVGBoxes) - 1 to 0
fvgB = array.get(bullFVGBoxes, i)
if close < box.get_bottom(fvgB)
box.delete(fvgB)
array.remove(bullFVGBoxes, i)
else
box.set_right(fvgB, bar_index)
if array.size(bearFVGBoxes) > 0
for i = array.size(bearFVGBoxes) - 1 to 0
fvgB2 = array.get(bearFVGBoxes, i)
if close > box.get_top(fvgB2)
box.delete(fvgB2)
array.remove(bearFVGBoxes, i)
else
box.set_right(fvgB2, bar_index)
// ============================================================================
// LIQUIDITY: EQUAL HIGHS / LOWS + SWEEPS
// ============================================================================
var array eqLines = array.new()
var array eqLabels = array.new()
if showLiquidity and not na(ph) and not na(prevSwingHighVal)
if math.abs(ph - prevSwingHighVal) <= prevSwingHighVal * eqTolerancePct / 100
eqLineH = line.new(prevSwingHighBar, prevSwingHighVal, bar_index - swingLen, ph, color=color.new(color.fuchsia, 20), width=2)
eqLabelH = label.new(bar_index - swingLen, ph, "EQH", style=label.style_label_down, color=color.new(color.fuchsia, 20), textcolor=color.fuchsia, size=size.tiny)
array.push(eqLines, eqLineH)
array.push(eqLabels, eqLabelH)
if array.size(eqLines) > maxEQLines
line.delete(array.shift(eqLines))
label.delete(array.shift(eqLabels))
if showLiquidity and not na(pl) and not na(prevSwingLowVal)
if math.abs(pl - prevSwingLowVal) <= prevSwingLowVal * eqTolerancePct / 100
eqLineL = line.new(prevSwingLowBar, prevSwingLowVal, bar_index - swingLen, pl, color=color.new(color.fuchsia, 20), width=2)
eqLabelL = label.new(bar_index - swingLen, pl, "EQL", style=label.style_label_up, color=color.new(color.fuchsia, 20), textcolor=color.fuchsia, size=size.tiny)
array.push(eqLines, eqLineL)
array.push(eqLabels, eqLabelL)
if array.size(eqLines) > maxEQLines
line.delete(array.shift(eqLines))
label.delete(array.shift(eqLabels))
var bool sweptLowFlag = false
var bool sweptHighFlag = false
if not na(pl)
sweptLowFlag := false
if not na(ph)
sweptHighFlag := false
bullishSweep = showSweeps and not na(lastSwingLowVal) and low < lastSwingLowVal and close > lastSwingLowVal and not sweptLowFlag
bearishSweep = showSweeps and not na(lastSwingHighVal) and high > lastSwingHighVal and close < lastSwingHighVal and not sweptHighFlag
if bullishSweep
sweptLowFlag := true
label.new(bar_index, low, "Sweep", style=label.style_label_up, color=color.new(color.lime, 0), textcolor=color.black, size=size.tiny)
if bearishSweep
sweptHighFlag := true
label.new(bar_index, high, "Sweep", style=label.style_label_down, color=color.new(color.maroon, 0), textcolor=color.white, size=size.tiny)
// ============================================================================
// AUTO FIBONACCI (from most recent swing leg) + OTE ZONE
// ============================================================================
var line fibLine0 = na
var line fibLine236 = na
var line fibLine382 = na
var line fibLine5 = na
var line fibLine618 = na
var line fibLine79 = na
var line fibLine100 = na
var box oteBox = na
updateFib = showFib and (not na(ph) or not na(pl)) and not na(lastSwingHighVal) and not na(lastSwingLowVal)
if updateFib
line.delete(fibLine0)
line.delete(fibLine236)
line.delete(fibLine382)
line.delete(fibLine5)
line.delete(fibLine618)
line.delete(fibLine79)
line.delete(fibLine100)
box.delete(oteBox)
bool upLeg = lastSwingHighBar > lastSwingLowBar
float hi = lastSwingHighVal
float lo = lastSwingLowVal
float diff = hi - lo
int leftBar = upLeg ? lastSwingLowBar : lastSwingHighBar
int rightBar = bar_index + fibExtendBars
float lv0 = upLeg ? hi : lo
float lv236 = upLeg ? hi - diff * 0.236 : lo + diff * 0.236
float lv382 = upLeg ? hi - diff * 0.382 : lo + diff * 0.382
float lv5 = upLeg ? hi - diff * 0.5 : lo + diff * 0.5
float lv618 = upLeg ? hi - diff * 0.618 : lo + diff * 0.618
float lv79 = upLeg ? hi - diff * 0.79 : lo + diff * 0.79
float lv100 = upLeg ? lo : hi
fibLine0 := line.new(leftBar, lv0, rightBar, lv0, color=color.new(color.gray, 30))
fibLine236 := line.new(leftBar, lv236, rightBar, lv236, color=color.new(color.gray, 30))
fibLine382 := line.new(leftBar, lv382, rightBar, lv382, color=color.new(color.gray, 30))
fibLine5 := line.new(leftBar, lv5, rightBar, lv5, color=color.new(color.gray, 30))
fibLine618 := line.new(leftBar, lv618, rightBar, lv618, color=color.new(color.yellow, 20))
fibLine79 := line.new(leftBar, lv79, rightBar, lv79, color=color.new(color.yellow, 20))
fibLine100 := line.new(leftBar, lv100, rightBar, lv100, color=color.new(color.gray, 30))
if showOTEZone
oteBox := box.new(left=leftBar, top=math.max(lv618, lv79), right=rightBar, bottom=math.min(lv618, lv79), bgcolor=color.new(color.yellow, 85), border_color=color.new(color.yellow, 50), text="OTE", text_size=size.tiny)
// ============================================================================
// BIAS INFO PANEL
// ============================================================================
var table infoTable = table.new(position.top_right, 1, 1, bgcolor=color.new(color.black, 70), border_width=1, border_color=color.gray)
if barstate.islast
string biasText = trendState == 1 ? "BIAS: BULLISH" : trendState == -1 ? "BIAS: BEARISH" : "BIAS: NEUTRAL"
color biasColor = trendState == 1 ? color.lime : trendState == -1 ? color.red : color.gray
table.cell(infoTable, 0, 0, biasText, text_color=biasColor, text_size=size.small)
// ============================================================================
// ALERTS
// ============================================================================
alertcondition(bullBreak, title="Bullish BOS/CHoCH", message="XAUUSD: Bullish structure break")
alertcondition(bearBreak, title="Bearish BOS/CHoCH", message="XAUUSD: Bearish structure break")
alertcondition(bullishSweep, title="Bullish Liquidity Sweep", message="XAUUSD: Bullish liquidity sweep detected")
alertcondition(bearishSweep, title="Bearish Liquidity Sweep", message="XAUUSD: Bearish liquidity sweep detected")
Indicator

MoreThanMoney Aurum Flow ORBMoreThanMoney — Aurum Flow
A trend-following signal engine built for crypto perpetual futures (optimized for the 1H timeframe). Aurum Flow only takes trades in the direction of the dominant trend and frames each setup with a complete, static trade plan — entry, stop, and three take-profits — plus position-sizing and cost analytics for leveraged accounts.
How it works
Trend filter (DEMA stack): longs only when DEMA 15 > 50 > 238, shorts only when reversed. Counter-trend noise is filtered out.
Signal trigger: a Point-of-Control (volume POC) crossover, confirmed by the trend filter and an optional RSI check.
Static trade plan: on the signal bar, Entry / SL / TP1 / TP2 / TP3 are calculated once and frozen — the levels never drift.
ATR risk model: SL = 1.5×ATR by default; targets at 1:1.5, 1:3 and 1:6 R (fully configurable). A percentage mode is also available.
Built for perpetuals
Each level label shows the distance to entry in points and %.
An account panel turns your inputs (account size, risk %, taker fee, max leverage) into suggested notional, useful leverage, margin, and round-trip fee cost — so you know the real cost and sizing of every trade before you take it.
Alerts / automation
Uses alert() with a structured JSON payload (symbol, direction, entry, SL, all TPs, distances, leverage, cost). Create one alert with the "Any alert() function call" condition to route signals to your own webhook/journal.
Recommended use: apply to liquid perpetual markets on the 1H chart. Start with the default risk model and adjust to your own plan.
⚠️ For educational purposes only. Not financial advice. Trading leveraged perpetual futures carries a high risk of loss. Past performance does not guarantee future results.
© RicardoGarciaPT / MoreThanMoney. Indicator

Indicator

Strategy

CM - Bollinger Bands Mean Reversion [CriptoMatiko]This indicator tracks **Bollinger Bands mean reversion signals**, replicating the entry and exit logic of a Python backtester that evaluated 81 long + 81 short parameter combinations on ETH/USDT 4H (Bybit Futures Linear, Mar 2025 – Aug 2026).
**The central finding:** the stop loss matters more than the band parameters.
| Setup | Direction | SL | Trades | Win Rate | Return |
|---|---|---|---|---|---|
| Standard (what tutorials teach) | Long | 2% | 110 | 38% | **-22.8%** |
| Optimized (indicator default) | Long | 1% | 110 | 38.2% | **+16.0%** |
| Buy & Hold ETH (same period) | — | — | — | — | -1.2% |
Same indicator. Same band parameters (20, 2.0). Different stop loss.
**Short side (optional):**
BB(20,2) shorts returned -17.4% — avoid with these settings. The optimizer found that shorts require different parameters: BB(10, 2.5) SL=1% TP=3R → +8.9% (Sharpe 7.81, 23 trades). Enable via the "Allow Short" input and adjust the parameters accordingly.
---
**Signal logic:**
- Long signal: bar closes **below** the lower Bollinger Band (no open position)
- Short signal: bar closes **above** the upper Bollinger Band (no open position)
- Entry: executed at the **next bar's open** (no lookahead)
**Exit logic — three mechanisms:**
1. **SL**: price hits SL% below (long) or above (short) the entry price
2. **TP**: price hits TP_ratio × risk from entry
3. **BB_UP / BB_DN**: bar closes beyond the opposite band (mean reversion complete)
**Default parameters (best Sharpe from 81-config long optimization):**
- BB Period: 20 | Std Deviation: 2.0 | Stop Loss: 1.0% | TP Ratio: 2.0R
**What makes this different from other BB indicators:**
- Parameters derived from a grid search (3 periods × 3 std devs × 3 SL% × 3 TP ratios × long/short/both)
- Simulated position tracking: entry marks appear on the next bar's open, matching backtester logic
- Three exit mechanisms with distinct markers (SL ✕ / TP ✓ / BB reversion ▽)
- SL and TP levels displayed as live lines during open position
- Short side included but with honest disclosure: BB(20,2) shorts underperform
- Uses ddof=1 standard deviation (biased=false) to match Python pandas behavior exactly
**Note:** This is an indicator with simulated position tracking, not a strategy. It shows signals and approximate trade timing for visual reference. For exact backtesting and the full optimizer: see GitHub link below.
**Tested on:** ETH/USDT 4H, Bybit Futures Linear. Validate on your own pair before using with real capital. Past performance does not guarantee future results. Indicator

NAS100 Practical SMC 5m v12//@version=6
// Apply to NAS100 5-minute standard candles.
strategy("NAS100 Practical SMC 5m v1", overlay=true, pyramiding=0, process_orders_on_close=true,
initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100,
commission_type=strategy.commission.percent, commission_value=0.02, slippage=2, calc_on_order_fills=false)
g1 = "SMC setup"
sessionNY = input.session("0935-1200", "New York session", group=g1)
lookback = input.int(12, "Liquidity lookback bars", minval=3, group=g1)
emaLen = input.int(20, "Confirmed 1-hour bias EMA", minval=2, group=g1)
g2 = "Risk"
buffer = input.float(8, "Stop beyond sweep", minval=1, group=g2)
rr = input.float(2.0, "Reward/risk", minval=1, step=0.25, group=g2)
maxTrades = input.int(2, "Max trades per day", minval=1, group=g2)
inSession = not na(time(timeframe.period, sessionNY, "America/New_York"))
// Last closed H1 bar only: prevents look-ahead.
h1Close = request.security(syminfo.tickerid, "60", close , lookahead=barmerge.lookahead_on)
h1Ema = request.security(syminfo.tickerid, "60", ta.ema(close, emaLen) , lookahead=barmerge.lookahead_on)
bullBias = h1Close > h1Ema
bearBias = h1Close < h1Ema
sellSide = ta.lowest(low , lookback)
buySide = ta.highest(high , lookback)
// Sweep must take local liquidity and close back inside; confirmation is the next candle.
bullSweep = inSession and bullBias and low < sellSide and close > sellSide
bearSweep = inSession and bearBias and high > buySide and close < buySide
var int bullBar = na
var int bearBar = na
var float bullLow = na
var float bearHigh = na
if bullSweep
bullBar := bar_index
bullLow := low
if bearSweep
bearBar := bar_index
bearHigh := high
buySignal = not na(bullBar) and bar_index == bullBar + 1 and close > high
sellSignal = not na(bearBar) and bar_index == bearBar + 1 and close < low
if not na(bullBar) and bar_index > bullBar
bullBar := na
if not na(bearBar) and bar_index > bearBar
bearBar := na
var int count = 0
if ta.change(time("D")) != 0
count := 0
var float entry = na
var float stop = na
var float target = na
if strategy.position_size == 0 and count < maxTrades and buySignal
entry := close
stop := bullLow - buffer
target := entry + (entry-stop)*rr
count += 1
strategy.entry("SMC BUY", strategy.long)
if strategy.position_size == 0 and count < maxTrades and sellSignal
entry := close
stop := bearHigh + buffer
target := entry - (stop-entry)*rr
count += 1
strategy.entry("SMC SELL", strategy.short)
if strategy.position_size > 0
s = high >= entry + (entry-stop) ? math.max(stop, entry) : stop
strategy.exit("BUY exit", "SMC BUY", stop=s, limit=target)
if strategy.position_size < 0
s = low <= entry - (stop-entry) ? math.min(stop, entry) : stop
strategy.exit("SELL exit", "SMC SELL", stop=s, limit=target)
plot(h1Ema, "Confirmed 1h EMA", color=color.orange)
plotshape(buySignal, "Buy", shape.triangleup, location.belowbar, color=color.lime, text="BUY")
plotshape(sellSignal, "Sell", shape.triangledown, location.abovebar, color=color.red, text="SELL")
Strategy

Indicator

Smart Trend SignalSmart Trend Signal
Smart Trend Signal is a trend-following indicator designed to help traders identify high-probability buy and sell opportunities while filtering out market noise.
The indicator combines multiple technical factors, including:
Fast and Slow EMA trend analysis
RSI momentum confirmation
Volume confirmation for stronger signals
Visual Buy and Sell markers
Trend background highlighting
Features
Clear Buy and Sell signals
Trend confirmation using EMA crossover
RSI filter to reduce false entries
Volume filter for stronger trade setups
Works on all timeframes
Suitable for Forex, Crypto, Stocks, and Indices
Built-in alert conditions for PulseWire notifications
How to Use
Buy Signal: Appears when the fast EMA crosses above the slow EMA, RSI confirms bullish momentum, and volume is above average.
Sell Signal: Appears when the fast EMA crosses below the slow EMA, RSI confirms bearish momentum, and volume is above average.
For better results, use this indicator alongside proper risk management, support and resistance analysis, and higher-timeframe trend confirmation. Indicator

OBV Price Confirmation Chronology - On Balance VolumeOBV Price Confirmation Chronology is a price-volume research indicator that compares the timing of rolling record events in price and classical On-Balance Volume (OBV).
A standard OBV line shows how directionally signed volume has accumulated. This script adds a different analytical layer: when price and OBV establish corresponding upper or lower records, which one occurred first, did both occur on the same bar, or did one remain unmatched beyond the selected tolerance?
The purpose is to help users study whether the available volume series is confirming, leading, lagging, or failing to match new price records.
This is a descriptive context tool. It is not a trading system and does not generate buy or sell instructions, entries, exits, targets, stops, position sizes, probability estimates, or performance claims.
CORE IDEA
The script separately observes two event families:
- High-side records
- Low-side records
A high-side event occurs when price or classical OBV establishes a new upper record relative to its selected rolling lookback.
A low-side event occurs when price or classical OBV establishes a new lower record relative to its selected rolling lookback.
Price and OBV events are then paired within a configurable number of chart bars.
The resulting chronology state describes the order in which the matching records occurred:
- OBV led
- Price led
- Synchronized
- Price only
- OBV only
High-side and low-side states are calculated independently.
"High" and "Low" describe the direction of the rolling record. They are not long or short recommendations.
WHAT MAKES IT DIFFERENT
The classical OBV calculation itself is a standard technical-analysis foundation. The original contribution of this script is the chronology engine built around it.
The script does not simply plot OBV, detect an OBV moving-average crossover, or mark a one-sided OBV breakout.
Its distinguishing features include:
- Symmetrical high-side and low-side record analysis
- Independent price-record and OBV-record detection
- Bar-by-bar measurement of which record occurred first
- Synchronized-event classification when both records occur together
- Pending-event storage within a configurable pairing tolerance
- Unpaired-event classification when the tolerance expires
- Deterministic oldest-first event pairing
- Breakout-sequence compression to reduce repeated record events
- Optional sampled-record mode for more frequent research events
- A normalized OBV-versus-price range-position gap
- Compact historical markers
- Separate latest high-side and low-side labels
- A concise current-state table
- Confirmed-bar event handling by default
This is not a classic pivot-divergence indicator.
It does not wait for confirmed swing pivots, draw divergence lines between historical pivots, or classify regular and hidden divergence. It instead studies the chronology of rolling price and OBV records.
CLASSICAL OBV CALCULATION
Classical OBV is calculated from the selected Direction source.
When the source rises from the previous bar:
- The current available volume is added.
When the source falls from the previous bar:
- The current available volume is subtracted.
When the source is unchanged:
- Zero is added.
Close is the default Direction source.
The chronology engine always uses classical cumulative OBV, regardless of the selected visual display mode.
PRICE RECORDS
The Price record source can use:
- High / Low
- Close
With High / Low selected:
- High-side records are calculated from price highs.
- Low-side records are calculated from price lows.
With Close selected:
- Both upper and lower price records are calculated from closing prices.
A price record must exceed the previous rolling record by the configured Minimum price record extension.
The default extension is one minimum tick. This helps avoid treating insignificant floating-point or feed-level differences as meaningful new price records.
Setting the extension to zero accepts any strictly higher or lower value.
OBV RECORDS
A high-side OBV record occurs when classical OBV exceeds its previous rolling maximum.
A low-side OBV record occurs when classical OBV falls below its previous rolling minimum.
A usable positive volume input is required for a new OBV record event.
EVENT SAMPLING MODES
Breakout sequence start is the default event mode.
This mode groups a sustained run of repeated rolling records into a cleaner event sequence. A new event is allowed only after the selected number of reset bars has separated it from the preceding record run.
This reduces repeated markers during a continuous expansion.
Sampled rolling records is an alternative research mode.
It allows record events to appear more frequently, subject to the selected minimum number of bars between sampled events.
PAIRING LOGIC
High-side and low-side events maintain separate pending states.
When a price record occurs without a matching OBV record, the price event waits for the configured Pair tolerance bars.
When an OBV record occurs without a matching price record, the OBV event waits in the same way.
If the opposite record occurs within the tolerance, the events form a completed pair.
The script gives priority to the oldest valid unmatched event. A new event from the same source does not overwrite an older valid pending event.
The classifications are:
OBV led
The OBV record occurred first and the matching price record occurred later within the tolerance.
Price led
The price record occurred first and the matching OBV record occurred later within the tolerance.
Synchronized
The price and OBV records occurred on the same chart bar when no older opposite-source pending event had priority.
Price only
A price record remained unmatched after the tolerance expired.
OBV only
An OBV record remained unmatched after the tolerance expired.
The tolerance is measured in chart bars, not clock time.
A setting of eight therefore means eight bars on the active chart timeframe.
READING THE +N VALUE
A compact label such as:
OBV +3
means that the matching OBV record occurred three chart bars before the price record.
A compact label such as:
Price +2
means that the matching price record occurred two chart bars before the OBV record.
The number is not:
- Signal strength
- Price distance
- Volume percentage
- Expected return
- Reversal probability
- Continuation probability
It is only the number of chart bars separating the two record events.
VISUAL LANGUAGE
The default visual structure keeps the OBV series as the primary layer.
Default line colors:
- Cyan: displayed OBV series
- Yellow: selected smoothing line
Historical event markers:
- Diamond: completed price-OBV pair
- X: pending event expired without a matching event
Default marker colors:
- Blue: OBV led
- Gold: Price led
- White: Synchronized
- Gold X: Price only
- Violet X: OBV only
Marker position identifies the event side:
- Markers above the displayed OBV line represent high-side events.
- Markers below the displayed OBV line represent low-side events.
The latest high-side state is shown with a green label.
The latest low-side state is shown with a pink label.
Only one latest high-side label and one latest low-side label are maintained. Older event history remains available through the smaller markers.
All primary colors, line widths, label sizes, table settings, and visual layers can be customized.
STATUS TABLE
The default Compact table contains four rows:
High
Shows the latest completed or expired high-side chronology state.
Low
Shows the latest completed or expired low-side chronology state.
Pending
Shows whether a price or OBV record is currently waiting for a matching event.
A pending value such as:
H Price 3/8
means that a high-side price record has waited three bars out of an eight-bar tolerance.
Gap
Shows which series currently occupies the stronger relative position inside its own recent range.
The table can be moved to any corner of the indicator pane.
A Detailed table mode is also available for users who want additional state and environment information.
RANGE-POSITION GAP
Price and classical OBV are independently normalized to positions from 0 to 100 inside their respective recent ranges.
The calculation is:
OBV range position - Price range position
A positive result means OBV is positioned higher inside its own recent range than price is positioned inside its price range.
A negative result means price is positioned higher inside its own recent range than OBV is positioned inside its OBV range.
In Compact mode, the table displays the stronger side and the absolute difference.
For example:
OBV 22.5
means OBV is 22.5 normalized range-position points above price.
Price 31.0
means price is 31.0 normalized range-position points above OBV.
The Gap value is not a price percentage, volume percentage, probability, forecast, or signal-strength score.
An optional subtle background tint can highlight larger positive or negative gaps. It is disabled by default to preserve visual clarity.
DISPLAY MODES
Classic OBV
Displays classical cumulative OBV.
This is the default mode because it matches the series used by the chronology engine.
Rolling zero-base OBV
Displays the current classical OBV value minus its value a selected number of bars ago.
This can make recent movement easier to compare visually, but it does not change chronology calculations.
Directional balance %
Measures net directionally signed volume relative to gross directionally signed volume over the selected lookback and displays the result on a scale from -100 to +100.
This mode changes only the visible pane series.
Chronology events always remain based on classical cumulative OBV.
SMOOTHING
An optional smoothing line is enabled by default.
Available methods:
- EMA
- SMA
- RMA
- WMA
The smoothing line is a visual reference only. It does not change price-record detection, OBV-record detection, pairing, pending events, expiration, or alert conditions.
ALERTS
The script provides separate alert conditions for:
- High-side OBV led
- High-side Price led
- High-side Synchronized
- Low-side OBV led
- Low-side Price led
- Low-side Synchronized
- Unpaired chronology expiration
The unpaired alert is disabled by default.
All alerts are restricted to confirmed bar closes.
Alert events describe completed chronology conditions only. They are not trade instructions.
LIVE AND HISTORICAL BEHAVIOR
Evaluate confirmed bars only is enabled by default.
With this setting enabled:
- Persistent chronology states update only when the current chart bar closes.
- Pending records do not pair or expire during an unfinished bar.
- Historical and realtime event handling remain aligned around confirmed chart bars.
The displayed OBV line, smoothing line, and range-position gap can still update while the current bar is forming because their underlying price and volume values are live.
If confirmed-bar evaluation is disabled, chronology events become a provisional intrabar preview. Those states can change before the bar closes.
Alerts remain confirmed-bar events even when intrabar preview is enabled.
The script uses the current chart timeframe only.
It does not request higher-timeframe or lower-timeframe data, does not use lookahead, and does not use future bars.
An unpaired X marker appears on the bar where the expiration becomes knowable, not retrospectively on the original pending-event bar.
NON-STANDARD CHARTS
Chronology-event processing is paused by default on non-standard chart types, including synthetic price constructions such as:
- Heikin Ashi
- Renko
- Kagi
- Point & Figure
- Range
- Line Break
Standard candlestick or bar charts are recommended.
INPUTS AND CUSTOMIZATION
Users can adjust:
- OBV Direction source
- Visible display mode
- Rolling zero-base length
- Directional-balance length
- Smoothing method and length
- Price record source
- Record lookback
- Record event mode
- Sequence reset bars
- Sampled-event spacing
- Pair tolerance
- Minimum price-record extension
- Confirmed-bar behavior
- Non-standard-chart behavior
- Historical markers
- Latest labels
- Label style and size
- Table position
- Compact or Detailed table density
- Table text size and formatting
- OBV and smoothing line widths
- Range-position lookback
- Gap threshold and optional tint
- Primary colors
- Alert availability
Visual settings do not change the underlying chronology calculations.
SUGGESTED WORKFLOW
1. Use a standard candlestick chart with a consistent and meaningful volume series.
2. Begin with Classic OBV so the displayed series matches the chronology basis.
3. Review the High and Low rows separately. They represent different record directions and can show different chronology states at the same time.
4. Use the historical diamonds to locate completed price-OBV pairs.
5. Use the historical X markers to locate events that expired without confirmation.
6. Read the +N value only as a bar-count lead or lag.
7. Review Pending to see whether a price or OBV record is still waiting for a counterpart.
8. Use Gap as secondary range-position context, not as a trade trigger.
9. Adjust Record lookback, Sequence reset bars, and Pair tolerance for the timeframe and research horizon.
10. Combine the observations with independent price structure, trend, volatility, liquidity, and risk analysis.
LIMITATIONS
OBV is derived from the volume series supplied for the selected symbol and data provider.
Depending on the market, the available series may represent:
- Exchange trade volume
- Exchange-specific crypto volume
- Broker-specific volume
- Tick volume
- Limited volume
- No usable volume
The interpretation and quality of all OBV-based calculations therefore depend on the symbol and feed.
If no usable volume is available, the OBV series may remain flat or the chronology may not provide meaningful events.
The absolute numerical level of cumulative OBV is not directly comparable between unrelated symbols.
Large isolated volume events can affect the cumulative OBV path for an extended period.
Corporate actions, session changes, market gaps, futures contract rolls, and provider-specific data changes can affect price and volume records.
Record events depend on the selected lookback and price source.
Pairing results depend on the selected tolerance.
Lower timeframes can produce more frequent and noisier events.
Higher timeframes generally produce fewer events and require more elapsed time for pending states to complete or expire.
Price-only and OBV-only states do not predict reversal or continuation.
OBV leadership does not guarantee that price will follow.
Price leadership does not guarantee that OBV will confirm.
Synchronized records do not guarantee trend persistence.
Range-position Gap does not represent a trading edge or future probability.
Default parameters are research starting points and are not optimized for any symbol, timeframe, market, or trading method.
This indicator should be used as one descriptive price-volume perspective within a broader analytical process. Indicator

Volume Profile Session EditionThe native PulseWire Volume Profile does not work on CFD/OTC
brokers like EasyMarkets, OANDA, Pepperstone, and others — because
these feeds provide zero or no real volume data.
This indicator solves that problem by automatically fetching volume
from a liquid proxy symbol that matches your chart instrument.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW IT WORKS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The indicator detects your chart symbol and automatically selects
a real-volume proxy from a regulated exchange:
- (60+ instruments mapped automatically)
If no proxy is found, it falls back to bar range (High–Low) so
the profile always renders regardless of the instrument.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT YOU GET
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔷 Session Volume Profile
A classic histogram anchored to each trading session. Bars are
split into bullish (up) and bearish (down) volume side by side.
The Value Area is highlighted in separate colors for quick reading.
🔷 POC — Point of Control
The price level with the highest traded volume in the session.
Extends to the right edge of the chart on the current session.
🔷 VAH / VAL — Value Area High & Low
Upper and lower boundaries of the configurable Value Area
(default 70% of total volume).
🔷 Info Panel
Shows the active proxy symbol, current session POC, VAH and VAL
prices updated in real time.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SESSION MODES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Day mode (default)
One profile per calendar day (UTC). Resets automatically at
midnight. Works on any intraday timeframe.
Candles mode
One profile every N bars. Fully configurable — examples:
• 15m chart → 96 candles = 1 full day
• 15m chart → 32 candles = 8 hours (London session)
• 15m chart → 16 candles = 4 hours
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Session Settings
• Sessions to Show — 1 to 10 past sessions
• Session Mode — Day or Candles
• Candles per Session — bars per profile in Candles mode
• Min Bars to Draw — skip incomplete sessions (weekends,
holidays) that have fewer than N bars
• Extend POC to Right — current session POC extends to
the right edge of the chart
Profile Settings
• Number of Rows — resolution of the histogram
(fewer rows = thicker, more readable bars)
• Value Area % — volume percentage defining the VA
• Profile Width — histogram width as % of session duration
Style
• Up / Down volume colors
• Value Area Bull / Bear colors (highlighted rows)
• POC line color and width
• VAH / VAL line colors and visibility
Volume Proxy
• Auto-detect ON (default) — built-in symbol map
• Auto-detect OFF — enter any PulseWire symbol manually
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPATIBLE BROKERS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EasyMarkets · OANDA · Pepperstone · IC Markets · FP Markets
· Any CFD or OTC feed where native volume profile shows no data
⚠️ DISCLAIMER
Volumes displayed are sourced from external proxy symbols
(Binance, FX, CME, COMEX, etc.) and do not represent the actual
volume of your broker or chart feed. Use for analysis and trend
confirmation only. Do not use as the sole basis for trading
decisions.
Requires PulseWire Pro or above.
⚠️ IMPORTANT:
- This indicator uses volume from EXTERNAL SOURCES, not broker volume
- Volumes may NOT match what you see on the chart
- Use as a secondary tool, as a SUPPLEMENT, not as the sole basis for decisions
- It is the user’s responsibility to validate the data Indicator

Indicator

Indicator

Indicator

Indicator
