RRG Style RS & Momentum (vs Benchmark) by AKM
## What this indicator does
This indicator is an **RRG‑style Relative Strength & Momentum tool**.
It compares the current symbol to a chosen benchmark (e.g. NIFTY / NIFTY 500) and plots:
- **RS‑Ratio**: Out/under‑performance of the symbol vs the benchmark, normalized around 100.
- **RS‑Momentum**: Momentum of that relative strength, also normalized around 100.
- **RS‑Signal**: A smoothed signal line of RS‑Ratio (EMA of RS‑Ratio).
Using these two axes (RS‑Ratio and RS‑Momentum), each bar is classified into one of four **RRG‑style quadrants**:
- **LEADING** – RS‑Ratio > 100 and RS‑Momentum > 100
- **WEAKENING** – RS‑Ratio > 100 and RS‑Momentum < 100
- **LAGGING** – RS‑Ratio < 100 and RS‑Momentum < 100
- **IMPROVING** – RS‑Ratio < 100 and RS‑Momentum > 100
The chart background is color‑coded by quadrant, and a label on the center (100) line shows the current zone name (LEADING / WEAKENING / LAGGING / IMPROVING) in real time.
> **Concept credit:**
> The conceptual framework of “Relative Strength vs Momentum” in four quadrants (Leading, Weakening, Lagging, Improving) is inspired by **Relative Rotation Graphs® (RRG®)**, created by **Julius de Kempenaer** and commercialized through RRG Research and platforms like Bloomberg, StockCharts, Optuma, etc.
> This script is only an RRG‑inspired *1‑symbol vs benchmark* implementation inside Pine, not an official RRG product.
***
## Inputs
- **Benchmark symbol**:
Default `NSE:NIFTY`. You can set `NSE:NIFTY500`, `NSE:BANKNIFTY`, sector indices, etc.
- **RS base length (`rsLen`)**:
EMA length for smoothing the raw price ratio (symbol / benchmark). Lower = more sensitive, higher = smoother.
- **Smoothing length (`smoothLen`)**:
Secondary smoothing for RS‑Ratio. Default 14.
- **Signal length (`signalLen`)**:
EMA length for the RS‑Signal line (EMA of RS‑Ratio).
- **Momentum length (`momLen`)**:
Lookback for optional ROC‑based momentum.
- **Use ROC‑based momentum**:
If `false` (default): RS‑Momentum is computed as RS‑Ratio / EMA(RS‑Ratio) × 100 (ratio‑style).
If `true`: RS‑Momentum uses ROC(RS‑Ratio, momLen) + 100 (ROC‑style).
- **Show quadrant background**:
Toggles colored background by quadrant.
- **Show zone name on background**:
Shows a label on the 100‑line with the current quadrant name.
***
## How to read it
There is a horizontal center line at **100**:
- **RS‑Ratio > 100** → symbol is outperforming the benchmark.
- **RS‑Ratio < 100** → symbol is underperforming the benchmark.
- **RS‑Momentum > 100** → relative strength is improving (momentum picking up).
- **RS‑Momentum < 100** → relative strength is fading.
The four zones behave similar to classic RRG quadrants:
- **LEADING (lime/green background)**
- RS‑Ratio > 100 and RS‑Momentum > 100.
- Symbol is **stronger than the benchmark and momentum is strong**.
- This is where leadership typically resides.
- **WEAKENING (orange background)**
- RS‑Ratio > 100 and RS‑Momentum < 100.
- Still outperforming, but momentum is rolling over.
- Late‑stage leadership / time to be more selective and manage exits.
- **LAGGING (red background)**
- RS‑Ratio < 100 and RS‑Momentum < 100.
- Underperforming with weak momentum.
- Worst zone for aggressive longs.
- **IMPROVING (green background)**
- RS‑Ratio < 100 and RS‑Momentum > 100.
- Still weaker than benchmark, but momentum is improving.
- Early turnaround zone where future leaders often start.
The **white RS‑Signal line** is just a smoother of RS‑Ratio, helpful to visually see RS trend and crossovers.
***
## Practical trading use (RRG‑style workflow)
This indicator is designed as a **selection and context filter**, not a stand‑alone entry/exit system.
### 1. Sector and stock selection
1. Apply it to **sector indices** vs a broad benchmark (e.g., Nifty IT vs NIFTY 500, Nifty Auto vs NIFTY 500).
2. Focus on sectors where:
- The zone label is **IMPROVING → LEADING** over recent bars.
- RS‑Ratio is rising and staying above 100 in LEADING.
3. Then, on individual stocks inside those strong sectors, use the same benchmark and indicator:
- Prefer stocks that are also in **LEADING** (or just moved from **IMPROVING** into **LEADING**).
This recreates the essence of using RRG to find sectors/stocks with strong relative strength and momentum.
### 2. Combining with your price setup
Once a stock/sector passes the RS filter:
- Use your own price‑action / indicator rules for entries (EMA trends, VWAP pullbacks, breakouts, etc.).
- Example for longs:
- Only take long setups when:
- Sector index AND stock are in **LEADING** or newly from **IMPROVING → LEADING**, and
- Price is in an uptrend on your main chart (e.g., above 20/50 EMA, higher highs and higher lows).
### 3. Managing exits and rotation
- When a held symbol shifts from **LEADING → WEAKENING → LAGGING** and RS‑Momentum stays < 100, consider:
- Tightening stops.
- Partially booking profits.
- Rotating into other names still in LEADING / IMPROVING.
This mirrors how many investors use “sector rotation” and RRG to stay in stronger groups and reduce exposure in weakening ones.
***
## Disclaimers
- This script is for **educational and analytical purposes only** and is **not financial advice or a recommendation** to buy/sell any security.
- **Relative Rotation Graphs® / RRG®** and the four‑quadrant concept belong to **Julius de Kempenaer and RRG Research**; this Pine implementation is an independent, simplified adaptation for one symbol vs a benchmark and is **not an official RRG product or library**.
Penunjuk dan strategi
MC² Daily Candidates (v1.0 SAFE)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © mason_fibkins
//@version=5
indicator("MC² Daily Candidates (v1.0 SAFE)", overlay=true)
// ──────────────────────────────────────────
// INTERNAL DAILY DATA (NO TIMEFRAME ARGUMENT)
// ──────────────────────────────────────────
getDaily(_src) =>
request.security(syminfo.tickerid, "D", _src)
// Daily values
d_close = getDaily(close)
d_open = getDaily(open)
d_high = getDaily(high)
d_low = getDaily(low)
d_vol = getDaily(volume)
// ──────────────────────────────────────────
// Parameters
// ──────────────────────────────────────────
lookbackVol = input.int(10, "Vol Lookback (days)")
atrLength = input.int(14, "ATR Length")
emaLen = input.int(20, "EMA Length")
smaLen = input.int(50, "SMA Length")
// ──────────────────────────────────────────
// Core Calculations (DAILY)
// ──────────────────────────────────────────
// Relative Volume
relVol = d_vol / request.security(syminfo.tickerid, "D", ta.sma(volume, lookbackVol))
// Momentum — last 2 daily bullish candles
twoGreen = (d_close > d_open) and (request.security(syminfo.tickerid, "D", close ) > request.security(syminfo.tickerid, "D", open ))
// Trend filters
emaTrend = d_close > request.security(syminfo.tickerid, "D", ta.ema(close, emaLen))
smaTrend = d_close > request.security(syminfo.tickerid, "D", ta.sma(close, smaLen))
// ATR Expansion
d_atr = request.security(syminfo.tickerid, "D", ta.atr(atrLength))
atrExpand = d_atr > request.security(syminfo.tickerid, "D", ta.atr(atrLength))
// Strong Close
dayRange = d_high - d_low
closePos = dayRange > 0 ? (d_close - d_low) / dayRange : 0.5
strongClose = closePos > 0.70
// MASTER CONDITION
candidate = relVol > 2.0 and twoGreen and emaTrend and smaTrend and atrExpand and strongClose
// ──────────────────────────────────────────
// PLOT — GREEN CIRCLE BELOW DAILY BARS
// ──────────────────────────────────────────
plotshape(candidate, title="Daily Candidate", style=shape.circle, size=size.large, color=color.new(color.green, 0), location=location.belowbar, text="MC²")
// ──────────────────────────────────────────
// END
// ──────────────────────────────────────────
plot(candidate ? 1 : 0, title="MC2_Signal", display=display.none)
Momentum Permission + Pivot Entry (v1.4 CLEAN ENTRY)//@version=5
indicator("Momentum Permission + Pivot Entry (v1.4 CLEAN ENTRY)", overlay=true)
// ─────────── INPUTS ───────────
pivotLookback = input.int(3, "Pivot Lookback")
smaLen = input.int(50, "SMA Length")
relVolTh = input.float(1.3, "RelVol Threshold")
// ─────────── TREND + MOMENTUM — BASICS ───────────
vwapLine = ta.vwap
smaLine = ta.sma(close, smaLen)
relVol = volume / ta.sma(volume, 10)
pivotLow = ta.lowest(low, pivotLookback) == low
trendUp = close > smaLine
aboveVWAP = close > vwapLine
greenCandle = close > open
// ─────────── PERMISSION (Context Only) ───────────
permitSignal = trendUp and (relVol > relVolTh)
// ─────────── ENTRY LOGIC — ONE CLEAN SIGNAL ───────────
rawEntry = permitSignal and aboveVWAP and pivotLow and greenCandle
// Anti-spam: only first signal in a move
entrySignal = rawEntry and not rawEntry
// ─────────── VISUAL SHAPES (Clean) ───────────
plotshape(permitSignal, style=shape.triangleup, color=color.lime, size=size.tiny, location=location.bottom, text="PERMIT")
plotshape(entrySignal, style=shape.triangleup, color=color.aqua, size=size.small, text="ENTRY")
// ─────────── TREND VISUALS ───────────
plot(vwapLine, "VWAP", color=color.blue, linewidth=2)
plot(smaLine, "SMA50", color=color.orange, linewidth=2)
Crypto Anchored VWAP (Swing High/Low)Crypto Anchored VWAP (Swing High/Low)
This indicator provides an automatic Anchored VWAP system designed specifically for highly volatile assets such as cryptocurrencies (ETH, BTC, SOL, etc.).
Unlike traditional AVWAP tools that require manual date input, this script automatically anchors VWAP to the most recent swing high and swing low, making it ideal for real-time trend tracking and intraday/4H structure analysis.
How It Works
The script detects local swing lows and swing highs based on user-defined swing length.
When a new swing point appears, an Anchored VWAP is initialized from that specific candle.
As price evolves, the AVWAP dynamically becomes:
A trend boundary
A fair-value line
A mean-reversion attractor
Traders can use these levels to identify:
Trend continuation
Breakout confirmation
Mean reversion pullbacks
Overextended expansions
Included Features
✔ Auto-Anchored VWAP from swing low
✔ Auto-Anchored VWAP from swing high
✔ Standard deviation bands (1σ) for volatility context
✔ Designed for Crypto 4H / 1H / 15m
✔ Works on any asset & any timeframe
How To Use
1. Trend Direction
Price above Swing-Low VWAP → Bullish bias
Price below Swing-High VWAP → Bearish bias
2. Trade Setups
Break → Retest → Hold above AVWAP = Trend continuation long
Reject from AVWAP / σ band = Mean-reversion short setup
AVWAP zone → High probability liquidity reaction
3. Volatility Bands
Price touching +1σ = extension
Price returning to 0σ = mean reversion
Price breaking −1σ = trend weakening
Inputs
Swing Length: determines sensitivity of swing high/low detection
(Default: 5)
Best Use Cases
ETH 4H trend following
BTC structure shifts
Altcoin volatility filtering
Identifying institutional "cost basis" zones
Confirming breakouts / fakeouts
Notes
This is not a trading system by itself but a structural tool meant to help traders understand trend and value location. Always combine AVWAP with market structure, volume, and risk management.
Disclaimer
This script is for educational and informational purposes only. It does not constitute financial advice or a recommendation to buy or sell any asset. Use at your own discretion.
Momentum Permission + Pivot Entry + Exit (v1.4 FINAL SCAN)plot(permitOut, "PERMIT", display=display.none)
plot(entryOut, "ENTRY", display=display.none)
plot(exitOut, "EXIT", display=display.none)
Momentum Permission + Pivot Entry + Exit (v1.4 FULL)//@version=5
indicator("Momentum Permission + Pivot Entry + Exit (v1.4 FULL)", overlay=true)
// ──────────────────────────────────────────────
// Inputs
// ──────────────────────────────────────────────
smaLength = input.int(50, "SMA Length")
relVolThresh = input.float(1.3, "Relative Volume Threshold")
pivotLookback = input.int(3, "Pivot Lookback Bars")
// ──────────────────────────────────────────────
// Core Calculations
// ──────────────────────────────────────────────
sma50 = ta.sma(close, smaLength)
vwap = ta.vwap(close)
relVol = volume / ta.sma(volume, 10)
aboveSMA = close > sma50
aboveVWAP = close > vwap
relStrong = relVol > relVolThresh
greenCandle = close > open
crossUp = ta.crossover(close, sma50)
// ──────────────────────────────────────────────
// One-Time Daily Permission
// ──────────────────────────────────────────────
var bool permission = false
if ta.change(time("D"))
permission := false
permitSignal = crossUp and aboveVWAP and relStrong and not permission
if permitSignal
permission := true
// ──────────────────────────────────────────────
// Entry: Pivot Break Continuation
// ──────────────────────────────────────────────
pivotHighBreak = close > ta.highest(high , pivotLookback)
entrySignal = (
permission and
aboveSMA and
aboveVWAP and
relStrong and
greenCandle and
pivotHighBreak
)
// ──────────────────────────────────────────────
// Exit: Trend Exhaustion / VWAP Breakdown
// ──────────────────────────────────────────────
smaChange = sma50 - sma50
exitSignal = (
permission and
close < vwap and
close < open and
relStrong and
smaChange < 0
)
// ──────────────────────────────────────────────
// VISUAL PLOTS (same as before)
// ──────────────────────────────────────────────
plot(sma50, title="SMA50", color=color.orange, linewidth=2)
plot(vwap, title="VWAP", color=color.new(color.blue, 0), linewidth=2)
plotshape(
permitSignal,
title="Trend Permission",
style=shape.triangleup,
location=location.belowbar,
color=color.new(color.green, 0),
size=size.large,
text="PERMIT"
)
plotshape(
entrySignal,
title="Entry Trigger",
style=shape.triangleup,
location=location.abovebar,
color=color.new(color.aqua, 0),
size=size.normal,
text="ENTRY"
)
plotshape(
exitSignal,
title="Exit Signal",
style=shape.triangledown,
location=location.abovebar,
color=color.new(color.red, 0),
size=size.large,
text="EXIT"
)
// ──────────────────────────────────────────────
// SCREENER OUTPUT (persistent 0/1 for the day)
// ──────────────────────────────────────────────
var bool permitToday = false
var bool entryToday = false
var bool exitToday = false
if ta.change(time("D"))
permitToday := false
entryToday := false
exitToday := false
if permitSignal
permitToday := true
if entrySignal
entryToday := true
if exitSignal
exitToday := true
// Hidden plots for screener columns
plot(permitToday ? 1 : 0, title="PERMIT", display=display.none)
plot(entryToday ? 1 : 0, title="ENTRY", display=display.none)
plot(exitToday ? 1 : 0, title="EXIT", display=display.none)
// Alerts
alertcondition(permitSignal, title="PERMIT", message="Momentum PERMISSION fired")
alertcondition(entrySignal, title="ENTRY", message="Momentum ENTRY fired")
alertcondition(exitSignal, title="EXIT", message="Momentum EXIT fired")
6EMA & SMA with alertOverview
This indicator is designed to combine multiple moving averages, higher-timeframe levels, and flexible alerts into a single tool. It helps you monitor trend direction, dynamic support/resistance, and key daily/weekly/monthly levels without loading several separate indicators.
Main Features
1 12 Moving Averages in One Indicator
・Plots a total of 12 lines: 6 EMAs and 6 SMAs.
・All lengths and sources are fully configurable from the settings, so you can adapt them to your own style and timeframe.
2 Slope-Based Color Change
・One EMA and one SMA are colored based on their slope (rising vs. falling).
・This makes it easy to visually confirm when the medium/long-term bias is turning up or down.
3 Price-vs-MA Alerts
・You can enable alerts when price touches or crosses any selected EMA or SMA.
・Direction can be set to “Up”, “Down”, or “Both”, and you can choose to trigger only on bar close.
・The script can also send detailed alert() messages containing the symbol, timeframe, price, and line value at the moment of the cross.
4 Daily / Weekly / Monthly High–Low Levels
・Optionally display the current Daily, Weekly, and Monthly high/low levels as rays extended to the right.
・Each set of levels can be shown or hidden individually, and has its own color, style, and width options.
・Labels (DH/DL, WH/WL, MH/ML) are attached at the right side of each line for quick identification.
Notes & Disclaimer
This indicator is for charting and alerting purposes only. It does not open, close, or manage any positions.
It does not guarantee any specific results or performance. All examples are for educational and informational purposes only.
Always test and adjust the settings on your own symbols and timeframes, and use proper risk management when applying it to live trading.
ADR Bottom-Right TABLE DashboardTitle: ADR Bottom-Right Dashboard
Version: 1.0
Author:
Description:
The ADR Bottom-Right Dashboard displays the Average Daily Range (ADR) and related metrics directly on your chart in a compact, easy-to-read table. It helps traders quickly see how much a stock has moved today relative to its normal daily range and identify potential overextended or trending moves.
This tool is ideal for swing traders, day traders, and scalpers who want a real-time, visual indication of volatility and intraday movement.
Features
ADR (Average Daily Range): Shows the average high-to-low movement over a customizable period (default 20 days).
ADR%: ADR as a percentage of the stock price, showing relative volatility.
Today: The current intraday range (high–low).
%ADR: How much of the ADR has already been reached today. Color-coded to indicate low, medium, or high extension.
Color coding: %ADR highlights:
Green: <50% (early-day / low volatility)
Yellow: 50–100% (normal movement)
Red: >100% (extended move / potential exhaustion)
Inputs
Input Description Default
ADR Period Number of days to calculate the ADR 20
Low %ADR Color Color for %ADR <50% Green
Medium %ADR Color Color for %ADR 50–100% Yellow
High %ADR Color Color for %ADR >100% Red
FXD Volume Moving AverageFXDVolMA is a non-repainting, color-coded moving average that highlights when price action is supported by meaningful volume.
How It Works
The indicator measures volume strength by comparing current volume to its historical behaviour.
You can choose between four volume models: SMA Ratio, EMA Ratio, Z-Score, or Range 0–1.
The volume strength is smoothed to reduce noise.
A regime system (hysteresis) prevents color flickering and keeps transitions clean and stable.
The selected MA (SMA/EMA/WMA/RMA/HMA/VWMA) is then coloured based on volume conditions:
Colour Meaning
🟢 Green — Strong Volume
Price moves have participation behind them; higher-quality trading conditions.
🟡 Yellow — Neutral Volume
Volume is average; price is either already trending or weakening, wait for clarity or trend confirmation.
🔴 Red — Low Volume
Weak participation; avoid trading low-quality moves.
Purpose
FXDVolMA makes it easy to see whether the market is moving with conviction.
Use green periods to prioritize entries and avoid red environments where moves are unreliable.
When the MA turns green, it signals volume being present and good trading opportunities.
When the MA turns yellow, price is either already trending and volume weakens or the trend is coming to an end.
When the MA turns red, the volume is weak and price will most likely retrace, not ideal to trade.
Green = best entries
Yellow = good entries (or continuations if already in the trade)
Red = wait for retracement or volume
Checkout Instagrma @FXDSniper for more indicators and free education.
Advanced Volume & Price Heatmap (Fixed)Work in Progress. Used AI to help me code. Not really sure it worked very well. I need to run it through Cursor and make it cleaner and better.
Momentum Permission + Pivot Entry + Exit (v1.4)//@version=5
indicator("Momentum Permission + Pivot Entry + Exit (v1.4)", overlay=true)
// ──────────────────────────────────────────────
// Inputs
// ──────────────────────────────────────────────
smaLength = input.int(50, "SMA Length")
relVolThresh = input.float(1.3, "Relative Volume Threshold")
pivotLookback = input.int(3, "Pivot Break Lookback")
// ──────────────────────────────────────────────
// Core Calculations
// ──────────────────────────────────────────────
sma50 = ta.sma(close, smaLength)
vwap = ta.vwap(close)
relVol = volume / ta.sma(volume, 10)
crossUp = ta.crossover(close, sma50)
aboveSMA = close > sma50
aboveVWAP = close > vwap
relStrong = relVol > relVolThresh
greenCandle = close > open
// ──────────────────────────────────────────────
// One-Time Daily Trend Permission
// ──────────────────────────────────────────────
var bool permission = false
if ta.change(time("D"))
permission := false
trendStart = crossUp and aboveVWAP and relStrong and not permission
if trendStart
permission := true
// ──────────────────────────────────────────────
// Pullback Pivot Breakout Entry (Continuation Long)
// ──────────────────────────────────────────────
pivotHighBreak = close > ta.highest(high , pivotLookback)
entryTrigger = (
permission and
aboveSMA and
aboveVWAP and
relStrong and
greenCandle and
pivotHighBreak
)
// ──────────────────────────────────────────────
// EXIT Signal (Trend Exhaustion)
// ──────────────────────────────────────────────
smaChange = sma50 - sma50
exitSignal = (
permission and // only after trend started
close < vwap and // VWAP breakdown
close < open and // red candle body
relVol > relVolThresh and // volume spike on selling
smaChange < 0 // SMA turning down / flattening
)
// ──────────────────────────────────────────────
// Plots
// ──────────────────────────────────────────────
plot(sma50, title="SMA50", color=color.orange, linewidth=2)
plot(vwap, title="VWAP", color=color.new(color.blue, 0), linewidth=2)
// Permission marker (1 per day)
plotshape(
trendStart,
title="Trend Permission",
style=shape.triangleup,
location=location.belowbar,
color=color.new(color.green, 0),
size=size.large,
text="PERMIT"
)
// Entry trigger markers
plotshape(
entryTrigger,
title="Entry Trigger",
style=shape.triangleup,
location=location.abovebar,
color=color.new(color.aqua, 0),
size=size.normal,
text="ENTRY"
)
// EXIT marker (trend exhaustion)
plotshape(
exitSignal,
title="Exit Signal",
style=shape.triangledown,
location=location.abovebar,
color=color.new(color.red, 0),
size=size.large,
text="EXIT"
)
Minho Index | SETUP (Safe Filter 90%)//@version=5
indicator("Minho Index | SETUP (Safe Filter 90%)", shorttitle="Minho Index | SETUP+", overlay=false)
//--------------------------------------------------------
// ⚙️ INPUTS
//--------------------------------------------------------
bullColor = input.color(color.new(color.lime, 0), "Bull Color (Minho Green)")
bearColor = input.color(color.new(color.red, 0), "Bear Color (Red)")
neutralColor = input.color(color.new(color.white, 0), "Neutral Color (White)")
lineWidth = input.int(2, "Line Width")
period = input.int(14, "RSI Period")
centerLine = input.float(50.0, "Central Line (Fixed at 50)")
//--------------------------------------------------------
// 🧠 BASE RSI + INTERNAL SMOOTHING
//--------------------------------------------------------
rsiBase = ta.rsi(close, period)
rsiSmooth = ta.sma(rsiBase, 3) // light smoothing
//--------------------------------------------------------
// 🔍 TREND DETECTION AND NEUTRAL ZONE
//--------------------------------------------------------
trendUp = (rsiSmooth > rsiSmooth ) and (rsiSmooth > rsiSmooth )
trendDown = (rsiSmooth < rsiSmooth ) and (rsiSmooth < rsiSmooth )
slopeUp = (rsiSmooth > rsiSmooth )
slopeDown = (rsiSmooth < rsiSmooth )
lineColor = neutralColor
if trendUp
lineColor := bullColor
else if trendDown
lineColor := bearColor
else if slopeUp or slopeDown
lineColor := neutralColor
//--------------------------------------------------------
// 📈 MAIN INDEX LINE
//--------------------------------------------------------
plot(rsiSmooth, title="Dynamic RSI Line (Safe Filter)", color=lineColor, linewidth=lineWidth)
//--------------------------------------------------------
// ⚪ FIXED CENTRAL LINE
//--------------------------------------------------------
plot(centerLine, title="Central Line (Highlight)", color=neutralColor, linewidth=1)
//--------------------------------------------------------
// 📊 NORMALIZED MOVING AVERAGES (SMA20 and EMA20)
//--------------------------------------------------------
SMA20 = ta.sma(close, 20)
EMA20 = ta.ema(close, 20)
// Normalization 0–100
minPrice = ta.lowest(low, 100)
maxPrice = ta.highest(high, 100)
rangeCalc = maxPrice - minPrice
rangeCalc := rangeCalc == 0 ? 1 : rangeCalc
normSMA = ((SMA20 - minPrice) / rangeCalc) * 100
normEMA = ((EMA20 - minPrice) / rangeCalc) * 100
//--------------------------------------------------------
// 🩶 MOVING AVERAGES PLOTS (GHOST-GREY STYLE)
//--------------------------------------------------------
ghostColor = color.new(color.rgb(200,200,200), 65)
plot(normSMA, title="SMA 20 (Ghost Grey)", color=ghostColor, linewidth=2)
plot(normEMA, title="EMA 20 (Ghost Grey)", color=ghostColor, linewidth=2)
//--------------------------------------------------------
// 🌈 FILL BETWEEN MOVING AVERAGES
//--------------------------------------------------------
bullCond = normSMA < normEMA
bearCond = normSMA > normEMA
fill(
plot(normSMA, display=display.none),
plot(normEMA, display=display.none),
color = bearCond ? color.new(color.red, 55) :
bullCond ? color.new(color.lime, 55) : na
)
//--------------------------------------------------------
// ✅ END OF INDICATOR
//--------------------------------------------------------
TCT - Daylight Saving TimeVisualize Daylight Saving Time (DST) transitions on your charts. This indicator marks the spring forward (2nd Sunday of March) and fall back (1st Sunday of November) dates with vertical lines and optional labels.
Features:
Automatic DST detection for US time zones
Customizable line color, width, and style (solid, dashed, dotted)
Optional date labels on transition days
Multiple timezone support: US Eastern, Central, Mountain, Pacific, London, Paris, Tokyo, Sydney
Extends lines across the chart
Memory-efficient (manages up to 100 lines/labels)
Use Cases:
Identify potential market behavior shifts around DST transitions
Track time changes that may affect trading sessions
Plan trades around known time adjustments
Historical analysis of DST impact on price action
Perfect for traders who want to see when clocks change and how it might affect market dynamics. Customize the appearance to match your chart style.
Minho Index | SETUP+@TraderMinho//@version=5
// By: Trader Minho — Analista Gráfico desde 2022
indicator("Minho Index | SETUP+@TraderMinho", shorttitle="Minho Index (Classic)", overlay=false)
//--------------------------------------------------------
// PARAMETERS
//--------------------------------------------------------
shortPeriod = input.int(3, "Short Period")
mediumPeriod = input.int(8, "Medium Period")
longPeriod = input.int(20, "Long Period")
intensityFactor = input.float(3.0, "Intensity Factor", step = 0.1)
shortSmoothing = input.int(2, "Short Smoothing (EMA)")
mediumSmoothing = input.int(5, "Medium Smoothing (EMA)")
shortColor = input.color(color.new(#00CED1, 0), "Short Line Color (Aqua Blue)")
mediumColor = input.color(color.new(#FFD700, 0), "Medium Line Color (Yellow)")
zeroColor = input.color(color.new(color.white, 0), "Zero Line Color")
lineWidth = input.int(1, "Line Thickness")
//--------------------------------------------------------
// MOVING AVERAGE CALCULATIONS
//--------------------------------------------------------
smaShort = ta.sma(close, shortPeriod)
smaMedium = ta.sma(close, mediumPeriod)
smaLong = ta.sma(close, longPeriod)
//--------------------------------------------------------
// CLASSIC DIDI NORMALIZATION
//--------------------------------------------------------
priceBase = ta.sma(close, longPeriod)
didiShort = ((smaShort - smaLong) / priceBase) * intensityFactor
didiMedium = ((smaMedium - smaLong) / priceBase) * intensityFactor
//--------------------------------------------------------
// FINAL SMOOTHING (CLASSIC NEEDLE EFFECT)
//--------------------------------------------------------
aquaSmooth = ta.ema(didiShort, shortSmoothing)
yellowSmooth = ta.ema(didiMedium, mediumSmoothing)
//--------------------------------------------------------
// PLOTS
//--------------------------------------------------------
hline(0, "Zero Line", color = zeroColor, linewidth = 1)
plot(aquaSmooth, "Short (Aqua)", color = shortColor, linewidth = lineWidth)
plot(yellowSmooth, "Medium (Yellow)", color = mediumColor, linewidth = lineWidth)
Momentum Permission + VWAP + RelVol (Clean)//@version=5
indicator("Momentum Permission + VWAP + RelVol (Clean)", overlay=true)
// ──────────────────────────────────────────────
// Inputs
// ──────────────────────────────────────────────
smaLength = input.int(50, "SMA Length")
relVolThresh = input.float(1.3, "Relative Volume Threshold")
// ──────────────────────────────────────────────
// Core Calculations
// ──────────────────────────────────────────────
sma50 = ta.sma(close, smaLength)
vwap = ta.vwap(close)
relVol = volume / ta.sma(volume, 10)
crossUp = ta.crossover(close, sma50)
// Trend conditions
aboveSMA = close > sma50
aboveVWAP = close > vwap
relStrong = relVol > relVolThresh
// ──────────────────────────────────────────────
// One-Time Daily Trend Permission Logic
// ──────────────────────────────────────────────
var bool permission = false
// Reset permission at start of each session
if ta.change(time("D"))
permission := false
trendStart = crossUp and aboveVWAP and relStrong and not permission
if trendStart
permission := true
// ──────────────────────────────────────────────
// Entry Trigger Logic (Breakout Continuation)
// ──────────────────────────────────────────────
entryTrigger = (
permission and
aboveSMA and
aboveVWAP and
relStrong and
close > high // breakout of prior candle high
)
// ──────────────────────────────────────────────
// Plots
// ──────────────────────────────────────────────
// Trend filters
plot(sma50, title="SMA50", color=color.orange, linewidth=2)
plot(vwap, title="VWAP", color=color.new(color.blue, 0), linewidth=2)
// Permission (one-time trend start)
plotshape(
trendStart,
title="Trend Permission",
style=shape.triangleup,
location=location.belowbar,
color=color.new(color.green, 0),
size=size.large,
text="PERMIT"
)
// Entry trigger (continuation entry)
plotshape(
entryTrigger,
title="Entry Trigger",
style=shape.triangleup,
location=location.abovebar,
color=color.new(color.aqua, 0),
size=size.normal,
text="ENTRY"
)
One-Time 50 SMA Trend Start//@version=5
indicator("One-Time 50 SMA Trend Start", overlay=true)
// ─── Inputs ──────────────────────────────────────────────
smaLength = input.int(50, "SMA Length")
// ─── Calculations ────────────────────────────────────────
sma50 = ta.sma(close, smaLength)
crossUp = ta.crossover(close, sma50)
// Track whether we've already fired today
var bool alerted = false
// Reset alert for new session
if ta.change(time("D"))
alerted := false
// Trigger one signal only
signal = crossUp and not alerted
if signal
alerted := true
// ─── Plots ───────────────────────────────────────────────
plot(sma50, color=color.orange, linewidth=2, title="50 SMA")
plotshape(
signal,
title="First Cross Above",
style=shape.triangleup,
color=color.new(color.green, 0),
size=size.large,
location=location.belowbar,
text="Trend"
)
📈 Price Crossed Above 50 SMA (One-Time Marker)//@version=5
indicator("📈 Price Above 50 SMA Marker", overlay=true)
// === Calculate 50 SMA ===
sma50 = ta.sma(close, 50)
priceAboveSMA50 = close > sma50
// === Plot the 50 SMA ===
plot(sma50, title="50 SMA", color=color.orange, linewidth=2)
// === Plot Shape When Price Is Above 50 SMA ===
plotshape(
priceAboveSMA50, // condition to trigger
title="Price Above 50 SMA", // tooltip title
location=location.abovebar, // place above candle
color=color.green, // shape color
style=shape.triangleup, // shape style
size=size.small, // size
text="SMA+" // optional label
)
Opening Range with Breakouts & Targets w/ Alerts [LuxAlgo]This is the exact Lux Algo opening range with Breakouts and Targets, but added the ability to fire alerts on buy and sell signals
ES 30 Second Opening RangeOverview
Tracks opening ranges across three global futures sessions (RTH, Globex, Europe) using 30-second precision sampling. Provides high/low/mid levels, 15-point projection intervals, and breakout detection for range-based trading.
What Makes This Unique
30-Second Precision: Uses request.security_lower_tf() to sample the first 30 seconds of each session, capturing exact opening range high/low rather than relying on larger timeframe bars.
Multi-Session Tracking: Simultaneously monitors RTH (8:30 AM CT), Globex (5:00 PM CT), and Europe (2:00 AM CT) opening ranges with independent calculations for 24-hour futures coverage.
15-Point Projections: RTH-specific feature plots 5 extension levels above/below opening range at 15-point intervals (+15, +30, +45, +60, +75). Calibrated for ES futures point movement.
Adjustable Scalp Levels: Customizable +/- point lines from RTH range (default 4 points) for precise entry/exit management.
How It Works
Opening Range Calculation:
Session detection: hour(time, "America/Chicago") + minute(time) * 0.01
30s data request: request.security_lower_tf(syminfo.tickerid, "30S", high/low)
Range capture: ta.valuewhen(session_time == start_time AND second == 0, array.get(data, 0), 0)
Midpoint: (high + low) / 2
At each session start, the indicator captures the first 30-second bar's high and low, then plots these as persistent levels throughout the session.
15-Point Intervals (RTH only):
Level_up = RTH_high + (15 × n) where n = 1,2,3,4,5
Level_down = RTH_low - (15 × n)
Breakout Detection:
Break_up = ta.crossover(close, session_high)
Break_down = ta.crossunder(close, session_low)
Statistics:
Range width = session_high - session_low (displayed in table)
How to Use
Session-Based Levels: Each session's opening range represents institutional price discovery. Use as dynamic support/resistance throughout the day.
Breakout Trading: Visual signals mark opening range breakouts. Narrow ranges (<10 points ES) often precede larger moves.
15-Point Targets: After RTH breakout, use 15-point intervals as profit targets. Example: after +15 hit, next target is +30.
Gap Analysis: Compare overnight sessions to RTH. Gaps often fill toward RTH opening range.
Scalping: Adjustable point offset provides tight profit targets from range boundaries.
Key Settings
Session Toggles: Enable/disable RTH, Globex, Europe individually
15-Point Lines: RTH-only, off by default. Shows 5 levels above/below OR at 15-point intervals
Point Offset (4.0): Adjustable for tighter (2-3) or wider (6-8) scalp levels
Range Boxes: Optional visual highlighting with adjustable transparency
Statistics Table: Shows session high, low, range width
Why Protected Source
The 30-second data aggregation using request.security_lower_tf() with time-based session detection, 15-point interval projection system calibrated for ES futures, and multi-session concurrent tracking represent proprietary implementation methods.
Important Disclaimers
Not Financial Advice. Educational tool only.
Instrument Specific. 15-point intervals optimized for ES futures. Other instruments may need different sizes.
Session Accuracy. Captures first 30 seconds only. Data gaps or late opens may affect accuracy.
Historical Limitations. Opening range effectiveness varies by market regime and volatility.
Always use proper risk management. This provides reference levels, not trade signals.
WolfgateThe Wolfpack Framework is my core intraday execution overlay for SPY and index futures.
This script plots:
9 EMA (white) – short-term momentum and micro pullback engine
21 EMA (yellow, dotted) – intraday trend backbone and bias filter
200 SMA (purple, dotted) – primary higher-timeframe trend reference
400 SMA (red, dotted) – macro trend and extreme mean-reversion anchor
VWAP (bright blue, thick) – institutional fair value for the current session
No auto-drawn ORB, no auto levels – traders mark those manually using their own playbook to keep the chart clean and intentional.
Pair this with a separate “Volume” indicator (standard volume columns) in the lower pane for full context.
Built for 0DTE / intraday options traders who want a fast, uncluttered framework they can execute from without thinking.
Obsidian Flux Matrix# Obsidian Flux Matrix | JackOfAllTrades
Made with my Senior Level AI Pine Script v6 coding bot for the community!
Narrative Overview
Obsidian Flux Matrix (OFM) is an open-source Pine Script v6 study that fuses social sentiment, higher timeframe trend bias, fair-value-gap detection, liquidity raids, VWAP gravitation, session profiling, and a diagnostic HUD. The layout keeps the obsidian palette so critical overlays stay readable without overwhelming a price chart.
Purpose & Scope
OFM focuses on actionable structure rather than marketing claims. It documents every driver that powers its confluence engine so reviewers understand what triggers each visual.
Core Analytical Pillars
1. Social Pulse Engine
Sentiment Webhook Feed: Accepts normalized scores (-1 to +1). Signals only arm when the EMA-smoothed value exceeds the `sentimentMin` input (0.35 by default).
Volume Confirmation: Requires local volume > 30-bar average × `volSpikeMult` (default 2.0) before sentiment flags.
EMA Cross Validation: Fast EMA 8 crossing above/below slow EMA 21 keeps momentum aligned with flow.
Momentum Alignment: Multi-timeframe momentum composite must agree (positive for longs, negative for shorts).
2. Peer Momentum Heatmap
Multi-Timeframe Blend: RSI + Stoch RSI fetched via request.security() on 1H/4H/1D by default.
Composite Scoring: Each timeframe votes +1/-1/0; totals are clamped between -3 and +3.
Intraday Readability: Configurable band thickness (1-5) so scalpers see context without losing space.
Dynamic Opacity: Stronger agreement boosts column opacity for quick bias checks.
3. Trend & Displacement Framework
Dual EMA Ribbon: Cyan/magenta ribbon highlights immediate posture.
HTF Bias: A higher-timeframe EMA (default 55 on 4H) sets macro direction.
Displacement Score: Body-to-ATR ratio (>1.4 default) detects impulses that seed FVGs or VWAP raids.
ATR Normalization: All thresholds float with volatility so the study adapts to assets and regimes.
4. Intelligent Fair Value Gap (FVG) System
Gap Detection: Three-candle logic (bullish: low > high ; bearish: high < low ) with ATR-sized minimums (0.15 × ATR default).
Overlap Prevention: Price-range checks stop redundant boxes.
Spacing Control: `fvgMinSpacing` (default 5) avoids stacking from the same impulse.
Storage Caps: Max three FVGs per side unless the user widens the limit.
Session Awareness: Kill zone filters keep taps focused on London/NY if desired.
Auto Cleanup: Boxes delete when price closes beyond their invalidation level.
5. VWAP Magnet + Liquidity Raid Engine
Session or Rolling VWAP: Toggle resets to match intraday or rolling preferences.
Equal High/Low Scanner: Looks back 20 bars by default for liquidity pools.
Displacement Filter: ATR multiplier ensures raids represent genuine liquidity sweeps.
Mean Reversion Focus: Signals fire when price displaces back toward VWAP following a raid.
6. Session Range Breakout System
Initial Balance Tracking: First N bars (15 default) define the session box.
Breakout Logic: Requires simultaneous liquidity spikes, nearby FVG activity, and supportive momentum.
Z-Score Volume Filter: >1.5σ by default to filter noisy moves.
7. Lifestyle Liquidity Scanner
Volume Z-Scores: 50-bar baseline highlights statistically significant spikes.
Smart Money Footprints: Bottom-of-chart squares color-code buy vs sell participation.
Panel Memory: HUD logs the last five raid timestamps, direction, and normalized size.
8. Risk Matrix & Diagnostic HUD
HUD Structure: Table in the top-right summarizes HTF bias, sentiment, momentum, range state, liquidity memory, and current risk references.
Signal Tags: Aggregates SPS, FVG, VWAP, Range, and Liquidity states into a compact string.
Risk Metrics: Swing-based stops (5-bar lookback) + ATR targets (1.5× default) keep risk transparent.
Signal Families & Alerts
Social Pulse (SPS): Volume-confirmed sentiment alignment; triangle markers with “SPS”.
Kill-Zone FVG: Session + HTF alignment + FVG tap; arrow markers plus SL/TP labels.
Local FVG: Captures local reversals when HTF bias has not flipped yet.
VWAP Raid: Equal-high/low raids that snap toward VWAP; “VWAP” label markers.
Range Breakout: Initial balance violations with liquidity and imbalance confirmation; circle markers.
Liquidity Spike: Z-score spikes ≥ threshold; square markers along the baseline.
Visual Design & Customization
Theme Palette: Primary background RGB (12,6,24). Accent shading RGB (26,10,48). Long accents RGB (88,174,255). Short accents RGB (219,109,255).
Stylized Candles: Optional overlay using theme colors.
Signal Toggles: Independently enable markers, heatmap, and diagnostics.
Label Spacing: Auto-spacing enforces ≥4-bar gaps to prevent text overlap.
Customization & Workflow Notes
Adjust ATR/FVG thresholds when volatility shifts.
Re-anchor sentiment to your webhook cadence; EMA smoothing (default 5) dampens noise.
Reposition the HUD by editing the `table.new` coordinates.
Use multiples of the chart timeframe for HTF requests to minimize load.
Session inputs accept exchange-local time; align them to your market.
Performance & Compliance
Pure Pine v6: Single-line statements, no `lookahead_on`.
Resource Safe: Arrays trimmed, boxes limited, `request.security` cached.
Repaint Awareness: Signals confirm on close; alerts mirror on-chart logic.
Runtime Safety: Arrays/loops guard against `na`.
Use Cases
Measure when social sentiment aligns with structure.
Plan ICT-style intraday rebalances around session-specific FVG taps.
Fade VWAP raids when displacement shows exhaustion.
Watch initial balance breaks backed by statistical volume.
Keep risk/target references anchored in ATR logic.
Signal Logic Snapshot
Social Pulse Long/Short: `sentimentEMA` gated by `sentimentMin`, `volSpike`, EMA 8/21 cross, and `momoComposite` sign agreement. Keeps hype tied to structural follow-through.
Kill-Zone FVG Long/Short: Requires session filter, HTF EMA bias alignment, and an active FVG tap (`bullFvgTap` / `bearFvgTap`). Labels include swing stops + ATR targets pulled from `swingLookback` and `liqTargetMultiple`.
Local FVG Long/Short: Uses `localBullish` / `localBearish` heuristics (EMA slope, displacement, sequential closes) to surface intraday reversals even when HTF bias has not flipped.
VWAP Raids: Detect equal-high/equal-low sweeps (`raidHigh`, `raidLow`) that revert toward `sessionVwap` or rolling VWAP when displacement exceeds `vwapAlertDisplace`.
Range Breakouts: Combine `rangeComplete`, breakout confirmation, liquidity spikes, and nearby FVG activity for statistically backed initial balance breaks.
Liquidity Spikes: Volume Z-score > `zScoreThreshold` logs direction, size, and timestamp for the HUD and optional review workflows.
Session Logic & VWAP Handling
Kill zone + NY session inputs use TradingView’s session strings; `f_inSession()` drives both visual shading and whether FVG taps are tradeable when `killZoneOnly` is true.
Session VWAP resets using cumulative price × volume sums that restart when the daily timestamp changes; rolling VWAP falls back to `ta.vwap(hlc3)` for instruments where daily resets are less relevant.
Initial balance box (`rangeBars` input) locks once complete, extends forward, and stays on chart to contextualize later liquidity raids or breakouts.
Parameter Reference
Trend: `emaFastLen`, `emaSlowLen`, `htfResolution`, `htfEmaLen`, `showEmaRibbon`, `showHtfBiasLine`.
Momentum: `tf1`, `tf2`, `tf3`, `rsiLen`, `stochLen`, `stochSmooth`, `heatmapHeight`.
Volume/Liquidity: `volLookback`, `volSpikeMult`, `zScoreLen`, `zScoreThreshold`, `equalLookback`.
VWAP & Sessions: `vwapMode`, `showVwapLine`, `vwapAlertDisplace`, `killSession`, `nySession`, `showSessionShade`, `rangeBars`.
FVG/Risk: `fvgMinTicks`, `fvgLookback`, `fvgMinSpacing`, `killZoneOnly`, `liqTargetMultiple`, `swingLookback`.
Visualization Toggles: `showSignalMarkers`, `showHeatmapBand`, `showInfoPanel`, `showStylizedCandles`.
Workflow Recipes
Kill-Zone Continuation: During the defined kill session, look for `killFvgLong` or `killFvgShort` arrows that line up with `sentimentValid` and positive `momoComposite`. Use the HUD’s risk readout to confirm SL/TP distances before entering.
VWAP Raid Fade: Outside kill zone, track `raidToVwapLong/Short`. Confirm the candle body exceeds the displacement multiplier, and price crosses back toward VWAP before considering reversions.
Range Break Monitor: After the initial balance locks, mark `rangeBreakLong/Short` circles only when the momentum band is >0 or <0 respectively and a fresh FVG box sits near price.
Liquidity Spike Review: When the HUD shows “Liquidity” timestamps, hover the plotted squares at chart bottom to see whether spikes were buy/sell oriented and if local FVGs formed immediately after.
Metadata
Author: officialjackofalltrades
Platform: TradingView (Pine Script v6)
Category: Sentiment + Liquidity Intelligence
Hope you Enjoy!






















