TrendlinesDowntrend lines are one of the most important tools in technical analysis. A downtrend line is created by connecting a series of lower highs which forms a clear visual line where price repeatedly finds resistance. Traders use these lines to understand trend direction, time entries, plan exits, and quickly recognize when momentum is shifting.
This indicator automatically finds and maintains the strongest downtrend lines on any timeframe. It removes the guesswork and inconsistency that comes with manually drawing trendlines.
Unlike most other trendline indicators that just draw lines from swing highs to the current high, this indicator actively scans for new pivot highs, tests each potential line against live price action and only promotes a line to valid status once it has proven itself as a true trendline by price touching or respecting the line a user defined number of times, with the default set to three. This filters out noise and leaves only the most meaningful and reliable trendlines on your chart.
When price eventually breaks a respected downtrend line the indicator highlights the breakout immediately. Traders often use these moments for entries confirmation signals or to prepare for a potential shift in market behavior. The breakout alert is built directly into the indicator so you never miss an important move.
This indicator also works with the Pine Screener to find tickers with current valid trendlines.
How are trendlines determined?
The indicator begins by anchoring to the most recent pivot high. From there it draws a temporary line to the current bar and evaluates every bar between the two points.
Each time a high comes within a user selected buffer zone around that line it is counted as a touch. Once the required number of touches is confirmed and price has never exceeded the buffer to the upside the trendline becomes valid and is displayed on the chart as an active downtrend line.
دعم ومقاومة
Box TheoryBox Theory – Description
This indicator is based on the popular “Box Theory” concept, where the previous session’s High–Low range acts as the most important structure for the next session.
Traders use this because the market often reacts to the same areas where liquidity, orders, and imbalances were created in the prior session.
At every new session open, the indicator automatically records:
Previous High
Previous Low
Middle (50% level)
These three levels form a box, which becomes your roadmap for the new session.
This method is widely used because it highlights where most reversals, sweeps, and reactions occur—without needing any extra indicators.
How the Zones Are Calculated
Previous High
The highest price of the last session.
This forms the top edge, which acts as resistance and the basis for the Sell Zone.
Previous Low
The lowest price of the last session.
This forms the bottom edge, acting as support and the basis for the Buy Zone.
Middle Line (50% Level)
The exact midpoint between High and Low.
This is the fair-value zone, where price often consolidates and becomes directionless.
No signals are triggered near the middle, because trades taken here historically have low accuracy.
Buy Zone (Green Area)
The lower part of the box.
Price often reacts here because this area held buyers in the previous session.
When price enters this green zone inside the box, the indicator can show a Buy Zone label.
Sell Zone (Red Area)
The upper part of the box.
Price commonly rejects here because this area acted as resistance previously.
When price enters this red zone inside the box, the indicator can show a Sell Zone label.
How Zone Size Is Set (Sensitivity %)
You can adjust how big the Buy/Sell zones are using the Sensitivity (%) input.
Lower % → Smaller zones → More precise signals
Higher % → Larger zones → Signals appear earlier and from farther away
Formula:
Zone Size = (Previous High − Previous Low) × (Sensitivity % ÷ 100)
This lets you customize how tight or how early your signals appear.
Inside-Box Only Logic
The indicator only works inside the previous session’s range.
If price breaks above the previous High → No sell signal
If price breaks below the previous Low → No buy signal
This avoids false signals during breakouts or trending markets.
Alerts
The indicator includes two alerts:
Buy Zone Alert → Triggers when price enters the Buy Zone
Sell Zone Alert → Triggers when price enters the Sell Zone
Just enable them in TradingView’s alert panel.
ICT Order Block Identifier [Eˣ]📦 Order Block Identifier
Overview
The Order Block Identifier automatically detects and displays institutional order blocks on your charts - zones where banks, hedge funds, and market makers place their orders. This indicator helps identify where institutions are likely to defend their positions and where price often finds support or resistance, based on ICT (Inner Circle Trader) concepts.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 What This Indicator Does
Detects Order Blocks:
• 🟢 Bullish Order Blocks (OB+) - Last bearish candle before strong bullish move
• 🔴 Bearish Order Blocks (OB-) - Last bullish candle before strong bearish move
• Automatically identifies institutional buying/selling zones
• Tracks up to 30 order blocks simultaneously
• Works on all timeframes and instruments
Smart Features:
• Auto-Timeframe Adjustment - Optimizes detection for 1min to Weekly charts
• Active Block Highlighting - Shows which OB price is approaching
• Touch Tracking - Knows when blocks are tested
• ATR-Based Detection - Adapts to each instrument's volatility
• Strength Filtering - Choose Low/Medium/High to control sensitivity
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 Understanding Order Blocks
What Are Order Blocks?
Order blocks are the "footprints" left behind by institutional traders (banks, hedge funds, market makers) when they enter large positions. Because institutions can't fill massive orders at once without moving the market, they:
1. Place orders gradually over time
2. Leave zones where their buy/sell orders are concentrated
3. Defend these zones when price returns
4. Create reliable support and resistance levels
The ICT Concept:
Developed by Michael Huddleston (Inner Circle Trader), order block theory states that:
• The last opposite-colored candle before a strong move contains institutional orders
• Price often returns to test these zones before continuing
• These zones act as strong support (bullish OB) or resistance (bearish OB)
• Smart money defends their positions at these levels
Why Order Blocks Work:
• Unfilled Orders: Institutions may still have pending orders in the block
• Position Defense: They protect their entries by adding to positions
• Stop Placement: Retail stops cluster near these zones (liquidity for institutions)
• Market Structure: Price respects these levels due to order flow dynamics
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 Bullish Order Blocks Explained
How They Form:
1. Price is consolidating or declining
2. Institutions begin accumulating (buying)
3. A strong bullish move erupts
4. The last bearish candle before this move = Bullish Order Block
5. This candle represents where institutions were buying aggressively
Why The Last Bearish Candle?
• Institutions absorbed all selling pressure at this level
• Their buy orders filled as price was declining
• When price returns, they defend this zone with more buying
• It becomes a demand zone / support level
Trading Bullish Order Blocks:
Setup:
• Wait for price to retrace back to bullish OB (green box)
• Look for rejection/reversal pattern (pin bar, engulfing, etc.)
• Enter long when price bounces from the OB zone
• Stop loss: Below the order block
• Target: Recent high or opposite order block
Best Scenarios:
• OB aligns with other support (trendline, fibonacci, round number)
• First touch of OB (unmitigated) has highest probability
• Occurs during high-volume sessions (London/NY)
• Trend is bullish on higher timeframe
Example Trade:
• Bullish OB forms at $50,000 (last red candle before rally)
• Price rallies to $52,000 then retraces
• Price drops back to $50,100 (touching OB)
• Bullish pin bar forms on the OB
• Enter long at $50,200, stop at $49,800
• Target: $52,000+ (previous high)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 Bearish Order Blocks Explained
How They Form:
1. Price is consolidating or rising
2. Institutions begin distributing (selling)
3. A strong bearish move erupts
4. The last bullish candle before this move = Bearish Order Block
5. This candle represents where institutions were selling aggressively
Why The Last Bullish Candle?
• Institutions absorbed all buying pressure at this level
• Their sell orders filled as price was rising
• When price returns, they defend this zone with more selling
• It becomes a supply zone / resistance level
Trading Bearish Order Blocks:
Setup:
• Wait for price to retrace back to bearish OB (red box)
• Look for rejection/reversal pattern (shooting star, bearish engulfing)
• Enter short when price rejects from the OB zone
• Stop loss: Above the order block
• Target: Recent low or opposite order block
Best Scenarios:
• OB aligns with other resistance (trendline, fibonacci, round number)
• First touch of OB (unmitigated) has highest probability
• Occurs during high-volume sessions (London/NY)
• Trend is bearish on higher timeframe
Example Trade:
• Bearish OB forms at $48,000 (last green candle before drop)
• Price drops to $46,000 then retraces
• Price rallies back to $47,900 (touching OB)
• Bearish engulfing forms at the OB
• Enter short at $47,800, stop at $48,200
• Target: $46,000- (previous low)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 How To Use This Indicator
Strategy 1: Order Block Retest (Classic)
Best For: Swing trading, capturing reversals
Timeframes: 15min, 1H, 4H, Daily
Win Rate: 60-70% (first touch)
Entry Rules:
1. Identify unmitigated order block (bright color, not gray)
2. Wait for price to return to the OB zone
3. Look for price action confirmation:
• Bullish OB: Pin bar, bullish engulfing, hammer
• Bearish OB: Shooting star, bearish engulfing, doji
4. Enter in the direction of the OB
5. Stop loss: Beyond the opposite side of OB (20-30 pips)
6. Target: 2-3R or opposite OB
Example:
• Bullish OB at $100-$102
• Price drops to $101.50 (enters OB)
• Bullish pin bar forms with low at $100.80
• Enter long at $102 (OB high), stop at $99.50
• Risk: $2.50, Target: $107.50 (3R)
Strategy 2: Break & Retest
Best For: Trend trading, breakout confirmation
Timeframes: 5min, 15min, 1H
Win Rate: 65-75%
Entry Rules:
1. Price breaks through an order block
2. Wait for pullback to the broken OB
3. The OB now acts as support (if broken up) or resistance (if broken down)
4. Enter when price respects the flipped OB
5. Stop: Inside the OB zone
6. Target: Next OB or structure level
Why It Works: Broken OBs flip polarity - support becomes resistance and vice versa
Strategy 3: Multi-Timeframe Confirmation
Best For: High-probability setups
Timeframes: Combine 1H + 4H or 15min + 1H
Win Rate: 70-80%
Entry Rules:
1. Identify order block on higher timeframe (4H or Daily)
2. Switch to lower timeframe (1H or 15min)
3. Wait for lower TF order block to form within higher TF OB
4. Trade the lower TF OB in direction of higher TF OB
5. Stop: Below lower TF OB
6. Target: Edge of higher TF OB or beyond
Why It Works: Alignment across timeframes = institutional consensus
Strategy 4: Order Block to Order Block
Best For: Range trading, swing entries
Timeframes: 1H, 4H
Win Rate: 55-65%
Entry Rules:
1. Identify both bullish OB below and bearish OB above
2. Price is ranging between these OBs
3. Enter long at bullish OB, target bearish OB
4. Enter short at bearish OB, target bullish OB
5. Stop: Beyond the trading OB
6. Exit at opposite OB
Why It Works: Price moves from one institutional zone to another
Strategy 5: Mitigation Fade
Best For: Aggressive scalping
Timeframes: 5min, 15min
Win Rate: 50-60% (higher risk)
Entry Rules:
1. Price approaches an order block
2. Instead of bouncing, price breaks through (mitigates it)
3. Enter immediately in direction of breakout
4. Stop: Back inside the mitigated OB
5. Quick target: 1-1.5R
Why It Works: When OB fails, it often leads to strong continuation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ Settings Explained
Core Settings
Auto-Adjust for Timeframe (Default: ON)
• Automatically optimizes detection for current chart timeframe
• 1min: 3 bars lookback
• 5min: 4 bars lookback
• 15min: 5 bars lookback
• 1H: 6 bars lookback
• 4H: 8 bars lookback
• Daily+: 10-12 bars lookback
• Recommended: Keep ON for best results
Manual Detection Length (Default: 5)
• Only used when Auto-Adjust is OFF
• Number of bars to look back for the "last opposite candle"
• Lower (2-4): More sensitive, more blocks, more noise
• Higher (6-10): Less sensitive, fewer blocks, higher quality
• Recommended: Use Auto-Adjust instead
Display Settings
Show Bullish/Bearish Order Blocks
• Toggle each type on/off independently
• Customize colors for each OB type
• Tip: Match colors to your chart theme
Max Order Blocks to Display (Default: 10)
• Limits how many OBs are shown at once
• Lower (5-8): Cleaner chart, only recent blocks
• Higher (15-30): More historical context
• Recommended: 8-12 for most trading
Show Order Block Labels (Default: ON)
• Displays "OB+" and "OB-" text on blocks
• Shows 🎯 on active (nearest) block
• Turn OFF for minimal chart appearance
• Recommended: Keep ON for clarity
Extend Blocks (bars) (Default: 50)
• How far to extend OB boxes to the right
• Lower (20-30): Shorter boxes, less clutter
• Higher (100+): Longer boxes, easier to see
• Blocks auto-extend until mitigated or limit reached
• Recommended: 40-60 bars
Filters
Block Strength Filter (Default: Medium)
• Controls how strong a move must be to create an OB
• Low: 0.5x ATR move required - Many blocks, more noise
• Medium: 1x ATR move required - Balanced quality/quantity
• High: 1.5x ATR move required - Only strongest institutional moves
• Recommended for beginners: High
• Recommended for experienced: Medium
• Recommended for scalpers: Low
Min Block Size % (Default: 0.1)
• Minimum size of OB as percentage of price
• Filters out tiny, insignificant blocks
• Crypto: 0.1-0.3%
• Forex: 0.05-0.15%
• Stocks: 0.1-0.5%
• Adjust based on instrument volatility
Advanced Settings
Show Mitigated Blocks (Default: OFF)
• When ON: Shows gray boxes for "used" order blocks
• When OFF: Blocks disappear after mitigation
• Use ON: For learning and analysis
• Use OFF: For clean, active trading
Highlight Active Block (Default: ON)
• Highlights the nearest order block to current price
• Active block shown with 🎯 emoji and brighter color
• Helps focus on most relevant trading opportunity
• Recommended: Keep ON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📱 Info Panel Guide
Bullish OB Count
• Number of active (unmitigated) bullish order blocks
• Higher number = More support zones below price
• Multiple bullish OBs = Strong demand structure
Bearish OB Count
• Number of active (unmitigated) bearish order blocks
• Higher number = More resistance zones above price
• Multiple bearish OBs = Strong supply structure
Bias Indicator
• ⬆ Bullish: More bullish OBs than bearish (demand > supply)
• ⬇ Bearish: More bearish OBs than bullish (supply > demand)
• ↔ Neutral: Equal OBs on both sides
• Trade in direction of bias for higher probability
Near Indicator
• Shows which OB price is closest to
• Displays distance as percentage
• Example: "Bull OB 0.85%" = Bullish OB is 0.85% below current price
• Watch for "Near" alerts to time entries
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📱 Alert Setup
This indicator includes 4 alert types:
1. Price Entering Bullish OB
• Fires when price touches a bullish order block
• Action: Watch for bounce/reversal pattern
• High-probability long setup developing
2. Price Entering Bearish OB
• Fires when price touches a bearish order block
• Action: Watch for rejection/reversal pattern
• High-probability short setup developing
3. New Bullish OB Detected
• Fires when a new bullish order block forms
• Action: Mark the zone for future retest
• New demand zone identified
4. New Bearish OB Detected
• Fires when a new bearish order block forms
• Action: Mark the zone for future retest
• New supply zone identified
To Set Up Alerts:
1. Click "Alert" button (clock icon)
2. Select "Order Block Identifier"
3. Choose your alert condition
4. Configure notification method
5. Click "Create"
Pro Tip: Set "Price Entering" alerts to catch trading opportunities in real-time
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💎 Pro Tips & Best Practices
✅ DO:
• First touch is best - Unmitigated OBs have highest win rate (60-70%)
• Wait for confirmation - Don't buy/sell just because price touched OB
• Use multiple timeframes - Higher TF OBs are stronger than lower TF
• Combine with structure - OB + trendline/support = high probability
• Trade with the bias - More bullish OBs = favor longs
• Respect mitigation - Once OB is mitigated, it's less reliable
• Use proper stop loss - Always place stops beyond the OB zone
• Consider session timing - OBs work best during London/NY sessions
⚠️ DON'T:
• Don't blindly buy/sell at OBs - Wait for confirmation
• Don't ignore mitigation - Gray blocks are much weaker
• Don't trade every OB - Quality over quantity
• Don't fight strong trends - OBs can be run through in strong momentum
• Don't use alone - Combine with price action, support/resistance
• Don't expect 100% win rate - Even best OBs fail sometimes (30-40% of time)
• Don't overtrade - Wait for A+ setups with confluence
🎯 Best Timeframes By Trading Style:
• Scalpers: 1min, 5min (quick OB touches)
• Day Traders: 5min, 15min, 1H (balanced view)
• Swing Traders: 1H, 4H, Daily (major institutional zones)
• Position Traders: 4H, Daily, Weekly (strongest OBs)
🔥 Best Instruments:
• Excellent: Forex major pairs (EUR/USD, GBP/USD), BTC, ETH, ES, NQ
• Good: Gold, Oil, Major indices, Large-cap stocks
• Moderate: Altcoins, small-cap stocks (more noise)
• Avoid: Very low liquidity instruments (OBs less reliable)
⏰ Best Times To Trade OBs:
• London Session (03:00-12:00 EST): Highest OB respect rate
• NY Session (08:00-17:00 EST): Strong OB reactions
• London-NY Overlap (08:00-12:00 EST): Best probability
• Asian Session: Lower probability, wait for London
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎓 Advanced Order Block Concepts
Order Block Flips (Polarity Change)
When price breaks through an OB and closes beyond it:
• Bullish OB that's broken becomes bearish (support becomes resistance)
• Bearish OB that's broken becomes bullish (resistance becomes support)
• Trading: Watch for retest of broken OB from opposite side
Order Block Refinement
When multiple OBs form at similar level:
• Later OB "refines" or "replaces" the earlier one
• Use the most recent OB as the active zone
• Older OBs become less relevant
Order Block Clusters
Multiple OBs stacked close together:
• Creates a "super zone" of institutional interest
• Higher probability of reversal
• Wider zone for entries (more room for confirmation)
Fair Value Gaps + Order Blocks
When OB aligns with Fair Value Gap:
• Extremely high probability setup
• Price is drawn to fill the gap AND test the OB
• Double confluence = institutional magnet
Order Block Mitigation Types
• Full Mitigation: Price fully enters and closes inside OB
• Partial Mitigation: Price wicks into OB but closes outside
• False Mitigation: Quick touch then immediate rejection
• Partial/false mitigation = OB still somewhat valid
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 Common Order Block Patterns
Pattern 1: The Perfect Retest
• OB forms during strong move
• Price continues 100-200+ pips
• Price retraces back to OB
• Clean bounce with confirmation candle
• Highest probability pattern
Pattern 2: The Double Tap
• Price tests OB, bounces weakly
• Price tests same OB again
• Second test produces stronger reaction
• Second touch often better entry
Pattern 3: The Fake-Out
• Price breaks through OB
• Immediately reverses back
• "Stop hunt" or liquidity grab
• Enter after price reclaims OB
Pattern 4: The Ladder
• Multiple OBs stacked like stairs
• Price steps from one OB to next
• Each OB provides support/resistance
• Trade OB-to-OB movements
Pattern 5: The Failed OB
• Price crashes through OB without pause
• OB completely invalidated
• Often signals strong momentum
• Don't fight it, trade the breakout
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 What Makes This Different?
Unlike basic support/resistance indicators, Order Block Identifier:
• ICT Methodology - Based on proven institutional concepts
• Auto-Timeframe Optimization - Works perfectly on all timeframes
• ATR-Based Detection - Adapts to each instrument's volatility
• Mitigation Tracking - Knows when blocks are no longer valid
• Active Block Highlighting - Shows most relevant opportunity
• Smart Filtering - Only shows high-quality institutional zones
• Visual Clarity - Clean, professional appearance
• Real-Time Updates - Blocks update as price action develops
Based On Professional Concepts:
• ICT Smart Money Concepts (SMC)
• Institutional order flow analysis
• Market maker behavior patterns
• Supply and demand zone theory
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🙏 If You Find This Helpful
• ⭐ Leave your feedback
• 💬 Share your experience in the comments
• 🔔 Follow for updates and new tools
Questions about Order Blocks? Feel free to ask in the comments.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Version History
• v1.0 - Initial release with auto-timeframe detection and ATR-based strength filtering
VOLX+ VWAP Range BandsVOLX+ plots multiple VWAP-weighted high/low channels across different lookback periods to show how price behaves relative to short-term and long-term value zones.
Instead of using a single VWAP line, this tool creates four rolling VWAP envelopes:
Short-term range (fast reaction)
Mid-term range
Mid-mid range (transitional layer)
Long-term range (macro context)
Each band is computed as:
VWAP-High = SMA(high × volume, length) ÷ SMA(volume, length)
VWAP-Low = SMA(low × volume, length) ÷ SMA(volume, length)
This produces dynamic price channels that account for both price and traded volume, offering a clearer sense of where the market is accepting or rejecting value.
What It Shows
Four VWAP-weighted high/low bands
A short-term VWAP midline
Price line
Three SMAs for trend context
Optional visibility switches for each VWAP band
The filled regions between VWAP highs and lows create a layered “value map,” helping you interpret:
Trend continuation (price hugging outer VWAP bands)
Mean reversion (price returning toward inner bands)
Volatility contraction/expansion
Shifts in short-term vs long-term balance
🧠 How to Use
Use the short-term band for day-trading context or detecting short-term excess.
Use mid-term and mid-mid bands to confirm developing structure.
Use the long-term VWAP band to understand broader value zones.
Combine VWAP bands with SMAs and structure analysis for confluence.
This indicator is intended for price interpretation and analytical support.
✔ Does Not Repaint
The script uses rolling VWAP formulas and standard MAs; everything is stable and non-repainting.
ICT Fair Value Gap Detector [Eˣ]⚡ Fair Value Gap Detector
Overview
The Fair Value Gap Detector automatically identifies price imbalances on your charts - the inefficiencies left behind when price moves too quickly. This indicator reveals where price is likely to return for "rebalancing", based on ICT (Inner Circle Trader) concepts of market efficiency.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 What This Indicator Does
Detects Fair Value Gaps:
• 🟢 Bullish FVG - Gap left below during aggressive upward move
• 🔴 Bearish FVG - Gap left above during aggressive downward move
• Automatically identifies 3-candle price inefficiencies
• Works on all timeframes and instruments
Smart Fill Tracking:
• Full Fill - Price completely fills the gap
• 50% Fill - Price fills half the gap (critical level)
• Partial Fill - Price touches gap edge
• Real-time fill percentage tracking
• Auto-removes filled gaps (optional)
Professional Features:
• Active Gap Highlighting - Shows nearest unfilled gap
• Distance Calculator - Displays how far price is from gaps
• Market Bias - Analysis based on gap balance
• Size Filtering - Minimum gap size to avoid noise
• Visual Clarity - Clean boxes with color-coding
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 Understanding Fair Value Gaps
What Are Fair Value Gaps?
Fair Value Gaps (FVGs), also known as imbalances or inefficiencies, are zones where price moved so quickly that normal trading didn't occur. They represent:
• Price Imbalance - One-sided aggressive buying or selling
• Unfair Pricing - Some participants didn't get to trade at these levels
• Market Inefficiency - Supply/demand equilibrium was disrupted
• Rebalancing Zones - Price often returns to "fill" these gaps
The ICT Concept:
Markets constantly seek equilibrium (fair value). When price moves too fast:
1. It leaves gaps where normal trading didn't happen
2. These gaps represent unfair/inefficient pricing
3. Market has a tendency to return and "rebalance"
4. Smart money knows this and trades the fills
Why FVGs Work:
• Unfilled Orders - Traders who missed the move have pending orders in the gap
• Algorithmic Trading - Algos programmed to exploit inefficiencies
• Market Psychology - Traders notice gaps and place orders there
• Institutional Behavior - Smart money uses gaps for entries/exits
FVG vs Regular Gaps:
• Regular Gaps - Occur at market open, between daily closes
• Fair Value Gaps - Occur intraday, between 3 consecutive candles
• FVGs happen more frequently and on all timeframes
• FVGs are more tradeable for intraday/swing traders
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 Bullish Fair Value Gaps Explained
How They Form:
Bullish FVG requires 3 candles:
1. Candle 1 - Any candle (sets the high reference)
2. Candle 2 - Strong bullish candle (aggressive buying)
3. Candle 3 - Continuation candle
The Gap: Candle 3's LOW is above Candle 1's HIGH = Gap left unfilled
Visual Example:
```
Candle 3: Low at $105 ──────────┐
│ ← GAP (Bullish FVG)
Candle 2: Strong bullish │
│
Candle 1: High at $100 ──────────┘
```
What It Means:
• Price jumped from $100 to $105+ so fast, no trading occurred in between
• This $100-$105 zone is "unfair" - buyers/sellers didn't get to trade there
• Market may return to this zone to "rebalance"
• When price returns, it often acts as support
Trading Bullish FVGs:
Strategy:
• Wait for price to retrace down into the bullish FVG (green box)
• Look for rejection/bounce from the gap zone
• Enter long when price respects the FVG as support
• Stop loss: Below the FVG
• Target: Previous high or opposite FVG
Best Entry Points:
• 50% Fill: Price enters middle of gap (highest probability)
• Full Fill: Price touches bottom of gap (aggressive entry)
• Tap & Reject: Price quickly enters and exits gap (strong signal)
Example Trade:
• Bullish FVG forms: $50,000 - $50,500 (500 point gap)
• Price rallies to $52,000 then retraces
• Price drops to $50,250 (50% of gap filled)
• Bullish reversal candle appears
• Enter long at $50,500, stop at $49,800
• Target: $52,000+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 Bearish Fair Value Gaps Explained
How They Form:
Bearish FVG requires 3 candles:
1. Candle 1 - Any candle (sets the low reference)
2. Candle 2 - Strong bearish candle (aggressive selling)
3. Candle 3 - Continuation candle
The Gap: Candle 3's HIGH is below Candle 1's LOW = Gap left unfilled
Visual Example:
```
Candle 1: Low at $100 ───────────┐
│ ← GAP (Bearish FVG)
Candle 2: Strong bearish │
│
Candle 3: High at $95 ───────────┘
```
What It Means:
• Price dropped from $100 to $95 so fast, no trading occurred in between
• This $95-$100 zone is "unfair" - buyers/sellers didn't get to trade there
• Market may return to this zone to "rebalance"
• When price returns, it often acts as resistance
Trading Bearish FVGs:
Strategy:
• Wait for price to retrace up into the bearish FVG (red box)
• Look for rejection/reversal from the gap zone
• Enter short when price respects the FVG as resistance
• Stop loss: Above the FVG
• Target: Previous low or opposite FVG
Best Entry Points:
• 50% Fill: Price enters middle of gap (highest probability)
• Full Fill: Price touches top of gap (aggressive entry)
• Tap & Reject: Price quickly enters and exits gap (strong signal)
Example Trade:
• Bearish FVG forms: $48,000 - $48,500 (500 point gap)
• Price drops to $46,000 then retraces
• Price rallies to $48,250 (50% of gap filled)
• Bearish reversal candle appears
• Enter short at $48,000, stop at $48,700
• Target: $46,000-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 How To Use This Indicator
Strategy 1: FVG Rebalancing (Classic)
Best For: Swing trading, reversal trading
Timeframes: 15min, 1H, 4H
Win Rate: 65-75%
Entry Rules:
1. Identify unfilled FVG (bright color, not gray)
2. Wait for price to return to the gap
3. Best entry: 50% fill of the gap
4. Look for reversal confirmation:
• Bullish FVG: Pin bar, engulfing, hammer
• Bearish FVG: Shooting star, bearish engulfing
5. Enter when price bounces/rejects from FVG
6. Stop: Beyond opposite side of FVG
7. Target: 2-3R or previous high/low
Why It Works: 70%+ of FVGs get filled, and 60%+ show reaction
Strategy 2: FVG + Order Block Confluence
Best For: High-probability setups
Timeframes: 1H, 4H
Win Rate: 75-85%
Entry Rules:
1. Find FVG that overlaps with Order Block
2. This creates a "super zone" of confluence
3. Wait for price to return to this zone
4. Enter on first touch of confluence zone
5. Stop: Beyond the confluence zone
6. Target: 3-4R
Why It Works: Double institutional concepts = highest probability
Strategy 3: Multi-Timeframe FVG
Best For: Position trading, major moves
Timeframes: Combine Daily + 4H or 4H + 1H
Win Rate: 70-80%
Entry Rules:
1. Identify large FVG on higher timeframe (Daily/4H)
2. Wait for price to enter this HTF FVG
3. Switch to lower timeframe (4H/1H)
4. Look for LTF FVG within HTF FVG in same direction
5. Trade the LTF FVG fill
6. Stop: Below LTF FVG
7. Target: Exit HTF FVG or beyond
Why It Works: Timeframe alignment = institutional consensus
Strategy 4: FVG Rejection Trade
Best For: Quick scalps, day trading
Timeframes: 5min, 15min
Win Rate: 60-70%
Entry Rules:
1. Price enters FVG zone
2. Immediate rejection (strong reversal candle)
3. Enter on close of rejection candle
4. Tight stop beyond FVG
5. Quick target: 1-2R
Why It Works: Strong rejection = institutional defense of level
Strategy 5: FVG-to-FVG Trading
Best For: Momentum trading
Timeframes: 15min, 1H
Win Rate: 55-65%
Entry Rules:
1. Identify bullish FVG below and bearish FVG above
2. Enter long at bullish FVG, target bearish FVG
3. Or enter short at bearish FVG, target bullish FVG
4. Price often moves from one imbalance to another
5. Stop: Beyond trading FVG
6. Target: Opposite FVG
Why It Works: Price rebalances from one inefficiency to another
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ Settings Explained
Display Settings
Show Bullish/Bearish FVG
• Toggle each type on/off independently
• Customize colors for each FVG type
• Default: Green (bullish), Red (bearish)
• Tip: Use colors that contrast with your chart
Max FVG to Display (Default: 20)
• Limits how many gaps are shown at once
• Lower (10-15): Cleaner chart, recent gaps only
• Higher (30-50): More historical context
• Recommended: 15-25 for most trading
Show FVG Labels (Default: ON)
• Displays "FVG+" and "FVG-" text on gaps
• Shows 🎯 on active (nearest) gap
• Shows fill percentage (e.g., "FVG+ 35%")
• Turn OFF for minimal appearance
• Recommended: Keep ON for clarity
Extend Gaps (bars) (Default: 50)
• How far to extend gap boxes to the right
• Lower (20-30): Shorter boxes
• Higher (100+): Longer boxes, easier to see
• Gaps auto-extend until filled or limit reached
• Recommended: 40-60 bars
Filters
Min Gap Size % (Default: 0.05)
• Minimum gap size as percentage of price
• Filters out tiny, insignificant gaps
• Crypto: 0.05-0.15% (high volatility)
• Forex: 0.03-0.10% (moderate volatility)
• Stocks: 0.05-0.20% (varies by stock)
• Indices: 0.05-0.15%
• Adjust based on instrument's average move
Show Filled Gaps (Default: OFF)
• When ON: Shows gray boxes for filled gaps
• When OFF: Gaps disappear after mitigation
• Use ON: For learning and backtesting
• Use OFF: For clean, active trading view
Advanced Settings
Auto-Detect Mitigation (Default: ON)
• Automatically tracks when gaps are filled
• Updates fill percentage in real-time
• Marks gaps as "mitigated" when filled
• Recommended: Keep ON
Mitigation Type (Default: Full)
• Full: Gap considered filled when price closes through entire gap
• 50%: Gap considered filled at 50% (critical level)
• Partial: Gap considered filled on first touch
• For learning: Use "Full"
• For aggressive trading: Use "50%"
• For conservative trading: Use "Partial"
Highlight Nearest Gap (Default: ON)
• Highlights the closest unfilled gap to current price
• Active gap shown with 🎯 emoji and brighter color
• Helps focus on most relevant opportunity
• Recommended: Keep ON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📱 Info Panel Guide
Bullish FVG Count
• Number of active (unfilled) bullish fair value gaps
• Higher number = More potential support zones below
• Multiple bullish FVGs = Strong rebalancing demand
Bearish FVG Count
• Number of active (unfilled) bearish fair value gaps
• Higher number = More potential resistance zones above
• Multiple bearish FVGs = Strong rebalancing supply
Bias Indicator
• ⬆ Bullish: More bullish FVGs than bearish
• ⬇ Bearish: More bearish FVGs than bullish
• ↔ Neutral: Equal FVGs on both sides
• Market tends to fill nearby gaps first
Target Indicator
• Shows nearest unfilled gap and distance
• Example: "Bull FVG -1.25%" = Bullish gap is 1.25% below price
• Example: "Bear FVG +0.85%" = Bearish gap is 0.85% above price
• Watch for price to reach these targets
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📱 Alert Setup
This indicator includes 4 alert types:
1. Price Entering Bullish FVG
• Fires when price drops into a bullish gap
• Action: Watch for bounce/reversal
• High-probability long setup developing
2. Price Entering Bearish FVG
• Fires when price rallies into a bearish gap
• Action: Watch for rejection/reversal
• High-probability short setup developing
3. New Bullish FVG Detected
• Fires when a new bullish gap forms
• Action: Mark zone for future fill
• New rebalancing target below identified
4. New Bearish FVG Detected
• Fires when a new bearish gap forms
• Action: Mark zone for future fill
• New rebalancing target above identified
To Set Up Alerts:
1. Click "Alert" button (clock icon)
2. Select "Fair Value Gap Detector"
3. Choose your alert condition
4. Configure notification method
5. Click "Create"
Pro Tip: Set "Price Entering" alerts to catch fills in real-time
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💎 Pro Tips & Best Practices
✅ DO:
• Wait for 50% fill - Middle of gap has highest win rate (65-70%)
• Use confirmation - Don't trade just because price touched gap
• Combine with structure - FVG + support/resistance = high probability
• Trade first fill - Unfilled gaps have better success rate than refilled
• Respect full fills - Once fully filled, gap is less reliable
• Use multiple timeframes - HTF FVGs are stronger than LTF
• Check session timing - FVGs work best during London/NY sessions
• Follow the bias - More bullish FVGs = favor longs
⚠️ DON'T:
• Don't blindly fade gaps - Wait for price action confirmation
• Don't ignore momentum - Strong trends can blow through FVGs
• Don't trade every gap - Quality over quantity
• Don't assume all gaps fill - About 70-80% fill, 20-30% don't
• Don't use tight stops - Allow room for wick into gap
• Don't overtrade - Wait for confluence and confirmation
• Don't fight trends - Best FVG trades are with higher TF trend
• Don't ignore fill percentage - 50% is often the sweet spot
🎯 Best Timeframes:
• Scalpers: 1min, 5min (many gaps, quick fills)
• Day Traders: 5min, 15min, 1H (balanced)
• Swing Traders: 1H, 4H, Daily (larger, more reliable gaps)
• Position Traders: 4H, Daily, Weekly (major imbalances)
🔥 Best Instruments:
• Excellent: BTC, ETH, ES, NQ, Forex majors (clean price action)
• Good: Gold, Oil, Major indices, Large-cap stocks
• Moderate: Altcoins, small-cap stocks (more noise)
• Best Markets: Trending markets with clear swings
⏰ Best Times for FVG Trading:
• London Session: High volume = reliable gap fills
• NY Session: Strong moves create quality gaps
• London-NY Overlap: Best time for gap creation and fills
• Asian Session: Lower probability, wait for London
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎓 Advanced FVG Concepts
FVG Mitigation Levels
Understanding fill percentages:
• 0-25% Fill: Gap barely touched, often continues without fill
• 25-50% Fill: Partial rebalancing, may reverse here
• 50% Fill: CRITICAL LEVEL - Highest probability reversal zone
• 50-75% Fill: Deep rebalancing, strong reversal likely
• 75-100% Fill: Full rebalancing, gap's purpose fulfilled
Why 50% Matters: Market seeks equilibrium, and 50% represents perfect balance
FVG Inversions
When price breaks through a gap completely:
• Bullish FVG that's broken becomes bearish (support → resistance)
• Bearish FVG that's broken becomes bullish (resistance → support)
• Inverted gaps are weaker than fresh gaps
• Trading: Can fade the inverted gap but with caution
FVG Confluence Zones
Multiple FVGs at similar level:
• Creates "super gap" or confluence zone
• Much higher probability of reaction
• Wider zone for entries (more room for stops)
• Often aligns with other institutional concepts
FVG + Order Block Combo
When FVG overlaps with Order Block:
• Double institutional concept
• Extremely high probability setup (75-85% win rate)
• Price drawn to fill gap AND test order block
• Use tight stops, generous targets (3-5R possible)
Nested FVGs (Multi-Timeframe)
Small FVG inside larger FVG:
• Daily FVG contains 4H FVG contains 1H FVG
• Trade the smallest FVG in direction of larger ones
• Highest probability when all aligned
• Progressive targets: Fill small → medium → large gaps
FVG Exhaustion
When price creates multiple FVGs in same direction:
• Indicates strong momentum/impulsive move
• Each gap represents acceleration
• Last gap often signals exhaustion
• Watch for reversal after filling final gap
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 Common FVG Patterns
Pattern 1: The Perfect Rebalance
• FVG forms during strong move
• Price continues 100+ pips
• Clean return to 50% of gap
• Immediate reversal
• Textbook setup, 70%+ win rate
Pattern 2: The Double Fill
• Price partially fills gap (25%)
• Weak reaction, continues
• Returns again for deeper fill (75%)
• Strong reversal on second fill
• Second fill often better entry
Pattern 3: The Blow-Through
• Price approaches gap
• Completely ignores it, no reaction
• Keeps going in same direction
• Sign of very strong momentum
Pattern 4: The Magnet Effect
• Price slowly grinds toward gap
• Accelerates as it gets close
• Quickly fills and reverses
• Common in ranging markets
Pattern 5: The False Fill
• Price wicks into gap briefly
• Immediately reverses without filling
• "Stop hunt" or liquidity grab
• Gap remains unfilled
• Often precedes strong move
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 What Makes This Different?
Unlike basic gap indicators, Fair Value Gap Detector:
• ICT Methodology - Based on proven institutional concepts
• Real-Time Fill Tracking - Shows percentage filled as it happens
• 3 Mitigation Types - Full, 50%, Partial for different strategies
• Active Gap Highlighting - Shows most relevant opportunity
• Smart Filtering - Minimum size to avoid noise
• Visual Clarity - Clean, professional appearance
• Auto-Management - Removes filled gaps automatically
• Distance Tracking - Know exactly where price needs to go
Based On Professional Concepts:
• ICT Fair Value Gap theory
• Market efficiency principles
• Price rebalancing dynamics
• Institutional order flow analysis
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 FVG Statistics & Probabilities
Based on ICT concepts and trader observations:
Gap Fill Rates:
• 70-80% of FVGs get filled eventually
• 60-70% show some reaction when filled
• 50% fill level has ~65% reversal rate
• Full fills have ~55% reversal rate
Timeframe Reliability:
• Daily FVGs: ~75-85% fill rate, strongest reactions
• 4H FVGs: ~70-80% fill rate, strong reactions
• 1H FVGs: ~65-75% fill rate, good reactions
• 15min FVGs: ~60-70% fill rate, moderate reactions
• 5min FVGs: ~55-65% fill rate, weaker reactions
Best Practices:
• First touch of gap = 65-70% win rate
• 50% fill = 65% win rate
• FVG + Order Block = 75-85% win rate
• Multi-timeframe aligned FVG = 70-80% win rate
• FVG in trending market = 60-70% win rate
Common Failures:
• Strong momentum blows through gaps (20-30% of time)
• Gaps in low-volume periods less reliable
• Very small gaps (<0.05%) often ignored
• Counter-trend gaps have lower success rate
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🙏 If You Find This Helpful
• ⭐ Leave your feedback
• 💬 Share your experience in the comments
• 🔔 Follow for updates and new tools
Questions about Fair Value Gaps? Feel free to ask in the comments.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Version History
• v1.0 - Initial release with 3-candle FVG detection and real-time fill tracking
Quicksilver Master Terminal [Institutional]Overview
The Quicksilver Master Terminal is a comprehensive data visualization interface designed to bring institutional-grade market awareness to the retail chart. It replaces the need for multiple cluttered indicators by consolidating Trend, Momentum, Volatility, and Structure into a single Heads-Up Display (HUD).
Designed by Quicksilver Algo Systems, this tool is engineered for precision scalpers and prop firm traders who require instant situational awareness without switching timeframes.
Features
1. The Institutional HUD (Heads-Up Display)
Located in the top-right corner, this live dashboard provides real-time metrics on:
Market Structure: Instantly identifies if the asset is in a Bullish or Bearish regime relative to the 200 EMA.
Momentum Status: Tracks overbought/oversold conditions using smoothed Stochastic logic.
Volatility (ATR): Displays live Average True Range data for precise Stop Loss placement.
Volume Flow: Detects institutional volume spikes (1.5x average).
2. The Trend Cloud
A dynamic visual ribbon that fills the space between the Fast EMA (50) and Slow EMA (200).
Green Cloud: Strong Bullish Trend (Look for Longs).
Red Cloud: Strong Bearish Trend (Look for Shorts).
Cross: Visual warning of trend reversals.
3. Sniper Signal Logic
The script paints "INSTITUTIONAL BUY" and "INSTITUTIONAL SELL" labels only when high-probability confluence occurs:
Exhaustion: Stochastic RSI breaches extreme levels (<20 or >80).
Confirmation: Price action aligns with Heikin Ashi smoothing to filter noise.
Momentum: Fast %K crosses Slow %D.
How to Use
For Scalping (1m - 5m): Wait for the Trend Cloud to align with the Signal. Take "BUY" signals only when the Cloud is Green.
For Risk Management: Use the live "Volatility" number in the HUD to set your Stop Loss (e.g., 1.5x the current Volatility value).
About the Developer
This script is part of the Quicksilver Ecosystem. We build algorithmic solutions focused on capital preservation and risk management for funded traders.
Disclaimer: This tool is for educational market analysis only. Past performance is not indicative of future results.
FRPC - Fractal Reversal Permission ComponentThis tool identifies high-probability reversal points using a three-stage confirmation model:
1️⃣ Liquidity Sweep (LS)
Price must take out a previous fractal high/low, indicating stop-hunt liquidity removal.
2️⃣ Reclaim (RC)
After sweeping liquidity, price must close back inside the previous swing, showing absorption and rejection.
3️⃣ Break of Structure (BOS)
A structural break confirms a true shift in market direction and avoids false reversal signals.
FRPC only triggers BUY or SELL signals when all three layers align, creating actionable reversal conditions rather than random fractal noise.
This approach helps avoid chasing breakouts, filters low-quality sweeps, and identifies areas where reversals are statistically more likely.
------------------------------------
What FRRC Helps You Identify
------------------------------------
True reversals after stop-hunts
Liquidity grabs followed by displacement
Avoiding fake breakouts
Swing points with strong reaction potential
High-probability turning points with real structure support
----------
Sidenote
----------
The accuracy of the signals range from 56% to 72% and is mainly designed to be a structural filter to be paired with a strong exhaustion system. This is just a bare bones version and I plan to work on a more advanced version yo pair with the current exhaustion systems I'm building out
DWMY OHLCShows the prior D/W/M/Y OHLC levels with precise horizontal segments that update at each new session. Great for spotting reaction zones, sweeps, and bias shifts at important levels.
Monthly and Yearly levels are toggled off by default to avoid clutter, but can of course be toggled back on in the settings
OHLC HistoryOHLC History is a Pine Script v6 overlay that snapshots up to 32 historical OHLC-derived levels from a selectable higher (or different) timeframe and projects them onto the active chart. It uses request.security to fetch the chosen source (Close/High/Low/Open), rounds each value to the instrument’s minimum tick, and stores them in an array. A “Max Number Lookback” input limits how many of those levels are rendered. For each retained level the script draws a horizontal line extended both ways, coloring it dynamically based on whether the level is above (customizable “above” color) or below (customizable “below” color) the current price, and places compact labels (01–32) with optional price text offset by a user-defined label distance. Prior bar artifacts (lines and labels) are explicitly deleted each update to keep the chart clean, while small white plot markers ensure the levels appear in the price scale and data window for quick reference.
Rolling Volume Profile [Matrix Volume Heatmap] by NXT2017Description
This indicator offers a unique visual approach to Volume Profile analysis. Instead of the traditional histogram bars or boxes, this script renders a Rolling Volume Profile as a background "Matrix Heatmap" directly on your chart.
By dividing the price action of the most recent N-candles into 30 horizontal zones (buckets), it visualizes where the most trading activity has occurred within your defined lookback period. The visualization uses dynamic transparency to highlight the Point of Control (POC) and high-volume nodes, while fading out low-volume areas.
🧠 How it Works
The script operates on a "Rolling Window" basis, meaning it recalculates the profile at every bar to reflect the immediate market context.
Dynamic Range: It calculates the highest High and lowest Low of the user-defined Lookback Length (default: 1000 bars).
Bucket Slicing: This vertical range is divided into 30 equal price buckets.
Volume Distribution (Overlap Logic): The script iterates through the historical data. If a candle is large and spans multiple buckets, its volume is distributed proportionally across those buckets. This ensures a more realistic profile compared to simply assigning volume to the close price.
Heatmap Visualization:
The script calculates the Maximum Volume (POC) within the profile.
It uses a Reference Length to normalize this maximum.
Dynamic Opacity: Zones with volume close to the maximum are rendered opaque (solid). Zones with low relative volume become highly transparent. This creates an automatic "Heatmap" effect, allowing you to instantly spot the most significant price levels.
⚙️ Settings
Lookback Length (candles): Defines how far back the profile calculates volume (e.g., 1000 bars).
POC Reference Length: Defines the smoothing window for the 100% volume baseline. Increasing this stabilizes the color changes; decreasing it makes the heatmap more reactive to sudden volume spikes.
Profil Color: Choose the base color for the matrix. The transparency is calculated automatically.
💡 Use Case
This tool is ideal for traders who want to see the "Value Area" of the current range without cluttering the chart with complex boxes or side-bars. It works excellent as a background context tool to identify:
High Volume Nodes (Support/Resistance)
Low Volume Nodes (Price gaps/Rejection areas)
Migrating Points of Control (Trend direction)
PRICE ACTION TRAKKERThis indicator isolates the core price-phase engine from the full Price Action Tracker (PAT) system.
It identifies and visualises structural phases of price, including:
Upper phase boundary (dynamic resistance)
Lower phase boundary (dynamic support)
Phase average (mean-reversion anchor)
Pivot markers (LPH, LPL, oLPH, oLPL)
The phase engine dynamically adapts to evolving market structure using pivot behaviour and structural breaks. This creates a real-time visual map of how price is organising itself — independent of time-based indicators and without the lag associated with classical moving averages.
This version focuses exclusively on price action structure, making it clean, fast, and ideal as a core tool on its own.
However, it is also designed as a foundation for more advanced analysis and will expand over time as additional modules are released.
This phase engine works exceptionally well in combination with my other indicators, such as moving-average structure tools, volume-weighted frameworks, and trend-strength models. Together, they provide a layered view of market behaviour:
phase structure → trend bias → volume confirmation → entry logic.
This makes the indicator valuable for:
Intra-day and swing traders
Wyckoff and liquidity-based traders
Mean-reversion and range-trading strategies
Understanding where accumulation/distribution behaviour is forming
Identifying when a phase is likely ending or breaking
Future updates will add modular expansion paths (trend scoring, VWAP phase weighting, multi-phase confluence, and signal logic), while maintaining the simplicity and reliability of this core engine.
Works Best With:
This indicator is part of a broader toolkit designed to analyse structure, trend, and behaviour.
When used alongside my other published tools — such as trend-strength MAs, VWMA frameworks, and higher-timeframe bias indicators — it provides a complete, multi-layered view of market conditions.
Imbalance Heatmap (Free) – pc75A clean, efficient visualisation of liquidity voids, 3-bar imbalances, and price inefficiency zones.
This indicator highlights where the market left gaps in the order flow — areas price often revisits to rebalance.
Imbalances are displayed as stacked horizontal “heatmap strips,” making it easy to see:
Where aggressive buying/selling left a void
Whether multiple voids overlap (stronger zones)
Whether price is likely to return to fill the imbalance
How old a void is (older zones are marked differently)
This is a refined v6 rewrite based on a script I liked, completely modernised with cleaner logic, better performance, and optional labels.
🔍 Features
3-bar liquidity void detection (ICT-style logic)
Bullish imbalance when price displaces upward with no wick overlap
Bearish imbalance for downward displacement
✔ Heatmap-style visualisation
Each imbalance is sliced into multiple thin horizontal bands to create a visual density effect.
✔ Stacking intelligence
If a new void overlaps previous ones, the heatmap is drawn brighter, showing areas where the market left multiple inefficiencies.
✔ “Void xN” labels
Optional labels show how many overlapping voids existed at the moment the imbalance formed.
✔ Automatic deletion when filled
As soon as price trades back through a slice, that slice is removed.
This keeps the chart clean and focuses only on active inefficiencies.
✔ Smart ageing
Older voids are marked with a subtle border so you can distinguish freshly formed inefficiencies from historical ones.
✔ Alerts
Set alerts for when price taps a stacked imbalance zone (“Void x2” and above).
⚙ Inputs & Customisation
ATR threshold (optional)
Minimum tick size gap
Number of heatmap slices
Bullish / bearish toggles
Label toggles
Colour and transparency configuration
Max slice memory for performance
💡 How to Use
Imbalance zones often behave as:
Magnets → price gravitates toward them
Support/resistance → structure respects inefficiencies
Continuity points → used with market structure shifts
Targets → for both scalpers and swing traders
Strong (stacked) voids typically represent areas of institutional displacement, where the market is more likely to return for rebalancing.
📢 Notes
This is the free version.
Educational only — not financial advice.
Institutional Trend & Liquidity Nexus [Pro]Concept & Methodology
The core philosophy of this script is "Confluence Filtering." It does not simply overlay indicators; it forces them to work together. A signal is only valid if it aligns with the macro trend and liquidity structure.
Key Components:
Trend Engine: Uses a combination of EMA (7/21) for fast entries and SMA (200) for macro trend direction. The script includes a logical filter that invalidates Buy signals below the SMA 200 to prevent counter-trend trading.
Liquidity Imbalance (FVG): Automatically detects Fair Value Gaps to identify areas where price is likely to react. Unlike standalone FVG scripts, this module is visually optimized to show support/resistance zones without obscuring price action.
Smart Confluence Zones (Originality):
The script calculates a background "State" based on multiple factors.
Bullish Zone (Green Background): Triggers ONLY when Price > SMA 200 AND RSI > 50 AND Price > Baseline EMA.
Bearish Zone (Red Background): Triggers ONLY when Price < SMA 200 AND RSI < 50 AND Price < Baseline EMA.
This visual aid helps traders stay out of choppy markets and only focus when momentum and trend are aligned.
█ How to Use
Entry: Wait for a "Triangle" signal (Buy/Sell).
Validation: Check the Background Color. Is it highlighting a Confluence Zone?
Example: A Buy Signal inside a Green Confluence Zone is a high-probability setup.
Example: A Buy Signal with no background color suggests weak momentum and should be taken with caution.
Targets: Use the plotted FVG boxes as potential take-profit targets or re-entry zones.
Vassago & Tesla Ex-Machina 197 45 21 [Hakan Yorganci]Vassago & Tesla Ex-Machina 197 45 21
"Any sufficiently advanced technology is indistinguishable from magic." — Arthur C. Clarke
🌑 The Genesis: Algorithmic Esotericism
This script is not merely a technical indicator; it is a digital artifact born from the convergence of Software Engineering and Hermetic Tradition.
As a developer and researcher dedicated to "Technomancy"—the study of applying esoteric logic to computational systems—I designed this algorithm using a custom, experimental programming environment I am currently developing. My goal was to move beyond standard, arbitrary financial inputs (like the default 200 SMA or 14 RSI) and instead derive parameters based on Universal Harmonics and Historical Archetypes.
This indicator, Ex-Machina, is the result of that transmutation. It applies ancient numeric precision to modern market chaos.
🔢 Decoding the Protocol: 197 - 45 - 21
Why these specific numbers? They were not chosen randomly; they were calculated through specific harmonic reductions to filter out market noise.
1. The Harmonic Trend (Tesla Protocol)
* The Logic: Standard analysis uses the 200-period Moving Average simply out of habit. However, applying Nikola Tesla’s 3-6-9 vibrational principles, the engine reduced the period to 197.
* The Numerology: 1+9+7 = 17 \rightarrow 1+7 = \mathbf{8}. In esoteric numerology, 8 represents infinite power, authority, and financial flow. This creates a baseline that aligns more organically with market accumulation than the static 200.
2. The Hidden Dip (Solomonic Sight)
* The Archetype: Based on the attributes of Vassago, the archetype of discovering "hidden things," the algorithm identified 45 as the precise threshold for a "Sniper Entry."
* The Function: Unlike the standard 30 RSI, this level identifies the exact moment a correction matures within a bullish trend—catching the dip before the crowd returns.
3. The Prophetic Vision
* The Logic: Using the Fibonacci Sequence, the indicator projects the support line 21 bars into the future.
* The Utility: This allows you to visualize where the support will be, granting you foresight before price action arrives.
⚖️ The Dual Mode Engine: Sealed vs. Living
Respecting the user's will, I have engineered this script as a Hybrid System. You can choose how the "spirit" of the code interacts with the market via the settings menu.
1. The Sealed Ritual (Default - Unchecked)
* Philosophy: "Trust in the Constants."
* Behavior: Strictly adheres to the 197 SMA and 45 RSI.
* Visual: Displays a Blue Trend Line.
* Best For: Traders who value stability, long-term trends, and the unyielding nature of harmonic mathematics.
2. The Living Spirit (Adaptive Mode - Checked)
* Philosophy: "As the market breathes, so does the code."
* Behavior:
* Transmutation: The trend line shifts from a Simple Moving Average (SMA) to an Exponential Moving Average (EMA 197) for faster reaction.
* Adaptive Volatility: The RSI entry level (45) becomes dynamic. It expands and contracts based on ATR (Average True Range). In high volatility, it demands a deeper dip to trigger a signal, protecting you from fake-outs.
* Visual: Displays a Fuchsia (Pink) Trend Line.
* Best For: Volatile markets (Crypto/Forex) and traders who want the algorithm to "sense" the fear and greed in the air.
⚙️ How to Trade
* Timeframe: Optimized for 4H (The Builder) and 1D (The Architect).
* The Signal: Wait for the "EX-MACHINA ENTRY" label. This signal manifests ONLY when:
* Price is holding above the 197 Harmonic Trend.
* Momentum crosses the Optimized Threshold (45 or Adaptive).
* Trend Strength is confirmed via ADX.
Author's Note:
I built this tool for those who understand that code is the modern spellbook. Use it wisely, risk responsibly, and let the harmonics guide your entries.
— Hakan Yorganci
Technomancer & Full Stack Developer
T-DOW-FLOW: Final Edition
T-DOW-FLOW: Market Structure & Smart Pivot Zones
This indicator is a comprehensive technical analysis tool designed to visualize "Market Structure" based on Dow Theory and precise Supply/Demand Zones. It helps traders identify the true market trend and high-probability reaction levels by analyzing raw price action (ZigZag Pivots) rather than lagging indicators.
The script integrates three core systems:
ZigZag Trend Cloud: Visualizes the market bias (Uptrend/Downtrend).
Smart Pivot Zones (Type 1): Highlights the specific "Wick-to-Body" area of recent pivots.
Auto Density Channels (Type 2): Detects historical support/resistance clusters.
1. ZigZag Trend Identification
Logic: The script utilizes ta.highestbars and ta.lowestbars to detect Swing Highs and Swing Lows.
Trend Cloud:
If the structure creates a Higher High, the background cloud turns Green (Uptrend).
If the structure creates a Lower Low, the background cloud turns Red (Downtrend).
This provides an instant visual filter for "Trend Flow," encouraging traders to trade only in the direction of the dominant market structure.
2. SR Type 1: Smart Pivot Zones (Wick-to-Body)
Unlike standard indicators that draw thin lines at the absolute High/Low, this script focuses on the "Imbalance Zone".
It calculates the price range between the Pivot's Wick and the Pivot's Body (Open/Close) and fills this area with a colored zone.
Why? The area between the wick and body often represents the precise zone where institutional orders were filled, acting as a more reliable support/resistance level than a single price point.
3. SR Type 2: Auto Density Channels
This module scans a significant amount of historical data (default: 300 bars) to find clusters of pivot points.
Areas where multiple pivots align within a specific width are drawn as Channels. These represent strong, long-term psychological levels.
Trend Filter: Check the Trend Cloud color.
Green: Look for Long opportunities.
Red: Look for Short opportunities.
Entry Trigger: Wait for the price to retrace into a Smart Pivot Zone (Type 1) or an Auto Channel (Type 2).
Look for price rejection (wicks) at these zones in the direction of the Trend Cloud.
Structure Confirmation: Use the ZigZag lines and labels (HH, HL, etc.) to confirm that the market structure is still intact before entering.
ZigZag Settings: Adjust the sensitivity of the trend detection.
SR Type 1: Toggle the "Wick-to-Body" fill and choose between Wicks or Bodies as the primary source.
SR Type 2: Adjust the historical loopback period and channel width sensitivity.
This script is for educational and technical analysis purposes only. Past performance does not guarantee future results.
(以下、日本語説明 / Japanese Description)
このインジケーターは、「ダウ理論」に基づくトレンド判定と、精密な「需給ゾーン(Supply/Demand)」を可視化するための市場構造分析ツールです。 遅行指標を使わず、純粋なプライスアクション(ZigZagピボット)に基づいて、機関投資家の意識する価格帯を特定します。
1. ZigZagトレンドクラウド
ロジック: 一定期間の高値・安値を検出し、ダウ理論に基づいてトレンドを判定します。
視覚化: 高値切り上げ(上昇トレンド)なら「緑」、安値切り下げ(下落トレンド)なら「赤」の背景色を表示します。これにより、トレードすべき方向(順張り)を一目で判断できます。
2. SR Type 1: スマートピボットゾーン (Wick-to-Body)
単なる水平線ではなく、ローソク足の**「ヒゲ先」から「実体」までの価格差**をゾーンとして塗りつぶして表示します。
理由: ヒゲと実体の間の領域は、大口の注文が執行された(需給の不均衡が発生した)重要なエリアであることが多く、ピンポイントのラインよりも信頼性の高い反発ゾーンとして機能します。
3. SR Type 2: オート・デンシティ・チャネル
過去の長期間(デフォルト300本)のデータをスキャンし、ピボットが密集している価格帯を自動で「チャネル」として描画します。長期的に意識される強力なレジサポ帯です。
環境認識: 背景のトレンドクラウドの色に従い、目線を固定します。
エントリー: 価格がSRゾーン(Type 1)やチャネル(Type 2)に引きつけて、反発する動きを確認してエントリーします。
構造確認: ZigZagラインとラベル(HH/HLなど)を見て、トレンドが崩れていないことを確認します。
DAILY AND WEEKLY MID LINESDAILY AND WEEKLY MID LINES INDICATOR
Description:
This indicator calculates and visualizes the dynamic midpoint (mid) of the current day and week in real-time. It provides traders with key reference levels based on developing price action.
Features:
Daily Mid Line:
Color: Orange
Thickness: 3 pixels
Style: Solid line
Updates: Automatically recalculates with each new candle
Calculation: Average of the day's highest high and lowest low from market open
Weekly Mid Line:
Color: Blue
Thickness: 3 pixels
Style: Dashed line
Updates: Continuously recalculates throughout the week
Calculation: Average of the week's highest high and lowest low from week start
How It Works:
At the start of each new trading day (00:00), the daily mid line resets and begins calculating from the first candle
At the start of each new trading week (typically Monday), the weekly mid line resets and begins fresh calculations
Both lines extend automatically to the right as new candles form
The lines are dynamic - they adjust as new highs/lows are made during the day/week
Trading Applications:
Support/Resistance Levels:
The mid lines act as natural equilibrium points where price may find temporary support or resistance
Daily mid can serve as intraday pivot, weekly mid as broader market balance point
Trend Analysis:
Price consistently above mid lines suggests bullish momentum
Price consistently below mid lines suggests bearish momentum
Relationship between daily and weekly mid lines shows multi-timeframe alignment
Entry/Exit Signals:
Price crossing above daily mid may indicate short-term bullish momentum
Price crossing below daily mid may indicate short-term bearish momentum
Weekly mid breaks can signal more significant trend changes
Market Context:
Distance between price and mid lines indicates market extremity
Steeper mid line slopes suggest stronger directional momentum
Flat mid lines suggest range-bound or consolidating markets
Confluence Trading:
Combine with other indicators (RSI, MACD, moving averages) for confirmation
Use as dynamic levels for stop-loss placement or take-profit targets
Best Practices:
More effective on higher timeframes (1H, 4H, Daily) for clearer signals
Works well in trending markets where mid lines act as moving support/resistance
Monitor for price rejection or acceptance at mid levels for trading decisions
Use in conjunction with volume analysis for confirmation
Psychological Significance:
Mid points often represent fair value areas where buyers and sellers find temporary equilibrium, making them natural decision points for market participants.
This indicator is particularly useful for day traders, swing traders, and position traders looking for dynamic, real-time reference points that adapt to current market conditions rather than relying on static historical levels.
FVG Supply and DemandThis indicator combines powerful tools into one:
• Supply & Demand Zones built from swing highs/lows with ATR-based zone width, POI markers, and Break-of-Structure (BOS) detection.
• Volumized Fair Value Gaps (FVGs) showing bullish/bearish gaps, total volume inside the gap, volume distribution, optional zone-combining, and auto-cleanup.
• Swing TSL Line and manage bar color.
It helps visualize key imbalance areas, institutional zones, and price reaction points.
Credits to the Author.
⚠️ Disclaimer
This indicator is provided for educational and analytical purposes only.
It does not provide trading advice.
Past results do not guarantee future outcomes.
Use responsibly and in conjunction with your market analysis.
Liquidation Heatmap [Alpha Extract]A sophisticated liquidity zone visualization system that identifies and maps potential liquidation levels based on swing point analysis with volume-weighted intensity measurement and gradient heatmap coloring. Utilizing pivot-based pocket detection and ATR-scaled zone heights, this indicator delivers institutional-grade liquidity mapping with dynamic color intensity reflecting relative liquidity concentration. The system's dual-swing detection architecture combined with configurable weight metrics creates comprehensive liquidation level identification suitable for strategic position planning and market structure analysis.
🔶 Advanced Pivot-Based Pocket Detection
Implements dual swing width analysis to identify potential liquidation zones at pivot highs and lows with configurable lookback periods for comprehensive level coverage. The system detects primary swing points using main pivot width and optional secondary swing detection for increased pocket density, creating layered liquidity maps that capture both major and minor liquidation levels across extended price history.
🔶 Multi-Metric Weight Calculation Engine
Features flexible weight source selection including Volume, Range (high-low spread), and Volume × Range composite metrics for liquidity intensity measurement. The system calculates pocket weights based on market activity at pivot formation, enabling traders to identify which liquidation levels represent higher concentration of potential stops and liquidations with configurable minimum weight thresholds for noise filtering.
🔶 ATR-Based Zone Height Framework
Utilizes Average True Range calculations with percentage-based multipliers to determine pocket vertical dimensions that adapt to market volatility conditions. The system creates ATR-scaled bands above swing highs for short liquidation zones and below swing lows for long liquidation zones, ensuring zone heights remain proportional to current market volatility for accurate level representation.
🔶 Dynamic Gradient Heatmap Visualization
Implements sophisticated color gradient system that maps pocket weights to intensity scales, creating intuitive visual representation of relative liquidity concentration. The system applies power-law transformation with configurable contrast adjustment to enhance differentiation between weak and strong liquidity pockets, using cyan-to-blue gradients for long liquidations and yellow-to-orange for short liquidations.
🔶 Intelligent Pocket State Management
Features advanced pocket tracking system that monitors price interaction with liquidation zones and updates pocket states dynamically. The system detects when price trades through pocket midpoints, marking them as "hit" with optional preservation or removal, and manages pocket extension for untouched levels with configurable forward projection to maintain visibility of approaching liquidity zones.
🔶 Real-Time Liquidity Scale Display
Provides gradient legend showing min-max range of pocket weights with 24-segment color bar for instant liquidity intensity reference. The system positions the scale at chart edge with volume-formatted labels, enabling traders to quickly assess relative strength of visible liquidation pockets without numerical clutter on the main chart area.
🔶 Touched Pocket Border System
Implements visual confirmation of executed liquidations through border highlighting when price trades through pocket zones. The system applies configurable transparency to touched pocket borders with inverted slider logic (lower values fade borders, higher values emphasize them), providing clear historical record of liquidated levels while maintaining focus on active untouched pockets.
🔶 Dual-Swing Density Enhancement
Features optional secondary swing width parameter that creates additional pocket layer with tighter pivot detection for increased liquidation level density. The system runs parallel pivot detection at both primary and secondary swing widths, populating chart with comprehensive liquidity mapping that captures both major swing liquidations and intermediate level clusters.
🔶 Adaptive Pocket Extension Framework
Utilizes intelligent time-based extension that projects untouched pockets forward by configurable bar count, maintaining visibility as price approaches potential liquidation zones. The system freezes touched pocket right edges at hit timestamps while extending active pockets dynamically, creating clear distinction between historical liquidations and forward-projected active levels.
🔶 Weight-Based Label Integration
Provides floating labels on untouched pockets displaying volume-formatted weight values with dynamic positioning that follows pocket extension. The system automatically manages label lifecycle, creating labels for new pockets, updating positions as pockets extend, and removing labels when pockets are touched, ensuring clean chart presentation with relevant liquidity information.
🔶 Performance Optimization Framework
Implements efficient array management with automatic clean-up of old pockets beyond lookback period and optimized box/label deletion to maintain smooth performance. The system includes configurable maximum object counts (500 boxes, 50 labels, 100 lines) with intelligent removal of oldest elements when limits are approached, ensuring consistent operation across extended timeframes.
This indicator delivers sophisticated liquidity zone analysis through pivot-based detection and volume-weighted intensity measurement with intuitive heatmap visualization. Unlike simple support/resistance indicators, the Liquidation Heatmap combines swing point identification with market activity metrics to identify where concentrated liquidations are likely to occur, while the gradient color system instantly communicates relative liquidity strength. The system's dual-swing architecture, configurable weight metrics, ATR-adaptive zone heights, and intelligent state management make it essential for traders seeking strategic position planning around institutional liquidity levels across cryptocurrency, forex, and futures markets. The visual heatmap approach enables instant identification of high-probability reversal zones where cascading liquidations may trigger significant price reactions.
Unchased Wick Detector and ReversalsThis indicator can be used to track unchased wick from previous pivot points.
The idea is to visualise liquidity cluster and grab before a potential reversal.
Unchased wick Visual:
- White lines are protected highs or lows.
- Gray lines are previous wicks where prices have passed through and where the prices did not reverse.
Reversal window:
Reversal window parameters define a period range (a min and a max bars) where the reversal is valid.
The idea is that the reversal must be done in the couple bars right after the wick is chased (this event should stay short in time but you can adjust the period as you wish).
By default the default, the window 1-5 bars (e.g., daily, during 1-5 days).
Green color indicates a grab from a low and a reversal to the upside.
Red color indicates a grab from a high and a reversal to the downside.
Disclamer:
Of course this indicator can lead to false reversal signals and must be combined with other data and must be careful to use it alone for opening any position.
This indicator is a Alpha version let me know if any problem.
Bubbles + Clusters + SweepsIndicator For Bubbles + Clusters + Sweeps
✔ Volume bubbles
✔ Delta coloring (green/red intensity)
✔ Auto supply/demand zones
✔ Volume-profile style blocks inside zones
✔ Liquidity sweep markers
✔ Box drawings extending until filled
✔ Optional bubble filters (min-volume threshold)
SR & POI Indicator//@version=5
indicator(title='SR & POI Indicator', overlay=true, max_boxes_count=500, max_lines_count=500, max_labels_count=500)
//============================================================================
// SUPPLY/DEMAND & POI SETTINGS
//============================================================================
swing_length = input.int(10, title = 'Swing High/Low Length', group = 'Supply/Demand Settings', minval = 1, maxval = 50)
history_of_demand_to_keep = input.int(20, title = 'History To Keep', group = 'Supply/Demand Settings', minval = 5, maxval = 50)
box_width = input.float(2.5, title = 'Supply/Demand Box Width', group = 'Supply/Demand Settings', minval = 1, maxval = 10, step = 0.5)
show_price_action_labels = input.bool(false, title = 'Show Price Action Labels', group = 'Supply/Demand Visual Settings')
supply_color = input.color(color.new(#EDEDED,70), title = 'Supply', group = 'Supply/Demand Visual Settings', inline = '3')
supply_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Supply/Demand Visual Settings', inline = '3')
demand_color = input.color(color.new(#00FFFF,70), title = 'Demand', group = 'Supply/Demand Visual Settings', inline = '4')
demand_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Supply/Demand Visual Settings', inline = '4')
bos_label_color = input.color(color.white, title = 'BOS Label', group = 'Supply/Demand Visual Settings')
poi_label_color = input.color(color.white, title = 'POI Label', group = 'Supply/Demand Visual Settings')
swing_type_color = input.color(color.black, title = 'Price Action Label', group = 'Supply/Demand Visual Settings')
//============================================================================
// SR SETTINGS
//============================================================================
enableSR = input(true, "SR On/Off", group="SR Settings")
colorSup = input(#00DBFF, "Support Color", group="SR Settings")
colorRes = input(#E91E63, "Resistance Color", group="SR Settings")
strengthSR = input.int(2, "S/R Strength", 1, group="SR Settings")
lineStyle = input.string("Dotted", "Line Style", , group="SR Settings")
lineWidth = input.int(2, "S/R Line Width", 1, group="SR Settings")
useZones = input(true, "Zones On/Off", group="SR Settings")
useHLZones = input(true, "High Low Zones On/Off", group="SR Settings")
zoneWidth = input.int(2, "Zone Width %", 0, tooltip="it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR Settings")
expandSR = input(true, "Expand SR", group="SR Settings")
//============================================================================
// SUPPLY/DEMAND FUNCTIONS
//============================================================================
// Function to add new and remove last in array
f_array_add_pop(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// Function for swing H & L labels
f_sh_sl_labels(array, swing_type) =>
var string label_text = na
if swing_type == 1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HH'
else
label_text := 'LH'
label.new(bar_index - swing_length, array.get(array,0), text = label_text, style=label.style_label_down, textcolor = swing_type_color, color = color.new(swing_type_color, 100), size = size.tiny)
else if swing_type == -1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HL'
else
label_text := 'LL'
label.new(bar_index - swing_length, array.get(array,0), text = label_text, style=label.style_label_up, textcolor = swing_type_color, color = color.new(swing_type_color, 100), size = size.tiny)
// Function to check overlapping
f_check_overlapping(new_poi, box_array, atr) =>
atr_threshold = atr * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// Function to draw supply or demand zone
f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atr) =>
atr_buffer = atr * (box_width / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = f_check_overlapping(poi, box_array, atr)
if box_type == 1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(poi_label_color,90),
bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(poi_label_color,90),
bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
// Function to change supply/demand to BOS if broken
f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// Function to extend box endpoint
f_extend_box_endpoint(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 100)
//============================================================================
// SR FUNCTIONS
//============================================================================
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
//============================================================================
// SUPPLY/DEMAND CALCULATIONS
//============================================================================
atr = ta.atr(50)
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
var swing_high_values = array.new_float(5,0.00)
var swing_low_values = array.new_float(5,0.00)
var swing_high_bns = array.new_int(5,0)
var swing_low_bns = array.new_int(5,0)
var current_supply_box = array.new_box(history_of_demand_to_keep, na)
var current_demand_box = array.new_box(history_of_demand_to_keep, na)
var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
var supply_bos = array.new_box(5, na)
var demand_bos = array.new_box(5, na)
// New swing high
if not na(swing_high)
f_array_add_pop(swing_high_values, swing_high)
f_array_add_pop(swing_high_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_high_values, 1)
f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atr)
// New swing low
else if not na(swing_low)
f_array_add_pop(swing_low_values, swing_low)
f_array_add_pop(swing_low_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_low_values, -1)
f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atr)
f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
f_extend_box_endpoint(current_supply_box)
f_extend_box_endpoint(current_demand_box)
//============================================================================
// SR CALCULATIONS & PLOTTING
//============================================================================
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid : lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1 )
d1 = 0.0, d1 := nz(d1 )
highestph = 0.0, highestph := highestph
lowestpl = 0.0, lowestpl := lowestpl
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel )
label llabel = na, label.delete(llabel )
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if ph or pl
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
highestph := math.max(highestph, nz(ph , prdlowest), nz(pl , prdlowest))
lowestpl := math.min(lowestpl, nz(ph , prdhighest), nz(pl , prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (ph ? high : low ) + cwidth
dnl = (ph ? high : low ) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph )
if high <= upl and high >= dnl
tpoint += 1
chg := true
if not na(pl )
if low <= upl and low >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if ph and countpp < 21
array.set(sr_levels, countpp, high )
if pl and countpp < 21
array.set(sr_levels, countpp, low )
// Plot SR
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? colorSup : colorRes
lo_col = close >= lowestpl ? colorSup : colorRes
if enableSR
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, color.new(hi_col, 80))
linefill.new(lowest_fill1 , lowest_fill2 , color.new(lo_col, 80))
if ph or pl
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if array.get(sr_levs, x) and enableSR
line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), color.new(line_col, 80)))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if array.get(sr_levs, x) and enableSR
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
Structure Breakout - Buy Sell IndicatorStructure Breakout - Buy Sell Indicator
📈 OVERVIEW:
A minimalist indicator that identifies market structure breakouts using swing point analysis.
Displays clear blue buy arrows and red sell arrows when price breaks key swing levels.
🔧 HOW IT WORKS:
1. Identifies swing highs and lows using configurable lookback period
2. Triggers BUY signal (blue arrow) when price closes above previous swing high
3. Triggers SELL signal (red arrow) when price closes below previous swing low
4. Uses clean visual arrows without cluttering the chart
⚙️ KEY FEATURES:
• Clean, uncluttered visual signals
• Customizable sensitivity period
• Blue arrows for buy signals (below bars)
• Red arrows for sell signals (above bars)
• No lagging repainting
• Works on all timeframes
🎯 TRADING APPLICATIONS:
• Swing trading entries
• Breakout confirmation
• Trend continuation signals
• Support/resistance breaks
⚡ SETTINGS:
• Structure Detection Period (default: 20) - Adjust sensitivity of swing detection
⚠️ RISK DISCLAIMER:
This is an educational tool. Always use proper risk management.
Past performance does not guarantee future results.
Auto Reaction Zones (XAUUSD)
✅ Auto Reaction Zones (XAUUSD) OANDA:XAUUSD
Auto Reaction Zones (XAUUSD) is an advanced supply & demand mapping tool designed to detect high-probability reaction zones using price impulses, volatility filters, market structure, and adaptive confirmation logic.
This indicator automatically identifies strong bullish and bearish reaction bases formed before impulsive movements, then plots dynamic demand and supply zones that help traders anticipate future reactions, reversals, or continuation points.
🔍 Core Features
▪ Automatic Supply & Demand Zone Detection
Identifies zones based on structural breakout impulses using ATR-based thresholds, volume confirmation, and validated base levels.
▪ Adaptive Confirmation Distance (ADR-Based)
The zone becomes active/confirmed only after price moves a configurable number of points.
A unique 3-case ADR logic adjusts the required confirmation distance based on current market volatility:
Case 1: Low ADR → smaller confirmation required
Case 2: Moderate ADR → medium confirmation
Case 3: High ADR → higher confirmation (more filtering)
This ensures stronger zones in high-volatility conditions (e.g., XAUUSD).
▪ Smart Zone Management
Automatic extension until tested or consumed
Optional lifetime limits (bars or days)
Auto-delete unconfirmed zones if price violates them too early
Hide tested or consumed zones for a cleaner chart
▪ Adjustable Zone Size Filtering
Option to enforce a minimum or maximum zone size, useful for cleaning noise and ultra-small reaction levels.
▪ ADR-Based Zone Spacing Filter
Prevents the creation of zones that are too close to each other.
Different spacing rules for same-direction and opposite-direction zones.
▪ Multi-Timeframe Mode
Overlay zones detected from higher timeframes directly onto your current chart.
▪ Directional Bias (EMA Filter)
Optionally restrict long/short zones based on EMA trend alignment.
▪ Real-Time Alerts
Receive alerts when price touches any active zone or only fresh zones.
🎯 Why This Indicator Is Different
Unlike typical supply/demand indicators that print every swing,
Auto Reaction Zones focuses on:
Only strong reaction bases
Only valid impulse-generated levels
Only zones confirmed by price movement
Only zones that respect volatility and minimum spacing rules
This results in cleaner charting, fewer false zones, and far more reliable reaction levels, especially on volatile instruments like XAUUSD.
⚠️ Disclaimer
This tool is not financial advice. Always combine zone analysis with broader market context and risk management.






















