Stablecoin Supply Ratio [Alpha Extract]Stablecoin Supply Ratio Indicator
The Stablecoin Supply Ratio (SSR) indicator compares Bitcoin's market capitalization to the aggregate supply of major stablecoins, offering insights into relative purchasing power and liquidity. This tool helps traders:
✔ Assess Bitcoin's buying power relative to the available stablecoin liquidity.
✔ Detect periods of capital inflow or outflow from stablecoins.
✔ Identify market sentiment shifts based on stablecoin reserves.
🔶 CALCULATION
The indicator aggregates the supply of key stablecoins and compares it to Bitcoin's market cap:
Stablecoin Aggregation
• Inputs:
USDT, USDC, DAI, USDD (daily closing values).
BUSD Market Cap (Glassnode data).
• Total Stablecoin Supply:
Sum of the listed stablecoins' market caps.
Stablecoin Supply Ratio (SSR)
• Formula:
SSR = Bitcoin Market Cap / Total Stablecoin Supply
• Normalized SSR:
Normalized by dividing SSR by its 200-day SMA.
Bollinger Bands
• Bands are applied to the normalized SSR using a configurable moving average type and 2 standard deviations.
Example Calculation:
ssr = btcmc / stablecoin_liq
ratio = ssr / ta.sma(ssr, 200)
basis = ta.sma(ratio, 200)
dev = 2 * ta.stdev(ratio, 200)
upper = basis + dev
lower = basis - dev
🔶 DETAILS
Visual Features:
• Normalized SSR:
Plotted as a light green line.
• Upper Band:
Red line indicating SSR overbought zone.
• Lower Band:
Green line signaling SSR oversold zone.
Interpretation:
• High SSR: Indicates stablecoin reserves are low relative to Bitcoin's market cap, reducing stablecoin buying power.
• Low SSR: Suggests high stablecoin liquidity relative to Bitcoin's market cap, increasing potential buying pressure.
• Band Crosses: Movements beyond the upper or lower bands may signal sentiment extremes.
🔶 EXAMPLES
Market insights include:
• Capital Outflows: SSR rising into the upper band may reflect decreasing stablecoin reserves, potentially signaling a liquidity drain.
• Capital Inflows: SSR dropping near the lower band could indicate growing stablecoin reserves, potentially fueling Bitcoin demand.
🔶 SETTINGS
Customization Options:
• MA Type: Choose between SMA, EMA, WMA, SMMA, and VWMA for band calculation.
• Period: Adjust the 200-day smoothing period.
• Deviation Multiplier: Modify the standard deviation multiplier (default: 2).
The Stablecoin Supply Ratio indicator is a valuable tool for traders monitoring liquidity dynamics and stablecoin trends to anticipate Bitcoin market moves and capital flows.
Indicateurs et stratégies
Bearish Highs & Bullish Lows (Untouched Levels)As the indicator-name already states:
This indicator draws rays from every untouched high of a bear candle and every untouched low of a bull candle.
Levels which are touched are deleted, not on touch, but on the start of the new candle.
EU vs GU Strength @smEURUSD vs GBPUSD Strength Tester
✅ What it does:
-Plots EURUSD change (blue line)
-Plot GBPUSD change (green line)
-Plots EURGBP change (orange line)
Background turns bluish if EUR is stronger, greenish if GBP is stronger!
So, just by watching the background color, you can immediately tell:
If you prefer EURUSD or GBPUSD for your long/short setup.
Global M2 YoY % Increase signalThe script produces a signal each time the global M2 increases more than 2.5%. This usually coincides with bitcoin prices pumps, except when it is late in the business cycle or the bitcoin price / halving cycle.
It leverages dylanleclair Global M2 YoY % change, with several modifications:
adding a 10 week lead at the YoY Change plot for better visibility, so that the bitcoin pump moreless coincides with the YoY change.
signal increases > 2.5 in Global M2 at the point at which they occur with a green triangle up.
Liquidity Trap Reversal Pro (Radar v2)Liquidity Trap Reversal Pro (Radar v2) is a non-repainting indicator designed to detect hidden liquidity traps at key swing highs and lows. It combines wick analysis, volume spike detection, and optional trend and exhaustion filters to identify high-probability reversal setups.
🔷 Features:
Non-Repainting: Pivots confirmed after lookback period, no future leaking.
Volume Spike Detection: Filters traps that occur during major liquidity events.
EMA Trend Filter (Optional): Focus on traps aligned with the prevailing trend.
Higher Timeframe Trend Filter (Optional): Confirm traps using a higher timeframe EMA bias.
Exhaustion Guard (Optional): Prevents traps after overextended moves based on ATR stretch.
Clean Visuals: Distinct plots for raw trap points vs confirmed traps.
Alerts Included: Set alerts for confirmed high/low liquidity traps.
📚 How to Use:
Watch for Trap Signals:
A Trap High signal suggests a potential bearish reversal.
A Trap Low signal suggests a potential bullish reversal.
Use Confirmed Signals for Best Entries:
Confirmed traps fire only after price moves opposite to the trap direction, adding reliability.
Use Trend Filters to Improve Accuracy:
In an uptrend (price above EMA), prefer Trap Lows (buy setups).
In a downtrend (price below EMA), prefer Trap Highs (sell setups).
Use the Exhaustion Guard to Avoid Bad Trades:
This filter blocks signals when price has moved too far from trend, helping avoid late entries.
Recommended Settings:
Best used on 15-minute, 1-hour, or 4-hour charts.
Trend filter ON for trending markets.
Exhaustion guard ON for volatile or stretched markets.
📈 Important Notes:
This script does not repaint once a pivot is confirmed.
Alerts trigger only on confirmed trap signals.
Always combine signals with sound risk management and trading strategy.
Disclaimer:
This script is for educational purposes only. It is not investment advice or a guarantee of results. Always do your own research before trading.
Breadth-Driven Swing StrategyWhat it does
This script trades the S&P 500 purely on market breadth extremes:
• Data source : INDEX:S5TH = % of S&P 500 stocks above their own 200-day SMA (range 0–100).
• Buy when breadth is washed-out.
• Sell when breadth is overheated.
It is long-only by design; shorting and ATR trailing stops have been removed to keep the logic minimal and transparent.
⸻
Signals in plain English
1. Long entry
A. A 200-EMA trough in breadth is printed and the trough value is ≤ 40 %.
or
B. A 5-EMA trough appears, its prominence passes the user threshold, and the lowest breadth reading in the last 20 bars is ≤ 20 %.
(Toggle this secondary trigger on/off with “ Enter also on 5-EMA trough ”.)
2. Exit (close long)
First 200-EMA peak whose breadth value is ≥ 70 %.
3. Risk control
A fixed stop-loss (% of entry price, default 8 %) is attached to every long trade.
⸻
Key parameters (defaults shown)
• Long EMA length 200 • Short EMA length 5
• Peak prominence 0.5 pct-pts • Trough prominence 3 pct-pts
• Peak level 70 % • Trough level 40 % • 5-EMA trough level 20 %
• Fixed stop-loss 8 %
• “Enter also on 5-EMA trough” = true (allows additional entries on extreme momentum reversals)
Feel free to tighten or relax any of these thresholds to match your risk profile or account for different market regimes.
⸻
How to use it
1. Load the script on a daily SPX / SPY chart.
(The price chart drives order execution; the breadth series is pulled internally and does not need to be on the chart.)
2. Verify the breadth feed.
INDEX:S5TH is updated after each session; your broker must provide it.
3. Back-test across several cycles.
Two decades of daily data is recommended to see how the rules behave in bear markets, range markets, and bull trends.
4. Adjust position sizing in the Properties tab.
The default is “100 % of equity”; change it if you prefer smaller allocations or pyramiding caps.
⸻
Why it can help
• Breadth signals often lead price, allowing entries before index-level momentum turns.
• Simple, rule-based exits prevent “waiting for confirmation” paralysis.
• Only one input series—easy to audit, no black-box math.
Trade-offs
• Relies on a single breadth metric; other internals (advance/decline, equal-weight returns, etc.) are ignored.
• May sit in cash during shallow pullbacks that never push breadth ≤ 40 %.
• Signals arrive at the end of the session (breadth is EoD data).
⸻
Disclaimer
This script is provided for educational purposes only and is not financial advice. Markets are risky; test thoroughly and use your own judgment before trading real money.
ストラテジー概要
本スクリプトは S&P500 のマーケットブレッド(内部需給) だけを手がかりに、指数をスイングトレードします。
• ブレッドデータ : INDEX:S5TH
(S&P500 採用銘柄のうち、それぞれの 200 日移動平均線を上回っている銘柄比率。0–100 %)
• 買い : ブレッドが極端に売られたタイミング。
• 売り : ブレッドが過熱状態に達したタイミング。
余計な機能を削り、ロングオンリー & 固定ストップ のシンプル設計にしています。
⸻
シグナルの流れ
1. ロングエントリー
• 条件 A : 200-EMA がトラフを付け、その値が 40 % 以下
• 条件 B : 5-EMA がトラフを付け、
・プロミネンス条件を満たし
・直近 20 本のブレッドス最小値が 20 % 以下
• B 条件は「5-EMA トラフでもエントリー」を ON にすると有効
2. ロング決済
最初に出現した 200-EMA ピーク で、かつ値が 70 % 以上 のバーで手仕舞い。
3. リスク管理
各トレードに 固定ストップ(初期価格から 8 %)を設定。
⸻
主なパラメータ(デフォルト値)
• 長期 EMA 長さ : 200 • 短期 EMA 長さ : 5
• ピーク判定プロミネンス : 0.5 %pt • トラフ判定プロミネンス : 3 %pt
• ピーク水準 : 70 % • トラフ水準 : 40 % • 5-EMA トラフ水準 : 20 %
• 固定ストップ : 8 %
• 「5-EMA トラフでもエントリー」 : ON
相場環境やリスク許容度に合わせて閾値を調整してください。
⸻
使い方
1. 日足の SPX / SPY チャート にスクリプトを適用。
2. ブレッドデータの供給 (INDEX:S5TH) がブローカーで利用可能か確認。
3. 20 年以上の期間でバックテスト し、強気相場・弱気相場・レンジ局面での挙動を確認。
4. 資金配分 は プロパティ → 戦略実行 で調整可能(初期値は「資金の 100 %」)。
⸻
強み
• ブレッドは 価格より先行 することが多く、天底を早期に捉えやすい。
• ルールベースの出口で「もう少し待とう」と迷わずに済む。
• 入力 series は 1 本のみ、ブラックボックス要素なし。
注意点・弱み
• 単一指標に依存。他の内部需給(A/D ライン等)は考慮しない。
• 40 % を割らない浅い押し目では機会損失が起こる。
• ブレッドは終値ベースの更新。ザラ場中の変化は捉えられない。
⸻
免責事項
本スクリプトは 学習目的 で提供しています。投資助言ではありません。
実取引の前に必ず自己責任で十分な検証とリスク管理を行ってください。
BTST By ANTThe BTST Indicator is a powerful tool specifically designed for traders in the Indian stock market. This unique indicator identifies and highlights key price movements at a pivotal time—3:15 PM. This time is crucial for making BTST (Buy Today, Sell Tomorrow) decisions, a popular trading strategy in India.
Key Features:
Gap Identification : The indicator detects whether the current price action represents a gap-up or gap-down situation compared to the Heikinashi candle close price. This information is vital for short-term traders looking to capitalize on price momentum.
Visual Alerts : When a gap-up trend is detected, a green label "Gap Up" is displayed above the relevant bar. Similarly, a red label "Gap Down" appears below the bar for gap-down movements. These visual indicators help traders make quick and informed decisions.
User-Friendly Insights: The BTST Indicator provides vital information about last closed prices and the dynamics between normal candles and Heikinashi candles. With detailed logs, users can see the exact conditions leading to buy or sell signals, helping optimize trading strategies.
Why Use the BTST Indicator?
Timeliness: The focus on the 3:15 PM mark aligns perfectly with trading patterns and market behavior specific to the Indian stock market, making it an invaluable addition to your trading arsenal.
Enhanced Decision-Making: By receiving immediate visual cues on significant price movements, traders can execute their BTST strategies with greater confidence and speed.
Designed for Indian Markets: This indicator caters specifically to the nuances of Indian stock trading, ensuring relevance and effectiveness for local traders.
Start utilizing the BTST Indicator today to enhance your trading strategies and position yourself for successful trades in the Indian stock market!
Global M2 [BizFing]MARKETSCOM:BITCOIN ECONOMICS:USM2
This is an indicator designed to show the correlation between the global M2 money supply and Bitcoin.
This indicator basically provides a Global M2 index by summing the M2 money supply data from the United States, South Korea, China, Japan, the EU, and the United Kingdom.
Furthermore, it is configured to allow you to add or remove the M2 data of desired countries within the settings.
I hope this proves to be a small aid in predicting the future price of Bitcoin.
If you have any questions or require any improvements while using it, please feel free to contact me.
Thank you.
Pmax + T3Pmax + T3 is a versatile hybrid trend-momentum indicator that overlays two complementary systems on your price chart:
1. Pmax (EMA & ATR “Risk” Zones)
Calculates two exponential moving averages (Fast EMA & Slow EMA) and plots them to gauge trend direction.
Highlights “risk zones” behind price as a colored background:
Green when Fast EMA > Slow EMA (up-trend)
Red when Fast EMA < Slow EMA (down-trend)
Yellow when EMAs are close (“flat” zone), helping you avoid choppy markets.
You can toggle risk-zone highlighting on/off, plus choose to ignore signals in the yellow (neutral) zone.
2. T3 (Triple-Smoothed EMA Momentum)
Applies three sequential EMA smoothing (the classic “T3” algorithm) to your chosen source (usually close).
Fills the area between successive T3 curves with up/down colors for a clear visual of momentum shifts.
Optional neon-glow styling (outer, mid, inner glows) in customizable widths and transparencies for a striking “cyber” look.
You can highlight T3 movements only when the line is rising (green) or falling (red), or disable movement coloring.
Moving Average ToolkitMoving Average Toolkit - Advanced MA Analysis with Flexible Source Input
A powerful and versatile moving average indicator designed for maximum flexibility. Its unique source input feature allows you to analyze moving averages of ANY indicator or price data, making it perfect for creating custom combinations with RSI, Volume, OBV, or any other technical indicator.
Key Features:
• Universal Source Input:
- Analyze moving averages of any data: Price, Volume, RSI, MACD, Custom Indicators
- Perfect for creating advanced technical setups
- Identify trends in any technical data
• 13 Moving Average Types:
- Traditional: SMA, EMA, WMA, RMA, VWMA
- Advanced: HMA, T3, DEMA, TEMA, KAMA, ZLEMA, McGinley, EPMA
• Dual MA System:
- Compare two different moving averages
- Independent settings for each MA
- Perfect for multiple timeframe analysis
• Visual Offset Analysis:
- Dynamic color changes based on momentum
- Fill between current and offset values
- Clear visualization of trend strength
Usage Examples:
• Price Trend: Traditional MA analysis using price data
• Volume Trend: Apply MA to volume for volume trend analysis
• RSI Trend: Smooth RSI movements for clearer signals
• Custom: Apply to any indicator output for unique insights
Settings:
• Fully customizable colors for bull/bear conditions
• Adjustable offset periods
• Independent length settings
• Optional second MA for comparison
Perfect for:
• Advanced technical analysts
• Multi-indicator strategy developers
• Custom indicator creators
• Traders seeking flexible analysis tools
This versatile toolkit goes beyond traditional moving averages by allowing you to apply sophisticated MA analysis to any technical data, creating endless possibilities for custom technical analysis strategies.
CISD [TakingProphets]🧠 Indicator Purpose:
The "CISD - Change in State of Delivery" is a precision tool designed for traders utilizing ICT (Inner Circle Trader) conecpets. It detects critical shifts in delivery conditions after liquidity sweeps — helping you spot true smart money activity and optimal trade opportunities. This script is especially valuable for traders applying liquidity concepts, displacement recognition, and market structure shifts at both intraday and swing levels.
🌟 What Makes This Indicator Unique:
Unlike basic trend-following or scalping tools, CISD operates through a two-phase smart money logic:
Liquidity Sweep Detection (sweeping Buyside or Sellside Liquidity).
State of Delivery Change Identification (through bearish or bullish displacement after the sweep).
It intelligently tracks candle sequences and only signals a CISD event after true displacement — offering a much deeper context than ordinary indicators.
⚙️ How the Indicator Works:
Swing Point Detection: Identifies recent pivot highs/lows to map Buyside Liquidity (BSL) and Sellside Liquidity (SSL) zones.
Liquidity Sweeps: Watches for price breaches of these liquidity points to detect institutional stop hunts.
Sequence Recognition: Finds series of same-direction candles before sweeps to mark institutional accumulation/distribution.
Change of Delivery Confirmation: Confirms CISD only after significant displacement moves price against the initial candle sequence.
Visual Markings: Automatically plots CISD lines and optional labels, customizable in color, style, and size.
🎯 How to Use It:
Identify Liquidity Sweeps: Watch for CISD levels plotted after a liquidity sweep event.
Plan Entries: Look for retracements into CISD lines for high-probability entries.
Manage Risk: Use CISD levels to refine your stop-loss and profit-taking zones.
Best Application:
After stop hunts during Killzones (London Open, New York AM).
As part of the Flow State Model: identify higher timeframe PD Arrays ➔ wait for lower timeframe CISD confirmation.
🔎 Underlying Concepts:
Liquidity Pools: Highs and lows cluster stop orders, attracting institutional sweeps.
Displacement: Powerful price moves post-sweep confirm smart money involvement.
Market Structure: CISD frequently precedes major Change of Character (CHoCH) or Break of Structure (BOS) shifts.
🎨 Customization Options:
Adjustable line color, width, and style (solid, dashed, dotted).
Optional label display with customizable color and sizing.
Line extension settings to keep CISD zones visible for future reference.
✅ Recommended for:
Traders studying ICT Smart Money Concepts.
Intraday scalpers and higher timeframe swing traders.
Traders who want to improve entries around liquidity sweeps and institutional displacement moves.
🚀 Bonus Tip:
For maximum confluence, pair this with the HTF POI, ICT Liquidity Levels, and HTF Market Structure indicators available at TakingProphets.com! 🔥
BTC Price-Volume Efficiency Z-Score (PVER-Z)Overview:
This PVER-Z Score measures Bitcoin’s price movement efficiency relative to trading volume, normalized using a Z-Score over a long-term 200-day period.
It highlights statistically rare inefficiencies, helping investors spot extreme accumulation and distribution zones for systematic SDCA strategies.
Concept:
- Measures how efficiently price has moved relative to the volume that supported it over a long historical window (Default 200 days) but can be adjustable.
- It compares cumulative price changes vs cumulative volume flow.
- Then normalizes those inefficiencies using Z-Score statistics.
How It Works:
1. Calculates the absolute daily price change divided by volume (price-volume efficiency ratio).
2. Applies EMA smoothing to remove noisy fluctuations.
3. Normalizes the result into a Z-Score to detect statistically significant outliers.
4. Plots dynamic heatmap colors as the efficiency score moves through different deviation zones.
5. Background fills appear when the Z-Score moves beyond ±2 to ±3 SD, signaling rare macro opportunities.
Why is Bitcoin price rising while PVER-Z is falling toward green zone?
1. PVER-Z is not just "price" — it's price change relative to volume. PVER-Z measures how efficient the price movement is relative to volume. It's not "price going up" or "price going down" directly. It's how unusual or inefficient the price versus volume relationship is, compared to its historical average.
2. A rising Bitcoin price + weak efficiency = PVER-Z falls.
If Bitcoin rises but volume is super strong (normal buying volume), no problem, the PVER-Z stays normal. If Bitcoin rises but with very weak volume support, PVER-Z falls.
***Usage Notes***:
- Best used on the daily timeframe or higher.
- When the Z-Score enters the green zone (-2 to -3 SD), it signals a historically rare accumulation zone — favoring long-term buying for SDCA.
- When the Z-Score enters the red zone (+2 to +3 SD), it signals overextended distribution — caution recommended.
- Designed strictly for mean-reversion analysis, no trend-following signals.
- The red zone on a proper Z chart would be -2SD to -3SD and +2SD to +3SD for the green zone. At the time of publishing I do not know how to adjust the values on the indicator itself. The red zone at -2SD is actually +2 Standard Deviations on a Z Score SD Chart. (overbought zone).
- Your green zone at +2SD is actually -2SD Standard Deviations (oversold zone).
- Built manually with no reliance on built-in indicators
- Designed for Bitcoin on the 1D, 3D, or Weekly timeframes. NOT for intraday trading.
- DO NOT SOELY RELY ON THIS INDICATOR FOR YOUR LONG TERM VALUATION. I AM NOT RESPONSIBLE FOR YOUR FINANICAL ASSETS.
TUF_LOGICTUF_LOGIC: Three-Value Logic for Pine Script v6
The TUF_LOGIC library implements a robust three-valued logic system (trilean logic) for Pine Script v6, providing a formal framework for reasoning about uncertain or incomplete information in financial markets. By extending beyond binary True/False states to include an explicit "Uncertain" state, this library enables more nuanced algorithmic decision-making, particularly valuable in environments characterized by imperfect information.
Core Architecture
TUF_LOGIC offers two complementary interfaces for working with trilean values:
Enum-Based API (Recommended): Leverages Pine Script v6's enum capabilities with Trilean.True , Trilean.Uncertain , and Trilean.False for improved type safety and performance.
Integer-Based API (Legacy Support): Maintains compatibility with existing code using integer values 1 (True), 0 (Uncertain), and -1 (False).
Fundamental Operations
The library provides type conversion methods for seamless interaction between integer representation and enum types ( to_trilean() , to_int() ), along with validation functions to maintain trilean invariants.
Logical Operators
TUF_LOGIC extends traditional boolean operators to the trilean domain with NOT , AND , OR , XOR , and EQUALITY functions that properly handle the Uncertain state according to the principles of three-valued logic.
The library implements three different implication operators providing flexibility for different logical requirements: IMP_K (Kleene's approach), IMP_L (Łukasiewicz's approach), and IMP_RM3 (Relevant implication under RM3 logic).
Inspired by Tarski-Łukasiewicz's modal logic formulations, TUF_LOGIC includes modal operators: MA (Modal Assertion) evaluates whether a state is possibly true; LA (Logical Assertion) determines if a state is necessarily true; and IA (Indeterminacy Assertion) identifies explicitly uncertain states.
The UNANIMOUS operator evaluates trilean values for complete agreement, returning the consensus value if one exists or Uncertain otherwise. This function is available for both pairs of values and arrays of trilean values.
Practical Applications
TUF_LOGIC excels in financial market scenarios where decision-making must account for uncertainty. It enables technical indicator consensus by combining signals with different confidence levels, supports multi-timeframe analysis by reconciling potentially contradictory signals, enhances risk management by explicitly modeling uncertainty, and handles partial information systems where some data sources may be unreliable.
By providing a mathematically sound framework for reasoning about uncertainty, TUF_LOGIC elevates trading system design beyond simplistic binary logic, allowing for more sophisticated decision-making that better reflects real-world market complexity.
Library "TUF_LOGIC"
Three-Value Logic (TUF: True, Uncertain, False) implementation for Pine Script.
This library provides a comprehensive set of logical operations supporting trilean logic systems,
including Kleene, Łukasiewicz, and RM3 implications. Compatible with Pine v6 enums.
method validate(self)
Ensures a valid trilean integer value by clamping to the appropriate range .
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer value to validate.
Returns: An integer value guaranteed to be within the valid trilean range.
method to_trilean(self)
Converts an integer value to a Trilean enum value.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer to convert (typically -1, 0, or 1).
Returns: A Trilean enum value: True (1), Uncertain (0), or False (-1).
method to_int(self)
Converts a Trilean enum value to its corresponding integer representation.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The Trilean enum value to convert.
Returns: Integer value: 1 (True), 0 (Uncertain), or -1 (False).
method NOT(self)
Negates a trilean integer value (NOT operation).
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer value to negate.
Returns: Negated integer value: 1 -> -1, 0 -> 0, -1 -> 1.
method NOT(self)
Negates a Trilean enum value (NOT operation).
Namespace types: series Trilean
Parameters:
self (series Trilean) : The Trilean enum value to negate.
Returns: Negated Trilean: True -> False, Uncertain -> Uncertain, False -> True.
method AND(self, comparator)
Logical AND operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The first integer value.
comparator (int) : The second integer value to compare with.
Returns: Integer result of the AND operation (minimum value).
method AND(self, comparator)
Logical AND operation for Trilean enum values following three-valued logic.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The first Trilean enum value.
comparator (series Trilean) : The second Trilean enum value to compare with.
Returns: Trilean result of the AND operation.
method OR(self, comparator)
Logical OR operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The first integer value.
comparator (int) : The second integer value to compare with.
Returns: Integer result of the OR operation (maximum value).
method OR(self, comparator)
Logical OR operation for Trilean enum values following three-valued logic.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The first Trilean enum value.
comparator (series Trilean) : The second Trilean enum value to compare with.
Returns: Trilean result of the OR operation.
method EQUALITY(self, comparator)
Logical EQUALITY operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The first integer value.
comparator (int) : The second integer value to compare with.
Returns: Integer representation (1/-1) indicating if values are equal.
method EQUALITY(self, comparator)
Logical EQUALITY operation for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The first Trilean enum value.
comparator (series Trilean) : The second Trilean enum value to compare with.
Returns: Trilean.True if both values are equal, Trilean.False otherwise.
method XOR(self, comparator)
Logical XOR (Exclusive OR) operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The first integer value.
comparator (int) : The second integer value to compare with.
Returns: Integer result of the XOR operation.
method XOR(self, comparator)
Logical XOR (Exclusive OR) operation for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The first Trilean enum value.
comparator (series Trilean) : The second Trilean enum value to compare with.
Returns: Trilean result of the XOR operation.
method IMP_K(self, comparator)
Material implication using Kleene's logic for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The antecedent integer value.
comparator (int) : The consequent integer value.
Returns: Integer result of Kleene's implication operation.
method IMP_K(self, comparator)
Material implication using Kleene's logic for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The antecedent Trilean enum value.
comparator (series Trilean) : The consequent Trilean enum value.
Returns: Trilean result of Kleene's implication operation.
method IMP_L(self, comparator)
Logical implication using Łukasiewicz's logic for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The antecedent integer value.
comparator (int) : The consequent integer value.
Returns: Integer result of Łukasiewicz's implication operation.
method IMP_L(self, comparator)
Logical implication using Łukasiewicz's logic for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The antecedent Trilean enum value.
comparator (series Trilean) : The consequent Trilean enum value.
Returns: Trilean result of Łukasiewicz's implication operation.
method IMP_RM3(self, comparator)
Logical implication using RM3 logic for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The antecedent integer value.
comparator (int) : The consequent integer value.
Returns: Integer result of the RM3 implication operation.
method IMP_RM3(self, comparator)
Logical implication using RM3 logic for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The antecedent Trilean enum value.
comparator (series Trilean) : The consequent Trilean enum value.
Returns: Trilean result of the RM3 implication operation.
method MA(self)
Modal Assertion (MA) operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer value to evaluate.
Returns: 1 if the value is 1 or 0, -1 if the value is -1.
method MA(self)
Modal Assertion (MA) operation for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The Trilean enum value to evaluate.
Returns: Trilean.True if value is True or Uncertain, Trilean.False if value is False.
method LA(self)
Logical Assertion (LA) operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer value to evaluate.
Returns: 1 if the value is 1, -1 otherwise.
method LA(self)
Logical Assertion (LA) operation for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The Trilean enum value to evaluate.
Returns: Trilean.True if value is True, Trilean.False otherwise.
method IA(self)
Indeterminacy Assertion (IA) operation for trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The integer value to evaluate.
Returns: 1 if the value is 0, -1 otherwise.
method IA(self)
Indeterminacy Assertion (IA) operation for Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The Trilean enum value to evaluate.
Returns: Trilean.True if value is Uncertain, Trilean.False otherwise.
method UNANIMOUS(self, comparator)
Evaluates the unanimity between two trilean integer values.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The first integer value.
comparator (int) : The second integer value.
Returns: Integer value of self if both values are equal, 0 (Uncertain) otherwise.
method UNANIMOUS(self, comparator)
Evaluates the unanimity between two Trilean enum values.
Namespace types: series Trilean
Parameters:
self (series Trilean) : The first Trilean enum value.
comparator (series Trilean) : The second Trilean enum value.
Returns: Value of self if both values are equal, Trilean.Uncertain otherwise.
method UNANIMOUS(self)
Evaluates the unanimity among an array of trilean integer values.
Namespace types: array
Parameters:
self (array) : The array of integer values.
Returns: First value if all values are identical, 0 (Uncertain) otherwise.
method UNANIMOUS(self)
Evaluates the unanimity among an array of Trilean enum values.
Namespace types: array
Parameters:
self (array) : The array of Trilean enum values.
Returns: First value if all values are identical, Trilean.Uncertain otherwise.
Gabriel's Adaptive MA📜 Gabriel's Adaptive MA — Indicator Description
Gabriel's Adaptive Moving Average (GAMA) is a dynamic trend-following indicator that intelligently adjusts its smoothing based on both trend strength and market volatility.
It is designed to provide faster responsiveness during strong moves while maintaining stability during choppy or consolidating periods.
🧠 What it does:
This indicator plots a custom-built, highly dynamic Moving Average that adapts itself intelligently based on:
Trend Strength (via Perry Kaufman's Efficiency Ratio)
Market Volatility (via Tushar Chande's Volatility Ratio)
It reacts faster when the market is trending strongly and/or highly volatile,
and it smooths out and slows down when the market is choppy or calm.
🔍 How it works (step-by-step):
1. User Inputs:
length: (default 14)
How many bars to look back for calculations.
fastSC: Fastest possible smoothing constant (hardcoded as 2 / (2+1))
slowSC: Slowest possible smoothing constant (hardcoded as 2 / (30+1))
(These are used to control how fast/slow the KAMA can react.)
2. Calculate Trendiness — Kaufman Efficiency Ratio (ER):
Net Change = Absolute difference between current close and close from length bars ago.
Sum of Absolute Changes = Sum of absolute price changes between every bar inside the length window.
Efficiency Ratio (ER) = Net Change divided by Sum of Changes.
✅ If ER is close to 1 → Smooth, trending market.
✅ If ER is close to 0 → Choppy, sideways market.
3. Calculate Bumpiness — Volatility Ratio (VR):
Short-Term Volatility = Standard deviation of close over length.
Long-Term Volatility = Standard deviation of close over length * 2.
Volatility Ratio (VR) = Short-Term Volatility divided by Long-Term Volatility.
✅ If VR is >1 → Market is becoming more volatile recently.
✅ If VR is <1 → Market is calming down.
4. Create the Hybrid Alpha:
Multiply ER × VR.
Then square the result (math.pow(..., 2)).
This hybrid alpha decides how aggressive the MA should be based on both trend and volatility.
If ER and VR are both strong → big alpha → fast movement.
If ER and/or VR are weak → small alpha → slow movement.
5. Calculate the Final Adaptive Smoothing Constant (hybridSC):
hybridSC = slowSC + hybridAlpha × (fastSC - slowSC)
This smoothly interpolates between the slowest and fastest smoothing depending on market conditions.
6. Calculate and Plot the Adaptive MA:
The moving average is manually calculated:
hybridMA := na(hybridMA ) ? close : hybridMA + hybridSC * (close - hybridMA )
It behaves like an EMA but with dynamic smoothing, not a fixed alpha.
✅ If hybridSC is high → MA hugs the price closely.
✅ If hybridSC is low → MA stays smooth and resists noise.
Finally, it plots this Adaptive MA on the chart in blue color.
📊 Visual Summary
Market Type What Happens to GAMA
Trending hard + volatile Follows price quickly
Trending hard + calm Follows steadily but carefully
Sideways + volatile Reacts carefully (won't chase noise)
Sideways + calm Smooths heavily (avoids fakeouts)
✨ Main Strengths:
Adapts automatically without you tuning settings manually every time market changes.
Responds smartly to both trend quality (ER) and market energy (VR).
Reduces lag during real moves.
Filters out false signals during choppy mess.
🧪 Key Innovation compared to normal MAs:
Traditional MA Gabriel's Adaptive MA
Same smoothing every bar Dynamic smoothing every bar
Slow during fast moves Adapts fast during real moves
No understanding of volatility or trendiness Full market sensitivity
⚡ **Simple One-Line Description:**
"Gabriel's Adaptive MA is a dynamic, trend-and-volatility-sensitive moving average that intelligently adjusts its speed to match market conditions."
Market Breadth Peaks & Troughs IndicatorIndicator Overview
Market Breadth (S5TH) visualizes extremes of market strength and weakness by overlaying -
a 200-period EMA (long-term trend)
a 5-period EMA (short-term trend, user-adjustable)
on the percentage of S&P 500 constituents trading above their 200-day SMA (INDEX:S5TH).
Peaks (▼) and troughs (▲) are detected with prominence filters so you can quickly spot overbought and oversold conditions.
⸻
1. Core Logic
Component Description
Breadth series INDEX:S5TH — % of S&P 500 stocks above their 200-SMA
Long EMA 200-EMA to capture the primary trend
Short EMA 5-EMA (default, editable) for short-term swings
Peak detection ta.pivothigh + prominence ⇒ major peaks marked with red ▼
Trough detection (200 EMA) ta.pivotlow + prominence + value < longTroughLvl ⇒ blue ▲
Trough detection (5 EMA) ta.pivotlow + prominence + value < shortTroughLvl ⇒ green ▲
Background shading Pink when 200 EMA slope is down and 5 EMA sits below 200 EMA
⸻
2. Adjustable Parameters (input())
Group Variable Default Purpose
Symbol breadthSym INDEX:S5TH Breadth index
Long EMA longLen 200 Period of long EMA
Short EMA shortLen 5 Period of short EMA
Pivot width (long) pivotLen 20 Bars left/right for 200-EMA peaks/troughs
Pivot width (short) pivotLenS 10 Bars for 5-EMA troughs
Prominence (long) promThresh 0.5 %-pt Depth filter for 200-EMA pivots
Prominence (short) promThreshS 3.0 %-pt Depth filter for 5-EMA pivots
Trough level (long) longTroughLvl 50 % Max value to accept a 200-EMA trough
Trough level (short) shortTroughLvl 30 % Max value to accept a 5-EMA trough
⸻
3. Signal Guide
Marker / Color Meaning Typical reading
Red ▼ Major breadth peak Overbought / possible top
Blue ▲ Deep 200-EMA trough End of mid-term correction
Green ▲ Shallow 5-EMA trough (early) Short-term rebound setup
Pink background Long-term down-trend and short-term weak Risk-off phase
⸻
4. Typical Use Cases
1. Counter-trend timing
• Fade greed: trim longs on red ▼
• Buy fear: scale in on green ▲; add on blue ▲
2. Trend filter
• Avoid new longs while the background is pink; wait for a trough & recovery.
3. Risk management
• Reduce exposure when peaks appear, reload partial size on confirmed troughs.
⸻
5. Notes & Tips
• INDEX:S5TH is sourced from TradingView and may be back-adjusted when index membership changes.
• Fine-tune pivotLen, promThresh, and level thresholds to match current volatility before relying on alerts or automated rules.
• Slope thresholds (±0.10 %-pt) that trigger background shading can also be customized for different market regimes.
RSI + MACD + Liquidity FinderLiquidity Finder: The liquidity zones are heuristic and based on volume and swing points. You may need to tweak the volumeThreshold and lookback to match the asset's volatility and timeframe.
Timeframe: This script works on any timeframe, but signals may vary in reliability (e.g., higher timeframes like 4H or 1D may reduce noise).
Customization: You can modify signal conditions (e.g., require only RSI or MACD) or add filters like trend direction using moving averages.
Backtesting: Use TradingView's strategy tester to evaluate performance by converting the indicator to a strategy (replace plotshape with strategy.entry/strategy.close).
Accurate Global M2 (Top10 GDP, FX-Stabilized)This script was created to solve the serious distortions found in other circulating "Global M2" indicators.
Many previous versions used noisy daily FX rates, unweighted country data, mixed liquidity categories (e.g., RRP, TGA), or aggregated low-quality sources, causing exaggerated or misleading charts.
This version fixes those problems by:
Using Top 10 global economies only (based on GDP).
GDP-weighting each country's M2 contribution.
Fetching monthly-averaged M2 data.
Applying monthly FX conversions to eliminate daily volatility noise.
Forward-shifting the M2 line (default 90 days) to study potential Bitcoin correlations.
Keeping the math clean, without mixing central bank liquidity tools with broad M2 aggregates.
As a result, this script provides a more realistic and stable representation of global M2 expansion in USD terms, more suitable for serious macroeconomic analysis and Bitcoin market correlation studies.
Kalman Filtered RSI | [DeV]The Kalman Filtered RSI indicator is an advanced tool designed for traders who want precise, noise-free market insights. By enhancing the classic Relative Strength Index (RSI) with a Kalman filter, this indicator delivers a smoother, more reliable view of market momentum, helping you identify trends, reversals, and overbought/oversold conditions with greater accuracy. It’s an ideal choice for traders seeking clear signals amidst market volatility, giving you a competitive edge across any trading environment.
The RSI measures momentum by analyzing price movements over a set period, typically 14 bars. It calculates the average of price gains on up days and the average of price losses on down days, then compares these to produce a value between 0 and 100. An RSI above 70 often indicates an overbought market that may reverse downward, while below 30 suggests an oversold market that could reverse upward. RSI is great for spotting momentum shifts, potential reversals, and trend strength, but it can be noisy in choppy markets, leading to misleading signals.
That's where the Kalman filter comes in; it enhances the RSI by applying a sophisticated smoothing process that predicts the RSI’s next value based on its historical trend, then updates this prediction with the actual RSI reading. It operates in two phases: prediction and correction. In the prediction phase, it uses the previous filtered RSI and adds uncertainty from process noise (Q), which is derived from the historical variance of RSI changes, reflecting how much the RSI might unexpectedly shift. In the correction phase, it calculates a Kalman gain based on the ratio of prediction uncertainty to measurement noise (R), which is determined from the variance between raw RSI and a smoothed version, indicating the raw data’s noisiness. This gain weights how much the filter trusts the new RSI versus the prediction, blending them to produce a smoothed RSI that reduces noise while staying responsive to real trends, outperforming simpler methods like moving averages that often lag or oversmooth.
With the Kalman Filtered RSI, you get a refined view of momentum, making it easier to spot trends and reversals with clarity. This indicator’s ability to dynamically adapt to market changes delivers timely, reliable signals, making it a powerful addition to your trading strategy for any market or timeframe.
Anchored Bollinger Band Range [SS]This is the anchored Bollinger band indicator.
What it does?
The anchored BB indicator:
Takes a user defined range and calculates the Standard Deviation of the entire selected range for the high and low values.
Computes a moving average of the high and low during the selected period (which later becomes the breakout range average)
Anchors to the last high and last low of the period range to add up to 4 standard deviations to the upside and downside, giving you 4 high and low targets.
How can you use it?
The anchored BB indicator has many applicable uses, including
Identifying daily ranges based on premarket trading activity ( see below ):
Finding breakout ranges for intraday pattern setups ( see below ):
Identified pattern of interest:
Applying Anchored BB:
Identifying daily or pattern biases based on the position to the opening breakout range average (blue line). See the examples with explanations:
ex#1:
ex#2:
The Opening Breakout Average
As you saw in the examples above, the blue line represents the opening breakout range average.
This is the average high of the period of interest and the average low of the period of interest.
Price action above this line would be considered Bullish, and Bearish if below.
This also acts as a retracement zone in non-trending markets. For example:
Best Use Cases
Identify breakout ranges for patterns on larger timeframes. For example
This pattern on SPY, if we overlay the Anchored BB:
You want to see it actually breakout from this range and hold to confirm a breakout. Failure to exceed the BB range, means that it is just ranging with no real breakout momentum.
Identify conservative ranges for a specific period in time, for example QQQ:
Worst Use Cases
Using it as a hard and fast support and resistance indicator. This is not what it is for and ranges can be exceeded with momentum. The key is looking for whether ranges are exceeded (i.e. high momentum, thus breakout play) or they are not (thus low volume, rangy).
Using it for longer term outlooks. This is not ideal for long term ranges, as with any Bollinger/standard deviation based approach, it is only responsive to CURRENT PA and cannot forecast FUTURE PA.
User Inputs
The indicator is really straight forward. There are 2 optional inputs and 1 required input.
Period Selection: Required. Selects the period for the indicator to perform the analysis on. You just select it with your mouse on the chart.
Visible MA: Optional. You can choose to have the breakout range moving average visible or not.
Fills: Optional. You can choose to have the fills plotted or not.
And that is the indicator! Very easy to use and hope you enjoy and find it helpful!
As always, safe trades everyone! 🚀
Quad Rotation StochasticQuad Rotation Stochastic
The Quad Rotation Stochastic is a powerful and unique momentum oscillator that combines four different stochastic setups into one tool, providing an incredibly detailed view of market conditions. This multi-timeframe stochastic approach helps traders better anticipate trend continuations, reversals, and momentum shifts with greater precision than traditional single stochastic indicators.
Why this indicator is useful:
Multi-layered Momentum Analysis: Instead of relying on one stochastic, this script tracks four independent stochastic readings, smoothing out noise and confirming stronger signals.
Advanced Divergence Detection: It automatically identifies bullish and bearish divergences for each stochastic, helping traders spot potential reversals early.
Background Color Alerts: When a configurable number (e.g., 3 or 4) of the stochastics agree in direction and position (overbought/oversold), the background colors green (bullish) or red (bearish) to give instant visual cues.
ABCD Pattern Recognition: The script recognizes "shield" patterns when Stochastic 4 remains stuck at extreme levels (above 90 or below 10) for a set time, warning of potential trend continuation setups.
Super Signal Alerts: If all four stochastics align in extreme conditions and slope in the same direction, the indicator plots a special "Super Signal," offering high-confidence entry opportunities.
Why this indicator is unique:
Quad Confirmation Logic: Combining four different stochastics makes this tool much less prone to false signals compared to using a single stochastic.
Customizable Divergence Coloring: Traders can choose to have divergence lines automatically match the stochastic color for clear visual association.
Adaptive ABCD Shields: Innovative use of bar counting while a stochastic remains extreme acts as a "shield," offering a unique way to filter out minor fake-outs.
Flexible Configuration: Each stochastic's sensitivity, divergence settings, and visual styling can be fully customized, allowing traders to adapt it to their own strategy and asset.
Example Usage: Trading Bitcoin with Quad Rotation Stochastic
When trading Bitcoin (BTCUSD), you might set the minimum count (minCount) to 3, meaning three out of four stochastics must be in agreement to trigger a background color.
If the background turns green, and you notice an ABCD Bullish Shield (Green X), you might look for bullish candlestick patterns or moving average crossovers to enter a long trade.
Conversely, if the background turns red and a Super Down Signal appears, it suggests high probability for further downside, giving you strong confirmation to either short BTC or avoid entering new longs.
By combining divergence signals with background colors and the ABCD shields, the Quad Rotation Stochastic provides a layered confirmation system that gives traders greater confidence in their entries and exits — particularly in fast-moving, volatile markets like Bitcoin.
Sharpe Ratio Forced Selling StrategyThis study introduces the “Sharpe Ratio Forced Selling Strategy”, a quantitative trading model that dynamically manages positions based on the rolling Sharpe Ratio of an asset’s excess returns relative to the risk-free rate. The Sharpe Ratio, first introduced by Sharpe (1966), remains a cornerstone in risk-adjusted performance measurement, capturing the trade-off between return and volatility. In this strategy, entries are triggered when the Sharpe Ratio falls below a specified low threshold (indicating excessive pessimism), and exits occur either when the Sharpe Ratio surpasses a high threshold (indicating optimism or mean reversion) or when a maximum holding period is reached.
The underlying economic intuition stems from institutional behavior. Institutional investors, such as pension funds and mutual funds, are often subject to risk management mandates and performance benchmarking, requiring them to reduce exposure to assets that exhibit deteriorating risk-adjusted returns over rolling periods (Greenwood and Scharfstein, 2013). When risk-adjusted performance improves, institutions may rebalance or liquidate positions to meet regulatory requirements or internal mandates, a behavior that can be proxied effectively through a rising Sharpe Ratio.
By systematically monitoring the Sharpe Ratio, the strategy anticipates when “forced selling” pressure is likely to abate, allowing for opportunistic entries into assets priced below fundamental value. Exits are equally mechanized, either triggered by Sharpe Ratio improvements or by a strict time-based constraint, acknowledging that institutional rebalancing and window-dressing activities are often time-bound (Coval and Stafford, 2007).
The Sharpe Ratio is particularly suitable for this framework due to its ability to standardize excess returns per unit of risk, ensuring comparability across timeframes and asset classes (Sharpe, 1994). Furthermore, adjusting returns by a dynamically updating short-term risk-free rate (e.g., US 3-Month T-Bills from FRED) ensures that macroeconomic conditions, such as shifting interest rates, are accurately incorporated into the risk assessment.
While the Sharpe Ratio is an efficient and widely recognized measure, the strategy could be enhanced by incorporating alternative or complementary risk metrics:
• Sortino Ratio: Unlike the Sharpe Ratio, the Sortino Ratio penalizes only downside volatility (Sortino and van der Meer, 1991). This would refine entries and exits to distinguish between “good” and “bad” volatility.
• Maximum Drawdown Constraints: Integrating a moving window maximum drawdown filter could prevent entries during persistent downtrends not captured by volatility alone.
• Conditional Value at Risk (CVaR): A measure of expected shortfall beyond the Value at Risk, CVaR could further constrain entry conditions by accounting for tail risk in extreme environments (Rockafellar and Uryasev, 2000).
• Dynamic Thresholds: Instead of static Sharpe thresholds, one could implement dynamic bands based on the historical distribution of the Sharpe Ratio, adjusting for volatility clustering effects (Cont, 2001).
Each of these risk parameters could be incorporated into the current script as additional input controls, further tailoring the model to different market regimes or investor risk appetites.
References
• Cont, R. (2001) ‘Empirical properties of asset returns: stylized facts and statistical issues’, Quantitative Finance, 1(2), pp. 223-236.
• Coval, J.D. and Stafford, E. (2007) ‘Asset Fire Sales (and Purchases) in Equity Markets’, Journal of Financial Economics, 86(2), pp. 479-512.
• Greenwood, R. and Scharfstein, D. (2013) ‘The Growth of Finance’, Journal of Economic Perspectives, 27(2), pp. 3-28.
• Rockafellar, R.T. and Uryasev, S. (2000) ‘Optimization of Conditional Value-at-Risk’, Journal of Risk, 2(3), pp. 21-41.
• Sharpe, W.F. (1966) ‘Mutual Fund Performance’, Journal of Business, 39(1), pp. 119-138.
• Sharpe, W.F. (1994) ‘The Sharpe Ratio’, Journal of Portfolio Management, 21(1), pp. 49-58.
• Sortino, F.A. and van der Meer, R. (1991) ‘Downside Risk’, Journal of Portfolio Management, 17(4), pp. 27-31.
Cointegration Buy and Sell Signals [EdgeTerminal]The Cointegration Buy And Sell Signals is a sophisticated technical analysis tool to spot high-probability market turning points — before they fully develop on price charts.
Most reversal indicators rely on raw price action, visual patterns, or basic and common indicator logic — which often suffer in noisy or trending markets. In most cases, they lag behind the actual change in trend and provide useless and late signals.
This indicator is rooted in advanced concepts from statistical arbitrage, mean reversion theory, and quantitative finance, and it packages these ideas in a user-friendly visual format that works on any timeframe and asset class.
It does this by analyzing how the short-term and long-term EMAs behave relative to each other — and uses statistical filters like Z-score, correlation, volatility normalization, and stationarity tests to issue highly selective Buy and Sell signals.
This tool provides statistical confirmation of trend exhaustion, allowing you to trade mean-reverting setups. It fades overextended moves and uses signal stacking to reduce false entries. The entire indicator is based on a very interesting mathematically grounded model which I will get into down below.
Here’s how the indicator works at a high level:
EMAs as Anchors: It starts with two Exponential Moving Averages (EMAs) — one short-term and one long-term — to track market direction.
Statistical Spread (Regression Residuals): It performs a rolling linear regression between the short and long EMA. Instead of using the raw difference (short - long), it calculates the regression residual, which better models their natural relationship.
Normalize the Spread: The spread is divided by historical price volatility (ATR) to make it scale-invariant. This ensures the indicator works on low-priced stocks, high-priced indices, and crypto alike.
Z-Score: It computes a Z-score of the normalized spread to measure how “extreme” the current deviation is from its historical average.
Dynamic Thresholds: Unlike most tools that use fixed thresholds (like Z = ±2), this one calculates dynamic thresholds using historical percentiles (e.g., top 10% and bottom 10%) so that it adapts to the asset's current behavior to reduce false signals based on market’s extreme volatility at a certain time.
Z-Score Momentum: It tracks the direction of the Z-score — if Z is extreme but still moving away from zero, it's too early. It waits for reversion to start (Z momentum flips).
Correlation Check: Uses a rolling Pearson correlation to confirm the two EMAs are still statistically related. If they diverge (low correlation), no signal is shown.
Stationarity Filter (ADF-like): Uses the volatility of the regression residual to determine if the spread is stationary (mean-reverting) — a key concept in cointegration and statistical arbitrage. It’s not possible to build an exact ADF filter in Pine Script so we used the next best thing.
Signal Control: Prevents noisy charts and overtrading by ensuring no back-to-back buy or sell signals. Each signal must alternate and respect a cooldown period so you won’t be overwhelmed and won’t get a messy chart.
Important Notes to Remember:
The whole idea behind this indicator is to try to use some stat arb models to detect shifting patterns faster than they appear on common indicators, so in some cases, some assumptions are made based on historic values.
This means that in some cases, the indicator can “jump” into the conclusion too quickly. Although we try to eliminate this by using stationary filters, correlation checks, and Z-score momentum detection, there is still a chance some signals that are generated can be too early, in the stock market, that's the same as being incorrect. So make sure to use this with other indicators to confirm the movement.
How To Use The Indicator:
You can use the indicator as a standalone reversal system, as a filter for overbought and oversold setups, in combination with other trend indicators and as a part of a signal stack with other common indicators for divergence spotting and fade trades.
The indicator produces simple buy and sell signals when all criteria is met. Based on our own testing, we recommend treating these signals as standalone and independent from each other . Meaning that if you take position after a buy signal, don’t wait for a sell signal to appear to exit the trade and vice versa.
This is why we recommend using this indicator with other advanced or even simple indicators as an early confirmation tool.
The Display Table:
The floating diagnostic table in the top-right corner of the chart is a key part of this indicator. It's a live statistical dashboard that helps you understand why a signal is (or isn’t) being triggered, and whether the market conditions are lining up for a potential reversal.
1. Z-Score
What it shows: The current Z-score value of the volatility-normalized spread between the short EMA and the regression line of the long EMA.
Why it matters: Z-score tells you how statistically extreme the current relationship is. A Z-score of:
0 = perfectly average
> +2 = very overbought
< -2 = very oversold
How to use it: Look for Z-score reaching extreme highs or lows (beyond dynamic thresholds). Watch for it to start reversing direction, especially when paired with green table rows (see below)
2. Z-Score Momentum
What it shows: The rate of change (ROC) of the Z-score:
Zmomentum=Zt − Zt − 1
Why it matters: This tells you if the Z-score is still stretching out (e.g., getting more overbought/oversold), or reverting back toward the mean.
How to use it: A positive Z-momentum after a very low Z-score = potential bullish reversal A negative Z-momentum after a very high Z-score = potential bearish reversal. Avoid signals when momentum is still pushing deeper into extremes
3. Correlation
What it shows: The rolling Pearson correlation coefficient between the short EMA and long EMA.
Why it matters: High correlation (closer to +1) means the EMAs are still statistically connected — a key requirement for cointegration or mean reversion to be valid.
How to use it: Look for correlation > 0.7 for reliable signals. If correlation drops below 0.5, ignore the Z-score — the EMAs aren’t moving together anymore
4. Stationary
What it shows: A simplified "Yes" or "No" answer to the question:
“Is the spread statistically stable (stationary) and mean-reverting right now?”
Why it matters: Mean reversion strategies only work when the spread is stationary — that is, when the distance between EMAs behaves like a rubber band, not a drifting cloud.
How to use it: A "Yes" means the indicator sees a consistent, stable spread — good for trading. "No" means the market is too volatile, disjointed, or chaotic for reliable mean reversion. Wait for this to flip to "Yes" before trusting signals
5. Last Signal
What it shows: The last signal issued by the system — either "Buy", "Sell", or "None"
Why it matters: Helps avoid confusion and repeated entries. Signals only alternate — you won’t get another Buy until a Sell happens, and vice versa.
How to use it: If the last signal was a "Buy", and you’re watching for a Sell, don’t act on more bullish signals. Great for systems where you only want one position open at a time
6. Bars Since Signal
What it shows: How many bars (candles) have passed since the last Buy or Sell signal.
Why it matters: Gives you context for how long the current condition has persisted
How to use it: If it says 1 or 2, a signal just happened — avoid jumping in late. If it’s been 10+ bars, a new opportunity might be brewing soon. You can use this to time exits if you want to fade a recent signal manually
Indicator Settings:
Short EMA: Sets the short-term EMA period. The smaller the number, the more reactive and more signals you get.
Long EMA: Sets the slow EMA period. The larger this number is, the smoother baseline, and more reliable trend bases are generated.
Z-Score Lookback: The period or bars used for mean & std deviation of spread between short and long EMAs. Larger values result in smoother signals with fewer false positives.
Volatility Window: This value normalizes the spread by historical volatility. This allows you to prevent scale distortion, showing you a cleaner and better chart.
Correlation Lookback: How many periods or how far back to test correlation between slow and long EMAs. This filters out false positives when EMAs lose alignment.
Hurst Lookback: The multiplier to approximate stationarity. Lower leads to more sensitivity to regime change, higher produces a more stricter filtering.
Z Threshold Percentile: This value sets how extreme Z-score must be to trigger a signal. For example, 90 equals only top/bottom 10% of extremes, 80 = more frequent.
Min Bars Between Signals: This hard stop prevents back-to-back signals. The idea is to avoid over-trading or whipsaws in volatile markets even when Hurst lookback and volatility window values are not enough to filter signals.
Some More Recommendations:
We recommend trying different EMA pairs (10/50, 21/100, 5/20) for different asset behaviors. You can set percentile to 85 or 80 if you want more frequent but looser signals. You can also use the Z-score reversion monitor for powerful confirmation.