Open Interest RSI [BackQuant]Open Interest RSI
A multi-venue open interest oscillator that aggregates OI across major derivatives exchanges, converts it to coin or USD terms, and runs an RSI-style engine on that aggregated OI so you can track positioning pressure, crowding, and mean reversion in leverage flows, not just in price.
What this is
This tool is an RSI built on top of aggregated open interest instead of price. It pulls futures OI from several major exchanges, converts it into a unified unit (COIN or USD), sums it into a single synthetic OI candle, then applies RSI and smoothing to that combined series.
You can then render that Open Interest RSI in different visual modes:
Clean line or colored line for classic oscillator-style reads.
Column-style oscillator for impulse and compression views.
Flag mode that fills between OI RSI and its EMA for trend/mean reversion blends. See:
Heatmap mode that paints the panel based on OI RSI extremes, ideal for scanning. See:
On top of that it includes:
Aggregated OI source selection (Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit).
Choice of OI units (COIN or USD).
Reference lines and OB/OS zones.
Extreme highlighting for either trend or mean reversion.
A vertical OI RSI meter that acts as a quick strength gauge.
Aggregated open interest source
Under the hood, the indicator builds a synthetic open interest candle by:
Looping over a list of supported exchanges: Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit.
Looping over multiple contract suffixes (such as USDT.P, USD.P, USDC.P, USD.PM) to capture different contract types on each venue.
Requesting OI candles from each venue + contract combination for the same underlying symbol.
Converting each OI stream into a common unit: In COIN mode, everything is normalized into coin-denominated OI. In USD mode, coin OI is multiplied by price to approximate notional OI.
Summing up open, high, low and close of OI across venues into a single aggregated OI candle.
If no valid OI is available for the current symbol across all sources, the script throws a clear runtime error so you know you are on an unsupported market.
This gives you a single, exchange-agnostic open interest curve instead of being tied to one venue. That aggregated OI is then passed into the RSI logic.
How the OI RSI is calculated
The RSI side is straightforward, but it is applied to the aggregated OI close:
Compute a base RSI of aggregated OI using the Calculation Period .
Apply a simple moving average of length Smoothing Period (SMA) to reduce noise in the raw OI RSI.
Optionally apply an EMA on top of the smoothed OI RSI as a moving average signal line.
Key parameters:
Calculation Period – base RSI length for OI.
Smoothing Period (SMA) – extra smoothing on the RSI value.
EMA Period – EMA length on the smoothed OI RSI.
The result is:
oi_rsi – raw RSI of aggregated OI.
oi_rsi_s – SMA-smoothed OI RSI.
ma – EMA of the smoothed OI RSI.
Thresholds and extremes
You control three core thresholds:
Mid Point – central reference level, typically 50.
Extreme Upper Threshold – high-level OI RSI edge (for example 80).
Extreme Lower Threshold – low-level OI RSI edge (for example 20).
These thresholds are used for:
Reference lines or OB/OS zone fills.
Heatmap gradient bounds.
Background highlighting of extremes.
The Extreme Highlighting mode controls how extremes are interpreted:
None – do nothing special in extreme regions.
Mean-Rev – background turns red on high OI RSI and green on low OI RSI, framing extremes as contrarian zones.
Trend – background turns green on high OI RSI and red on low OI RSI, framing extremes as participation zones aligned with the prevailing move.
Reference lines and OB/OS zones
You can choose:
None – clean plotting without guides.
Basic Reference Lines – mid, upper and lower thresholds as simple gray horizontals.
OB/OS Levels – filled zones between:
Upper OB: from the upper threshold to 100, colored with the short/overbought color.
Lower OS: from 0 to the lower threshold, colored with the long/oversold color.
These guides help visually anchor the OI RSI within "normal" versus "extreme" regions.
Plotting modes
The Plotting Type input controls how OI RSI is drawn. All modes share the same underlying OI and RSI logic, but emphasise different aspects of the signal.
1) Line mode
This is the classic oscillator representation:
Plots the smoothed OI RSI as a simple line using RSI Line Color and RSI Line Width .
Optionally plots the EMA overlay on the same panel.
Works well when you want standard RSI-style signals on leverage flows: crosses of the midline, divergences versus price, and so on.
2) Colored Line mode
In this mode:
The OI RSI is plotted as a line, but its color is dynamic.
If the smoothed OI RSI is above the mid point, it uses the Long/OB Color .
If it is below the mid point, it uses the Short/OS Color .
This creates an instant visual regime switch between "bullish positioning pressure" and "bearish positioning pressure", while retaining the feel of a traditional RSI line.
3) Oscillator mode
Oscillator mode renders OI RSI as vertical columns around the mid level:
The smoothed OI RSI is plotted as columns using plot.style_columns .
The histogram base is fixed at 50, so bars extend above and below the mid line.
Bar color is dynamic, using long or short colors depending on which side of the mid point the value sits.
This representation makes impulse and compression in OI flows more obvious. It is especially useful when you want to focus on how quickly OI RSI is expanding or contracting around its neutral level. See:
4) Flag mode
Flag mode turns OI RSI and its EMA into a two-line band with a filled area between them:
The smoothed OI RSI and its EMA are both plotted.
A fill is drawn between them.
The fill color flips between the long color and the short color depending on whether OI RSI is above or below its EMA.
Black outlines are added to both lines to make the band clear against any background.
This creates a "flag" style region where:
Green fills show OI RSI leading its EMA, suggesting positive positioning momentum.
Red fills show OI RSI trailing below its EMA, suggesting negative positioning momentum.
Crossovers of the two lines can be read as shifts in OI momentum regime.
Flag mode is useful if you want a more structural view that combines both the level and slope behaviour of OI RSI. See:
5) Heatmap mode
Heatmap mode recasts OI RSI as a single-row gradient instead of a line:
A single row at level 1 is plotted using column style.
The color is pulled from a gradient between the lower and upper thresholds: Near the lower threshold it approaches the short/oversold color and near the upper threshold it approaches the long/overbought color.
The EMA overlay and reference lines are disabled in this mode to keep the panel clean.
This is a very compact way to track OI RSI state at a glance, especially when stacking it alongside other indicators. See:
OI RSI vertical meter
Beyond the main plot, the script can draw a small "thermometer" table showing the current OI RSI position from 0 to 100:
The meter is a two-column table with a configurable number of rows.
Row colors form an inverted gradient: red at the top (100) and green at the bottom (0).
The script clamps OI RSI between 0 and 100 and maps it to a row index.
An arrow marker "▶" is drawn next to the row corresponding to the current OI RSI value.
0 and 100 labels are printed at the ends of the scale for orientation.
You control:
Show OI RSI Meter – turn the meter on or off.
OI RSI Blocks – number of vertical blocks (granularity).
OI RSI Meter Position – panel anchor (top/bottom, left/center/right).
The meter is particularly helpful if you keep the main plot in a small panel but still want an intuitive strength gauge.
How to read it as a market pressure gauge
Because this is an RSI built on aggregated open interest, its extremes and regimes speak to positioning pressure rather than price alone:
High OI RSI (near or above the upper threshold) indicates that open interest has been increasing aggressively relative to its recent history. This often coincides with crowded leverage and a buildup of directional pressure.
Low OI RSI (near or below the lower threshold) indicates aggressive de-leveraging or closing of positions, often associated with flushes, forced unwinds or post-liquidation clean-ups.
Values around the mid point indicate more balanced positioning flows.
You can combine this with price action:
Price up with rising OI RSI suggests fresh leverage joining the move, a more persistent trend.
Price up with falling OI RSI suggests shorts covering or longs taking profit, more fragile upside.
Price down with rising OI RSI suggests aggressive new shorts or levered selling.
Price down with falling OI RSI suggests de-leveraging and potential exhaustion of the move.
Trading applications
Trend confirmation on leverage flows
Use OI RSI to confirm or question a price trend:
In an uptrend, rising OI RSI with values above the mid point indicates supportive leverage flows.
In an uptrend, repeated failures to lift OI RSI above mid point or persistent weakness suggest less committed participation.
In a downtrend, strong OI RSI on the downside points to aggressive shorting.
Mean reversion in positioning
Use thresholds and the Mean-Rev highlight mode:
When OI RSI spends extended time above the upper threshold, the crowd is extended on one side. That can set up squeeze risk in the opposite direction.
When OI RSI has been pinned low, it suggests heavy de-leveraging. Once price stabilises, a re-risking phase is often not far away.
Background colours in Mean-Rev mode help visually identify these periods.
Regime mapping with plotting modes
Different plotting modes give different perspectives:
Heatmap mode for dashboard-style use where you just need to know "hot", "neutral" or "cold" on OI flows at a glance.
Oscillator mode for short term impulses and compression reads around the mid line. See:
Flag mode for blending level and trend of OI RSI into a single banded visual. See:
Settings overview
RSI group
Plotting Type – None, Line, Colored Line, Oscillator, Flag, Heatmap.
Calculation Period – base RSI length for OI.
Smoothing Period (SMA) – smoothing on RSI.
Moving Average group
Show EMA – toggle EMA overlay (not used in heatmap).
EMA Period – length of EMA on OI RSI.
EMA Color – colour of EMA line.
Thresholds group
Mid Point – central reference.
Extreme Upper Threshold and Extreme Lower Threshold – OB/OS thresholds.
Select Reference Lines – none, basic lines or OB/OS zone fills.
Extreme Highlighting – None, Mean-Rev, Trend.
Extra Plotting and UI
RSI Line Color and RSI Line Width .
Long/OB Color and Short/OS Color .
Show OI RSI Meter , OI RSI Blocks , OI RSI Meter Position .
Open Interest Source
OI Units – COIN or USD.
Exchange toggles: Binance, Bybit, OKX, Bitget, Kraken, HTX, Deribit.
Notes
This is a positioning and pressure tool, not a complete system. It:
Models aggregated futures open interest across multiple centralized exchanges.
Transforms that OI into an RSI-style oscillator for better comparability across regimes.
Offers several visual modes to match different workflows, from detailed analysis to compact dashboards.
Use it to understand how leverage and positioning are evolving behind the price, to gauge when the crowd is stretched, and to decide whether to lean with or against that pressure. Attach it to your existing signals, not in place of them.
Also, please check out @NoveltyTrade for the OI Aggregation logic & pulling the data source!
Here is the original script:
Fundamental Analyse
CRAZY RAY RAY - Dashboard 1-5-15-1D + SMC + Clock + Candles PRO OANDA:XAUUSD This script is essentially your institutional "nuclear power plant" for scalping and swing trading: it combines the 1-5-15-1D dashboard, SMC, PRO candles, money flow times, institutional filters, Bull/Bear 12C, Liquidity HUD, Fibo Move, and Target Trend with SL + 3 TPs into a single indicator. 1. Dashboard 1–5–15–1D (Central HUD)
Calculates across 4 timeframes: 1m, 5m, 15m, and 1D:
Trend with EMAs 15/30/200.
RSI (strength >50 buy, <50 sell).
MACD (crossover in favor or against).
For each timeframe it shows:
TREND → BULLISH / BEARISH / NEUTRAL.
ACTION → BUY / SELL / WAIT.
If all 4 timeframes align:
MODE = BULLISH BUY
MODE = BEARISH SELL
Filters and displays on the HUD if buys or sells are blocked by SMC context (BLOCKED BUY / BLOCKED SELL).
Also draws 2 simple moving averages on the chart:
SMA 20 white (you can use it as a micro-trend).
SMA 200 red (macro trend and institutional reference).
2. Real-Time Clock + Trading Hours
Calculates the real time for:
New York / Miami
London
Tokyo
using current time and real time zone.
Also calculates GMT time to know which session is dominant.
Marks your trading hours:
LONDON 3:00–5:30 (London time) → goodLondon
NY OPEN 8:30–10:00 (NY time) → goodNYOpen
ASIA 20:00–23:00 (Tokyo) → goodAsiaScalp
Displays a message on the HUD:
LONDON 3:00–5:30 (1–2 TRADES)
NY OPEN 8:30–10:00 (1 TRADE)
ASIA 20–23 (SCALP)
NO TRADE ROLL / DEAD / LATE
ONLY A+ SETUPS (when not in strong trading hours).
3. Institutional Power (volume + ATR + session)
Filter that evaluates whether the moment is institutional or retail:
Checks:
If you are in a strong trading session (London / NY). If the volume is above the average × multiplier.
If the ATR is above the average × multiplier.
If it passes the filters → INST ON, otherwise → RETAIL ZONE.
Used internally to block buys/sells and for the HUD.
4. Micro-signal “NO RETRACEMENT” on 1m (BUY SR / SELL SR)
On the 1-minute timeframe, it detects a very aggressive entry:
Clean trend (15/30/200 EMAs aligned).
Price crosses the 200 EMA.
MACD turns in favor.
Marks on the candle:
BUY SR (buys without retracement below the EMA200).
SELL SR (sales without retracement above the EMA200).
This state is also reflected in the HUD as the “SR” row.
5. SMC Block: HH/HL/LH/LL + BMS + ChoCH + Fibo + Zones
This is the SMC brain of the script:
Detects swings with pivots:
Paints HH, HL, LH, LL (if you activate showHHLL).
Marks BOS (break of structure).
Marks BMS and ChoCH (with strong or weak filter using ATR, volume, MACD, gaps).
Draws:
Internal Fibo of the last range (38–50–61).
Fibo entry zone 38–78% as a green discount/premium box.
Institutional mitigation zones (simple OB type green/red boxes).
Current range with dotted yellow lines.
Calculates logic for:
antiStupidBuy: blocks purchases when the context is very bearish (LL–LL–LH, bearish ChoCH, premium, EQH, etc.).
antiStupidSell: symmetrical for sales.
From this comes:
allowBuyInst
allowSellInst
buyBlockerOn / sellBlockerOn
buyTrapDetected (BUY SR signal but context blocks it → BUY TRAP).
All this feeds the HUD and institutional alerts.
6. PRO Candles (candlestick + smart color)
Candlestick pattern system:
Detects:
Hammer, Inverted Hammer. Doji.
Strong bullish/bearish candle.
Bullish/bearish engulfing.
Uses a trend EMA to determine if the pattern is with or against the trend.
Colors the candles according to the pattern (if you enable useColorCandles).
Defines texts:
patternText (pattern name).
biasText (reversal, momentum, indecision).
Updates the HUD with the current pattern (“CANDLE: Engulf Bull”, etc.).
7. Institutional PRO Combo + Reversals
Connects everything:
fullBuySetup:
allowBuyInst TRUE (SMC + Fibo + mitigation OK).
Institutional candles in favor (engulfing, hammer, etc.).
MultiTF aligned (1m, 5m in favor, 15/1D not strongly against).
Strong session (London or NY).
No blockages.
fullSellSetup: the same for sales.
Marks on the chart:
BUY PRO, SELL PRO.
BUY REV LL → reversal from a LL, at Fibo discount, with an institutional candle and above EMA200.
SELL REV HH → reversal from HH, at Fibo premium, with an institutional candle and below EMA200.
And generates alerts for all of this.
8. Dynamic Main HUD
On barstate.islast, updates the HUD:
Changes “BUY / SELL” to:
BUY BLOCK / SELL BLOCK when the context blocks that direction.
Writes:
Current candle pattern.
Time message.
Global status:
BUY TRAP ❌, BUY REV LL ✅, SELL REV HH ✅, BUY PRO ✅, SELL PRO ✅,
BUY BLOCK, SELL BLOCK, BUY/SELL OK.
9. Bull/Bear 12C HUD (Small right HUD)
12-confirmation bull/bear engine:
Calculates:
Sweep, 5th leg, mitigation, HL/LH, strong BOS.
Volume pattern (high-low-high).
ATR rising.
MACD crossover.
Liquidity.
Fear & Greed (SMA50).
Gap/imbalance. Bull/Bear 180 weak.
Count how many are ON:
bullScore /12
bearScore /12
Define a regime:
INSTITUTIONAL → many confirmations + rvol + ATR.
NORMAL
RETAIL
Show on right HUD:
List 1 to 12 with green/red dots BULL / BEAR.
Summary: “Regime: INSTITUTIONAL / NORMAL / RETAIL”.
10. Liquidity HUD XAU SCALP
Calculates RVOL, normalized ATR, spread vs ATR, current range vs average range.
Generates score and classifies:
LOW / MED / HIGH / INS.
Only moves up one level if you are in London/NY session (depending on sessions)
Fabio-Style Order Flow SystemFabio-Style Order Flow System — LVN • Delta • Big Trades • FVG • Order Blocks • Liquidity • Volume Profile
This indicator brings together all major components of Fabio Valentino’s order-flow strategy in one unified tool. It visualizes where smart money is active, where inefficiencies form, and where price is likely to react next.
🔍 FEATURES
1. Order Flow & Delta
Smoothed delta to show true market imbalance
Background color shifts to bullish/bearish delta dominance
Alerts for delta spikes & order-flow flips
2. Big Trade Detection
Highlights Big Buy and Big Sell prints (relative to average volume)
Helps identify institutional aggression on both sides
3. Low Volume Nodes (LVNs)
Automatically detects low-volume zones
Flags retests of LVNs for high-probability reactions
Uses dynamic volume thresholds for accuracy
4. Volume Profile (Lightweight)
Bucket-based intrabar profile across user-defined lookback
Highlights volume distribution without heavy TradingView CPU load
Auto-scales bucket density & transparency
5. Fair Value Gaps (FVGs)
Detects both bullish & bearish three-bar imbalances
Marks gaps visually using colored boxes
Updates dynamically with a user-set lookback
6. Order Blocks (OBs)
Identifies valid displacement bars and their origin OB
Plots clean, minimalist rectangles around key OB zones
Uses ATR-based impulse filtering
7. Liquidity Grabs
Detects wick-based liquidity sweeps
Highlights both equal high/low and stop-run type wicks
Useful for spotting reversals & trap setups
8. Strategy Dashboard
Shows real-time order flow state
Displays delta strength, big trades, LVNs, and last directional impulse
Auto-positions in all corners
🎯 PERFECT FOR
Traders who use:
Order Flow
Smart Money Concepts (SMC)
ICT / FVG / Liquidity models
Market Structure + Volume
Fabio Valentino-style analysis
⚙️ PERFORMANCE
All elements optimized
Uses automatic box-clearing to avoid array overload
Works on all timeframes & markets (crypto, FX, indices, stocks)
Aether Market MapAether Market Map A multi-component structure-based tool that aids chart analysis by visually displaying various market structure elements.
It combines order blocks, fair value gaps, liquidity segments, trend-shifting signals, and more to help users interpret the pricing structure more clearly.
This script does not provide specific trading strategies or investment advice and is a reference tool for chart analysis.
🔍 Key Features
1. Order Blocks (OB)
Displays the potential inflection sections in box form according to the specified conditions.
This feature helps to visually grasp the price segments that market participants have repeatedly responded to.
2. Fair Value Gaps (FVG)
It detects the area where the imbalance between the candles has occurred and displays it in a box form.
The area represents the section where there has been a fast movement or abnormal flow of prices.
3. Liquidity Levels
Shapes the points where liquidity was gathered through a short-term high-point and low-point pivot structure.
You can see the structural levels at which prices can react repeatedly.
4. BOS / CHOCH (Structural Change Detection)
Label changes in market structure based on recent high/low breakthroughs.
This is not just trend tracking, it helps us to visually grasp the changes in the structure itself.
📈 Analysis of multi-time frame trends
We compute the comprehensive trend state by leveraging the moving average slope of the swing and macro higher order time frames.
These values are reflected in chart background and EMA color changes to intuitively display the overall market mood.
Positive Environment (Regime > 0) → Green Family
Negative Environment (Regime < 0) → Red Series
This is a simple visualization of the flow of the market to the user, not a specific trading direction.
🔧 Signal Engine (Confluence-Based Visual Tool)
The script does not provide a transaction signal and does not induce a particular trading decision.
The Signal feature is a visual notification element that appears on the chart when a number of conditions overlap.
a change in the ratio of trading volume
Structural activities in recent analysis sections
Trending Environment
short-term momentum change
This feature is a reference visual element for interpreting market data from multiple perspectives.
🎛 Setting Items
Show Order Blocks — Visualize Order Blocks
Show Fair Value Gaps — Show FVG Detection
Show Liquidity Levels — Show pivot-based liquidity areas
Show BOS/CHoCH — Show Structural Switching Points
Show Trade Signals — Display visual signal notifications
HTF Settings — Enter parent timeframe analysis values
💡 Precautions for Use
This script is a market structure visualization tool and does not guarantee specific trading strategies, forecasts, or returns.
Components are calculated based on historical data and may not fully reflect real-time market changes.
All features are intended for research and chart analysis assistance purposes.
📌 Official Disclaimer
This script does not provide investment, finance, or trading advice.
All trading judgments made by the user and their consequences are the user's own responsibility.
This tool only provides a reference visualization function to assist with analysis.
BuLLzEyE_MNQ FVG/IFVG SystemFVG Boxes
These are the main trading zones. The indicator automatically detects Fair Value Gaps and draws boxes on your chart:
• GREEN boxes = Bullish FVG (potential buy zone)
• RED boxes = Bearish FVG (potential sell zone)
• YELLOW boxes = IFVG (Inverse FVG - filled gaps that now act as support/resistance)
• GRAY boxes = Mitigated FVG (gap has been filled)
• WHITE dashed line = 50% level (optimal entry point within the FVG)
Session Boxes
Session boxes show you the high/low range of each major trading session. This helps identify where liquidity sits:
• PURPLE = Asia Session (6:00 PM - 3:00 AM ET)
• BLUE = London Session (3:00 AM - 12:00 PM ET)
• ORANGE = New York Session (9:30 AM - 4:00 PM ET)
• TEAL = Sydney Session (5:00 PM - 2:00 AM ET)
• LIME GREEN = Kill Zone / London-NY Overlap (8:00 AM - 11:00 AM ET) - BEST TRADING TIME
Entry Signals
• GREEN triangle pointing UP = Long entry signal at a Bullish FVG (not 100% reliable)
• RED triangle pointing DOWN = Short entry signal at a Bearish FVG (not 100% reliable)
Liquidity Sweeps
• RED X with 'SWEEP' = Previous Day High (PDH) was swept
• GREEN X with 'SWEEP' = Previous Day Low (PDL) was swept
• Dotted lines = PDH (red) and PDL (green) levels
Information Tables
HTF Bias Table (Top Right): Shows whether the higher timeframe (default 15m) is bullish or bearish, the number of active FVGs, and whether you're in the trading session.
Risk Calculator Table (Bottom Right): Shows your risk amount and calculates how many contracts you can trade for different stop loss sizes (5pt, 10pt, 15pt).
How It Works
What is a Fair Value Gap?
A Fair Value Gap (FVG) is a 3-candle pattern where aggressive buying or selling creates a price void. Specifically, it's when the wick of the first candle doesn't overlap with the wick of the third candle, leaving a gap in between. Price tends to return to these gaps to 'rebalance' before continuing in the original direction.
What is an Inverse FVG?
When an FVG gets filled (price returns and closes through the gap), it becomes an Inverse FVG (IFVG). These zones flip their polarity - a filled Bullish FVG becomes resistance, and a filled Bearish FVG becomes support. The indicator automatically converts mitigated FVGs to yellow IFVG boxes.
The 50% Entry Level
The dashed white line in each FVG represents the 50% level (also called Consequent Encroachment). This is considered the optimal entry point - it's the middle of the imbalance where price is most likely to react.
Suggested Trading Strategy
1. Check HTF Bias (top right table) - only trade in that direction
2. Wait for a liquidity sweep (SWEEP label appears)
3. Look for an FVG to form AFTER the sweep
4. Enter when price returns to the 50% level (dashed line)
5. Place stop loss below/above the FVG (add 2 ticks buffer)
6. Take profit at 1:2 or 1:3 risk-to-reward ratio
Settings Explained
FVG Settings
• Min FVG Size: Minimum gap size in points to be considered valid (default: 2.0)
• Max FVG Age: How many bars until an FVG is removed from chart (default: 50)
• Show 50% Entry Level: Toggle the dashed entry line on/off
Session Settings
• Show Session Boxes: Toggle all session boxes on/off
• Max Sessions to Show: How many historical sessions to display (default: 5)
• Individual Session Toggles: Turn each session (Asia/London/NY/Sydney/Kill Zone) on or off
Risk Calculator Settings
• Account Size: Your trading account balance
• Risk Per Trade: Percentage of account to risk per trade (default: 0.5%)
• Tick Value/Size: Contract specifications for MNQ ($0.50 per tick, 0.25 point tick size)
Tips for Best Results
1. Trade during the Kill Zone (8:00-11:00 AM ET) for best volatility and liquidity
2. Always align trades with HTF bias - don't fight the trend
3. Wait for liquidity sweeps before entering - this confirms smart money activity
4. Use the 50% level for entries - it offers the best risk-to-reward
5. Watch for IFVG zones as additional confluence for entries
6. Use the risk calculator to size positions properly - never risk more than you can afford
7. Session boxes help identify where stops are clustered - sweeps of these levels often precede reversals
Available Alerts
• New FVG Formed (Bullish or Bearish)
• Price Touching 50% Entry Level
• FVG Mitigated (gap filled)
• Long Entry Signal
• Short Entry Signal
• PDH/PDL Liquidity Sweep
─────────────────────────────────────
Created by BullyTrading
Designed for MNQ Prop Firm Trading
Annual Lump Sum: Yearly & CompoundedAnnual Lump Sum Investment Analyzer (Yearly vs. Compounded)
Overview
This Pine Script indicator simulates a disciplined "Lump Sum" investing strategy. It calculates the performance of buying a fixed dollar amount (e.g., $10,000) on the very first trading day of every year and holding it indefinitely.
Unlike standard backtesters that only show a total percentage, this tool breaks down performance by "Vintage" (the year of purchase), allowing you to see which specific years contributed most to your wealth.
Key Features
Automated Execution: Automatically detects the first trading bar of every new year to simulate a buy.
Dual-Yield Analysis: The table provides two distinct ways to view returns:
Yearly %: How the market performed specifically during that calendar year (Jan 1 to Dec 31).
Compounded %: The total return of that specific year's investment from the moment it was bought until today.
Live Updates: For the current year, the "End Price" and "Yields" update in real-time with market movements.
Portfolio Summary: Displays your Total Invested Capital vs. Total Current Value at the top of the table.
Table Column Breakdown
The dashboard in the bottom-right corner displays the following:
Year: The vintage year of the investment.
Buy Price: The price of the asset on the first trading day of that year.
End Price: The price on the last trading day of that year (or the current price if the year is still active).
Yearly %: The isolated performance of that specific calendar year. (Green = The market ended the year higher than it started).
Compounded %: The "Diamond Hands" return. This shows how much that specific $10,000 tranche is up (or down) right now relative to the current price.
How to Use
Add the script to your chart.
Crucial: Set your chart timeframe to Daily (D). This ensures the script correctly identifies the first trading day of the year.
Open the Settings (Inputs) to adjust:
Annual Investment Amount: Default is $10,000.
Table Size: Adjust text size (Tiny, Small, Normal, Large).
Max Rows: Limit how many historical years are shown to keep the chart clean.
Use Case
This tool is perfect for investors who want to visualize the power of long-term holding. It allows you to see that even if a specific year had a bad "Yearly Yield" (e.g., buying in 2008), the "Compounded Yield" might still be massive today due to time in the market.
RSL Screener Column//@version=5
indicator("RSL Screener Column", shorttitle="RSL", overlay=false)
sma26 = ta.sma(close, 26)
rsl = close / sma26
plot(rsl)
MSTR mNAV indicatorTrack and compute MicroStrategy's mNAV (EV divided by BTC reserve value) over time.
- compute method: www.strategy.com
- data source: www.strategy.com
Global Market Scanner [Armi Goldman]Concept
This indicator is designed to provide a comprehensive "Bird's Eye View" of the global financial economy. Instead of focusing on a single chart, this dashboard allows traders to monitor capital rotation across every major asset class simultaneously. By tracking the Money Flux (daily percentage change) of these markets, users can instantly identify if the market environment is "Risk-On" (flowing into assets) or "Risk-Off" (fleeing to cash/bonds).
Features
The dashboard displays a real-time table in the top-right corner tracking 9 key sectors:
US M2 Money Supply: The broad measure of liquidity availability.
US Dollar (DXY): The global currency baseline.
Global Stocks (VT): World equities performance.
Crypto Market: Total cryptocurrency market capitalization.
Commodities: Gold, Silver, and Crude Oil (WTI).
Real Estate: Vanguard Real Estate ETF (VNQ).
Bonds: US Aggregate Bond Market.
How it Works
The script utilizes request.security() to fetch data from multiple asset classes regardless of the chart you are currently viewing.
Flux Calculation: The "Flux" column calculates the daily percentage change (Close - Open) / Open. This reveals the immediate direction of capital flow for the current session.
M2 Trend: For the Money Supply, the script calculates a 30-day rate of change to determine if the Fed is effectively "Inflating" (adding liquidity) or "Tightening" (removing liquidity).
Status Logic: The status column uses conditional logic to assign readable labels (e.g., "INFLOW" vs "OUTFLOW" or "STRONGER" vs "WEAKER") based on the positive or negative value of the Flux.
How to Use
Risk-On Signal: If Stocks, Crypto, and Real Estate show green "INFLOW" status while the Dollar (DXY) is red, capital is deploying into risk assets.
Flight to Safety: If Gold and Bonds are green while Equities are red, investors may be hedging against fear.
Cash is King: If DXY is strong (Green) and almost all other assets are red, liquidity is drying up and moving into Cash.
Liquidity Watch: Monitor the US M2 Supply. A simplified view is that when M2 is "Inflating," it provides a long-term tailwind for asset prices.
Tickers Used
Liquidity: ECONOMICS:USM2
Currency: TVC:DXY
Equities: AMEX:VT (Total World Stock ETF)
Real Estate: AMEX:VNQ (Vanguard Real Estate)
Bonds: AMEX:AGG
Commodities: TVC:GOLD, TVC:SILVER, TVC:USOIL
Crypto: CRYPTOCAP:TOTAL
Disclaimer This tool is for informational purposes only and does not constitute financial advice.
Crypto Market Pulse: Dom vs Vol AnalyzerConcept & Methodology
The core logic of this indicator is based on the "Money Flow" theory. It aggregates data from multiple sources (CRYPTOCAP:TOTAL, BTC.D, BINANCE:BTCUSDT) to provide a comprehensive market overview in a single panel.
Key Calculations:
Total Market Cap & Volume: Fetches real-time data to determine the overall health of the market.
Inverse Dominance Logic: Unlike standard indicators, this script applies inverse color coding to Bitcoin Dominance (BTC.D).
When BTC Dominance drops, it is colored Green (indicating liquidity flowing into Altcoins).
When BTC Dominance rises, it is colored Red (indicating risk for Altcoins).
Volume Delta: Compares the current timeframe's volume against the previous candle to calculate the percentage change, highlighting sudden liquidity injections.
█ Features
Real-time Dashboard: Displays Cap, Volume, BTC Price, and BTC Dominance.
Altcoin-Focus Coloring: Automatically interprets data to favor Altcoin traders (Green Signals = Good for Alts).
Dynamic Alerts:
Volume Surge Alert: Triggers when volume exceeds a user-defined threshold (default +50%), signaling potential breakout activity.
Dominance Drop Alert: Triggers when BTC Dominance falls significantly, signaling the start of potential Altcoin movement.
█ How to Use
Look for Confluence: The ideal "Altseason" signal is when the Total Cap is Green (Market up) AND BTC Dominance is Green (Dominance down). This indicates money is moving from BTC to Alts.
Volume Confirmation: Use the Volume row to confirm the strength of the move. A price rise without volume is often a fakeout.
Customization: You can adjust the table position and text size from the settings menu to fit your screen setup.
ICT Fair Value Gap Detector [Eˣ]//@version=6
indicator(title='Fair Value Gap Detector', shorttitle='FVG', overlay=true, max_boxes_count=500)
// ========== INPUTS ==========
showBullishFVG = input.bool(true, 'Show Bullish FVG', group='Display', inline='bull')
bullishColor = input.color(color.new(color.green, 80), '', group='Display', inline='bull')
showBearishFVG = input.bool(true, 'Show Bearish FVG', group='Display', inline='bear')
bearishColor = input.color(color.new(color.red, 80), '', group='Display', inline='bear')
maxGaps = input.int(20, 'Max FVG to Display', minval=5, maxval=50, tooltip='Limit number of visible gaps', group='Display')
showLabels = input.bool(true, 'Show FVG Labels', group='Display')
extendGaps = input.int(50, 'Extend Gaps (bars)', minval=10, maxval=200, tooltip='How far to extend gaps to the right', group='Display')
minGapSize = input.float(0.05, 'Min Gap Size %', minval=0.01, maxval=2.0, step=0.01, tooltip='Minimum gap size as % of price', group='Filters')
showFilled = input.bool(false, 'Show Filled Gaps', tooltip='Keep showing gaps after price fills them', group='Filters')
autoMitigation = input.bool(true, 'Auto-Detect Mitigation', tooltip='Automatically detect when gaps are filled', group='Advanced')
mitigationType = input.string('Full', 'Mitigation Type', , tooltip='How much fill required to consider gap mitigated', group='Advanced')
highlightActive = input.bool(true, 'Highlight Nearest Gap', tooltip='Show which gap price is approaching', group='Advanced')
// ========== FVG DETECTION ==========
// Bullish FVG: Gap between candle 3 low and candle 1 high (when candle 2 is strong bullish)
// Occurs when: high < low (there's a gap that wasn't filled)
f_detectBullishFVG() =>
bool isFVG = false
float fvgTop = na
float fvgBottom = na
int fvgBar = na
// Check for bullish FVG: current candle's low is above the high from 2 candles ago
if low > high
// Verify middle candle was bullish and strong
if close > open
fvgBottom := high
fvgTop := low
fvgBar := bar_index
isFVG := true
// Bearish FVG: Gap between candle 3 high and candle 1 low (when candle 2 is strong bearish)
// Occurs when: low > high (there's a gap that wasn't filled)
f_detectBearishFVG() =>
bool isFVG = false
float fvgTop = na
float fvgBottom = na
int fvgBar = na
// Check for bearish FVG: current candle's high is below the low from 2 candles ago
if high < low
// Verify middle candle was bearish and strong
if close < open
fvgTop := low
fvgBottom := high
fvgBar := bar_index
isFVG := true
// Detect FVGs
= f_detectBullishFVG()
= f_detectBearishFVG()
// ========== FVG STORAGE ==========
var array bullishFVGTops = array.new()
var array bullishFVGBottoms = array.new()
var array bullishFVGBars = array.new()
var array bullishFVGFilled = array.new()
var array bullishFVGFillPercent = array.new()
var array bearishFVGTops = array.new()
var array bearishFVGBottoms = array.new()
var array bearishFVGBars = array.new()
var array bearishFVGFilled = array.new()
var array bearishFVGFillPercent = array.new()
// Add new bullish FVG
if bullFVG and not na(bullFVGTop) and not na(bullFVGBottom)
float gapSize = ((bullFVGTop - bullFVGBottom) / bullFVGBottom) * 100
// Check minimum size
if gapSize >= minGapSize
array.unshift(bullishFVGTops, bullFVGTop)
array.unshift(bullishFVGBottoms, bullFVGBottom)
array.unshift(bullishFVGBars, bullFVGBar)
array.unshift(bullishFVGFilled, false)
array.unshift(bullishFVGFillPercent, 0.0)
// Limit array size
if array.size(bullishFVGTops) > maxGaps
array.pop(bullishFVGTops)
array.pop(bullishFVGBottoms)
array.pop(bullishFVGBars)
array.pop(bullishFVGFilled)
array.pop(bullishFVGFillPercent)
// Add new bearish FVG
if bearFVG and not na(bearFVGTop) and not na(bearFVGBottom)
float gapSize = ((bearFVGTop - bearFVGBottom) / bearFVGBottom) * 100
if gapSize >= minGapSize
array.unshift(bearishFVGTops, bearFVGTop)
array.unshift(bearishFVGBottoms, bearFVGBottom)
array.unshift(bearishFVGBars, bearFVGBar)
array.unshift(bearishFVGFilled, false)
array.unshift(bearishFVGFillPercent, 0.0)
if array.size(bearishFVGTops) > maxGaps
array.pop(bearishFVGTops)
array.pop(bearishFVGBottoms)
array.pop(bearishFVGBars)
array.pop(bearishFVGFilled)
array.pop(bearishFVGFillPercent)
// ========== MITIGATION DETECTION ==========
if autoMitigation
// Check bullish FVGs (filled when price comes back down)
int bullSize = array.size(bullishFVGTops)
if bullSize > 0
for i = 0 to bullSize - 1
if not array.get(bullishFVGFilled, i)
float fvgTop = array.get(bullishFVGTops, i)
float fvgBottom = array.get(bullishFVGBottoms, i)
float gapSize = fvgTop - fvgBottom
// Calculate how much of the gap has been filled
float fillAmount = 0.0
if low <= fvgTop and low >= fvgBottom
fillAmount := (fvgTop - low) / gapSize
else if low < fvgBottom
fillAmount := 1.0
array.set(bullishFVGFillPercent, i, fillAmount)
// Check mitigation based on type
bool isMitigated = false
if mitigationType == 'Full'
isMitigated := low <= fvgBottom
else if mitigationType == '50%'
isMitigated := fillAmount >= 0.5
else // Partial
isMitigated := low <= fvgTop
if isMitigated
array.set(bullishFVGFilled, i, true)
// Check bearish FVGs (filled when price comes back up)
int bearSize = array.size(bearishFVGTops)
if bearSize > 0
for i = 0 to bearSize - 1
if not array.get(bearishFVGFilled, i)
float fvgTop = array.get(bearishFVGTops, i)
float fvgBottom = array.get(bearishFVGBottoms, i)
float gapSize = fvgTop - fvgBottom
// Calculate how much of the gap has been filled
float fillAmount = 0.0
if high >= fvgBottom and high <= fvgTop
fillAmount := (high - fvgBottom) / gapSize
else if high > fvgTop
fillAmount := 1.0
array.set(bearishFVGFillPercent, i, fillAmount)
// Check mitigation based on type
bool isMitigated = false
if mitigationType == 'Full'
isMitigated := high >= fvgTop
else if mitigationType == '50%'
isMitigated := fillAmount >= 0.5
else // Partial
isMitigated := high >= fvgBottom
if isMitigated
array.set(bearishFVGFilled, i, true)
// ========== FIND NEAREST GAPS ==========
float nearestBullDist = 999999
int nearestBullIdx = -1
float nearestBearDist = 999999
int nearestBearIdx = -1
if highlightActive
int bullSize = array.size(bullishFVGTops)
if bullSize > 0
for i = 0 to bullSize - 1
if not array.get(bullishFVGFilled, i)
float fvgMid = (array.get(bullishFVGTops, i) + array.get(bullishFVGBottoms, i)) / 2
float dist = math.abs(close - fvgMid)
if dist < nearestBullDist and close > fvgMid
nearestBullDist := dist
nearestBullIdx := i
int bearSize = array.size(bearishFVGTops)
if bearSize > 0
for i = 0 to bearSize - 1
if not array.get(bearishFVGFilled, i)
float fvgMid = (array.get(bearishFVGTops, i) + array.get(bearishFVGBottoms, i)) / 2
float dist = math.abs(close - fvgMid)
if dist < nearestBearDist and close < fvgMid
nearestBearDist := dist
nearestBearIdx := i
// ========== VISUALIZATION ==========
var array bullishBoxes = array.new()
var array bullishLabels = array.new()
var array bearishBoxes = array.new()
var array bearishLabels = array.new()
// Clear old drawings
if barstate.islast
if array.size(bullishBoxes) > 0
for i = 0 to array.size(bullishBoxes) - 1
box.delete(array.get(bullishBoxes, i))
array.clear(bullishBoxes)
if array.size(bullishLabels) > 0
for i = 0 to array.size(bullishLabels) - 1
label.delete(array.get(bullishLabels, i))
array.clear(bullishLabels)
if array.size(bearishBoxes) > 0
for i = 0 to array.size(bearishBoxes) - 1
box.delete(array.get(bearishBoxes, i))
array.clear(bearishBoxes)
if array.size(bearishLabels) > 0
for i = 0 to array.size(bearishLabels) - 1
label.delete(array.get(bearishLabels, i))
array.clear(bearishLabels)
// Draw bullish FVGs
if barstate.islast and showBullishFVG
int bullSize = array.size(bullishFVGTops)
if bullSize > 0
for i = 0 to bullSize - 1
bool isFilled = array.get(bullishFVGFilled, i)
if not isFilled or showFilled
float fvgTop = array.get(bullishFVGTops, i)
float fvgBottom = array.get(bullishFVGBottoms, i)
int fvgBar = array.get(bullishFVGBars, i)
float fillPct = array.get(bullishFVGFillPercent, i)
bool isActive = highlightActive and i == nearestBullIdx and not isFilled
color boxColor = isFilled ? color.new(color.gray, 90) : isActive ? color.new(color.lime, 70) : bullishColor
int borderWidth = isActive ? 2 : 1
box b = box.new(fvgBar, fvgTop, bar_index + extendGaps, fvgBottom,
border_color=boxColor,
bgcolor=boxColor,
border_width=borderWidth,
border_style=isFilled ? line.style_dotted : line.style_solid)
array.push(bullishBoxes, b)
// Label
if showLabels and not isFilled
string labelText = isActive ? 'FVG+ 🎯' : 'FVG+'
if fillPct > 0 and fillPct < 1.0
labelText += ' ' + str.tostring(fillPct * 100, '#') + '%'
label lbl = label.new(bar_index + 2, fvgTop, labelText,
color=color.new(color.green, isActive ? 70 : 85),
textcolor=color.white,
style=label.style_label_down,
size=isActive ? size.normal : size.small)
array.push(bullishLabels, lbl)
// Draw bearish FVGs
if barstate.islast and showBearishFVG
int bearSize = array.size(bearishFVGTops)
if bearSize > 0
for i = 0 to bearSize - 1
bool isFilled = array.get(bearishFVGFilled, i)
if not isFilled or showFilled
float fvgTop = array.get(bearishFVGTops, i)
float fvgBottom = array.get(bearishFVGBottoms, i)
int fvgBar = array.get(bearishFVGBars, i)
float fillPct = array.get(bearishFVGFillPercent, i)
bool isActive = highlightActive and i == nearestBearIdx and not isFilled
color boxColor = isFilled ? color.new(color.gray, 90) : isActive ? color.new(color.orange, 70) : bearishColor
int borderWidth = isActive ? 2 : 1
box b = box.new(fvgBar, fvgTop, bar_index + extendGaps, fvgBottom,
border_color=boxColor,
bgcolor=boxColor,
border_width=borderWidth,
border_style=isFilled ? line.style_dotted : line.style_solid)
array.push(bearishBoxes, b)
// Label
if showLabels and not isFilled
string labelText = isActive ? 'FVG- 🎯' : 'FVG-'
if fillPct > 0 and fillPct < 1.0
labelText += ' ' + str.tostring(fillPct * 100, '#') + '%'
label lbl = label.new(bar_index + 2, fvgBottom, labelText,
color=color.new(color.red, isActive ? 70 : 85),
textcolor=color.white,
style=label.style_label_up,
size=isActive ? size.normal : size.small)
array.push(bearishLabels, lbl)
// ========== INFO TABLE ==========
var table infoTable = table.new(position.top_right, 2, 5, border_width=1, bgcolor=color.new(color.black, 85), border_color=color.gray)
if barstate.islast
// Header
table.cell(infoTable, 0, 0, '⚡ Fair Value Gaps', bgcolor=color.new(color.blue, 70), text_color=color.white, text_size=size.normal)
table.merge_cells(infoTable, 0, 0, 1, 0)
// Count unfilled bullish FVGs
int activeBullish = 0
int bullSize = array.size(bullishFVGTops)
if bullSize > 0
for i = 0 to bullSize - 1
if not array.get(bullishFVGFilled, i)
activeBullish += 1
table.cell(infoTable, 0, 1, 'Bullish FVG:', text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 1, str.tostring(activeBullish), bgcolor=color.new(color.green, 70), text_color=color.white, text_size=size.small)
// Count unfilled bearish FVGs
int activeBearish = 0
int bearSize = array.size(bearishFVGTops)
if bearSize > 0
for i = 0 to bearSize - 1
if not array.get(bearishFVGFilled, i)
activeBearish += 1
table.cell(infoTable, 0, 2, 'Bearish FVG:', text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 2, str.tostring(activeBearish), bgcolor=color.new(color.red, 70), text_color=color.white, text_size=size.small)
// Bias
string bias = activeBullish > activeBearish ? '⬆ Bullish' : activeBearish > activeBullish ? '⬇ Bearish' : '↔ Neutral'
color biasColor = activeBullish > activeBearish ? color.green : activeBearish > activeBullish ? color.red : color.gray
table.cell(infoTable, 0, 3, 'Bias:', text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 3, bias, text_color=biasColor, text_size=size.small)
// Nearest gap
if nearestBullIdx >= 0 and nearestBullDist < nearestBearDist
float distPct = (nearestBullDist / close) * 100
table.cell(infoTable, 0, 4, 'Target:', text_color=color.white, text_size=size.tiny)
table.cell(infoTable, 1, 4, 'Bull FVG -' + str.tostring(distPct, '#.##') + '%', text_color=color.lime, text_size=size.tiny)
else if nearestBearIdx >= 0
float distPct = (nearestBearDist / close) * 100
table.cell(infoTable, 0, 4, 'Target:', text_color=color.white, text_size=size.tiny)
table.cell(infoTable, 1, 4, 'Bear FVG +' + str.tostring(distPct, '#.##') + '%', text_color=color.orange, text_size=size.tiny)
else
table.cell(infoTable, 0, 4, 'Status:', text_color=color.white, text_size=size.tiny)
table.cell(infoTable, 1, 4, 'No active gaps', text_color=color.gray, text_size=size.tiny)
// ========== SIGNALS ==========
// Price entering bullish FVG
bool enteringBullFVG = false
if nearestBullIdx >= 0 and bullSize > 0
float fvgTop = array.get(bullishFVGTops, nearestBullIdx)
float fvgBottom = array.get(bullishFVGBottoms, nearestBullIdx)
bool isFilled = array.get(bullishFVGFilled, nearestBullIdx)
enteringBullFVG := not isFilled and low <= fvgTop and low > fvgTop
// Price entering bearish FVG
bool enteringBearFVG = false
if nearestBearIdx >= 0 and bearSize > 0
float fvgTop = array.get(bearishFVGTops, nearestBearIdx)
float fvgBottom = array.get(bearishFVGBottoms, nearestBearIdx)
bool isFilled = array.get(bearishFVGFilled, nearestBearIdx)
enteringBearFVG := not isFilled and high >= fvgBottom and high < fvgBottom
// Plot signals
plotshape(enteringBullFVG, 'Bullish FVG Fill', shape.circle, location.belowbar, color.new(color.lime, 0), size=size.small)
plotshape(enteringBearFVG, 'Bearish FVG Fill', shape.circle, location.abovebar, color.new(color.orange, 0), size=size.small)
// New FVG signals
plotshape(bullFVG, 'New Bullish FVG', shape.triangleup, location.belowbar, color.new(color.green, 30), size=size.tiny)
plotshape(bearFVG, 'New Bearish FVG', shape.triangledown, location.abovebar, color.new(color.red, 30), size=size.tiny)
// ========== ALERTS ==========
alertcondition(enteringBullFVG, 'Price Entering Bullish FVG', '🟢 Price entering Bullish Fair Value Gap on {{ticker}} at {{close}}')
alertcondition(enteringBearFVG, 'Price Entering Bearish FVG', '🔴 Price entering Bearish Fair Value Gap on {{ticker}} at {{close}}')
alertcondition(bullFVG, 'New Bullish FVG Detected', '⚡ New Bullish FVG detected on {{ticker}}')
alertcondition(bearFVG, 'New Bearish FVG Detected', '⚡ New Bearish FVG detected on {{ticker}}')
Pi Cycle Z-ScorePi Cycle Z-Score
The Pi Cycle Top Indicator uses the 111 day moving average (111DMA) and a newly created multiple of the 350 day moving average, the 350DMA x 2 (the multiple is of the price values of the 350DMA, not the number of days). For the past three market cycles, when the 111DMA moves up and crosses the 350DMA x 2 we see that it coincides with the price of Bitcoin peaking. It is also interesting to note that 350 / 111 is 3.153, which is very close to Pi = 3.142, thus the name. Z-score analysis has been conducted to provide traders with a precise tool for identifying market extremes and potential reversions.
This indicator is calibrated on a weekly timeframe in order to give precise top and bottom signals for each cycle.
Features
The script compares the Z-score with customizable threshold levels to generate overbought and oversold levels. A Z-score exceeding the upper threshold suggests potential overbought conditions, while a Z-score below the lower threshold may indicate oversold conditions.
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. The length determines the lookback period that the Z-score is calculated over. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities. By using Z-score analysis, this tool can be particularly effective for detecting points of overextension in the market, where a reversion to the mean is likely.
Detecting Overbought and Oversold Conditions: The Z-score measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
Puell Multiple Z-ScorePuell Multiple Z-Score
The Puell Multiple is calculated by dividing the total USD value of Bitcoin issued today (newly mined coins × BTC price) by the 365-day moving average of that daily issuance value. It shows how today's miner revenue compares to the past year's average. Z-score analysis has been conducted to provide traders with a precise tool for identifying market extremes and potential reversions.
This indicator is calibrated on a daily timeframe in order to give precise top and bottom signals for each cycle.
Features
The script compares the Z-score with customizable threshold levels to generate overbought and oversold levels. A Z-score exceeding the upper threshold suggests potential overbought conditions, while a Z-score below the lower threshold may indicate oversold conditions.
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. The length determines the lookback period that the Z-score is calculated over. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities. By using Z-score analysis, this tool can be particularly effective for detecting points of overextension in the market, where a reversion to the mean is likely.
Detecting Overbought and Oversold Conditions: The Z-score measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
NUPL Z-ScoreNUPL Z-Score
The Net Unrealized Profit and Loss (NUPL) is an advanced on-chain indicator that is measured by subtracting the Realized Value from Market Value. Realized Value takes the price of each Bitcoin when it was last moved. It adds up all individual prices and takes an average. It multiplies that average price by the total number of coins in circulation. Market Value is the current price of Bitcoin multiplied by the number of coins in circulation. This gives us the NUPL which estimates the total paper profits/losses in Bitcoin held by investors. This indicator enhances this metric by normalizing it into a Z-score, and enabling customizable features for precision and visualization.
This indicator is calibrated on a weekly timeframe in order to give precise top and bottom signals for each cycle.
Features
The script compares the Z-score with customizable threshold levels to generate overbought and oversold levels. A Z-score exceeding the upper threshold suggests potential overbought conditions, while a Z-score below the lower threshold may indicate oversold conditions.
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. The length determines the lookback period that the Z-score is calculated over. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities. By using Z-score analysis, this tool can be particularly effective for detecting points of overextension in the market, where a reversion to the mean is likely.
Detecting Overbought and Oversold Conditions: The Z-score measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
SOPR Z-ScoreSOPR Z-Score
The Spent Output Profit Ratio (SOPR) is an advanced on-chain indicator that measures the ratio between the combined USD value of all Bitcoin outputs spent on a given day and their combined USD value at the time of creation. SOPR offers a window into aggregate seller behavior, effectively representing the USD amount received by sellers divided by the USD amount they originally paid. This indicator enhances this metric by normalizing it into a Z-score, and enabling customizable features for precision and visualization.
This indicator is calibrated on a weekly timeframe in order to give precise top and bottom signals for each cycle.
Features
The script compares the Z-score with customizable threshold levels to generate overbought and oversold levels. A Z-score exceeding the upper threshold suggests potential overbought conditions, while a Z-score below the lower threshold may indicate oversold conditions.
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. The length determines the lookback period that the Z-score is calculated over. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities. By using Z-score analysis, this tool can be particularly effective for detecting points of overextension in the market, where a reversion to the mean is likely.
Detecting Overbought and Oversold Conditions: The Z-score measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
MVRV Z-ScoreMVRV Z-Score
The Market Value to Realized Value (MVRV) is an advanced on-chain indicator designed to assess the ratio between the Market Value and the Realized Value of Bitcoin.
Market Value is calculated as the current price of Bitcoin multiplied by its circulating supply and realized Value is derived by multiplying the realized price of Bitcoin (the price at which the coins last moved) by the circulating supply. It represents the total cost basis of all Bitcoin held.
Z-score analysis has been conducted to provide traders with a precise tool for identifying market extremes and potential reversions.
This indicator is calibrated on a weekly timeframe in order to give precise top and bottom signals for each cycle.
Features
The script compares the Z-score with customizable threshold levels to generate overbought and oversold levels. A Z-score exceeding the upper threshold suggests potential overbought conditions, while a Z-score below the lower threshold may indicate oversold conditions.
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. The length determines the lookback period that the Z-score is calculated over. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities. By using Z-score analysis, this tool can be particularly effective for detecting points of overextension in the market, where a reversion to the mean is likely.
Detecting Overbought and Oversold Conditions: The Z-score measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
Pi CyclePi Cycle
The Pi Cycle Top Indicator uses the 111 day moving average (111DMA) and a newly created multiple of the 350 day moving average, the 350DMA x 2 (the multiple is of the price values of the 350DMA, not the number of days). For the past three market cycles, when the 111DMA moves up and crosses the 350DMA x 2 we see that it coincides with the price of Bitcoin peaking. It is also interesting to note that 350 / 111 is 3.153, which is very close to Pi = 3.142, thus the name.
Features
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. Traders can adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities.
Detecting Overbought and Oversold Conditions: The indicator measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities
Puell MultiplePuell Multiple
The Puell Multiple is calculated by dividing the total USD value of Bitcoin issued today (newly mined coins × BTC price) by the 365-day moving average of that daily issuance value. It shows how today's miner revenue compares to the past year's average.
Features
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. Traders can adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities.
Detecting Overbought and Oversold Conditions: The indicator measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
NUPLNUPL
The Net Unrealized Profit and Loss (NUPL) is an advanced on-chain indicator that is measured by subtracting the Realized Value from Market Value. Realized Value takes the price of each Bitcoin when it was last moved. It adds up all individual prices and takes an average. It multiplies that average price by the total number of coins in circulation. Market Value is the current price of Bitcoin multiplied by the number of coins in circulation. This gives us the NUPL which estimates the total paper profits/losses in Bitcoin held by investors.
Features
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities.
Detecting Overbought and Oversold Conditions: The indicator measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
SOPRSOPR
The Spent Output Profit Ratio (SOPR) is an advanced on-chain indicator that measures the ratio between the combined USD value of all Bitcoin outputs spent on a given day and their combined USD value at the time of creation. SOPR offers a window into aggregate seller behavior, effectively representing the USD amount received by sellers divided by the USD amount they originally paid.
Features
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. Traders can adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities.
Detecting Overbought and Oversold Conditions: The indicator measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
MVRVMVRV
The Market Value to Realized Value (MVRV) is an advanced on-chain indicator designed to assess the ratio between the Market Value and the Realized Value of Bitcoin.
Market Value is calculated as the current price of Bitcoin multiplied by its circulating supply and realized Value is derived by multiplying the realized price of Bitcoin (the price at which the coins last moved) by the circulating supply. It represents the total cost basis of all Bitcoin held.
Features
This script offers several customizable inputs, enabling traders to tailor the indicator to their preferences. Traders can also adjust the thresholds to define the sensitivity of overbought and oversold conditions.
It has 10 available color schemes to choose from and the background coloring on the chart can be toggled on and off.
Practical Applications
This indicator is designed for traders who focus on identifying cycle extremes and potential mean reversion opportunities.
Detecting Overbought and Oversold Conditions: The indicator measures how far the price has deviated from its norm, allowing traders to identify overbought or oversold conditions with precision.
Timing Market Reversals: The indicator provides early signals of potential market reversals by highlighting when the price has moved too far away from its average, helping traders anticipate reversion opportunities.
TraderForge - Genesis xMA - EMAs + Daily SMAsA clean, powerful multi-MA system designed for momentum and trend clarity on any symbol and any timeframe.
Intraday Momentum:
• EMA 9, 13, and 21 form a responsive ribbon that reveals direction, pullbacks, and acceleration zones.
Higher-Timeframe Trend Structure:
• Daily (or any HTF you choose) SMA 20 / 50 / 200 projected on your chart act as long-range “trend rails,” giving you instant awareness of bullish/bearish bias, mean-reversion zones, and key swing levels.
Fully Editable:
• Change all EMA/SMA lengths
• Select any higher timeframe (default: Daily)
• Turn each group on/off from the settings panel
Simple. Fast. Visual. Perfect for scalping, day trading, or swing analysis.
TraderForge — Simple indicators. Powerful results.
TraderForge - 15-min Candle StrategyThis indicator automatically identifies the first 15-minute candle of each trading session and projects its high and low across the entire regular trading day. The result is a clear intraday structure level that helps traders visualize opening strength, early volatility, and potential breakout or rejection zones.
Using the same projection engine found in the TraderForge Genesis ATR 1.5 system, the lines extend dynamically based on the chart’s timeframe, ensuring perfect alignment on any intraday interval.
Features
• Plots the 15-minute High and 15-minute Low for the current session
• Automatic session detection and value locking
• Clean forward projection for the entire market day
• Optional labels for quick identification
• Works on any intraday timeframe (1m, 5m, 15m, etc.)
• No repainting, no drift, no multi-session clutter
Ideal for traders who rely on early-session structure, liquidity mapping, or opening range breakout (ORB) concepts.
TraderForge – Simple indicators. Powerful results.
P.S.: Now only works for 15-minute candles, working on an agnostic version to be released soon.






















