Fractal Market Geometry [JOAT]
Fractal Market Geometry
Overview
Fractal Market Geometry is an open-source overlay indicator that combines fractal analysis with harmonic pattern detection, Fibonacci retracements and extensions, Elliott Wave concepts, and Wyckoff phase identification. It provides traders with a geometric framework for understanding market structure and identifying potential reversal patterns with multi-factor signal confirmation.
What This Indicator Does
The indicator calculates and displays:
Fractal Detection - Identifies fractal highs and lows using Williams-style pivot analysis with configurable period
Fractal Dimension - Calculates market complexity using range-based dimension estimation
Harmonic Patterns - Detects Gartley, Butterfly, Bat, Crab, Shark, Cypher, and ABCD patterns using Fibonacci ratios
Fibonacci Retracements - Key levels at 38.2%, 50%, and 61.8%
Fibonacci Extensions - Projection level at 161.8%
Elliott Wave Count - Simplified wave counting based on pivot detection (1-5)
Wyckoff Phase - Volume-based phase identification (Accumulation, Markup, Distribution, Neutral)
Golden Spiral Levels - ATR-based support and resistance levels using phi (1.618) ratio
Trend Detection - EMA crossover trend identification (20/50 EMA)
How It Works
Fractal detection uses a configurable period to identify swing points:
detectFractalHigh(simple int period) =>
bool result = true
float centerVal = high
for i = 0 to period - 1
if high >= centerVal or high >= centerVal
result := false
break
Harmonic pattern detection uses Fibonacci ratio analysis between swing points. Each pattern has specific ratio requirements:
Gartley: AB 0.382-0.618, BC 0.382-0.886, CD 1.27-1.618
Butterfly: AB 0.382-0.5, BC 0.382-0.886, CD 1.618-2.24
Bat: AB 0.5-0.618, BC 1.13-1.618, CD 1.618-2.24
Crab: AB 0.382-0.618, BC 0.382-0.886, CD 2.24-3.618
Shark: AB 0.382-0.618, BC 1.13-1.618, CD 1.618-2.24
Cypher: AB 0.382-0.618, BC 1.13-1.414, CD 0.786-0.886
Wyckoff phase detection analyzes volume relative to price movement:
wyckoffPhase(simple int period) =>
float avgVol = ta.sma(volume, period)
float priceChg = ta.change(close, period)
string phase = "NEUTRAL"
if volume > avgVol * 1.5 and math.abs(priceChg) < close * 0.02
phase := "ACCUMULATION"
else if volume > avgVol * 1.5 and math.abs(priceChg) > close * 0.05
phase := "MARKUP"
else if volume < avgVol * 0.7
phase := "DISTRIBUTION"
phase
Signal Generation
Signals use multi-factor confirmation for accuracy:
BUY Signal: Fractal low + Uptrend (EMA20 > EMA50) + RSI 30-55 + Bullish candle + Volume confirmation
SELL Signal: Fractal high + Downtrend (EMA20 < EMA50) + RSI 45-70 + Bearish candle + Volume confirmation
Pattern Detection: Label appears when harmonic pattern completes at current bar
Dashboard Panel (Top-Right)
Dimension - Fractal dimension value (market complexity measure)
Last High - Most recent fractal high price
Last Low - Most recent fractal low price
Pattern - Current harmonic pattern name or NONE
Elliott Wave - Current wave count (Wave 1-5) or OFF
Wyckoff - Current market phase or OFF
Trend - BULLISH, BEARISH, or NEUTRAL based on EMA crossover
Signal - BUY, SELL, or WAIT status
Visual Elements
Fractal Markers - Small triangles at fractal highs (down arrow) and lows (up arrow)
Geometry Lines - Dashed lines connecting the most recent fractal high and low
Fibonacci Levels - Clean horizontal lines at 38.2%, 50%, and 61.8% retracement levels
Fibonacci Extension - Horizontal line at 161.8% extension level
Golden Spiral Levels - Support and resistance lines based on ATR x 1.618
3D Fractal Field - Optional depth layers around swing levels (OFF by default)
Harmonic Pattern Markers - Small diamond shapes when Crab, Shark, or Cypher patterns detected
Pattern Labels - Text label showing pattern name when detected
Signal Labels - BUY/SELL labels on confirmed multi-factor signals
Input Parameters
Fractal Period (default: 5) - Bars on each side for fractal detection
Geometry Depth (default: 3) - Complexity of geometric calculations
Pattern Sensitivity (default: 0.8) - Tolerance for pattern ratio matching
Show Fibonacci Levels (default: true) - Display retracement levels
Show Fibonacci Extensions (default: true) - Display extension level
Elliott Wave Detection (default: true) - Enable wave counting
Wyckoff Analysis (default: true) - Enable phase detection
Golden Spiral Levels (default: true) - Display spiral support/resistance
Show Fractal Points (default: true) - Display fractal markers
Show Geometry Lines (default: true) - Display connecting lines
Show Pattern Labels (default: true) - Display pattern name labels
Show 3D Fractal Field (default: false) - Display depth layers
Show Harmonic Patterns (default: true) - Display pattern markers
Show Buy/Sell Signals (default: true) - Display signal labels
Suggested Use Cases
Identify potential reversal zones using harmonic pattern completion
Use Fibonacci levels for entry, stop-loss, and target planning
Monitor Wyckoff phases for accumulation/distribution awareness
Track Elliott Wave counts for trend structure analysis
Use fractal dimension to gauge market complexity
Wait for multi-factor signal confirmation before entering trades
Timeframe Recommendations
Best on 1H to Daily charts. Lower timeframes produce more fractals but with less significance. Higher timeframes provide stronger levels and more reliable signals.
Limitations
Harmonic pattern detection uses simplified ratio ranges and may not match all textbook definitions
Elliott Wave counting is basic and does not include all wave rules
Wyckoff phase detection is volume-based approximation
Fractal dimension calculation is simplified
Signals require fractal confirmation which has inherent lag equal to the fractal period
Open-Source and Disclaimer
This script is published as open-source under the Mozilla Public License 2.0 for educational purposes. It does not constitute financial advice. Past performance does not guarantee future results. Always use proper risk management.
- Made with passion by officialjackofalltrades
Pinescript
Dimensional Support ResistanceDimensional Support Resistance
Overview
Dimensional Support Resistance is an open-source overlay indicator that automatically detects and displays clean, non-overlapping support and resistance levels using pivot-based analysis with intelligent filtering. It identifies significant swing highs and lows, filters them by minimum distance to prevent visual clutter, and provides volume-confirmed bounce signals.
What This Indicator Does
The indicator calculates and displays:
Dynamic Pivot Levels - Automatically detected swing highs and lows based on configurable pivot strength
Distance Filtering - Ensures levels are spaced apart by a minimum percentage to prevent overlap
S/R Zones - Visual zones around each level showing the price area of significance
Bounce Detection - Identifies when price reverses at support or resistance levels
Volume Confirmation - Strong signals require above-average volume for confirmation
How It Works
Pivot detection scans for swing highs and lows using a configurable strength parameter. A pivot low requires the low to be lower than all surrounding bars within the strength period.
Signal Generation
The indicator generates bounce signals using TradingView's built-in pivot detection combined with candle reversal confirmation:
Support Bounce: Pivot low forms with bullish close (close > open)
Resistance Bounce: Pivot high forms with bearish close (close < open)
Strong Bounce: Bounce occurs with volume 1.5x above 20-period average
A cooldown period of 15 bars prevents signal spam.
Dashboard Panel
A compact dashboard displays:
Support - Count of active support levels
Resistance - Count of active resistance levels
Dashboard position is configurable (Top Left, Top Right, Bottom Left, Bottom Right).
Visual Elements
Support Lines - Green horizontal lines at support levels
Resistance Lines - Red horizontal lines at resistance levels
S/R Zones - Semi-transparent boxes around levels showing zone width
Price Labels - S: and R: labels showing exact price of nearest levels
BOUNCE Markers - Triangle shapes with text when price bounces at a level
STRONG Markers - Label shapes when bounce occurs with high volume
Input Parameters
Lookback Period (default: 100) - Historical bars to scan for pivots
Pivot Strength (default: 8) - Bars on each side required for valid pivot (higher = fewer but stronger levels)
Max Levels Each Side (default: 2) - Maximum support and resistance levels displayed
Zone Width % (default: 0.15) - Width of zones around each level as percentage of price
Min Distance Between Levels % (default: 1.0) - Minimum spacing between levels to prevent overlap
Show S/R Zones (default: true) - Toggle zone visualization
Show Bounce Signals (default: true) - Toggle signal markers
Support Color (default: #00ff88) - Color for support elements
Resistance Color (default: #ff3366) - Color for resistance elements
Suggested Use Cases
Identify key support and resistance levels for entry and exit planning
Use bounce signals as potential reversal confirmation
Combine with other indicators for confluence-based trading decisions
Monitor strong signals for high-probability setups with volume confirmation
Timeframe Recommendations
Works on all timeframes. Higher timeframes (4H, Daily) provide more significant levels with fewer signals. Lower timeframes show more granular structure but may produce more noise.
Limitations
Pivot detection requires lookback bars, so very recent pivots may not be immediately visible
Bounce signals are based on pivot formation and may lag by the pivot strength period
Levels are recalculated on each bar, so they may shift as new pivots form
Open-Source and Disclaimer
This script is published as open-source under the Mozilla Public License 2.0 for educational purposes. It does not constitute financial advice. Past performance does not guarantee future results. Always use proper risk management and conduct your own analysis before trading.
- Made with passion by officialjackofalltrades
Ocean Master [JOAT]Ocean Master QE - Advanced Oceanic Market Analysis with Quantum Flow Dynamics
Overview
Ocean Master QE is an open-source overlay indicator that combines multiple analytical techniques into a unified market analysis framework. It uses ATR-based dynamic channels, volume-weighted order flow analysis, multi-timeframe correlation (quantum entanglement concept), and harmonic oscillator calculations to provide traders with a comprehensive view of market conditions.
What This Indicator Does
The indicator calculates and displays several key components:
Dynamic Price Channels - ATR-adjusted upper, middle, and lower channels that adapt to current volatility conditions
Order Flow Analysis - Separates buying and selling volume pressure to calculate a directional delta
Smart Money Index - Volume-weighted order flow metric that highlights potential institutional activity
Harmonic Oscillator - Weighted combination of 10 Fibonacci-period EMAs (5, 8, 13, 21, 34, 55, 89, 144, 233, 377) to identify trend direction
Multi-Timeframe Correlation - Measures price correlation across 1H, 4H, and Daily timeframes
Wave Function Analysis - Momentum-based state detection that identifies when price action becomes decisive
How It Works
The core channel calculation uses ATR with a configurable quantum sensitivity factor:
float atr = ta.atr(i_atrLength)
float quantumFactor = 1.0 + (i_quantumSensitivity * 0.1)
float quantumATR = atr * quantumFactor
upperChannel := ta.highest(high, i_length) - (quantumATR * 0.5)
lowerChannel := ta.lowest(low, i_length) + (quantumATR * 0.5)
midChannel := (upperChannel + lowerChannel) * 0.5
Order flow is calculated by separating volume into buy and sell components based on candle direction:
The harmonic oscillator weights shorter EMAs more heavily using inverse weighting (1/1, 1/2, 1/3... 1/10), creating a responsive yet smooth trend indicator.
Signal Generation
Confluence signals require multiple conditions to align:
Bullish: Harmonic oscillator crosses above zero + positive Smart Money Index + positive Order Flow Delta
Bearish: Harmonic oscillator crosses below zero + negative Smart Money Index + negative Order Flow Delta
Dashboard Panel (Top-Right)
Bias - Current market direction based on price vs mid-channel
Entanglement - Multi-timeframe correlation score (0-100%)
Wave State - COLLAPSED (decisive) or SUPERPOSITION (uncertain)
Volume - Current volume relative to 20-period average
Volatility - ATR as percentage of price
Smart Money - Volume-weighted order flow reading
Visual Elements
Ocean Depth Layers - Gradient fills between channel levels representing different price zones
Channel Lines - Upper (surface), middle, and lower (seabed) dynamic levels
Divergence Markers - Triangle shapes when harmonic oscillator crosses zero
Confluence Labels - BULL/BEAR labels when multiple factors align
Suggested Use Cases
Identify trend direction using the harmonic oscillator and channel position
Monitor order flow for potential institutional activity
Use multi-timeframe correlation to confirm trade direction across timeframes
Watch for confluence signals where multiple factors align
Input Parameters
Length (default: 14) - Base period for channel and indicator calculations
ATR Length (default: 14) - Period for ATR calculation
Quantum Depth (default: 3) - Complexity factor for calculations
Quantum Sensitivity (default: 1.5) - Channel width multiplier
Timeframe Recommendations
Works on all timeframes. Higher timeframes (4H, Daily) provide smoother signals; lower timeframes require faster reaction times and may produce more noise.
Limitations
Multi-timeframe requests add processing overhead
Order flow estimation is based on candle direction, not actual order book data
Correlation calculations require sufficient historical data
Open-Source and Disclaimer
This script is published as open-source under the Mozilla Public License 2.0 for educational purposes. It does not constitute financial advice. Past performance does not guarantee future results. Always use proper risk management and conduct your own analysis before trading.
- Made with passion by officialjackofalltrades
Session Volume Analyzer [JOAT]
Session Volume Analyzer — Global Trading Session and Volume Intelligence System
This indicator addresses the analytical challenge of understanding market participation patterns across global trading sessions. It combines precise session detection with comprehensive volume analysis to provide insights into when and how different market participants are active. The tool recognizes that different trading sessions exhibit distinct characteristics in terms of participation, volatility, and volume patterns.
Why This Combination Provides Unique Analytical Value
Traditional session indicators typically only show time boundaries, while volume indicators show raw volume data without session context. This creates analytical gaps:
1. **Session Context Missing**: Volume spikes without session context provide incomplete information
2. **Participation Patterns Hidden**: Different sessions have different participant types (retail, institutional, algorithmic)
3. **Comparative Analysis Lacking**: No easy way to compare volume patterns across sessions
4. **Timing Intelligence Absent**: Understanding WHEN volume occurs is as important as HOW MUCH volume occurs
This indicator's originality lies in creating an integrated session-volume analysis system that:
**Provides Session-Aware Volume Analysis**: Volume data is contextualized within specific trading sessions
**Enables Cross-Session Comparison**: Compare volume patterns between Asian, London, and New York sessions
**Delivers Participation Intelligence**: Understand which sessions are showing above-normal participation
**Offers Real-Time Session Tracking**: Know exactly which session is active and how current volume compares
Technical Innovation and Originality
While session detection and volume analysis exist separately, the innovation lies in:
1. **Integrated Session-Volume Architecture**: Simultaneous tracking of session boundaries and volume statistics creates comprehensive market participation analysis
2. **Multi-Session Volume Comparison System**: Real-time calculation and comparison of volume statistics across different global sessions
3. **Adaptive Volume Threshold Detection**: Automatic identification of above-average volume periods within session context
4. **Comprehensive Visual Integration**: Session backgrounds, volume highlights, and statistical dashboards provide complete market participation picture
How Session Detection and Volume Analysis Work Together
The integration creates a sophisticated market participation analysis system:
**Session Detection Logic**: Uses Pine Script's time functions to identify active sessions
// Session detection based on exchange time
bool inAsian = not na(time(timeframe.period, asianSession))
bool inLondon = not na(time(timeframe.period, londonSession))
bool inNY = not na(time(timeframe.period, nySession))
// Session transition detection
bool asianStart = inAsian and not inAsian
bool londonStart = inLondon and not inLondon
bool nyStart = inNY and not inNY
**Volume Analysis Integration**: Volume statistics are calculated within session context
// Session-specific volume accumulation
if asianStart
asianVol := 0.0
asianBars := 0
if inAsian
asianVol += volume
asianBars += 1
// Real-time session volume analysis
float asianAvgVol = asianBars > 0 ? asianVol / asianBars : 0
**Relative Volume Assessment**: Current volume compared to session-specific averages
float volMA = ta.sma(volume, volLength)
float volRatio = volMA > 0 ? volume / volMA : 1
// Volume classification within session context
bool isHighVol = volRatio >= 1.5 and volRatio < 2.5
bool isVeryHighVol = volRatio >= 2.5
This creates a system where volume analysis is always contextualized within the appropriate trading session, providing more meaningful insights than raw volume data alone.
Comprehensive Session Analysis Framework
**Default Session Definitions** (customizable based on broker timezone):
- **Asian Session**: 1800-0300 (exchange time) - Represents Asian market participation including Tokyo, Hong Kong, Singapore
- **London Session**: 0300-1200 (exchange time) - Represents European market participation
- **New York Session**: 0800-1700 (exchange time) - Represents North American market participation
**Session Overlap Analysis**: The system recognizes and highlights overlap periods:
- **London/New York Overlap**: 0800-1200 - Typically the highest volume period
- **Asian/London Overlap**: 0300-0300 (brief) - Transition period
- **New York/Asian Overlap**: 1700-1800 (brief) - End of NY, start of Asian
**Volume Intelligence Features**:
1. **Session-Specific Volume Accumulation**: Tracks total volume within each session
2. **Cross-Session Volume Comparison**: Compare current session volume to other sessions
3. **Relative Volume Detection**: Identify when current volume exceeds historical averages
4. **Participation Pattern Analysis**: Understand which sessions show consistent high/low participation
Advanced Volume Analysis Methods
**Relative Volume Calculation**:
float volMA = ta.sma(volume, volLength) // Volume moving average
float volRatio = volMA > 0 ? volume / volMA : 1 // Current vs average ratio
// Multi-tier volume classification
bool isNormalVol = volRatio < 1.5
bool isHighVol = volRatio >= 1.5 and volRatio < 2.5
bool isVeryHighVol = volRatio >= 2.5
bool isExtremeVol = volRatio >= 4.0
**Session Volume Tracking**:
// Cumulative session volume with bar counting
if londonStart
londonVol := 0.0
londonBars := 0
if inLondon
londonVol += volume
londonBars += 1
// Average volume per bar calculation
float londonAvgVol = londonBars > 0 ? londonVol / londonBars : 0
**Cross-Session Volume Comparison**:
The system maintains running totals for each session, enabling real-time comparison of participation levels across different global markets.
What the Display Shows
Session Backgrounds — Colored backgrounds indicating which session is active
- Pink: Asian session
- Blue: London session
- Green: New York session
Session Open Lines — Horizontal lines at each session's opening price
Session Markers — Labels (AS, LN, NY) when sessions begin
Volume Highlights — Bar coloring when volume exceeds thresholds
- Orange: High volume (1.5x+ average)
- Red: Very high volume (2.5x+ average)
Dashboard — Current session, cumulative volume, and averages
Color Scheme
Asian — #E91E63 (pink)
London — #2196F3 (blue)
New York — #4CAF50 (green)
High Volume — #FF9800 (orange)
Very High Volume — #F44336 (red)
Inputs
Session Times:
Asian Session window (default: 1800-0300)
London Session window (default: 0300-1200)
New York Session window (default: 0800-1700)
Volume Settings:
Volume MA Length (default: 20)
High Volume threshold (default: 1.5x)
Very High Volume threshold (default: 2.5x)
Visual Settings:
Session colors (customizable)
Show/hide backgrounds, lines, markers
Background transparency
How to Read the Display
Background color shows which session is currently active
Session open lines show where each session started
Orange/red bars indicate above-average volume
Dashboard shows cumulative volume for each session today
Alerts
Session opened (Asian, London, New York)
High volume bar detected
Very high volume bar detected
Important Limitations and Realistic Expectations
Session times are approximate and depend on your broker's server timezone—manual adjustment may be required for accuracy
Volume data quality varies significantly by broker, instrument, and market type
Cryptocurrency and some forex markets trade continuously, making traditional session boundaries less meaningful
High volume indicates participation level only—it does not predict price direction or market outcomes
Session participation patterns can change over time due to market structure evolution, holidays, and economic conditions
This tool displays historical and current market participation data—it cannot predict future volume or price movements
Volume spikes can occur for numerous reasons unrelated to directional price movement (news, algorithmic trading, etc.)
Different instruments exhibit different session sensitivity and volume patterns
Market holidays and special events can significantly alter normal session patterns
Appropriate Use Cases
This indicator is designed for:
- Market participation pattern analysis
- Session-based trading schedule planning
- Volume context and comparison across sessions
- Educational study of global market structure
- Supplementary analysis for session-based strategies
This indicator is NOT designed for:
- Standalone trading signal generation
- Volume-based price direction prediction
- Automated trading system triggers
- Guaranteed session pattern repetition
- Replacement of fundamental or sentiment analysis
Understanding Session Analysis Limitations
Session analysis provides valuable context but has inherent limitations:
- Session patterns can change due to economic conditions, holidays, and market structure evolution
- Volume patterns may not repeat consistently across different market conditions
- Global events can override normal session characteristics
- Different asset classes respond differently to session boundaries
- Technology and algorithmic trading continue to blur traditional session distinctions
— Made with passion by officialjackofalltrades
Volatility Squeeze Pro [JOAT]
Volatility Squeeze Pro — Advanced Volatility Compression Analysis System
This indicator addresses a specific analytical challenge in volatility analysis: how to identify periods when different volatility measurements show compression relationships that may indicate potential energy buildup in the market. It combines two distinct volatility calculation methods—standard deviation-based bands and ATR-based channels—with a momentum oscillator to provide comprehensive volatility state analysis.
Why This Combination Provides Unique Analytical Value
Traditional volatility indicators typically focus on single measurements, but markets exhibit different types of volatility that require different analytical approaches:
1. **Closing Price Volatility** (Standard Deviation): Measures how much closing prices deviate from their average
2. **Trading Range Volatility** (ATR): Measures the actual high-to-low trading ranges
3. **Directional Momentum**: Measures where price sits within its recent range
The problem with using these individually:
- Standard deviation alone doesn't account for intraday volatility
- ATR alone doesn't consider closing price clustering
- Momentum alone doesn't provide volatility context
- No single measurement captures the complete volatility picture
This indicator's originality lies in creating a comprehensive volatility analysis system that:
**Identifies Volatility Compression**: When closing price volatility contracts inside trading range volatility, it suggests potential energy buildup
**Provides Momentum Context**: Shows directional bias during compression periods
**Offers Multi-Dimensional Analysis**: Combines three different analytical approaches into one coherent system
**Delivers Real-Time Assessment**: Continuously monitors the relationship between different volatility types
Technical Innovation and Originality
While individual components (Bollinger Bands, Keltner Channels, Linear Regression) are standard, the innovation lies in:
1. **Volatility Relationship Detection**: The mathematical comparison between standard deviation bands and ATR channels creates a unique compression identification system
2. **Integrated Momentum Analysis**: Linear regression-based momentum calculation provides directional context specifically during volatility compression periods
3. **Multi-State Visualization**: The indicator provides clear visual encoding of different volatility states (compressed vs. normal) with momentum direction
4. **Adaptive Threshold System**: The squeeze detection automatically adapts to different instruments and timeframes without manual calibration
How the Components Work Together Analytically
The three components create a comprehensive volatility analysis framework:
**Standard Deviation Component**: Measures closing price dispersion around the mean
float bbBasis = ta.sma(close, bbLength)
float bbDev = bbMult * ta.stdev(close, bbLength)
float bbUpper = bbBasis + bbDev
float bbLower = bbBasis - bbDev
**ATR Channel Component**: Measures actual trading range volatility
float kcBasis = ta.ema(close, kcLength)
float kcRange = ta.atr(atrLength)
float kcUpper = kcBasis + kcRange * kcMult
float kcLower = kcBasis - kcRange * kcMult
**Squeeze Detection Logic**: Identifies when closing price volatility compresses within trading range volatility
bool squeezeOn = bbLower > kcLower and bbUpper < kcUpper
// This condition indicates closing prices are clustering more tightly
// than the typical trading range would suggest
**Momentum Context Component**: Provides directional bias during compression
float highestHigh = ta.highest(high, momLength)
float lowestLow = ta.lowest(low, momLength)
float momentum = ta.linreg(close - math.avg(highestHigh, lowestLow), momLength, 0)
float momSmooth = ta.sma(momentum, smoothLength)
The analytical relationship creates a system where:
- Squeeze detection identifies WHEN volatility compression occurs
- Momentum analysis shows WHERE price is positioned during compression
- Combined analysis provides both timing and directional context
How the Volatility Comparison Works
The indicator compares two volatility measurements:
Standard Deviation Bands
These measure how much closing prices deviate from their average. When prices cluster tightly around the average, the bands contract.
// Standard deviation bands calculation
float bbBasis = ta.sma(close, bbLength)
float bbDev = bbMult * ta.stdev(close, bbLength)
float bbUpper = bbBasis + bbDev
float bbLower = bbBasis - bbDev
ATR-Based Channels
These measure volatility using Average True Range—the typical distance between high and low prices. They respond to the actual trading range rather than closing price dispersion.
// ATR-based channels calculation
float kcBasis = ta.ema(close, kcLength)
float kcRange = ta.atr(atrLength)
float kcUpper = kcBasis + kcRange * kcMult
float kcLower = kcBasis - kcRange * kcMult
The Squeeze Condition
A "squeeze" is detected when the standard deviation bands are completely contained within the ATR channels:
// Squeeze detection
bool squeezeOn = bbLower > kcLower and bbUpper < kcUpper
This condition indicates that closing price volatility has compressed relative to the overall trading range.
The Momentum Component
The momentum oscillator measures where price sits relative to its recent high-low range, using linear regression for smoothing:
// Momentum calculation
float highestHigh = ta.highest(high, momLength)
float lowestLow = ta.lowest(low, momLength)
float momentum = ta.linreg(close - math.avg(highestHigh, lowestLow), momLength, 0)
float momSmooth = ta.sma(momentum, smoothLength)
Positive values indicate price is above the midpoint of its recent range; negative values indicate below.
Why Display Both Together
The squeeze detection shows WHEN volatility is compressed. The momentum reading shows the current directional bias of price within that compression. Together, they provide two pieces of information:
1. Is volatility currently compressed? (squeeze status)
2. Where is price leaning within the current range? (momentum)
These are observations about current conditions, not predictions about future movement.
Visual Elements
Momentum Histogram — Bars showing momentum value
- Green shades: Positive momentum (price above range midpoint)
- Red shades: Negative momentum (price below range midpoint)
- Brighter colors: Momentum increasing
- Faded colors: Momentum decreasing
Squeeze Dots — Circles on the zero line
- Red: Squeeze condition active
- Green: No squeeze condition
Release Markers — Triangle markers when squeeze condition ends
Dashboard — Current readings and status
Color Scheme
Squeeze Active — #FF5252 (red)
No Squeeze — #4CAF50 (green)
Momentum Positive — #00E676 / #81C784 (green shades)
Momentum Negative — #FF5252 / #E57373 (red shades)
Inputs
Standard Deviation Bands:
Length (default: 20)
Multiplier (default: 2.0)
ATR Channels:
Length (default: 20)
Multiplier (default: 1.5)
ATR Period (default: 10)
Momentum:
Length (default: 12)
Smoothing (default: 3)
How to Read the Display
Red dots indicate the squeeze condition is present
Green dots indicate normal volatility relationship
Histogram direction shows current momentum bias
Histogram color brightness shows whether momentum is increasing or decreasing
Alerts
Squeeze condition started
Squeeze condition ended
Squeeze ended with positive momentum
Squeeze ended with negative momentum
Extended squeeze (8+ bars)
Important Limitations and Realistic Expectations
Volatility compression detection is a mathematical relationship between calculations—it does not predict future price movements
Many compression periods do not result in significant price expansion or directional moves
Momentum direction during compression does not reliably indicate future breakout direction
This indicator analyzes current and historical volatility conditions only—it cannot predict future volatility
False signals are common—not every squeeze leads to tradeable price movement
Different parameter settings will produce different compression detection sensitivity
Market conditions, news events, and fundamental factors often override technical volatility patterns
No volatility indicator can predict the timing, direction, or magnitude of future price movements
This tool should be used as one component of comprehensive market analysis
Appropriate Use Cases
This indicator is designed for:
- Volatility state analysis and monitoring
- Educational study of volatility relationships
- Multi-dimensional volatility assessment
- Supplementary analysis alongside other technical tools
- Understanding market compression/expansion cycles
This indicator is NOT designed for:
- Standalone trading signal generation
- Guaranteed breakout prediction
- Automated trading system triggers
- Market timing precision
- Replacement of fundamental analysis
Understanding Volatility Analysis Limitations
Volatility analysis, while useful for understanding market conditions, has inherent limitations:
- Past volatility patterns do not guarantee future patterns
- Compression periods can extend much longer than expected
- Expansion periods may be brief and insufficient for trading
- External factors (news, fundamentals) often override technical patterns
- Different markets and timeframes exhibit different volatility characteristics
— Made with passion by officialjackofalltrades
Pivot Point Zones [JOAT]Pivot Point Zones — Multi-Formula Pivot Levels with ATR Zones
Pivot Point Zones calculates and displays traditional pivot points with five formula options, enhanced with ATR-based zones around each level. This creates more practical trading zones that account for price noise around key levels—because price rarely reacts at exact mathematical levels.
What Makes This Indicator Unique
Unlike basic pivot point indicators, Pivot Point Zones:
Offers five different pivot calculation formulas in one indicator
Creates ATR-based zones around each level for realistic reaction areas
Pulls data from higher timeframes automatically
Displays clean labels with exact price values
Provides a comprehensive dashboard with all levels
What This Indicator Does
Calculates pivot points using Standard, Fibonacci, Camarilla, Woodie, and more formulas
Draws horizontal lines at Pivot, R1-R3, and S1-S3 levels
Creates ATR-based zones around each level for realistic price reaction areas
Displays labels with exact price values
Updates automatically based on higher timeframe closes
Provides fills between zone boundaries for visual clarity
Pivot Formulas Explained
// Standard Pivot - Classic (H+L+C)/3 calculation
pp := (pivotHigh + pivotLow + pivotClose) / 3
r1 := 2 * pp - pivotLow
s1 := 2 * pp - pivotHigh
r2 := pp + pivotRange
s2 := pp - pivotRange
// Fibonacci Pivot - Uses Fib ratios for level spacing
r1 := pp + 0.382 * pivotRange
r2 := pp + 0.618 * pivotRange
r3 := pp + 1.0 * pivotRange
// Camarilla Pivot - Tighter levels for intraday
r1 := pivotClose + pivotRange * 1.1 / 12
r2 := pivotClose + pivotRange * 1.1 / 6
r3 := pivotClose + pivotRange * 1.1 / 4
// Woodie Pivot - Weights current close more heavily
pp := (pivotHigh + pivotLow + 2 * close) / 4
// TD Pivot - Conditional based on open/close relationship
x = pivotClose < pivotOpen ? pivotHigh + 2*pivotLow + pivotClose :
pivotClose > pivotOpen ? 2*pivotHigh + pivotLow + pivotClose :
pivotHigh + pivotLow + 2*pivotClose
pp := x / 4
Formula Characteristics
Standard — Classic pivot calculation. Balanced levels, good for swing trading.
Fibonacci — Uses 0.382, 0.618, and 1.0 ratios. Popular with Fibonacci traders.
Camarilla — Tighter levels derived from range. Excellent for intraday mean-reversion.
Woodie — Weights current close more heavily. More responsive to recent price action.
TD — Conditional calculation based on open/close relationship. Adapts to bar type.
Zone System
Each pivot level includes an ATR-based zone that provides a more realistic area for potential price reactions:
// ATR-based zone width calculation
float atr = ta.atr(atrLength)
float zoneHalf = atr * zoneWidth / 2
// Zone boundaries around each level
zoneUpper = level + zoneHalf
zoneLower = level - zoneHalf
This accounts for market noise and helps avoid false breakout signals at exact level prices.
Visual Features
Pivot Lines — Horizontal lines at each calculated level
Zone Fills — Transparent fills between zone boundaries
Level Labels — Labels showing level name and exact price (e.g., "PP 45123.50")
Color Coding :
- Yellow: Pivot Point (PP)
- Red gradient: Resistance levels (R1, R2, R3) - darker = further from PP
- Green gradient: Support levels (S1, S2, S3) - darker = further from PP
Color Scheme
Pivot Color — Default: #FFEB3B (yellow) — Central pivot point
Resistance Color — Default: #FF5252 (red) — R1, R2, R3 levels
Support Color — Default: #4CAF50 (green) — S1, S2, S3 levels
Zone Transparency — 85-90% transparent fills around levels
Dashboard Information
The on-chart table (bottom-right corner) displays:
Selected pivot type (Standard, Fibonacci, etc.)
R3, R2, R1 resistance levels with exact prices
PP (Pivot Point) highlighted
S1, S2, S3 support levels with exact prices
Inputs Overview
Pivot Settings:
Pivot Type — Formula selection (Standard, Fibonacci, Camarilla, Woodie, TD)
Pivot Timeframe — Higher timeframe for OHLC data (default: D = Daily)
ATR Length — Period for zone width calculation (default: 14)
Zone Width — ATR multiplier for zone size (default: 0.5)
Level Display:
Show Pivot (P) — Toggle central pivot line
Show R1/S1 — Toggle first resistance/support levels
Show R2/S2 — Toggle second resistance/support levels
Show R3/S3 — Toggle third resistance/support levels
Show Zones — Toggle ATR-based zone fills
Show Labels — Toggle price labels at each level
Visual Settings:
Pivot/Resistance/Support Colors — Customizable color scheme
Line Width — Thickness of level lines (default: 2)
Extend Lines Right — Project lines forward on chart
Show Dashboard — Toggle the information table
How to Use It
For Intraday Trading:
Use Daily pivots on intraday charts (15m, 1H)
Pivot point often acts as the day's "fair value" reference
Camarilla levels work well for intraday mean-reversion
R1/S1 are the most commonly tested levels
For Swing Trading:
Use Weekly pivots on daily charts
Standard or Fibonacci formulas work well
R2/S2 and R3/S3 become more relevant
Zone boundaries provide realistic entry/exit areas
For Support/Resistance:
R levels above price act as resistance targets
S levels below price act as support targets
Zone boundaries are more realistic than exact lines
Multiple formula confluence adds significance
Alerts Available
DPZ Cross Above Pivot — Price crosses above central pivot
DPZ Cross Below Pivot — Price crosses below central pivot
DPZ Cross Above R1/R2 — Price breaks resistance levels
DPZ Cross Below S1/S2 — Price breaks support levels
Best Practices
Match pivot timeframe to your trading style (Daily for intraday, Weekly for swing)
Use zones instead of exact levels for more realistic expectations
Camarilla is best for mean-reversion; Standard/Fibonacci for breakouts
Combine with other indicators for confirmation
— Made with passion by officialjackofalltrades
Smart Money Fluid [JOAT]
Smart Money Fluid — Accumulation and Distribution Flow Analysis
Smart Money Fluid tracks institutional-style accumulation and distribution patterns using a sophisticated combination of Money Flow Index, Chaikin Money Flow, and VWAP-relative price analysis. It aims to reveal whether larger participants may be accumulating (buying) or distributing (selling)—information that can precede significant price moves.
What Makes This Indicator Unique
Unlike single money flow indicators, Smart Money Fluid:
Combines three different money flow methodologies into one composite signal
Detects divergences between price and money flow automatically
Identifies high-volume conditions that add conviction to signals
Provides both the composite signal and individual component values
Features a momentum histogram showing flow acceleration
What This Indicator Does
Combines multiple money flow indicators into a composite signal (0-100 scale)
Identifies accumulation zones (potential institutional buying) and distribution zones (potential selling)
Detects divergences between price and money flow
Highlights high-volume conditions for stronger signals
Tracks momentum direction within the flow
Provides comprehensive dashboard with all component values
Composite Calculation Explained
The Smart Money Flow composite combines three proven money flow methodologies:
// Component 1: Money Flow Index (MFI) - 40% weight
// Measures buying/selling pressure using price and volume
float mfi = 100 - (100 / (1 + mfRatio))
// Component 2: Chaikin Money Flow (CMF) - 30% weight
// Measures accumulation/distribution based on close position within range
float cmf = sum(mfVolume, length) / sum(volume, length) * 100
// Component 3: VWAP Price Strength - 30% weight
// Measures price position relative to volume-weighted average price
float priceVsVWAP = (close - vwap) / vwap * 100
// Final Composite (scaled to 0-100)
float rawSMF = (mfi * 0.4 + (cmf + 50) * 0.3 + (50 + priceVsVWAP * 5) * 0.3)
float smf = ta.ema(rawSMF, smoothLength)
State Classification
Accumulating (Green Zone) — SMF above accumulation threshold (default: 60). Suggests institutional buying may be occurring.
Distributing (Red Zone) — SMF below distribution threshold (default: 40). Suggests institutional selling may be occurring.
Neutral (Gray Zone) — SMF between thresholds. No clear accumulation or distribution detected.
Divergence Detection
The indicator automatically detects divergences using pivot analysis:
Bullish Divergence — Price makes a lower low while SMF makes a higher low. This suggests selling pressure is weakening despite lower prices—potential reversal signal.
Bearish Divergence — Price makes a higher high while SMF makes a lower high. This suggests buying pressure is weakening despite higher prices—potential reversal signal.
Divergences are marked with "DIV" labels on the chart.
Visual Features
SMF Line with Glow — Main composite line with gradient coloring and glow effect
Signal Line — Slower EMA of SMF for crossover signals
Flow Momentum Histogram — Shows the difference between SMF and signal line with four-color coding:
- Bright green: Positive and accelerating
- Faded green: Positive but decelerating
- Bright red: Negative and accelerating
- Faded red: Negative but decelerating
Zone Backgrounds — Green tint in accumulation zone, red tint in distribution zone
Reference Lines — Dashed lines at accumulation/distribution thresholds, dotted line at 50
Strong Signal Markers — Triangles appear when accumulation/distribution occurs with high volume
Divergence Labels — "DIV" markers when divergences are detected
Color Scheme
Accumulation Color — Default: #00E676 (bright green)
Distribution Color — Default: #FF5252 (red)
Neutral Color — Default: #9E9E9E (gray)
Gradient Coloring — SMF line transitions smoothly between colors based on value
Dashboard Information
The on-chart table (top-right corner) displays:
Current SMF value with state coloring
State classification (ACCUMULATING, DISTRIBUTING, or NEUTRAL)
Flow momentum direction (Up/Down with magnitude)
MFI component value
CMF component value with directional coloring
Volume status (High or Normal)
Active divergence detection (Bullish, Bearish, or None)
Inputs Overview
Calculation Settings:
Money Flow Length — Period for flow calculations (default: 14, range: 5-50)
Smoothing Length — EMA smoothing period (default: 5, range: 1-20)
Divergence Lookback — Bars for pivot detection in divergence analysis (default: 5, range: 2-20)
Sensitivity:
Accumulation Threshold — Level above which accumulation is detected (default: 60, range: 50-90)
Distribution Threshold — Level below which distribution is detected (default: 40, range: 10-50)
High Volume Multiplier — Multiple of average volume for "high volume" classification (default: 1.5x, range: 1.0-3.0)
Visual Settings:
Accumulation/Distribution/Neutral Colors — Customizable color scheme
Show Flow Histogram — Toggle momentum histogram
Show Divergences — Toggle divergence detection and labels
Show Dashboard — Toggle the information table
Show Zone Background — Toggle colored backgrounds in accumulation/distribution zones
Alerts:
Await Bar Confirmation — Wait for bar close before triggering (recommended)
How to Use It
For Trend Confirmation:
Accumulation during uptrends confirms buying pressure
Distribution during downtrends confirms selling pressure
Divergence between price trend and SMF warns of potential reversal
For Reversal Detection:
Bullish divergence at price lows suggests potential bottom
Bearish divergence at price highs suggests potential top
Strong signals (triangles) with high volume add conviction
For Entry Timing:
Enter longs when SMF crosses into accumulation zone
Enter shorts when SMF crosses into distribution zone
Wait for high volume confirmation for stronger signals
Use divergences as early warning for position management
Alerts Available
SMF Accumulation Started — SMF entered accumulation zone
SMF Distribution Started — SMF entered distribution zone
SMF Strong Accumulation — Accumulation with high volume
SMF Strong Distribution — Distribution with high volume
SMF Bullish Divergence — Bullish divergence detected
SMF Bearish Divergence — Bearish divergence detected
Best Practices
High volume during accumulation/distribution adds significant conviction
Divergences are early warnings—don't trade them alone
Use in conjunction with price action and support/resistance
Works best on liquid markets with reliable volume data
This indicator is provided for educational purposes. It does not constitute financial advice. Past performance does not guarantee future results. Always conduct your own analysis and use proper risk management before making trading decisions.
— Made with passion by officialjackofalltrades
Account GuardianAccount Guardian: Dynamic Risk/Reward Overlay
Introduction
Account Guardian is an open-source indicator for TradingView designed to help traders evaluate trade setups before entering positions. It automatically calculates Risk-to-Reward ratios based on market structure, displays visual Stop Loss and Take Profit zones, and provides real-time position sizing recommendations.
The indicator addresses a fundamental question every trader should ask before entering a trade: "Does this setup make mathematical sense?" Account Guardian answers this question visually and numerically, helping traders avoid impulsive entries with poor risk profiles.
Core Functionality
Account Guardian performs four primary functions:
Detects swing highs and swing lows to identify logical stop loss placement levels
Calculates Risk-to-Reward ratios for both long and short setups in real-time
Displays visual SL/TP zones on the chart for immediate trade planning
Computes position sizing based on your account size and risk tolerance
The goal is to provide traders with instant feedback on whether a potential trade meets their minimum risk/reward criteria before committing capital.
How It Works
Swing Detection
The indicator uses pivot point detection to identify recent swing highs and swing lows on the chart. These swing points serve as logical areas for stop loss placement:
For Long Trades: The most recent swing low becomes the stop loss level. Price breaking below this level would invalidate the bullish thesis.
For Short Trades: The most recent swing high becomes the stop loss level. Price breaking above this level would invalidate the bearish thesis.
The swing detection lookback period is configurable, allowing you to adjust sensitivity based on your trading timeframe and style.
It automatically adjusts the tp and sl when it is applied to your chart so it is always moving up and down!
Risk/Reward Calculation
Once swing levels are identified, the indicator calculates:
Entry Price: Current close price (where you would enter)
Stop Loss: Recent swing low (for longs) or swing high (for shorts)
Risk: Distance from entry to stop loss
Take Profit: Entry plus (Risk × Target Multiplier)
R:R Ratio: Reward divided by Risk
The R:R ratio is then evaluated against your configured thresholds to determine if the setup is valid, marginal, or poor.
Visual Elements
SL/TP Zones
When enabled, the indicator draws colored boxes on the chart showing:
Red Zone: Stop Loss area - the region between your entry and stop loss
Green/Gold/Red Zone: Take Profit area - colored based on R:R quality
The color coding provides instant visual feedback:
Green: R:R meets or exceeds your "Good R:R" threshold (default 3:1)
Gold: R:R meets minimum threshold but below "Good" (between 2:1 and 3:1)
Red: R:R below minimum threshold - setup should be avoided
Swing Point Markers
Small circles mark detected swing points on the chart:
Green circles: Swing lows (potential support / long SL levels)
Red circles: Swing highs (potential resistance / short SL levels)
Dashboard Panel
The dashboard in the top-right corner displays comprehensive trade planning information:
R:R Row: Current Risk-to-Reward ratio for long and short setups
Status Row: VALID, OK, BAD, or N/A based on R:R thresholds
Stop Loss Row: Exact price level for stop loss placement
Take Profit Row: Exact price level for take profit placement
Pos Size Row: Recommended position size based on your risk parameters
Risk $ Row: Dollar amount at risk per trade
Position Sizing Logic
The indicator calculates position size using the formula:
Position Size = Risk Amount / Risk per Unit
Where:
Risk Amount = Account Size × (Risk Percentage / 100)
Risk per Unit = Entry Price - Stop Loss Price
For example, with a $10,000 account risking 1% per trade ($100), if your entry is at 100 and stop loss at 98 (risk of 2 per unit), your position size would be 50 units.
Input Parameters
Swing Detection:
Swing Lookback: Number of bars to look back for pivot detection (default: 10). Higher values find more significant swing points but may be slower to update.
Target Multiplier: Multiplier applied to risk to calculate take profit distance (default: 2). A value of 2 means TP is 2× the distance of SL from entry.
Risk/Reward Thresholds:
Minimum R:R: Minimum acceptable Risk-to-Reward ratio (default: 2.0). Setups below this show as "BAD" in red.
Good R:R: Threshold for excellent setups (default: 3.0). Setups at or above this show as "VALID" in green.
Account Settings:
Account Size ($): Your trading account size in dollars (default: 10,000). Used for position sizing calculations.
Risk Per Trade (%): Percentage of account to risk per trade (default: 1.0%). Professional traders typically risk 0.5-2% per trade.
Display:
Show SL/TP Zones: Toggle visibility of the colored zone boxes on chart (default: enabled)
Show Dashboard: Toggle visibility of the information panel (default: enabled)
Analyze Direction: Choose to analyze Long only, Short only, or Both directions (default: Both)
How to Use This Indicator
Basic Workflow:
Add the indicator to your chart
Configure your account size and risk percentage in the settings
Set your minimum and good R:R thresholds based on your trading rules
Look at the dashboard to see current R:R for potential long and short entries
Only consider trades where the status shows "VALID" or at minimum "OK"
Use the displayed SL and TP levels for your order placement
Use the position size recommendation to determine lot/contract size
Interpreting the Dashboard:
VALID (Green): Excellent setup - R:R meets your "Good" threshold. This is the ideal scenario for taking a trade.
OK (Gold): Acceptable setup - R:R meets minimum but isn't optimal. Consider taking if other confluence factors align.
BAD (Red): Poor setup - R:R below minimum threshold. Avoid this trade or wait for better entry.
N/A (Gray): Cannot calculate - usually means no valid swing point detected yet.
Best Practices:
Use this indicator as a filter, not a signal generator. It tells you IF a trade makes sense, not WHEN to enter.
Combine with your existing entry strategy - use Account Guardian to validate setups from other analysis.
Adjust the swing lookback based on your timeframe. Lower timeframes may need smaller lookback values.
Be honest with your account size input - accurate position sizing requires accurate inputs.
Consider the target multiplier carefully. Higher multipliers mean larger potential reward but lower probability of hitting TP.
Alerts
The indicator includes four alert conditions:
Good Long Setup: Triggers when long R:R reaches or exceeds your "Good R:R" threshold
Good Short Setup: Triggers when short R:R reaches or exceeds your "Good R:R" threshold
Bad Long Setup: Triggers when long R:R falls below your minimum threshold
Bad Short Setup: Triggers when short R:R falls below your minimum threshold
These alerts can help you monitor multiple charts and get notified when favorable setups appear.
Technical Implementation
The indicator is built using Pine Script v6 and includes:
Pivot-based swing detection using ta.pivothigh() and ta.pivotlow()
Dynamic box drawing for visual SL/TP zones
Table-based dashboard for clean information display
Color-coded visual feedback system
Persistent variable tracking for swing levels
Code Structure:
// Swing Detection
float swingHi = ta.pivothigh(high, swingLen, swingLen)
float swingLo = ta.pivotlow(low, swingLen, swingLen)
// R:R Calculation for Long
float longSL = recentSwingLo
float longRisk = entry - longSL
float longTP = entry + (longRisk * targetMult)
float longRR = (longTP - entry) / longRisk
// Position Sizing
float riskAmount = accountSize * (riskPct / 100)
float posSize = riskAmount / longRisk
Limitations
The indicator uses historical swing points which may not always represent optimal SL placement for your specific strategy
Position sizing assumes you can trade fractional units - adjust accordingly for instruments with minimum lot sizes
R:R calculations assume linear price movement and don't account for gaps or slippage
The indicator doesn't predict price direction - it only evaluates the mathematical viability of a setup
Swing detection has inherent lag due to the lookback period required for pivot confirmation
Recommended Settings by Trading Style
Scalping (1-5 minute charts):
Swing Lookback: 5-8
Target Multiplier: 1-2
Minimum R:R: 1.5
Good R:R: 2.0
Day Trading (15-60 minute charts):
Swing Lookback: 8-12
Target Multiplier: 2
Minimum R:R: 2.0
Good R:R: 3.0
Swing Trading (4H-Daily charts):
Swing Lookback: 10-20
Target Multiplier: 2-3
Minimum R:R: 2.5
Good R:R: 4.0
Why Risk/Reward Matters
Many traders focus solely on win rate, but profitability depends on the combination of win rate AND risk/reward ratio. Consider these scenarios:
50% win rate with 1:1 R:R = Breakeven (before costs)
50% win rate with 2:1 R:R = Profitable
40% win rate with 3:1 R:R = Profitable
60% win rate with 1:2 R:R = Losing money
Account Guardian helps ensure you only take trades where the math works in your favor, even if you're wrong more often than you're right.
Disclaimer
This indicator is provided for educational and informational purposes only. It is not intended as financial, investment, trading, or any other type of advice or recommendation.
Trading involves substantial risk of loss and is not suitable for all investors. The calculations provided by this indicator are based on historical price data and mathematical formulas that may not accurately predict future price movements.
Position sizing recommendations are estimates based on user inputs and should be verified before placing actual trades. Always consider factors such as leverage, margin requirements, and broker-specific rules when determining actual position sizes.
The Risk-to-Reward ratios displayed are theoretical calculations based on swing point detection. Actual trade outcomes will vary based on market conditions, execution quality, and other factors not captured by this indicator.
Past performance does not guarantee future results. Users should thoroughly test any trading approach in a demo environment before risking real capital. The authors and publishers of this indicator are not responsible for any losses or damages arising from its use.
Always consult with a qualified financial advisor before making investment decisions.
XAU Seasonality + Setup Quality + Month Strength | WarRoomXYZXAU Seasonality Engine is a technical analysis indicator developed for the study of recurring, calendar-based behavior on XAUUSD (Gold).
The tool blends month-of-year seasonality statistics with higher-timeframe context and a setup-quality gate to help users observe when market conditions historically lean strong, weak, or neutral — and how strict trade selection should be during each regime.
Indicator Concept
An indicator for XAUUSD that combines:
1. Seasonality Regime (Month-of-Year Bias)
► Classifies the current month as Strong / Weak / Neutral based on either:
• Preset months (user-defined)
or
• Auto mode (computed from historical monthly performance)
► Strong months suggest a bullish tailwind (not a signal).
► Weak months suggest headwind / caution and require stricter setup quality.
2. Monthly Performance Engine (Under the Hood)
► Uses the symbol’s monthly timeframe data to compute, per calendar month:
• Average monthly return (%)
• Win rate (%) — how often that month closes positive
• Month Strength Score (0–100) — a blended score derived from performance data
► The score is designed to provide a relative strength snapshot of seasonality by month.
3. Month Strength Histogram
► Plots a histogram (0–100) of the current month’s strength score.
• Higher bars = historically stronger month tendency
• Lower bars = historically weaker month tendency
► Optional horizontal reference lines mark “strong” and “weak” zones to make regimes obvious at a glance.
4. Setup Quality Meter (Confluence Filter)
► The indicator calculates a Setup Quality Score (0–100) using market structure and momentum components, such as:
• EMA trend alignment
• Momentum confirmation (EMA fast vs slow)
• Structure break confirmation (BOS)
• Liquidity sweep behavior
• Candle confirmation logic
► This score is intended as a trade-selectivity filter , not a trade executor.
5. Adaptive Rules for Weak Months (Strict Mode)
► When the indicator detects a weak seasonal regime, conditions automatically tighten:
• The A+ threshold increases (adaptive thresholding)
• Optional rule: Weak months require BOS + Sweep + FVG simultaneously before any A+ condition is considered valid
This forces the user into “higher-quality-only” behavior during historically weaker seasonal periods.
🔹1 Visual Components Included
• Seasonality regime label (Strong / Weak / Neutral)
• Optional background shading based on regime
• Month Strength Score histogram (0–100)
• Current month stats: Avg return + win rate
• Setup Quality Meter value (0–100)
• Adaptive A+ threshold display
• Weak-month confluence gate status (BOS / Sweep / FVG pass/fail)
• Optional alerts when strict criteria are met
➣What Means in the XAU Indicator
🔹 Definition (in THIS indicator)
Win Rate = the percentage of historical months that closed positive for the same calendar month.
It is NOT:
trade win rate ❌
signal accuracy ❌
It is a s tatistical seasonality metric .
How It’s Calculated
For each calendar month (January, February, etc.), the indicator:
1.Looks at historical monthly candles (Monthly timeframe).
2. Counts how many times that month:
•Closed higher than it opened (or higher than previous month close).
3. Divides:
Number of positive months
÷
Total number of observed months
× 100
Example: September
If over the last 20 years:
September closed green 14 times
September closed red 6 times
Then:
Win Rate = (14 / 20) × 100 = 70%
That’s what you see as in the dashboard.
What the Win Rate Is Used For
1️⃣ Part of the Month Strength Score
The indicator blends:
•Average Monthly Return (%) → measures magnitude
•Win Rate (%) → measures consistency
Combined into:
Month Strength Score (0–100)
This avoids a common trap:
•A month with 1 huge rally but many losses ≠ reliable
•A month with steady positive closes = higher quality environment
What Win Rate Tells You
High Win Rate (e.g. 65–75%)
•Gold more often closes higher in this month
•Continuation is statistically more likely
•Pullbacks are more likely to resolve in trend direction
Low Win Rate (e.g. 35–45%)
•Gold more often fails to close higher
•More chop, deeper retracements, false breakouts
•Continuation trades statistically struggle
What It Does NOT Tell You
🚫 It does NOT mean:
•“You will win 70% of your trades”
•“Every setup in this month works”
•“Direction is guaranteed”
Seasonality is context, not prediction.
Why This Is Powerful When Combined With Your System
On its own, win rate is just data.
But in your indicator, it’s used to:
•🔒 Raise the A+ threshold in weak months
•🧠 Force BOS + Sweep + FVG confluence
•❌ Block marginal setups automatically
So instead of guessing:
-“Why is gold so choppy this month?”
You know:
-“This month historically underperforms SO I must be stricter.”
➣What Means in the XAU Seasonality Indicator
🔹 Definition (in THIS indicator)
Avg Monthly Return = the average percentage gain or loss of XAUUSD for a specific calendar month, calculated across many years.
It measures magnitude , not frequency.
It is NOT:
•trade profit ❌
•expected return for the next month ❌
•guaranteed performance ❌
It is a historical seasonality tendency.
How It’s Calculated
For each calendar month (January, February, etc.), the indicator:
1.Takes every historical occurrence of that month.
2.Calculates the percentage change of the monthly candle:
(Monthly Close − Previous Monthly Close)
÷ Previous Monthly Close × 100
3. Adds all those percentage changes together.
4. Divides by the total number of observations.
Example: September
Assume over 20 years:
+2.4%, +1.1%, −0.6%, +3.0%, +1.8%, ...
If the sum of all September returns = +28% across 20 years:
Avg Monthly Return = +1.40%
That’s the number displayed in the indicator.
What Avg Monthly Return Is Used For
1️⃣ Measuring Strength of Movement
•Win Rate → “How often does it close green?”
•Avg Monthly Return → “How big are the moves when it works?”
Both are needed.
A month can:
•Win often but move very little
•Move a lot but only occasionally
The indicator combines both to avoid misleading conclusions.
How to Interpret Avg Monthly Return
Positive Avg Return (e.g. +0.8% to +2.0%)
•Gold tends to expand during this month
•Continuation phases are more likely
•Pullbacks are often absorbed
Near-Zero Avg Return (e.g. −0.2% to +0.2%)
•Market is statistically balanced
•Expect chop, rotations, false breaks
•Continuation is less reliable
Negative Avg Return (e.g. −0.5% or worse)
•Downward pressure or heavy mean reversion
•Rallies often fade
•Risk of aggressive stop hunts
What Avg Monthly Return Does NOT Mean
🚫 It does NOT mean:
•“Price will move +1.4% this month”
•“You should buy because the number is positive”
•“This is a guaranteed edge”
It describes historical behavior, not future certainty.
Why Avg Monthly Return Matters More Than People Think
Two months can have the same win rate but behave very differently:
Example:
Month Win Rate Avg Return Reality
Month A 65% +0.2% Small, choppy wins
Month B 55% +1.6% Fewer wins, but strong expansions
Your indicator would rank Month B as stronger, which is correct for continuation-based strategies.
How It Feeds the Month Strength Score
The indicator blends:
•60% Avg Monthly Return (normalized)
•40% Win Rate
This means:
•Big moves matter more than small consistency
•But consistency still matters enough to prevent distortion
Result:
Month Strength Score (0–100)
Which is then used to:
•tighten or relax A+ thresholds
•activate weak-month strict rules
•control trade frequency
🔹2. Intended Use
The indicator is designed as a discretionary analysis tool to support study of:
• seasonal bias and calendar tendencies
• relative strength/weakness across months
• how strict trade selection should be across different regimes
• confluence behavior when seasonal conditions are unfavorable
The tool does not generate forecasts, does not guarantee outcomes, and should not be relied upon as a stand-alone decision mechanism.
🔹3.How to Use XAU Seasonality Engine
Recommended charts: XAUUSD, intraday (5m–15m) with a HTF context (1H–4H).
1. Identify the Seasonal Regime
• Strong month → you can allow more continuation bias (still require structure).
• Neutral month → trade normally, standard criteria.
• Weak month → tighten selection, demand clean A+ conditions only.
2. Read the Month Strength Histogram
• If the score is high (e.g., 70+), the month has historically shown stronger tendency.
• If the score is low (e.g., 40 and below), expect slower conditions, deeper pullbacks, or more chop — and reduce marginal trades.
3. Use the Setup Quality Meter as the Gate
► In normal/strong months:
• A+ threshold is moderate (e.g., 70)
► In weak months:
• A+ threshold is higher (e.g., 80+)
• Optional strict mode: must also pass BOS + Sweep + FVG alignment
4. Example Trade Logic (Framework, Not Signals)
► Bullish framework in a Strong Month:
• Seasonal regime = Strong (tailwind)
• Structure supports bullish continuation (trend alignment)
• Sweep occurs into demand / liquidity grab
• Setup Quality reaches A+ threshold
• Entry: confirmation candle or retrace to key level
• SL: beyond sweep low / invalidation
• TP: nearest liquidity / prior highs / HTF level
► Weak Month rule-set (Strict Mode):
• Seasonal regime = Weak (headwind)
• Only consider trades if:
✅ BOS confirms direction
✅ Sweep occurs and rejects cleanly
✅ FVG exists recently (or is mitigated if you choose that model)
✅ Setup Quality exceeds the elevated adaptive threshold
If any one is missing → no trade
This is not meant to “predict” gold — it’s meant to enforce discipline when seasonality historically underperforms.
🔹4.Limitations and User Responsibility
► The indicator does not represent financial advice or imply performance expectations.
► Seasonality is statistical tendency, not certainty — macro conditions can override it.
► Results vary by broker feed, timeframe, and settings.
► Users should test thoroughly in simulation before applying to live markets.
► All trading decisions, risk management, and execution remain solely the responsibility of the user.
🔹5. Alerts
Optional alerts can notify when:
• a new month begins and the seasonal regime changes
• A+ criteria are met
• weak-month strict conditions pass (BOS + Sweep + FVG)
Alerts are informational only and do not constitute actionable recommendations.
Disclaimer
This script is provided for informational and educational purposes only . It does not provide financial, investment, or trading advice, and it does not guarantee profits or future performance. All decisions made based on this script are solely the responsibility of the user.
This script does not execute trades, manage risk, or replace the need for trader discretion. Market behavior can change quickly, and past behavior detected by the script does not ensure similar future outcomes.
Users should test the script on demo or simulation environments before applying it to live markets and must maintain full responsibility for their own risk management, position sizing, and trade execution.
Trading involves risk, and losses can exceed deposits. By using this script, you acknowledge that you understand and accept all associated risks.
Multi-Fractal Trading Plan [Gemini] v22Multi-Fractal Trading Plan
The Multi-Fractal Trading Plan is a quantitative market structure engine designed to filter noise and generate actionable daily strategies. Unlike standard auto-trendline indicators that clutter charts with irrelevant data, this system utilizes Fractal Geometry to categorize market liquidity into three institutional layers: Minor (Intraday), Medium (Swing), and Major (Institutional).
This tool functions as a Strategic Advisor, not just a drawing tool. It calculates the delta between price and structural pivots in real-time, alerting you when price enters high-probability "Hot Zones" and generating a live trading plan on your dashboard.
Core Features
1. Three-Tier Fractal Engine The algorithm tracks 15 distinct fractal lengths simultaneously, aggregating them into a clean hierarchy:
Minor Structure (Thin Lines): Captures high-frequency volatility for scalping.
Medium Structure (Medium Lines): Identifies significant swing points and intermediate targets.
Major Structure (Thick Lines): Maps the "Institutional" defense lines where trend reversals and major breakouts occur.
2. The Strategic Dashboard A dynamic data panel in the bottom-right eliminates analysis paralysis:
Floor & Ceiling Targets: Displays the precise price levels of the nearest Support and Resistance.
AI Logic Output: The script analyzes market conditions to generate a specific command, such as "WATCH FOR BREAKOUT", "Near Lows (Look Long?)", or "WAIT (No Setup)".
3. "Hot Zone" Detection Never miss a critical test of structure.
Dynamic Alerting: When price trades within 1% (adjustable) of a Major Trend Line, the indicator’s labels turn Bright Yellow and flash a warning (e.g., "⚠️ WATCH: MAJOR RES").
Focus: This visual cue highlights the exact moment execution is required, reducing screen fatigue.
4. The Quant Web & Markers
Pivot Validation: Deep blue fractal markers (▲/▼) identify the exact candles responsible for the structure.
Inter-Timeframe Web: Faint dotted lines connect Minor pivots directly to Major pivots, visualizing the "hidden" elasticity between short-term noise and long-term trend anchors.
5. Enterprise Stability Engine Engineered to solve the "Vertical Line" and "1970 Epoch" glitches common in Pine Script trend indicators. This engine is optimized for Futures (NQ/ES), Forex, and Crypto, ensuring stability across all timeframes (including gaps on ETH/RTH charts).
Operational Guide
Consult the Dashboard: Before executing, check the "Strategy" output. If it says "WAIT", the market is in chop. If it says "WATCH FOR BOUNCE", prepare your entry criteria.
Monitor Hot Zones: A Yellow Label indicates price is testing a major liquidity level. This is your signal to watch for a rejection wick or a high-volume breakout.
Utilize the Web: Use the faint web lines to find "confluence" where a short-term pullback aligns with a long-term trend line.
Configuration
Show History: Toggles "Ghost Lines" (Blue) to display historical structure and broken trends.
Fractal Points: Toggles the geometric pivot markers.
Hot Zone %: Adjusts the sensitivity of the Yellow Warning system (Default: 1%).
Max Line Length: A noise filter that removes stale or "spiderweb" lines that are no longer statistically relevant.
Iridescent Liquidity Prism [JOAT]Iridescent Liquidity Prism | Peer Momentum HUD
A multi-layered order-flow indicator that combines microstructure analysis, smart-money footprint detection, and intermarket momentum signals. The script uses dynamic color-shifting themes to visualize liquidity patterns, structure, and peer momentum data directly on the chart.
There is so much to choose from inside the settings, if you think it's a mess on the chart it's because you have to personally customize it based on your needs...
Core Functionality
The indicator calculates and displays several analytical layers simultaneously:
Order-Flow Imbalance (OFI): Calculates buy vs. sell volume pressure using volume-weighted price distribution within each bar. Uses an EMA filter (default: 55 periods) to smooth the signal. Values are normalized using standard deviation to identify significant imbalances.
Smart Money Footprints: Detects accumulation and distribution zones by comparing volume rate of change (ROC) against price ROC. When volume ROC exceeds a threshold (default: 65%) and price ROC is positive, accumulation is detected. When volume ROC is high but price ROC is negative, distribution is detected.
Fractal Structure Mapping: Identifies pivot highs and lows using a fractal detection algorithm (default: 5-bar period). Maintains a rolling window of recent structure points (default: 4 levels) and draws connecting lines to show trend structure.
Fair Value Gap (FVG) Detection: Automatically detects price gaps where three consecutive candles create an imbalance. Bullish FVGs occur when the current low exceeds the high two bars ago. Bearish FVGs occur when the current high is below the low two bars ago. Gaps persist for a configurable duration (default: 320 bars) and fade when price fills the gap.
Liquidity Void Detection: Identifies candles where the high-low range exceeds an ATR threshold (default: 1.7x ATR) while volume is below average (default: 65% of 20-bar average). These conditions suggest areas where liquidity may be thin.
Price/Volume Divergence: Uses linear regression to detect when price trend direction disagrees with volume trend direction. A divergence alert appears when price is trending up while volume is trending down, or vice versa.
Peer Momentum Heatmap (PMH): Calculates composite momentum scores for up to 6 symbols across 4 timeframes. Each score combines RSI (default: 14 periods) and StochRSI (default: 14 periods, 3-bar smooth) to create a momentum composite between -1 and +1. The highest absolute momentum score across all combinations is displayed in the HUD.
Custom settings using Fractal Pivots, Skeleton Structure, Pulse Liquidity Voids, Bottom Colorful HeatMaps, and Iridescent Field.
---
Visual Components
Spectrum Aura Glow: ATR-weighted bands (default: 0.25x ATR) that expand and contract around price action, indicating volatility conditions. The thickness adapts to market volatility.
Chromatic Flow Trail: A blended line combining EMA and WMA of price (default: 8-period EMA blended with WMA at 65% ratio). The trail uses gradient colors that shift based on a phase oscillator, creating an iridescent effect.
Volume Heat Projection: Creates horizontal volume profile bands at price levels (default: 14 levels). Scans recent bars (default: 150 bars) to calculate volume concentration. Each level is colored based on its volume density relative to the maximum volume level.
Structure Skeleton: Dashed lines connecting fractal pivot points. Uses two layers: a primary line (2-3px width) and an optional glow overlay (4-5px width) for enhanced visibility.
Fractal Markers: Diamond shapes placed at pivot high and low points. Color-coded: primary color for highs, secondary color for lows.
Iridescent Color Themes: Five color themes available: Iridescent (default), Pearlescent, Prismatic, ColorShift, and Metallic. Colors shift dynamically using a phase oscillator that cycles through the color spectrum based on bar index and a speed multiplier (default: 0.35).
---
HUD Console Metrics
The right-side HUD displays seven key metrics:
Flow: Shows OFI status: ▲ FLOW BUY when normalized OFI exceeds imbalance threshold (default: 2.2), ▼ FLOW SELL when below -2.2, or ◆ FLOW BAL when balanced.
Struct: Structure trend bias: ▲ STRUCT BULL when microtrend > 2, ▼ STRUCT BEAR when < -2, or ◆ STRUCT RANGE when neutral.
Smart$: Institutional activity: ◈ ACCUM when smart money index = 1, ◈ DISTRIB when = -1, or ○ IDLE when inactive.
Liquid: Liquidity state: ⚡ VOID when a liquidity void is detected, or ● NORMAL otherwise.
Diverg: Divergence status: ⚠ ALERT when price/volume divergence detected, or ✓ CLEAR when aligned.
PMH: Peer Momentum Heatmap status: Shows dominant timeframe and momentum score. Displays 🪩 for bull surge (above 0.55 threshold) or 🧨 for bear surge (below -0.55).
FVG: Fair Value Gap status: Shows active gap count or CLEAR when no gaps exist. Displays GAP LONG when bullish gap detected, GAP SHORT when bearish gap detected.
Pearlscent Color with Volume Heatmap.
Parameters and Settings
Microstructure Engine:
Analysis Depth: 20-250 bars (default: 55) - Controls OFI smoothing period
Liquidity Threshold ATR: 1.0-4.0 (default: 1.7) - Multiplier for void detection
Imbalance Ratio: 1.5-6.0 (default: 2.2) - Standard deviations for OFI significance
Smart Money Layer:
Smart Money Window: 10-150 bars (default: 24) - Period for ROC calculations
Accumulation Threshold: 40-95% (default: 65%) - Volume ROC threshold
Structural Mapping:
Fractal Pivot Period: 3-15 bars (default: 5) - Period for pivot detection
Structure Memory: 2-8 levels (default: 4) - Number of structure points to track
Volume Heat Projection:
Heat Map Lookback: 60-400 bars (default: 150) - Bars to analyze for volume profile
Heat Map Levels: 5-30 levels (default: 14) - Number of price level bands
Heat Map Opacity: 40-100% (default: 92%) - Transparency of heat map boxes
Heat Map Width Limit: 6-80 bars (default: 26) - Maximum width of heat map boxes
Heat Map Visibility Threshold: 0.0-0.5 (default: 0.08) - Minimum density to display
Iridescent Enhancements:
Visual Theme: Iridescent, Pearlescent, Prismatic, ColorShift, or Metallic
Color Shift Speed: 0.05-1.00 (default: 0.35) - Speed of color phase oscillation
Aura Thickness (ATR): 0.05-1.0 (default: 0.25) - Multiplier for aura band width
Chromatic Trail Length: 2-50 bars (default: 8) - Period for trail calculation
Trail Blend Ratio: 0.1-0.95 (default: 0.65) - EMA/WMA blend percentage
FVG Persistence: 50-600 bars (default: 320) - Bars to keep FVG boxes active
Max Active FVG Boxes: 10-200 (default: 40) - Maximum boxes on chart
FVG Base Opacity: 20-95% (default: 80%) - Transparency of FVG boxes
Peer Momentum Heatmap:
Peer Symbols: Comma-separated list of up to 6 symbols (e.g., "BTCUSD,ETHUSD")
Peer Timeframes: Comma-separated list of up to 4 timeframes (default: "60,240,D")
PMH RSI Length: 5-50 periods (default: 14)
PMH StochRSI Length: 5-50 periods (default: 14)
PMH StochRSI Smooth: 1-10 periods (default: 3)
Super Momentum Threshold: 0.2-0.95 (default: 0.55) - Threshold for surge detection
Clarity & Readability:
Liquidity Void Opacity: 5-90% (default: 30%)
Smart Money Footprint Opacity: 5-90% (default: 35%)
HUD Background Opacity: 40-95% (default: 70%)
Iridescent Field:
Field Opacity: 20-100% (default: 86%) - Background color intensity
Field Smooth Length: 10-200 bars (default: 34) - Smoothing for background gradient
---
Alerts
The indicator provides seven alert conditions:
Liquidity Void Detected - Triggers when void conditions are met
Strong Order Flow - Triggers when normalized OFI exceeds imbalance ratio
Smart Money Activity - Triggers when accumulation or distribution detected
Price/Volume Divergence - Triggers when divergence conditions occur
Structure Shift - Triggers when structure polarity changes significantly
PMH Bull Surge - Triggers when PMH exceeds positive threshold (if enabled)
PMH Bear Surge - Triggers when PMH exceeds negative threshold (if enabled)
Bull/Bear Prismatic FVG - Triggers when new FVG is detected (if FVG display enabled)
---
Usage Considerations
Performance may vary on lower timeframes due to the volume heat map calculations scanning multiple bars. Consider reducing heat map lookback or levels if experiencing slowdowns.
The PMH feature requires data requests to other symbols/timeframes, which may impact performance. Limit the number of peer symbols and timeframes for optimal performance.
FVG boxes automatically expire after the persistence period to prevent chart clutter. The maximum box limit (default: 40) prevents excessive memory usage.
Color themes affect all visual elements. Choose a theme that provides good contrast with your chart background.
The indicator is designed for overlay display. All visual elements are positioned relative to price action.
Structure lines are drawn dynamically as new pivots form. On fast-moving markets, structure may update frequently.
Volume calculations assume typical volume data availability. Symbols without volume may show incomplete data for volume-dependent features.
---
Technical Notes
Built on Pine Script v6 with dynamic request capability for PMH functionality.
Uses exponential moving averages (EMA) and weighted moving averages (WMA) for trail calculations to balance responsiveness and smoothness.
Volume profile calculation uses price level buckets. Higher levels provide finer granularity but require more computation.
Iridescent color engine uses a phase oscillator with sine wave calculations for smooth color transitions.
Box management includes automatic cleanup of expired boxes to maintain performance.
All visual elements use color gradients and transparency for smooth blending with price action.
---
Customization Examples
Intraday Scalping Setup:
Analysis Depth: 30 bars
Heat Map Lookback: 100 bars
FVG Persistence: 150 bars
PMH Window: 15 bars
Fast color shift speed: 0.5+
Macro Structure Tracking:
Analysis Depth: 100+ bars
Heat Map Lookback: 300+ bars
FVG Persistence: 500+ bars
Structure Memory: 6-8 levels
Slower color shift speed: 0.2
---
Limitations
Volume heat map calculations may be computationally intensive on lower timeframes with high lookback values.
PMH requires valid symbol names and accessible timeframes. Invalid symbols or timeframes will return no data.
FVG detection requires at least 3 bars of history. Early bars may not show FVG boxes.
Structure lines connect points but do not predict future structure. They reflect historical pivot relationships.
Color themes are aesthetic choices and do not affect calculation logic.
The indicator does not provide trading signals. All visual elements are analytical tools that require interpretation in context of market conditions.
Open Source
This indicator is open source and available for modification and distribution. The code is published with Pine Script v6 compliance. Users are free to customize parameters, modify calculations, and adapt the visual elements to their trading needs.
For questions, suggestions, or anything please talk to me in private messages or comments below!
Would love to help!
- officialjackofalltrades
Adaptive Z-Score Oscillator [QuantAlgo]🟢 Overview
The Adaptive Z-Score Oscillator transforms price action into statistical significance measurements by calculating how many standard deviations the current price deviates from its moving average baseline, then dynamically adjusting threshold levels based on historical distribution patterns. Unlike traditional oscillators that rely on fixed overbought/oversold levels, this indicator employs percentile-based adaptive thresholds that automatically calibrate to changing market volatility regimes and statistical characteristics. By offering both adaptive and fixed threshold modes alongside multiple moving average types and customizable smoothing, the indicator provides traders and investors with a robust framework for identifying extreme price deviations, mean reversion opportunities, and underlying trend conditions through the visualization of price behavior within a statistical distribution context.
🟢 How It Works
The indicator begins by establishing a dynamic baseline using a user-selected moving average type applied to closing prices over the specified length period, then calculates the standard deviation to measure price dispersion:
basis = ma(close, length, maType)
stdev = ta.stdev(close, length)
The core Z-Score calculation quantifies how many standard deviations the current price sits above or below the moving average basis, creating a normalized oscillator that facilitates cross-asset and cross-timeframe comparisons:
zScore = stdev != 0 ? (close - basis) / stdev : 0
smoothedZ = ma(zScore, smooth, maType)
The adaptive threshold mechanism employs percentile calculations over a historical lookback period to determine statistically significant extreme zones. Rather than using fixed levels like ±2.0, the indicator identifies where a specified percentage of historical Z-Score readings have fallen, automatically adjusting to market regime changes:
upperThreshold = adaptive ? ta.percentile_linear_interpolation(smoothedZ, percentilePeriod, upperPercentile) : fixedUpper
lowerThreshold = adaptive ? ta.percentile_linear_interpolation(smoothedZ, percentilePeriod, lowerPercentile) : fixedLower
The visualization architecture creates a four-tier coloring system that distinguishes between extreme conditions (beyond the adaptive thresholds) and moderate conditions (between the midpoint and threshold levels), providing visual gradation of statistical significance through opacity variations and immediate recognition of distribution extremes.
🟢 How to Use This Indicator
▶ Overbought and Oversold Identification:
The indicator identifies potential overbought conditions when the smoothed Z-Score crosses above the upper threshold, indicating that price has deviated to a statistically extreme level above its mean. Conversely, oversold conditions emerge when the Z-Score crosses below the lower threshold, signaling statistically significant downward deviation. In adaptive mode (default), these thresholds automatically adjust to the asset's historical behavior, i.e., during high volatility periods, the thresholds expand to accommodate wider price swings, while during low volatility regimes, they contract to capture smaller deviations as significant. This dynamic calibration reduce false signals that plague fixed-level oscillators when market character shifts between volatile and ranging conditions.
▶ Mean Reversion Trading Applications:
The Z-Score framework excels at identifying mean reversion opportunities by highlighting when price has stretched too far from its statistical equilibrium. When the oscillator reaches extreme bearish levels (below the lower threshold with deep red coloring), it suggests price has become statistically oversold and may snap back toward the mean, presenting potential long entry opportunities for mean reversion traders. Symmetrically, extreme bullish readings (above the upper threshold with bright green coloring) indicate potential short opportunities or long exit points as price becomes statistically overbought. The moderate zones (lighter colors between midpoint and threshold) serve as early warning areas where traders can prepare for potential reversals, while exits from extreme zones (crossing back inside the thresholds) often provide confirmation that mean reversion is underway.
▶ Trend and Distribution Analysis:
Beyond discrete overbought/oversold signals, the histogram's color pattern and shape reveal the underlying trend structure and distribution characteristics. Sustained periods where the Z-Score oscillates primarily in positive territory (green bars) indicate a bullish trend where price consistently trades above its moving average baseline, even if not reaching extreme levels. Conversely, predominant negative readings (red bars) suggest bearish trend conditions. The distribution shape itself provides insight into market behavior, e.g., a narrow, centered distribution clustering near zero indicates tight ranging conditions with price respecting the mean, while a wide distribution with frequent extreme readings reveals volatile trending or choppy conditions. Asymmetric distributions skewed heavily toward one side demonstrate persistent directional bias, whereas balanced distributions suggest equilibrium between bulls and bears.
▶ Built-in Alerts:
Seven alert conditions enable automated monitoring of statistical extremes and trend transitions. Enter Overbought and Enter Oversold alerts trigger when the Z-Score crosses into extreme zones, providing early warnings of potential reversal setups. Exit Overbought and Exit Oversold alerts signal when price begins reverting from extremes, offering confirmation that mean reversion has initiated. Zero Cross Up and Zero Cross Down alerts identify transitions through the neutral line, indicating shifts between above-mean and below-mean price action that can signal trend changes. The Extreme Zone Entry alert fires on any extreme threshold penetration regardless of direction, allowing unified monitoring of both overbought and oversold opportunities.
▶ Color Customization:
Six visual themes (Classic, Aqua, Cosmic, Ember, Neon, plus Custom) accommodate different chart backgrounds and aesthetic preferences, ensuring optimal contrast and readability across trading platforms. The bar transparency control (0-90%) allows fine-tuning of visual prominence, with minimal transparency creating bold, attention-grabbing bars for primary analysis, while higher transparency values produce subtle background context when using the oscillator alongside other indicators. The extreme and moderate zone coloring system uses automatic opacity variation to create instant visual hierarchy, with darkest colors highlight the most statistically significant deviations demanding immediate attention, while lighter shades mark developing conditions that warrant monitoring but may not yet justify action. Optional candle coloring extends the Z-Score color scheme directly to the price candles on the main chart, enabling traders to instantly recognize statistical extremes and trend conditions without needing to reference the oscillator panel, creating a unified visual experience where both price action and statistical analysis share the same color language.
Liquidity Entry Triggers (4-Model System) | WarRoomXYZLiquidity Entry Triggers is an open-source, price-action-based analytical framework designed to highlight recurring institutional liquidity behaviors that appear across all liquid markets.
The script focuses on how and where liquidity is taken, rather than attempting to predict direction using oscillators or lagging indicators.
It is optimized for XAUUSD, FX pairs, indices, and crypto , particularly on 1m–15m timeframes where session behavior and liquidity reactions are most visible.
This tool is not a buy/sell signal generator .
It provides contextual entry zones based on structural liquidity logic, allowing traders to apply their own execution rules.
Core Philosophy
Markets move because of:
•Trapped traders
•Forced liquidations
•Session-based liquidity cycles
•Reactions at prior institutional participation zones
This script visualizes four repeatable entry triggers that emerge from those mechanisms.
🔹 1. Failed Breakout / Trapped Trader Model
When price breaks a clearly defined range high or low, breakout traders often enter expecting continuation.
If price fails to hold outside the range and closes back inside, those traders become trapped.
The script detects:
•Breaks beyond recent highs/lows
•Immediate rejection back into the range
•Structural failure of momentum
These conditions frequently lead to mean reversion or reversal moves as trapped traders exit and fuel movement in the opposite direction.
Markers are plotted at the point of failure to highlight potential trap zones.
🔹 2. Liquidation Flush Detection
Sharp impulsive candles with abnormally large wicks often represent liquidation cascades rather than healthy trend continuation.
The script identifies liquidation behavior by measuring:
•Wick-to-body imbalance
•Sudden expansion followed by rejection
•Temporary price inefficiencies
These flushes commonly occur near:
•Session highs/lows
•Range extremes
•Trend exhaustion points
Such events often lead to rebalance moves , where price partially or fully fills the wick.
🔹 3. Orderblock Reaction Zones
Orderblocks represent areas where heavy participation occurred before a strong displacement move.
The script highlights:
•Clean bullish and bearish orderblock structures
•Zones formed during consolidation prior to expansion
•Areas likely to be defended when revisited
Orderblocks with minimal noise and clean departure are prioritized, as they often reflect institutional positioning rather than retail activity.
These zones are intended as reaction areas , not automatic entry signals.
🔹 4. London Session Liquidity Sweep Model
The London session frequently establishes the initial daily high or low.
Later in the session or during New York, price often:
•Sweeps internal liquidity around that level
•Rejects after the sweep
•Continues with the higher-timeframe bias
The script monitors London session behavior and marks:
•Liquidity runs above/below London highs and lows
•Rejections back inside the prior structure
This model is especially effective when combined with broader daily context.
🔹4. How the Components Work Together
The framework is designed as a context stack , not a checklist of signals:
Liquidity Event → Location → Timing → Trader Execution
Each model reinforces the others:
•Failed breakouts often occur after liquidity sweeps
•Liquidation wicks frequently form near orderblocks
•London sweeps often trigger failed momentum moves
•Confluence increases probability, not certainty
🔹 Practical Usage Guide
✔ Identify context
Determine whether price is approaching a range extreme, session level, or prior participation zone.
✔ Wait for a liquidity event
Look for a sweep, failed breakout, or liquidation wick.
✔ Observe reaction
Rejection, displacement, or reclaim behavior provides confirmation.
✔ Execute manually
Stops are commonly placed beyond the liquidity extreme.
Targets are typically internal liquidity, prior highs/lows, or imbalance zones.
The indicator does not manage trades or enforce rules.
Execution and risk management remain the trader’s responsibility.
🔹 5. Originality & Design Notes
This script does not replicate or bundle existing indicators.
It introduces:
•A multi-model liquidity entry framework
•Structural failed breakout detection
•Wick-based liquidation imbalance logic
•Session-aware liquidity sweep visualization
•A unified, minimal, non-lagging design
All concepts are based on observable market behavior and integrated into a single analytical tool.
🔹 6. Suitable Markets & Timeframes
Works best on:
•XAUUSD
•Major FX pairs
•Indices
•Liquid crypto markets
Recommended timeframes:
•1m
•5m
•15m
•30m
🔹7. Limitations & Notes
•This is an analytical framework , not a trading system
•All markings are confirmed at candle close (non-repainting)
•No open interest or order flow data is used
•Results depend on user interpretation and execution
•Best used alongside session bias and higher-timeframe structure
Disclaimer
This script is provided for educational and informational purposes only.
It does not constitute financial advice, investment advice, or a recommendation to buy or sell any instrument.
Trading involves risk, and losses can exceed initial deposits.
The author assumes no responsibility for trading decisions made using this tool.
Users are strongly encouraged to test this script in demo or simulation environments and to apply proper risk management, position sizing, and personal discretion at all times.
By using this script, you acknowledge and accept all associated risks.
Session Sweep System – WarRoomXYZ V1WarRoom Session Sweep System v1 is a open-source institutional trading framework built to identify liquidity behavior across Asia, London, and New York sessions.
It combines session-based liquidity mapping, sweep detection, daily expansion modeling, and trend confirmation into a unified, timing-driven system optimized for XAUUSD, FX pairs, indices, and any instrument with session-dependent volatility.
This tool does not attempt to predict direction with arbitrary oscillators.
Instead, it focuses on the underlying market mechanisms that drive price:
liquidity, timing, expansion, and trend alignment.
Below is a detailed explanation of what the script does, how its components work, and how traders can use it effectively.
🔹 1. Session Liquidity Mapping
The script automatically identifies the Asia (00:00–06:00 GMT), London (07:00–12:00 GMT), and New York (13:00–17:00 GMT) sessions and builds real-time session ranges.
Each session creates a liquidity pool.
Trading institutions frequently sweep the high or low of one session before delivering the real move in the next session.
This script captures that behavior by:
►Drawing session range boxes
►Tracking previous session highs/lows
►Highlighting high-probability sweep locations
These ranges are essential reference points for timing entries and exits.
🔹 2. Liquidity Sweep Detection (Buy & Sell Sweeps)
The indicator identifies when price runs a previous session high/low and rejects back inside the range, which is commonly interpreted as a liquidity sweep.
The following sweep types are monitored:
►London sweeping Asia
►New York sweeping London
►Asia sweeping New York
►Daily sweep of PDH/PDL
Sweeps signal that liquidity has been collected and that a potential reversal or continuation is likely.
These are marked clearly on the chart for real-time decision-making.
🔹 3. Killzone Timing Model (GMT Time)
Market manipulation and expansion often occur during specific time windows.
The script highlights these institutional killzones:
►London Killzone: 07:00–10:00 GMT
►New York Killzone: 13:30–15:30 GMT
►NY PM Session: 19:00–21:00 GMT
Sweeps occurring inside these windows carry a significantly higher probability.
The timing layer helps filter out low-quality setups.
🔹 4. Daily Range & ADR Expansion Engine
A dedicated panel displays:
►Current day range
►ADR (Average Daily Range)
►Expansion stage (Early / Developed / Extended)
►PDH/PDL swept or intact
►Overall session bias
This allows traders to understand whether the daily move is likely to continue or reverse.
For example:
►Early expansion → trend continuation likely
►Extended expansion → reversal setups become more probable
This is useful for intraday targets and risk management.
🔹 5. MA Cloud Trend Model (Fast/Slow Structure)
To align liquidity behavior with directional conviction, the script includes a configurable MA engine:
►Fast & slow MA
►MA cloud
►Slope-based trend coloring
►Trend background
►MA cross alerts
The cloud provides trend confirmation without relying on oscillators.
Trades are higher quality when the sweep direction aligns with the MA trend.
🔹 6. How the Components Work Together
The script integrates several institutional concepts into one coherent model:
►Sessions define liquidity pools
►Sweeps identify stop-hunts and reversals
►Killzones define optimal timing
►MA Cloud confirms directional bias
►ADR engine indicates expansion potential
This creates a structured framework:
Sweep → Timing → Trend → Expansion → Execution
Each component strengthens the others, forming a robust decision-making model.
🔹 7. How to Use the Indicator (Practical Guide)
✔ Look for a sweep of a previous session level
When price runs a session high/low and closes back inside, liquidity has likely been collected.
✔ Confirm timing
Sweeps inside London or NY killzones tend to produce the strongest moves.
✔ Confirm trend
Use MA cloud direction and slope:
►Cloud green → long setups preferred
►Cloud red → short setups preferred
✔ Check ADR panel
If the day has already expanded significantly, reversal setups are more likely.
If expansion is still early, continuation setups are favored.
✔ Plan your trade
Common targets include:
►Opposite side of session range
►ADR High/Low
►PDH/PDL
Stops are typically placed beyond the sweep wick.
This creates a repeatable, rule-based approach to intraday liquidity trading.
🔹 8. Why This Script Is Original
This is not a mashup of existing open-source indicators.
It introduces:
►A custom session-linked liquidity sweep engine
►A structured daily expansion model
►Integrated killzone timing aligned with GMT
►A unified bias panel merging sweeps, ADR, and session manipulation
►A trend confirmation layer designed around session behavior
While it uses known institutional concepts, their integration, execution, and timing framework are unique, purpose-built, and not directly found in open-source scripts.
🔹 9. Suitable Markets
This indicator works best on:
►XAUUSD
►Major FX pairs
►US indices
►Synthetic markets with session cycles
Ideal timeframes: 1m, 5m, 15m, 30m
🔹 10. Limitations / Notes
This is an analytical tool, not a buy/sell signal generator
All sweeps are confirmed at candle close (non-repaint)
The tool assumes GMT session windows unless chart time differs
Users must practice risk management and entry triggers manually
Disclaimer
This script is provided for informational and educational purposes only. It does not provide financial, investment, or trading advice, and it does not guarantee profits or future performance. All decisions made based on this script are solely the responsibility of the user.
This script does not execute trades, manage risk, or replace the need for trader discretion. Market behavior can change quickly, and past behavior detected by the script does not ensure similar future outcomes.
Users should test the script on demo or simulation environments before applying it to live markets and must maintain full responsibility for their own risk management, position sizing, and trade execution.
Trading involves risk, and losses can exceed deposits. By using this script, you acknowledge that you understand and accept all associated risks.
Frequency Momentum Oscillator [QuantAlgo]🟢 Overview
The Frequency Momentum Oscillator applies Fourier-based spectral analysis principles to price action to identify regime shifts and directional momentum. It calculates Fourier coefficients for selected harmonic frequencies on detrended price data, then measures the distribution of power across low, mid, and high frequency bands to distinguish between persistent directional trends and transient market noise. This approach provides traders with a quantitative framework for assessing whether current price action represents meaningful momentum or merely random fluctuations, enabling more informed entry and exit decisions across various asset classes and timeframes.
🟢 How It Works
The calculation process removes the dominant trend from price data by subtracting a simple moving average, isolating cyclical components for frequency analysis:
detrendedPrice = close - ta.sma(close , frequencyPeriod)
The detrended price series undergoes frequency decomposition through Fourier coefficient calculation across the first 8 harmonics. For each harmonic frequency, the algorithm computes sine and cosine components across the lookback window, then derives power as the sum of squared coefficients:
for k = 1 to 8
cosSum = 0.0
sinSum = 0.0
for n = 0 to frequencyPeriod - 1
angle = 2 * math.pi * k * n / frequencyPeriod
cosSum := cosSum + detrendedPrice * math.cos(angle)
sinSum := sinSum + detrendedPrice * math.sin(angle)
power = (cosSum * cosSum + sinSum * sinSum) / frequencyPeriod
Power measurements are aggregated into three frequency bands: low frequencies (harmonics 1-2) capturing persistent cycles, mid frequencies (harmonics 3-4), and high frequencies (harmonics 5-8) representing noise. Each band's power normalizes against total spectral power to create percentage distributions:
lowFreqNorm = totalPower > 0 ? (lowFreqPower / totalPower) * 100 : 33.33
highFreqNorm = totalPower > 0 ? (highFreqPower / totalPower) * 100 : 33.33
The normalized frequency components undergo exponential smoothing before calculating spectral balance as the difference between low and high frequency power:
smoothLow = ta.ema(lowFreqNorm, smoothingPeriod)
smoothHigh = ta.ema(highFreqNorm, smoothingPeriod)
spectralBalance = smoothLow - smoothHigh
Spectral balance combines with price momentum through directional multiplication, producing a composite signal that integrates frequency characteristics with price direction:
momentum = ta.change(close , frequencyPeriod/2)
compositeSignal = spectralBalance * math.sign(momentum)
finalSignal = ta.ema(compositeSignal, smoothingPeriod)
The final signal oscillates around zero, with positive values indicating low-frequency dominance coupled with upward momentum (trending up), and negative values indicating either high-frequency dominance (choppy market) or downward momentum (trending down).
🟢 How to Use This Indicator
→ Long/Short Signals: the indicator generates long signals when the smoothed composite signal crosses above zero (indicating low-frequency directional strength dominates) and short signals when it crosses below zero (indicating bearish momentum persistence).
→ Upper and Lower Reference Lines: the +25 and -25 reference lines serve as threshold markers for momentum strength. Readings beyond these levels indicate strong directional conviction, while oscillations between them suggest consolidation or weakening momentum. These references help traders distinguish between strong trending regimes and choppy transitional periods.
→ Preconfigured Presets: three optimized configurations are available with Default (32, 3) offering balanced responsiveness, Fast Response (24, 2) designed for scalping and intraday trading, and Smooth Trend (40, 5) calibrated for swing trading and position trading with enhanced noise filtration.
→ Built-in Alerts: the indicator includes three alert conditions for automated monitoring - Long Signal (momentum shifts bullish), Short Signal (momentum shifts bearish), and Signal Change (any directional transition). These alerts enable traders to receive real-time notifications without continuous chart monitoring.
→ Color Customization: four visual themes (Classic green/red, Aqua blue/orange, Cosmic aqua/purple, Custom) allow chart customization for different display environments and personal preferences.
Fisher Transform Trend Navigator [QuantAlgo]🟢 Overview
The Fisher Transform Trend Navigator applies a logarithmic transformation to normalize price data into a Gaussian distribution, then combines this with volatility-adaptive thresholds to create a trend detection system. This mathematical approach helps traders identify high-probability trend changes and reversal points while filtering market noise in the ever-changing volatility conditions.
🟢 How It Works
The indicator's foundation begins with price normalization, where recent price action is scaled to a bounded range between -1 and +1:
highestHigh = ta.highest(priceSource, fisherPeriod)
lowestLow = ta.lowest(priceSource, fisherPeriod)
value1 = highestHigh != lowestLow ? 2 * (priceSource - lowestLow) / (highestHigh - lowestLow) - 1 : 0
value1 := math.max(-0.999, math.min(0.999, value1))
This normalized value then passes through the Fisher Transform calculation, which applies a logarithmic function to convert the data into a Gaussian normal distribution that naturally amplifies price extremes and turning points:
fisherTransform = 0.5 * math.log((1 + value1) / (1 - value1))
smoothedFisher = ta.ema(fisherTransform, fisherSmoothing)
The smoothed Fisher signal is then integrated with an exponential moving average to create a hybrid trend line that balances statistical precision with price-following behavior:
baseTrend = ta.ema(close, basePeriod)
fisherAdjustment = smoothedFisher * fisherSensitivity * close
fisherTrend = baseTrend + fisherAdjustment
To filter out false signals and adapt to market conditions, the system calculates dynamic threshold bands using volatility measurements:
dynamicRange = ta.atr(volatilityPeriod)
threshold = dynamicRange * volatilityMultiplier
upperThreshold = fisherTrend + threshold
lowerThreshold = fisherTrend - threshold
When price momentum pushes through these thresholds, the trend line locks onto the new level and maintains direction until the opposite threshold is breached:
if upperThreshold < trendLine
trendLine := upperThreshold
if lowerThreshold > trendLine
trendLine := lowerThreshold
🟢 Signal Interpretation
Bullish Candles (Green): indicate normalized price distribution favoring bulls with sustained buying momentum = Long/Buy opportunities
Bearish Candles (Red): indicate normalized price distribution favoring bears with sustained selling pressure = Short/Sell opportunities
Upper Band Zone: Area above middle level indicating statistically elevated trend strength with potential overbought conditions approaching mean reversion zones
Lower Band Zone: Area below middle level indicating statistically depressed trend strength with potential oversold conditions approaching mean reversion zones
Built-in Alert System: Automated notifications trigger when bullish or bearish states change, allowing you to act on significant developments without constantly monitoring the charts
Candle Coloring: Optional feature applies trend colors to price bars for visual consistency and clarity
Configuration Presets: Three parameter sets available - Default (balanced settings), Scalping (faster response with higher sensitivity), and Swing Trading (slower response with enhanced smoothing)
Color Customization: Four color schemes including Classic, Aqua, Cosmic, and Custom options for personalized chart aesthetics
Bollinger Adaptive Trend Navigator [QuantAlgo]🟢 Overview
The Bollinger Adaptive Trend Navigator synthesizes volatility channel analysis with variable smoothing mechanics to generate trend identification signals. It uses price positioning within Bollinger Band structures to modify moving average responsiveness, while incorporating ATR calculations to establish trend line boundaries that constrain movement during volatile periods. The adaptive nature makes this indicator particularly valuable for traders and investors working across various asset classes including stocks, forex, commodities, and cryptocurrencies, with effectiveness spanning multiple timeframes from intraday scalping to longer-term position analysis.
🟢 How It Works
The core mechanism calculates price position within Bollinger Bands and uses this positioning to create an adaptive smoothing factor:
bbPosition = bbUpper != bbLower ? (source - bbLower) / (bbUpper - bbLower) : 0.5
adaptiveFactor = (bbPosition - 0.5) * 2 * adaptiveMultiplier * bandWidthRatio
alpha = math.max(0.01, math.min(0.5, 2.0 / (bbPeriod + 1) * (1 + math.abs(adaptiveFactor))))
This adaptive coefficient drives an exponential moving average that responds more aggressively when price approaches Bollinger Band extremes:
var float adaptiveTrend = source
adaptiveTrend := alpha * source + (1 - alpha) * nz(adaptiveTrend , source)
finalTrend = 0.7 * adaptiveTrend + 0.3 * smoothedCenter
ATR-based volatility boundaries constrain the final trend line to prevent excessive movement during volatile periods:
volatility = ta.atr(volatilityPeriod)
upperBound = bollingerTrendValue + (volatility * volatilityMultiplier)
lowerBound = bollingerTrendValue - (volatility * volatilityMultiplier)
The trend line direction determines bullish or bearish states through simple slope comparison, with the final output displaying color-coded signals based on the synthesis of Bollinger positioning, adaptive smoothing, and volatility constraints (green = long/buy, red = short/sell).
🟢 Signal Interpretation
Rising Trend Line (Green): Indicates upward direction based on Bollinger positioning and adaptive smoothing = Potential long/buy opportunity
Falling Trend Line (Red): Indicates downward direction based on Bollinger positioning and adaptive smoothing = Potential short/sell opportunity
Built-in Alert System: Automated notifications trigger when bullish or bearish states change, allowing you to act on significant development without constantly monitoring the charts
Candle Coloring: Optional feature applies trend colors to price bars for visual consistency
Configuration Presets: Three parameter sets available - Default (standard settings), Scalping (faster response), and Swing Trading (slower response)
RSI Trend Navigator [QuantAlgo]🟢 Overview
The RSI Trend Navigator integrates RSI momentum calculations with adaptive exponential moving averages and ATR-based volatility bands to generate trend-following signals. The indicator applies variable smoothing coefficients based on RSI readings and incorporates normalized momentum adjustments to position a trend line that responds to both price action and underlying momentum conditions.
🟢 How It Works
The indicator begins by calculating and smoothing the RSI to reduce short-term fluctuations while preserving momentum information:
rsiValue = ta.rsi(source, rsiPeriod)
smoothedRSI = ta.ema(rsiValue, rsiSmoothing)
normalizedRSI = (smoothedRSI - 50) / 50
It then creates an adaptive smoothing coefficient that varies based on RSI positioning relative to the midpoint:
adaptiveAlpha = smoothedRSI > 50 ? 2.0 / (trendPeriod * 0.5 + 1) : 2.0 / (trendPeriod * 1.5 + 1)
This coefficient drives an adaptive trend calculation that responds more quickly when RSI indicates bullish momentum and more slowly during bearish conditions:
var float adaptiveTrend = source
adaptiveTrend := adaptiveAlpha * source + (1 - adaptiveAlpha) * nz(adaptiveTrend , source)
The normalized RSI values are converted into price-based adjustments using ATR for volatility scaling:
rsiAdjustment = normalizedRSI * ta.atr(14) * sensitivity
rsiTrendValue = adaptiveTrend + rsiAdjustment
ATR-based bands are constructed around this RSI-adjusted trend value to create dynamic boundaries that constrain trend line positioning:
atr = ta.atr(atrPeriod)
deviation = atr * atrMultiplier
upperBound = rsiTrendValue + deviation
lowerBound = rsiTrendValue - deviation
The trend line positioning uses these band constraints to determine its final value:
if upperBound < trendLine
trendLine := upperBound
if lowerBound > trendLine
trendLine := lowerBound
Signal generation occurs through directional comparison of the trend line against its previous value to establish bullish and bearish states:
trendUp = trendLine > trendLine
trendDown = trendLine < trendLine
if trendUp
isBullish := true
isBearish := false
else if trendDown
isBullish := false
isBearish := true
The final output colors the trend line green during bullish states and red during bearish states, creating visual buy/long and sell/short opportunity signals based on the combined RSI momentum and volatility-adjusted trend positioning.
🟢 Signal Interpretation
Rising Trend Line (Green): Indicates upward momentum where RSI influence and adaptive smoothing favor continued price advancement = Potential buy/long positions
Declining Trend Line (Red): Indicates downward momentum where RSI influence and adaptive smoothing favor continued price decline = Potential sell/short positions
Flattening Trend Lines: Occur when momentum weakens and the trend line slope approaches neutral, suggesting potential consolidation before the next move
Built-in Alert System: Automated notifications trigger when bullish or bearish states change, sending "RSI Trend Bullish Signal" or "RSI Trend Bearish Signal" messages for timely entry/exit
Color Bar Candles Option: Optional candle coloring feature that applies the same green/red trend colors to price bars, providing additional visual confirmation of the current trend direction
Sequential Pattern Strength [QuantAlgo]🟢 Overview
The Sequential Pattern Strength indicator measures the power and sustainability of consecutive price movements by tracking unbroken sequences of up or down closes. It incorporates sequence quality assessment, price extension analysis, and automatic exhaustion detection to help traders identify when strong trends are losing momentum and approaching potential reversal or continuation points.
🟢 How It Works
The indicator's key insight lies in its sequential pattern tracking system, where pattern strength is measured by analyzing consecutive price movements and their sustainability:
if close > close
upSequence := upSequence + 1
downSequence := 0
else if close < close
downSequence := downSequence + 1
upSequence := 0
The system calculates sequence quality by measuring how "perfect" the consecutive moves are:
perfectMoves = math.max(upSequence, downSequence)
totalMoves = math.abs(bar_index - ta.valuewhen(upSequence == 1 or downSequence == 1, bar_index, 0))
sequenceQuality = totalMoves > 0 ? perfectMoves / totalMoves : 1.0
First, it tracks price extension from the sequence starting point:
priceExtension = (close - sequenceStartPrice) / sequenceStartPrice * 100
Then, pattern exhaustion is identified when sequences become overextended:
isExhausted = math.abs(currentSequence) >= maxSequence or
math.abs(priceExtension) > resetThreshold * math.abs(currentSequence)
Finally, the pattern strength combines sequence length, quality, and price movement with momentum enhancement:
patternStrength = currentSequence * sequenceQuality * (1 + math.abs(priceExtension) / 10)
enhancedSignal = patternStrength + momentum * 10
signal = ta.ema(enhancedSignal, smooth)
This creates a sequence-based momentum indicator that combines consecutive movement analysis with pattern sustainability assessment, providing traders with both directional signals and exhaustion insights for entry/exit timing.
🟢 Signal Interpretation
Positive Values (Above Zero): Sequential pattern strength indicating bullish momentum with consecutive upward price movements and sustained buying pressure = Long/Buy opportunities
Negative Values (Below Zero): Sequential pattern strength indicating bearish momentum with consecutive downward price movements and sustained selling pressure = Short/Sell opportunities
Zero Line Crosses: Pattern transitions between bullish and bearish regimes, indicating potential trend changes or momentum shifts when sequences break
Upper Threshold Zone: Area above maximum sequence threshold (2x maxSequence) indicating extremely strong bullish patterns approaching exhaustion levels
Lower Threshold Zone: Area below negative threshold (-2x maxSequence) indicating extremely strong bearish patterns approaching exhaustion levels
Divergence & Volume ThrustThis document provides both user and technical information for the "Divergence & Volume Thrust" (DVT) Pine Script indicator.
Part 1: User Guide
1.1 Introduction
The DVT indicator is an advanced tool designed to automatically identify high-probability trading setups. It works by detecting divergences between price and key momentum oscillators (RSI and MACD).
A divergence is a powerful signal that a trend might be losing strength and a reversal is possible. To filter out weak signals, the DVT indicator includes a Volume Thrust component, which ensures that a divergence is backed by significant market interest before it alerts you.
🐂 Bullish Divergence: Price makes a new low, but the indicator makes a higher low. This suggests selling pressure is weakening.
🐻 Bearish Divergence: Price makes a new high, but the indicator makes a lower high. This suggests buying pressure is weakening.
1.2 Key Features on Your Chart
When you add the indicator to your chart, here's what you will see:
Divergence Lines:
Bullish Lines (Teal): A line will be drawn on your chart connecting two price lows that form a bullish divergence.
Bearish Lines (Red): A line will be drawn connecting two price highs that form a bearish divergence.
Solid lines represent RSI divergences, while dashed lines represent MACD divergences.
Confirmation Labels:
"Bull Div ▲" (Teal Label): This label appears below the candle when a bullish divergence is detected and confirmed by a recent volume spike. This is a high-probability buy signal.
"Bear Div ▼" (Red Label): This label appears above the candle when a bearish divergence is detected and confirmed by a recent volume spike. This is a high-probability sell signal.
Volume Spike Bars (Orange Background):
Any price candle with a faint orange background indicates that the volume during that period was unusually high (exceeding the average volume by a multiplier you can set).
1.3 Settings and Configuration
You can customize the indicator to fit your trading style. Here's what each setting does:
Divergence Pivot Lookback (Left/Right): Controls the sensitivity of swing point detection. Lower numbers find smaller, more frequent divergences. Higher numbers find larger, more significant ones. 5 is a good starting point.
Max Lookback Range for Divergence: How many bars back the script will look for the first part of a divergence pattern. Default is 60.
Indicator Settings (RSI & MACD):
You can toggle RSI and MACD divergences on or off.
Standard length settings for each indicator (e.g., RSI Length 14, MACD 12, 26, 9).
Volume Settings:
Use Volume Confirmation: The most important filter. When checked, labels will only appear if a volume spike occurs near the divergence.
Volume MA Length: The lookback period for calculating average volume.
Volume Spike Multiplier: The core of the "Thrust" filter. A value of 2.0 means volume must be 200% (or 2x) the average to be considered a spike.
Visuals: Customize colors and toggle the confirmation labels on or off.
1.4 Strategy & Best Practices
Confluence is Key: The DVT indicator is powerful, but it should not be used in isolation. Look for its signals at key support and resistance levels, trendlines, or major moving averages for the highest probability setups.
Wait for Confirmation: A confirmed signal (with a label) is much more reliable than an unconfirmed divergence line.
Context Matters: A bullish divergence in a strong downtrend might only lead to a small bounce, not a full reversal. Use the signals in the context of the overall market structure.
Set Alerts: Use the TradingView alert system with this script. Create alerts for "Confirmed Bullish Divergence" and "Confirmed Bearish Divergence" to be notified of setups automatically.
Market Cap Landscape 3DHello, traders and creators! 👋
Market Cap Landscape 3D. This project is more than just a typical technical analysis tool; it's an exploration into what's possible when code meets artistry on the financial charts. It's a demonstration of how we can transcend flat, two-dimensional lines and step into a vibrant, three-dimensional world of data.
This project continues a journey that began with a previous 3D experiment, the T-Virus Sentiment, which you can explore here:
The Market Cap Landscape 3D builds on that foundation, visualizing market data—particularly crypto market caps—as a dynamic 3D mountain range. The entire landscape is procedurally generated and rendered in real-time using the powerful drawing capabilities of polyline.new() and line.new() , pushed to their creative limits.
This work is intended as a guide and a design example for all developers, born from the spirit of learning and a deep love for understanding the Pine Script™ language.
---
🧐 Core Concept: How It Works
The indicator synthesizes multiple layers of information into a single, cohesive 3D scene:
The Surface: The mountain range itself is a procedurally generated 3D mesh. Its peaks and valleys create a rich, textured landscape that serves as the canvas for our data.
Crypto Data Integration: The core feature is its ability to fetch market cap data for a list of cryptocurrencies you provide. It then sorts them in descending order and strategically places them onto the 3D surface.
The Summit: The highest point on the mountain is reserved for the asset with the #1 market cap in your list, visually represented by a flag and a custom emblem.
The Mountain Labels: The other assets are distributed across the mountainside, with their rank determining their general elevation. This creates an intuitive visual hierarchy.
The Leaderboard Pole: For clarity, a dedicated pole in the back-right corner provides a clean, ranked list of the symbols and their market caps, ensuring the data is always easy to read.
---
🧐 Example of adjusting the view
To evoke the feeling of flying over mountains
To evoke the feeling of looking at a mountain peak on a low plain
🧐 Example of predefined colors
---
🚀 How to Use
Getting started with the Market Cap Landscape 3D:
Add to Chart: Apply the "Market Cap Landscape 3D" indicator to your active chart.
Open Settings: Double-click anywhere on the 3D landscape or click the "Settings" icon next to the indicator's name.
Customize Your Crypto List: The most important setting is in the Crypto Data tab. In the "Symbols" text area, enter a comma-separated list of the crypto tickers you want to visualize (e.g., BTC,ETH,SOL,XRP ). The indicator supports up to 40 unique symbols.
> Important Note: This indicator exclusively uses TradingView's `CRYPTOCAP` data source. To find valid symbols, use the main symbol search bar on your chart. Type `CRYPTOCAP:` (including the colon) and you will see a list of available options. For example, typing `CRYPTOCAP:BTC` will confirm that `BTC` is a valid ticker for the indicator's settings. Using symbols that do not exist in the `CRYPTOCAP` index will result in a script error. or, to display other symbols, simply type CRYPTOCAP: (including the colon) and you will see a list of available options.
Adjust Your View: Use the settings in the Camera & Projection tab to rotate ( Yaw ), tilt ( Pitch ), and scale the landscape until you find a view you love.
Explore & Customize: Play with the color palettes, flag design, and other settings to make the landscape truly your own!
---
⚙️ Settings & Customization
This indicator is highly customizable. Here’s a breakdown of what each setting does:
#### 🪙 Crypto Data
Symbols: Enter the crypto tickers you want to track, separated by commas. The script automatically handles duplicates and case-insensitivity.
Show Market Cap on Mountain: When checked, it displays the full market cap value next to the symbol on the mountain. When unchecked, it shows a cleaner look with just the symbol and a colored circle background.
#### 📷 Camera & Projection
Yaw (°): Rotates the camera view horizontally (side to side).
Pitch (°): Tilts the camera view vertically (up and down).
Scale X, Y, Z: Stretches or compresses the landscape in width, depth, and height, respectively. Fine-tune these to get the perfect perspective.
#### 🏞️ Grid / Surface
Grid X/Y resolution: Controls the detail level of the 3D mesh. Higher values create a smoother surface but may use more resources.
Fill surface strips: Toggles the beautiful color gradient on the surface.
Show wireframe lines: Toggles the visibility of the grid lines.
Show nodes (markers): Toggles the small dots at each grid intersection point.
#### 🏔️ Peaks / Mountains
Fill peaks volume: Draws vertical lines on high peaks, giving them a sense of volume.
Fill peaks surface: Draws a cross-hatch pattern on the surface of high peaks.
Peak height threshold: Defines the minimum height for a peak to receive the fill effect.
Peak fill color/density: Customizes the appearance of the fill lines.
#### 🚩 Flags (3D)
Show Flag on Summit: A master switch to show or hide the flag and emblem entirely.
Flag height, width, etc.: Provides full control over the dimensions and orientation of the flag on the highest peak.
#### 🎨 Color Palette
Base Gradient Palette: Choose from 13 stunning, pre-designed color themes for the landscape, from the classic SUNSET_WAVE to vibrant themes like NEON_DREAM and OCEANIC .
#### 🛡️ Emblem / Badge Controls
This section gives you granular control over every element of the custom emblem on the flag. Tweak rotation, offsets, and scale to design your unique logo.
---
👨💻 Developer's Corner: Modifying the Core Logic
If you're a developer and wish to customize the indicator's core data source, this section is for you. The script is designed to be modular, making it easy to change what data is being ranked and visualized.
The heart of the data retrieval and ranking logic is within the f_getSortedCryptoData() function. Here’s how you can modify it:
1. Changing the Data Source (from Market Cap to something else):
The current logic uses request.security("CRYPTOCAP:" + syms.get(i), ...) to fetch market capitalization data. To change this, you need to modify this line.
Example: Ranking by RSI (14) on the Daily timeframe.
First, you'll need a function to calculate RSI. Add this function to the script:
f_getRSI(symbol, timeframe, length) =>
request.security(symbol, timeframe, ta.rsi(close, length))
Then, inside f_getSortedCryptoData() , find the `for` loop that populates the `caps` array and replace the `request.security` call:
// OLD LINE:
// caps.set(i, request.security("CRYPTOCAP:" + syms.get(i), timeframe.period, close))
// NEW LINE for RSI:
// Note: You'll need to decide how to format the symbol name (e.g., "BINANCE:" + syms.get(i) + "USDT")
caps.set(i, f_getRSI("BINANCE:" + syms.get(i) + "USDT", "D", 14))
2. Changing the Data Formatting:
The ranking values are formatted for display using the f_fmtCap() function, which currently formats large numbers into "M" (millions), "B" (billions), etc.
If you change the data source to something like RSI, you'll want to change the formatting. You can modify f_fmtCap() or create a new formatting function.
Example: Formatting for RSI.
// Modify f_fmtCap or create f_fmtRSI
f_fmtRSI(float v) =>
str.tostring(v, "#.##") // Simply format to two decimal places
Remember to update the calls to this function in the main drawing loop where the labels are created (e.g., str.format("{0}: {1}", crypto.symbol, f_fmtCap(crypto.cap)) ).
By modifying these key functions ( f_getSortedCryptoData and f_fmtCap ), you can adapt the Market Cap Landscape 3D to visualize and rank almost any dataset you can imagine, from technical indicators to fundamental data.
---
We hope you enjoy using the Market Cap Landscape 3D as much as we enjoyed creating it. Happy charting! ✨
Markov Chain [3D] | FractalystWhat exactly is a Markov Chain?
This indicator uses a Markov Chain model to analyze, quantify, and visualize the transitions between market regimes (Bull, Bear, Neutral) on your chart. It dynamically detects these regimes in real-time, calculates transition probabilities, and displays them as animated 3D spheres and arrows, giving traders intuitive insight into current and future market conditions.
How does a Markov Chain work, and how should I read this spheres-and-arrows diagram?
Think of three weather modes: Sunny, Rainy, Cloudy.
Each sphere is one mode. The loop on a sphere means “stay the same next step” (e.g., Sunny again tomorrow).
The arrows leaving a sphere show where things usually go next if they change (e.g., Sunny moving to Cloudy).
Some paths matter more than others. A more prominent loop means the current mode tends to persist. A more prominent outgoing arrow means a change to that destination is the usual next step.
Direction isn’t symmetric: moving Sunny→Cloudy can behave differently than Cloudy→Sunny.
Now relabel the spheres to markets: Bull, Bear, Neutral.
Spheres: market regimes (uptrend, downtrend, range).
Self‑loop: tendency for the current regime to continue on the next bar.
Arrows: the most common next regime if a switch happens.
How to read: Start at the sphere that matches current bar state. If the loop stands out, expect continuation. If one outgoing path stands out, that switch is the typical next step. Opposite directions can differ (Bear→Neutral doesn’t have to match Neutral→Bear).
What states and transitions are shown?
The three market states visualized are:
Bullish (Bull): Upward or strong-market regime.
Bearish (Bear): Downward or weak-market regime.
Neutral: Sideways or range-bound regime.
Bidirectional animated arrows and probability labels show how likely the market is to move from one regime to another (e.g., Bull → Bear or Neutral → Bull).
How does the regime detection system work?
You can use either built-in price returns (based on adaptive Z-score normalization) or supply three custom indicators (such as volume, oscillators, etc.).
Values are statistically normalized (Z-scored) over a configurable lookback period.
The normalized outputs are classified into Bull, Bear, or Neutral zones.
If using three indicators, their regime signals are averaged and smoothed for robustness.
How are transition probabilities calculated?
On every confirmed bar, the algorithm tracks the sequence of detected market states, then builds a rolling window of transitions.
The code maintains a transition count matrix for all regime pairs (e.g., Bull → Bear).
Transition probabilities are extracted for each possible state change using Laplace smoothing for numerical stability, and frequently updated in real-time.
What is unique about the visualization?
3D animated spheres represent each regime and change visually when active.
Animated, bidirectional arrows reveal transition probabilities and allow you to see both dominant and less likely regime flows.
Particles (moving dots) animate along the arrows, enhancing the perception of regime flow direction and speed.
All elements dynamically update with each new price bar, providing a live market map in an intuitive, engaging format.
Can I use custom indicators for regime classification?
Yes! Enable the "Custom Indicators" switch and select any three chart series as inputs. These will be normalized and combined (each with equal weight), broadening the regime classification beyond just price-based movement.
What does the “Lookback Period” control?
Lookback Period (default: 100) sets how much historical data builds the probability matrix. Shorter periods adapt faster to regime changes but may be noisier. Longer periods are more stable but slower to adapt.
How is this different from a Hidden Markov Model (HMM)?
It sets the window for both regime detection and probability calculations. Lower values make the system more reactive, but potentially noisier. Higher values smooth estimates and make the system more robust.
How is this Markov Chain different from a Hidden Markov Model (HMM)?
Markov Chain (as here): All market regimes (Bull, Bear, Neutral) are directly observable on the chart. The transition matrix is built from actual detected regimes, keeping the model simple and interpretable.
Hidden Markov Model: The actual regimes are unobservable ("hidden") and must be inferred from market output or indicator "emissions" using statistical learning algorithms. HMMs are more complex, can capture more subtle structure, but are harder to visualize and require additional machine learning steps for training.
A standard Markov Chain models transitions between observable states using a simple transition matrix, while a Hidden Markov Model assumes the true states are hidden (latent) and must be inferred from observable “emissions” like price or volume data. In practical terms, a Markov Chain is transparent and easier to implement and interpret; an HMM is more expressive but requires statistical inference to estimate hidden states from data.
Markov Chain: states are observable; you directly count or estimate transition probabilities between visible states. This makes it simpler, faster, and easier to validate and tune.
HMM: states are hidden; you only observe emissions generated by those latent states. Learning involves machine learning/statistical algorithms (commonly Baum–Welch/EM for training and Viterbi for decoding) to infer both the transition dynamics and the most likely hidden state sequence from data.
How does the indicator avoid “repainting” or look-ahead bias?
All regime changes and matrix updates happen only on confirmed (closed) bars, so no future data is leaked, ensuring reliable real-time operation.
Are there practical tuning tips?
Tune the Lookback Period for your asset/timeframe: shorter for fast markets, longer for stability.
Use custom indicators if your asset has unique regime drivers.
Watch for rapid changes in transition probabilities as early warning of a possible regime shift.
Who is this indicator for?
Quants and quantitative researchers exploring probabilistic market modeling, especially those interested in regime-switching dynamics and Markov models.
Programmers and system developers who need a probabilistic regime filter for systematic and algorithmic backtesting:
The Markov Chain indicator is ideally suited for programmatic integration via its bias output (1 = Bull, 0 = Neutral, -1 = Bear).
Although the visualization is engaging, the core output is designed for automated, rules-based workflows—not for discretionary/manual trading decisions.
Developers can connect the indicator’s output directly to their Pine Script logic (using input.source()), allowing rapid and robust backtesting of regime-based strategies.
It acts as a plug-and-play regime filter: simply plug the bias output into your entry/exit logic, and you have a scientifically robust, probabilistically-derived signal for filtering, timing, position sizing, or risk regimes.
The MC's output is intentionally "trinary" (1/0/-1), focusing on clear regime states for unambiguous decision-making in code. If you require nuanced, multi-probability or soft-label state vectors, consider expanding the indicator or stacking it with a probability-weighted logic layer in your scripting.
Because it avoids subjectivity, this approach is optimal for systematic quants, algo developers building backtested, repeatable strategies based on probabilistic regime analysis.
What's the mathematical foundation behind this?
The mathematical foundation behind this Markov Chain indicator—and probabilistic regime detection in finance—draws from two principal models: the (standard) Markov Chain and the Hidden Markov Model (HMM).
How to use this indicator programmatically?
The Markov Chain indicator automatically exports a bias value (+1 for Bullish, -1 for Bearish, 0 for Neutral) as a plot visible in the Data Window. This allows you to integrate its regime signal into your own scripts and strategies for backtesting, automation, or live trading.
Step-by-Step Integration with Pine Script (input.source)
Add the Markov Chain indicator to your chart.
This must be done first, since your custom script will "pull" the bias signal from the indicator's plot.
In your strategy, create an input using input.source()
Example:
//@version=5
strategy("MC Bias Strategy Example")
mcBias = input.source(close, "MC Bias Source")
After saving, go to your script’s settings. For the “MC Bias Source” input, select the plot/output of the Markov Chain indicator (typically its bias plot).
Use the bias in your trading logic
Example (long only on Bull, flat otherwise):
if mcBias == 1
strategy.entry("Long", strategy.long)
else
strategy.close("Long")
For more advanced workflows, combine mcBias with additional filters or trailing stops.
How does this work behind-the-scenes?
TradingView’s input.source() lets you use any plot from another indicator as a real-time, “live” data feed in your own script (source).
The selected bias signal is available to your Pine code as a variable, enabling logical decisions based on regime (trend-following, mean-reversion, etc.).
This enables powerful strategy modularity : decouple regime detection from entry/exit logic, allowing fast experimentation without rewriting core signal code.
Integrating 45+ Indicators with Your Markov Chain — How & Why
The Enhanced Custom Indicators Export script exports a massive suite of over 45 technical indicators—ranging from classic momentum (RSI, MACD, Stochastic, etc.) to trend, volume, volatility, and oscillator tools—all pre-calculated, centered/scaled, and available as plots.
// Enhanced Custom Indicators Export - 45 Technical Indicators
// Comprehensive technical analysis suite for advanced market regime detection
//@version=6
indicator('Enhanced Custom Indicators Export | Fractalyst', shorttitle='Enhanced CI Export', overlay=false, scale=scale.right, max_labels_count=500, max_lines_count=500)
// |----- Input Parameters -----| //
momentum_group = "Momentum Indicators"
trend_group = "Trend Indicators"
volume_group = "Volume Indicators"
volatility_group = "Volatility Indicators"
oscillator_group = "Oscillator Indicators"
display_group = "Display Settings"
// Common lengths
length_14 = input.int(14, "Standard Length (14)", minval=1, maxval=100, group=momentum_group)
length_20 = input.int(20, "Medium Length (20)", minval=1, maxval=200, group=trend_group)
length_50 = input.int(50, "Long Length (50)", minval=1, maxval=200, group=trend_group)
// Display options
show_table = input.bool(true, "Show Values Table", group=display_group)
table_size = input.string("Small", "Table Size", options= , group=display_group)
// |----- MOMENTUM INDICATORS (15 indicators) -----| //
// 1. RSI (Relative Strength Index)
rsi_14 = ta.rsi(close, length_14)
rsi_centered = rsi_14 - 50
// 2. Stochastic Oscillator
stoch_k = ta.stoch(close, high, low, length_14)
stoch_d = ta.sma(stoch_k, 3)
stoch_centered = stoch_k - 50
// 3. Williams %R
williams_r = ta.stoch(close, high, low, length_14) - 100
// 4. MACD (Moving Average Convergence Divergence)
= ta.macd(close, 12, 26, 9)
// 5. Momentum (Rate of Change)
momentum = ta.mom(close, length_14)
momentum_pct = (momentum / close ) * 100
// 6. Rate of Change (ROC)
roc = ta.roc(close, length_14)
// 7. Commodity Channel Index (CCI)
cci = ta.cci(close, length_20)
// 8. Money Flow Index (MFI)
mfi = ta.mfi(close, length_14)
mfi_centered = mfi - 50
// 9. Awesome Oscillator (AO)
ao = ta.sma(hl2, 5) - ta.sma(hl2, 34)
// 10. Accelerator Oscillator (AC)
ac = ao - ta.sma(ao, 5)
// 11. Chande Momentum Oscillator (CMO)
cmo = ta.cmo(close, length_14)
// 12. Detrended Price Oscillator (DPO)
dpo = close - ta.sma(close, length_20)
// 13. Price Oscillator (PPO)
ppo = ta.sma(close, 12) - ta.sma(close, 26)
ppo_pct = (ppo / ta.sma(close, 26)) * 100
// 14. TRIX
trix_ema1 = ta.ema(close, length_14)
trix_ema2 = ta.ema(trix_ema1, length_14)
trix_ema3 = ta.ema(trix_ema2, length_14)
trix = ta.roc(trix_ema3, 1) * 10000
// 15. Klinger Oscillator
klinger = ta.ema(volume * (high + low + close) / 3, 34) - ta.ema(volume * (high + low + close) / 3, 55)
// 16. Fisher Transform
fisher_hl2 = 0.5 * (hl2 - ta.lowest(hl2, 10)) / (ta.highest(hl2, 10) - ta.lowest(hl2, 10)) - 0.25
fisher = 0.5 * math.log((1 + fisher_hl2) / (1 - fisher_hl2))
// 17. Stochastic RSI
stoch_rsi = ta.stoch(rsi_14, rsi_14, rsi_14, length_14)
stoch_rsi_centered = stoch_rsi - 50
// 18. Relative Vigor Index (RVI)
rvi_num = ta.swma(close - open)
rvi_den = ta.swma(high - low)
rvi = rvi_den != 0 ? rvi_num / rvi_den : 0
// 19. Balance of Power (BOP)
bop = (close - open) / (high - low)
// |----- TREND INDICATORS (10 indicators) -----| //
// 20. Simple Moving Average Momentum
sma_20 = ta.sma(close, length_20)
sma_momentum = ((close - sma_20) / sma_20) * 100
// 21. Exponential Moving Average Momentum
ema_20 = ta.ema(close, length_20)
ema_momentum = ((close - ema_20) / ema_20) * 100
// 22. Parabolic SAR
sar = ta.sar(0.02, 0.02, 0.2)
sar_trend = close > sar ? 1 : -1
// 23. Linear Regression Slope
lr_slope = ta.linreg(close, length_20, 0) - ta.linreg(close, length_20, 1)
// 24. Moving Average Convergence (MAC)
mac = ta.sma(close, 10) - ta.sma(close, 30)
// 25. Trend Intensity Index (TII)
tii_sum = 0.0
for i = 1 to length_20
tii_sum += close > close ? 1 : 0
tii = (tii_sum / length_20) * 100
// 26. Ichimoku Cloud Components
ichimoku_tenkan = (ta.highest(high, 9) + ta.lowest(low, 9)) / 2
ichimoku_kijun = (ta.highest(high, 26) + ta.lowest(low, 26)) / 2
ichimoku_signal = ichimoku_tenkan > ichimoku_kijun ? 1 : -1
// 27. MESA Adaptive Moving Average (MAMA)
mama_alpha = 2.0 / (length_20 + 1)
mama = ta.ema(close, length_20)
mama_momentum = ((close - mama) / mama) * 100
// 28. Zero Lag Exponential Moving Average (ZLEMA)
zlema_lag = math.round((length_20 - 1) / 2)
zlema_data = close + (close - close )
zlema = ta.ema(zlema_data, length_20)
zlema_momentum = ((close - zlema) / zlema) * 100
// |----- VOLUME INDICATORS (6 indicators) -----| //
// 29. On-Balance Volume (OBV)
obv = ta.obv
// 30. Volume Rate of Change (VROC)
vroc = ta.roc(volume, length_14)
// 31. Price Volume Trend (PVT)
pvt = ta.pvt
// 32. Negative Volume Index (NVI)
nvi = 0.0
nvi := volume < volume ? nvi + ((close - close ) / close ) * nvi : nvi
// 33. Positive Volume Index (PVI)
pvi = 0.0
pvi := volume > volume ? pvi + ((close - close ) / close ) * pvi : pvi
// 34. Volume Oscillator
vol_osc = ta.sma(volume, 5) - ta.sma(volume, 10)
// 35. Ease of Movement (EOM)
eom_distance = high - low
eom_box_height = volume / 1000000
eom = eom_box_height != 0 ? eom_distance / eom_box_height : 0
eom_sma = ta.sma(eom, length_14)
// 36. Force Index
force_index = volume * (close - close )
force_index_sma = ta.sma(force_index, length_14)
// |----- VOLATILITY INDICATORS (10 indicators) -----| //
// 37. Average True Range (ATR)
atr = ta.atr(length_14)
atr_pct = (atr / close) * 100
// 38. Bollinger Bands Position
bb_basis = ta.sma(close, length_20)
bb_dev = 2.0 * ta.stdev(close, length_20)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
bb_position = bb_dev != 0 ? (close - bb_basis) / bb_dev : 0
bb_width = bb_dev != 0 ? (bb_upper - bb_lower) / bb_basis * 100 : 0
// 39. Keltner Channels Position
kc_basis = ta.ema(close, length_20)
kc_range = ta.ema(ta.tr, length_20)
kc_upper = kc_basis + (2.0 * kc_range)
kc_lower = kc_basis - (2.0 * kc_range)
kc_position = kc_range != 0 ? (close - kc_basis) / kc_range : 0
// 40. Donchian Channels Position
dc_upper = ta.highest(high, length_20)
dc_lower = ta.lowest(low, length_20)
dc_basis = (dc_upper + dc_lower) / 2
dc_position = (dc_upper - dc_lower) != 0 ? (close - dc_basis) / (dc_upper - dc_lower) : 0
// 41. Standard Deviation
std_dev = ta.stdev(close, length_20)
std_dev_pct = (std_dev / close) * 100
// 42. Relative Volatility Index (RVI)
rvi_up = ta.stdev(close > close ? close : 0, length_14)
rvi_down = ta.stdev(close < close ? close : 0, length_14)
rvi_total = rvi_up + rvi_down
rvi_volatility = rvi_total != 0 ? (rvi_up / rvi_total) * 100 : 50
// 43. Historical Volatility
hv_returns = math.log(close / close )
hv = ta.stdev(hv_returns, length_20) * math.sqrt(252) * 100
// 44. Garman-Klass Volatility
gk_vol = math.log(high/low) * math.log(high/low) - (2*math.log(2)-1) * math.log(close/open) * math.log(close/open)
gk_volatility = math.sqrt(ta.sma(gk_vol, length_20)) * 100
// 45. Parkinson Volatility
park_vol = math.log(high/low) * math.log(high/low)
parkinson = math.sqrt(ta.sma(park_vol, length_20) / (4 * math.log(2))) * 100
// 46. Rogers-Satchell Volatility
rs_vol = math.log(high/close) * math.log(high/open) + math.log(low/close) * math.log(low/open)
rogers_satchell = math.sqrt(ta.sma(rs_vol, length_20)) * 100
// |----- OSCILLATOR INDICATORS (5 indicators) -----| //
// 47. Elder Ray Index
elder_bull = high - ta.ema(close, 13)
elder_bear = low - ta.ema(close, 13)
elder_power = elder_bull + elder_bear
// 48. Schaff Trend Cycle (STC)
stc_macd = ta.ema(close, 23) - ta.ema(close, 50)
stc_k = ta.stoch(stc_macd, stc_macd, stc_macd, 10)
stc_d = ta.ema(stc_k, 3)
stc = ta.stoch(stc_d, stc_d, stc_d, 10)
// 49. Coppock Curve
coppock_roc1 = ta.roc(close, 14)
coppock_roc2 = ta.roc(close, 11)
coppock = ta.wma(coppock_roc1 + coppock_roc2, 10)
// 50. Know Sure Thing (KST)
kst_roc1 = ta.roc(close, 10)
kst_roc2 = ta.roc(close, 15)
kst_roc3 = ta.roc(close, 20)
kst_roc4 = ta.roc(close, 30)
kst = ta.sma(kst_roc1, 10) + 2*ta.sma(kst_roc2, 10) + 3*ta.sma(kst_roc3, 10) + 4*ta.sma(kst_roc4, 15)
// 51. Percentage Price Oscillator (PPO)
ppo_line = ((ta.ema(close, 12) - ta.ema(close, 26)) / ta.ema(close, 26)) * 100
ppo_signal = ta.ema(ppo_line, 9)
ppo_histogram = ppo_line - ppo_signal
// |----- PLOT MAIN INDICATORS -----| //
// Plot key momentum indicators
plot(rsi_centered, title="01_RSI_Centered", color=color.purple, linewidth=1)
plot(stoch_centered, title="02_Stoch_Centered", color=color.blue, linewidth=1)
plot(williams_r, title="03_Williams_R", color=color.red, linewidth=1)
plot(macd_histogram, title="04_MACD_Histogram", color=color.orange, linewidth=1)
plot(cci, title="05_CCI", color=color.green, linewidth=1)
// Plot trend indicators
plot(sma_momentum, title="06_SMA_Momentum", color=color.navy, linewidth=1)
plot(ema_momentum, title="07_EMA_Momentum", color=color.maroon, linewidth=1)
plot(sar_trend, title="08_SAR_Trend", color=color.teal, linewidth=1)
plot(lr_slope, title="09_LR_Slope", color=color.lime, linewidth=1)
plot(mac, title="10_MAC", color=color.fuchsia, linewidth=1)
// Plot volatility indicators
plot(atr_pct, title="11_ATR_Pct", color=color.yellow, linewidth=1)
plot(bb_position, title="12_BB_Position", color=color.aqua, linewidth=1)
plot(kc_position, title="13_KC_Position", color=color.olive, linewidth=1)
plot(std_dev_pct, title="14_StdDev_Pct", color=color.silver, linewidth=1)
plot(bb_width, title="15_BB_Width", color=color.gray, linewidth=1)
// Plot volume indicators
plot(vroc, title="16_VROC", color=color.blue, linewidth=1)
plot(eom_sma, title="17_EOM", color=color.red, linewidth=1)
plot(vol_osc, title="18_Vol_Osc", color=color.green, linewidth=1)
plot(force_index_sma, title="19_Force_Index", color=color.orange, linewidth=1)
plot(obv, title="20_OBV", color=color.purple, linewidth=1)
// Plot additional oscillators
plot(ao, title="21_Awesome_Osc", color=color.navy, linewidth=1)
plot(cmo, title="22_CMO", color=color.maroon, linewidth=1)
plot(dpo, title="23_DPO", color=color.teal, linewidth=1)
plot(trix, title="24_TRIX", color=color.lime, linewidth=1)
plot(fisher, title="25_Fisher", color=color.fuchsia, linewidth=1)
// Plot more momentum indicators
plot(mfi_centered, title="26_MFI_Centered", color=color.yellow, linewidth=1)
plot(ac, title="27_AC", color=color.aqua, linewidth=1)
plot(ppo_pct, title="28_PPO_Pct", color=color.olive, linewidth=1)
plot(stoch_rsi_centered, title="29_StochRSI_Centered", color=color.silver, linewidth=1)
plot(klinger, title="30_Klinger", color=color.gray, linewidth=1)
// Plot trend continuation
plot(tii, title="31_TII", color=color.blue, linewidth=1)
plot(ichimoku_signal, title="32_Ichimoku_Signal", color=color.red, linewidth=1)
plot(mama_momentum, title="33_MAMA_Momentum", color=color.green, linewidth=1)
plot(zlema_momentum, title="34_ZLEMA_Momentum", color=color.orange, linewidth=1)
plot(bop, title="35_BOP", color=color.purple, linewidth=1)
// Plot volume continuation
plot(nvi, title="36_NVI", color=color.navy, linewidth=1)
plot(pvi, title="37_PVI", color=color.maroon, linewidth=1)
plot(momentum_pct, title="38_Momentum_Pct", color=color.teal, linewidth=1)
plot(roc, title="39_ROC", color=color.lime, linewidth=1)
plot(rvi, title="40_RVI", color=color.fuchsia, linewidth=1)
// Plot volatility continuation
plot(dc_position, title="41_DC_Position", color=color.yellow, linewidth=1)
plot(rvi_volatility, title="42_RVI_Volatility", color=color.aqua, linewidth=1)
plot(hv, title="43_Historical_Vol", color=color.olive, linewidth=1)
plot(gk_volatility, title="44_GK_Volatility", color=color.silver, linewidth=1)
plot(parkinson, title="45_Parkinson_Vol", color=color.gray, linewidth=1)
// Plot final oscillators
plot(rogers_satchell, title="46_RS_Volatility", color=color.blue, linewidth=1)
plot(elder_power, title="47_Elder_Power", color=color.red, linewidth=1)
plot(stc, title="48_STC", color=color.green, linewidth=1)
plot(coppock, title="49_Coppock", color=color.orange, linewidth=1)
plot(kst, title="50_KST", color=color.purple, linewidth=1)
// Plot final indicators
plot(ppo_histogram, title="51_PPO_Histogram", color=color.navy, linewidth=1)
plot(pvt, title="52_PVT", color=color.maroon, linewidth=1)
// |----- Reference Lines -----| //
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
hline(50, "Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-50, "Lower Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(25, "Upper Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-25, "Lower Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
// |----- Enhanced Information Table -----| //
if show_table and barstate.islast
table_position = position.top_right
table_text_size = table_size == "Tiny" ? size.tiny : table_size == "Small" ? size.small : size.normal
var table info_table = table.new(table_position, 3, 18, bgcolor=color.new(color.white, 85), border_width=1, border_color=color.gray)
// Headers
table.cell(info_table, 0, 0, 'Category', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 1, 0, 'Indicator', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 2, 0, 'Value', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
// Key Momentum Indicators
table.cell(info_table, 0, 1, 'MOMENTUM', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 1, 'RSI Centered', text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 2, 1, str.tostring(rsi_centered, '0.00'), text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 0, 2, '', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 1, 2, 'Stoch Centered', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 2, str.tostring(stoch_centered, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 3, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 3, 'Williams %R', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 3, str.tostring(williams_r, '0.00'), text_color=color.red, text_size=table_text_size)
table.cell(info_table, 0, 4, '', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 1, 4, 'MACD Histogram', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 2, 4, str.tostring(macd_histogram, '0.000'), text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 0, 5, '', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 1, 5, 'CCI', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 2, 5, str.tostring(cci, '0.00'), text_color=color.green, text_size=table_text_size)
// Key Trend Indicators
table.cell(info_table, 0, 6, 'TREND', text_color=color.navy, text_size=table_text_size, bgcolor=color.new(color.navy, 90))
table.cell(info_table, 1, 6, 'SMA Momentum %', text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 2, 6, str.tostring(sma_momentum, '0.00'), text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 0, 7, '', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 1, 7, 'EMA Momentum %', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 2, 7, str.tostring(ema_momentum, '0.00'), text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 0, 8, '', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 1, 8, 'SAR Trend', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 2, 8, str.tostring(sar_trend, '0'), text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 0, 9, '', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 1, 9, 'Linear Regression', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 2, 9, str.tostring(lr_slope, '0.000'), text_color=color.lime, text_size=table_text_size)
// Key Volatility Indicators
table.cell(info_table, 0, 10, 'VOLATILITY', text_color=color.yellow, text_size=table_text_size, bgcolor=color.new(color.yellow, 90))
table.cell(info_table, 1, 10, 'ATR %', text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 2, 10, str.tostring(atr_pct, '0.00'), text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 0, 11, '', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 1, 11, 'BB Position', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 2, 11, str.tostring(bb_position, '0.00'), text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 0, 12, '', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 1, 12, 'KC Position', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 2, 12, str.tostring(kc_position, '0.00'), text_color=color.olive, text_size=table_text_size)
// Key Volume Indicators
table.cell(info_table, 0, 13, 'VOLUME', text_color=color.blue, text_size=table_text_size, bgcolor=color.new(color.blue, 90))
table.cell(info_table, 1, 13, 'Volume ROC', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 13, str.tostring(vroc, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 14, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 14, 'EOM', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 14, str.tostring(eom_sma, '0.000'), text_color=color.red, text_size=table_text_size)
// Key Oscillators
table.cell(info_table, 0, 15, 'OSCILLATORS', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 15, 'Awesome Osc', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 15, str.tostring(ao, '0.000'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 16, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 16, 'Fisher Transform', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 16, str.tostring(fisher, '0.000'), text_color=color.red, text_size=table_text_size)
// Summary Statistics
table.cell(info_table, 0, 17, 'SUMMARY', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 17, 'Total Indicators: 52', text_color=color.black, text_size=table_text_size)
regime_color = rsi_centered > 10 ? color.green : rsi_centered < -10 ? color.red : color.gray
regime_text = rsi_centered > 10 ? "BULLISH" : rsi_centered < -10 ? "BEARISH" : "NEUTRAL"
table.cell(info_table, 2, 17, regime_text, text_color=regime_color, text_size=table_text_size)
This makes it the perfect “indicator backbone” for quantitative and systematic traders who want to prototype, combine, and test new regime detection models—especially in combination with the Markov Chain indicator.
How to use this script with the Markov Chain for research and backtesting:
Add the Enhanced Indicator Export to your chart.
Every calculated indicator is available as an individual data stream.
Connect the indicator(s) you want as custom input(s) to the Markov Chain’s “Custom Indicators” option.
In the Markov Chain indicator’s settings, turn ON the custom indicator mode.
For each of the three custom indicator inputs, select the exported plot from the Enhanced Export script—the menu lists all 45+ signals by name.
This creates a powerful, modular regime-detection engine where you can mix-and-match momentum, trend, volume, or custom combinations for advanced filtering.
Backtest regime logic directly.
Once you’ve connected your chosen indicators, the Markov Chain script performs regime detection (Bull/Neutral/Bear) based on your selected features—not just price returns.
The regime detection is robust, automatically normalized (using Z-score), and outputs bias (1, -1, 0) for plug-and-play integration.
Export the regime bias for programmatic use.
As described above, use input.source() in your Pine Script strategy or system and link the bias output.
You can now filter signals, control trade direction/size, or design pairs-trading that respect true, indicator-driven market regimes.
With this framework, you’re not limited to static or simplistic regime filters. You can rigorously define, test, and refine what “market regime” means for your strategies—using the technical features that matter most to you.
Optimize your signal generation by backtesting across a universe of meaningful indicator blends.
Enhance risk management with objective, real-time regime boundaries.
Accelerate your research: iterate quickly, swap indicator components, and see results with minimal code changes.
Automate multi-asset or pairs-trading by integrating regime context directly into strategy logic.
Add both scripts to your chart, connect your preferred features, and start investigating your best regime-based trades—entirely within the TradingView ecosystem.
References & Further Reading
Ang, A., & Bekaert, G. (2002). “Regime Switches in Interest Rates.” Journal of Business & Economic Statistics, 20(2), 163–182.
Hamilton, J. D. (1989). “A New Approach to the Economic Analysis of Nonstationary Time Series and the Business Cycle.” Econometrica, 57(2), 357–384.
Markov, A. A. (1906). "Extension of the Limit Theorems of Probability Theory to a Sum of Variables Connected in a Chain." The Notes of the Imperial Academy of Sciences of St. Petersburg.
Guidolin, M., & Timmermann, A. (2007). “Asset Allocation under Multivariate Regime Switching.” Journal of Economic Dynamics and Control, 31(11), 3503–3544.
Murphy, J. J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance.
Brock, W., Lakonishok, J., & LeBaron, B. (1992). “Simple Technical Trading Rules and the Stochastic Properties of Stock Returns.” Journal of Finance, 47(5), 1731–1764.
Zucchini, W., MacDonald, I. L., & Langrock, R. (2017). Hidden Markov Models for Time Series: An Introduction Using R (2nd ed.). Chapman and Hall/CRC.
On Quantitative Finance and Markov Models:
Lo, A. W., & Hasanhodzic, J. (2009). The Heretics of Finance: Conversations with Leading Practitioners of Technical Analysis. Bloomberg Press.
Patterson, S. (2016). The Man Who Solved the Market: How Jim Simons Launched the Quant Revolution. Penguin Press.
TradingView Pine Script Documentation: www.tradingview.com
TradingView Blog: “Use an Input From Another Indicator With Your Strategy” www.tradingview.com
GeeksforGeeks: “What is the Difference Between Markov Chains and Hidden Markov Models?” www.geeksforgeeks.org
What makes this indicator original and unique?
- On‑chart, real‑time Markov. The chain is drawn directly on your chart. You see the current regime, its tendency to stay (self‑loop), and the usual next step (arrows) as bars confirm.
- Source‑agnostic by design. The engine runs on any series you select via input.source() — price, your own oscillator, a composite score, anything you compute in the script.
- Automatic normalization + regime mapping. Different inputs live on different scales. The script standardizes your chosen source and maps it into clear regimes (e.g., Bull / Bear / Neutral) without you micromanaging thresholds each time.
- Rolling, bar‑by‑bar learning. Transition tendencies are computed from a rolling window of confirmed bars. What you see is exactly what the market did in that window.
- Fast experimentation. Switch the source, adjust the window, and the Markov view updates instantly. It’s a rapid way to test ideas and feel regime persistence/switch behavior.
Integrate your own signals (using input.source())
- In settings, choose the Source . This is powered by input.source() .
- Feed it price, an indicator you compute inside the script, or a custom composite series.
- The script will automatically normalize that series and process it through the Markov engine, mapping it to regimes and updating the on‑chart spheres/arrows in real time.
Credits:
Deep gratitude to @RicardoSantos for both the foundational Markov chain processing engine and inspiring open-source contributions, which made advanced probabilistic market modeling accessible to the TradingView community.
Special thanks to @Alien_Algorithms for the innovative and visually stunning 3D sphere logic that powers the indicator’s animated, regime-based visualization.
Disclaimer
This tool summarizes recent behavior. It is not financial advice and not a guarantee of future results.
TCP | Market Session | Session Analyzer📌 TCP | Market Session Indicator | Crypto Version
A powerful, real-time market session visualization tool tailored for crypto traders. Track the heartbeat of Asia, Europe, and US trading hours directly on your chart with live session boxes, behavioral analysis, liquidity grab detection, and countdown timers. Know when the action starts, how the market behaves, and where the traps lie.
🔰 Introduction:
Trade the Right Hours with the Right Tools
Time matters in trading. Most significant moves happen during key sessions—and knowing when and how each session unfolds can give you a sharp edge. The TCP Market Session Indicator, developed by Trade City Pro (TCP), puts professional session tracking and behavioral insights at your fingertips.
Whether you're a scalper or swing trader, this indicator gives you the timing context to enter and exit trades with greater confidence and clarity.
🕒 Core Features
• Live Session Boxes :
Highlight active ranges during Asia, Europe, and US sessions with dynamic high/low updates.
• Session Start/End Labels :
Know exactly when each session begins and ends plotted clearly on your chart with context.
• Session Behavior Analysis :
At the end of each session, the indicator classifies the price action as:
- Trend Up
- Trend Down
- Consolidation
- Manipulation
• Liquidity Grab Detection: Automatically detects possible stop hunts (fake breakouts) and marks them on the chart with precision filters (volume, ATR, reversal).
• Session Countdown Table: A live dashboard showing:
- Current active session
- Time left in session
- Upcoming session and how many minutes until it starts
- Utility time converter (e.g. 90 min = 01:30)
• Vertical Session Lines: Visualize past and upcoming session boundaries with customizable history and future range.
• Multi-Day Support: Draw session ranges for previous, current, and future days for better backtesting and forecasting.
⚙️ Settings Panel
Customize everything to fit your trading style and schedule:
• Session Time Settings:
Set the opening and closing time for each session manually using UTC-based minute inputs.
→ For example, enter Asia Start: 0, Asia End: 480 for 00:00–08:00 UTC.
This gives full flexibility to adjust session hours to match your preferred market behavior.
• Enable or Disable Elements:
Toggle the visibility of each session (Asia, Europe, US), as well as:
- Session Boxes
- Countdown Table
- Session Lines
- Liquidity Grab Labels
• Timezone Selection:
Choose between using UTC or your chart’s local timezone for session calculations.
• Customization Options:
Select number of past and future days to draw session data
Adjust vertical line transparency
Fine-tune label offset and spacing for clean layout
📊 Smart Session Boxes
Each session box tracks high, low, open, and close in real time, providing visual clarity on market structure. Once a session ends, the box closes, and the behavior type is saved and labeled ideal for spotting patterns across sessions.
• Asia: Green Box
• Europe: Orange Box
• US: Blue Box
💡 Why Use This Tool?
• Perfect Timing: Don’t get chopped in low-liquidity hours. Focus on sessions where volume and volatility align.
• Pattern Recognition: Study how price behaves session-to-session to build better strategies.
• Trap Detection: Spot manipulation moves (liquidity grabs) early and avoid common retail pitfalls.
• Macro Session Mapping: Use as a foundational layer to align trades with market structure and news cycles.
🔍 Example Use Case
You're watching BTC at 12:45 UTC. The indicator tells you:
The Asia session just ended (label shows “Asia Session End: Trend Up”)
Europe session starts in 15 minutes
A liquidity grab just triggered at the previous high—label confirmed
Now you know who’s active, what the market just did, and what’s about to start—all in one glance.
✅ Why Traders Trust It
• Visual & Intuitive: Fully chart-based, no clutter, no guessing
• Crypto-Focused: Designed specifically for 24/7 crypto markets (not outdated forex models)
• Non-Repainting: All labels and boxes stay as printed—no tricks
• Reliable: Tested across multiple exchanges, pairs, and timeframes
🧩 Built by Trade City Pro (TCP)
The TCP Market Session Indicator is part of a suite of professional tools used by over 150,000 traders. It’s coded in Pine Script v6 for full compatibility with TradingView’s latest capabilities.
🔗 Resources
• Tutorial: Learn how to analyze sessions like a pro in our TradingView guide:
"TradeCityPro Academy: Session Mapping & Liquidity Traps"
• More Tools: Explore our full library of indicators on






















