Stage 2 Pullback Swing indicatorThis scanner is built for swing traders who want high-probability pullbacks inside strong, established uptrends. It targets names in a confirmed Stage 2 bull phase (Weinstein model) that have pulled back 10–30% from a recent swing high on light selling volume, while still respecting fast EMAs.
Goal: find powerful uptrending stocks during controlled dips before the next leg higher.
What it looks for
Strong prior uptrend: price above the 50 and 200 SMAs, momentum positive over multiple timeframes
Confirmed Stage 2: price above a rising 30-week MA on the weekly chart
Pullback depth: 10–30% off recent swing highs—not too shallow, not broken
Pullback quality: range contained, no panic selling, trend structure intact
EMA behavior: price near EMA10 or EMA20 at signal time
Volume contraction: sellers fading throughout the pullback
Bullish shift: green candle back in trend direction
Why this matters
This setup hints at institutions defending positions during a temporary dip. Strong stocks pull back cleanly with declining volume, then resume the primary trend. This script alerts you when those conditions align.
Best way to use
Filter a strong universe before applying—quality tickers only
Pair with clear trade plans: risk defined by prior swing low or ATR
Trigger alerts instead of hunting charts manually
Intended for
Swing traders who want momentum continuation setups
Traders who prefer entering on controlled retracements
Anyone tired of chasing extended breakouts
Chu kỳ
ICT Killzone & Liquidity Sweep DetectorICT Killzone & Liquidity Sweep Detector
A powerful and clean ICT/SMC tool that combines:
• Accurate Killzone session boxes (Asia, London, NY AM, NY Lunch, NY PM) with customizable time & colors
• Real-time High/Low pivot lines from each killzone
• Smart Liquidity Sweep Detection with visual "Turtle on Fire" emoji when price wicks into old highs/lows without closing beyond them
• Automatic pivot mitigation: lines stop extending when price closes beyond the level (body break) or when swept by wick
• Optional midpoint lines of each killzone
• Extend pivots: "Until Mitigated" (default) or "Past Mitigation"
• Choose to extend only the most recent session or all sessions
• Built-in alerts when a killzone high or low is broken by close
• Session limit & timeframe filter to keep the chart clean
• Fully customizable colors, labels, line styles, transparency, and text
Features:
• Timezone support (default New York – auto handles DST)
• Works perfectly on all timeframes (recommended ≤ 30m for best visuals)
• Smart drawing cleanup – only keeps the last N sessions (default 8)
• High performance with proper array management
Perfect for traders following ICT concepts such as:
- Killzone trading
- Order block / FVG confirmation after liquidity sweeps
- Judas Swing detection
- Market structure shifts after raid on old highs/lows
One of the cleanest and most accurate public ICT Killzone + Liquidity Sweep indicators available on TradingView.
Enjoy responsibly
BEGGALKey Features and Concepts
1. Order Block (OB) Identification (Pivots)
The core of the indicator relies on Pivot Point detection (ta.pivothigh/ta.pivotlow) over a specified Pivot Length (e.g., 5 bars).
Bullish OB (Demand Zone): Identified at a valid low pivot point, with the zone boundary defined between the pivot low (low ) and the open/close average (hl2 ) of the pivot bar.
Bearish OB (Supply Zone): Identified at a valid high pivot point, with the zone boundary defined between the pivot high (high ) and the open/close average (hl2 ) of the pivot bar.
2. Advanced Strength Filters (Momentum & Volume)
The indicator applies strict filters to ensure only powerful, high-quality zones are drawn:
Momentum (ATR) Filter: Checks if the candle that created the OB has a range (high - low) greater than the Average True Range (ATR) multiplied by the Momentum Threshold. This filters for impulsive, strong candles.
Volume Imbalance Filter (SMC Confirmation): If enabled, it requires the volume of the OB-creating candle to be higher than the volume of candles surrounding it (checked over the Volume Imbalance Lookback period). This confirms institutional activity in the zone creation.
Structure Break Filter (BOS/CHoCH): If enabled, the OB is only considered valid if it is created after a Break of Structure (BOS) or Change of Character (CHoCH). This validates the zone according to market structure rules (e.g., a Bearish OB must be preceded by a break of a significant swing low).
3. Dynamic Zone Management
Zone Narrowing (enable_narrowing): This feature dynamically adjusts the boundaries of an Order Block after it has been touched. If a candle wick tests the zone without fully mitigating it, the zone boundary is moved inward to the point where the test occurred, narrowing the zone and making it a more precise entry point (Dynamic OB concept).
Mitigation/Removal: Once price action (either the candle's wick or close, based on the Mitigation Method setting) breaches the outermost boundary of the zone, the Order Block is considered mitigated (broken) and is removed from the chart to clear clutter.
4. Risk Categorization
The indicator tracks and draws up to a user-defined number of OBs (Bullish/Bearish OB Count). These are categorized by their index:
Index 0 (Closest): Categorized as High Risk Zone.
Index 1: Categorized as Medium Risk Zone.
Index 2 and beyond: Categorized as Low Risk Zone. The user can toggle the visibility for each of these risk categories.
5. Integrated Risk/Reward (RR) Setup
For the High Risk Zone (Index 0), once the zone is touched, the indicator displays a complete trade setup:
Entry: Assumed at the Average Price of the Order Block.
Stop Loss (SL): Placed at the protective boundary of the OB (the top for a Sell Zone, the bottom for a Buy Zone). The risk area is colored with the RR Risk Zone Background.
Take Profit (TP): Calculated based on the user-defined Risk/Reward Ratio (e.g., 2.0 for 1:2 RR). The reward area is colored with the RR Reward Zone Background.
The RR boxes and price labels (TP/SL) are drawn with a configurable RR Box Width (Bars).
6. Alerts
The indicator includes built-in Pine Script alerts that trigger when the price enters an unmitigated zone, notifying the user of the Risk Level (High, Medium, or Low), the zone's boundaries, and the price.
Fortunato Lead-Lag Multi-Asset (POC) v5_fix2//@version=6
indicator("Fortunato Lead-Lag Multi-Asset (POC) v5_fix2", shorttitle="FLL Multi POC v5_fix2", overlay=false, max_lines_count=200, max_labels_count=200)
// ========== USER CONFIG ==========
res = input.timeframe("1", "Resolution for analysis (ex: 1, 5, 3)")
corr_length = input.int(60, "Rolling window (bars) for correlation", minval=10, maxval=500)
max_lag = input.int(5, "Max lag to test (bars)", minval=1, maxval=20)
corr_threshold = input.float(0.60, "Correlation threshold (abs)", step=0.01)
min_lag_for_signal = input.int(1, "Min lag to consider (bars)", minval=0)
plot_lag_as_columns = input.bool(true, "Plot lag as columns")
// --- symbols (change to the exact tickers your feed uses) ---
sym_ndx = input.symbol("NASDAQ:NDX", "NDX (leader candidate) - change if needed")
sym_spx = input.symbol("SPX:SPX", "SPX (follower candidate) - change if needed")
// Optional add-ons
sym_vix = input.symbol("CBOE:VIX", "VIX (volatility index) - optional")
sym_dxy = input.symbol("ICEUS:DXY", "DXY (Dollar Index) - optional")
sym_xau = input.symbol("OANDA:XAUUSD","Gold (XAU/USD) - optional")
sym_oil = input.symbol("NYMEX:CL1!", "Crude Oil (continuous) - optional")
sym_btc = input.symbol("BINANCE:BTCUSDT","Bitcoin (BTC) - optional")
// ========== DATA FETCH (selected resolution) ==========
ndx = request.security(sym_ndx, res, close)
spx = request.security(sym_spx, res, close)
vix = request.security(sym_vix, res, close)
dxy = request.security(sym_dxy, res, close)
xau = request.security(sym_xau, res, close)
oil = request.security(sym_oil, res, close)
btc = request.security(sym_btc, res, close)
// ========== HELPERS ==========
has_history(len) => bar_index >= len
// rolling Pearson correlation implemented with ta.cum differences (replaces ta.sum)
rolling_corr(a, b, n) =>
if not has_history(n)
na
else
// compute rolling sums via cumulative sums
// sum_ab = sum_{k=0..n-1} a *b
float cum_ab = ta.cum(a * b)
float cum_ab_lag = cum_ab
float sum_ab = cum_ab - cum_ab_lag
float cum_a = ta.cum(a)
float cum_a_lag = cum_a
float sum_a = cum_a - cum_a_lag
float cum_b = ta.cum(b)
float cum_b_lag = cum_b
float sum_b = cum_b - cum_b_lag
float cum_a2 = ta.cum(a * a)
float cum_a2_lag = cum_a2
float sum_a2 = cum_a2 - cum_a2_lag
float cum_b2 = ta.cum(b * b)
float cum_b2_lag = cum_b2
float sum_b2 = cum_b2 - cum_b2_lag
float nn = n * 1.0
float num = sum_ab - (sum_a * sum_b) / nn
float den_part_a = sum_a2 - (sum_a * sum_a) / nn
float den_part_b = sum_b2 - (sum_b * sum_b) / nn
float den = den_part_a * den_part_b
if den <= 0.0
na
else
num / math.sqrt(den)
// ========== COMPUTE CORRELATIONS FOR ALL LAGS (USING rolling_corr) ==========
var float corr_dir1 = array.new_float()
var float corr_dir2 = array.new_float()
// ensure arrays sized correctly each bar
if array.size(corr_dir1) != (max_lag + 1)
array.clear(corr_dir1)
for i = 0 to max_lag
array.push(corr_dir1, na)
if array.size(corr_dir2) != (max_lag + 1)
array.clear(corr_dir2)
for i = 0 to max_lag
array.push(corr_dir2, na)
// fill arrays with correlation values (call rolling_corr every bar for consistency)
for i = 0 to max_lag
float val1 = na
if has_history(corr_length + i) and not na(ndx) and not na(spx)
// ndx aligned with spx shifted by +i (ndx leads spx by i)
val1 := rolling_corr(ndx, spx , corr_length)
array.set(corr_dir1, i, val1)
float val2 = na
if i > 0 and has_history(corr_length + i) and not na(ndx) and not na(spx)
// spx leads ndx by i
val2 := rolling_corr(ndx , spx, corr_length)
array.set(corr_dir2, i, val2)
// ========== FIND BEST ABSOLUTE CORRELATION AND DIRECTION ==========
float best_corr = na
int best_lag = 0
int best_dir = 0 // 1 = ndx -> spx, -1 = spx -> ndx
// scan dir1 (i = 0..max_lag)
for i = 0 to max_lag
float c = array.get(corr_dir1, i)
if not na(c)
if na(best_corr) or math.abs(c) > math.abs(best_corr)
best_corr := c
best_lag := i
best_dir := 1
// scan dir2 (i = 1..max_lag)
for i = 1 to max_lag
float c = array.get(corr_dir2, i)
if not na(c)
if na(best_corr) or math.abs(c) > math.abs(best_corr)
best_corr := c
best_lag := i
best_dir := -1
// ========== MULTI-ASSET LIGHT CONFIRMATION (explicit calls with rolling_corr) ==========
float sum_corr = 0.0
int count_corr = 0
// VIX
float local_best_vix = na
if not na(vix)
for j = 0 to max_lag
if has_history(corr_length + j)
float cc = rolling_corr(ndx, vix , corr_length)
if not na(cc)
if na(local_best_vix) or math.abs(cc) > math.abs(local_best_vix)
local_best_vix := cc
if not na(local_best_vix)
sum_corr := sum_corr + local_best_vix
count_corr := count_corr + 1
// DXY
float local_best_dxy = na
if not na(dxy)
for j = 0 to max_lag
if has_history(corr_length + j)
float cc = rolling_corr(ndx, dxy , corr_length)
if not na(cc)
if na(local_best_dxy) or math.abs(cc) > math.abs(local_best_dxy)
local_best_dxy := cc
if not na(local_best_dxy)
sum_corr := sum_corr + local_best_dxy
count_corr := count_corr + 1
// XAU
float local_best_xau = na
if not na(xau)
for j = 0 to max_lag
if has_history(corr_length + j)
float cc = rolling_corr(ndx, xau , corr_length)
if not na(cc)
if na(local_best_xau) or math.abs(cc) > math.abs(local_best_xau)
local_best_xau := cc
if not na(local_best_xau)
sum_corr := sum_corr + local_best_xau
count_corr := count_corr + 1
// OIL
float local_best_oil = na
if not na(oil)
for j = 0 to max_lag
if has_history(corr_length + j)
float cc = rolling_corr(ndx, oil , corr_length)
if not na(cc)
if na(local_best_oil) or math.abs(cc) > math.abs(local_best_oil)
local_best_oil := cc
if not na(local_best_oil)
sum_corr := sum_corr + local_best_oil
count_corr := count_corr + 1
// BTC
float local_best_btc = na
if not na(btc)
for j = 0 to max_lag
if has_history(corr_length + j)
float cc = rolling_corr(ndx, btc , corr_length)
if not na(cc)
if na(local_best_btc) or math.abs(cc) > math.abs(local_best_btc)
local_best_btc := cc
if not na(local_best_btc)
sum_corr := sum_corr + local_best_btc
count_corr := count_corr + 1
float confirm_avg = na
if count_corr > 0
confirm_avg := sum_corr / count_corr
// ========== SIGNAL LOGIC ==========
bool lead_detected = false
string lead_direction_text = "NoLeader"
if not na(best_corr) and math.abs(best_corr) >= corr_threshold and best_lag >= min_lag_for_signal
lead_detected := true
lead_direction_text := best_dir == 1 ? "NDX -> SPX" : (best_dir == -1 ? "SPX -> NDX" : "NoLeader")
// ========== PLOTS (GLOBAL) ==========
plot_best_corr = best_corr
plot_best_lag = (lead_detected ? best_lag : na)
plot_confirm_avg = confirm_avg
plot(plot_best_corr, title="Best Corr (signed)", linewidth=2)
hline(0, "zero", linestyle=hline.style_dashed)
hline(corr_threshold, "threshold +", linestyle=hline.style_solid)
hline(-corr_threshold, "threshold -", linestyle=hline.style_solid)
plot(plot_lag_as_columns ? plot_best_lag : na, title="Best Lag (bars)", style=plot.style_columns, linewidth=2)
plot(not na(plot_confirm_avg) ? plot_confirm_avg : na, title="Multi-asset confirm (avg)", linewidth=1, style=plot.style_line)
// ========== LABEL MANAGEMENT ==========
var label lbl = na
if lead_detected and barstate.isconfirmed
if not na(lbl)
label.delete(lbl)
lbl := label.new(bar_index, plot_best_corr, text="Lead: " + lead_direction_text + " lag:" + str.tostring(best_lag) + " corr:" + str.tostring(best_corr, "#.##"),
style=label.style_label_left, color=color.new(color.green, 75), textcolor=color.white, size=size.small)
// ========== ALERTS ==========
alertcondition(lead_detected and best_dir == 1, title="NDX leads SPX detected", message="NDX leads SPX — lag: {{plot_1}} corr: {{plot_0}}")
alertcondition(lead_detected and best_dir == -1, title="SPX leads NDX detected", message="SPX leads NDX — lag: {{plot_1}} corr: {{plot_0}}")
// ========== INFORMATION TABLE ==========
var table t = table.new(position.top_right, 1, 5, border_width=1)
if barstate.islast
table.cell(t, 0, 0, "Resolution: " + res)
table.cell(t, 0, 1, "Best corr: " + (na(best_corr) ? "na" : str.tostring(best_corr, "#.##")))
table.cell(t, 0, 2, "Best lag: " + (na(best_lag) ? "na" : str.tostring(best_lag)))
table.cell(t, 0, 3, "Direction: " + lead_direction_text)
table.cell(t, 0, 4, "Confirm avg: " + (na(confirm_avg) ? "na" : str.tostring(confirm_avg, "#.##")))
X-ray📌 X-ray is a microstructure tool that analyzes price structure based on volume distribution.
This indicator does not predict future price movements or provide buy/sell signals.
Instead, its purpose is to visually show price ranges where trading is concentrated or sparse during a specific period.
The script calculates the following structural elements:
POC (Point of Control)
VAH/VAL (Value Area High/Low)
HVN (High Volume Node)
LVN (Low Volume Node)
Value Area Box and Summary Table
All calculations are performed within the last N bars selected by the user and do not use future data.
■ Description of Unique Logic and Components
Volume-Based Price Structure Analysis
It collects closing prices and volume from recent data for a specified number of bars and derives the following elements:
POC (Point of Control)
The price range with the highest trading volume within the selected period. Because this area is where market participation is most active,
the price tends to retest or remain within this area.
This is not intended as a future prediction or signal,
but rather to illustrate the characteristic phenomenon that high-volume points can structurally act as "balance zones" in the market.
(Some traders describe the POC as "tending to act like a magnet" due to this market structural tendency.)
Value Area (VAH / VAL)
This is the price range encompassing a set percentage of total trading volume (default 70%).
This indicates a equilibrium zone where market participation was relatively high.
HVN (High Volume Node)
This is an area of high volume concentration,
a structurally dense point likely to have experienced a long market stay.
LVN (Low Volume Node)
This is a thin structural point with sparse trading volume,
a point likely to have experienced rapid price movements.
All of these elements are analytical tools for exploring and comparing market structural characteristics, not trading signals.
■ Visual Components
The indicator visually displays the following elements on the chart:
POC Line and Label
VAH/VAL Level
Value Area Box
HVN/LVN Highlight
Summary Table (POC, VAH, VAL Display)
■ User Input Description
Bars to Analyze
Value Area %
POC Line Color
VAH/VAL Line Color
Value Area Transparency
Enable HVN/LVN Detection
Number of Nodes to Show
Show Summary Table
Table Position
Each option controls the indicator's visual presentation and analysis scope and is not related to signal generation.
■ Repaint
Does not use future data
Calculations are only performed within the specified historical interval
Past bar values remain unchanged
Therefore, no repaint is performed.
However, during real-time bar progress, values are updated normally as the analysis interval moves.
■ Indicator Purpose
This tool is used to explore market structure based on volume distribution.
It helps observe whether volume is concentrated or sparse in a specific price range,
and what the structure might mean in the current market context.
■ Indicator Limitations
The tool does not perform the following:
It does not predict future price movements.
It does not provide buy or sell timing.
It does not guarantee any trading results.
The indicator simply provides structural reference information.
■ Limitations and Cautions
The indicator does not guarantee specific trading results.
Past volume structures may be interpreted differently depending on the situation.
It is best used as a supplementary structural analysis tool, not as a sole decision-making tool.
It is recommended to use it in conjunction with other analytical techniques.
■ Technical supplementary explanation of the 'magnet effect' of POC
POC is the most heavily traded area in the market,
which indicates that the price range has been a point of equilibrium among market participants.
As a result,
■ Price movements that retest or converge to this area may be observed.
This is a structural trend that occurs because it's the price range where supply and demand intersect most actively.
■ However, this is a statistical trend or a characteristic of market structure and does not guarantee future direction.
Therefore, the expression Therefore, the expression "tends to move like a magnet" is a term used by some traders to describe the structural flow of the market, and should not be taken with absolute certainty.
Premarket Break 5m (Close Above/Below Prem High/Low)//@version=5
indicator("Premarket Break 5m (Close Above/Below Prem High/Low)", overlay = true)
// === SETTINGS ===
premarketSession = input.session("0400-0930", "Premarket Session (ET)")
regularSession = input.session("0930-1600", "Regular Session (ET)")
// === HELPERS ===
isNewDay = ta.change(time("D")) != 0
// Track premarket high/low each day
var float pmHigh = na
var float pmLow = na
// Reset at the start of each new day
if isNewDay
pmHigh := na
pmLow := na
// Are we inside premarket session?
inPremarket = not na(time(timeframe.period, premarketSession, "America/New_York"))
// Update premarket high/low during premarket
if inPremarket
pmHigh := na(pmHigh) ? high : math.max(pmHigh, high)
pmLow := na(pmLow) ? low : math.min(pmLow, low)
// Are we inside regular session?
inRegular = not na(time(timeframe.period, regularSession, "America/New_York"))
// === SIGNALS: 5m close above/below premarket high/low ===
// Require previous close to be on the other side to avoid spam
bullBreak = inRegular and not na(pmHigh) and close > pmHigh and close <= pmHigh
bearBreak = inRegular and not na(pmLow) and close < pmLow and close >= pmLow
// === PLOTS ===
plot(pmHigh, title = "Premarket High", color = color.new(color.green, 0), linewidth = 2)
plot(pmLow, title = "Premarket Low", color = color.new(color.red, 0), linewidth = 2)
plotshape(bullBreak, title = "Close Above Prem High", style = shape.labelup,
text = "Close > PM High", location = location.belowbar, size = size.tiny)
plotshape(bearBreak, title = "Close Below Prem Low", style = shape.labeldown,
text = "Close < PM Low", location = location.abovebar, size = size.tiny)
// === ALERTS ===
// These fire once per bar close when the condition is true
if bullBreak
alert("5m candle CLOSED above Premarket High.", alert.freq_once_per_bar_close)
if bearBreak
alert("5m candle CLOSED below Premarket Low.", alert.freq_once_per_bar_close)
WaveTrend with MFI and Auto/Manual HTFWaveTrend with MFI and Auto/Manual HTF
WaveTrend with MFI and Auto/Manual HTF
WaveTrend with MFI and Auto/Manual HTF
WaveTrend with MFI and Auto/Manual HTF
Macro Timing Window Signal ⏱️ Macro Timing Window Signal – Check/X Indicator
This indicator displays a green check mark ✔️ or red X ✖️ in the top-right corner of the chart based on a repeating macro time cycle that divides every hour into active and inactive windows.
How it works:
• ✔️ Green Check (Active Macro Window):
Appears from xx:45 → xx:15 of the next hour (30-minute macro window).
• ✖️ Red X (Inactive Macro Window):
Appears from xx:16 → xx:44 (mid-hour cooldown window).
• Optional flash signal at the exact macro flip points (xx:45, xx:00, xx:15) to highlight transitions.
• Supports sound alerts so you never miss the start or end of a macro window.
This tool is designed for traders who incorporate macro-driven time cycles, liquidity sessions, or algorithmic delivery windows into their strategy.
The display is fixed on-screen, clean, and unobtrusive, ensuring instant recognition of the current macro state without cluttering the chart.
BTC - FRIC: Friction & Realized Intensity CompositeTitle: BTC - FRIC: Friction & Realized Intensity Composite
Data: IntoTheBlock
Overview & Philosophy
FRIC (Friction & Realized Intensity Composite) is a specialized on-chain oscillator designed to visualize the "psychological battlegrounds" of the Bitcoin network.
Most indicators focus on Price or Momentum. FRIC focuses on Cost Basis. It operates on the thesis that the market experiences maximum "Friction" when the price revisits the cost basis of a large number of holders. These are the zones where investors are emotionally triggered to react—either to exit "at breakeven" after a loss (creating resistance) or to defend their entry (creating support).
This indicator answers two questions simultaneously:
Intensity: Is the market hitting a Wall (High Friction) or a Vacuum (Low Friction)?
Valuation: Is this happening at a market bottom or a top?
The "Alpha" (Wall vs. Vacuum)
Why we visualize both extremes: This indicator filters out the "Noise" (the middle range) to show you only the statistically significant anomalies.
1. The "Wall" (Positive Z-Score Bars)
What it is : A statistically high number of addresses are at breakeven.
The Implication : Expect a grind. Price action often slows down or reverses here because "Bag Holders" are selling into strength to get out flat, or new buyers are establishing a floor.
2. The "Vacuum" (Negative Z-Score Bars)
What it is : A statistically low number of addresses are at breakeven.
The Implication : Expect acceleration. The price is moving through a zone where very few people have a cost basis. With no natural "breakeven supply" to block the path, price often enters Price Discovery or Free Fall.
Methodology
The indicator constructs a composite view using two premium metrics from IntoTheBlock:
1. The "Activity" (Friction Z-Score): We utilize the Breakeven Addresses Percentage. This measures the % of all addresses where the current price equals the average cost basis.
- Normalization: We apply a rolling Z-Score (Standard Deviation) to this data.
- The Filter: We hide the "Noise" (e.g., Z-Scores between -2.0 and +2.0) to isolate only the events where market structure is truly stretched.
2. The "Context" (Valuation Heatmap): We utilize the MVRV Ratio to color-code the friction.
Deep Value (< 1.0): Price is below the average "Fair Value" of the network.
Overheated (> 3.0): Price is significantly extended above the "Fair Value."
Credit: The MVRV Ratio was originally conceptualized by Murad Mahmudov and David Puell. It remains one of the gold standards for detecting Bitcoin's fair value deviations.
How to Read the Indicator
The chart is visualized as a Noise-Filtered Heatmap.
1. The Bars (Intensity)
Bars Above Zero: High Friction (Congestion). The market is fighting through a supply wall.
Bars Below Zero: Low Friction (Vacuum). The market is accelerating through thin air.
Gray/Ghosted: Noise. Routine market activity; no significant signal.
2. The Colors (Valuation Context) The color tells you why the friction is happening:
🟦 Deep Blue (The "Capitulation Buy"):
Signal: High Friction + Low MVRV.
Meaning : Investors are panic-selling at breakeven/loss, but the asset is fundamentally undervalued. Historically, these are high-conviction cycle bottoms.
🟥 Dark Red (The "FOMO Sell"):
Signal: High Friction + High MVRV.
Meaning : Investors are churning at high valuations. Smart money is often distributing to late retail arrivers. Historically marks cycle tops.
🟨 Yellow/Orange (The "Trend Battle"):
Signal: High Friction + Neutral MVRV.
Meaning : The market is contesting a level within a trend (e.g., a mid-cycle correction).
Visual Guide & Features
10-Zone Heatmap: A granular color gradient that shifts from Dark Blue (Deep Value) → Sky Blue → Grey (Neutral) → Orange → Dark Red (Top).
Noise Filter
A unique feature that "ghosts out" insignificant data, leaving only the statistically relevant signals visible.
Data Check Monitor
A diagnostic table in the bottom-right corner that confirms the live connection to IntoTheBlock data streams and displays the current regime in real-time.
Settings
Lookback Period (Default: 90): The rolling window used for the Z-Score calculation. Shortening this (e.g., to 30) makes the indicator more sensitive to local volatility; lengthening it (e.g., to 365) aligns it with macro cycles.
Noise Threshold (Default: 2.0): The strictness of the filter. Only friction events exceeding this Z-Score will be highlighted in full color.
Show Status Table : Toggles the on-screen dashboard.
Disclaimer
This script is for research and educational purposes only. It relies on third-party on-chain data which may be subject to latency or revision. Past performance of on-chain metrics does not guarantee future price action.
Tags
bitcoin, btc, on-chain, mvrv, intotheblock, friction, z-score, fundamental, valuation, cycle
Ellipse Price Action Indicator v3Successful Trade Setup Using Ellipse Price Action Indicator (EPAI) 🔥
With the help of the Ellipse Price Action Indicator, this bearish trade setup played out perfectly.
EPAI generated a Sell Signal with a red arrow.
According to the EPAI method:
🔹 If price makes a new high on the next candle — add one more unit.
🔹 Every time a new high forms, add one more unit per candle.
🔹 Exit all units at the Moving Average (MA) — this is the core risk-controlled exit rule.
This is why EPAI consistently provides successful trade setups when followed with discipline.
⚠ Important Notice — Last Chance!
The Ellipse Price Action Indicator (EPAI) will soon become PRIVATE.
Access will be restricted only to Premium Members.
✅ First 25 subscribers can use this indicator absolutely FREE.
After that, it will not be available publicly.
Zero Lag EMA_BhavatThis is a test script for zelma. This is intended to cut down the lag from traditional ema indicators.
YSD RSIYSD RSI
This indicator is an enhanced version of the traditional Relative Strength Index (RSI), designed to provide deeper insight into market momentum and trend quality. While the classic RSI focuses primarily on the ratio of recent gains to losses, this strengthened variant incorporates additional layers of analysis to capture subtler shifts in price behavior. By applying refined smoothing techniques, integrating volatility awareness, and emphasizing the consistency of directional movement, the indicator aims to reduce noise and highlight more reliable momentum signals. As a result, it not only identifies overbought and oversold conditions with greater precision but also reacts more intelligently to changing market environments. Traders can use this improved RSI to detect early trend reversals, filter out false signals, and gain a more comprehensive understanding of underlying price dynamics compared to the standard RSI.
BuySell box📌 The BuySell Box visualizes how volume contributes to buy, sell, or neutral flow within a specific price range.
Based on the high-low-close structure of each candlestick and the volume distribution ratio, this indicator segments price ranges to help you understand how volume moves within a specific range.
This indicator provides the following visualizations:
Boxes indicating dominant buy and sell volume zones
Percentage labels showing volume distribution
Automatic reconfiguration of zones when a status change occurs
Direction change detection using RSI-based auxiliary values (div_t)
■ Calculation Logic
Instead of relying solely on raw volume, this indicator uses the internal structure of the candlestick (the high-close-low ratio) to distinguish between buy and sell volume.
● Calculating Volume Distribution
For each candle:
Type Formula
vol_cell (high - close) / (high - low) × volume
vol_buy (close - low) / (high - low) × volume
Cumulative average of the absolute candle body, adjusted using the average spread box_size_multiplier
This method estimates the distribution of volume using the relative positions of the candles, which serves as the basis for creating the volume boxes.
■ State Transition Detection Logic
This indicator detects changes using the div_t value (div_t = RSI × 5 - 250).
● Conditions
div_t > +50 → item_top state
div_t < −50 → item_bot state
When the state changes, the previous box closes and a new range begins.
This allows the box to accumulate and display volume movement from the moment the state transitions until the next transition.
■ Box Creation Process
When a state transition occurs, the following actions are executed:
● 1) Reset Range
Store Base Price (Low or High)
Store Time
Reset Accumulated Buy/Sell Volume
● 2) Create Box
If i_show_volpower = true, the indicator creates the following:
● Bottom Area (item_bot)
Two types of buy boxes (outer and inner)
Two types of cell boxes (outer and inner)
Volume Ratio Label
Dotted Line (low_line)
● Top Area (item_top)
Two types of buy boxes (outer and inner)
Two types of cell boxes (outer and inner)
Volume Ratio Label
Dotted Line (high_line)
■ Box Expansion Logic (Accumulation Process)
New volumes are continuously added while the state remains unchanged, and the box width (right) automatically expands.
Cumulative Volume (total_vol)
Cumulative Buy/Sell Volume
Recalculated Percentage Ratio
Box expands based on updated percentage
Labels update their text and position in real time.
This structure visually compares how buy and sell volumes accumulate across the entire range.
■ Visual Components
● Box
Buy Box (based on i_buy_color)
Sell Box (based on i_sell_color)
Neutral tone applied to border or label text
Transparency can be adjusted via i_box_transp
● Label
Displays cumulative buy/sell volume percentages
Format: "buy(x) − y%", "sell(x) − y%"
Text color adjusts based on relative dominance.
● Line
Dotted reference lines anchored to high or low values
Helps visualize the structure of each observed range.
■ Input Parameters
Parameter Description
Buy/Sell Volume %: Enables volume-based box visualization.
Past: Determines whether previous boxes remain visible.
Box Size: Controls the vertical resizing of the box.
Buy/Sell/Neutral: Defines the color scheme for the volume areas.
Box Transparency: Controls the transparency of the box background.
■ Repaint Behavior
During live candles, volume accumulation and label updates may dynamically change.
However, confirmed historical candles are not recalculated or modified.
Box and label updates reflect ongoing range development, not redrawing completed data.
Box creation or deletion occurs only during state transitions, and previous results remain unchanged.
■ Purpose
Presents the cumulative volume distribution during strong directional phases.
Visualizes relative contributions within defined ranges.
Segments market behavior to identify structural changes.
■ Notes and Limitations
This indicator does not predict market direction or provide guaranteed results.
div_t is derived from the RSI and is not intended for overbought/oversold interpretation.
The volume distribution (vol_buy / vol_sell) is simplified and may not represent the full order flow details.
Excessive number of boxes/labels may result in reaching the object limit.
Box lengths and ratio labels may continue to update on real-time candlesticks until the range closes.
Multi-TF Quarter & Session Candle Indicator-aamirlang [Beta]Key Features:
Quarter Identification: It detects 90-minute HTF candles on 5-minute charts and labels them as Q1, Q2, Q3, Q4 for clear session tracking.
Session Identification (Asia, London, NY, PM): Identifies sessions on 15-minute and 60-minute charts and labels them automatically. So that you can visually see whats happening on Higher TimeFrame.
CISD Detection: Highlights Critical Swing Directions to pinpoint potential market reversals.
Sweep Detection: Automatically draws sweeps to indicate price levels tested or broken.
Multi-Timeframe Support: Works seamlessly on 1m, 5m, 15m, 60m, Daily, Weekly, and Monthly charts.
How It Works:
If you do not see higher TF Candles please enable them from the Menu.
Detects and prints HTF candle and automatically detects Quarters and Sessions.
Automatically maps 5m to 90m (Quarter of a Session) HTF and labels Q1/Q2/Q3/Q4 to each candle so that you can visually see how a session is going on and what to expect in comming sessions.
Automatically detects a Session and labels sessions Asia/London/NY/PM.
When working in Higher TF other that 4H, It prints Daily candles by labeling them.
Other timeframes show normal candle time or standard D/W/M formatting.
CISD module identifies critical swing directions.
Sweeps are drawn automatically to highlight tested levels.
By using this Indicator:
Quickly identify session and quarter candles without manual calculations.
Detect intraday swing directions and potential reversal zones.
Visualize volatility for better risk management.
Perfect for intraday, swing, and long-term analysis.
Credits:
Credit to: @traderdaye for Quarterly theory.
and to all the beautiful people on Tradingview who contributed.
Note:
This is free and version so it may contain error or bugs please leave a comment for any bugs, suggestions and queries.
Enjoy Trading.
Heatmap Block Box📌 Heatmap Block Box is a structural analysis tool that visualizes price ranges as box-shaped zones derived from recent swing high/low structures.
The indicator tracks where market swing transitions have occurred and highlights those ranges as potential areas where price previously showed notable reactions.
This tool does not generate buy or sell signals,
and it does not attempt to forecast or guarantee any future price movement.
All visual elements are designed solely to support structural interpretation.
■ Calculation Logic
The indicator supports three Logic Modes to detect structural changes in different ways:
1) Default Mode — Pivot-Based Swing Detection
Uses TradingView’s built-in pivot logic
Identifies swing highs/lows based on left/right bar count
2) Adaptive Mode — ATR-Based Volatility Structure
Detects swings when recent price movement exceeds ATR × Multiplier
Automatically adapts to volatility conditions
3) Hybrid Mode — Combined Structure Detection
Integrates both Pivot and Adaptive logic
Captures a wider range of structural swing points
■ Block Box Generation Rules
Bearish Block
A red bearish box is drawn when all of the following conditions are met:
A recent swing high exists
The current bar’s high/close is below the previous swing high
Close < Open
Close finishes below the recentLow
→ A red box is drawn from the recent swing High to Low range
Bullish Block
A green bullish box is drawn when all of the following conditions are met:
A recent swing low exists
The current bar’s low/close is above the previous swing low
Close > Open
Close finishes above the recentHigh
→ A green box is drawn from the recent swing Low to High range
■ Visual Elements
Block Zones
Bearish Block → user-defined red color
Bullish Block → user-defined green color
Adjustable opacity for clearer chart integration
Signal Labels (Optional)
Displays a label at the moment a block forms
Labels represent structural events only, not trading signals
■ Input Parameters (Clear & Technical)
Logic Mode
Choose swing detection method: Default / Adaptive / Hybrid
Left Bar Count / Right Bar Count
Number of bars examined on each side for pivot-based swing detection
Show Signal Labels
Enable/disable structural event labels
Bearish Box Color / Bullish Box Color
User-defined colors for each block type
Box Opacity
Controls transparency of the block background
Adaptive ATR Multiplier
Used in Adaptive and Hybrid modes
A swing is identified when price movement exceeds ATR × Multiplier
■ Repaint Behavior
Pivot-based swing highs/lows are tentative on the currently forming bar
and may update until the bar is fully confirmed.
This is normal behavior for pivot logic and not a form of repainting that uses future data.
Adaptive mode does not repaint
Hybrid mode inherits the characteristics of both pivot and adaptive logic
The indicator does not use future data,
and confirmed blocks in the past do not change once finalized.
■ Purpose of the Indicator
Heatmap Block Box is intended as a market structure visualization tool,
helping users observe areas where swing-based structural shifts previously occurred.
It assists with:
Identifying key price ranges influenced by structural shifts
Highlighting concentration zones where price showed prior reactions
Supporting structural interpretation through clear visual elements
■ Indicator Limitations
The tool does not perform the following:
It does not predict future price movements.
It does not provide buy or sell timing.
It does not guarantee any trading results.
■ Notes & Limitations
Swing structure can vary depending on volatility and bar progression
The indicator should not be used as a standalone decision tool
It is recommended to combine it with other forms of analysis
Labels indicate structural events only, not actionable signals
Regression value📌 The Regression Value Indicator visually displays the linear regression value calculated based on the price flow of the selected period on the chart, and simply extends the regression slope forward on the chart.
It does not determine market direction or buy/sell signals or guarantee specific results, and is a visual tool for reference in price flow interpretation.
■ Unique Logic Description
The indicator operates based on the following two elements:
1) Linear Regression Value Calculation: The
linear regression base value is calculated using the closing prices for the user-specified period (regression value (Bars)).
Based on the change in the slope of the regression line, a line is generated that continuously connects the currently calculated regression flow forward.
This function is for visually confirming the calculated regression slope and
does not indicate or evaluate the price.
2) Moving Average: Auxiliary Visualization: You can refer to the positional relationship between the regression flow and the moving average
by displaying the Fast / Slow moving average together . The moving average is made transparent to minimize overlap with the main visual element.
■ Purpose of the indicator
Easily check the current regression reference value and slope flow
Visually understand the morphological flow in which direction the regression slope is continuing
Refer to the relationship with the moving average to supplement the market environment
Use as a visualization tool to assist chart analysis without providing a specific signal
■ Visual components
✔ Regression line extension line This displays
the value calculated based on the regression reference value and slope
forward by the user-specified length.
The extended line section is composed of an independent line.new() structure
to linearly show the regression-based flow.
Solid / Dashed / Dotted style and color/thickness can be adjusted.
✔ Moving average display
Fast Fast MA
Gentle Slow MA
This is for reference when analyzing regression flow, and does not affect the core functions of the indicator.
■ Description of user input options (focused on accurate functions)
▸ Regression value (Bars)
Set the period to be used for calculating the regression value .
Calculate the regression reference value for the period, and connect the calculated slopes at equal intervals
to display the line forward by the user-specified length.
▸ Fast MA Length / Slow MA Length
Set the moving average calculation period.
This is an auxiliary element for checking the trend, and does not directly affect the regression extension calculation.
▸ Line Width / Color / Style
Adjust the visual form of the extended line.
Users can freely change it for chart readability.
■ Repaint Information:
The regression reference value is recalculated each time the closing price of the current bar changes, so
the value may change in the current bar that is in progress.
This is a characteristic of the regression calculation, not a repaint that modifies past values.
The extended line is also generated solely based on the regression slope at the time of calculation, and
the extended line of the bar that has already passed does not change.
■ Notes on Use:
This indicator is a tool that simply visually displays the regression-based flow and
does not suggest price levels, directions, or performance.
It does not replace trading decisions and
is best interpreted comprehensively alongside other indicators or market structure.
Regression-based calculations only reflect data characteristics and
do not include external factors such as market volatility and news.
■ Summary:
It calculates the regression reference value and slope for a specific period and simply extends the slope at equal intervals.
It does not imply directionality, but is a visual tool for analysis reference and provides a moving average. It is
user-configurable (length, color, style). Past values are calculated in a structure that is not modified.
window//@version=5
indicator("Smart Money Time Windows (GMT+3:30)", overlay=true)
// ✅ Window 1 — 08:30 to 09:05 Tehran Time
w1 = time(timeframe.period, "0830-0905", "Asia/Tehran")
// ✅ Window 2 — 13:50 to 14:40 Tehran Time
w2 = time(timeframe.period, "1350-1440", "Asia/Tehran")
// ✅ Window 3 — 17:15 to 18:00 Tehran Time
w3 = time(timeframe.period, "1715-1800", "Asia/Tehran")
bgcolor(not na(w1) ? color.new(color.blue, 85) : na)
bgcolor(not na(w2) ? color.new(color.orange, 85) : na)
bgcolor(not na(w3) ? color.new(color.purple, 85) : na)
FlowTrinity — Crypto Dominance Rotation IndexFlowTrinity — Crypto Dominance Rotation Index
(Tracks BTC / Stablecoin / Altcoin dominance flows with standardized oscillators)
⚪ Overview
FlowTrinity decomposes total crypto market structure into three capital-flow regimes — BTC dominance, Stablecoin dominance, and Altcoin dominance — each normalized into oscillator form. Additionally, a fourth histogram tracks Total Market Cap expansion/contraction relative to BTC+Stable capital, revealing underlying rotation pressure not visible in raw dominance charts.
Each component is standardized through SMA/STD normalization, producing smoothed 0–100 style oscillations that highlight overbought/oversold rotation extremes, risk-on/risk-off transitions, and capital cycle inflection zones.
⚪ Flow Components
Stablecoin Dominance Oscillator —White line
Measures the combined USDT + USDC share of market dominance.
High values indicate increased hedging behavior or sidelined capital.
Low values coincide with renewed risk appetite and capital deployment into crypto assets.
Altcoin Dominance Oscillator — Orange Line
Tracks the share of liquidity rotating into altcoins (Total – BTC – Stable).
Rising values indicate broad market expansion and speculative activity.
Falling values reflect flight-to-safety or concentration back into majors.
BTC Dominance Oscillator — Purple line(off by default
Normalized BTC dominance revealing transitions between Bitcoin-led markets and altcoin-led cycles. Useful for identifying BTC absorption phases vs. altcoins dispersion regimes.
Total–BTC–Stable MarketCap Difference Histogram — histogram
A normalized histogram of total market cap change minus BTC+Stable market cap change.
• Positive → altcoin segment expanding
• Negative → capital retreating into BTC or stables
Acts as a structural layer confirming or contradicting dominance-based signals.
Normalization Logic
All flows use SMA + standard deviation scaling (lookback 7 / smoothing 7), enabling consistent comparison across unrelated dominance and market-cap metrics.
⚪ Use Cases
• Identify shifts between BTC-led and alt-led markets
• Detect early signs of liquidity rotation
• If Stablecoin OSC is oversold, liquidity may soon rotate to BTC or Altcoins, signaling potential price moves.
• If Stablecoin OSC is overbought and Altcoin OSC is oversold, it can indicate an early buying opportunity in Altcoins.
• Watching these oscillator positions helps spot early market rotations and plan entries or exits.
snapshot
Disclaimer
This indicator is for educational and informational purposes only and does not constitute financial advice or investment guidance. Cryptocurrency trading involves significant risk; you are solely responsible for your trading decisions, based on your financial objectives and risk tolerance. The author assumes no liability for any losses arising from the use of this tool.
Time-Candle Sync — The Book of TIME by Nancy_PelosiTime-Candle Sync is a precision time-alignment framework designed to synchronize candle opens, closes, and session transitions across multiple timeframes and custom trading windows.
Built to work hand-in-hand with Nancy Pelosi’s Book of Time, this tool visualizes how market structure responds to time itself — not indicators, not signals, but when price is allowed to move.
By mapping higher-timeframe boundaries and user-defined time segments directly onto lower-timeframe candles, Time-Candle Sync helps traders identify:
True session transitions
Time-based inflection points
Candle alignment across multiple timeframes
Periods of increased probability and structural change
Custom Time Control
The script supports fully customizable time windows, allowing users to define specific market sessions, macro periods, or personal trading windows. All dividers are anchored to the selected chart timezone to ensure accurate alignment regardless of asset or exchange.
Designed for Time-Aware Trading
This indicator does not generate buy or sell signals. Instead, it provides structural context so traders can:
Align executions with time-based events
Avoid trading during low-probability periods
Confirm when candles are synchronized across timeframes
Intended Use
Time-Candle Sync is best used alongside:
Session-based trading
Market structure concepts
Time-driven frameworks such as The Book of Time
Time controls price access.
Candles reveal when that access is granted.
Credit Spread RegimeThe Credit Market as Economic Barometer
Credit spreads are among the most reliable leading indicators of economic stress. When corporations borrow money by issuing bonds, investors demand a premium above the risk-free Treasury rate to compensate for the possibility of default. This premium, known as the credit spread, fluctuates based on perceptions of economic health, corporate profitability, and systemic risk.
The relationship between credit spreads and economic activity has been studied extensively. Two papers form the foundation of this indicator. Pierre Collin-Dufresne, Robert Goldstein, and Spencer Martin published their influential 2001 paper in the Journal of Finance, documenting that credit spread changes are driven by factors beyond firm-specific credit quality. They found that a substantial portion of spread variation is explained by market-wide factors, suggesting credit spreads contain information about aggregate economic conditions.
Simon Gilchrist and Egon Zakrajsek extended this research in their 2012 American Economic Review paper, introducing the concept of the Excess Bond Premium. They demonstrated that the component of credit spreads not explained by default risk alone is a powerful predictor of future economic activity. Elevated excess spreads precede recessions with remarkable consistency.
What Credit Spreads Reveal
Credit spreads measure the difference in yield between corporate bonds and Treasury securities of similar maturity. High yield bonds, also called junk bonds, carry ratings below investment grade and offer higher yields to compensate for greater default risk. Investment grade bonds have lower yields because the probability of default is smaller.
The spread between high yield and investment grade bonds is particularly informative. When this spread widens, investors are demanding significantly more compensation for taking on credit risk. This typically indicates deteriorating economic expectations, tighter financial conditions, or increasing risk aversion. When the spread narrows, investors are comfortable accepting lower premiums, signaling confidence in corporate health.
The Gilchrist-Zakrajsek research showed that credit spreads contain two distinct components. The first is the expected default component, which reflects the probability-weighted cost of potential defaults based on corporate fundamentals. The second is the excess bond premium, which captures additional compensation demanded beyond expected defaults. This excess premium rises when investor risk appetite declines and financial conditions tighten.
The Implementation Approach
This indicator uses actual option-adjusted spread data from the Federal Reserve Economic Database (FRED), available directly in TradingView. The ICE BofA indices represent the industry standard for measuring corporate bond spreads.
The primary data sources are FRED:BAMLH0A0HYM2, the ICE BofA US High Yield Index Option-Adjusted Spread, and FRED:BAMLC0A0CM, the ICE BofA US Corporate Index Option-Adjusted Spread for investment grade bonds. These indices measure the spread of corporate bonds over Treasury securities of similar duration, expressed in basis points.
Option-adjusted spreads account for embedded options in corporate bonds, providing a cleaner measure of credit risk than simple yield spreads. The methodology developed by ICE BofA is widely used by institutional investors and central banks for monitoring credit conditions.
The indicator offers two modes. The HY-IG excess spread mode calculates the difference between high yield and investment grade spreads, isolating the pure compensation for below-investment-grade credit risk. This measure is less affected by broad interest rate movements. The HY-only mode tracks the absolute high yield spread, capturing both credit risk and the overall level of risk premiums in the market.
Interpreting the Regimes
Credit conditions are classified into four regimes based on Z-scores calculated from the spread proxy.
The Stress regime occurs when spreads reach extreme levels, typically above a Z-score of 2.0. At this point, credit markets are pricing in significant default risk and economic deterioration. Historically, stress regimes have coincided with recessions, financial crises, and major market dislocations. The 2008 financial crisis, the 2011 European debt crisis, the 2016 commodity collapse, and the 2020 pandemic all triggered credit stress regimes.
The Elevated regime, between Z-scores of 1.0 and 2.0, indicates above-normal risk premiums. Credit conditions are tightening. This often occurs in the build-up to stress events or during periods of uncertainty. Risk management should be heightened, and exposure to credit-sensitive assets may be reduced.
The Normal regime covers Z-scores between -1.0 and 1.0. This represents typical credit conditions where spreads fluctuate around historical averages. Standard investment approaches are appropriate.
The Low regime occurs when spreads are compressed below a Z-score of -1.0. Investors are accepting below-average compensation for credit risk. This can indicate complacency, strong economic confidence, or excessive risk-taking. While often associated with favorable conditions, extremely tight spreads sometimes precede sudden reversals.
Credit Cycle Dynamics
Beyond static regime classification, the indicator tracks the direction and acceleration of spread movements. This reveals where credit markets stand in the credit cycle.
The Deteriorating phase occurs when spreads are elevated and continuing to widen. Credit conditions are actively worsening. This phase often precedes or coincides with economic downturns.
The Recovering phase occurs when spreads are elevated but beginning to narrow. The worst may be over. Credit conditions are improving from stressed levels. This phase often accompanies the early stages of economic recovery.
The Tightening phase occurs when spreads are low and continuing to compress. Credit conditions are very favorable and improving further. This typically occurs during strong economic expansions but may signal building complacency.
The Loosening phase occurs when spreads are low but beginning to widen from compressed levels. The extremely favorable conditions may be normalizing. This can be an early warning of changing sentiment.
Relationship to Economic Activity
The predictive power of credit spreads for economic activity is well-documented. Gilchrist and Zakrajsek found that the excess bond premium predicts GDP growth, industrial production, and unemployment rates over horizons of one to four quarters.
When credit spreads spike, the cost of corporate borrowing increases. Companies may delay or cancel investment projects. Reduced investment leads to slower growth and eventually higher unemployment. The transmission mechanism runs from financial conditions to real economic activity.
Conversely, tight credit spreads lower borrowing costs and encourage investment. Easy credit conditions support economic expansion. However, excessively tight spreads may encourage over-leveraging, planting seeds for future stress.
Practical Application
For equity investors, credit spreads provide context for market risk. Equities and credit often move together because both reflect corporate health. Rising credit spreads typically accompany falling stock prices. Extremely wide spreads historically have coincided with equity market bottoms, though timing the reversal remains challenging.
For fixed income investors, spread regimes guide sector allocation decisions. During stress regimes, flight to quality favors Treasuries over corporates. During low regimes, spread compression may offer limited additional return for credit risk, suggesting caution on high yield.
For macro traders, credit spreads complement other indicators of financial conditions. Credit stress often leads equity volatility, providing an early warning signal. Cross-asset strategies may use credit regime as a filter for position sizing.
Limitations and Considerations
FRED data updates with a lag, typically one business day for the ICE BofA indices. For intraday trading decisions, more current proxies may be necessary. The data is most reliable on daily timeframes.
Credit spreads can remain at extreme levels for extended periods. Mean reversion signals indicate elevated probability of normalization but do not guarantee timing. The 2008 crisis saw spreads remain elevated for many months before normalizing.
The indicator is calibrated for US credit markets. Application to other regions would require different data sources such as European or Asian credit indices. The relationship between spreads and subsequent economic activity may vary across market cycles and structural regimes.
References
Collin-Dufresne, P., Goldstein, R.S., and Martin, J.S. (2001). The Determinants of Credit Spread Changes. Journal of Finance, 56(6), 2177-2207.
Gilchrist, S., and Zakrajsek, E. (2012). Credit Spreads and Business Cycle Fluctuations. American Economic Review, 102(4), 1692-1720.
Krishnamurthy, A., and Muir, T. (2017). How Credit Cycles across a Financial Crisis. Working Paper, Stanford University.






















