Structural Deviation Compass [JOAT]Structural Deviation Compass
Introduction
The Structural Deviation Compass is an overlay indicator designed to map where price stands relative to its own statistical history. Rather than drawing fixed-distance envelopes or relying on a single moving average, it constructs a hybrid centerline from two distinct low-lag moving average types, then wraps that centerline in volatility-adaptive bands derived from Z-score normalization. A secondary oscillator layer — applied to RSI — creates a dual-confirmation signal gate that fires only when both price deviation and momentum reach simultaneous extremes. Shadow bands built from the Average True Range provide additional spatial context across three volatility tiers.
The indicator does not predict future price. It identifies statistically unusual deviations from an estimated mean structure and flags conditions where a reversion or continuation setup may be forming, subject to confirmation from the trader's own process.
Core Concepts
The ComboMA Centerline
The foundation of the indicator is a composite moving average called the ComboMA, formed by averaging two lines:
ALMA (Arnaud Legoux Moving Average): Uses a Gaussian-weighted kernel positioned asymmetrically along the lookback window. The offset and sigma parameters control how far toward the recent end the weight mass sits and how tightly it is concentrated. This produces a smooth line that tracks price closely while suppressing noise better than a simple EMA of the same length.
ZLMA (Zero-Lag Moving Average): Constructed by doubling a base EMA and subtracting a second EMA of that EMA — a technique that estimates and removes the inherent lag of an exponential average. The result is then smoothed once more to reduce the noise amplification that zero-lag constructions can introduce.
Averaging the two produces a centerline that carries reduced lag from the ZLMA side while retaining the smooth, noise-filtered character of the ALMA side. Neither line alone fully satisfies both goals; together they produce a more balanced result.
Z-Score Price Bands
Rather than plotting bands at a fixed multiple of a standard deviation (as Bollinger Bands do using a rolling standard deviation of price itself), the SDC first computes the deviation of close from the ComboMA, then Z-score normalizes that deviation series over a separate lookback window. The bands are then placed back on the price chart by multiplying the rolling standard deviation of deviations by the chosen Z-score threshold values.
The practical effect is that the band width reflects how unusual the current deviation is relative to the recent distribution of deviations — not simply how wide price has swung in a raw sense. Two threshold levels are provided, creating an inner and outer band pair on each side of the ComboMA.
RSI Z-Score
RSI is computed in the standard way, then subjected to the same Z-score normalization: the RSI value is compared to its own rolling mean and expressed in standard deviations. This removes the fixed-level bias of RSI (where 30/70 thresholds mean different things in different market regimes) and produces a momentum reading that is self-calibrating to recent RSI behavior.
Dual Z-Score Signal Gate
A long signal requires all of the following simultaneously:
Price Z-score below the negative trigger threshold (price is statistically far below the ComboMA)
RSI Z-score below the negative trigger threshold (momentum is statistically depressed)
RSI EMA below 38 (confirming a bearish momentum context rather than a pullback within strength)
The current bar closed above the prior bar's close (a micro-confirmation that selling pressure may be easing)
The bar is confirmed (signal does not repaint on the forming bar)
Short signals apply the mirror logic. The requirement for extremes in both dimensions simultaneously is intentionally strict — it filters out the many cases where price is extended but momentum is not, or vice versa.
ATR Shadow Bands
Three pairs of shadow bands are drawn around the ComboMA at 1x, 2x, and 3x of a rolling ATR. These are not signal bands — they serve as a spatial reference, helping to contextualize how far price has traveled from the estimated mean in volatility-adjusted terms. A move to the 3x ATR shadow in a low-volatility environment carries different significance than the same move in a high-volatility environment.
RGB Smooth Color Transition
The ComboMA line color transitions smoothly between a bull and bear palette by independently blending the red, green, and blue channels via EMA. Each channel tracks a target value set by the current bull/bear state, and converges toward it gradually. This avoids abrupt color flips and gives a visual sense of momentum continuity.
Gradient Bar Coloring
Individual bars are colored based on where the close sits within the band range relative to the ComboMA. Bars near the upper bands trend toward the bull color; bars near the lower bands trend toward the bear color. Bars near the ComboMA receive a neutral tone. This is a visual aid only and does not constitute a signal.
Information Table
A 9-row table displays the current readings for: market regime, price Z-score, RSI Z-score, RSI EMA, band width, signal strength, active signal, and ComboMA value. This gives a snapshot of the indicator's internal state without requiring the trader to hover over each plotted element.
---
Features
Hybrid ComboMA centerline combining ALMA and ZLMA
Volatility-adaptive Z-score bands at two threshold levels (inner and outer)
RSI Z-score normalization for regime-independent momentum reading
Dual Z-score signal gate requiring simultaneous extremes in price and momentum
Three-layer ATR shadow bands for spatial volatility context
Smooth RGB channel blending on the ComboMA line color
Gradient bar coloring based on position within band range
Real-time information table with 9 indicator state readings
Non-repainting signals (barstate.isconfirmed)
Fully toggleable visual components
---
Input Parameters
MA Length: Base length for the ZLMA and ATR calculations
ALMA Offset: Controls asymmetric weight positioning within the ALMA window (0 = old end, 1 = recent end)
ALMA Sigma: Controls weight concentration; lower values spread the weight, higher values tighten it
Z-Score Lookback: Rolling window for computing the mean and standard deviation of price deviations (default: 50)
Inner Band Threshold: Z-score level for the inner band pair (default: 1.5σ)
Outer Band Threshold: Z-score level for the outer band pair (default: 2.5σ)
RSI Length: Period for RSI calculation (default: 14)
RSI Z-Score Lookback: Rolling window for normalizing RSI
Signal Trigger: Z-score threshold required in both dimensions to generate a signal (default: 1.8σ)
ATR Multipliers: Multipliers for the three shadow band tiers (1x, 2x, 3x)
Visual Toggles: Individual on/off controls for bands, shadows, bar coloring, table, and signals
---
How to Use
Reading the centerline: The ComboMA acts as the estimated mean structure. Price consistently above it with a bull-colored line suggests sustained upward bias; price oscillating around it suggests a ranging environment.
Reading the bands: The inner bands (±1.5σ by default) represent moderately unusual deviations. The outer bands (±2.5σ by default) represent statistically rare deviations. A touch or breach of the outer band does not by itself mean a reversal is due — it means the move is statistically uncommon and warrants attention.
Reading the shadow bands: Use the ATR shadows to understand how far, in volatility-adjusted terms, price has moved from the ComboMA. Price at the 3x shadow while also at the outer Z-score band is a more notable condition than either reading alone.
Acting on signals: The dual Z-score signals flag confluent extremes. They should be used as an alert layer within a broader trading framework — not as standalone entry triggers. Consider the broader trend context, the timeframe, and supporting structure before acting.
Using the table: Monitor the signal strength reading to understand how close the current state is to triggering a signal. This is useful for watching a developing setup in real time.
Timeframe notes: The indicator functions on any timeframe. Higher timeframes produce fewer but more structurally significant signals. Lower timeframes will produce more signals, many of which will be noise. Adjust the Z-score lookback and trigger threshold accordingly.
---
Limitations
This indicator does not predict future price movement. All readings are descriptive of past and current bar data.
The ComboMA, like all moving averages, will lag price during sharp trend changes. The ZLMA component reduces but does not eliminate this lag.
Z-score bands assume that price deviations are approximately normally distributed. In instruments with fat-tailed distributions or during extreme events, the statistical thresholds will underestimate the probability of outlier moves.
Signals are non-repainting on confirmed bars but will update on the forming bar until it closes. Always wait for bar close before acting on a signal.
A signal firing does not mean price will reverse. Trending markets can sustain extreme Z-score readings for extended periods.
The RSI EMA threshold (38 for longs) is a fixed filter that may not suit all instruments or regimes. It should be adjusted or disabled if it is filtering out valid setups in the instrument being traded.
The ATR shadow bands are informational only and carry no predictive weight.
Past signal performance on a given instrument is not indicative of future performance.
---
Originality Statement
The ALMA and ZLMA are established concepts. The ComboMA is not either of them — it is a blended centerline that takes the asymmetric-weight smoothness of ALMA and the lag-reduction property of ZLMA and produces a composite that neither achieves individually. The Z-score normalization of price deviations is a statistical adaptation that makes the bands self-calibrating to the instrument's deviation distribution rather than fixed. Applying the same normalization independently to RSI produces a momentum reading that is self-referential to recent RSI behavior rather than anchored to universal threshold levels. The signal gate that requires simultaneous Z-score extremes in both price deviation and RSI — not one or the other — creates a logical AND condition that is substantially stricter than conventional oscillator crossovers or single-band-touch triggers. The three ATR shadow tiers, smooth RGB color blending, and gradient bar coloring are supporting visual constructs that serve interpretation rather than adding trading logic. The combination of these elements into a single overlay tool — ComboMA centerline, adaptive Z-score bands, normalized momentum gate, ATR spatial context, and state table — represents an original integration not replicated by any standard built-in indicator.
---
Disclaimer
This indicator is provided for educational and informational purposes only. It does not constitute financial advice, investment advice, or a recommendation to buy or sell any financial instrument. Trading involves substantial risk of loss. Past performance of any indicator or strategy is not indicative of future results. Always conduct your own research and consult a qualified financial professional before making any trading decisions.
-Made with passion by officialjackofalltrades
Indicator

Structural Pivot Mapper [JOAT]Structural Pivot Mapper
Introduction
The Structural Pivot Mapper (SPM) is an advanced open-source structural analysis indicator that combines W/M pattern detection, dynamic support/resistance level mapping, pivot point analysis, volume profile integration, and break-retest detection to identify institutional structural pivots and key price levels. This indicator reveals market structure through systematic detection of swing highs/lows, classical chart patterns, and volume-based price levels, providing traders with a comprehensive structural framework for identifying high-probability entry and exit zones.
Unlike basic pivot indicators that simply mark swing points, SPM employs sophisticated pattern recognition algorithms to detect W patterns (bullish reversal), M patterns (bearish reversal), Head & Shoulders formations, and tracks level strength through touch counting and volume analysis. The indicator automatically manages support/resistance levels, removes outdated levels, and highlights Point of Control (POC) from volume profile analysis to show where institutional activity is concentrated.
Why This Indicator Exists
This indicator addresses the challenge of identifying key structural levels where institutional players are likely to defend positions or initiate new trades. Market structure provides the framework for understanding price behavior, and SPM systematically reveals:
W/M Pattern Detection: Identifies classical reversal patterns with strict validation rules
Dynamic Support/Resistance: Tracks pivot-based levels with automatic strength scoring
Level Touch Counting: Quantifies level importance through historical price interaction
Volume Profile Integration: Identifies Point of Control (POC) where maximum volume traded
Break & Retest Detection: Monitors level breaks and subsequent retests for confirmation
Head & Shoulders Patterns: Detects both regular and inverse H&S formations
Smart Level Management: Automatically removes weak levels and maintains only strongest
Each component provides unique intelligence. W/M patterns show reversal zones, pivots show swing structure, touch counting shows level strength, volume profile shows institutional interest, break-retest confirms level validity, and H&S patterns show major reversals.
Core Components Explained
1. W Pattern Detection (Bullish Reversal)
SPM detects W patterns through systematic analysis of 5 pivot points (A-B-C-D-E):
f_detect_w_pattern(float src, int lookback, int offset, bool strict) =>
// Find 5 pivot points forming W shape
// E = current, D = first low, C = middle high, B = second low, A = left high
// Validation: E > C, D < E, D < C, B <= D (strict), B < A
found := a > 0 and a != b and c != 0 and d != 0 and
src > src and src < src and src < src and
(src <= src or not strict) and src < src
W patterns indicate bullish reversal when:
- Price forms double bottom (D and B)
- Middle high (C) is lower than current price (E)
- Second low (B) is higher than or equal to first low (D) in strict mode
- Pattern completes with breakout above middle high (C)
Entry level is at middle high (C), stop loss at second low (B).
2. M Pattern Detection (Bearish Reversal)
M patterns are detected through inverted W logic:
f_detect_m_pattern(float src, int lookback, int offset, bool strict) =>
// Find 5 pivot points forming M shape
// E = current, D = first high, C = middle low, B = second high, A = left low
// Validation: E < C, D > E, D > C, B >= D (strict), B > A
found := a > 0 and a != b and c != 0 and d != 0 and
src < src and src > src and src > src and
(src >= src or not strict) and src > src
M patterns indicate bearish reversal when:
- Price forms double top (D and B)
- Middle low (C) is higher than current price (E)
- Second high (B) is lower than or equal to first high (D) in strict mode
- Pattern completes with breakdown below middle low (C)
Entry level is at middle low (C), stop loss at second high (B).
3. Dynamic Support/Resistance Level Management
SPM tracks pivot-based support and resistance levels with automatic management:
float pivot_high = ta.pivothigh(high, pivot_left, pivot_right)
float pivot_low = ta.pivotlow(low, pivot_left, pivot_right)
// Store levels in arrays
if not na(pivot_high) and barstate.isconfirmed
if array.size(resistance_levels) < max_levels
array.push(resistance_levels, pivot_high)
array.push(resistance_touches, 1)
else if auto_cleanup
array.shift(resistance_levels) // Remove oldest
array.push(resistance_levels, pivot_high)
Level strength is calculated through touch counting:
1 touch: New level (weak)
2 touches: Confirmed level (moderate)
3+ touches: Strong level (high importance)
Levels are automatically removed when max_levels is reached and auto_cleanup is enabled.
4. Level Touch Counting & Strength Scoring
SPM tracks how many times price interacts with each level:
float zone_size = atr_value * zone_width
if high >= level - zone_size and high <= level + zone_size
array.set(resistance_touches, i, array.get(resistance_touches, i) + 1)
Strength score (0-100) is calculated based on:
Touch Count (0-40 points): More touches = stronger level (8 points per touch, max 40)
Age Factor (0-30 points): Older levels = more established (based on level_strength_period)
Volume Factor (0-30 points): Higher volume at level = more institutional interest
Only levels with 2+ touches and strength >60 are displayed to reduce clutter.
5. Volume Profile & Point of Control (POC)
SPM calculates volume profile to identify price levels with maximum trading activity:
f_volume_profile(int bins, int lookback) =>
float price_range = price_high - price_low
float bin_size = price_range / bins
// Accumulate volume in 20 price bins
for i = 0 to lookback - 1
float bar_price = hlc3
int bin = math.floor((bar_price - price_low) / bin_size)
array.set(vp_volumes, bin, current_vol + bar_vol)
// Find POC (highest volume bin)
float poc_price = array.get(vp_prices, poc_bin)
POC represents the price level where most volume traded - typically where institutions have significant positions. Value Area High (VAH) and Value Area Low (VAL) define the range containing 70% of volume.
6. Break & Retest Detection
SPM monitors when price breaks through resistance levels and subsequently retests:
// Detect break (close above resistance)
if not was_broken and close > level and close <= level
array.set(level_broken, i, true)
array.set(break_bar_index, i, bar_index)
// Detect retest (price returns to broken level within 3-20 bars)
if was_broken
int break_bar = array.get(break_bar_index, i)
bool is_retest = bar_index - break_bar >= 3 and bar_index - break_bar <= 20
bool touching_level = math.abs(close - level) < atr_value * 0.5
if is_retest and touching_level
label.new(bar_index, level, "RT", color=c_support_strong)
Successful retests confirm level validity and often provide high-probability entry opportunities.
7. Head & Shoulders Pattern Detection
SPM detects both regular and inverse Head & Shoulders formations:
f_detect_head_shoulders(float src, int lookback) =>
// Find 3 pivot highs: left shoulder, head, right shoulder
float ph1 = ta.pivothigh(src, lookback, lookback)
float ph2 = ta.pivothigh(src, lookback, lookback)
float ph3 = ta.pivothigh(src, lookback, lookback)
// Validate: head higher than shoulders, shoulders roughly equal
if ph2 > ph1 and ph2 > ph3 and math.abs(ph1 - ph3) < (ph2 - ph1) * 0.3
found := true
neckline := math.min(low , low )
H&S patterns are major reversal formations indicating trend exhaustion and potential reversal.
Visual Elements
Support Lines: Blue horizontal lines with strength-based width (2-3px)
Resistance Lines: Pink horizontal lines with strength-based width (2-3px)
Level Labels: "S: price " for support, "R: price " for resistance (N = touch count)
Pivot Markers: Small circles at swing highs (pink) and lows (blue)
POC Line: Yellow dotted line showing Point of Control from volume profile
Retest Markers: "RT" labels when price retests broken levels
Pattern Lines: Optional dashed lines showing W/M pattern structure (disabled by default)
Dashboard: Real-time metrics showing resistance count, support count, pattern status, POC price
Input Parameters
Pattern Detection:
Pattern Range: Lookback period for W/M detection (default: 9)
Pattern Offset: Additional bars to check (default: 0)
Strict Pattern Validation: Enforce stricter pattern rules (default: false)
Pivot Settings:
Pivot Left Bars: Bars to left of pivot (default: 6)
Pivot Right Bars: Bars to right of pivot (default: 1)
Show Pivot Labels: Toggle pivot markers (default: true)
Level Management:
Maximum Levels: Max support/resistance levels to track (default: 3)
Level Strength Period: Lookback for strength calculation (default: 50)
Auto-Cleanup Old Levels: Remove oldest when max reached (default: true)
Visualization:
Show Support/Resistance Zones: Toggle level display (default: true)
Zone Width (ATR %): Width of level zones (default: 0.5)
Show Pattern Lines: Toggle W/M pattern visualization (default: false)
How to Use This Indicator
Step 1: Identify Key Structural Levels
Look for blue (support) and pink (resistance) lines. Thicker lines with higher touch counts are strongest.
Step 2: Monitor Pattern Formations
Watch dashboard for "W Pattern" (bullish) or "M Pattern" (bearish) status. These indicate potential reversal zones.
Step 3: Check POC Proximity
Yellow POC line shows where maximum volume traded. Price often gravitates toward POC or bounces from it.
Step 4: Wait for Break & Retest
When price breaks resistance and retests (RT label), it confirms level as new support. High-probability long entry.
Step 5: Use Level Strength for Confidence
Levels with 3+ touches are most reliable. Dashboard shows total support/resistance count.
Step 6: Combine with Higher Timeframe Structure
Use SPM on multiple timeframes. Daily/weekly levels are stronger than intraday levels.
Best Practices
Focus on levels with 3+ touches - these have proven institutional interest
W/M patterns work best at major support/resistance levels
POC acts as magnet - price often returns to POC after deviating
Break-retest setups have highest win rate when combined with volume confirmation
Disable pattern lines to reduce chart clutter - use dashboard for pattern status
Adjust zone width based on instrument volatility (higher ATR = wider zones)
Auto-cleanup keeps chart clean but may remove valid older levels
H&S patterns are most reliable on higher timeframes (4H+)
Level strength score >70 indicates institutional-grade level
Smart spacing prevents overlapping levels - only strongest levels shown
Indicator Limitations
Pattern detection requires sufficient historical data and clear pivot formation
W/M patterns can produce false signals during strong trends
Level touch counting is historical - doesn't predict future touches
Volume profile requires consistent volume data - may not work on illiquid instruments
Break-retest detection has time window (3-20 bars) - may miss delayed retests
Maximum level limit means some valid levels may be removed
Pivot detection lags by pivot_right bars - not real-time
H&S patterns are rare and require specific market conditions
Level strength scoring is multi-factor but still subjective
Smart spacing may hide valid levels that are too close to stronger levels
Technical Implementation
Built with Pine Script v6 using:
Custom W/M pattern detection with 5-point validation
Pivot-based support/resistance tracking with arrays
Touch counting system with ATR-based zone detection
Multi-factor level strength scoring (touches + age + volume)
Volume profile calculation with 20-bin price distribution
POC detection through maximum volume identification
Break-retest monitoring with time window validation
Head & Shoulders pattern detection (regular and inverse)
Smart level spacing to prevent overlapping (1.5 ATR minimum)
Automatic level cleanup when maximum reached
Dynamic line and label management to prevent memory issues
Real-time dashboard with 4 key metrics
The code is fully open-source and can be modified to suit individual trading styles.
Originality Statement
This indicator is original in its comprehensive structural analysis approach. While pivot detection and pattern recognition are established concepts, this indicator is justified because:
It combines W/M pattern detection with dynamic support/resistance management in a unified system
The multi-factor level strength scoring (touches + age + volume) provides quantitative level assessment
Volume profile integration with POC detection adds institutional perspective to structural analysis
Break-retest detection with time window validation automates a manual trading technique
Smart level spacing prevents chart clutter while maintaining strongest levels
Head & Shoulders detection (both regular and inverse) adds major reversal pattern recognition
Automatic level cleanup maintains chart readability without manual intervention
Integration of classical patterns (W/M, H&S) with modern volume analysis creates layered confirmation
Each component contributes unique information: W/M patterns show reversals, pivots show structure, touch counting shows strength, volume profile shows institutional interest, break-retest confirms validity, H&S shows major reversals, and strength scoring quantifies importance. The indicator's value lies in presenting these complementary perspectives simultaneously with intelligent level management.
Disclaimer
This indicator is provided for educational and informational purposes only. It is not financial advice. Structural levels and patterns do not guarantee price behavior. Trading involves substantial risk of loss. Past performance does not guarantee future results. Always use proper risk management and never risk more than you can afford to lose.
-Made with passion by officialjackofalltrades Indicator
