PXX Levels by AlgoKingsPXX Levels by AlgoKings
RISK DISCLAIMER: This indicator is an analytical tool for educational purposes only, not financial advice. Trading carries substantial risk of loss. This tool does not guarantee profitable trades. Always use proper risk management and never risk more than you can afford to lose.
WHAT ARE PXX LEVELS?
PXX (Previous X High/Low) displays key support and resistance levels from completed market cycles. Unlike standard pivot indicators that use fixed bars, this tool calculates levels using natural market rhythms (sessions, 90-minute institutional windows, true daily periods) that align with institutional trading behavior.
Example: Previous Day High at 15,200 acts as resistance. Previous London session Low at 15,150 acts as support.
UNDERLYING METHODOLOGY
This indicator combines four analytical layers:
1. CYCLE-BASED PERIOD DETECTION
Tracks 10 cycle types across swing and intraday timeframes:
SWING CYCLES:
- Yearly: 12-month institutional rebalancing highs/lows
- Quarterly: 3-month earnings cycle extremes
- Monthly: Calendar month highs/lows
- Weekly: 7-day swing extremes
- Daily: Standard 18:00-18:00 EST bars
- TrueDay: 00:00-00:00 EST for 24-hour markets (futures, forex, crypto)
INTRADAY CYCLES:
- Session: Asia (18:00-02:00), London (02:00-08:30), NY AM (08:30-12:00), NY PM (12:00-17:00) EST
- 90m: Three 90-minute institutional windows (LN 1/2/3, AM 1/2/3, PM 1/2/3)
- 30m: 30-minute cycle extremes
- 10m: 10-minute cycle extremes
Technical implementation:
- TrueDay calculation: Detects candle closes at exactly 00:00 EST using time modulo arithmetic on 24-hour markets
- Session detection: Pattern matching on hour:minute timestamps (e.g., hr==2 and mn==30 triggers London session end at 02:30)
- 90m subdivision: Three 90-minute windows per session identified by specific time boundaries
- Cycle completion: Uses request.security with lookahead_on to detect when previous period (high , low ) closes
2. LEVEL TRACKING AND STATE MANAGEMENT
Proprietary state machine for each level:
LEVEL STATES:
- Live: Current cycle forming, level updates bar-by-bar as new highs/lows form
- Final: Cycle completed, level locked at cycle's high/low
- Taken: Price has touched/exceeded the level (mitigation)
- Extended: Level continues displaying after cycle completion or mitigation
State transitions:
- New cycle detected → Create Live level at current high/low
- Cycle completes → Transition Live to Final, lock coordinates
- Price touches level → Mark as Taken, optional removal from chart
- History limit reached → Purge oldest levels
Technical components:
- Level Object: Tracks y-price, x-start time, x2-current extension, isFinal/isTaken/isLive/isExtend flags
- Dynamic extension: Levels extend to current bar (x2 = time) until finalized or taken
- Mitigation detection: Compares current high >= level for resistance, low <= level for support
3. OFF-CHART LEVEL BACKFILL
Handles higher timeframe levels that formed before chart data:
When chart timeframe is lower than cycle period (e.g., 5m chart showing Daily levels), the indicator backfills up to 4 historical cycles using nested request.security calls (high , low , high , low , etc.). These off-chart levels are marked with tag in tooltips.
Anchor detection: If price matches an off-chart level's value, the indicator anchors it to the current bar time, removing the off-chart designation and making it actionable.
4. OVERLAP CONSOLIDATION AND PURGE HIERARCHY
Advanced filtering to prevent chart clutter:
OVERLAP DETECTION:
When multiple cycles produce identical levels (same y-price and x2-extension), the indicator combines them into a single visual with merged labels. Example: "P D, P W H" shows Previous Day and Previous Week High coincide.
Algorithm compares all levels at barstate.islast, identifies duplicates by y-coordinate and x2-endpoint, undraws lower precedence levels, and appends their names to higher precedence level's tooltip.
PURGE HIERARCHY:
- "Purge 10m/30m on new 90m Cycle": When 90m cycle completes, removes all 10m and 30m sub-cycle levels from chart
- "Purge 90m on new Session Cycle": When Session cycle completes, removes all 90m levels from chart
- This prevents clutter by automatically cleaning sub-levels when parent cycle resets
Implementation uses array-based tracking where higher cycle types (Session, 90m) hold references to lower cycle Pxx objects, allowing cascading purge operations on cycle completion.
WHY CLOSED-SOURCE?
This script protects proprietary algorithms:
- Cycle boundary detection: Custom logic for TrueDay (00:00 EST detection), Session identification (time-based pattern matching for 5 sessions), 90m subdivision (9 windows per day with specific time triggers), requiring complex hour/minute arithmetic
- Off-chart backfill system: Nested request.security calls to retrieve 4 historical cycles with isOffChart flagging and dynamic anchor detection when price revisits historical levels
- Level state machine: Multi-state tracking (Live/Final/Taken/Extended) with transition logic, including dynamic y-coordinate updates during Live state and precise finalization timing
- Overlap consolidation algorithm: Compares all active levels at each bar using y-coordinate and x2-endpoint matching, merges duplicate levels, preserves highest precedence visual while concatenating names
- Purge hierarchy system: Parent-child relationships between cycle types (Session→90m→30m/10m) with cascading cleanup operations triggered on cycle completion events
Standard support/resistance indicators show fixed pivot points. This script provides institutional-level cycle tracking with intelligent state management and visual optimization.
TECHNICAL COMPONENTS
Core structures:
- Cycle Object: Tracks cycle type, period string, current bar data, and array of historical CycleBar objects (up to 5 cycles deep)
- CycleBar Object: Stores high/low values, timestamps (open, close, high-time, low-time), cycle name, and off-chart status
- Level Object: Contains y-price, start/end coordinates, state flags (isFinal, isTaken, isLive, isExtend, isOffChart, isCurrent), and drawing objects (line, labels)
- Pxx Object: Manages array of high levels and array of low levels for one cycle type, handles updates/extensions/purging
Cycle detection:
- TrueDay: Tests hour==0 and minute==0 at time_close OR dayofweek change (excluding Monday for non-crypto)
- Session: Matches hour:minute pairs (17:00=ASIA, 02:30=LN, 07:00=AM, 11:30=PM, 16:00=VOID)
- 90m: Nine specific time boundaries from 02:30 to 16:00 EST
- Default cycles: Uses previous period close time (time ) from request.security
HOW TO USE
Setup:
1. Apply to any chart (works on all symbols and timeframes)
2. Enable/disable cycle types in settings (Swing Cycles, Intraday Cycles)
3. Configure History count for each cycle (how many previous levels to show)
4. Enable "Live" to see current cycle levels forming in real-time
5. Enable "Extend" to keep levels visible after mitigation
Chart Timeframe Requirements:
- Swing cycles: Chart TF must be <= cycle period and divide evenly (e.g., Daily requires 1H or lower)
- Intraday cycles: Chart TF must divide evenly into cycle (e.g., Session/90m/30m require 30m or lower, 10m requires 10m or lower)
- TrueDay: Automatically used instead of Daily on 1H and below for 24-hour markets
Interpretation:
- Horizontal lines show Previous High (resistance) and Previous Low (support) from completed cycles
- "P" prefix = Previous cycle (e.g., "P D H" = Previous Day High)
- No prefix = Current cycle forming (e.g., "LN 2 L" = Current London 2nd 90m Low)
- Dotted line = Level has been taken (mitigated)
- Solid line = Level still active
- Dot at left = Level formation point
- Label at right = Cycle name and high/low designation
- in tooltip = Level formed before chart data, not yet anchored
SETTINGS EXPLAINED
Time Cycles (Each cycle has 5 settings):
- Checkbox: Enable/disable cycle
- Color: Line color for this cycle's levels
- History: Number of previous cycles to display (1-4, or higher for intraday)
- Extend: Keep level visible after mitigation
- Live: Show current cycle's level as it forms bar-by-bar
Swing Cycles Available:
Year, Quarter, Month, Week, Day (uses TrueDay automatically on 1H and below for 24h markets)
Intraday Cycles Available:
Session (5 sessions per day), 90m (9 windows per day), 30m, 10m
Options:
- Line Width: Thickness of level lines (default: 1)
- Label: Show/hide text labels with size and color options
- Show Mitigated: Keep levels on chart after taken (shows as dotted) or remove them
- Purge 10m/30m on new 90m Cycle: Auto-remove sub-levels when 90m completes
- Purge 90m on new Session Cycle: Auto-remove 90m levels when Session completes
Common Configurations:
- Scalping: Enable 10m, 30m, 90m with History=1-3, Live=true, Extend=false
- Day Trading: Enable Session, 90m, Day with History=1-4, Live=true
- Swing Trading: Enable Day, Week, Month with History=1-2, Extend=true
- Position Trading: Enable Week, Month, Quarter, Year with Extend=true
UPDATES
This script is actively maintained. Updates released through TradingView's native update system. For technical questions, use the comment section below.
Penunjuk Pine Script®






















