Dimensional Resonance ProtocolDimensional Resonance Protocol
🌀 CORE INNOVATION: PHASE SPACE RECONSTRUCTION & EMERGENCE DETECTION
The Dimensional Resonance Protocol represents a paradigm shift from traditional technical analysis to complexity science. Rather than measuring price levels or indicator crossovers, DRP reconstructs the hidden attractor governing market dynamics using Takens' embedding theorem, then detects emergence —the rare moments when multiple dimensions of market behavior spontaneously synchronize into coherent, predictable states.
The Complexity Hypothesis:
Markets are not simple oscillators or random walks—they are complex adaptive systems existing in high-dimensional phase space. Traditional indicators see only shadows (one-dimensional projections) of this higher-dimensional reality. DRP reconstructs the full phase space using time-delay embedding, revealing the true structure of market dynamics.
Takens' Embedding Theorem (1981):
A profound mathematical result from dynamical systems theory: Given a time series from a complex system, we can reconstruct its full phase space by creating delayed copies of the observation.
Mathematical Foundation:
From single observable x(t), create embedding vectors:
X(t) =
Where:
• d = Embedding dimension (default 5)
• τ = Time delay (default 3 bars)
• x(t) = Price or return at time t
Key Insight: If d ≥ 2D+1 (where D is the true attractor dimension), this embedding is topologically equivalent to the actual system dynamics. We've reconstructed the hidden attractor from a single price series.
Why This Matters:
Markets appear random in one dimension (price chart). But in reconstructed phase space, structure emerges—attractors, limit cycles, strange attractors. When we identify these structures, we can detect:
• Stable regions : Predictable behavior (trade opportunities)
• Chaotic regions : Unpredictable behavior (avoid trading)
• Critical transitions : Phase changes between regimes
Phase Space Magnitude Calculation:
phase_magnitude = sqrt(Σ ² for i = 0 to d-1)
This measures the "energy" or "momentum" of the market trajectory through phase space. High magnitude = strong directional move. Low magnitude = consolidation.
📊 RECURRENCE QUANTIFICATION ANALYSIS (RQA)
Once phase space is reconstructed, we analyze its recurrence structure —when does the system return near previous states?
Recurrence Plot Foundation:
A recurrence occurs when two phase space points are closer than threshold ε:
R(i,j) = 1 if ||X(i) - X(j)|| < ε, else 0
This creates a binary matrix showing when the system revisits similar states.
Key RQA Metrics:
1. Recurrence Rate (RR):
RR = (Number of recurrent points) / (Total possible pairs)
• RR near 0: System never repeats (highly stochastic)
• RR = 0.1-0.3: Moderate recurrence (tradeable patterns)
• RR > 0.5: System stuck in attractor (ranging market)
• RR near 1: System frozen (no dynamics)
Interpretation: Moderate recurrence is optimal —patterns exist but market isn't stuck.
2. Determinism (DET):
Measures what fraction of recurrences form diagonal structures in the recurrence plot. Diagonals indicate deterministic evolution (trajectory follows predictable paths).
DET = (Recurrence points on diagonals) / (Total recurrence points)
• DET < 0.3: Random dynamics
• DET = 0.3-0.7: Moderate determinism (patterns with noise)
• DET > 0.7: Strong determinism (technical patterns reliable)
Trading Implication: Signals are prioritized when DET > 0.3 (deterministic state) and RR is moderate (not stuck).
Threshold Selection (ε):
Default ε = 0.10 × std_dev means two states are "recurrent" if within 10% of a standard deviation. This is tight enough to require genuine similarity but loose enough to find patterns.
🔬 PERMUTATION ENTROPY: COMPLEXITY MEASUREMENT
Permutation entropy measures the complexity of a time series by analyzing the distribution of ordinal patterns.
Algorithm (Bandt & Pompe, 2002):
1. Take overlapping windows of length n (default n=4)
2. For each window, record the rank order pattern
Example: → pattern (ranks from lowest to highest)
3. Count frequency of each possible pattern
4. Calculate Shannon entropy of pattern distribution
Mathematical Formula:
H_perm = -Σ p(π) · ln(p(π))
Where π ranges over all n! possible permutations, p(π) is the probability of pattern π.
Normalized to :
H_norm = H_perm / ln(n!)
Interpretation:
• H < 0.3 : Very ordered, crystalline structure (strong trending)
• H = 0.3-0.5 : Ordered regime (tradeable with patterns)
• H = 0.5-0.7 : Moderate complexity (mixed conditions)
• H = 0.7-0.85 : Complex dynamics (challenging to trade)
• H > 0.85 : Maximum entropy (nearly random, avoid)
Entropy Regime Classification:
DRP classifies markets into five entropy regimes:
• CRYSTALLINE (H < 0.3): Maximum order, persistent trends
• ORDERED (H < 0.5): Clear patterns, momentum strategies work
• MODERATE (H < 0.7): Mixed dynamics, adaptive required
• COMPLEX (H < 0.85): High entropy, mean reversion better
• CHAOTIC (H ≥ 0.85): Near-random, minimize trading
Why Permutation Entropy?
Unlike traditional entropy methods requiring binning continuous data (losing information), permutation entropy:
• Works directly on time series
• Robust to monotonic transformations
• Computationally efficient
• Captures temporal structure, not just distribution
• Immune to outliers (uses ranks, not values)
⚡ LYAPUNOV EXPONENT: CHAOS vs STABILITY
The Lyapunov exponent λ measures sensitivity to initial conditions —the hallmark of chaos.
Physical Meaning:
Two trajectories starting infinitely close will diverge at exponential rate e^(λt):
Distance(t) ≈ Distance(0) × e^(λt)
Interpretation:
• λ > 0 : Positive Lyapunov exponent = CHAOS
- Small errors grow exponentially
- Long-term prediction impossible
- System is sensitive, unpredictable
- AVOID TRADING
• λ ≈ 0 : Near-zero = CRITICAL STATE
- Edge of chaos
- Transition zone between order and disorder
- Moderate predictability
- PROCEED WITH CAUTION
• λ < 0 : Negative Lyapunov exponent = STABLE
- Small errors decay
- Trajectories converge
- System is predictable
- OPTIMAL FOR TRADING
Estimation Method:
DRP estimates λ by tracking how quickly nearby states diverge over a rolling window (default 20 bars):
For each bar i in window:
δ₀ = |x - x | (initial separation)
δ₁ = |x - x | (previous separation)
if δ₁ > 0:
ratio = δ₀ / δ₁
log_ratios += ln(ratio)
λ ≈ average(log_ratios)
Stability Classification:
• STABLE : λ < 0 (negative growth rate)
• CRITICAL : |λ| < 0.1 (near neutral)
• CHAOTIC : λ > 0.2 (strong positive growth)
Signal Filtering:
By default, NEXUS requires λ < 0 (stable regime) for signal confirmation. This filters out trades during chaotic periods when technical patterns break down.
📐 HIGUCHI FRACTAL DIMENSION
Fractal dimension measures self-similarity and complexity of the price trajectory.
Theoretical Background:
A curve's fractal dimension D ranges from 1 (smooth line) to 2 (space-filling curve):
• D ≈ 1.0 : Smooth, persistent trending
• D ≈ 1.5 : Random walk (Brownian motion)
• D ≈ 2.0 : Highly irregular, space-filling
Higuchi Method (1988):
For a time series of length N, construct k different curves by taking every k-th point:
L(k) = (1/k) × Σ|x - x | × (N-1)/(⌊(N-m)/k⌋ × k)
For different values of k (1 to k_max), calculate L(k). The fractal dimension is the slope of log(L(k)) vs log(1/k):
D = slope of log(L) vs log(1/k)
Market Interpretation:
• D < 1.35 : Strong trending, persistent (Hurst > 0.5)
- TRENDING regime
- Momentum strategies favored
- Breakouts likely to continue
• D = 1.35-1.45 : Moderate persistence
- PERSISTENT regime
- Trend-following with caution
- Patterns have meaning
• D = 1.45-1.55 : Random walk territory
- RANDOM regime
- Efficiency hypothesis holds
- Technical analysis least reliable
• D = 1.55-1.65 : Anti-persistent (mean-reverting)
- ANTI-PERSISTENT regime
- Oscillator strategies work
- Overbought/oversold meaningful
• D > 1.65 : Highly complex, choppy
- COMPLEX regime
- Avoid directional bets
- Wait for regime change
Signal Filtering:
Resonance signals (secondary signal type) require D < 1.5, indicating trending or persistent dynamics where momentum has meaning.
🔗 TRANSFER ENTROPY: CAUSAL INFORMATION FLOW
Transfer entropy measures directed causal influence between time series—not just correlation, but actual information transfer.
Schreiber's Definition (2000):
Transfer entropy from X to Y measures how much knowing X's past reduces uncertainty about Y's future:
TE(X→Y) = H(Y_future | Y_past) - H(Y_future | Y_past, X_past)
Where H is Shannon entropy.
Key Properties:
1. Directional : TE(X→Y) ≠ TE(Y→X) in general
2. Non-linear : Detects complex causal relationships
3. Model-free : No assumptions about functional form
4. Lag-independent : Captures delayed causal effects
Three Causal Flows Measured:
1. Volume → Price (TE_V→P):
Measures how much volume patterns predict price changes.
• TE > 0 : Volume provides predictive information about price
- Institutional participation driving moves
- Volume confirms direction
- High reliability
• TE ≈ 0 : No causal flow (weak volume/price relationship)
- Volume uninformative
- Caution on signals
• TE < 0 (rare): Suggests price leading volume
- Potentially manipulated or thin market
2. Volatility → Momentum (TE_σ→M):
Does volatility expansion predict momentum changes?
• Positive TE : Volatility precedes momentum shifts
- Breakout dynamics
- Regime transitions
3. Structure → Price (TE_S→P):
Do support/resistance patterns causally influence price?
• Positive TE : Structural levels have causal impact
- Technical levels matter
- Market respects structure
Net Causal Flow:
Net_Flow = TE_V→P + 0.5·TE_σ→M + TE_S→P
• Net > +0.1 : Bullish causal structure
• Net < -0.1 : Bearish causal structure
• |Net| < 0.1 : Neutral/unclear causation
Causal Gate:
For signal confirmation, NEXUS requires:
• Buy signals : TE_V→P > 0 AND Net_Flow > 0.05
• Sell signals : TE_V→P > 0 AND Net_Flow < -0.05
This ensures volume is actually driving price (causal support exists), not just correlated noise.
Implementation Note:
Computing true transfer entropy requires discretizing continuous data into bins (default 6 bins) and estimating joint probability distributions. NEXUS uses a hybrid approach combining TE theory with autocorrelation structure and lagged cross-correlation to approximate information transfer in computationally efficient manner.
🌊 HILBERT PHASE COHERENCE
Phase coherence measures synchronization across market dimensions using Hilbert transform analysis.
Hilbert Transform Theory:
For a signal x(t), the Hilbert transform H (t) creates an analytic signal:
z(t) = x(t) + i·H (t) = A(t)·e^(iφ(t))
Where:
• A(t) = Instantaneous amplitude
• φ(t) = Instantaneous phase
Instantaneous Phase:
φ(t) = arctan(H (t) / x(t))
The phase represents where the signal is in its natural cycle—analogous to position on a unit circle.
Four Dimensions Analyzed:
1. Momentum Phase : Phase of price rate-of-change
2. Volume Phase : Phase of volume intensity
3. Volatility Phase : Phase of ATR cycles
4. Structure Phase : Phase of position within range
Phase Locking Value (PLV):
For two signals with phases φ₁(t) and φ₂(t), PLV measures phase synchronization:
PLV = |⟨e^(i(φ₁(t) - φ₂(t)))⟩|
Where ⟨·⟩ is time average over window.
Interpretation:
• PLV = 0 : Completely random phase relationship (no synchronization)
• PLV = 0.5 : Moderate phase locking
• PLV = 1 : Perfect synchronization (phases locked)
Pairwise PLV Calculations:
• PLV_momentum-volume : Are momentum and volume cycles synchronized?
• PLV_momentum-structure : Are momentum cycles aligned with structure?
• PLV_volume-structure : Are volume and structural patterns in phase?
Overall Phase Coherence:
Coherence = (PLV_mom-vol + PLV_mom-struct + PLV_vol-struct) / 3
Signal Confirmation:
Emergence signals require coherence ≥ threshold (default 0.70):
• Below 0.70: Dimensions not synchronized, no coherent market state
• Above 0.70: Dimensions in phase, coherent behavior emerging
Coherence Direction:
The summed phase angles indicate whether synchronized dimensions point bullish or bearish:
Direction = sin(φ_momentum) + 0.5·sin(φ_volume) + 0.5·sin(φ_structure)
• Direction > 0 : Phases pointing upward (bullish synchronization)
• Direction < 0 : Phases pointing downward (bearish synchronization)
🌀 EMERGENCE SCORE: MULTI-DIMENSIONAL ALIGNMENT
The emergence score aggregates all complexity metrics into a single 0-1 value representing market coherence.
Eight Components with Weights:
1. Phase Coherence (20%):
Direct contribution: coherence × 0.20
Measures dimensional synchronization.
2. Entropy Regime (15%):
Contribution: (0.6 - H_perm) / 0.6 × 0.15 if H < 0.6, else 0
Rewards low entropy (ordered, predictable states).
3. Lyapunov Stability (12%):
• λ < 0 (stable): +0.12
• |λ| < 0.1 (critical): +0.08
• λ > 0.2 (chaotic): +0.0
Requires stable, predictable dynamics.
4. Fractal Dimension Trending (12%):
Contribution: (1.45 - D) / 0.45 × 0.12 if D < 1.45, else 0
Rewards trending fractal structure (D < 1.45).
5. Dimensional Resonance (12%):
Contribution: |dimensional_resonance| × 0.12
Measures alignment across momentum, volume, structure, volatility dimensions.
6. Causal Flow Strength (9%):
Contribution: |net_causal_flow| × 0.09
Rewards strong causal relationships.
7. Phase Space Embedding (10%):
Contribution: min(|phase_magnitude_norm|, 3.0) / 3.0 × 0.10 if |magnitude| > 1.0
Rewards strong trajectory in reconstructed phase space.
8. Recurrence Quality (10%):
Contribution: determinism × 0.10 if DET > 0.3 AND 0.1 < RR < 0.8
Rewards deterministic patterns with moderate recurrence.
Total Emergence Score:
E = Σ(components) ∈
Capped at 1.0 maximum.
Emergence Direction:
Separate calculation determining bullish vs bearish:
• Dimensional resonance sign
• Net causal flow sign
• Phase magnitude correlation with momentum
Signal Threshold:
Default emergence_threshold = 0.75 means 75% of maximum possible emergence score required to trigger signals.
Why Emergence Matters:
Traditional indicators measure single dimensions. Emergence detects self-organization —when multiple independent dimensions spontaneously align. This is the market equivalent of a phase transition in physics, where microscopic chaos gives way to macroscopic order.
These are the highest-probability trade opportunities because the entire system is resonating in the same direction.
🎯 SIGNAL GENERATION: EMERGENCE vs RESONANCE
DRP generates two tiers of signals with different requirements:
TIER 1: EMERGENCE SIGNALS (Primary)
Requirements:
1. Emergence score ≥ threshold (default 0.75)
2. Phase coherence ≥ threshold (default 0.70)
3. Emergence direction > 0.2 (bullish) or < -0.2 (bearish)
4. Causal gate passed (if enabled): TE_V→P > 0 and net_flow confirms direction
5. Stability zone (if enabled): λ < 0 or |λ| < 0.1
6. Price confirmation: Close > open (bulls) or close < open (bears)
7. Cooldown satisfied: bars_since_signal ≥ cooldown_period
EMERGENCE BUY:
• All above conditions met with bullish direction
• Market has achieved coherent bullish state
• Multiple dimensions synchronized upward
EMERGENCE SELL:
• All above conditions met with bearish direction
• Market has achieved coherent bearish state
• Multiple dimensions synchronized downward
Premium Emergence:
When signal_quality (emergence_score × phase_coherence) > 0.7:
• Displayed as ★ star symbol
• Highest conviction trades
• Maximum dimensional alignment
Standard Emergence:
When signal_quality 0.5-0.7:
• Displayed as ◆ diamond symbol
• Strong signals but not perfect alignment
TIER 2: RESONANCE SIGNALS (Secondary)
Requirements:
1. Dimensional resonance > +0.6 (bullish) or < -0.6 (bearish)
2. Fractal dimension < 1.5 (trending/persistent regime)
3. Price confirmation matches direction
4. NOT in chaotic regime (λ < 0.2)
5. Cooldown satisfied
6. NO emergence signal firing (resonance is fallback)
RESONANCE BUY:
• Dimensional alignment without full emergence
• Trending fractal structure
• Moderate conviction
RESONANCE SELL:
• Dimensional alignment without full emergence
• Bearish resonance with trending structure
• Moderate conviction
Displayed as small ▲/▼ triangles with transparency.
Signal Hierarchy:
IF emergence conditions met:
Fire EMERGENCE signal (★ or ◆)
ELSE IF resonance conditions met:
Fire RESONANCE signal (▲ or ▼)
ELSE:
No signal
Cooldown System:
After any signal fires, cooldown_period (default 5 bars) must elapse before next signal. This prevents signal clustering during persistent conditions.
Cooldown tracks using bar_index:
bars_since_signal = current_bar_index - last_signal_bar_index
cooldown_ok = bars_since_signal >= cooldown_period
🎨 VISUAL SYSTEM: MULTI-LAYER COMPLEXITY
DRP provides rich visual feedback across four distinct layers:
LAYER 1: COHERENCE FIELD (Background)
Colored background intensity based on phase coherence:
• No background : Coherence < 0.5 (incoherent state)
• Faint glow : Coherence 0.5-0.7 (building coherence)
• Stronger glow : Coherence > 0.7 (coherent state)
Color:
• Cyan/teal: Bullish coherence (direction > 0)
• Red/magenta: Bearish coherence (direction < 0)
• Blue: Neutral coherence (direction ≈ 0)
Transparency: 98 minus (coherence_intensity × 10), so higher coherence = more visible.
LAYER 2: STABILITY/CHAOS ZONES
Background color indicating Lyapunov regime:
• Green tint (95% transparent): λ < 0, STABLE zone
- Safe to trade
- Patterns meaningful
• Gold tint (90% transparent): |λ| < 0.1, CRITICAL zone
- Edge of chaos
- Moderate risk
• Red tint (85% transparent): λ > 0.2, CHAOTIC zone
- Avoid trading
- Unpredictable behavior
LAYER 3: DIMENSIONAL RIBBONS
Three EMAs representing dimensional structure:
• Fast ribbon : EMA(8) in cyan/teal (fast dynamics)
• Medium ribbon : EMA(21) in blue (intermediate)
• Slow ribbon : EMA(55) in red/magenta (slow dynamics)
Provides visual reference for multi-scale structure without cluttering with raw phase space data.
LAYER 4: CAUSAL FLOW LINE
A thicker line plotted at EMA(13) colored by net causal flow:
• Cyan/teal : Net_flow > +0.1 (bullish causation)
• Red/magenta : Net_flow < -0.1 (bearish causation)
• Gray : |Net_flow| < 0.1 (neutral causation)
Shows real-time direction of information flow.
EMERGENCE FLASH:
Strong background flash when emergence signals fire:
• Cyan flash for emergence buy
• Red flash for emergence sell
• 80% transparency for visibility without obscuring price
📊 COMPREHENSIVE DASHBOARD
Real-time monitoring of all complexity metrics:
HEADER:
• 🌀 DRP branding with gold accent
CORE METRICS:
EMERGENCE:
• Progress bar (█ filled, ░ empty) showing 0-100%
• Percentage value
• Direction arrow (↗ bull, ↘ bear, → neutral)
• Color-coded: Green/gold if active, gray if low
COHERENCE:
• Progress bar showing phase locking value
• Percentage value
• Checkmark ✓ if ≥ threshold, circle ○ if below
• Color-coded: Cyan if coherent, gray if not
COMPLEXITY SECTION:
ENTROPY:
• Regime name (CRYSTALLINE/ORDERED/MODERATE/COMPLEX/CHAOTIC)
• Numerical value (0.00-1.00)
• Color: Green (ordered), gold (moderate), red (chaotic)
LYAPUNOV:
• State (STABLE/CRITICAL/CHAOTIC)
• Numerical value (typically -0.5 to +0.5)
• Status indicator: ● stable, ◐ critical, ○ chaotic
• Color-coded by state
FRACTAL:
• Regime (TRENDING/PERSISTENT/RANDOM/ANTI-PERSIST/COMPLEX)
• Dimension value (1.0-2.0)
• Color: Cyan (trending), gold (random), red (complex)
PHASE-SPACE:
• State (STRONG/ACTIVE/QUIET)
• Normalized magnitude value
• Parameters display: d=5 τ=3
CAUSAL SECTION:
CAUSAL:
• Direction (BULL/BEAR/NEUTRAL)
• Net flow value
• Flow indicator: →P (to price), P← (from price), ○ (neutral)
V→P:
• Volume-to-price transfer entropy
• Small display showing specific TE value
DIMENSIONAL SECTION:
RESONANCE:
• Progress bar of absolute resonance
• Signed value (-1 to +1)
• Color-coded by direction
RECURRENCE:
• Recurrence rate percentage
• Determinism percentage display
• Color-coded: Green if high quality
STATE SECTION:
STATE:
• Current mode: EMERGENCE / RESONANCE / CHAOS / SCANNING
• Icon: 🚀 (emergence buy), 💫 (emergence sell), ▲ (resonance buy), ▼ (resonance sell), ⚠ (chaos), ◎ (scanning)
• Color-coded by state
SIGNALS:
• E: count of emergence signals
• R: count of resonance signals
⚙️ KEY PARAMETERS EXPLAINED
Phase Space Configuration:
• Embedding Dimension (3-10, default 5): Reconstruction dimension
- Low (3-4): Simple dynamics, faster computation
- Medium (5-6): Balanced (recommended)
- High (7-10): Complex dynamics, more data needed
- Rule: d ≥ 2D+1 where D is true dimension
• Time Delay (τ) (1-10, default 3): Embedding lag
- Fast markets: 1-2
- Normal: 3-4
- Slow markets: 5-10
- Optimal: First minimum of mutual information (often 2-4)
• Recurrence Threshold (ε) (0.01-0.5, default 0.10): Phase space proximity
- Tight (0.01-0.05): Very similar states only
- Medium (0.08-0.15): Balanced
- Loose (0.20-0.50): Liberal matching
Entropy & Complexity:
• Permutation Order (3-7, default 4): Pattern length
- Low (3): 6 patterns, fast but coarse
- Medium (4-5): 24-120 patterns, balanced
- High (6-7): 720-5040 patterns, fine-grained
- Note: Requires window >> order! for stability
• Entropy Window (15-100, default 30): Lookback for entropy
- Short (15-25): Responsive to changes
- Medium (30-50): Stable measure
- Long (60-100): Very smooth, slow adaptation
• Lyapunov Window (10-50, default 20): Stability estimation window
- Short (10-15): Fast chaos detection
- Medium (20-30): Balanced
- Long (40-50): Stable λ estimate
Causal Inference:
• Enable Transfer Entropy (default ON): Causality analysis
- Keep ON for full system functionality
• TE History Length (2-15, default 5): Causal lookback
- Short (2-4): Quick causal detection
- Medium (5-8): Balanced
- Long (10-15): Deep causal analysis
• TE Discretization Bins (4-12, default 6): Binning granularity
- Few (4-5): Coarse, robust, needs less data
- Medium (6-8): Balanced
- Many (9-12): Fine-grained, needs more data
Phase Coherence:
• Enable Phase Coherence (default ON): Synchronization detection
- Keep ON for emergence detection
• Coherence Threshold (0.3-0.95, default 0.70): PLV requirement
- Loose (0.3-0.5): More signals, lower quality
- Balanced (0.6-0.75): Recommended
- Strict (0.8-0.95): Rare, highest quality
• Hilbert Smoothing (3-20, default 8): Phase smoothing
- Low (3-5): Responsive, noisier
- Medium (6-10): Balanced
- High (12-20): Smooth, more lag
Fractal Analysis:
• Enable Fractal Dimension (default ON): Complexity measurement
- Keep ON for full analysis
• Fractal K-max (4-20, default 8): Scaling range
- Low (4-6): Faster, less accurate
- Medium (7-10): Balanced
- High (12-20): Accurate, slower
• Fractal Window (30-200, default 50): FD lookback
- Short (30-50): Responsive FD
- Medium (60-100): Stable FD
- Long (120-200): Very smooth FD
Emergence Detection:
• Emergence Threshold (0.5-0.95, default 0.75): Minimum coherence
- Sensitive (0.5-0.65): More signals
- Balanced (0.7-0.8): Recommended
- Strict (0.85-0.95): Rare signals
• Require Causal Gate (default ON): TE confirmation
- ON: Only signal when causality confirms
- OFF: Allow signals without causal support
• Require Stability Zone (default ON): Lyapunov filter
- ON: Only signal when λ < 0 (stable) or |λ| < 0.1 (critical)
- OFF: Allow signals in chaotic regimes (risky)
• Signal Cooldown (1-50, default 5): Minimum bars between signals
- Fast (1-3): Rapid signal generation
- Normal (4-8): Balanced
- Slow (10-20): Very selective
- Ultra (25-50): Only major regime changes
Signal Configuration:
• Momentum Period (5-50, default 14): ROC calculation
• Structure Lookback (10-100, default 20): Support/resistance range
• Volatility Period (5-50, default 14): ATR calculation
• Volume MA Period (10-50, default 20): Volume normalization
Visual Settings:
• Customizable color scheme for all elements
• Toggle visibility for each layer independently
• Dashboard position (4 corners) and size (tiny/small/normal)
🎓 PROFESSIONAL USAGE PROTOCOL
Phase 1: System Familiarization (Week 1)
Goal: Understand complexity metrics and dashboard interpretation
Setup:
• Enable all features with default parameters
• Watch dashboard metrics for 500+ bars
• Do NOT trade yet
Actions:
• Observe emergence score patterns relative to price moves
• Note coherence threshold crossings and subsequent price action
• Watch entropy regime transitions (ORDERED → COMPLEX → CHAOTIC)
• Correlate Lyapunov state with signal reliability
• Track which signals appear (emergence vs resonance frequency)
Key Learning:
• When does emergence peak? (usually before major moves)
• What entropy regime produces best signals? (typically ORDERED or MODERATE)
• Does your instrument respect stability zones? (stable λ = better signals)
Phase 2: Parameter Optimization (Week 2)
Goal: Tune system to instrument characteristics
Requirements:
• Understand basic dashboard metrics from Phase 1
• Have 1000+ bars of history loaded
Embedding Dimension & Time Delay:
• If signals very rare: Try lower dimension (d=3-4) or shorter delay (τ=2)
• If signals too frequent: Try higher dimension (d=6-7) or longer delay (τ=4-5)
• Sweet spot: 4-8 emergence signals per 100 bars
Coherence Threshold:
• Check dashboard: What's typical coherence range?
• If coherence rarely exceeds 0.70: Lower threshold to 0.60-0.65
• If coherence often >0.80: Can raise threshold to 0.75-0.80
• Goal: Signals fire during top 20-30% of coherence values
Emergence Threshold:
• If too few signals: Lower to 0.65-0.70
• If too many signals: Raise to 0.80-0.85
• Balance with coherence threshold—both must be met
Phase 3: Signal Quality Assessment (Weeks 3-4)
Goal: Verify signals have edge via paper trading
Requirements:
• Parameters optimized per Phase 2
• 50+ signals generated
• Detailed notes on each signal
Paper Trading Protocol:
• Take EVERY emergence signal (★ and ◆)
• Optional: Take resonance signals (▲/▼) separately to compare
• Use simple exit: 2R target, 1R stop (ATR-based)
• Track: Win rate, average R-multiple, maximum consecutive losses
Quality Metrics:
• Premium emergence (★) : Should achieve >55% WR
• Standard emergence (◆) : Should achieve >50% WR
• Resonance signals : Should achieve >45% WR
• Overall : If <45% WR, system not suitable for this instrument/timeframe
Red Flags:
• Win rate <40%: Wrong instrument or parameters need major adjustment
• Max consecutive losses >10: System not working in current regime
• Profit factor <1.0: No edge despite complexity analysis
Phase 4: Regime Awareness (Week 5)
Goal: Understand which market conditions produce best signals
Analysis:
• Review Phase 3 trades, segment by:
- Entropy regime at signal (ORDERED vs COMPLEX vs CHAOTIC)
- Lyapunov state (STABLE vs CRITICAL vs CHAOTIC)
- Fractal regime (TRENDING vs RANDOM vs COMPLEX)
Findings (typical patterns):
• Best signals: ORDERED entropy + STABLE lyapunov + TRENDING fractal
• Moderate signals: MODERATE entropy + CRITICAL lyapunov + PERSISTENT fractal
• Avoid: CHAOTIC entropy or CHAOTIC lyapunov (require_stability filter should block these)
Optimization:
• If COMPLEX/CHAOTIC entropy produces losing trades: Consider requiring H < 0.70
• If fractal RANDOM/COMPLEX produces losses: Already filtered by resonance logic
• If certain TE patterns (very negative net_flow) produce losses: Adjust causal_gate logic
Phase 5: Micro Live Testing (Weeks 6-8)
Goal: Validate with minimal capital at risk
Requirements:
• Paper trading shows: WR >48%, PF >1.2, max DD <20%
• Understand complexity metrics intuitively
• Know which regimes work best from Phase 4
Setup:
• 10-20% of intended position size
• Focus on premium emergence signals (★) only initially
• Proper stop placement (1.5-2.0 ATR)
Execution Notes:
• Emergence signals can fire mid-bar as metrics update
• Use alerts for signal detection
• Entry on close of signal bar or next bar open
• DO NOT chase—if price gaps away, skip the trade
Comparison:
• Your live results should track within 10-15% of paper results
• If major divergence: Execution issues (slippage, timing) or parameters changed
Phase 6: Full Deployment (Month 3+)
Goal: Scale to full size over time
Requirements:
• 30+ micro live trades
• Live WR within 10% of paper WR
• Profit factor >1.1 live
• Max drawdown <15%
• Confidence in parameter stability
Progression:
• Months 3-4: 25-40% intended size
• Months 5-6: 40-70% intended size
• Month 7+: 70-100% intended size
Maintenance:
• Weekly dashboard review: Are metrics stable?
• Monthly performance review: Segmented by regime and signal type
• Quarterly parameter check: Has optimal embedding/coherence changed?
Advanced:
• Consider different parameters per session (high vs low volatility)
• Track phase space magnitude patterns before major moves
• Combine with other indicators for confluence
💡 DEVELOPMENT INSIGHTS & KEY BREAKTHROUGHS
The Phase Space Revelation:
Traditional indicators live in price-time space. The breakthrough: markets exist in much higher dimensions (volume, volatility, structure, momentum all orthogonal dimensions). Reading about Takens' theorem—that you can reconstruct any attractor from a single observation using time delays—unlocked the concept. Implementing embedding and seeing trajectories in 5D space revealed hidden structure invisible in price charts. Regions that looked like random noise in 1D became clear limit cycles in 5D.
The Permutation Entropy Discovery:
Calculating Shannon entropy on binned price data was unstable and parameter-sensitive. Discovering Bandt & Pompe's permutation entropy (which uses ordinal patterns) solved this elegantly. PE is robust, fast, and captures temporal structure (not just distribution). Testing showed PE < 0.5 periods had 18% higher signal win rate than PE > 0.7 periods. Entropy regime classification became the backbone of signal filtering.
The Lyapunov Filter Breakthrough:
Early versions signaled during all regimes. Win rate hovered at 42%—barely better than random. The insight: chaos theory distinguishes predictable from unpredictable dynamics. Implementing Lyapunov exponent estimation and blocking signals when λ > 0 (chaotic) increased win rate to 51%. Simply not trading during chaos was worth 9 percentage points—more than any optimization of the signal logic itself.
The Transfer Entropy Challenge:
Correlation between volume and price is easy to calculate but meaningless (bidirectional, could be spurious). Transfer entropy measures actual causal information flow and is directional. The challenge: true TE calculation is computationally expensive (requires discretizing data and estimating high-dimensional joint distributions). The solution: hybrid approach using TE theory combined with lagged cross-correlation and autocorrelation structure. Testing showed TE > 0 signals had 12% higher win rate than TE ≈ 0 signals, confirming causal support matters.
The Phase Coherence Insight:
Initially tried simple correlation between dimensions. Not predictive. Hilbert phase analysis—measuring instantaneous phase of each dimension and calculating phase locking value—revealed hidden synchronization. When PLV > 0.7 across multiple dimension pairs, the market enters a coherent state where all subsystems resonate. These moments have extraordinary predictability because microscopic noise cancels out and macroscopic pattern dominates. Emergence signals require high PLV for this reason.
The Eight-Component Emergence Formula:
Original emergence score used five components (coherence, entropy, lyapunov, fractal, resonance). Performance was good but not exceptional. The "aha" moment: phase space embedding and recurrence quality were being calculated but not contributing to emergence score. Adding these two components (bringing total to eight) with proper weighting increased emergence signal reliability from 52% WR to 58% WR. All calculated metrics must contribute to the final score. If you compute something, use it.
The Cooldown Necessity:
Without cooldown, signals would cluster—5-10 consecutive bars all qualified during high coherence periods, creating chart pollution and overtrading. Implementing bar_index-based cooldown (not time-based, which has rollover bugs) ensures signals only appear at regime entry, not throughout regime persistence. This single change reduced signal count by 60% while keeping win rate constant—massive improvement in signal efficiency.
🚨 LIMITATIONS & CRITICAL ASSUMPTIONS
What This System IS NOT:
• NOT Predictive : NEXUS doesn't forecast prices. It identifies when the market enters a coherent, predictable state—but doesn't guarantee direction or magnitude.
• NOT Holy Grail : Typical performance is 50-58% win rate with 1.5-2.0 avg R-multiple. This is probabilistic edge from complexity analysis, not certainty.
• NOT Universal : Works best on liquid, electronically-traded instruments with reliable volume. Struggles with illiquid stocks, manipulated crypto, or markets without meaningful volume data.
• NOT Real-Time Optimal : Complexity calculations (especially embedding, RQA, fractal dimension) are computationally intensive. Dashboard updates may lag by 1-2 seconds on slower connections.
• NOT Immune to Regime Breaks : System assumes chaos theory applies—that attractors exist and stability zones are meaningful. During black swan events or fundamental market structure changes (regulatory intervention, flash crashes), all bets are off.
Core Assumptions:
1. Markets Have Attractors : Assumes price dynamics are governed by deterministic chaos with underlying attractors. Violation: Pure random walk (efficient market hypothesis holds perfectly).
2. Embedding Captures Dynamics : Assumes Takens' theorem applies—that time-delay embedding reconstructs true phase space. Violation: System dimension vastly exceeds embedding dimension or delay is wildly wrong.
3. Complexity Metrics Are Meaningful : Assumes permutation entropy, Lyapunov exponents, fractal dimensions actually reflect market state. Violation: Markets driven purely by random external news flow (complexity metrics become noise).
4. Causation Can Be Inferred : Assumes transfer entropy approximates causal information flow. Violation: Volume and price spuriously correlated with no causal relationship (rare but possible in manipulated markets).
5. Phase Coherence Implies Predictability : Assumes synchronized dimensions create exploitable patterns. Violation: Coherence by chance during random period (false positive).
6. Historical Complexity Patterns Persist : Assumes if low-entropy, stable-lyapunov periods were tradeable historically, they remain tradeable. Violation: Fundamental regime change (market structure shifts, e.g., transition from floor trading to HFT).
Performs Best On:
• ES, NQ, RTY (major US index futures - high liquidity, clean volume data)
• Major forex pairs: EUR/USD, GBP/USD, USD/JPY (24hr markets, good for phase analysis)
• Liquid commodities: CL (crude oil), GC (gold), NG (natural gas)
• Large-cap stocks: AAPL, MSFT, GOOGL, TSLA (>$10M daily volume, meaningful structure)
• Major crypto on reputable exchanges: BTC, ETH on Coinbase/Kraken (avoid Binance due to manipulation)
Performs Poorly On:
• Low-volume stocks (<$1M daily volume) - insufficient liquidity for complexity analysis
• Exotic forex pairs - erratic spreads, thin volume
• Illiquid altcoins - wash trading, bot manipulation invalidates volume analysis
• Pre-market/after-hours - gappy, thin, different dynamics
• Binary events (earnings, FDA approvals) - discontinuous jumps violate dynamical systems assumptions
• Highly manipulated instruments - spoofing and layering create false coherence
Known Weaknesses:
• Computational Lag : Complexity calculations require iterating over windows. On slow connections, dashboard may update 1-2 seconds after bar close. Signals may appear delayed.
• Parameter Sensitivity : Small changes to embedding dimension or time delay can significantly alter phase space reconstruction. Requires careful calibration per instrument.
• Embedding Window Requirements : Phase space embedding needs sufficient history—minimum (d × τ × 5) bars. If embedding_dimension=5 and time_delay=3, need 75+ bars. Early bars will be unreliable.
• Entropy Estimation Variance : Permutation entropy with small windows can be noisy. Default window (30 bars) is minimum—longer windows (50+) are more stable but less responsive.
• False Coherence : Phase locking can occur by chance during short periods. Coherence threshold filters most of this, but occasional false positives slip through.
• Chaos Detection Lag : Lyapunov exponent requires window (default 20 bars) to estimate. Market can enter chaos and produce bad signal before λ > 0 is detected. Stability filter helps but doesn't eliminate this.
• Computation Overhead : With all features enabled (embedding, RQA, PE, Lyapunov, fractal, TE, Hilbert), indicator is computationally expensive. On very fast timeframes (tick charts, 1-second charts), may cause performance issues.
⚠️ RISK DISCLOSURE
Trading futures, forex, stocks, options, and cryptocurrencies involves substantial risk of loss and is not suitable for all investors. Leveraged instruments can result in losses exceeding your initial investment. Past performance, whether backtested or live, is not indicative of future results.
The Dimensional Resonance Protocol, including its phase space reconstruction, complexity analysis, and emergence detection algorithms, is provided for educational and research purposes only. It is not financial advice, investment advice, or a recommendation to buy or sell any security or instrument.
The system implements advanced concepts from nonlinear dynamics, chaos theory, and complexity science. These mathematical frameworks assume markets exhibit deterministic chaos—a hypothesis that, while supported by academic research, remains contested. Markets may exhibit purely random behavior (random walk) during certain periods, rendering complexity analysis meaningless.
Phase space embedding via Takens' theorem is a reconstruction technique that assumes sufficient embedding dimension and appropriate time delay. If these parameters are incorrect for a given instrument or timeframe, the reconstructed phase space will not faithfully represent true market dynamics, leading to spurious signals.
Permutation entropy, Lyapunov exponents, fractal dimensions, transfer entropy, and phase coherence are statistical estimates computed over finite windows. All have inherent estimation error. Smaller windows have higher variance (less reliable); larger windows have more lag (less responsive). There is no universally optimal window size.
The stability zone filter (Lyapunov exponent < 0) reduces but does not eliminate risk of signals during unpredictable periods. Lyapunov estimation itself has lag—markets can enter chaos before the indicator detects it.
Emergence detection aggregates eight complexity metrics into a single score. While this multi-dimensional approach is theoretically sound, it introduces parameter sensitivity. Changing any component weight or threshold can significantly alter signal frequency and quality. Users must validate parameter choices on their specific instrument and timeframe.
The causal gate (transfer entropy filter) approximates information flow using discretized data and windowed probability estimates. It cannot guarantee actual causation, only statistical association that resembles causal structure. Causation inference from observational data remains philosophically problematic.
Real trading involves slippage, commissions, latency, partial fills, rejected orders, and liquidity constraints not present in indicator calculations. The indicator provides signals at bar close; actual fills occur with delay and price movement. Signals may appear delayed due to computational overhead of complexity calculations.
Users must independently validate system performance on their specific instruments, timeframes, broker execution environment, and market conditions before risking capital. Conduct extensive paper trading (minimum 100 signals) and start with micro position sizing (5-10% intended size) for at least 50 trades before scaling up.
Never risk more capital than you can afford to lose completely. Use proper position sizing (0.5-2% risk per trade maximum). Implement stop losses on every trade. Maintain adequate margin/capital reserves. Understand that most retail traders lose money. Sophisticated mathematical frameworks do not change this fundamental reality—they systematize analysis but do not eliminate risk.
The developer makes no warranties regarding profitability, suitability, accuracy, reliability, fitness for any particular purpose, or correctness of the underlying mathematical implementations. Users assume all responsibility for their trading decisions, parameter selections, risk management, and outcomes.
By using this indicator, you acknowledge that you have read, understood, and accepted these risk disclosures and limitations, and you accept full responsibility for all trading activity and potential losses.
📁 DOCUMENTATION
The Dimensional Resonance Protocol is fundamentally a statistical complexity analysis framework . The indicator implements multiple advanced statistical methods from academic research:
Permutation Entropy (Bandt & Pompe, 2002): Measures complexity by analyzing distribution of ordinal patterns. Pure statistical concept from information theory.
Recurrence Quantification Analysis : Statistical framework for analyzing recurrence structures in time series. Computes recurrence rate, determinism, and diagonal line statistics.
Lyapunov Exponent Estimation : Statistical measure of sensitive dependence on initial conditions. Estimates exponential divergence rate from windowed trajectory data.
Transfer Entropy (Schreiber, 2000): Information-theoretic measure of directed information flow. Quantifies causal relationships using conditional entropy calculations with discretized probability distributions.
Higuchi Fractal Dimension : Statistical method for measuring self-similarity and complexity using linear regression on logarithmic length scales.
Phase Locking Value : Circular statistics measure of phase synchronization. Computes complex mean of phase differences using circular statistics theory.
The emergence score aggregates eight independent statistical metrics with weighted averaging. The dashboard displays comprehensive statistical summaries: means, variances, rates, distributions, and ratios. Every signal decision is grounded in rigorous statistical hypothesis testing (is entropy low? is lyapunov negative? is coherence above threshold?).
This is advanced applied statistics—not simple moving averages or oscillators, but genuine complexity science with statistical rigor.
Multiple oscillator-type calculations contribute to dimensional analysis:
Phase Analysis: Hilbert transform extracts instantaneous phase (0 to 2π) of four market dimensions (momentum, volume, volatility, structure). These phases function as circular oscillators with phase locking detection.
Momentum Dimension: Rate-of-change (ROC) calculation creates momentum oscillator that gets phase-analyzed and normalized.
Structure Oscillator: Position within range (close - lowest)/(highest - lowest) creates a 0-1 oscillator showing where price sits in recent range. This gets embedded and phase-analyzed.
Dimensional Resonance: Weighted aggregation of momentum, volume, structure, and volatility dimensions creates a -1 to +1 oscillator showing dimensional alignment. Similar to traditional oscillators but multi-dimensional.
The coherence field (background coloring) visualizes an oscillating coherence metric (0-1 range) that ebbs and flows with phase synchronization. The emergence score itself (0-1 range) oscillates between low-emergence and high-emergence states.
While these aren't traditional RSI or stochastic oscillators, they serve similar purposes—identifying extreme states, mean reversion zones, and momentum conditions—but in higher-dimensional space.
Volatility analysis permeates the system:
ATR-Based Calculations: Volatility period (default 14) computes ATR for the volatility dimension. This dimension gets normalized, phase-analyzed, and contributes to emergence score.
Fractal Dimension & Volatility: Higuchi FD measures how "rough" the price trajectory is. Higher FD (>1.6) correlates with higher volatility/choppiness. FD < 1.4 indicates smooth trends (lower effective volatility).
Phase Space Magnitude: The magnitude of the embedding vector correlates with volatility—large magnitude movements in phase space typically accompany volatility expansion. This is the "energy" of the market trajectory.
Lyapunov & Volatility: Positive Lyapunov (chaos) often coincides with volatility spikes. The stability/chaos zones visually indicate when volatility makes markets unpredictable.
Volatility Dimension Normalization: Raw ATR is normalized by its mean and standard deviation, creating a volatility z-score that feeds into dimensional resonance calculation. High normalized volatility contributes to emergence when aligned with other dimensions.
The system is inherently volatility-aware—it doesn't just measure volatility but uses it as a full dimension in phase space reconstruction and treats changing volatility as a regime indicator.
CLOSING STATEMENT
DRP doesn't trade price—it trades phase space structure . It doesn't chase patterns—it detects emergence . It doesn't guess at trends—it measures coherence .
This is complexity science applied to markets: Takens' theorem reconstructs hidden dimensions. Permutation entropy measures order. Lyapunov exponents detect chaos. Transfer entropy reveals causation. Hilbert phases find synchronization. Fractal dimensions quantify self-similarity.
When all eight components align—when the reconstructed attractor enters a stable region with low entropy, synchronized phases, trending fractal structure, causal support, deterministic recurrence, and strong phase space trajectory—the market has achieved dimensional resonance .
These are the highest-probability moments. Not because an indicator said so. Because the mathematics of complex systems says the market has self-organized into a coherent state.
Most indicators see shadows on the wall. DRP reconstructs the cave.
"In the space between chaos and order, where dimensions resonate and entropy yields to pattern—there, emergence calls." DRP
Taking you to school. — Dskyz, Trade with insight. Trade with anticipation.
חפש סקריפטים עבור "100万新币等于多少人民币"
Get_rich_aggressively_v5# 🚀 GET RICH AGGRESSIVELY v5 - TIER SYSTEM
### Precision Futures Scalping | NQ • ES • YM • GC • BTC
### *Leave Every Trade With Money*
---
## 📋 QUICK CHEATSHEET
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ GRA v5 SIGNAL REQUIREMENTS │
├─────────────────────────────────────────────────────────────────────────────┤
│ ✓ TIER MET Points ≥ 10 (B), ≥ 50 (A), ≥ 100 (S) │
│ ✓ VOLUME ≥ 1.3x average │
│ ✓ DELTA ≥ 55% dominance (buyers OR sellers) │
│ ✓ DIRECTION Candle color = Delta direction │
│ ✓ SESSION In London (3-5AM) or NY (9:30-11:30AM) if filter ON │
├─────────────────────────────────────────────────────────────────────────────┤
│ TIER ACTIONS │
├─────────────────────────────────────────────────────────────────────────────┤
│ 🥇 S-TIER (100+ pts) │ HOLD LONGER │ Big institutional move │
│ 🥈 A-TIER (50-99 pts) │ HOLD A BIT │ Medium move, trail to BE │
│ 🥉 B-TIER (10-49 pts) │ CLOSE QUICK │ Scalp 5-10 pts, exit fast │
│ ❌ NO TIER (< 10 pts) │ NO TRADE │ Not enough conviction │
├─────────────────────────────────────────────────────────────────────────────┤
│ SESSION PRIORITY │
├─────────────────────────────────────────────────────────────────────────────┤
│ 🔵 LONDON OPEN 03:00-05:00 ET │ IB forms 03:00-04:00 │
│ 🟢 NY OPEN 09:30-11:30 ET │ IB forms 09:30-10:30 │
│ 📊 IB BREAKOUT Close beyond IB + Impulse + 1.3x Vol = HIGH CONVICTION│
├─────────────────────────────────────────────────────────────────────────────┤
│ VOLUME PROFILE ZONES │
├─────────────────────────────────────────────────────────────────────────────┤
│ 🔵 HVN (Blue BG) High volume = Support/Resistance, expect consolidation │
│ 🟡 LVN (Yellow BG) Low volume = Breakout acceleration, fast moves │
│ 🟣 POC Point of Control = Institutional fair value │
│ 🟣 VAH/VAL Value Area edges = S/R zones │
├─────────────────────────────────────────────────────────────────────────────┤
│ MARKET STATE DECODER │
├─────────────────────────────────────────────────────────────────────────────┤
│ TREND UP │ Price > EMA20 + CVD rising │ Trade WITH the trend │
│ TREND DN │ Price < EMA20 + CVD falling │ Trade WITH the trend │
│ RETRACE │ Price/CVD diverging │ Pullback, prepare for entry │
│ RANGE │ No clear direction │ Reduce size or skip │
├─────────────────────────────────────────────────────────────────────────────┤
│ 💎 HIGH CONVICTION UPGRADE │
├─────────────────────────────────────────────────────────────────────────────┤
│ Purple diamond (◆) appears when: │
│ • Strong delta (≥65%) + Strong volume (≥2x) + Market in imbalance │
│ → Consider upgrading tier (B→A, A→S) for position sizing │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 🎯 THE TIER SYSTEM
The tier system classifies candles by **point movement** to determine trade management:
| Tier | Points | Action | Expected R:R |
|:----:|:------:|:------:|:------------:|
| 🥇 **S-TIER** | 100+ | HOLD LONGER | 2:1+ |
| 🥈 **A-TIER** | 50-99 | HOLD A BIT | 1.5:1 |
| 🥉 **B-TIER** | 10-49 | CLOSE QUICK | 1:1 |
| ❌ **NO TIER** | < 10 | NO TRADE | — |
---
## ✅ SIGNAL REQUIREMENTS
**ALL conditions must be TRUE for a signal:**
```
SIGNAL = TIER + VOLUME + DELTA + DIRECTION + SESSION
☐ Points ≥ 10 (minimum B-tier)
☐ Volume ≥ 1.3x average
☐ Delta dominance ≥ 55%
☐ Candle direction = Delta direction
☐ In session (if filter ON)
ANY FALSE = NO SIGNAL = NO TRADE
```
---
## 📊 VOLUME DOMINANCE ANALYSIS
This is the **core edge** of GRA v5. We use intrabar analysis to determine who is in control:
```
VOLUME ANALYSIS BREAKDOWN
Total Volume = Buy Volume + Sell Volume
Buy Volume: Who pushed price UP within the bar
Sell Volume: Who pushed price DOWN within the bar
Delta = Buy Volume - Sell Volume
Buy Dominance = Buy Volume / Total Volume
Sell Dominance = Sell Volume / Total Volume
≥ 55% = ONE SIDE IN CONTROL
≥ 65% = STRONG DOMINANCE (high conviction)
```
**Direction Confirmation Matrix:**
| Candle | Delta | Signal |
|:-------|:------|:-------|
| 🟢 Bullish | 55%+ Buyers | ✅ LONG |
| 🟢 Bullish | 55%+ Sellers | ❌ Trap |
| 🔴 Bearish | 55%+ Sellers | ✅ SHORT |
| 🔴 Bearish | 55%+ Buyers | ❌ Trap |
---
## 🕐 SESSION CONTEXT
### Initial Balance (IB) Framework
The **first hour** of each session establishes the IB range. Institutions use this for the day's framework.
```
SESSION WINDOWS (Eastern Time):
LONDON:
├── IB Period: 03:00 - 04:00 ← Range established
├── Trade Window: 03:00 - 05:00 ← Best signals
└── Extension Targets: 1.5x, 2.0x
NY:
├── IB Period: 09:30 - 10:30 ← Range established
├── Trade Window: 09:30 - 11:30 ← Best signals
└── Extension Targets: 1.5x, 2.0x
```
### IB Breakout Signals
```
L▲ / L▼ = London IB Breakout (Blue)
N▲ / N▼ = NY IB Breakout (Orange)
Confirmation Required:
☐ Close beyond IB level (not just wick)
☐ Impulse candle (body > 60% of range)
☐ Volume > 1.3x average
```
**IB Statistics:**
- 97% of days break either IB high or low
- 1.5x extension = first profit target
- 2.0x extension = full range target
- ~66% of London sessions sweep Asian high/low first
---
## 📈 VIRTUAL VOLUME PROFILE ZONES
GRA v5 calculates volume profile zones **without drawing the profile**, giving you the key levels:
### Zone Types
| Zone | Background | Meaning | Action |
|:-----|:-----------|:--------|:-------|
| **HVN** | 🔵 Blue | High Volume Node | S/R zone, expect consolidation |
| **LVN** | 🟡 Yellow | Low Volume Node | Breakout zone, fast acceleration |
| **POC** | 🟣 Purple dots | Point of Control | Institutional fair value |
| **VAH/VAL** | 🟣 Purple lines | Value Area edges | S/R boundaries |
### How to Use
```
ENTERING A TRADE:
At HVN:
├── Expect price to consolidate
├── Look for rejection/absorption
└── Better for reversals
At LVN:
├── Expect fast price movement
├── Don't fight the direction
└── Better for breakouts
Near POC:
├── Institutional fair value
├── Strong magnet effect
└── Watch for volume at POC
```
---
## 🔄 MARKET STATE DETECTION
GRA v5 classifies the market into four states using **CVD + Price Action**:
```
CVD Direction
↑ Rising ↓ Falling
┌─────────────┬─────────────┐
Price > EMA20 │ TREND UP │ RETRACE │
│ (Go Long) │ (Pullback) │
├─────────────┼─────────────┤
Price < EMA20 │ RETRACE │ TREND DN │
│ (Pullback) │ (Go Short) │
└─────────────┴─────────────┘
```
| State | Meaning | Action |
|:------|:--------|:-------|
| **TREND UP** | Buyers in control | Trade long, follow signals |
| **TREND DN** | Sellers in control | Trade short, follow signals |
| **RETRACE** | Pullback against trend | Prepare for continuation entry |
| **RANGE** | No clear direction | Reduce size or wait |
---
## 💎 HIGH CONVICTION UPGRADES
When extra conditions align, GRA v5 marks the signal with a **purple diamond**:
```
HIGH CONVICTION = Base Signal + Strong Delta (65%+) + Strong Volume (2x+) + Imbalance State
```
**Action:** Consider upgrading tier for position sizing:
- B-Tier → A-Tier management
- A-Tier → S-Tier management
---
## 📋 TRADING BY TIER
### 🥇 S-TIER (100+ points)
| | |
|:--|:--|
| **Entry** | Candle close |
| **Target** | IB extension / Next S/R |
| **Management** | HOLD LONGER |
**Rules:**
- Watch next candle - continues? HOLD
- Same tier same direction? ADD
- Opposite tier signal? EXIT on close
- Never close early unless reversal signal
### 🥈 A-TIER (50-99 points)
| | |
|:--|:--|
| **Entry** | Candle close |
| **Target** | 1.5x initial risk minimum |
| **Management** | HOLD A BIT |
**Rules:**
- Target 1.5:1 R:R minimum
- Trail to breakeven after 1:1
- If stalls, take profit
- Upgrade to S-tier management if high conviction
### 🥉 B-TIER (10-49 points)
| | |
|:--|:--|
| **Entry** | Candle close |
| **Target** | 5-10 points MAX |
| **Management** | CLOSE QUICK |
**Rules:**
- Exit in 1-3 candles
- DO NOT hold for more
- Any doubt = EXIT
- Quick scalp mentality
---
## ⚙️ SETTINGS BY INSTRUMENT
| Setting | NQ/ES | YM | GC | BTC |
|:--------|:-----:|:--:|:--:|:---:|
| **Timeframe** | 1-5 min | 1-5 min | 5-15 min | 1-15 min |
| **S-Tier** | 100 pts | 100 pts | 15 pts | 500 pts |
| **A-Tier** | 50 pts | 50 pts | 8 pts | 250 pts |
| **B-Tier** | 10 pts | 15 pts | 3 pts | 50 pts |
| **Min Volume** | 1.3x | 1.3x | 1.5x | 1.3x |
| **Delta %** | 55% | 55% | 58% | 55% |
| **Best Time** | 9:30-11:30 ET | 9:30-11:30 ET | 3-5AM & 8:30-10:30 ET | 24/7 |
---
## 📊 TABLE LEGEND
The info panel displays real-time market data:
| Row | Shows | Colors |
|:----|:------|:-------|
| **Pts** | Candle points | Gold/Green/Yellow by tier |
| **Tier** | S/A/B/X | Gold/Green/Yellow/White |
| **Vol** | Volume ratio | Yellow (2x+) / Green (1.3x+) / Red |
| **Delta** | Buy/Sell % | Green (buy) / Red (sell) / White |
| **CVD** | Direction | Green ▲ / Red ▼ |
| **State** | Market state | Green/Red/Orange/Gray |
| **Sess** | Session | Yellow if active |
| **Zone** | VP zone | Blue/Yellow/Purple |
| **Sig** | Signal | Green/Red if active |
---
## 🔔 ALERTS
| Alert | When | Action |
|:------|:-----|:-------|
| **S-TIER LONG/SHORT** | S-tier signal | Hold longer |
| **A-TIER LONG/SHORT** | A-tier signal | Hold a bit |
| **B-TIER LONG/SHORT** | B-tier signal | Close quick |
| **LON IB BREAK UP/DN** | London IB breakout | Major session move |
| **NY IB BREAK UP/DN** | NY IB breakout | Major session move |
| **HIGH CONVICTION** | Upgraded signal | Consider larger size |
| **LONDON/NY OPEN** | Session start | Get ready |
---
## 💰 THE GOLDEN RULE
> ### **LEAVE EVERY TRADE WITH MONEY**
>
> | Situation | Rule |
> |:----------|:-----|
> | B-Tier | Small win > Small loss |
> | A-Tier | Trail to BE, lock profit |
> | S-Tier | Let it run to target |
> | No Signal | NO TRADE |
> | Wrong Side | EXIT immediately |
>
> **Capital preserved = Trade tomorrow**
---
## ⚠️ DISCLAIMER
> Risk management is **YOUR** responsibility.
> Never risk more than 1-2% per trade.
> Paper trade until you understand the signals.
> Past performance ≠ future results.
---
### Get Rich. Stay Rich. Trade Aggressively. 🚀
**Get Rich Aggressively v5**
*Precision Futures Scalping*
ICT FVG & Swing Detector Basic by Trader Riaz//@version=6
indicator("ICT FVG & Swing Detector Basic by Trader Riaz", overlay=true)
// Display toggles for Bullish FVGs
show_bull_fvg = input.bool(true, "Show Bullish FVGs?")
// Input settings for Bullish FVGs
fvg_bull_count = input.int(1, "Number of Bullish FVGs to show", minval=1)
// Color settings for Bullish FVGs
bullish_fvg_color = input.color(color.green, "Bullish FVG Color")
// Bullish FVG Extend Options
bull_fvg_extendGroup = "Bullish FVG Extend Options"
bull_fvg_extendOption = input.string("Default", "Bullish FVG Extend Option", options= , group=bull_fvg_extendGroup)
bull_fvg_extendCandles = input.int(8, "Bullish FVG Extend Candles (Limited Only)", minval=1, maxval=100, step=1, group=bull_fvg_extendGroup)
// Display toggles for Bearish FVGs
show_bear_fvg = input.bool(true, "Show Bearish FVGs?")
// Input settings for Bearish FVGs
fvg_bear_count = input.int(1, "Number of Bearish FVGs to show", minval=1)
// Color settings for Bearish FVGs
bearish_fvg_color = input.color(color.red, "Bearish FVG Color")
// Bearish FVG Extend Options
bear_fvg_extendGroup = "Bearish FVG Extend Options"
bear_fvg_extendOption = input.string("Default", "Bearish FVG Extend Option", options= , group=bear_fvg_extendGroup)
bear_fvg_extendCandles = input.int(8, "Bearish FVG Extend Candles (Limited Only)", minval=1, maxval=100, step=1, group=bear_fvg_extendGroup)
// Display toggles for Swing Highs
show_swing_high = input.bool(true, "Show Swing Highs?")
// Input settings for Swing Highs
swing_high_count = input.int(2, "Number of Swing Highs to show", minval=1)
// Color settings for Swing Highs
swing_high_color = input.color(color.green, "Swing High Line & Label Color")
// Swing High Extend Options
swing_high_extendGroup = "Swing High Extend Options"
swing_high_extendOption = input.string("Default", "Swing High Extend Option", options= , group=swing_high_extendGroup)
swing_high_extendCandles = input.int(8, "Swing High Extend Candles (Limited Only)", minval=1, maxval=100, step=1, group=swing_high_extendGroup)
// Display toggles for Swing Lows
show_swing_low = input.bool(true, "Show Swing Lows?")
// Input settings for Swing Lows
swing_low_count = input.int(2, "Number of Swing Lows to show", minval=1)
// Color settings for Swing Lows
swing_low_color = input.color(color.red, "Swing Low Line & Label Color")
// Swing Low Extend Options
swing_low_extendGroup = "Swing Low Extend Options"
swing_low_extendOption = input.string("Default", "Swing Low Extend Option", options= , group=swing_low_extendGroup)
swing_low_extendCandles = input.int(8, "Swing Low Extend Candles (Limited Only)", minval=1, maxval=100, step=1, group=swing_low_extendGroup)
// Target Settings
showNextTarget = input.bool(true, "Show Next Target")
nextTargetHighColor = input.color(color.red, "Next Target High Color")
nextTargetLowColor = input.color(color.red, "Next Target Low Color")
// === Time Calculation ===
// Calculate one bar duration in milliseconds
barDuration = time - time
// Define reasonable extension period (4 bars into future)
extensionPeriod = barDuration * 4
// Arrays to store values with timestamps
var bull_fvg_data = array.new(0)
var bear_fvg_data = array.new(0)
var swing_high_data = array.new(0)
var swing_low_data = array.new(0)
var bull_fvg_labels = array.new(0)
var bear_fvg_labels = array.new(0)
var swing_high_labels = array.new(0)
var swing_low_labels = array.new(0)
var bull_fvg_midlines = array.new(0)
var bear_fvg_midlines = array.new(0)
var bull_fvg_tops = array.new(0)
var bull_fvg_bottoms = array.new(0)
var bear_fvg_tops = array.new(0)
var bear_fvg_bottoms = array.new(0)
// Get the last bar index
last_bar = last_bar_index + 3
// Function to determine right boundary based on extend option
get_right_boundary(option, extend_candles, default_right) =>
if option == "None"
bar_index - 2
else if option == "Limited"
bar_index - 2 + extend_candles
else
default_right
// Bullish FVG Detection
if high < low and show_bull_fvg
right_bar = get_right_boundary(bull_fvg_extendOption, bull_fvg_extendCandles, last_bar)
new_box = box.new(left=bar_index-2,
top=low,
right=right_bar,
bottom=high ,
bgcolor=color.new(bullish_fvg_color, 90),
border_color=bullish_fvg_color)
bull_mid = (low + high ) / 2
new_midline = line.new(bar_index-2, bull_mid, right_bar, bull_mid,
color=color.new(bullish_fvg_color, 50),
style=line.style_dashed)
new_label = label.new(right_bar-1, bull_mid, "Bullish FVG",
color=color.new(bullish_fvg_color, 100),
textcolor=bullish_fvg_color,
style=label.style_none,
textalign=text.align_right,
size=size.small)
array.unshift(bull_fvg_data, new_box)
array.unshift(bull_fvg_midlines, new_midline)
array.unshift(bull_fvg_labels, new_label)
array.unshift(bull_fvg_tops, low)
array.unshift(bull_fvg_bottoms, high )
if array.size(bull_fvg_data) > fvg_bull_count
box.delete(array.pop(bull_fvg_data))
line.delete(array.pop(bull_fvg_midlines))
label.delete(array.pop(bull_fvg_labels))
array.pop(bull_fvg_tops)
array.pop(bull_fvg_bottoms)
// Bearish FVG Detection
if low > high and show_bear_fvg
right_bar = get_right_boundary(bear_fvg_extendOption, bear_fvg_extendCandles, last_bar)
new_box = box.new(left=bar_index-2,
top=low ,
right=right_bar,
bottom=high,
bgcolor=color.new(bearish_fvg_color, 90),
border_color=bearish_fvg_color)
bear_mid = (low + high) / 2
new_midline = line.new(bar_index-2, bear_mid, right_bar, bear_mid,
color=color.new(bearish_fvg_color, 50),
style=line.style_dashed)
new_label = label.new(right_bar-1, bear_mid, "Bearish FVG",
color=color.new(bearish_fvg_color, 100),
textcolor=bearish_fvg_color,
style=label.style_none,
textalign=text.align_right,
size=size.small)
array.unshift(bear_fvg_data, new_box)
array.unshift(bear_fvg_midlines, new_midline)
array.unshift(bear_fvg_labels, new_label)
array.unshift(bear_fvg_tops, low )
array.unshift(bear_fvg_bottoms, high)
if array.size(bear_fvg_data) > fvg_bear_count
box.delete(array.pop(bear_fvg_data))
line.delete(array.pop(bear_fvg_midlines))
label.delete(array.pop(bear_fvg_labels))
array.pop(bear_fvg_tops)
array.pop(bear_fvg_bottoms)
// Swing High Detection
is_swing_high = high < high and high > high
if is_swing_high and show_swing_high
right_bar = get_right_boundary(swing_high_extendOption, swing_high_extendCandles, last_bar + 3)
new_line = line.new(bar_index - 1, high , right_bar, high ,
color=swing_high_color)
new_label = label.new(right_bar, high , "Swing High",
color=color.new(color.white, 30),
style=label.style_label_left,
textcolor=swing_high_color,
size=size.tiny)
array.unshift(swing_high_data, new_line)
array.unshift(swing_high_labels, new_label)
if array.size(swing_high_data) > swing_high_count
line.delete(array.pop(swing_high_data))
label.delete(array.pop(swing_high_labels))
// Swing Low Detection
is_swing_low = low > low and low < low
if is_swing_low and show_swing_low
right_bar = get_right_boundary(swing_low_extendOption, swing_low_extendCandles, last_bar + 3)
new_line = line.new(bar_index -1, low , right_bar, low ,
color=swing_low_color)
new_label = label.new(right_bar, low , "Swing Low",
color=color.new(color.white, 30),
style=label.style_label_left,
textcolor=swing_low_color,
size=size.tiny)
array.unshift(swing_low_data, new_line)
array.unshift(swing_low_labels, new_label)
if array.size(swing_low_data) > swing_low_count
line.delete(array.pop(swing_low_data))
label.delete(array.pop(swing_low_labels))
// Clean up if toggles are turned off
if not show_bull_fvg and array.size(bull_fvg_data) > 0
for i = 0 to array.size(bull_fvg_data) - 1
box.delete(array.get(bull_fvg_data, i))
line.delete(array.get(bull_fvg_midlines, i))
label.delete(array.get(bull_fvg_labels, i))
array.clear(bull_fvg_data)
array.clear(bull_fvg_midlines)
array.clear(bull_fvg_labels)
array.clear(bull_fvg_tops)
array.clear(bull_fvg_bottoms)
if not show_bear_fvg and array.size(bear_fvg_data) > 0
for i = 0 to array.size(bear_fvg_data) - 1
box.delete(array.get(bear_fvg_data, i))
line.delete(array.get(bear_fvg_midlines, i))
label.delete(array.get(bear_fvg_labels, i))
array.clear(bear_fvg_data)
array.clear(bear_fvg_midlines)
array.clear(bear_fvg_labels)
array.clear(bear_fvg_tops)
array.clear(bear_fvg_bottoms)
// === Swing High/Low Detection ===
var float swingHighs = array.new()
var int swingHighTimes = array.new()
var float swingLows = array.new()
var int swingLowTimes = array.new()
var line swingHighLines = array.new()
var label swingHighLabels = array.new()
var line swingLowLines = array.new()
var label swingLowLabels = array.new()
isSwingHigh = high > high and high > high
isSwingLow = low < low and low < low
if isSwingHigh
array.unshift(swingHighs, high )
array.unshift(swingHighTimes, time )
if isSwingLow
array.unshift(swingLows, low )
array.unshift(swingLowTimes, time )
// === Next Target Detection ===
var line currentTargetLine = na
var label currentTargetLabel = na
if showNextTarget
if not na(currentTargetLine)
line.delete(currentTargetLine)
if not na(currentTargetLabel)
label.delete(currentTargetLabel)
priceRising = close > open
priceFalling = close < open
// Use slightly longer extension for targets
targetExtension = barDuration * 8
if priceRising and array.size(swingHighs) > 0
for i = 0 to array.size(swingHighs) - 1
target = array.get(swingHighs, i)
targetTime = array.get(swingHighTimes, i)
if target > close
currentTargetLine := line.new(
x1=targetTime, y1=target,
x2=time + targetExtension, y2=target,
color=nextTargetHighColor, width=2,
style=line.style_dashed,
xloc=xloc.bar_time)
currentTargetLabel := label.new(
x=time + targetExtension, y=target,
text="Potential Target", size=size.tiny,
style=label.style_label_left,
color=nextTargetHighColor,
textcolor=color.white,
xloc=xloc.bar_time)
break
else if priceFalling and array.size(swingLows) > 0
for i = 0 to array.size(swingLows) - 1
target = array.get(swingLows, i)
targetTime = array.get(swingLowTimes, i)
if target < close
currentTargetLine := line.new(
x1=targetTime, y1=target,
x2=time + targetExtension, y2=target,
color=nextTargetLowColor, width=2,
style=line.style_dashed,
xloc=xloc.bar_time)
currentTargetLabel := label.new(
x=time + targetExtension, y=target,
text="Potential Target", size=size.tiny,
style=label.style_label_left,
color=nextTargetLowColor,
textcolor=color.white,
xloc=xloc.bar_time)
break
Flux-Tensor Singularity [FTS]Flux-Tensor Singularity - Multi-Factor Market Pressure Indicator
The Flux-Tensor Singularity (FTS) is an advanced multi-factor oscillator that combines volume analysis, momentum tracking, and volatility-weighted normalization to identify critical market inflection points. Unlike traditional single-factor indicators, FTS synthesizes price velocity, volume mass, and volatility context into a unified framework that adapts to changing market regimes.
This indicator identifies extreme market conditions (termed "singularities") where multiple confirming factors converge, then uses a sophisticated scoring system to determine directional bias. It is designed for traders seeking high-probability setups with built-in confluence requirements.
THEORETICAL FOUNDATION
The indicator is built on the premise that market time is not constant - different market conditions contain varying levels of information density. A 1-minute bar during a major news event contains far more actionable information than a 1-minute bar during overnight low-volume trading. Traditional indicators treat all bars equally; FTS does not.
The theoretical framework draws conceptual parallels to physics (purely as a mental model, not literal physics):
Volume as Mass: Large volume represents significant market participation and "weight" behind price moves. Just as massive objects have stronger gravitational effects, high-volume moves carry more significance.
Price Change as Velocity: The rate of price movement through price space represents momentum and directional force.
Volatility as Time Dilation: When volatility is high relative to its historical norm, the "information density" of each bar increases. The indicator weights these periods more heavily, similar to how time dilates near massive objects in physics.
This is a pedagogical metaphor to create a coherent mental model - the underlying mathematics are standard financial calculations combined in a novel way.
MATHEMATICAL FRAMEWORK
The indicator calculates a composite singularity value through four distinct steps:
Step 1: Raw Singularity Calculation
S_raw = (ΔP × V) × γ²
Where:
ΔP = Price Velocity = close - close
V = Volume Mass = log(volume + 1)
γ² = Time Dilation Factor = (ATR_local / ATR_global)²
Volume Transformation: Volume is log-transformed because raw volume can have extreme outliers (10x-100x normal). The logarithm compresses these spikes while preserving their significance. This is standard practice in volume analysis.
Volatility Weighting: The ratio of short-term ATR (5 periods) to long-term ATR (user-defined lookback) is squared to create a volatility amplification factor. When local volatility exceeds global volatility, this ratio increases, amplifying the raw singularity value. This makes the indicator regime-aware.
Step 2: Normalization
The raw singularity values are normalized to a 0-100 scale using a stochastic-style calculation:
S_normalized = ((S_raw - S_min) / (S_max - S_min)) × 100
Where S_min and S_max are the lowest and highest raw singularity values over the lookback period.
Step 3: Epsilon Compression
S_compressed = 50 + ((S_normalized - 50) / ε)
This is the critical innovation that makes the sensitivity control functional. By applying compression AFTER normalization, the epsilon parameter actually affects the final output:
ε < 1.0: Expands range (more signals)
ε = 1.0: No change (default)
ε > 1.0: Compresses toward 50 (fewer, higher-quality signals)
For example, with ε = 2.0, a normalized value of 90 becomes 70, making threshold breaches rarer and more significant.
Step 4: Smoothing
S_final = EMA(S_compressed, smoothing_period)
An exponential moving average removes high-frequency noise while preserving trend.
SIGNAL GENERATION LOGIC
When the tensor crosses above the upper threshold (default 90) or below the lower threshold (default 10), an extreme event is detected. However, the indicator does NOT immediately generate a buy or sell signal. Instead, it analyzes market context through a multi-factor scoring system:
Scoring Components:
Price Structure (+1 point): Current bar bullish/bearish
Momentum (+1 point): Price higher/lower than N bars ago
Trend Context (+2 points): Fast EMA above/below slow EMA (weighted heavier)
Acceleration (+1 point): Rate of change increasing/decreasing
Volume Multiplier (×1.5): If volume > average, multiply score
The highest score (bullish vs bearish) determines signal direction. This prevents the common indicator failure mode of "overbought can stay overbought" by requiring directional confirmation.
Signal Conditions:
A BUY signal requires:
Extreme event detection (tensor crosses threshold)
Bullish score > Bearish score
Price confirmation: Bullish candle (optional, user-controlled)
Volume confirmation: Volume > average (optional, user-controlled)
Momentum confirmation: Positive momentum (optional, user-controlled)
A SELL signal requires the inverse conditions.
INPUTS EXPLAINED - Core Parameters:
Global Horizon (Context): Default 20. Lookback period for normalization and volatility comparison. Higher values = smoother but less responsive. Lower values = more signals but potentially more noise.
Tensor Smoothing: Default 3. EMA period applied to final output. Removes "quantum foam" (high-frequency noise). Range 1-20.
Singularity Threshold: Default 90. Values above this (or below 100-threshold) trigger extreme event detection. Higher = rarer, stronger signals.
Signal Sensitivity (Epsilon): Default 1.0. Post-normalization compression factor. This is the key innovation - it actually works because it's applied AFTER normalization. Range 0.1-5.0.
Signal Interpreter Toggles:
Require Price Confirmation: Default ON. Only generates buy signals on bullish candles, sell signals on bearish candles. Reduces false signals but may delay entry.
Require Volume Confirmation: Default ON. Only signals when volume > average. Critical for stocks/crypto, less important for forex (unreliable volume data).
Use Momentum Filter: Default ON. Requires momentum agreement with signal direction. Prevents counter-trend signals.
Momentum Lookback: Default 5. Number of bars for momentum calculation. Shorter = more responsive, longer = trend-following bias.
Visual Controls:
Colors: Customizable colors for bullish flux, bearish flux, background, and event horizon.
Visual Transparency: Default 85. Master control for all visual elements (accretion disk, field lines, particles, etc.). Range 50-99. Signals and dashboard have separate controls.
Visibility Toggles: Individual on/off switches for:
Gravitational field lines (trend EMAs)
Field reversals (trend crossovers)
Accretion disk (background gradient)
Singularity diamonds (neutral extreme events)
Energy particles (volume bursts)
Event horizon flash (extreme event background)
Signal background flash
Signal Size: Tiny/Small/Normal triangle size
Signal Offsets: Separate controls for buy and sell signal vertical positioning (percentage of price)
Dashboard Settings:
Show Dashboard: Toggle on/off
Position: 9 placement options (all corners, centers, middles)
Text Size: Tiny/Small/Normal/Large
Background Transparency: 0-50, separate from visual transparency
VISUAL ELEMENTS EXPLAINED
1. Accretion Disk (Background Gradient):
A three-layer gradient background that intensifies as the tensor approaches extremes. The outer disk appears at any non-neutral reading, the inner disk activates above 70 or below 30, and the core layer appears above 85 or below 15. Color indicates direction (cyan = bullish, red = bearish). This provides instant visual feedback on market pressure intensity.
2. Gravitational Field Lines (EMAs):
Two trend-following EMAs (10 and 30 period) visualized as colored lines. These represent the "curvature" of market trend - when they diverge, trend is strong; when they converge, trend is weakening. Crossovers mark potential trend reversals.
3. Field Reversals (Circles):
Small circles appear when the fast EMA crosses the slow EMA, indicating a potential trend change. These are distinct from extreme events and appear at normal market structure shifts.
4. Singularity Diamonds:
Small diamond shapes appear when the tensor reaches extreme levels (>90 or <10) but doesn't meet the full signal criteria. These are "watch" events - extreme pressure exists but directional confirmation is lacking.
5. Energy Particles (Dots):
Tiny dots appear when volume exceeds 2× average, indicating significant participation. Color matches bar direction. These highlight genuine high-conviction moves versus low-volume drifts.
6. Event Horizon Flash:
A golden background flash appears the instant any extreme threshold is breached, before directional analysis. This alerts you to pay attention.
7. Signal Background Flash:
When a full buy/sell signal is confirmed, the background flashes cyan (buy) or red (sell). This is your primary alert that all conditions are met.
8. Signal Triangles:
The actual buy (▲) and sell (▼) markers. These only appear when ALL selected confirmation criteria are satisfied. Position is offset from bars to avoid overlap with other indicators.
DASHBOARD METRICS EXPLAINED
The dashboard displays real-time calculated values:
Event Density: Current tensor value (0-100). Above 90 or below 10 = critical. Icon changes: 🔥 (extreme high), ❄️ (extreme low), ○ (neutral).
Time Dilation (γ): Current volatility ratio squared. Values >2.0 indicate extreme volatility environments. >1.5 = elevated, >1.0 = above average. Icon: ⚡ (extreme), ⚠ (elevated), ○ (normal).
Mass (Vol): Log-transformed volume value. Compared to volume ratio (current/average). Icon: ● (>2× avg), ◐ (>1× avg), ○ (below avg).
Velocity (ΔP): Raw price change. Direction arrow indicates momentum direction. Shows the actual price delta value.
Bullish Flux: Current bullish context score. Displayed as both a bar chart (visual) and numeric value. Brighter when bullish score dominates.
Bearish Flux: Current bearish context score. Same visualization as bullish flux. These scores compete - the winner determines signal direction.
Field: Trend direction based on EMA relationship. "Repulsive" (uptrend), "Attractive" (downtrend), "Neutral" (ranging). Icon: ⬆⬇↔
State: Current market condition:
🚀 EJECTION: Buy signal active
💥 COLLAPSE: Sell signal active
⚠ CRITICAL: Extreme event, no directional confirmation
● STABLE: Normal market conditions
HOW TO USE THE INDICATOR
1. Wait for Extreme Events:
The indicator is designed to be selective. Don't trade every fluctuation - wait for tensor to reach >90 or <10. This alone is not a signal.
2. Check Context Scores:
Look at the Bullish Flux vs Bearish Flux in the dashboard. If scores are close (within 1-2 points), the market is indecisive - skip the trade.
3. Confirm with Signals:
Only act when a full triangle signal appears (▲ or ▼). This means ALL your selected confirmation criteria have been met.
4. Use with Price Structure:
Combine with support/resistance levels. A buy signal AT support is higher probability than a buy signal in the middle of nowhere.
5. Respect the Dashboard State:
When State shows "CRITICAL" (⚠), it means extreme pressure exists but direction is unclear. These are the most dangerous moments - wait for resolution.
6. Volume Matters:
Energy particles (dots) and the Mass metric tell you if institutions are participating. Signals without volume confirmation are lower probability.
MARKET AND TIMEFRAME RECOMMENDATIONS
Scalping (1m-5m):
Lookback: 10-14
Smoothing: 5-7
Threshold: 85
Epsilon: 0.5-0.7
Note: Expect more noise. Confirm with Level 2 data. Best on highly liquid instruments.
Intraday (15m-1h):
Lookback: 20-30 (default settings work well)
Smoothing: 3-5
Threshold: 90
Epsilon: 1.0
Note: Sweet spot for the indicator. High win rate on liquid stocks, forex majors, and crypto.
Swing Trading (4h-1D):
Lookback: 30-50
Smoothing: 3
Threshold: 90-95
Epsilon: 1.5-2.0
Note: Signals are rare but high conviction. Combine with higher timeframe trend analysis.
Position Trading (1D-1W):
Lookback: 50-100
Smoothing: 5-7
Threshold: 95
Epsilon: 2.0-3.0
Note: Extremely rare signals. Only trade the most extreme events. Expect massive moves.
Market-Specific Settings:
Forex (EUR/USD, GBP/USD, etc.):
Volume data is unreliable (spot forex has no centralized volume)
Disable "Require Volume Confirmation"
Focus on momentum and trend filters
News events create extreme singularities
Best on 15m-1h timeframes
Stocks (High-Volume Equities):
Volume confirmation is CRITICAL - keep it ON
Works excellently on AAPL, TSLA, SPY, etc.
Morning session (9:30-11:00 ET) shows highest event density
Earnings announcements create guaranteed extreme events
Best on 5m-1h for day trading, 1D for swing trading
Crypto (BTC, ETH, major alts):
Reduce threshold to 85 (crypto has constant high volatility)
Volume spikes are THE primary signal - keep volume confirmation ON
Works exceptionally well due to 24/7 trading and high volatility
Epsilon can be reduced to 0.7-0.8 for more signals
Best on 15m-4h timeframes
Commodities (Gold, Oil, etc.):
Gold responds to macro events (Fed announcements, geopolitical events)
Oil responds to supply shocks
Use daily timeframe minimum
Increase lookback to 50+
These are slow-moving markets - be patient
Indices (SPX, NDX, etc.):
Institutional volume matters - keep volume confirmation ON
Opening hour (9:30-10:30 ET) = highest singularity probability
Strong correlation with VIX - high VIX = more extreme events
Best on 15m-1h for day trading
WHAT MAKES THIS INDICATOR UNIQUE
1. Post-Normalization Sensitivity Control:
Unlike most oscillators where sensitivity controls don't actually work (they're applied before normalization, which then rescales everything), FTS applies epsilon compression AFTER normalization. This means the sensitivity parameter genuinely affects signal frequency. This is a novel implementation not found in standard oscillators.
2. Multi-Factor Confluence Requirement:
The indicator doesn't just detect "overbought" or "oversold" - it detects extreme conditions AND THEN analyzes context through five separate factors (price structure, momentum, trend, acceleration, volume). Most indicators are single-factor; FTS requires confluence.
3. Volatility-Weighted Normalization:
By squaring the ATR ratio (local/global), the indicator adapts to changing market regimes. A 1% move in a low-volatility environment is treated differently than a 1% move in a high-volatility environment. Traditional indicators treat all moves equally regardless of context.
4. Volume Integration at the Core:
Volume isn't an afterthought or optional filter - it's baked into the fundamental equation as "mass." The log transformation handles outliers elegantly while preserving significance. Most price-based indicators completely ignore volume.
5. Adaptive Scoring System:
Rather than fixed buy/sell rules ("RSI >70 = sell"), FTS uses competitive scoring where bullish and bearish evidence compete. The winner determines direction. This solves the classic problem of "overbought markets can stay overbought during strong uptrends."
6. Comprehensive Visual Feedback:
The multi-layer visualization system (accretion disk, field lines, particles, flashes) provides instant intuitive feedback on market state without requiring dashboard reading. You can see pressure building before extreme thresholds are hit.
7. Separate Extreme Detection and Signal Generation:
"Singularity diamonds" show extreme events that don't meet full criteria, while "signal triangles" only appear when ALL conditions are met. This distinction helps traders understand when pressure exists versus when it's actionable.
COMPARISON TO EXISTING INDICATORS
vs. RSI/Stochastic:
These normalize price relative to recent range. FTS normalizes (price change × log volume × volatility ratio) - a composite metric, not just price position.
vs. Chaikin Money Flow:
CMF combines price and volume but lacks volatility context and doesn't use adaptive normalization or post-normalization compression.
vs. Bollinger Bands + Volume:
Bollinger Bands show volatility but don't integrate volume or create a unified oscillator. They're separate components, not synthesized.
vs. MACD:
MACD is pure momentum. FTS combines momentum with volume weighting and volatility context, plus provides a normalized 0-100 scale.
The specific combination of log-volume weighting, squared volatility amplification, post-normalization epsilon compression, and multi-factor directional scoring is unique to this indicator.
LIMITATIONS AND PROPER DISCLOSURE
Not a Holy Grail:
No indicator is perfect. This tool identifies high-probability setups but cannot predict the future. Losses will occur. Use proper risk management.
Requires Confirmation:
Best used in conjunction with price action analysis, support/resistance levels, and higher timeframe trend. Don't trade signals blindly.
Volume Data Dependency:
On forex (spot) and some low-volume instruments, volume data is unreliable or tick-volume only. Disable volume confirmation in these cases.
Lagging Components:
The EMA smoothing and trend filters are inherently lagging. In extremely fast moves, signals may appear after the initial thrust.
Extreme Event Rarity:
With conservative settings (high threshold, high epsilon), signals can be rare. This is by design - quality over quantity. If you need more frequent signals, reduce threshold to 85 and epsilon to 0.7.
Not Financial Advice:
This indicator is an analytical tool. All trading decisions and their consequences are solely your responsibility. Past performance does not guarantee future results.
BEST PRACTICES
Don't trade every singularity - wait for context confirmation
Higher timeframes = higher reliability
Combine with support/resistance for entry refinement
Volume confirmation is CRITICAL for stocks/crypto (toggle off only for forex)
During major news events, singularities are inevitable but direction may be uncertain - use wider stops
When bullish and bearish flux scores are close, skip the trade
Test settings on your specific instrument/timeframe before live trading
Use the dashboard actively - it contains critical diagnostic information
Taking you to school. — Dskyz, Trade with insight. Trade with anticipation.
TenUp Bots S R - Fixed (ta.highest)//@version=5
indicator("TenUp Bots S R - Fixed (ta.highest)", overlay = true)
// Inputs
a = input.int(10, "Sensitivity (bars)", minval = 1, maxval = 9999)
d_pct = input.int(85, "Transparency (%)", minval = 0, maxval = 100)
// Convert 0-100% to 0-255 transparency (color.new uses 0..255)
transp = math.round(d_pct * 255 / 100)
// Colors with transparency applied
resColor = color.new(color.red, transp)
supColor = color.new(color.blue, transp)
// Helper (calculations only)
getRes(len) => ta.highest(high, len)
getSup(len) => ta.lowest(low, len)
// === PLOTS (all in global scope) ===
plot(getRes(a*1), title="Resistance 1", color=resColor, linewidth=2)
plot(getSup(a*1), title="Support 1", color=supColor, linewidth=2)
plot(getRes(a*2), title="Resistance 2", color=resColor, linewidth=2)
plot(getSup(a*2), title="Support 2", color=supColor, linewidth=2)
plot(getRes(a*3), title="Resistance 3", color=resColor, linewidth=2)
plot(getSup(a*3), title="Support 3", color=supColor, linewidth=2)
plot(getRes(a*4), title="Resistance 4", color=resColor, linewidth=2)
plot(getSup(a*4), title="Support 4", color=supColor, linewidth=2)
plot(getRes(a*5), title="Resistance 5", color=resColor, linewidth=2)
plot(getSup(a*5), title="Support 5", color=supColor, linewidth=2)
plot(getRes(a*6), title="Resistance 6", color=resColor, linewidth=2)
plot(getSup(a*6), title="Support 6", color=supColor, linewidth=2)
plot(getRes(a*7), title="Resistance 7", color=resColor, linewidth=2)
plot(getSup(a*7), title="Support 7", color=supColor, linewidth=2)
plot(getRes(a*8), title="Resistance 8", color=resColor, linewidth=2)
plot(getSup(a*8), title="Support 8", color=supColor, linewidth=2)
plot(getRes(a*9), title="Resistance 9", color=resColor, linewidth=2)
plot(getSup(a*9), title="Support 9", color=supColor, linewidth=2)
plot(getRes(a*10), title="Resistance 10", color=resColor, linewidth=2)
plot(getSup(a*10), title="Support 10", color=supColor, linewidth=2)
plot(getRes(a*15), title="Resistance 15", color=resColor, linewidth=2)
plot(getSup(a*15), title="Support 15", color=supColor, linewidth=2)
plot(getRes(a*20), title="Resistance 20", color=resColor, linewidth=2)
plot(getSup(a*20), title="Support 20", color=supColor, linewidth=2)
plot(getRes(a*25), title="Resistance 25", color=resColor, linewidth=2)
plot(getSup(a*25), title="Support 25", color=supColor, linewidth=2)
plot(getRes(a*30), title="Resistance 30", color=resColor, linewidth=2)
plot(getSup(a*30), title="Support 30", color=supColor, linewidth=2)
plot(getRes(a*35), title="Resistance 35", color=resColor, linewidth=2)
plot(getSup(a*35), title="Support 35", color=supColor, linewidth=2)
plot(getRes(a*40), title="Resistance 40", color=resColor, linewidth=2)
plot(getSup(a*40), title="Support 40", color=supColor, linewidth=2)
plot(getRes(a*45), title="Resistance 45", color=resColor, linewidth=2)
plot(getSup(a*45), title="Support 45", color=supColor, linewidth=2)
plot(getRes(a*50), title="Resistance 50", color=resColor, linewidth=2)
plot(getSup(a*50), title="Support 50", color=supColor, linewidth=2)
plot(getRes(a*75), title="Resistance 75", color=resColor, linewidth=2)
plot(getSup(a*75), title="Support 75", color=supColor, linewidth=2)
plot(getRes(a*100), title="Resistance 100", color=resColor, linewidth=2)
plot(getSup(a*100), title="Support 100", color=supColor, linewidth=2)
plot(getRes(a*150), title="Resistance 150", color=resColor, linewidth=2)
plot(getSup(a*150), title="Support 150", color=supColor, linewidth=2)
plot(getRes(a*200), title="Resistance 200", color=resColor, linewidth=2)
plot(getSup(a*200), title="Support 200", color=supColor, linewidth=2)
plot(getRes(a*250), title="Resistance 250", color=resColor, linewidth=2)
plot(getSup(a*250), title="Support 250", color=supColor, linewidth=2)
plot(getRes(a*300), title="Resistance 300", color=resColor, linewidth=2)
plot(getSup(a*300), title="Support 300", color=supColor, linewidth=2)
plot(getRes(a*350), title="Resistance 350", color=resColor, linewidth=2)
plot(getSup(a*350), title="Support 350", color=supColor, linewidth=2)
plot(getRes(a*400), title="Resistance 400", color=resColor, linewidth=2)
plot(getSup(a*400), title="Support 400", color=supColor, linewidth=2)
plot(getRes(a*450), title="Resistance 450", color=resColor, linewidth=2)
plot(getSup(a*450), title="Support 450", color=supColor, linewidth=2)
plot(getRes(a*500), title="Resistance 500", color=resColor, linewidth=2)
plot(getSup(a*500), title="Support 500", color=supColor, linewidth=2)
plot(getRes(a*750), title="Resistance 750", color=resColor, linewidth=2)
plot(getSup(a*750), title="Support 750", color=supColor, linewidth=2)
plot(getRes(a*1000), title="Resistance 1000", color=resColor, linewidth=2)
plot(getSup(a*1000), title="Support 1000", color=supColor, linewidth=2)
plot(getRes(a*1250), title="Resistance 1250", color=resColor, linewidth=2)
plot(getSup(a*1250), title="Support 1250", color=supColor, linewidth=2)
plot(getRes(a*1500), title="Resistance 1500", color=resColor, linewidth=2)
plot(getSup(a*1500), title="Support 1500", color=supColor, linewidth=2)
TenUp Bots S R - Fixed (ta.highest)//@version=5
indicator("TenUp Bots S R - Fixed (ta.highest)", overlay = true)
// Inputs
a = input.int(10, "Sensitivity (bars)", minval = 1, maxval = 9999)
d_pct = input.int(85, "Transparency (%)", minval = 0, maxval = 100)
// Convert 0-100% to 0-255 transparency (color.new uses 0..255)
transp = math.round(d_pct * 255 / 100)
// Colors with transparency applied
resColor = color.new(color.red, transp)
supColor = color.new(color.blue, transp)
// Helper (calculations only)
getRes(len) => ta.highest(high, len)
getSup(len) => ta.lowest(low, len)
// === PLOTS (all in global scope) ===
plot(getRes(a*1), title="Resistance 1", color=resColor, linewidth=2)
plot(getSup(a*1), title="Support 1", color=supColor, linewidth=2)
plot(getRes(a*2), title="Resistance 2", color=resColor, linewidth=2)
plot(getSup(a*2), title="Support 2", color=supColor, linewidth=2)
plot(getRes(a*3), title="Resistance 3", color=resColor, linewidth=2)
plot(getSup(a*3), title="Support 3", color=supColor, linewidth=2)
plot(getRes(a*4), title="Resistance 4", color=resColor, linewidth=2)
plot(getSup(a*4), title="Support 4", color=supColor, linewidth=2)
plot(getRes(a*5), title="Resistance 5", color=resColor, linewidth=2)
plot(getSup(a*5), title="Support 5", color=supColor, linewidth=2)
plot(getRes(a*6), title="Resistance 6", color=resColor, linewidth=2)
plot(getSup(a*6), title="Support 6", color=supColor, linewidth=2)
plot(getRes(a*7), title="Resistance 7", color=resColor, linewidth=2)
plot(getSup(a*7), title="Support 7", color=supColor, linewidth=2)
plot(getRes(a*8), title="Resistance 8", color=resColor, linewidth=2)
plot(getSup(a*8), title="Support 8", color=supColor, linewidth=2)
plot(getRes(a*9), title="Resistance 9", color=resColor, linewidth=2)
plot(getSup(a*9), title="Support 9", color=supColor, linewidth=2)
plot(getRes(a*10), title="Resistance 10", color=resColor, linewidth=2)
plot(getSup(a*10), title="Support 10", color=supColor, linewidth=2)
plot(getRes(a*15), title="Resistance 15", color=resColor, linewidth=2)
plot(getSup(a*15), title="Support 15", color=supColor, linewidth=2)
plot(getRes(a*20), title="Resistance 20", color=resColor, linewidth=2)
plot(getSup(a*20), title="Support 20", color=supColor, linewidth=2)
plot(getRes(a*25), title="Resistance 25", color=resColor, linewidth=2)
plot(getSup(a*25), title="Support 25", color=supColor, linewidth=2)
plot(getRes(a*30), title="Resistance 30", color=resColor, linewidth=2)
plot(getSup(a*30), title="Support 30", color=supColor, linewidth=2)
plot(getRes(a*35), title="Resistance 35", color=resColor, linewidth=2)
plot(getSup(a*35), title="Support 35", color=supColor, linewidth=2)
plot(getRes(a*40), title="Resistance 40", color=resColor, linewidth=2)
plot(getSup(a*40), title="Support 40", color=supColor, linewidth=2)
plot(getRes(a*45), title="Resistance 45", color=resColor, linewidth=2)
plot(getSup(a*45), title="Support 45", color=supColor, linewidth=2)
plot(getRes(a*50), title="Resistance 50", color=resColor, linewidth=2)
plot(getSup(a*50), title="Support 50", color=supColor, linewidth=2)
plot(getRes(a*75), title="Resistance 75", color=resColor, linewidth=2)
plot(getSup(a*75), title="Support 75", color=supColor, linewidth=2)
plot(getRes(a*100), title="Resistance 100", color=resColor, linewidth=2)
plot(getSup(a*100), title="Support 100", color=supColor, linewidth=2)
plot(getRes(a*150), title="Resistance 150", color=resColor, linewidth=2)
plot(getSup(a*150), title="Support 150", color=supColor, linewidth=2)
plot(getRes(a*200), title="Resistance 200", color=resColor, linewidth=2)
plot(getSup(a*200), title="Support 200", color=supColor, linewidth=2)
plot(getRes(a*250), title="Resistance 250", color=resColor, linewidth=2)
plot(getSup(a*250), title="Support 250", color=supColor, linewidth=2)
plot(getRes(a*300), title="Resistance 300", color=resColor, linewidth=2)
plot(getSup(a*300), title="Support 300", color=supColor, linewidth=2)
plot(getRes(a*350), title="Resistance 350", color=resColor, linewidth=2)
plot(getSup(a*350), title="Support 350", color=supColor, linewidth=2)
plot(getRes(a*400), title="Resistance 400", color=resColor, linewidth=2)
plot(getSup(a*400), title="Support 400", color=supColor, linewidth=2)
plot(getRes(a*450), title="Resistance 450", color=resColor, linewidth=2)
plot(getSup(a*450), title="Support 450", color=supColor, linewidth=2)
plot(getRes(a*500), title="Resistance 500", color=resColor, linewidth=2)
plot(getSup(a*500), title="Support 500", color=supColor, linewidth=2)
plot(getRes(a*750), title="Resistance 750", color=resColor, linewidth=2)
plot(getSup(a*750), title="Support 750", color=supColor, linewidth=2)
plot(getRes(a*1000), title="Resistance 1000", color=resColor, linewidth=2)
plot(getSup(a*1000), title="Support 1000", color=supColor, linewidth=2)
plot(getRes(a*1250), title="Resistance 1250", color=resColor, linewidth=2)
plot(getSup(a*1250), title="Support 1250", color=supColor, linewidth=2)
plot(getRes(a*1500), title="Resistance 1500", color=resColor, linewidth=2)
plot(getSup(a*1500), title="Support 1500", color=supColor, linewidth=2)
Algorithm Predator - ML-liteAlgorithm Predator - ML-lite
This indicator combines four specialized trading agents with an adaptive multi-armed bandit selection system to identify high-probability trade setups. It is designed for swing and intraday traders who want systematic signal generation based on institutional order flow patterns , momentum exhaustion , liquidity dynamics , and statistical mean reversion .
Core Architecture
Why These Components Are Combined:
The script addresses a fundamental challenge in algorithmic trading: no single detection method works consistently across all market conditions. By deploying four independent agents and using reinforcement learning algorithms to select or blend their outputs, the system adapts to changing market regimes without manual intervention.
The Four Trading Agents
1. Spoofing Detector Agent 🎭
Detects iceberg orders through persistent volume at similar price levels over 5 bars
Identifies spoofing patterns via asymmetric wick analysis (wicks exceeding 60% of bar range with volume >1.8× average)
Monitors order clustering using simplified Hawkes process intensity tracking (exponential decay model)
Signal Logic: Contrarian—fades false breakouts caused by institutional manipulation
Best Markets: Consolidations, institutional trading windows, low-liquidity hours
2. Exhaustion Detector Agent ⚡
Calculates RSI divergence between price movement and momentum indicator over 5-bar window
Detects VWAP exhaustion (price at 2σ bands with declining volume)
Uses VPIN reversals (volume-based toxic flow dissipation) to identify momentum failure
Signal Logic: Counter-trend—enters when momentum extreme shows weakness
Best Markets: Trending markets reaching climax points, over-extended moves
3. Liquidity Void Detector Agent 💧
Measures Bollinger Band squeeze (width <60% of 50-period average)
Identifies stop hunts via 20-bar high/low penetration with immediate reversal and volume spike
Detects hidden liquidity absorption (volume >2× average with range <0.3× ATR)
Signal Logic: Breakout anticipation—enters after liquidity grab but before main move
Best Markets: Range-bound pre-breakout, volatility compression zones
4. Mean Reversion Agent 📊
Calculates price z-scores relative to 50-period SMA and standard deviation (triggers at ±2σ)
Implements Ornstein-Uhlenbeck process scoring (mean-reverting stochastic model)
Uses entropy analysis to detect algorithmic trading patterns (low entropy <0.25 = high predictability)
Signal Logic: Statistical reversion—enters when price deviates significantly from statistical equilibrium
Best Markets: Range-bound, low-volatility, algorithmically-dominated instruments
Adaptive Selection: Multi-Armed Bandit System
The script implements four reinforcement learning algorithms to dynamically select or blend agents based on performance:
Thompson Sampling (Default - Recommended):
Uses Bayesian inference with beta distributions (tracks alpha/beta parameters per agent)
Balances exploration (trying underused agents) vs. exploitation (using proven winners)
Each agent's win/loss history informs its selection probability
Lite Approximation: Uses pseudo-random sampling from price/volume noise instead of true random number generation
UCB1 (Upper Confidence Bound):
Calculates confidence intervals using: average_reward + sqrt(2 × ln(total_pulls) / agent_pulls)
Deterministic algorithm favoring agents with high uncertainty (potential upside)
More conservative than Thompson Sampling
Epsilon-Greedy:
Exploits best-performing agent (1-ε)% of the time
Explores randomly ε% of the time (default 10%, configurable 1-50%)
Simple, transparent, easily tuned via epsilon parameter
Gradient Bandit:
Uses softmax probability distribution over agent preference weights
Updates weights via gradient ascent based on rewards
Best for Blend mode where all agents contribute
Selection Modes:
Switch Mode: Uses only the selected agent's signal (clean, decisive)
Blend Mode: Combines all agents using exponentially weighted confidence scores controlled by temperature parameter (smooth, diversified)
Lock Agent Feature:
Optional manual override to force one specific agent
Useful after identifying which agent dominates your specific instrument
Only applies in Switch mode
Four choices: Spoofing Detector, Exhaustion Detector, Liquidity Void, Mean Reversion
Memory System
Dual-Layer Architecture:
Short-Term Memory: Stores last 20 trade outcomes per agent (configurable 10-50)
Long-Term Memory: Stores episode averages when short-term reaches transfer threshold (configurable 5-20 bars)
Memory Boost Mechanism: Recent performance modulates agent scores by up to ±20%
Episode Transfer: When an agent accumulates sufficient results, averages are condensed into long-term storage
Persistence: Manual restoration of learned parameters via input fields (alpha, beta, weights, microstructure thresholds)
How Memory Works:
Agent generates signal → outcome tracked after 8 bars (performance horizon)
Result stored in short-term memory (win = 1.0, loss = 0.0)
Short-term average influences agent's future scores (positive feedback loop)
After threshold met (default 10 results), episode averaged into long-term storage
Long-term patterns (weighted 30%) + short-term patterns (weighted 70%) = total memory boost
Market Microstructure Analysis
These advanced metrics quantify institutional order flow dynamics:
Order Flow Toxicity (Simplified VPIN):
Measures buy/sell volume imbalance over 20 bars: |buy_vol - sell_vol| / (buy_vol + sell_vol)
Detects informed trading activity (institutional players with non-public information)
Values >0.4 indicate "toxic flow" (informed traders active)
Lite Approximation: Uses simple open/close heuristic instead of tick-by-tick trade classification
Price Impact Analysis (Simplified Kyle's Lambda):
Measures market impact efficiency: |price_change_10| / sqrt(volume_sum_10)
Low values = large orders with minimal price impact ( stealth accumulation )
High values = retail-dominated moves with high slippage
Lite Approximation: Uses simplified denominator instead of regression-based signed order flow
Market Randomness (Entropy Analysis):
Counts unique price changes over 20 bars / 20
Measures market predictability
High entropy (>0.6) = human-driven, chaotic price action
Low entropy (<0.25) = algorithmic trading dominance (predictable patterns)
Lite Approximation: Simple ratio instead of true Shannon entropy H(X) = -Σ p(x)·log₂(p(x))
Order Clustering (Simplified Hawkes Process):
Tracks self-exciting event intensity (coordinated order activity)
Decays at 0.9× per bar, spikes +1.0 when volume >1.5× average
High intensity (>0.7) indicates clustering (potential spoofing/accumulation)
Lite Approximation: Simple exponential decay instead of full λ(t) = μ + Σ α·exp(-β(t-tᵢ)) with MLE
Signal Generation Process
Multi-Stage Validation:
Stage 1: Agent Scoring
Each agent calculates internal score based on its detection criteria
Scores must exceed agent-specific threshold (adjusted by sensitivity multiplier)
Agent outputs: Signal direction (+1/-1/0) and Confidence level (0.0-1.0)
Stage 2: Memory Boost
Agent scores multiplied by memory boost factor (0.8-1.2 based on recent performance)
Successful agents get amplified, failing agents get dampened
Stage 3: Bandit Selection/Blending
If Adaptive Mode ON:
Switch: Bandit selects single best agent, uses only its signal
Blend: All agents combined using softmax-weighted confidence scores
If Adaptive Mode OFF:
Traditional consensus voting with confidence-squared weighting
Signal fires when consensus exceeds threshold (default 70%)
Stage 4: Confirmation Filter
Raw signal must repeat for consecutive bars (default 3, configurable 2-4)
Minimum confidence threshold: 0.25 (25%) enforced regardless of mode
Trend alignment check: Long signals require trend_score ≥ -2, Short signals require trend_score ≤ 2
Stage 5: Cooldown Enforcement
Minimum bars between signals (default 10, configurable 5-15)
Prevents over-trading during choppy conditions
Stage 6: Performance Tracking
After 8 bars (performance horizon), signal outcome evaluated
Win = price moved in signal direction, Loss = price moved against
Results fed back into memory and bandit statistics
Trading Modes (Presets)
Pre-configured parameter sets:
Conservative: 85% consensus, 4 confirmations, 15-bar cooldown
Expected: 60-70% win rate, 3-8 signals/week
Best for: Swing trading, capital preservation, beginners
Balanced: 70% consensus, 3 confirmations, 10-bar cooldown
Expected: 55-65% win rate, 8-15 signals/week
Best for: Day trading, most traders, general use
Aggressive: 60% consensus, 2 confirmations, 5-bar cooldown
Expected: 50-58% win rate, 15-30 signals/week
Best for: Scalping, high-frequency trading, active management
Elite: 75% consensus, 3 confirmations, 12-bar cooldown
Expected: 58-68% win rate, 5-12 signals/week
Best for: Selective trading, high-conviction setups
Adaptive: 65% consensus, 2 confirmations, 8-bar cooldown
Expected: Varies based on learning
Best for: Experienced users leveraging bandit system
How to Use
1. Initial Setup (5 Minutes):
Select Trading Mode matching your style (start with Balanced)
Enable Adaptive Learning (recommended for automatic agent selection)
Choose Thompson Sampling algorithm (best all-around performance)
Keep Microstructure Metrics enabled for liquid instruments (>100k daily volume)
2. Agent Tuning (Optional):
Adjust Agent Sensitivity multipliers (0.5-2.0):
<0.8 = Highly selective (fewer signals, higher quality)
0.9-1.2 = Balanced (recommended starting point)
1.3 = Aggressive (more signals, lower individual quality)
Monitor dashboard for 20-30 signals to identify dominant agent
If one agent consistently outperforms, consider using Lock Agent feature
3. Bandit Configuration (Advanced):
Blend Temperature (0.1-2.0):
0.3 = Sharp decisions (best agent dominates)
0.5 = Balanced (default)
1.0+ = Smooth (equal weighting, democratic)
Memory Decay (0.8-0.99):
0.90 = Fast adaptation (volatile markets)
0.95 = Balanced (most instruments)
0.97+ = Long memory (stable trends)
4. Signal Interpretation:
Green triangle (▲): Long signal confirmed
Red triangle (▼): Short signal confirmed
Dashboard shows:
Active agent (highlighted row with ► marker)
Win rate per agent (green >60%, yellow 40-60%, red <40%)
Confidence bars (█████ = maximum confidence)
Memory size (short-term buffer count)
Colored zones display:
Entry level (current close)
Stop-loss (1.5× ATR)
Take-profit 1 (2.0× ATR)
Take-profit 2 (3.5× ATR)
5. Risk Management:
Never risk >1-2% per signal (use ATR-based stops)
Signals are entry triggers, not complete strategies
Combine with your own market context analysis
Consider fundamental catalysts and news events
Use "Confirming" status to prepare entries (not to enter early)
6. Memory Persistence (Optional):
After 50-100 trades, check Memory Export Panel
Record displayed alpha/beta/weight values for each agent
Record VPIN and Kyle threshold values
Enable "Restore From Memory" and input saved values to continue learning
Useful when switching timeframes or restarting indicator
Visual Components
On-Chart Elements:
Spectral Layers: EMA8 ± 0.5 ATR bands (dynamic support/resistance, colored by trend)
Energy Radiance: Multi-layer glow boxes at signal points (intensity scales with confidence, configurable 1-5 layers)
Probability Cones: Projected price paths with uncertainty wedges (15-bar projection, width = confidence × ATR)
Connection Lines: Links sequential signals (solid = same direction continuation, dotted = reversal)
Kill Zones: Risk/reward boxes showing entry, stop-loss, and dual take-profit targets
Signal Markers: Triangle up/down at validated entry points
Dashboard (Configurable Position & Size):
Regime Indicator: 4-level trend classification (Strong Bull/Bear, Weak Bull/Bear)
Mode Status: Shows active system (Adaptive Blend, Locked Agent, or Consensus)
Agent Performance Table: Real-time win%, confidence, and memory stats
Order Flow Metrics: Toxicity and impact indicators (when microstructure enabled)
Signal Status: Current state (Long/Short/Confirming/Waiting) with confirmation progress
Memory Panel (Configurable Position & Size):
Live Parameter Export: Alpha, beta, and weight values per agent
Adaptive Thresholds: Current VPIN sensitivity and Kyle threshold
Save Reminder: Visual indicator if parameters should be recorded
What Makes This Original
This script's originality lies in three key innovations:
1. Genuine Meta-Learning Framework:
Unlike traditional indicator mashups that simply display multiple signals, this implements authentic reinforcement learning (multi-armed bandits) to learn which detection method works best in current conditions. The Thompson Sampling implementation with beta distribution tracking (alpha for successes, beta for failures) is statistically rigorous and adapts continuously. This is not post-hoc optimization—it's real-time learning.
2. Episodic Memory Architecture with Transfer Learning:
The dual-layer memory system mimics human learning patterns:
Short-term memory captures recent performance (recency bias)
Long-term memory preserves historical patterns (experience)
Automatic transfer mechanism consolidates knowledge
Memory boost creates positive feedback loops (successful strategies become stronger)
This architecture allows the system to adapt without retraining , unlike static ML models that require batch updates.
3. Institutional Microstructure Integration:
Combines retail-focused technical analysis (RSI, Bollinger Bands, VWAP) with institutional-grade microstructure metrics (VPIN, Kyle's Lambda, Hawkes processes) typically found in academic finance literature and professional trading systems, not standard retail platforms. While simplified for Pine Script constraints, these metrics provide insight into informed vs. uninformed trading , a dimension entirely absent from traditional technical analysis.
Mashup Justification:
The four agents are combined specifically for risk diversification across failure modes:
Spoofing Detector: Prevents false breakout losses from manipulation
Exhaustion Detector: Prevents chasing extended trends into reversals
Liquidity Void: Exploits volatility compression (different regime than trending)
Mean Reversion: Provides mathematical anchoring when patterns fail
The bandit system ensures the optimal tool is automatically selected for each market situation, rather than requiring manual interpretation of conflicting signals.
Why "ML-lite"? Simplifications and Approximations
This is the "lite" version due to necessary simplifications for Pine Script execution:
1. Simplified VPIN Calculation:
Academic Implementation: True VPIN uses volume bucketing (fixed-volume bars) and tick-by-tick buy/sell classification via Lee-Ready algorithm or exchange-provided trade direction flags
This Implementation: 20-bar rolling window with simple open/close heuristic (close > open = buy volume)
Impact: May misclassify volume during ranging/choppy markets; works best in directional moves
2. Pseudo-Random Sampling:
Academic Implementation: Thompson Sampling requires true random number generation from beta distributions using inverse transform sampling or acceptance-rejection methods
This Implementation: Deterministic pseudo-randomness derived from price and volume decimal digits: (close × 100 - floor(close × 100)) + (volume % 100) / 100
Impact: Not cryptographically random; may have subtle biases in specific price ranges; provides sufficient variation for agent selection
3. Hawkes Process Approximation:
Academic Implementation: Full Hawkes process uses maximum likelihood estimation with exponential kernels: λ(t) = μ + Σ α·exp(-β(t-tᵢ)) fitted via iterative optimization
This Implementation: Simple exponential decay (0.9 multiplier) with binary event triggers (volume spike = event)
Impact: Captures self-exciting property but lacks parameter optimization; fixed decay rate may not suit all instruments
4. Kyle's Lambda Simplification:
Academic Implementation: Estimated via regression of price impact on signed order flow over multiple time intervals: Δp = λ × Δv + ε
This Implementation: Simplified ratio: price_change / sqrt(volume_sum) without proper signed order flow or regression
Impact: Provides directional indicator of impact but not true market depth measurement; no statistical confidence intervals
5. Entropy Calculation:
Academic Implementation: True Shannon entropy requires probability distribution: H(X) = -Σ p(x)·log₂(p(x)) where p(x) is probability of each price change magnitude
This Implementation: Simple ratio of unique price changes to total observations (variety measure)
Impact: Measures diversity but not true information entropy with probability weighting; less sensitive to distribution shape
6. Memory System Constraints:
Full ML Implementation: Neural networks with backpropagation, experience replay buffers (storing state-action-reward tuples), gradient descent optimization, and eligibility traces
This Implementation: Fixed-size array queues with simple averaging; no gradient-based learning, no state representation beyond raw scores
Impact: Cannot learn complex non-linear patterns; limited to linear performance tracking
7. Limited Feature Engineering:
Advanced Implementation: Dozens of engineered features, polynomial interactions (x², x³), dimensionality reduction (PCA, autoencoders), feature selection algorithms
This Implementation: Raw agent scores and basic market metrics (RSI, ATR, volume ratio); minimal transformation
Impact: May miss subtle cross-feature interactions; relies on agent-level intelligence rather than feature combinations
8. Single-Instrument Data:
Full Implementation: Multi-asset correlation analysis (sector ETFs, currency pairs, volatility indices like VIX), lead-lag relationships, risk-on/risk-off regimes
This Implementation: Only OHLCV data from displayed instrument
Impact: Cannot incorporate broader market context; vulnerable to correlated moves across assets
9. Fixed Performance Horizon:
Full Implementation: Adaptive horizon based on trade duration, volatility regime, or profit target achievement
This Implementation: Fixed 8-bar evaluation window
Impact: May evaluate too early in slow markets or too late in fast markets; one-size-fits-all approach
Performance Impact Summary:
These simplifications make the script:
✅ Faster: Executes in milliseconds vs. seconds (or minutes) for full academic implementations
✅ More Accessible: Runs on any TradingView plan without external data feeds, APIs, or compute servers
✅ More Transparent: All calculations visible in Pine Script (no black-box compiled models)
✅ Lower Resource Usage: <500 bars lookback, minimal memory footprint
⚠️ Less Precise: Approximations may reduce statistical edge by 5-15% vs. academic implementations
⚠️ Limited Scope: Cannot capture tick-level dynamics, multi-order-book interactions, or cross-asset flows
⚠️ Fixed Parameters: Some thresholds hardcoded rather than dynamically optimized
When to Upgrade to Full Implementation:
Consider professional Python/C++ versions with institutional data feeds if:
Trading with >$100K capital where precision differences materially impact returns
Operating in microsecond-competitive environments (HFT, market making)
Requiring regulatory-grade audit trails and reproducibility
Backtesting with tick-level precision for strategy validation
Need true real-time adaptation with neural network-based learning
For retail swing/day trading and position management, these approximations provide sufficient signal quality while maintaining usability, transparency, and accessibility. The core logic—multi-agent detection with adaptive selection—remains intact.
Technical Notes
All calculations use standard Pine Script built-in functions ( ta.ema, ta.atr, ta.rsi, ta.bb, ta.sma, ta.stdev, ta.vwap )
VPIN and Kyle's Lambda use simplified formulas optimized for OHLCV data (see "Lite" section above)
Thompson Sampling uses pseudo-random noise from price/volume decimal digits for beta distribution sampling
No repainting: All calculations use confirmed bar data (no forward-looking)
Maximum lookback: 500 bars (set via max_bars_back parameter)
Performance evaluation: 8-bar forward-looking window for reward calculation (clearly disclosed)
Confidence threshold: Minimum 0.25 (25%) enforced on all signals
Memory arrays: Dynamic sizing with FIFO queue management
Limitations and Disclaimers
Not Predictive: This indicator identifies patterns in historical data. It cannot predict future price movements with certainty.
Requires Human Judgment: Signals are entry triggers, not complete trading strategies. Must be confirmed with your own analysis, risk management rules, and market context.
Learning Period Required: The adaptive system requires 50-100 bars minimum to build statistically meaningful performance data for bandit algorithms.
Overfitting Risk: Restoring memory parameters from one market regime to a drastically different regime (e.g., low volatility to high volatility) may cause poor initial performance until system re-adapts.
Approximation Limitations: Simplified calculations (see "Lite" section) may underperform academic implementations by 5-15% in highly efficient markets.
No Guarantee of Profit: Past performance, whether backtested or live-traded, does not guarantee future performance. All trading involves risk of loss.
Forward-Looking Bias: Performance evaluation uses 8-bar forward window—this creates slight look-ahead for learning (though not for signals). Real-time performance may differ from indicator's internal statistics.
Single-Instrument Limitation: Does not account for correlations with related assets or broader market regime changes.
Recommended Settings
Timeframe: 15-minute to 4-hour charts (sufficient volatility for ATR-based stops; adequate bar volume for learning)
Assets: Liquid instruments with >100k daily volume (forex majors, large-cap stocks, BTC/ETH, major indices)
Not Recommended: Illiquid small-caps, penny stocks, low-volume altcoins (microstructure metrics unreliable)
Complementary Tools: Volume profile, order book depth, market breadth indicators, fundamental catalysts
Position Sizing: Risk no more than 1-2% of capital per signal using ATR-based stop-loss
Signal Filtering: Consider external confluence (support/resistance, trendlines, round numbers, session opens)
Start With: Balanced mode, Thompson Sampling, Blend mode, default agent sensitivities (1.0)
After 30+ Signals: Review agent win rates, consider increasing sensitivity of top performers or locking to dominant agent
Alert Configuration
The script includes built-in alert conditions:
Long Signal: Fires when validated long entry confirmed
Short Signal: Fires when validated short entry confirmed
Alerts fire once per bar (after confirmation requirements met)
Set alert to "Once Per Bar Close" for reliability
Taking you to school. — Dskyz, Trade with insight. Trade with anticipation.
Scientific Correlation Testing FrameworkScientific Correlation Testing Framework - Comprehensive Guide
Introduction to Correlation Analysis
What is Correlation?
Correlation is a statistical measure that describes the degree to which two assets move in relation to each other. Think of it like measuring how closely two dancers move together on a dance floor.
Perfect Positive Correlation (+1.0): Both dancers move in perfect sync, same direction, same speed
Perfect Negative Correlation (-1.0): Both dancers move in perfect sync but in opposite directions
Zero Correlation (0): The dancers move completely independently of each other
In financial markets, correlation helps us understand relationships between different assets, which is crucial for:
Portfolio diversification
Risk management
Pairs trading strategies
Hedging positions
Market analysis
Why This Script is Special
This script goes beyond simple correlation calculations by providing:
Two different correlation methods (Pearson and Spearman)
Statistical significance testing to ensure results are meaningful
Rolling correlation analysis to track how relationships change over time
Visual representation for easy interpretation
Comprehensive statistics table with detailed metrics
Deep Dive into the Script's Components
1. Input Parameters Explained-
Symbol Selection:
This allows you to select the second asset to compare with the chart's primary asset
Default is Apple (NASDAQ:AAPL), but you can change this to any symbol
Example: If you're viewing a Bitcoin chart, you might set this to "NASDAQ:TSLA" to see if Bitcoin and Tesla are correlated
Correlation Window (60): This is the number of periods used to calculate the main correlation
Larger values (e.g., 100-500) provide more stable, long-term correlation measures
Smaller values (e.g., 10-50) are more responsive to recent price movements
60 is a good balance for most daily charts (about 3 months of trading days)
Rolling Correlation Window (20): A shorter window to detect recent changes in correlation
This helps identify when the relationship between assets is strengthening or weakening
Default of 20 is roughly one month of trading days
Return Type: This determines how price changes are calculated
Simple Returns: (Today's Price - Yesterday's Price) / Yesterday's Price
Easy to understand: "The asset went up 2% today"
Log Returns: Natural logarithm of (Today's Price / Yesterday's Price)
More mathematically elegant for statistical analysis
Better for time-additive properties (returns over multiple periods)
Less sensitive to extreme values.
Confidence Level (95%): This determines how certain we want to be about our results
95% confidence means we accept a 5% chance of being wrong (false positive)
Higher confidence (e.g., 99%) makes the test more strict
Lower confidence (e.g., 90%) makes the test more lenient
95% is the standard in most scientific research
Show Statistical Significance: When enabled, the script will test if the correlation is statistically significant or just due to random chance.
Display options control what you see on the chart:
Show Pearson/Spearman/Rolling Correlation: Toggle each correlation type on/off
Show Scatter Plot: Displays a scatter plot of returns (limited to recent points to avoid performance issues)
Show Statistical Tests: Enables the detailed statistics table
Table Text Size: Adjusts the size of text in the statistics table
2.Functions explained-
calcReturns():
This function calculates price returns based on your selected method:
Log Returns:
Formula: ln(Price_t / Price_t-1)
Example: If a stock goes from $100 to $101, the log return is ln(101/100) = ln(1.01) ≈ 0.00995 or 0.995%
Benefits: More symmetric, time-additive, and better for statistical modeling
Simple Returns:
Formula: (Price_t - Price_t-1) / Price_t-1
Example: If a stock goes from $100 to $101, the simple return is (101-100)/100 = 0.01 or 1%
Benefits: More intuitive and easier to understand
rankArray():
This function calculates the rank of each value in an array, which is used for Spearman correlation:
How ranking works:
The smallest value gets rank 1
The second smallest gets rank 2, and so on
For ties (equal values), they get the average of their ranks
Example: For values
Sorted:
Ranks: (the two 2s tie for ranks 1 and 2, so they both get 1.5)
Why this matters: Spearman correlation uses ranks instead of actual values, making it less sensitive to outliers and non-linear relationships.
pearsonCorr():
This function calculates the Pearson correlation coefficient:
Mathematical Formula:
r = (nΣxy - ΣxΣy) / √
Where x and y are the two variables, and n is the sample size
What it measures:
The strength and direction of the linear relationship between two variables
Values range from -1 (perfect negative linear relationship) to +1 (perfect positive linear relationship)
0 indicates no linear relationship
Example:
If two stocks have a Pearson correlation of 0.8, they have a strong positive linear relationship
When one stock goes up, the other tends to go up in a fairly consistent proportion
spearmanCorr():
This function calculates the Spearman rank correlation:
How it works:
Convert each value in both datasets to its rank
Calculate the Pearson correlation on the ranks instead of the original values
What it measures:
The strength and direction of the monotonic relationship between two variables
A monotonic relationship is one where as one variable increases, the other either consistently increases or decreases
It doesn't require the relationship to be linear
When to use it instead of Pearson:
When the relationship is monotonic but not linear
When there are significant outliers in the data
When the data is ordinal (ranked) rather than interval/ratio
Example:
If two stocks have a Spearman correlation of 0.7, they have a strong positive monotonic relationship
When one stock goes up, the other tends to go up, but not necessarily in a straight-line relationship
tStatistic():
This function calculates the t-statistic for correlation:
Mathematical Formula: t = r × √((n-2)/(1-r²))
Where r is the correlation coefficient and n is the sample size
What it measures:
How many standard errors the correlation is away from zero
Used to test the null hypothesis that the true correlation is zero
Interpretation:
Larger absolute t-values indicate stronger evidence against the null hypothesis
Generally, a t-value greater than 2 (in absolute terms) is considered statistically significant at the 95% confidence level
criticalT() and pValue():
These functions provide approximations for statistical significance testing:
criticalT():
Returns the critical t-value for a given degrees of freedom (df) and significance level
The critical value is the threshold that the t-statistic must exceed to be considered statistically significant
Uses approximations since Pine Script doesn't have built-in statistical distribution functions
pValue():
Estimates the p-value for a given t-statistic and degrees of freedom
The p-value is the probability of observing a correlation as strong as the one calculated, assuming the true correlation is zero
Smaller p-values indicate stronger evidence against the null hypothesis
Standard interpretation:
p < 0.01: Very strong evidence (marked with **)
p < 0.05: Strong evidence (marked with *)
p ≥ 0.05: Weak evidence, not statistically significant
stdev():
This function calculates the standard deviation of a dataset:
Mathematical Formula: σ = √(Σ(x-μ)²/(n-1))
Where x is each value, μ is the mean, and n is the sample size
What it measures:
The amount of variation or dispersion in a set of values
A low standard deviation indicates that the values tend to be close to the mean
A high standard deviation indicates that the values are spread out over a wider range
Why it matters for correlation:
Standard deviation is used in calculating the correlation coefficient
It also provides information about the volatility of each asset's returns
Comparing standard deviations helps understand the relative riskiness of the two assets.
3.Getting Price Data-
price1: The closing price of the primary asset (the chart you're viewing)
price2: The closing price of the secondary asset (the one you selected in the input parameters)
Returns are used instead of raw prices because:
Returns are typically stationary (mean and variance stay constant over time)
Returns normalize for price levels, allowing comparison between assets of different values
Returns represent what investors actually care about: percentage changes in value
4.Information Table-
Creates a table to display statistics
Only shows on the last bar to avoid performance issues
Positioned in the top right of the chart
Has 2 columns and 15 rows
Populating the Table
The script then populates the table with various statistics:
Header Row: "Metric" and "Value"
Sample Information: Sample size and return type
Pearson Correlation: Value, t-statistic, p-value, and significance
Spearman Correlation: Value, t-statistic, p-value, and significance
Rolling Correlation: Current value
Standard Deviations: For both assets
Interpretation: Text description of the correlation strength
The table uses color coding to highlight important information:
Green for significant positive results
Red for significant negative results
Yellow for borderline significance
Color-coded headers for each section
=> Practical Applications and Interpretation
How to Interpret the Results
Correlation Strength
0.0 to 0.3 (or 0.0 to -0.3): Weak or no correlation
The assets move mostly independently of each other
Good for diversification purposes
0.3 to 0.7 (or -0.3 to -0.7): Moderate correlation
The assets show some tendency to move together (or in opposite directions)
May be useful for certain trading strategies but not extremely reliable
0.7 to 1.0 (or -0.7 to -1.0): Strong correlation
The assets show a strong tendency to move together (or in opposite directions)
Can be useful for pairs trading, hedging, or as a market indicator
Statistical Significance
p < 0.01: Very strong evidence that the correlation is real
Marked with ** in the table
Very unlikely to be due to random chance
p < 0.05: Strong evidence that the correlation is real
Marked with * in the table
Unlikely to be due to random chance
p ≥ 0.05: Weak evidence that the correlation is real
Not marked in the table
Could easily be due to random chance
Rolling Correlation
The rolling correlation shows how the relationship between assets changes over time
If the rolling correlation is much different from the long-term correlation, it suggests the relationship is changing
This can indicate:
A shift in market regime
Changing fundamentals of one or both assets
Temporary market dislocations that might present trading opportunities
Trading Applications
1. Portfolio Diversification
Goal: Reduce overall portfolio risk by combining assets that don't move together
Strategy: Look for assets with low or negative correlations
Example: If you hold tech stocks, you might add some utilities or bonds that have low correlation with tech
2. Pairs Trading
Goal: Profit from the relative price movements of two correlated assets
Strategy:
Find two assets with strong historical correlation
When their prices diverge (one goes up while the other goes down)
Buy the underperforming asset and short the outperforming asset
Close the positions when they converge back to their normal relationship
Example: If Coca-Cola and Pepsi are highly correlated but Coca-Cola drops while Pepsi rises, you might buy Coca-Cola and short Pepsi
3. Hedging
Goal: Reduce risk by taking an offsetting position in a negatively correlated asset
Strategy: Find assets that tend to move in opposite directions
Example: If you hold a portfolio of stocks, you might buy some gold or government bonds that tend to rise when stocks fall
4. Market Analysis
Goal: Understand market dynamics and interrelationships
Strategy: Analyze correlations between different sectors or asset classes
Example:
If tech stocks and semiconductor stocks are highly correlated, movements in one might predict movements in the other
If the correlation between stocks and bonds changes, it might signal a shift in market expectations
5. Risk Management
Goal: Understand and manage portfolio risk
Strategy: Monitor correlations to identify when diversification benefits might be breaking down
Example: During market crises, many assets that normally have low correlations can become highly correlated (correlation convergence), reducing diversification benefits
Advanced Interpretation and Caveats
Correlation vs. Causation
Important Note: Correlation does not imply causation
Example: Ice cream sales and drowning incidents are correlated (both increase in summer), but one doesn't cause the other
Implication: Just because two assets move together doesn't mean one causes the other to move
Solution: Look for fundamental economic reasons why assets might be correlated
Non-Stationary Correlations
Problem: Correlations between assets can change over time
Causes:
Changing market conditions
Shifts in monetary policy
Structural changes in the economy
Changes in the underlying businesses
Solution: Use rolling correlations to monitor how relationships change over time
Outliers and Extreme Events
Problem: Extreme market events can distort correlation measurements
Example: During a market crash, many assets may move in the same direction regardless of their normal relationship
Solution:
Use Spearman correlation, which is less sensitive to outliers
Be cautious when interpreting correlations during extreme market conditions
Sample Size Considerations
Problem: Small sample sizes can produce unreliable correlation estimates
Rule of Thumb: Use at least 30 data points for a rough estimate, 60+ for more reliable results
Solution:
Use the default correlation length of 60 or higher
Be skeptical of correlations calculated with small samples
Timeframe Considerations
Problem: Correlations can vary across different timeframes
Example: Two assets might be positively correlated on a daily basis but negatively correlated on a weekly basis
Solution:
Test correlations on multiple timeframes
Use the timeframe that matches your trading horizon
Look-Ahead Bias
Problem: Using information that wouldn't have been available at the time of trading
Example: Calculating correlation using future data
Solution: This script avoids look-ahead bias by using only historical data
Best Practices for Using This Script
1. Appropriate Parameter Selection
Correlation Window:
For short-term trading: 20-50 periods
For medium-term analysis: 50-100 periods
For long-term analysis: 100-500 periods
Rolling Window:
Should be shorter than the main correlation window
Typically 1/3 to 1/2 of the main window
Return Type:
For most applications: Log Returns (better statistical properties)
For simplicity: Simple Returns (easier to interpret)
2. Validation and Testing
Out-of-Sample Testing:
Calculate correlations on one time period
Test if they hold in a different time period
Multiple Timeframes:
Check if correlations are consistent across different timeframes
Economic Rationale:
Ensure there's a logical reason why assets should be correlated
3. Monitoring and Maintenance
Regular Review:
Correlations can change, so review them regularly
Alerts:
Set up alerts for significant correlation changes
Documentation:
Keep notes on why certain assets are correlated and what might change that relationship
4. Integration with Other Analysis
Fundamental Analysis:
Combine correlation analysis with fundamental factors
Technical Analysis:
Use correlation analysis alongside technical indicators
Market Context:
Consider how market conditions might affect correlations
Conclusion
This Scientific Correlation Testing Framework provides a comprehensive tool for analyzing relationships between financial assets. By offering both Pearson and Spearman correlation methods, statistical significance testing, and rolling correlation analysis, it goes beyond simple correlation measures to provide deeper insights.
For beginners, this script might seem complex, but it's built on fundamental statistical concepts that become clearer with use. Start with the default settings and focus on interpreting the main correlation lines and the statistics table. As you become more comfortable, you can adjust the parameters and explore more advanced applications.
Remember that correlation analysis is just one tool in a trader's toolkit. It should be used in conjunction with other forms of analysis and with a clear understanding of its limitations. When used properly, it can provide valuable insights for portfolio construction, risk management, and pair trading strategy development.
Price Action Brooks ProPrice Action Brooks Pro (PABP) - Professional Trading Indicator
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 OVERVIEW
Price Action Brooks Pro (PABP) is a professional-grade TradingView indicator developed based on Al Brooks' Price Action trading methodology. It integrates decades of Al Brooks' trading experience and price action analysis techniques into a comprehensive technical analysis tool, helping traders accurately interpret market structure and identify trading opportunities.
• Applicable Markets: Stocks, Futures, Forex, Cryptocurrencies
• Timeframes: 1-minute to Daily (5-minute chart recommended)
• Theoretical Foundation: Al Brooks Price Action Trading Method
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 CORE FEATURES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ INTELLIGENT GAP DETECTION SYSTEM
Automatically identifies and marks three critical types of gaps in the market.
TRADITIONAL GAP
• Detects complete price gaps between bars
• Upward gap: Current bar's low > Previous bar's high
• Downward gap: Current bar's high < Previous bar's low
• Hollow border design - doesn't obscure price action
• Color coding: Upward gaps (light green), Downward gaps (light pink)
• Adjustable border: 1-5 pixel width options
TAIL GAP
• Detects price gaps between bar wicks/shadows
• Analyzes across 3 bars for precision
• Identifies hidden market structure
BODY GAP
• Focuses only on gaps between bar bodies (open/close)
• Filters out wick noise
• Disabled by default, enable as needed
Trading Significance:
• Gaps signal strong momentum
• Gap fills provide trading opportunities
• Consecutive gaps indicate trend continuation
✓ Independent alert system for all gap types
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2️⃣ RTH BAR COUNT (Trading Session Counter)
Intelligent counting system designed for US stock intraday trading.
FEATURES
• RTH Only Display: Regular Trading Hours (09:30-15:00 EST)
• 5-Minute Chart Optimized: Displays every 3 bars (15-minute intervals)
• Daily Auto-Reset: Counting starts from 1 each trading day
SMART COLOR CODING
• 🔴 Red (Bars 18 & 48): Critical turning moments (1.5h & 4h)
• 🔵 Sky Blue (Multiples of 12): Hourly markers (12, 24, 36...)
• 🟢 Light Green (Bar 6): Half-hour marker (30 minutes)
• ⚫ Gray (Others): Regular 15-minute interval markers
Al Brooks Time Theory:
• Bar 18 (90 min): First 90 minutes determine daily trend
• Bar 48 (4 hours): Important afternoon turning point
• Hourly markers: Track institutional trading rhythm
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3️⃣ FOUR-LINE EMA SYSTEM
Professional-grade configurable moving average system.
DEFAULT CONFIGURATION
• EMA 20: Short-term trend (Al Brooks' most important MA)
• EMA 50: Medium-short term reference
• EMA 100: Medium-long term confirmation
• EMA 200: Long-term trend and bull/bear dividing line
FLEXIBLE CUSTOMIZATION
Each EMA can be independently configured:
• On/Off toggle
• Data source selection (close/high/low/open, etc.)
• Custom period length
• Offset adjustment
• Color and transparency
COLOR SCHEME
• EMA 20: Dark brown, opaque (most important)
• EMA 50/100/200: Blue-purple gradient, 70% transparent
TRADING APPLICATIONS
• Bullish Alignment: Price > 20 > 50 > 100 > 200
• Bearish Alignment: 200 > 100 > 50 > 20 > Price
• EMA Confluence: All within <1% = major move precursor
Al Brooks Quote:
"The EMA 20 is the most important moving average. Almost all trading decisions should reference it."
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4️⃣ PREVIOUS VALUES (Key Prior Price Levels)
Automatically marks important price levels that often act as support/resistance.
THREE INDEPENDENT CONFIGURATIONS
Each group configurable for:
• Timeframe (1D/60min/15min, etc.)
• Price source (close/high/low/open/CurrentOpen, etc.)
• Line style and color
• Display duration (Today/TimeFrame/All)
SMART OPEN PRICE LABELS ⭐
• Auto-displays "Open" label when CurrentOpen selected
• Label color matches line color
• Customizable label size
TYPICAL SETUP
• 1st Line: Previous close (Support/Resistance)
• 2nd Line: Previous high (Breakout target)
• 3rd Line: Previous low (Support level)
Al Brooks Magnet Price Theory:
• Previous open: Price frequently tests opening price
• Previous high/low: Strongest support/resistance
• Breakout confirmation: Breaking prior levels = trend continuation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
5️⃣ INSIDE & OUTSIDE BAR PATTERN RECOGNITION
Automatically detects core candlestick patterns from Al Brooks' theory.
ii PATTERN (Consecutive Inside Bars)
• Current bar contained within previous bar
• Two or more consecutive
• Labels: ii, iii, iiii (auto-accumulates)
• High-probability breakout setup
• Stop loss: Outside both bars
Trading Significance:
"Inside bars are one of the most reliable breakout setups, especially three or more consecutive inside bars." - Al Brooks
OO PATTERN (Consecutive Outside Bars)
• Current bar engulfs previous bar
• Two or more consecutive
• Labels: oo, ooo (auto-accumulates)
• Indicates indecision or volatility increase
ioi PATTERN (Inside-Outside-Inside)
• Three-bar combination: Inside → Outside → Inside
• Auto-detected and labeled
• Tug-of-war pattern
• Breakout direction often very strong
SMART LABEL SYSTEM
• Auto-accumulation counting
• Dynamic label updates
• Customizable size and color
• Positioned above bars
✓ Independent alerts for all patterns
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 USE CASES
INTRADAY TRADING
✓ Bar Count (timing rhythm)
✓ Traditional Gap (strong signals)
✓ EMA 20 + 50 (quick trend)
✓ ii/ioi Patterns (breakout points)
SWING TRADING
✓ Previous Values (key levels)
✓ EMA 20 + 50 + 100 (trend analysis)
✓ Gaps (trend confirmation)
✓ iii Patterns (entry timing)
TREND FOLLOWING
✓ All four EMAs (alignment analysis)
✓ Gaps (continuation signals)
✓ Previous Values (targets)
BREAKOUT TRADING
✓ iii Pattern (high-reliability setup)
✓ Previous Values (targets)
✓ EMA 20 (trend direction)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 DESIGN FEATURES
PROFESSIONAL COLOR SCHEME
• Gaps: Hollow borders + light colors
• Bar Count: Smart multi-color coding
• EMAs: Gradient colors + transparency hierarchy
• Previous Values: Customizable + smart labels
CLEAR VISUAL HIERARCHY
• Important elements: Opaque (EMA 20, bar count)
• Reference elements: Semi-transparent (other EMAs, gaps)
• Hollow design: Doesn't obscure price action
USER-FRIENDLY INTERFACE
• Clear functional grouping
• Inline layout saves space
• All colors and sizes customizable
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 AL BROOKS THEORY CORE
READING PRICE ACTION
"Don't try to predict the market, read what the market is telling you."
PABP converts core concepts into visual tools:
• Trend Assessment: EMA system
• Time Rhythm: Bar Count
• Market Structure: Gap analysis
• Trade Setups: Inside/Outside Bars
• Support/Resistance: Previous Values
PROBABILITY THINKING
• ii pattern: Medium probability
• iii pattern: High probability
• iii + EMA 20 support: Very high probability
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ TECHNICAL SPECIFICATIONS
• Pine Script Version: v6
• Maximum Objects: 500 lines, 500 labels, 500 boxes
• Alert Functions: 8 independent alerts
• Supported Timeframes: All (5-min recommended for Bar Count)
• Compatibility: All TradingView plans, Mobile & Desktop
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 RECOMMENDED INITIAL SETTINGS
GAPS
• Traditional Gap: ✓
• Tail Gap: ✓
• Border Width: 2
BAR COUNT
• Use Bar Count: ✓
• Label Size: Normal
EMA
• EMA 20: ✓
• EMA 50: ✓
• EMA 100: ✓
• EMA 200: ✓
PREVIOUS VALUES
• 1st: close (Previous close)
• 2nd: high (Previous high)
• 3rd: low (Previous low)
INSIDE & OUTSIDE BAR
• All patterns: ✓
• Label Size: Large
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌟 WHY CHOOSE PABP?
✅ Solid Theoretical Foundation
Based on Al Brooks' decades of trading experience
✅ Complete Professional Features
Systematizes complex price action analysis
✅ Highly Customizable
Every feature adjustable to personal style
✅ Excellent Performance
Optimized code ensures smooth experience
✅ Continuous Updates
Constantly improving based on feedback
✅ Suitable for All Levels
Benefits beginners to professionals
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 RECOMMENDED LEARNING
Al Brooks Books:
• "Trading Price Action Trends"
• "Trading Price Action Trading Ranges"
• "Trading Price Action Reversals"
Learning Path:
1. Understand basic candlestick patterns
2. Learn EMA applications
3. Master market structure analysis
4. Develop trading system
5. Continuous practice and optimization
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ RISK DISCLOSURE
IMPORTANT NOTICE:
• For educational and informational purposes only
• Does not constitute investment advice
• Past performance doesn't guarantee future results
• Trading involves risk and may result in capital loss
• Trade according to your risk tolerance
• Test thoroughly in demo account first
RESPONSIBLE TRADING:
• Always use stop losses
• Control position sizes reasonably
• Don't overtrade
• Continuous learning and improvement
• Keep trading journal
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📜 COPYRIGHT
Price Action Brooks Pro (PABP)
Author: © JimmC98
License: Mozilla Public License 2.0
Pine Script Version: v6
Acknowledgments:
Thanks to Dr. Al Brooks for his contributions to price action trading. This indicator is developed based on his theories.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Experience professional-grade price action analysis now!
"The best traders read price action, not indicators. But when indicators help you read price action better, use them." - Al Brooks
CCI [Hash Adaptive]Adaptive CCI Pro: Professional Technical Analysis Indicator
The Commodity Channel Index is a momentum oscillator developed by Donald Lambert in 1980. CCI measures the relationship between an asset's price and its statistical average, identifying cyclical turns and overbought/oversold conditions. The indicator oscillates around zero, with values above +100 indicating overbought conditions and values below -100 suggesting oversold conditions.
Standard CCI Formula: (Typical Price - Moving Average) / (0.015 × Mean Deviation)
This indicator transforms the traditional CCI into a sophisticated visual analysis tool through several key enhancements:
Implements dual exponential moving average smoothing to eliminate market noise
Preserves signal integrity while reducing false signals
Adaptive smoothing responds to market volatility conditions
Dynamic Color Visualization System
Continuous gradient transitions from red (bearish momentum) to green (bullish momentum)
Real-time color intensity reflects momentum strength
Eliminates discrete color jumps for fluid visual interpretation
Adaptive Intelligence Features
Dynamic overbought/oversold thresholds adapt to market conditions
Reduces false signals during high volatility periods
Maintains sensitivity during low volatility environments
Momentum Vector Analysis
Incorporates velocity calculations for early trend identification
Crossover detection with momentum confirmation
Advanced signal filtering reduces market noise
Extreme Level Analysis
Values above +100: Strong overbought conditions, potential reversal zones
Values below -100: Strong oversold conditions, potential buying opportunities
Zero-line crossovers: Momentum shift confirmation
Optimization Parameters
CCI Period (Default: 14)
Shorter periods (10-12): Increased sensitivity, more signals
Standard periods (14-20): Balanced responsiveness and reliability
Longer periods (21-30): Reduced noise, stronger signal confirmation
Smoothing Factor (Default: 5)
Lower values (1-3): Maximum responsiveness, suitable for scalping
Medium values (4-6): Balanced approach for swing trading
Higher values (7-10): Institutional-grade smoothness for position trading
Signal Sensitivity (Default: 6)
Conservative (7-10): High-probability signals, reduced frequency
Balanced (5-6): Optimal risk-reward ratio
Aggressive (1-4): Maximum signal generation, requires additional confirmation
Strategic Implementation
Oversold reversals in red zones with momentum confirmation
Zero-line breaks with sustained color transitions
Extreme readings followed by momentum divergence
Risk Management
Use extreme levels (+100/-100) for position sizing decisions
Monitor color intensity for momentum strength assessment
Combine with price action analysis for comprehensive market view
Market Context Application
Trending markets: Focus on momentum direction and extreme readings
Range-bound markets: Utilize overbought/oversold levels for mean reversion
Volatile markets: Increase smoothing parameters and signal sensitivity
Professional Advantages
Instantaneous momentum assessment through color visualization
Reduced cognitive load compared to traditional oscillators
Professional presentation suitable for client reporting
Adaptive Technology
Self-adjusting parameters reduce manual optimization requirements
Consistent performance across varying market conditions
Advanced mathematics eliminate common CCI limitations
The Adaptive CCI Pro represents the evolution of momentum analysis, combining Lambert's foundational CCI concept with modern computational techniques to deliver institutional-grade market intelligence through an intuitive visual interface.
Fib OscillatorWhat is Fib Oscillator and How to Use it?
🔶 1. Conceptual Overview
The Fib Oscillator is a Fibonacci-based relative position oscillator.
Instead of measuring momentum (like RSI or MACD), it measures where price currently sits between the recent swing high and swing low, expressed as a percentage within the Fibonacci range.
In other words:
It answers: “Where is price right now within its most recent dynamic range?”
It visualizes retracement and extension zones numerically, providing continuous feedback between 0% and 100% (and beyond if extended).
🔶 2. What the Script Does
The indicator:
Automatically detects recent high and low levels using an adaptive lookback window, which depends on ATR volatility.
Calculates the current price’s position between those levels as a percentage (0–100).
Plots that percentage as an oscillator — showing visually whether price is near the top, middle, or bottom of its recent range.
Overlays Fibonacci retracement levels (23.6%, 38.2%, 50%, 61.8%, 78.6%) as reference zones.
Generates alerts when the oscillator crosses key Fib thresholds — which can signal retracement completion, breakout potential, or pullback exhaustion.
🔶 3. Technical Flow Breakdown
(a) Inputs
Input Description Default Notes
atrLength ATR period used for volatility estimation 14 Used to dynamically tune lookback sensitivity
minLookback Minimum lookback window (candles) 20 Ensures stability even in low volatility
maxLookback Maximum lookback window 100 Limits over-expansion during high volatility
isInverse Inverts chart orientation false Useful for inverse markets (e.g. shorts or inverse BTC view)
(b) Volatility-Adaptive Lookback
Instead of using a fixed lookback, it calculates:
lookback
=
SMA(ATR,10)
/
SMA(Close,10)
×
500
lookback=SMA(ATR,10)/SMA(Close,10)×500
Then it clamps this between minLookback and maxLookback.
This makes the oscillator:
More reactive during high volatility (shorter lookback)
More stable during calm markets (longer lookback)
Essentially, it self-adjusts to market rhythm — you don’t have to constantly tweak lookback manually.
(c) High-Low Reference Points
It takes the highest and lowest points within the dynamic lookback window.
If isInverse = true, it flips the candle logic (useful if viewing inverse instruments like stablecoin pairs or when analyzing bearish setups invertedly).
(d) Oscillator Core
The main oscillator line:
osc
=
(
close
−
low
)
(
high
−
low
)
×
100
osc=
(high−low)
(close−low)
×100
0% = Price is at the lookback low.
100% = Price is at the lookback high.
50% = Midpoint (balanced).
Between Fibonacci percentages (23.6%, 38.2%, 61.8%, etc.), the oscillator indicates retracement stages.
(e) Fibonacci Levels as Reference
It overlays horizontal reference lines at:
0%, 23.6%, 38.2%, 50%, 61.8%, 78.6%, 100%
These act as support/resistance bands in oscillator space.
You can read it similar to how traders use Fibonacci retracements on charts, but compressed into a single line oscillator.
(f) Alerts
The script includes built-in alert conditions for crossovers at each major Fibonacci level.
You can set TradingView alerts such as:
“Oscillator crossed above 61.8%” → possible bullish continuation or breakout.
“Oscillator crossed below 38.2%” → possible pullback or correction starting.
This allows automated monitoring of fib retracement completions without manually drawing fib levels.
🔶 4. How to Use It
🔸 Visual Interpretation
Oscillator Value Zone Market Context
0–23.6% Deep Retracement Potential exhaustion of a down-move / early reversal
23.6–38.2% Shallow retracement zone Possible continuation phase
38.2–50% Mid retracement Neutral or indecisive structure
50–61.8% Key pivot region Common trend resumption zone
61.8–78.6% Late retracement Often “last pullback” area
78.6–100% Near high range Possible overextension / profit-taking
>100% Range breakout New leg formation / expansion
🔸 Practical Application Steps
Load the indicator on your chart (set overlay = false, so it’s below the main price chart).
Observe oscillator position relative to fib bands:
Use it to determine retracement depth.
Combine with structure tools:
Trend lines, swing points, or HTF market structure.
Use crossovers for timing:
Crossing above 61.8% in an uptrend often confirms breakout continuation.
Crossing below 38.2% in a downtrend signals renewed downside momentum.
For range markets, oscillator swings between 23.6% and 78.6% can define accumulation/distribution boundaries.
🔶 5. When to Use It
During Retracements: To gauge how deep the pullback has gone.
During Range Markets: To identify relative overbought/oversold positions.
Before Breakouts: Crossovers of 61.8% or 78.6% often precede impulsive moves.
In Multi-Timeframe Contexts:
LTF (15M–1H): Detect intraday retracement exhaustion.
HTF (4H–1D): Confirm major range expansions or key reversal zones.
🔶 6. Ideal Companion Indicators
The Fib Oscillator works best when contextualized with structure, volatility, and trend bias indicators.
Below are optimal pairings:
Companion Indicator Purpose Integration Insight
Market Structure MTF Tool Identify active trend direction Use Fib Oscillator only in trend direction for cleaner signals
EMA Ribbon / Supertrend Trend confirmation Align oscillator crossovers with EMA bias
ATR Bands / Volatility Envelope Validate breakout strength If oscillator >78.6% & ATR rising → valid breakout
Volume Oscillator Confirm retracement strength Volume contraction + oscillator under 38.2% → potential reversal
HTF Fib Retracement Tool Combine LTF oscillator with HTF fib confluence Powerful multi-timeframe setups
RSI or Stochastic Measure momentum relative to position RSI divergence while oscillator near 78.6% → exhaustion clue
🔶 7. Understanding the Settings
Setting Function Practical Impact
ATR Period (14) Controls volatility sampling Higher = smoother lookback adaptation
Min Lookback (20) Smallest window allowed Lower = more reactive but noisier
Max Lookback (100) Largest window allowed Higher = smoother but slower to react
Inverse Candle Chart Flips oscillator vertically Useful when analyzing bearish or inverse scenarios (e.g. short-side fib mapping)
Recommended Configs:
For scalping/intraday: ATR 10–14, lookback 20–50
For swing/position trading: ATR 14–21, lookback 50–100
🔶 8. Example Trade Logic (Practical Use)
Scenario: Uptrend on 4H chart
Oscillator drops to below 38.2% → retracement zone
Price consolidates → oscillator stabilizes
Oscillator crosses above 50% → pullback ending
Entry: Long when oscillator crosses above 61.8%
Exit: Near 78.6–100% zone or upon divergence with RSI
For Short Bias (Inverse Setup):
Enable isInverse = true to visually flip the oscillator (so lows become highs).
Use the same thresholds inversely.
🔶 9. Strengths & Limitations
✅ Strengths
Dynamic, self-adapting to volatility
Quantifies Fib retracement as a continuous function
Compact oscillator view (no clutter on chart)
Works well across all timeframes
Compatible with both trending and ranging markets
⚠️ Limitations
Doesn’t define trend direction — must be used with structure filters
Can whipsaw during choppy consolidations
The “lookback auto-adjust” may lag in sudden volatility shifts
Shouldn’t be used standalone for entries without structural confluence
🔶 10. Summary
The “Fib Oscillator” is a dynamic Fibonacci-relative positioning tool that merges retracement theory with adaptive volatility logic.
It gives traders an intuitive, quantified view of where price sits within its recent fib range, allowing anticipation of pullbacks, reversals, or breakout momentum.
Think of it as a "Fibonacci RSI", but instead of momentum strength, it shows positional depth — the vibrational location of price within its natural swing cycle.
Logit RSI [AdaptiveRSI]The traditional 0–100 RSI scale makes statistical overlays, such as Bollinger Bands or even moving averages, technically invalid. This script solves this issue by placing RSI on an unbounded, continuous scale, enabling these tools to work as intended.
The Logit function takes bounded data, such as RSI values ranging from 0 to 100, and maps them onto an unbounded scale ranging from negative infinity (−∞) to positive infinity (+∞).
An RSI reading of 50 becomes 0 on the Logit scale, indicating a balanced market. Readings above 50 map to positive Logit values (price above Wilder’s EMA / RSI above 50), while readings below 50 map to negative values (price below Wilder’s EMA / RSI below 50).
For the detailed formula, which calculates RSI as a scaled distance from Wilder’s EMA, check the RSI
: alternative derivation script.
The main issue with the 0–100 RSI scale is that different lookback periods produce very different distributions of RSI values. The histograms below illustrate how often RSIs of various lengths spend time within each 5-point range.
On RSI(2), the tallest bars appear at the edges (0–5 and 95–100), meaning short-term RSI spends most of its time at the extremes. For longer lookbacks, the bars cluster around the center and rarely reach 70 or 30.
This behavior makes it difficult to generalize the two most common RSI techniques:
Fixed 70/30 thresholds: These overbought and oversold levels only make sense for short- or mid-range lookbacks (around the low teens). For very short periods, RSI spends most of its time above or below these levels, while for long-term lookbacks, RSI rarely reaches them.
Bollinger Bands (±2 standard deviations): When applied directly to RSI, the bands often extend beyond the 0–100 limits (especially for short-term lookbacks) making them mathematically invalid. While the issue is less visible on longer settings, it remains conceptually incorrect.
To address this, we apply the Logit Transform :
Logit RSI = LN(RSI / (100 − RSI))
The transformed data fits a smooth bell-shaped curve, allowing statistical tools like Bollinger Bands to function properly for the first time.
Why Logit RSI Matters:
Makes RSI statistically consistent across all lookback periods.
Greatly improves the visual clarity of short-term RSIs
Allows proper use of volatility tools (like Bollinger Bands) on RSI.
Replaces arbitrary 70/30 levels with data-driven thresholds.
Simplifies RSI interpretation for both short- and long-term analysis.
INPUTS:
RSI Length — set the RSI lookback period used in calculations.
RSI Type — choose between Regular RSI or Logit RSI .
Plot Bollinger Bands — ON/OFF toggle to overlay statistical envelopes around RSI or Logit RSI.
SMA and Standard Deviation Length — defines the lookback period for both the SMA (Bollinger Bands midline) and Standard Deviation calculations.
Standard Deviation Multiplier — controls the width of the Bollinger Bands (e.g., 2.0 for ±2σ).
While simple, the Logit transformation represents an unexplored yet powerful mathematically grounded improvement to the classic RSI.
It offers traders a structured, intuitive, and statistically consistent way to use RSI across all timeframes.
I welcome your feedback, suggestions, and code improvements—especially regarding performance and efficiency. Your insights are greatly appreciated.
RSI Bollinger Bands [DCAUT]█ RSI Bollinger Bands
📊 ORIGINALITY & INNOVATION
The RSI Bollinger Bands indicator represents a meaningful advancement in momentum analysis by combining two proven technical tools: the Relative Strength Index (RSI) and Bollinger Bands. This combination addresses a significant limitation in traditional RSI analysis - the use of fixed overbought/oversold thresholds (typically 70/30) that fail to adapt to changing market volatility conditions.
Core Innovation:
Rather than relying on static threshold levels, this indicator applies Bollinger Bands statistical analysis directly to RSI values, creating dynamic zones that automatically adjust based on recent momentum volatility. This approach helps reduce false signals during low volatility periods while remaining sensitive to genuine extremes during high volatility conditions.
Key Enhancements Over Traditional RSI:
Dynamic Thresholds: Overbought/oversold zones adapt to market conditions automatically, eliminating the need for manual threshold adjustments across different instruments and timeframes
Volatility Context: Band width provides immediate visual feedback about momentum volatility, helping traders distinguish between stable trends and erratic movements
Reduced False Signals: During ranging markets, narrower bands filter out minor RSI fluctuations that would trigger traditional fixed-threshold signals
Breakout Preparation: Band squeeze patterns (similar to price-based BB) signal potential momentum regime changes before they occur
Self-Referencing Analysis: By measuring RSI against its own statistical behavior rather than arbitrary levels, the indicator provides more relevant context
📐 MATHEMATICAL FOUNDATION
Two-Stage Calculation Process:
Stage 1: RSI Calculation
RSI = 100 - (100 / (1 + RS))
where RS = Average Gain / Average Loss over specified period
The RSI normalizes price momentum into a bounded 0-100 scale, making it ideal for statistical band analysis.
Stage 2: Bollinger Bands on RSI
Basis = MA(RSI, BB Length)
Upper Band = Basis + (StdDev(RSI, BB Length) × Multiplier)
Lower Band = Basis - (StdDev(RSI, BB Length) × Multiplier)
Band Width = Upper Band - Lower Band
The Bollinger Bands measure RSI's standard deviation from its own moving average, creating statistically-derived dynamic zones.
Statistical Interpretation:
Under normal distribution assumptions with default 2.0 multiplier, approximately 95% of RSI values should fall within the bands
Band touches represent statistically significant momentum extremes relative to recent behavior
Band width expansion indicates increasing momentum volatility (strengthening trend or increasing uncertainty)
Band width contraction signals momentum consolidation and potential regime change preparation
📊 COMPREHENSIVE SIGNAL ANALYSIS
Visual Color Signals:
This indicator features dynamic color fills that highlight extreme momentum conditions:
Green Fill (Above Upper Band):
Appears when RSI breaks above the upper band, indicating exceptionally strong bullish momentum
Represents dynamic overbought zone - not necessarily a reversal signal but a warning of extreme conditions
In strong uptrends, green fills can persist as RSI "rides the band" - this indicates sustained momentum strength
Exit of green zone (RSI falling back below upper band) often signals initial momentum weakening
Red Fill (Below Lower Band):
Appears when RSI breaks below the lower band, indicating exceptionally weak bearish momentum
Represents dynamic oversold zone - potential reversal or continuation signal depending on trend context
In strong downtrends, red fills can persist as RSI "rides the band" - this indicates sustained selling pressure
Exit of red zone (RSI rising back above lower band) often signals initial momentum recovery
Position-Based Signals:
Upper Band Interactions:
RSI Touching Upper Band: Dynamic overbought condition - momentum is extremely strong relative to recent volatility, potential exhaustion or continuation depending on trend context
RSI Riding Upper Band: Sustained strong momentum, often seen in powerful trends, not necessarily an immediate reversal signal but warrants monitoring for exhaustion
RSI Crossing Below Upper Band: Initial momentum weakening signal, particularly significant if accompanied by price divergence
Lower Band Interactions:
RSI Touching Lower Band: Dynamic oversold condition - momentum is extremely weak relative to recent volatility, potential reversal or continuation of downtrend
RSI Riding Lower Band: Sustained weak momentum, common in strong downtrends, monitor for potential exhaustion
RSI Crossing Above Lower Band: Initial momentum strengthening signal, early indication of potential reversal or consolidation
Basis Line Signals:
RSI Above Basis: Bullish momentum regime - upward pressure dominant
RSI Below Basis: Bearish momentum regime - downward pressure dominant
Basis Crossovers: Momentum regime shifts, more significant when accompanied by band width changes
RSI Oscillating Around Basis: Balanced momentum, often indicates ranging market conditions
Volatility-Based Signals:
Band Width Patterns:
Narrow Bands (Squeeze): Momentum volatility compression, often precedes significant directional moves, similar to price coiling patterns
Expanding Bands: Increasing momentum volatility, indicates trend acceleration or growing uncertainty
Narrowest Band in 100 Bars: Extreme compression alert, high probability of upcoming volatility expansion
Advanced Pattern Recognition:
Divergence Analysis:
Bullish Divergence: Price makes lower lows while RSI touches or stays above previous lower band touch, suggests downward momentum weakening
Bearish Divergence: Price makes higher highs while RSI touches or stays below previous upper band touch, suggests upward momentum weakening
Hidden Bullish: Price makes higher lows while RSI makes lower lows at the lower band, indicates strong underlying bullish momentum
Hidden Bearish: Price makes lower highs while RSI makes higher highs at the upper band, indicates strong underlying bearish momentum
Band Walk Patterns:
Upper Band Walk: RSI consistently touching or staying near upper band indicates exceptionally strong trend, wait for clear break below basis before considering reversal
Lower Band Walk: RSI consistently at lower band signals very weak momentum, requires break above basis for reversal confirmation
🎯 STRATEGIC APPLICATIONS
Strategy 1: Mean Reversion Trading
Setup Conditions:
Market Type: Ranging or choppy markets with no clear directional trend
Timeframe: Works best on lower timeframes (5m-1H) or during consolidation phases
Band Characteristic: Normal to narrow band width
Entry Rules:
Long Entry: RSI touches or crosses below lower band, wait for RSI to start rising back toward basis before entry
Short Entry: RSI touches or crosses above upper band, wait for RSI to start falling back toward basis before entry
Confirmation: Use price action confirmation (candlestick reversal patterns) at band touches
Exit Rules:
Target: RSI returns to basis line or opposite band
Stop Loss: Fixed percentage or below recent swing low/high
Time Stop: Exit if position not profitable within expected timeframe
Strategy 2: Trend Continuation Trading
Setup Conditions:
Market Type: Clear trending market with higher highs/lower lows
Timeframe: Medium to higher timeframes (1H-Daily)
Band Characteristic: Expanding or wide bands indicating strong momentum
Entry Rules:
Long Entry in Uptrend: Wait for RSI to pull back to basis line or slightly below, enter when RSI starts rising again
Short Entry in Downtrend: Wait for RSI to rally to basis line or slightly above, enter when RSI starts falling again
Avoid Counter-Trend: Do not fade RSI at bands during strong trends (band walk patterns)
Exit Rules:
Trailing Stop: Move stop to break-even when RSI reaches opposite band
Trend Break: Exit when RSI crosses basis against trend direction with conviction
Band Squeeze: Reduce position size when bands start narrowing significantly
Strategy 3: Breakout Preparation
Setup Conditions:
Market Type: Consolidating market after significant move or at key technical levels
Timeframe: Any timeframe, but longer timeframes provide more reliable breakouts
Band Characteristic: Narrowest band width in recent 100 bars (squeeze alert)
Preparation Phase:
Identify band squeeze condition (bands at multi-period narrowest point)
Monitor price action for consolidation patterns (triangles, rectangles, flags)
Prepare bracket orders for both directions
Wait for band expansion to begin
Entry Execution:
Breakout Confirmation: Enter in direction of RSI band breakout (RSI breaks above upper band or below lower band)
Price Confirmation: Ensure price also breaks corresponding technical level
Volume Confirmation: Look for volume expansion supporting the breakout
Risk Management:
Stop Loss: Place beyond consolidation pattern opposite extreme
Position Sizing: Use smaller size due to false breakout risk
Quick Exit: Exit immediately if RSI returns inside bands within 1-3 bars
Strategy 4: Multi-Timeframe Analysis
Timeframe Selection:
Higher Timeframe: Daily or 4H for trend context
Trading Timeframe: 1H or 15m for entry signals
Confirmation Timeframe: 5m or 1m for precise entry timing
Analysis Process:
Trend Identification: Check higher timeframe RSI position relative to bands, trade only in direction of higher timeframe momentum
Setup Formation: Wait for trading timeframe RSI to show pullback to basis in trending direction
Entry Timing: Use confirmation timeframe RSI band touch or crossover for precise entry
Alignment Confirmation: All timeframes should show RSI moving in same direction for highest probability setups
📋 DETAILED PARAMETER CONFIGURATION
RSI Source:
Close (Default): Standard price point, balances responsiveness and reliability
HL2: Reduces noise from intrabar volatility, provides smoother RSI values
HLC3 or OHLC4: Further smoothing for very choppy markets, slower to respond but more stable
Volume-Weighted: Consider using VWAP or volume-weighted prices for additional liquidity context
RSI Length Parameter:
Shorter Periods (5-10): More responsive but generates more signals, suitable for scalping or very active trading, higher noise level
Standard (14): Default and most widely used setting, proven balance between responsiveness and reliability, recommended starting point
Longer Periods (21-30): Smoother momentum measurement, fewer but potentially more reliable signals, better for swing trading or position trading
Optimization Note: Test across different market regimes, optimal length often varies by instrument volatility characteristics
RSI MA Type Parameter:
RMA (Default): Wilder's original smoothing method, provides traditional RSI behavior with balanced lag, most widely recognized and tested, recommended for standard technical analysis
EMA: Exponential smoothing gives more weight to recent values, faster response to momentum changes, suitable for active trading and trending markets, reduces lag compared to RMA
SMA: Simple average treats all periods equally, smoothest output with highest lag, best for filtering noise in choppy markets, useful for long-term position analysis
WMA: Weighted average emphasizes recent data less aggressively than EMA, middle ground between SMA and EMA characteristics, balanced responsiveness for swing trading
Advanced Options: Full access to 25+ moving average types including HMA (reduced lag), DEMA/TEMA (enhanced responsiveness), KAMA/FRAMA (adaptive behavior), T3 (smoothness), Kalman Filter (optimal estimation)
Selection Guide: RMA for traditional analysis and backtesting consistency, EMA for faster signals in trending markets, SMA for stability in ranging markets, adaptive types (KAMA/FRAMA) for varying volatility regimes
BB Length Parameter:
Short Length (10-15): Tighter bands that react quickly to RSI changes, more frequent band touches, suitable for active trading styles
Standard (20): Balanced approach providing meaningful statistical context without excessive lag
Long Length (30-50): Smoother bands that filter minor RSI fluctuations, captures only significant momentum extremes, fewer but higher quality signals
Relationship to RSI Length: Consider BB Length greater than RSI Length for cleaner signals
BB MA Type Parameter:
SMA (Default): Standard Bollinger Bands calculation using simple moving average for basis line, treats all periods equally, widely recognized and tested approach
EMA: Exponential smoothing for basis line gives more weight to recent RSI values, creates more responsive bands that adapt faster to momentum changes, suitable for trending markets
RMA: Wilder's smoothing provides consistent behavior aligned with traditional RSI when using RMA for both RSI and BB calculations
WMA: Weighted average for basis line balances recent emphasis with historical context, middle ground between SMA and EMA responsiveness
Advanced Options: Full access to 25+ moving average types for basis calculation, including HMA (reduced lag), DEMA/TEMA (enhanced responsiveness), KAMA/FRAMA (adaptive to volatility changes)
Selection Guide: SMA for standard Bollinger Bands behavior and backtesting consistency, EMA for faster band adaptation in dynamic markets, matching RSI MA type creates unified smoothing behavior
BB Multiplier Parameter:
Conservative (1.5-1.8): Tighter bands resulting in more frequent touches, useful in low volatility environments, higher signal frequency but potentially more false signals
Standard (2.0): Default setting representing approximately 95% confidence interval under normal distribution, widely accepted statistical threshold
Aggressive (2.5-3.0): Wider bands capturing only extreme momentum conditions, fewer but potentially more significant signals, reduces false signals in high volatility
Adaptive Approach: Consider adjusting multiplier based on instrument characteristics, lower multiplier for stable instruments, higher for volatile instruments
Parameter Optimization Workflow:
Start with default parameters (RSI:14, BB:20, Mult:2.0)
Test across representative sample period including different market regimes
Adjust RSI length based on desired responsiveness vs stability tradeoff
Tune BB length to match your typical holding period
Modify multiplier to achieve desired signal frequency
Validate on out-of-sample data to avoid overfitting
Document optimal parameters for different instruments and timeframes
Reference Levels Display:
Enabled (Default): Shows traditional 30/50/70 levels for comparison with dynamic bands, helps visualize the adaptive advantage
Disabled: Cleaner chart focusing purely on dynamic zones, reduces visual clutter for experienced users
Educational Value: Keeping reference levels visible helps understand how dynamic bands differ from fixed thresholds across varying market conditions
📈 PERFORMANCE ANALYSIS & COMPETITIVE ADVANTAGES
Comparison with Traditional RSI:
Fixed Threshold RSI Limitations:
In ranging low-volatility markets: RSI rarely reaches 70/30, missing tradable extremes
In trending high-volatility markets: RSI frequently breaks through 70/30, generating excessive false reversal signals
Across different instruments: Same thresholds applied to volatile crypto and stable forex pairs produce inconsistent results
Threshold Adjustment Problem: Manually changing thresholds for different conditions is subjective and lagging
RSI Bollinger Bands Advantages:
Automatic Adaptation: Bands adjust to current volatility regime without manual intervention
Consistent Logic: Same statistical approach works across different instruments and timeframes
Reduced False Signals: Band width filtering helps distinguish meaningful extremes from noise
Additional Information: Band width provides volatility context missing in standard RSI
Objective Extremes: Statistical basis (standard deviations) provides objective extreme definition
Comparison with Price-Based Bollinger Bands:
Price BB Characteristics:
Measures absolute price volatility
Affected by large price gaps and outliers
Band position relative to price not normalized
Difficult to compare across different price scales
RSI BB Advantages:
Normalized Scale: RSI's 0-100 bounds make band interpretation consistent across all instruments
Momentum Focus: Directly measures momentum extremes rather than price extremes
Reduced Gap Impact: RSI calculation smooths price gaps impact on band calculations
Comparable Analysis: Same RSI BB appearance across stocks, forex, crypto enables consistent strategy application
Performance Characteristics:
Signal Quality:
Higher Signal-to-Noise Ratio: Dynamic bands help filter RSI oscillations that don't represent meaningful extremes
Context-Aware Alerts: Band width provides volatility context helping traders adjust position sizing and stop placement
Reduced Whipsaws: During consolidations, narrower bands prevent premature signals from minor RSI movements
Responsiveness:
Adaptive Lag: Band calculation introduces some lag, but this lag is adaptive to current conditions rather than fixed
Faster Than Manual Adjustment: Automatic band adjustment is faster than trader's ability to manually modify thresholds
Balanced Approach: Combines RSI's inherent momentum lag with BB's statistical smoothing for stable yet responsive signals
Versatility:
Multi-Strategy Application: Supports both mean reversion (ranging markets) and trend continuation (trending markets) approaches
Universal Instrument Coverage: Works effectively across equities, forex, commodities, cryptocurrencies without parameter changes
Timeframe Agnostic: Same interpretation applies from 1-minute charts to monthly charts
Limitations and Considerations:
Known Limitations:
Dual Lag Effect: Combines RSI's momentum lag with BB's statistical lag, making it less suitable for very short-term scalping
Requires Volatility History: Needs sufficient bars for BB calculation, less effective immediately after major regime changes
Statistical Assumptions: Assumes RSI values are somewhat normally distributed, extreme trending conditions may violate this
Not a Standalone System: Like all indicators, should be combined with price action analysis and risk management
Optimal Use Cases:
Best for swing trading and position trading timeframes
Most effective in markets with alternating volatility regimes
Ideal for traders who use multiple instruments and timeframes
Suitable for systematic trading approaches requiring consistent logic
Suboptimal Conditions:
Very low timeframes (< 5 minutes) where lag becomes problematic
Instruments with extreme volatility spikes (gap-prone markets)
Markets in strong persistent trends where mean reversion rarely occurs
Periods immediately following major structural changes (new trading regime)
USAGE NOTES
This indicator is designed for technical analysis and educational purposes to help traders understand the interaction between momentum measurement and statistical volatility bands. The RSI Bollinger Bands has limitations and should not be used as the sole basis for trading decisions.
Important Considerations:
No Predictive Guarantee: Past band touches and patterns do not guarantee future price behavior
Market Regime Dependency: Indicator performance varies significantly between trending and ranging market conditions
Complementary Analysis Required: Should be used alongside price action, support/resistance levels, and fundamental analysis
Risk Management Essential: Always use proper position sizing, stop losses, and risk controls regardless of signal quality
Parameter Sensitivity: Different instruments and timeframes may require parameter optimization for optimal results
Continuous Monitoring: Band characteristics change with market conditions, requiring ongoing assessment
Recommended Supporting Analysis:
Price structure analysis (support/resistance, trend lines)
Volume confirmation for breakout signals
Multiple timeframe alignment
Market context awareness (news events, session times)
Correlation analysis with related instruments
The indicator aims to provide adaptive momentum analysis that adjusts to changing market volatility, but traders must apply sound judgment, proper risk management, and comprehensive market analysis in their decision-making process.
RSI Donchian Channel [DCAUT]█ RSI Donchian Channel
📊 ORIGINALITY & INNOVATION
The RSI Donchian Channel represents an important synthesis of two complementary analytical frameworks: momentum oscillators and breakout detection systems. This indicator addresses a common limitation in traditional RSI analysis by replacing fixed overbought/oversold thresholds with adaptive zones derived from historical RSI extremes.
Key Enhancement:
Traditional RSI analysis relies on static threshold levels (typically 30/70), which may not adequately reflect changing market volatility regimes. This indicator adapts the reference zones dynamically based on the actual RSI behavior over the lookback period, helping traders identify meaningful momentum extremes relative to recent price action rather than arbitrary fixed levels.
The implementation combines the proven momentum measurement capabilities of RSI with Donchian Channel's breakout detection methodology, creating a framework that identifies both momentum exhaustion points and potential continuation signals through the same analytical lens.
📐 MATHEMATICAL FOUNDATION
Core Calculation Process:
Step 1: RSI Calculation
The Relative Strength Index measures momentum by comparing the magnitude of recent gains to recent losses:
Calculate price changes between consecutive periods
Separate positive changes (gains) from negative changes (losses)
Apply selected smoothing method (RMA standard, also supports SMA, EMA, WMA) to both gain and loss series
Compute Relative Strength (RS) as the ratio of smoothed gains to smoothed losses
Transform RS into bounded 0-100 scale using the formula: RSI = 100 - (100 / (1 + RS))
Step 2: Donchian Channel Application
The Donchian Channel identifies the highest and lowest RSI values within the specified lookback period:
Upper Channel: Highest RSI value over the lookback period, represents the recent momentum peak
Lower Channel: Lowest RSI value over the lookback period, represents the recent momentum trough
Middle Channel (Basis): Average of upper and lower channels, serves as equilibrium reference
Channel Width Dynamics:
The distance between upper and lower channels reflects RSI volatility. Wide channels indicate high momentum variability, while narrow channels suggest momentum consolidation and potential breakout preparation. The indicator monitors channel width over a 100-period window to identify squeeze conditions that often precede significant momentum shifts.
📊 COMPREHENSIVE SIGNAL ANALYSIS
Primary Signal Categories:
Breakout Signals:
Upper Breakout: RSI crosses above the upper channel, indicates momentum reaching new relative highs and potential trend continuation, particularly significant when accompanied by price confirmation
Lower Breakout: RSI crosses below the lower channel, suggests momentum reaching new relative lows and potential trend exhaustion or reversal setup
Breakout strength is enhanced when the channel is narrow prior to the breakout, indicating a transition from consolidation to directional movement
Mean Reversion Signals:
Upper Touch Without Breakout: RSI reaches the upper channel but fails to break through, may indicate momentum exhaustion and potential reversal opportunity
Lower Touch Without Breakout: RSI reaches the lower channel without breakdown, suggests potential bounce as momentum reaches oversold extremes
Return to Basis: RSI moving back toward the middle channel after touching extremes signals momentum normalization
Trend Strength Assessment:
Sustained Upper Channel Riding: RSI consistently remains near or above the upper channel during strong uptrends, indicates persistent bullish momentum
Sustained Lower Channel Riding: RSI stays near or below the lower channel during strong downtrends, reflects persistent bearish pressure
Basis Line Position: RSI position relative to the middle channel helps identify the prevailing momentum bias
Channel Compression Patterns:
Squeeze Detection: Channel width narrowing to 100-period lows indicates momentum consolidation, often precedes significant directional moves
Expansion Phase: Channel widening after a squeeze confirms the initiation of a new momentum regime
Persistent Narrow Channels: Extended periods of tight channels suggest market indecision and accumulation/distribution phases
🎯 STRATEGIC APPLICATIONS
Trend Continuation Strategy:
This approach focuses on identifying and trading momentum breakouts that confirm established trends:
Identify the prevailing price trend using higher timeframe analysis or trend-following indicators
Wait for RSI to break above the upper channel in uptrends (or below the lower channel in downtrends)
Enter positions in the direction of the breakout when price action confirms the momentum shift
Place protective stops below the recent swing low (long positions) or above swing high (short positions)
Target profit levels based on prior swing extremes or use trailing stops to capture extended moves
Exit when RSI crosses back through the basis line in the opposite direction
Mean Reversion Strategy:
This method capitalizes on momentum extremes and subsequent corrections toward equilibrium:
Monitor for RSI reaching the upper or lower channel boundaries
Look for rejection signals (price reversal patterns, volume divergence) when RSI touches the channels
Enter counter-trend positions when RSI begins moving back toward the basis line
Use the basis line as the initial profit target for mean reversion trades
Implement tight stops beyond the channel extremes to limit risk on failed reversals
Scale out of positions as RSI approaches the basis line and closes the position when RSI crosses the basis
Breakout Preparation Strategy:
This approach positions traders ahead of potential volatility expansion from consolidation phases:
Identify squeeze conditions when channel width reaches 100-period lows
Monitor price action for consolidation patterns (triangles, rectangles, flags) during the squeeze
Prepare conditional orders for breakouts in both directions from the consolidation
Enter positions when RSI breaks out of the narrow channel with expanding width
Use the channel width expansion as a confirmation signal for the breakout's validity
Manage risk with stops just inside the opposite channel boundary
Multi-Timeframe Confluence Strategy:
Combining RSI Donchian Channel analysis across multiple timeframes can improve signal reliability:
Identify the primary trend direction using a higher timeframe RSI Donchian Channel (e.g., daily or weekly)
Use a lower timeframe (e.g., 4-hour or hourly) to time precise entry points
Enter long positions when both timeframes show RSI above their respective basis lines
Enter short positions when both timeframes show RSI below their respective basis lines
Avoid trades when timeframes provide conflicting signals (e.g., higher timeframe below basis, lower timeframe above)
Exit when the higher timeframe RSI crosses its basis line in the opposite direction
Risk Management Guidelines:
Effective risk management is essential for all RSI Donchian Channel strategies:
Position Sizing: Calculate position sizes based on the distance between entry point and stop loss, limiting risk to 1-2% of capital per trade
Stop Loss Placement: For breakout trades, place stops just inside the opposite channel boundary; for mean reversion trades, use stops beyond the channel extremes
Profit Targets: Use the basis line as a minimum target for mean reversion trades; for trend trades, target prior swing extremes or use trailing stops
Channel Width Context: Increase position sizes during narrow channels (lower volatility) and reduce sizes during wide channels (higher volatility)
Correlation Awareness: Monitor correlations between traded instruments to avoid over-concentration in similar setups
📋 DETAILED PARAMETER CONFIGURATION
RSI Source:
Defines the price data series used for RSI calculation:
Close (Default): Standard choice providing end-of-period momentum assessment, suitable for most trading styles and timeframes
High-Low Average (HL2): Reduces the impact of closing auction dynamics, useful for markets with significant end-of-day volatility
High-Low-Close Average (HLC3): Provides a more balanced view incorporating the entire period's range
Open-High-Low-Close Average (OHLC4): Offers the most comprehensive price representation, helpful for identifying overall period sentiment
Strategy Consideration: Use Close for end-of-period signals, HL2 or HLC3 for intraday volatility reduction, OHLC4 for capturing full period dynamics
RSI Length:
Controls the number of periods used for RSI calculation:
Short Periods (5-9): Highly responsive to recent price changes, produces more frequent signals with increased false signal risk, suitable for short-term trading and volatile markets
Standard Period (14): Widely accepted default balancing responsiveness with stability, appropriate for swing trading and intermediate-term analysis
Long Periods (21-28): Produces smoother RSI with fewer signals but more reliable trend identification, better for position trading and reducing noise in choppy markets
Optimization Approach: Test different lengths against historical data for your specific market and timeframe, consider using longer periods in ranging markets and shorter periods in trending markets
RSI MA Type:
Determines the smoothing method applied to price changes in RSI calculation:
RMA (Relative Moving Average - Default): Wilder's original smoothing method providing stable momentum measurement with gradual response to changes, maintains consistency with classical RSI interpretation
SMA (Simple Moving Average): Treats all periods equally, responds more quickly to changes than RMA but may produce more whipsaws in volatile conditions
EMA (Exponential Moving Average): Weights recent periods more heavily, increases responsiveness at the cost of potential noise, suitable for traders prioritizing early signal generation
WMA (Weighted Moving Average): Applies linear weighting favoring recent data, offers a middle ground between SMA and EMA responsiveness
Selection Guidance: Maintain RMA for consistency with traditional RSI analysis, use EMA or WMA for more responsive signals in fast-moving markets, apply SMA for maximum simplicity and transparency
DC Length:
Specifies the lookback period for Donchian Channel calculation on RSI values:
Short Periods (10-14): Creates tight channels that adapt quickly to changing momentum conditions, generates more frequent trading signals but increases sensitivity to short-term RSI fluctuations
Standard Period (20): Balances channel responsiveness with stability, aligns with traditional Bollinger Bands and moving average periods, suitable for most trading styles
Long Periods (30-50): Produces wider, more stable channels that better represent sustained momentum extremes, reduces signal frequency while improving reliability, appropriate for position traders and higher timeframes
Calibration Strategy: Match DC length to your trading timeframe (shorter for day trading, longer for swing trading), test channel width behavior during different market regimes, consider using adaptive periods that adjust to volatility conditions
Market Adaptation: Use shorter DC lengths in trending markets to capture momentum shifts earlier, apply longer periods in ranging markets to filter noise and focus on significant extremes
Parameter Combination Recommendations:
Scalping/Day Trading: RSI Length 5-9, DC Length 10-14, EMA or WMA smoothing for maximum responsiveness
Swing Trading: RSI Length 14, DC Length 20, RMA smoothing for balanced analysis (default configuration)
Position Trading: RSI Length 21-28, DC Length 30-50, RMA or SMA smoothing for stable signals
High Volatility Markets: Longer RSI periods (21+) with standard DC length (20) to reduce noise
Low Volatility Markets: Standard RSI length (14) with shorter DC length (10-14) to capture subtle momentum shifts
📈 PERFORMANCE ANALYSIS & COMPETITIVE ADVANTAGES
Adaptive Threshold Mechanism:
Unlike traditional RSI analysis with fixed 30/70 thresholds, this indicator's Donchian Channel approach provides several improvements:
Context-Aware Extremes: Overbought/oversold levels adjust automatically based on recent momentum behavior rather than arbitrary fixed values
Volatility Adaptation: In low volatility periods, channels narrow to reflect tighter momentum ranges; in high volatility, channels widen appropriately
Market Regime Recognition: The indicator implicitly adapts to different market conditions without manual threshold adjustments
False Signal Reduction: Adaptive channels help reduce premature reversal signals that often occur with fixed thresholds during strong trends
Signal Quality Characteristics:
The indicator's dual-purpose design provides distinct advantages for different trading objectives:
Breakout Trading: Channel boundaries offer clear, objective breakout levels that update dynamically, eliminating the ambiguity of when momentum becomes "too high" or "too low"
Mean Reversion: The basis line provides a natural profit target for reversion trades, representing the midpoint of recent momentum extremes
Trend Strength: Persistent channel boundary riding offers an objective measure of trend strength without additional indicators
Consolidation Detection: Channel width analysis provides early warning of potential volatility expansion from compression phases
Comparative Analysis:
When compared to traditional RSI implementations and other momentum frameworks:
vs. Fixed Threshold RSI: Provides market-adaptive reference levels rather than static values, helping to reduce false signals during trending markets where RSI can remain "overbought" or "oversold" for extended periods
vs. RSI Bollinger Bands: Offers clearer breakout signals and more intuitive extreme identification through actual high/low boundaries rather than statistical standard deviations
vs. Stochastic Oscillator: Maintains RSI's momentum measurement advantages (unbounded calculation avoiding scale compression) while adding the breakout detection capabilities of Donchian Channels
vs. Standard Donchian Channels: Applies breakout methodology to momentum space rather than price, providing earlier signals of potential trend changes before price breakouts occur
Performance Characteristics:
The indicator exhibits specific behavioral patterns across different market conditions:
Trending Markets: Excels at identifying momentum continuation through channel breakouts, RSI tends to ride one channel boundary during strong trends, providing trend confirmation
Ranging Markets: Channel width narrows during consolidation, offering early preparation signals for potential breakout trading opportunities
High Volatility: Channels widen to reflect increased momentum variability, automatically adjusting signal sensitivity to match market conditions
Low Volatility: Channels contract, making the indicator more sensitive to subtle momentum shifts that may be significant in calm market environments
Transition Periods: Channel squeezes often precede major trend changes, offering advance warning of potential regime shifts
Limitations and Considerations:
Users should be aware of certain operational characteristics:
Lookback Dependency: Channel boundaries depend entirely on the lookback period, meaning the indicator has no predictive element beyond identifying current momentum relative to recent history
Lag Characteristics: As with all moving average-based indicators, RSI calculation introduces lag, and channel boundaries update only as new extremes occur within the lookback window
Range-Bound Sensitivity: In extremely tight ranges, channels may become very narrow, potentially generating excessive signals from minor momentum fluctuations
Trending Persistence: During very strong trends, RSI may remain at channel extremes for extended periods, requiring patience for mean reversion setups or commitment to trend-following approaches
No Absolute Levels: Unlike traditional RSI, this indicator provides no fixed reference points (like 50), making it less suitable for strategies that depend on absolute momentum readings
USAGE NOTES
This indicator is designed for technical analysis and educational purposes to help traders understand momentum dynamics and identify potential trading opportunities. The RSI Donchian Channel has limitations and should not be used as the sole basis for trading decisions.
Important considerations:
Performance varies significantly across different market conditions, timeframes, and instruments
Historical signal patterns do not guarantee future results, as market behavior continuously evolves
Effective use requires understanding of both RSI momentum principles and Donchian Channel breakout concepts
Risk management practices (stop losses, position sizing, diversification) are essential for any trading application
Consider combining with additional analytical tools such as volume analysis, price action patterns, or trend indicators for confirmation
Backtest thoroughly on your specific instruments and timeframes before live trading implementation
Be aware that optimization on historical data may lead to curve-fitting and poor forward performance
The indicator performs best when used as part of a comprehensive trading methodology that incorporates multiple forms of market analysis, sound risk management, and realistic expectations about win rates and drawdowns.
Volume Delta Volume Signals by Claudio [hapharmonic]// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © hapharmonic
//@version=6
FV = format.volume
FP = format.percent
indicator('Volume Delta Volume Signals by Claudio ', format = FV, max_bars_back = 4999, max_labels_count = 500)
//------------------------------------------
// Settings |
//------------------------------------------
bool usecandle = input.bool(true, title = 'Volume on Candles',display=display.none)
color C_Up = input.color(#12cef8, title = 'Volume Buy', inline = ' ', group = 'Style')
color C_Down = input.color(#fe3f00, title = 'Volume Sell', inline = ' ', group = 'Style')
// ✅ Nueva entrada para colores de señales
color buySignalColor = input.color(color.new(color.green, 0), "Buy Signal Color", group = "Signals")
color sellSignalColor = input.color(color.new(color.red, 0), "Sell Signal Color", group = "Signals")
string P_ = input.string(position.top_right,"Position",options = ,
group = "Style",display=display.none)
string sL = input.string(size.small , 'Size Label', options = , group = 'Style',display=display.none)
string sT = input.string(size.normal, 'Size Table', options = , group = 'Style',display=display.none)
bool Label = input.bool(false, inline = 'l')
History = input.bool(true, inline = 'l')
// Inputs for EMA lengths and volume confirmation
bool MAV = input.bool(true, title = 'EMA', group = 'EMA')
string volumeOption = input.string('Use Volume Confirmation', title = 'Volume Option', options = , group = 'EMA',display=display.none)
bool useVolumeConfirmation = volumeOption == 'none' ? false : true
int emaFastLength = input(12, title = 'Fast EMA Length', group = 'EMA',display=display.none)
int emaSlowLength = input(26, title = 'Slow EMA Length', group = 'EMA',display=display.none)
int volumeConfirmationLength = input(6, title = 'Volume Confirmation Length', group = 'EMA',display=display.none)
string alert_freq = input.string(alert.freq_once_per_bar_close, title="Alert Frequency",
options= ,group = "EMA",
tooltip="If you choose once_per_bar, you will receive immediate notifications (but this may cause interference or indicator repainting).
\n However, if you choose once_per_bar_close, it will wait for the candle to confirm the signal before notifying.",display=display.none)
//------------------------------------------
// UDT_identifier |
//------------------------------------------
type OHLCV
float O = open
float H = high
float L = low
float C = close
float V = volume
type VolumeData
float buyVol
float sellVol
float pcBuy
float pcSell
bool isBuyGreater
float higherVol
float lowerVol
color higherCol
color lowerCol
//------------------------------------------
// Calculate volumes and percentages |
//------------------------------------------
calcVolumes(OHLCV ohlcv) =>
var VolumeData data = VolumeData.new()
data.buyVol := ohlcv.V * (ohlcv.C - ohlcv.L) / (ohlcv.H - ohlcv.L)
data.sellVol := ohlcv.V - data.buyVol
data.pcBuy := data.buyVol / ohlcv.V * 100
data.pcSell := 100 - data.pcBuy
data.isBuyGreater := data.buyVol > data.sellVol
data.higherVol := data.isBuyGreater ? data.buyVol : data.sellVol
data.lowerVol := data.isBuyGreater ? data.sellVol : data.buyVol
data.higherCol := data.isBuyGreater ? C_Up : C_Down
data.lowerCol := data.isBuyGreater ? C_Down : C_Up
data
//------------------------------------------
// Get volume data |
//------------------------------------------
ohlcv = OHLCV.new()
volData = calcVolumes(ohlcv)
// Plot volumes and create labels
plot(ohlcv.V, color=color.new(volData.higherCol, 90), style=plot.style_columns, title='Total',display = display.all - display.status_line)
plot(ohlcv.V, color=volData.higherCol, style=plot.style_stepline_diamond, title='Total2', linewidth = 2,display = display.pane)
plot(volData.higherVol, color=volData.higherCol, style=plot.style_columns, title='Higher Volume', display = display.all - display.status_line)
plot(volData.lowerVol , color=volData.lowerCol , style=plot.style_columns, title='Lower Volume',display = display.all - display.status_line)
S(D,F)=>str.tostring(D,F)
volStr = S(math.sign(ta.change(ohlcv.C)) * ohlcv.V, FV)
buyVolStr = S(volData.buyVol , FV )
sellVolStr = S(volData.sellVol , FV )
// ✅ MODIFICACIÓN: Porcentaje sin decimales
buyPercentStr = str.tostring(math.round(volData.pcBuy)) + " %"
sellPercentStr = str.tostring(math.round(volData.pcSell)) + " %"
totalbuyPercentC_ = volData.buyVol / (volData.buyVol + volData.sellVol) * 100
sup = not na(ohlcv.V)
if sup
TC = text.align_center
CW = color.white
var table tb = table.new(P_, 6, 6, bgcolor = na, frame_width = 2, frame_color = chart.fg_color, border_width = 1, border_color = CW)
tb.cell(0, 0, text = 'Volume Candles', text_color = #FFBF00, bgcolor = #0E2841, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 0, 5, 0)
tb.cell(0, 1, text = 'Current Volume', text_color = CW, bgcolor = #0B3040, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 1, 1, 1)
tb.cell(0, 2, text = 'Buy', text_color = #000000, bgcolor = #92D050, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 2, text = 'Sell', text_color = #000000, bgcolor = #FF0000, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(0, 3, text = buyVolStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 3, text = sellVolStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(0, 5, text = 'Net: ' + volStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.merge_cells(0, 5, 1, 5)
tb.cell(0, 4, text = buyPercentStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
tb.cell(1, 4, text = sellPercentStr, text_color = CW, bgcolor = #074F69, text_halign = TC, text_valign = TC, text_size = sT)
cellCount = 20
filledCells = 0
for r = 5 to 1 by 1
for c = 2 to 5 by 1
if filledCells < cellCount * (totalbuyPercentC_ / 100)
tb.cell(c, r, text = '', bgcolor = C_Up)
else
tb.cell(c, r, text = '', bgcolor = C_Down)
filledCells := filledCells + 1
filledCells
if Label
sp = ' '
l = label.new(bar_index, ohlcv.V,
text=str.format('Net: {0}\nBuy: {1} ({2})\nSell: {3} ({4})\n{5}/\\\n {5}l\n {5}l',
volStr, buyVolStr, buyPercentStr, sellVolStr, sellPercentStr, sp),
style=label.style_none, textcolor=volData.higherCol, size=sL, textalign=text.align_left)
if not History
(l ).delete()
//------------------------------------------
// Draw volume levels on the candlesticks |
//------------------------------------------
float base = na,float value = na
bool uc = usecandle and sup
if volData.isBuyGreater
base := math.min(ohlcv.O, ohlcv.C)
value := base + math.abs(ohlcv.O - ohlcv.C) * (volData.pcBuy / 100)
else
base := math.max(ohlcv.O, ohlcv.C)
value := base - math.abs(ohlcv.O - ohlcv.C) * (volData.pcSell / 100)
barcolor(sup ? color.new(na, na) : ohlcv.C < ohlcv.O ? color.red : color.green,display = usecandle? display.all:display.none)
UseC = uc ? volData.higherCol:color.new(na, na)
plotcandle(uc?base:na, uc?base:na, uc?value:na, uc?value:na,
title='Body', color=UseC, bordercolor=na, wickcolor=UseC,
display = usecandle ? display.all - display.status_line : display.none, force_overlay=true,editable=false)
plotcandle(uc?ohlcv.O:na, uc?ohlcv.H:na, uc?ohlcv.L:na, uc?ohlcv.C:na,
title='Fill', color=color.new(UseC,80), bordercolor=UseC, wickcolor=UseC,
display = usecandle ? display.all - display.status_line : display.none, force_overlay=true,editable=false)
//------------------------------------------------------------
// Plot the EMA and filter out the noise with volume control. |
//------------------------------------------------------------
float emaFast = ta.ema(ohlcv.C, emaFastLength)
float emaSlow = ta.ema(ohlcv.C, emaSlowLength)
bool signal = emaFast > emaSlow
color c_signal = signal ? C_Up : C_Down
float volumeMA = ta.sma(ohlcv.V, volumeConfirmationLength)
bool crossover = ta.crossover(emaFast, emaSlow)
bool crossunder = ta.crossunder(emaFast, emaSlow)
isVolumeConfirmed(source, length, ma) =>
math.sum(source > ma ? source : 0, length) >= math.sum(source < ma ? source : 0, length)
bool ISV = isVolumeConfirmed(ohlcv.V, volumeConfirmationLength, volumeMA)
bool crossoverConfirmed = crossover and (not useVolumeConfirmation or ISV)
bool crossunderConfirmed = crossunder and (not useVolumeConfirmation or ISV)
PF = MAV ? emaFast : na
PS = MAV ? emaSlow : na
p1 = plot(PF, color = c_signal, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 80), linewidth = 10, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 90), linewidth = 20, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 95), linewidth = 30, editable = false, force_overlay = true, display = display.pane)
plot(PF, color = color.new(c_signal, 98), linewidth = 45, editable = false, force_overlay = true, display = display.pane)
p2 = plot(PS, color = c_signal, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 80), linewidth = 10, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 90), linewidth = 20, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 95), linewidth = 30, editable = false, force_overlay = true, display = display.pane)
plot(PS, color = color.new(c_signal, 98), linewidth = 45, editable = false, force_overlay = true, display = display.pane)
fill(p1, p2, top_value=crossover ? emaFast : emaSlow,
bottom_value =crossover ? emaSlow : emaFast,
top_color =color.new(c_signal, 80),
bottom_color =color.new(c_signal, 95)
)
// ✅ Usar colores configurables para señales
plotshape(crossoverConfirmed and MAV, style=shape.triangleup , location=location.belowbar, color=buySignalColor , size=size.small, force_overlay=true,display =display.pane)
plotshape(crossunderConfirmed and MAV, style=shape.triangledown, location=location.abovebar, color=sellSignalColor, size=size.small, force_overlay=true,display =display.pane)
string msg = '---------\n'+"Buy volume ="+buyVolStr+"\nBuy Percent = "+buyPercentStr+"\nSell volume = "+sellVolStr+"\nSell Percent = "+sellPercentStr+"\nNet = "+volStr+'\n---------'
if crossoverConfirmed
alert("Price (" + str.tostring(close) + ") Crossed over MA\n" + msg, alert_freq)
if crossunderConfirmed
alert("Price (" + str.tostring(close) + ") Crossed under MA\n" + msg, alert_freq)
Cumulative Returns by Session [BackQuant]Cumulative Returns by Session
What this is
This tool breaks the trading day into three user-defined sessions and tracks how much each session contributes to return, volatility, and volume. It then aggregates results over a rolling window so you can see which session has been pulling its weight, how streaky each session has been, and how sessions relate to one another through a compact correlation heatmap.
We’ve also given the functionality for the user to use a simplified table, just by switching off all settings they are not interested in.
How it works
1) Session segmentation
You define APAC, EU, and US sessions with explicit hours and time zones. The script detects when each session starts and ends on every intraday bar and records its open, intraday high and low, close, and summed volume.
2) Per-session math
At each session end the script computes:
Return — either Percent: (Close−Open)÷Open×100(Close − Open) ÷ Open × 100(Close−Open)÷Open×100 or Points: (Close−Open)(Close − Open)(Close−Open), based on your selection.
Volatility — either Range: (High−Low)÷Open×100(High − Low) ÷ Open × 100(High−Low)÷Open×100 or ATR scaled by price: ATR÷Open×100ATR ÷ Open × 100ATR÷Open×100.
Volume — total volume transacted during that session.
3) Storage and lookback
Each day’s three session stats are stored as a row. You choose how many recent sessions to keep in memory. The script then:
Builds cumulative returns for APAC, EU, US across the lookback.
Computes averages, win rates, and a Sharpe-like ratio avgreturn÷avgvolatilityavg return ÷ avg volatilityavgreturn÷avgvolatility per session.
Tracks streaks of positive or negative sessions to show momentum.
Tracks drawdowns on cumulative returns to show worst runs from peak.
Computes rolling means over a short window for short-term drift.
4) Correlation heatmap
Using the stored arrays of session returns, the script calculates Pearson correlations between APAC–EU, APAC–US, and EU–US, and colors the matrix by strength and sign so you can spot coupling or decoupling at a glance.
What it plots
Three lines: cumulative return for APAC, EU, US over the chosen lookback.
Zero reference line for orientation.
A statistics table with cumulative %, average %, positive session rate, and optional columns for volatility, average volume, max drawdown, current streak, return-to-vol ratio, and rolling average.
A small correlation heatmap table showing APAC, EU, US cross-session correlations.
How to use it
Pick the asset — leave Custom Instrument empty to use the chart symbol, or point to another symbol for cross-asset studies.
Set your sessions and time zones — defaults approximate APAC, EU, and US hours, but you can align them to exchange times or your workflow.
Choose calculation modes — Percent vs Points for return, Range vs ATR for volatility. Points are convenient for futures and fixed-tick assets, Percent is comparable across symbols.
Decide the lookback — more sessions smooths lines and stats; fewer sessions makes the tool more reactive.
Toggle analytics — add volatility, volume, drawdown, streaks, Sharpe-like ratio, rolling averages, and the correlation table as needed.
Why session attribution helps
Different sessions are driven by different flows. Asia often sets the overnight tone, Europe adds liquidity and direction changes, and the US session can dominate range expansion. Separating contributions by session helps you:
Identify which session has been the main driver of net trend.
Measure whether volatility or volume is concentrated in a specific window.
See if one session’s gains are consistently given back in another.
Adapt tactics: fade during a mean-reverting session, press during a trending session.
Reading the tables
Cumulative % — sum of session returns over the lookback. The sign and slope tell you who is carrying the move.
Avg Return % and Positive Sessions % — direction and hit rate. A low average but high hit rate implies many small moves; the reverse implies occasional big swings.
Avg Volatility % — typical intrabars range for that session. Compare with Avg Return to judge efficiency.
Return/Vol Ratio — return per unit of volatility. Higher is better for stability.
Max Drawdown % — worst cumulative give-back within the lookback. A quick way to spot riskiness by session.
Current Streak — consecutive up or down sessions. Useful for mean-reversion or regime awareness.
Rolling Avg % — short-window drift indicator to catch recent turnarounds.
Correlation matrix — green clusters indicate sessions tending to move together; red indicates offsetting behavior.
Settings overview
Basic
Number of Sessions — how many recent days to include.
Custom Instrument — analyze another ticker while staying on your current chart.
Session Configuration and Times
Enable or hide APAC, EU, US rows.
Set hours per session and the specific time zone for each.
Calculation Methods
Return Calculation — Percent or Points.
Volatility Calculation — Range or ATR; ATR Length when applicable.
Advanced Analytics
Correlation, Drawdown, Momentum, Sharpe-like ratio, Rolling Statistics, Rolling Period.
Display Options and Colors
Show Statistics Table and its position.
Toggle columns for Volatility and Volume.
Pick individual colors for each session line and row accents.
Common applications
Session bias mapping — find which window tends to trend in your market and plan exposure accordingly.
Strategy scheduling — allocate attention or risk to the session with the best return-to-vol ratio.
News and macro awareness — see if correlation rises around central bank cycles or major data releases.
Cross-asset monitoring — set the Custom Instrument to a driver (index future, DXY, yields) to see if your symbol reacts in a particular session.
Notes
This indicator works on intraday charts, since sessions are defined within a day. If you change session clocks or time zones, give the script a few bars to accumulate fresh rows. Percent vs Points and Range vs ATR choices affect comparability across assets, so be consistent when comparing symbols.
Session context is one of the simplest ways to explain a messy tape. By separating the day into three windows and scoring each one on return, volatility, and consistency, this tool shows not just where price ended up but when and how it got there. Use the cumulative lines to spot the steady driver, read the table to judge quality and risk, and glance at the heatmap to learn whether the sessions are amplifying or canceling one another. Adjust the hours to your market and let the data tell you which session deserves your focus.
EMA/VWAP SuiteEMA/VWAP Suite
Overview
The EMA/VWAP Suite is a versatile and customizable Pine Script indicator designed for traders who want to combine Exponential Moving Averages (EMAs) and Volume Weighted Average Prices (VWAPs) in a single, powerful tool. It overlays up to eight EMAs and six VWAPs (three anchored, three rolling) on the chart, each with percentage difference labels to show how far the current price is from these key levels. This indicator is perfect for technical analysis, supporting strategies like trend following, mean reversion, and VWAP-based trading.
By default, the indicator displays eight EMAs and a session-anchored VWAP (AVWAP 1, in fuchsia) with their respective percentage difference labels, keeping the chart clean yet informative. Other VWAPs and their bands are disabled by default but can be enabled and customized as needed. The suite is designed to minimize clutter while providing maximum flexibility for traders.
Features
- Eight Customizable EMAs: Plot up to eight EMAs with user-defined lengths (default: 3, 9, 19, 38, 50, 65, 100, 200), each with a unique color for easy identification.
- EMA Percentage Difference Labels: Show the percentage difference between the current price and each EMA, displayed only for visible EMAs when enabled.
- Three Anchored VWAPs: Plot VWAPs anchored to the start of a session, week, or month, with customizable source, offset, and band multipliers. AVWAP 1 (session-anchored, fuchsia) is enabled by default.
- Three Rolling VWAPs: Plot VWAPs calculated over fixed periods (default: 20, 50, 100), with customizable source, offset, and band multipliers.
- VWAP Bands: Optional upper and lower bands for each VWAP, based on standard deviation with user-defined multipliers.
- VWAP Percentage Difference Labels: Display the percentage difference between the current price and each VWAP, shown only for visible VWAPs. Enabled by default to show the AVWAP 1 label.
- Customizable Colors: Each VWAP has a user-defined color via input settings, with labels matching the VWAP line colors (e.g., AVWAP 1 defaults to fuchsia).
Flexible Display Options: Toggle individual EMAs, VWAPs, bands, and labels on or off to reduce chart clutter.
Settings
The indicator is organized into intuitive setting groups:
EMA Settings
Show EMA 1–8 : Toggle each EMA on or off (default: all enabled).
EMA 1–8 Length : Set the period for each EMA (default: 3, 9, 19, 38, 50, 65, 100, 200).
Show EMA % Difference Labels : Enable/disable percentage difference labels for all EMAs (default: enabled).
EMA Label Font Size (8–20) : Adjust the font size for EMA labels (default: 10, mapped to “tiny”).
Anchored VWAP 1–3 Settings
Show AVWAP 1–3 : Toggle each anchored VWAP on or off (default: AVWAP 1 enabled, others disabled).
AVWAP 1–3 Color : Set the color for each VWAP line and its label (default: fuchsia for AVWAP 1, purple for AVWAP 2, teal for AVWAP 3).
AVWAP 1–3 Anchor : Choose the anchor period (“Session,” “Week,” “Month”; default: Session for AVWAP 1, Week for AVWAP 2, Month for AVWAP 3).
AVWAP 1–3 Source : Select the price source (default: hlc3).
AVWAP 1–3 Offset : Set the horizontal offset for the VWAP line (default: 0).
Show AVWAP 1–3 Bands : Toggle upper/lower bands (default: disabled).
AVWAP 1–3 Band Multiplier : Adjust the standard deviation multiplier for bands (default: 1.0).
Rolling VWAP 1–3 Settings
Show RVWAP 1–3 : Toggle each rolling VWAP on or off (default: disabled).
RVWAP 1–3 Color : Set the color for each VWAP line and its label (default: navy for RVWAP 1, maroon for RVWAP 2, fuchsia for RVWAP 3).
RVWAP 1–3 Period Length : Set the period for the rolling VWAP (default: 20, 50, 100).
RVWAP 1–3 Source : Select the price source (default: hlc3).
RVWAP 1–3 Offset : Set the horizontal offset (default: 0).
Show RVWAP 1–3 Bands : Toggle upper/lower bands (default: disabled).
RVWAP 1–3 Band Multiplier : Adjust the standard deviation multiplier for bands (default: 1.0).
VWAP Label Settings
Show VWAP % Difference Labels : Enable/disable percentage difference labels for all VWAPs (default: enabled, showing AVWAP 1 label).
VWAP Label Font Size (8–20) : Adjust the font size for VWAP labels (default: 10, mapped to “tiny”).
How It Works
EMAs : Calculated using ta.ema(close, length) for each user-defined period. Percentage differences are computed as ((close - ema) / close) * 100 and displayed as labels for visible EMAs when show_ema_labels is enabled.
Anchored VWAPs : Calculated using ta.vwap(source, anchor, 1), where the anchor is determined by the selected timeframe (Session, Week, or Month). Bands are computed using the standard deviation from ta.vwap.
Rolling VWAPs : Calculated using ta.vwap(source, length), with bands based on ta.stdev(source, length).
Labels : Updated on each new bar (ta.barssince(ta.change(time) != 0) == 0) to show percentage differences. Labels are only displayed for visible EMAs/VWAPs to avoid clutter.
Color Matching: VWAP labels use the same color as their corresponding VWAP lines, set via input settings (e.g., avwap1_color for AVWAP 1).
Example Use Cases
- Trend Following: Use longer EMAs (e.g., 100, 200) to identify trends and shorter EMAs (e.g., 3, 9) for entry/exit signals.
- Mean Reversion: Monitor percentage difference labels to spot overbought/oversold conditions relative to EMAs or VWAPs.
- VWAP Trading: Use the default session-anchored AVWAP 1 for intraday trading, adding weekly/monthly VWAPs or rolling VWAPs for broader context.
- Intraday Analysis: Leverage the session-anchored AVWAP 1 (enabled by default) for day trading, with bands as support/resistance zones.
DYNAMIC TRADING DASHBOARDStudy Material for the "Dynamic Trading Dashboard"
This Dynamic Trading Dashboard is designed as an educational tool within the TradingView environment. It compiles commonly used market indicators and analytical methods into one visual interface so that traders and learners can see relationships between indicators and price action. Understanding these indicators, step by step, can help traders develop discipline, improve technical analysis skills, and build strategies. Below is a detailed explanation of each module.
________________________________________
1. Price and Daily Reference Points
The dashboard displays the current price, along with percentage change compared to the day’s opening price. It also highlights whether the price is moving upward or downward using directional symbols. Alongside, it tracks daily high, low, open, and daily range.
For traders, daily levels provide valuable reference points. The daily high and low are considered intraday support and resistance, while the median price of the day often acts as a pivot level for mean reversion traders. Monitoring these helps learners see how price oscillates within daily ranges.
________________________________________
2. VWAP (Volume Weighted Average Price)
VWAP is calculated as a cumulative average price weighted by volume. The dashboard compares the current price with VWAP, showing whether the market is trading above or below it.
For traders, VWAP is often a guide for institutional order flow. Price trading above VWAP suggests bullish sentiment, while trading below VWAP indicates bearish sentiment. Learners can use VWAP as a training tool to recognize trend-following vs. mean reversion setups.
________________________________________
3. Volume Analysis
The system distinguishes between buy volume (when the closing price is higher than the open) and sell volume (when the closing price is lower than the open). A progress bar highlights the ratio of buying vs. selling activity in percentage.
This is useful because volume confirms price action. For instance, if prices rise but sell volume dominates, it can signal weakness. New traders learning with this tool should focus on how volume often precedes price reversals and trends.
________________________________________
4. RSI (Relative Strength Index)
RSI is a momentum oscillator that measures price strength on a scale from 0 to 100. The dashboard classifies RSI readings into overbought (>70), oversold (<30), or neutral zones and adds visual progress bars.
RSI helps learners understand momentum shifts. During training, one should notice how trending markets can keep RSI extended for longer periods (not immediate reversal signals), while range-bound markets react more sharply to RSI extremes. It is an excellent tool for practicing trend vs. range identification.
________________________________________
5. MACD (Moving Average Convergence Divergence)
The MACD indicator involves a fast EMA, slow EMA, and signal line, with focus on crossovers. The dashboard shows whether a “bullish cross” (MACD above signal line) or “bearish cross” (MACD below signal line) has occurred.
MACD teaches traders to identify trend momentum shifts and divergence. During practice, traders can explore how MACD signals align with VWAP trends or RSI levels, which helps in building a structured multi-indicator analysis.
________________________________________
6. Stochastic Oscillator
This indicator compares the current close relative to a range of highs and lows over a period. Displayed values oscillate between 0 and 100, marking zones of overbought (>80) and oversold (<20).
Stochastics are useful for students of trading to recognize short-term momentum changes. Unlike RSI, it reacts faster to price volatility, so false signals are common. Part of the training exercise can be to observe how stochastic “flips” can align with volume surges or daily range endpoints.
________________________________________
7. Trend & Momentum Classification
The dashboard adds simple labels for trend (uptrend, downtrend, neutral) based on RSI thresholds. Additionally, it provides quick momentum classification (“bullish hold”, “bearish hold”, or neutral).
This is beneficial for beginners as it introduces structured thinking: differentiating long-term market bias (trend) from short-term directional momentum. By combining both, traders can practice filtering signals instead of trading randomly.
________________________________________
8. Accumulation / Distribution Bias
Based on RSI levels, the script generates simplified tags such as “Accumulate Long”, “Accumulate Short”, or “Wait”.
This is purely an interpretive guide, helping learners think in terms of accumulation phases (when markets are low) and distribution phases (when markets are high). It reinforces the concept that trading is not only directional but also involves timing.
________________________________________
9. Overall Market Status and Score
Finally, the dashboard compiles multiple indicators (VWAP position, RSI, MACD, Stochastics, and price vs. median levels) into a Market Score expressed as a percentage. It also labels the market as Overbought, Oversold, or Normal.
This scoring system isn’t a recommendation but a learning framework. Students can analyze how combining different indicators improves decision-making. The key training focus here is confluence: not depending on one indicator but observing when several conditions align.
Extended Study Material with Formulas
________________________________________
1. Daily Reference Levels (High, Low, Open, Median, Range)
• Day High (H): Maximum price of the session.
DayHigh=max(Hightoday)DayHigh=max(Hightoday)
• Day Low (L): Minimum price of the session.
DayLow=min(Lowtoday)DayLow=min(Lowtoday)
• Day Open (O): Opening price of the session.
DayOpen=OpentodayDayOpen=Opentoday
• Day Range:
Range=DayHigh−DayLowRange=DayHigh−DayLow
• Median: Mid-point between high and low.
Median=DayHigh+DayLow2Median=2DayHigh+DayLow
These act as intraday guideposts for seeing how far the price has stretched from its key reference levels.
________________________________________
2. VWAP (Volume Weighted Average Price)
VWAP considers both price and volume for a weighted average:
VWAPt=∑i=1t(Pricei×Volumei)∑i=1tVolumeiVWAPt=∑i=1tVolumei∑i=1t(Pricei×Volumei)
Here, Price_i can be the average price (High + Low + Close) ÷ 3, also known as hlc3.
• Interpretation: Price above VWAP = bullish bias; Price below = bearish bias.
________________________________________
3. Volume Buy/Sell Analysis
The dashboard splits total volume into buy volume and sell volume based on candle type.
• Buy Volume:
BuyVol=Volumeif Close > Open, else 0BuyVol=Volumeif Close > Open, else 0
• Sell Volume:
SellVol=Volumeif Close < Open, else 0SellVol=Volumeif Close < Open, else 0
• Buy Ratio (%):
VolumeRatio=BuyVolBuyVol+SellVol×100VolumeRatio=BuyVol+SellVolBuyVol×100
This helps traders gauge who is in control during a session—buyers or sellers.
________________________________________
4. RSI (Relative Strength Index)
RSI measures strength of momentum by comparing gains vs. losses.
Step 1: Compute average gains (AG) and losses (AL).
AG=Average of Upward Closes over N periodsAG=Average of Upward Closes over N periodsAL=Average of Downward Closes over N periodsAL=Average of Downward Closes over N periods
Step 2: Calculate relative strength (RS).
RS=AGALRS=ALAG
Step 3: RSI formula.
RSI=100−1001+RSRSI=100−1+RS100
• Used to detect overbought (>70), oversold (<30), or neutral momentum zones.
________________________________________
5. MACD (Moving Average Convergence Divergence)
• Fast EMA:
EMAfast=EMA(Close,length=fast)EMAfast=EMA(Close,length=fast)
• Slow EMA:
EMAslow=EMA(Close,length=slow)EMAslow=EMA(Close,length=slow)
• MACD Line:
MACD=EMAfast−EMAslowMACD=EMAfast−EMAslow
• Signal Line:
Signal=EMA(MACD,length=signal)Signal=EMA(MACD,length=signal)
• Histogram:
Histogram=MACD−SignalHistogram=MACD−Signal
Crossovers between MACD and Signal are used in studying bullish/bearish phases.
________________________________________
6. Stochastic Oscillator
Stochastic compares the current close against a range of highs and lows.
%K=Close−LowestLowHighestHigh−LowestLow×100%K=HighestHigh−LowestLowClose−LowestLow×100
Where LowestLow and HighestHigh are the lowest and highest values over N periods.
The %D line is a smooth version of %K (using a moving average).
%D=SMA(%K,smooth)%D=SMA(%K,smooth)
• Values above 80 = overbought; below 20 = oversold.
________________________________________
7. Trend and Momentum Classification
This dashboard generates simplified trend/momentum logic using RSI.
• Trend:
• RSI < 40 → Downtrend
• RSI > 60 → Uptrend
• In Between → Neutral
• Momentum Bias:
• RSI > 70 → Bullish Hold
• RSI < 30 → Bearish Hold
• Otherwise Neutral
This is not predictive, only a classification framework for educational use.
________________________________________
8. Accumulation/Distribution Bias
Based on extreme RSI values:
• RSI < 25 → Accumulate Long Bias
• RSI > 80 → Accumulate Short Bias
• Else → Wait/No Action
This helps learners understand the idea of accumulation at lows (strength building) and distribution at highs (profit booking).
________________________________________
9. Overall Market Status and Score
The tool adds up 5 bullish conditions:
1. Price above VWAP
2. RSI > 50
3. MACD > Signal
4. Stochastic > 50
5. Price above Daily Median
BullishScore=ConditionsMet5×100BullishScore=5ConditionsMet×100
Then it categorizes the market:
• RSI > 70 or Stoch > 80 → Overbought
• RSI < 30 or Stoch < 20 → Oversold
• Else → Normal
This encourages learners to think in terms of probabilistic conditions instead of single-indicator signals.
________________________________________
⚠️ Warning:
• Trading financial markets involves substantial risk.
• You can lose more money than you invest.
• Past performance of indicators does not guarantee future results.
• This script must not be copied, resold, or republished without authorization from aiTrendview.
By using this material or the code, you agree to take full responsibility for your trading decisions and acknowledge that this is not financial advice.
________________________________________
⚠️ Disclaimer and Warning (From aiTrendview)
This Dynamic Trading Dashboard is created strictly for educational and research purposes on the TradingView platform. It does not provide financial advice, buy/sell recommendations, or guaranteed returns. Any use of this tool in live trading is completely at the user’s own risk. Markets are inherently risky; losses can exceed initial investment.
The intellectual property of this script and its methodology belongs to aiTrendview. Unauthorized reproduction, modification, or redistribution of this code is strictly prohibited. By using this study material or the script, you acknowledge personal responsibility for any trading outcomes. Always consult professional financial advisors before making investment decisions.
FluidFlow OscillatorFluidFlow Oscillator: Study Material for Traders
Overview
The FluidFlow Oscillator is a custom technical indicator designed to measure price momentum and market flow dynamics by simulating fluid motion concepts such as velocity, viscosity, and turbulence. It helps traders identify potential buy and sell signals along with trend strength, momentum direction, and volatility conditions.
This study explains the underlying calculation concepts, signal logic, visual cues, and how to interpret the professional dashboard table that summarizes key indicator readings.
________________________________________
How the FluidFlow Oscillator Works
Core Mechanisms
1. Price Flow Velocity
o Measures the rate of change of price over a specified flow length (default 40 bars).
o Calculated as a percentage change of closing price: roc=close−closelen_flowcloselen_flow×100\text{roc} = \frac{\text{close} - \text{close}_{len\_flow}}{\text{close}_{len\_flow}} \times 100roc=closelen_flowclose−closelen_flow×100
o Smoothed by an EMA (Exponential Moving Average) to reduce noise, generating a "flow velocity" value.
2. Viscosity Factor
o Analogous to fluid viscosity, it adjusts the flow velocity based on recent price volatility.
o Volatility is computed as the standard deviation of close prices over the flow length.
o The viscosity acts as a damping factor to slow down the flow velocity in highly volatile conditions.
o This results in a "flow with viscosity" value, that smooths out the velocity considering market turbulence.
3. Turbulence Burst
o Captures sudden changes or bursts in the flow by measuring changes between successive viscosity-adjusted flows.
o The turbulence value is a smoothed absolute change in flow.
o A burst boost factor is added to the oscillator to incorporate this rapid change component, amplifying signals during sudden shifts.
4. Oscillator Calculation
o The raw oscillator value is the sum of flow with viscosity plus burst boost, scaled by 10.
o Clamped between -100 and +100 to limit extremes.
o Finally, smoothed again by EMA for cleaner visualization.
________________________________________
Signal Logic
The oscillator works with complementary components to produce actionable signals:
• Signal Line: An EMA-smoothed version of the oscillator for generating crossover-based signals.
• Momentum: The rate of change of the oscillator itself, smoothed by EMA.
• Trend: Uses fast (21-period EMA) and slow (50-period EMA) moving averages of price to identify market trend direction (uptrend, downtrend, or sideways).
Signal Conditions
• Bullish Signal (Buy): Oscillator crosses above the oversold threshold with positive momentum.
• Bearish Signal (Sell): Oscillator crosses below the overbought threshold with negative momentum.
Statuses
The oscillator provides descriptive market states based on level and momentum:
• Overbought
• Oversold
• Buy Signal
• Sell Signal
• Bullish / Bearish (momentum-driven)
• Neutral (no clear trend)
________________________________________
Color System and Visualization
The oscillator uses a sophisticated HSV color model adapting hues according to:
• Oscillator value magnitude and sign (positive or negative)
• Acceleration of oscillator changes
• Smooth color gradients to facilitate intuitive understanding of trend strength and momentum shifts
Background colors highlight overbought (red tint) and oversold (green tint) zones with transparency.
________________________________________
How to Understand the Professional Dashboard Table
The FluidFlow Oscillator offers an integrated table at the bottom center of the chart. This dashboard summarizes critical indicator readings in 8 columns across 3 rows:
Column Description
SIGNAL Current signal status (e.g., Buy, Sell, Overbought) with color coding
OSCILLATOR Current oscillator value (-100 to +100) with color reflecting intensity and direction
MOMENTUM Momentum bias indicating strength/direction of oscillator changes (Strong Up, Up, Sideways, Down, Strong Down)
TREND Current trend status based on EMAs (Strong Uptrend, Uptrend, Sideways, Downtrend, Strong Downtrend)
VOLATILITY Volatility percentage relative to average, indicating market activity level
FLOW Flow velocity value describing price momentum magnitude and direction
TURBULENCE Turbulence level indicating sudden bursts or spikes in price movement
PROGRESS Oscillator's position mapped as a percentage (0% to 100%) showing proximity to extreme levels
Rows Explained
• Row 1 (Header): Labels for each metric.
• Row 2 (Values): Current numerical or descriptive values color-coded along a professional scheme:
o Green or lime tones indicate positive or bullish conditions.
o Red or orange tones indicate caution, sell signals, or bearish conditions.
o Blue tones indicate neutral or stable conditions.
• Row 3 (Status Indicators): Emoji-like icons and bars provide a quick visual gauge of each metric's intensity or signal strength:
o For example, "🟢🟢🟢" suggests very strong bullish momentum, while "🔴🔴🔴" suggests strong bearish momentum.
o Progress bar visually demonstrates oscillator movement toward oversold or overbought extremes.
________________________________________
Practical Interpretation Tips
• A Buy signal with green colors and strong momentum usually precedes upward price moves.
• An Overbought status with red background and red table colors warns of potential price corrections or reversals.
• Watch the Turbulence to gauge market instability; spikes may precede price shocks or volatility bursts.
• Confirm signals with the Trend and Momentum columns to avoid false entries.
• Use the Progress bar to anticipate oscillations approaching key threshold levels for timing trades.
________________________________________
Alerts
The oscillator supports alerts for:
• Buy and sell signals based on oscillator crossovers.
• Overbought and oversold levels reached.
These help traders automate awareness of important market conditions.
________________________________________
Disclaimer
The FluidFlow Oscillator and its signals are for educational and informational purposes only. They do not guarantee profits and should not be considered as financial advice. Always conduct your own research and use proper risk management when trading. Past performance is not indicative of future results.
________________________________________
This detailed explanation should help you understand the workings of the FluidFlow Oscillator, its components, signal logic, and how to analyze its professional dashboard for informed trading decisions.
Egg vs Tennis Ball — Drop/Rebound StrengthEgg vs Tennis Ball — Drop/Rebound Meter
What it does
Classifies selloffs as either:
Eggs — dead‑cat, no bounce
Tennis Balls — fast, decisive rebound
Core features
Detects swing drops from a Pivot High (PH) to a Pivot Low (PL)
Requires drops to be meaningful (volatility‑aware, ATR‑scaled)
Draws a bounce threshold line and a deadline
Decides outcome based on speed and extent of rebound
Tracks scores and win rates across multiple lookback windows
Includes a color‑coded meter and current streak display
Visuals at a glance
Gray diagonal — drop from PH to PL
Teal dotted horizontal — bounce threshold, from PH to the deadline
Solid green — Tennis Ball (bounce line broken before the deadline)
Solid red — Egg (deadline expired before the bounce)
Optional PH / PL labels for clarity
How the decision is made
1) Find pivots — symmetric pivots using Pivot Left / Right; PL confirms after Right bars.
2) Qualify the drop — Drop Size = PH − PL; must be ≥ (Drop Threshold × ATR at PL).
3) Define the bounce line — PL + (Bounce Multiple × Drop Size). 1.00× = full retrace to PH; up to 2.00× for overshoot.
4) Set the deadline — Drop Bars = PL index − PH index; Deadline = Drop Bars × Recovery Factor; timer starts from PH or PL.
5) Resolve — Tennis Ball if price hits the bounce line before the deadline; Egg if the deadline passes first.
Scoring system (−100 to +100)
+100 = perfect Tennis Ball (fastest possible + full overshoot)
−100 = perfect Egg (no recovery)
In between: scored by rebound speed and extent, shaped by your weight settings
Meter Table
Columns (toggle on/off)
All (off by default)
Last N1 (default 5)
Last N2 (default 10)
Last N3 (default 20)
Rows
Tennis / Eggs — counts
% Tennis — win rate
Avg Score — normalized quality from −100 to +100
Streak — overall (not windowed), e.g., +3 = 3 Tennis Balls in a row, −4 = 4 Eggs in a row
Alerts
Tennis Ball – Fast Rebound — triggers when the bounce line is broken in time
Egg – Window Expired — triggers when the deadline passes without a bounce
Inputs
① Drop Detection
Pivot Left / Right
ATR Length
Drop Threshold × ATR
② Bounce Requirement
Bounce Multiple × Drop Size (0.10–2.00×)
③ Timing
Timer Start — PH or PL
Recovery Factor × Drop Bars
Break Trigger — Close or High
④ Display
Show Pivot/Outcome Labels
Line Width
Table Position (corner)
⑤ Meter Columns
Show All (off by default)
Show N1 / N2 / N3 (5, 10, 20 by default)
⑥ Scoring Weights
Tennis — Base, Speed, Extent
Egg — Base, Strength
How to use it
Pick strictness — start with Drop Threshold = 2.0 ATR, Bounce Multiple = 1.0×, Recovery Factor = 3.0×; adjust to timeframe and volatility.
Watch the dotted line — it ends at the deadline; turns solid green (Tennis) if broken in time, solid red (Egg) if it expires.
Read the meter — short windows (5–10) show current behavior; Avg Score captures quality; Streak shows momentum.
Blend with your system — combine with trend filters, volume, or regime detection.
Tips
Close vs High trigger: Close is stricter; High is more responsive.
PH vs PL timer start: PH measures round‑trip; PL measures recovery only.
Increase pivot strength for fewer, more reliable signals.
Higher timeframes generally produce cleaner patterns.
Defaults
Pivot L/R: 5 / 5
ATR Length: 14
Drop Threshold: 2.0× ATR
Bounce Multiple: 1.00×
Recovery Factor: 3.0×
Break Trigger: Close
Windows: Last 5, 10, 20 (All off)
Interpreting results
Tennis‑y: Avg Score +30 to +70, %Tennis > 55%
Mixed: Avg Score near 0
Egg‑y: Avg Score −30 to −80, %Tennis < 45%
Active PMI Support/Resistance Levels [EdgeTerminal]The PMI Support & Resistance indicator revolutionizes traditional technical analysis by using Pointwise Mutual Information (PMI) - a statistical measure from information theory - to objectively identify support and resistance levels. Unlike conventional methods that rely on visual pattern recognition, this indicator provides mathematically rigorous, quantifiable evidence of price levels where significant market activity occurs.
- The Mathematical Foundation: Pointwise Mutual Information
Pointwise Mutual Information measures how much more likely two events are to occur together compared to if they were statistically independent. In our context:
Event A: Volume spikes occurring (high trading activity)
Event B: Price being at specific levels
The PMI formula calculates: PMI = log(P(A,B) / (P(A) × P(B)))
Where:
P(A,B) = Probability of volume spikes occurring at specific price levels
P(A) = Probability of volume spikes occurring anywhere
P(B) = Probability of price being at specific levels
High PMI scores indicate that volume spikes and certain price levels co-occur much more frequently than random chance would predict, revealing genuine support and resistance zones.
- Why PMI Outperforms Traditional Methods
Subjective interpretation: What one trader sees as significant, another might ignore
Confirmation bias: Tendency to see patterns that confirm existing beliefs
Inconsistent criteria: No standardized definition of "significant" volume or price action
Static analysis: Doesn't adapt to changing market conditions
No strength measurement: Can't quantify how "strong" a level truly is
PMI Advantages:
✅ Objective & Quantifiable: Mathematical proof of significance, not visual guesswork
✅ Statistical Rigor: Levels backed by information theory and probability
✅ Strength Scoring: PMI scores rank levels by statistical significance
✅ Adaptive: Automatically adjusts to different market volatility regimes
✅ Eliminates Bias: Computer-calculated, removing human interpretation errors
✅ Market Structure Aware: Reveals the underlying order flow concentrations
- How It Works
Data Processing Pipeline:
Volume Analysis: Identifies volume spikes using configurable thresholds
Price Binning: Divides price range into discrete levels for analysis
Co-occurrence Calculation: Measures how often volume spikes happen at each price level
PMI Computation: Calculates statistical significance for each price level
Level Filtering: Shows only levels exceeding minimum PMI thresholds
Dynamic Updates: Refreshes levels periodically while maintaining historical traces
Visual System:
Current Levels: Bright, thick lines with PMI scores - your actionable levels
Historical Traces: Faded previous levels showing market structure evolution
Strength Tiers: Line styles indicate PMI strength (solid/dashed/dotted)
Color Coding: Green for support, red for resistance
Info Table: Real-time display of strongest levels with scores
- Indicator Settings:
Core Parameters
Lookback Period (Default: 200)
Lower (50-100): More responsive to recent price action, catches short-term levels
Higher (300-500): Focuses on major historical levels, more stable but less responsive
Best for: Day trading (100-150), Swing trading (200-300), Position trading (400-500)
Volume Spike Threshold (Default: 1.5)
Lower (1.2-1.4): More sensitive, catches smaller volume increases, more levels detected
Higher (2.0-3.0): Only major volume surges count, fewer but stronger signals
Market dependent: High-volume stocks may need higher thresholds (2.0+), low-volume stocks lower (1.2-1.3)
Price Bins (Default: 50)
Lower (20-30): Broader price zones, less precise but captures wider areas
Higher (70-100): More granular levels, precise but may be overly specific
Volatility dependent: High volatility assets benefit from more bins (70+)
Minimum PMI Score (Default: 0.5)
Lower (0.2-0.4): Shows more levels including weaker ones, comprehensive view
Higher (1.0-2.0): Only statistically strong levels, cleaner chart
Progressive filtering: Start with 0.5, increase if too cluttered
Max Levels to Show (Default: 8)
Fewer (3-5): Clean chart focusing on strongest levels only
More (10-15): Comprehensive view but may clutter chart
Strategy dependent: Scalpers prefer fewer (3-5), swing traders more (8-12)
Historical Tracking Settings
Update Frequency (Default: 20 bars)
Lower (5-10): More frequent updates, captures rapid market changes
Higher (50-100): Less frequent updates, focuses on major structural shifts
Timeframe scaling: 1-minute charts need lower frequency (5-10), daily charts higher (50+)
Show Historical Levels (Default: True)
Enables the "breadcrumb trail" effect showing evolution of support/resistance
Disable for cleaner charts focusing only on current levels
Max Historical Marks (Default: 50)
Lower (20-30): Less memory usage, shorter history
Higher (100-200): Longer historical context but more resource intensive
Fade Strength (Default: 0.8)
Lower (0.5-0.6): Historical levels more visible
Higher (0.9-0.95): Historical levels very subtle
Visual Settings
Support/Resistance Colors: Choose colors that contrast well with your chart theme Line Width: Thicker lines (3-4) for better visibility on busy charts Show PMI Scores: Toggle labels showing statistical strength Label Size: Adjust based on screen resolution and chart zoom level
- Most Effective Usage Strategies
For Day Trading:
Setup: Lookback 100-150, Volume Threshold 1.8-2.2, Update Frequency 10-15
Use PMI levels as bounce/rejection points for scalp entries
Higher PMI scores (>1.5) offer better probability setups
Watch for volume spike confirmations at levels
For Swing Trading:
Setup: Lookback 200-300, Volume Threshold 1.5-2.0, Update Frequency 20-30
Enter on pullbacks to high PMI support levels
Target next resistance level with PMI score >1.0
Hold through minor levels, exit at major PMI levels
For Position Trading:
Setup: Lookback 400-500, Volume Threshold 2.0+, Update Frequency 50+
Focus on PMI scores >2.0 for major structural levels
Use for portfolio entry/exit decisions
Combine with fundamental analysis for timing
- Trading Applications:
Entry Strategies:
PMI Bounce Trades
Price approaches high PMI support level (>1.0)
Wait for volume spike confirmation (orange triangles)
Enter long on bullish price action at the level
Stop loss just below the PMI level
Target: Next PMI resistance level
PMI Breakout Trades
Price consolidates near high PMI level
Volume increases (watch for orange triangles)
Enter on decisive break with volume
Previous resistance becomes new support
Target: Next major PMI level
PMI Rejection Trades
Price approaches PMI resistance with momentum
Watch for rejection signals and volume spikes
Enter short on failure to break through
Stop above the PMI level
Target: Next PMI support level
Risk Management:
Stop Loss Placement
Place stops 0.1-0.5% beyond PMI levels (adjust for volatility)
Higher PMI scores warrant tighter stops
Use ATR-based stops for volatile assets
Position Sizing
Larger positions at PMI levels >2.0 (highest conviction)
Smaller positions at PMI levels 0.5-1.0 (lower conviction)
Scale out at multiple PMI targets
- Key Warning Signs & What to Watch For
Red Flags:
🚨 Very Low PMI Scores (<0.3): Weak statistical significance, avoid trading
🚨 No Volume Confirmation: PMI level without recent volume spikes may be stale
🚨 Overcrowded Levels: Too many levels close together suggests poor parameter tuning
🚨 Outdated Levels: Historical traces are reference only, not tradeable
Optimization Tips:
✅ Regular Recalibration: Adjust parameters monthly based on market regime changes
✅ Volume Context: Always check for recent volume activity at PMI levels
✅ Multiple Timeframes: Confirm PMI levels across different timeframes
✅ Market Conditions: Higher thresholds during high volatility periods
Interpreting PMI Scores
PMI Score Ranges:
0.5-1.0: Moderate statistical significance, proceed with caution
1.0-1.5: Good significance, reliable for most trading strategies
1.5-2.0: Strong significance, high-confidence trade setups
2.0+: Very strong significance, institutional-grade levels
Historical Context: The historical trace system shows how support and resistance evolve over time. When current levels align with multiple historical traces, it indicates persistent market memory at those prices, significantly increasing the level's reliability.
CCI Orbiting-VenusIndicator Description: CCI Orbiting-Venus
This is a customized version of the Commodity Channel Index (CCI) that measures the price deviation relative to its smoothed moving average to help identify overbought or oversold market conditions.
What does it do?
Calculates the CCI based on various price sources (such as close, open, high, low, and several price averages).
Applies customizable smoothing to the CCI using different types of moving averages (SMA, EMA, WMA, Hull, JMA, and SMMA).
Visually highlights the CCI direction with different colors:
Purple when CCI is above zero (positive momentum)
Orange when CCI is below zero (negative momentum)
Shows reference lines at +100 and -100 to help identify overbought and oversold zones.
How to use this indicator?
CCI Period Setting (CCI Period):
Adjust the number of periods used to calculate the CCI. Lower values make the indicator more sensitive, while higher values smooth out fluctuations.
Price Source (CCI Price Source):
Choose which price to base the calculation on: close, open, high, low, or weighted averages. This allows you to adapt the indicator to your trading style or strategy.
Smoothing Type (CCI Smoothing Type):
Select from different smoothing methods for the CCI calculation, which affects how the indicator behaves:
SMA (Simple Moving Average) – basic and traditional.
EMA, WMA, Hull, JMA (more advanced averages) – provide different noise filtering or faster response to price movements.
Interpreting CCI values:
Values above +100 suggest the asset may be overbought and could be near a downward reversal.
Values below -100 suggest the asset may be oversold and could be near an upward reversal.
Crossing the zero line indicates a potential change in trend or momentum.
Practical usage:
Look for buy signals when CCI moves up from the oversold region (-100) and crosses above zero, turning purple (positive).
Look for sell signals when CCI moves down from the overbought region (+100) and crosses below zero, turning orange (negative).
Combine with other indicators or chart analysis to confirm signals and avoid false entries.
Advantages of this custom indicator
Flexibility in choosing the price source and smoothing method.
Intuitive visual cues with colors indicating momentum direction.
Clear reference lines for quick assessment of extreme conditions.
AMF_LibraryLibrary "AMF_Library"
Adaptive Momentum Flow (AMF) Library - A comprehensive momentum oscillator that adapts to market volatility
@author B3AR_Trades
f_ema(source, length)
Custom EMA calculation that accepts a series length
Parameters:
source (float) : (float) Source data for calculation
length (float) : (float) EMA length (can be series)
Returns: (float) EMA value
f_dema(source, length)
Custom DEMA calculation that accepts a series length
Parameters:
source (float) : (float) Source data for calculation
length (float) : (float) DEMA length (can be series)
Returns: (float) DEMA value
f_sum(source, length)
Custom sum function for rolling sum calculation
Parameters:
source (float) : (float) Source data for summation
length (int) : (int) Number of periods to sum
Returns: (float) Sum value
get_average(data, length, ma_type)
Get various moving average types for fixed lengths
Parameters:
data (float) : (float) Source data
length (simple int) : (int) MA length
ma_type (string) : (string) MA type: "SMA", "EMA", "WMA", "DEMA"
Returns: (float) Moving average value
calculate_adaptive_lookback(base_length, min_lookback, max_lookback, volatility_sensitivity)
Calculate adaptive lookback length based on volatility
Parameters:
base_length (int) : (int) Base lookback length
min_lookback (int) : (int) Minimum allowed lookback
max_lookback (int) : (int) Maximum allowed lookback
volatility_sensitivity (float) : (float) Sensitivity to volatility changes
Returns: (int) Adaptive lookback length
get_volatility_ratio()
Get current volatility ratio
Returns: (float) Current volatility ratio vs 50-period average
calculate_volume_analysis(vzo_length, smooth_length, smooth_type)
Calculate volume-based buying/selling pressure
Parameters:
vzo_length (int) : (int) Lookback length for volume analysis
smooth_length (simple int) : (int) Smoothing length
smooth_type (string) : (string) Smoothing MA type
Returns: (float) Volume analysis value (-100 to 100)
calculate_amf(base_length, smooth_length, smooth_type, signal_length, signal_type, min_lookback, max_lookback, volatility_sensitivity, medium_multiplier, slow_multiplier, vzo_length, vzo_smooth_length, vzo_smooth_type, price_vs_fast_weight, fast_vs_medium_weight, medium_vs_slow_weight, vzo_weight)
Calculate complete AMF oscillator
Parameters:
base_length (int) : (int) Base lookback length
smooth_length (simple int) : (int) Final smoothing length
smooth_type (string) : (string) Final smoothing MA type
signal_length (simple int) : (int) Signal line length
signal_type (string) : (string) Signal line MA type
min_lookback (int) : (int) Minimum adaptive lookback
max_lookback (int) : (int) Maximum adaptive lookback
volatility_sensitivity (float) : (float) Volatility adaptation sensitivity
medium_multiplier (float) : (float) Medium DEMA length multiplier
slow_multiplier (float) : (float) Slow DEMA length multiplier
vzo_length (int) : (int) Volume analysis lookback
vzo_smooth_length (simple int) : (int) Volume analysis smoothing
vzo_smooth_type (string) : (string) Volume analysis smoothing type
price_vs_fast_weight (float) : (float) Weight for price vs fast DEMA
fast_vs_medium_weight (float) : (float) Weight for fast vs medium DEMA
medium_vs_slow_weight (float) : (float) Weight for medium vs slow DEMA
vzo_weight (float) : (float) Weight for volume analysis component
Returns: (AMFResult) Complete AMF calculation results
calculate_amf_default()
Calculate AMF with default parameters
Returns: (AMFResult) AMF result with standard settings
amf_oscillator()
Get just the main AMF oscillator value with default parameters
Returns: (float) Main AMF oscillator value
amf_signal()
Get just the AMF signal line with default parameters
Returns: (float) AMF signal line value
is_overbought(overbought_level)
Check if AMF is in overbought condition
Parameters:
overbought_level (float) : (float) Overbought threshold (default 70)
Returns: (bool) True if overbought
is_oversold(oversold_level)
Check if AMF is in oversold condition
Parameters:
oversold_level (float) : (float) Oversold threshold (default -70)
Returns: (bool) True if oversold
bullish_crossover()
Detect bullish crossover (main line crosses above signal)
Returns: (bool) True on bullish crossover
bearish_crossover()
Detect bearish crossover (main line crosses below signal)
Returns: (bool) True on bearish crossover
AMFResult
AMF calculation results
Fields:
main_oscillator (series float) : The main AMF oscillator value (-100 to 100)
signal_line (series float) : The signal line for crossover signals
dema_fast (series float) : Fast adaptive DEMA value
dema_medium (series float) : Medium adaptive DEMA value
dema_slow (series float) : Slow adaptive DEMA value
volume_analysis (series float) : Volume-based buying/selling pressure (-100 to 100)
adaptive_lookback (series int) : Current adaptive lookback length
volatility_ratio (series float) : Current volatility ratio vs average






















