Triple EMA/SMA + crossoverThis script combines three moving averages into one clean indicator.
You can choose the type of MA (EMA or SMA), the source (close, open, HL2, etc.), and the length of each line. All three MAs also change color depending on whether they’re rising, falling, or flat.
MA1 and MA2 crossovers are highlighted directly on the candles (white for bullish, purple for bearish), which makes it easy to spot momentum shifts without adding extra indicators.
Each MA has its own color settings for rising/falling/flat, so you can adjust the look to match your chart style.
Nothing fancy or over-engineered — just a simple and flexible way to monitor 3 MAs at once, read trend direction at a glance, and see crossovers immediately.
Análise de Tendência
3-RSI Buy/Sell (s-a-t-i-s-h)This indicator will give u a strong idea about the movement based on the movement of 3 RSI level. Thanks to Claude and Chatgpt for helping to implement my idea.
Best setup is if you are in 15 minute time frame then set 3, 5 ,15 as RSI. So all is bullish or bearish will help u to identify a good trade.
You can play around as many useful features is been added for identifying strong movement.
Cheers.
s-a-t-i-s-h
AstraEdgeAstra Edge Tool
Astra Edge is built from the ground up, through years of real market experience, observation, and execution — not theory.
It reflects how I personally analyze price structure, volatility, and directional bias in live markets.
The indicator combines multiple layers of technical logic — multi-timeframe trend context, fixed daily structure levels, volatility bands, and range compression detection — into one stable, easy-to-read system.
It does not predict or guarantee direction; it reads what the market is doing right now and presents it visually in a structured way.
Every element of Astra Edge — the dashboard, zones, and compression highlights — is designed to help traders interpret market behavior, not chase it.
It aims to bring clarity and control to your intraday or swing decision-making by helping you focus on structure, momentum, and context instead of noise.
It’s not a shortcut or a holy grail.
It’s a refined tool that mirrors how experienced traders actually think — visually, contextually, and systematically.
⚙️ Features
🟢 Multi–Timeframe Dashboard
A clean grid showing five user-selected symbols across three timeframes — giving instant trend alignment and strength visibility.
LTP, % change, and SMA direction are colour-coded for quick interpretation.
🔵 Fixed Market Structure Levels
Automatic plotting of previous day and today’s high, low, open, and close —
the four most powerful reference points for intraday structure and reaction levels.
No repainting, no recalculation — just static, reliable structure.
🟣 Zone Bands
Calculates zones from the prior candles
Weekly or custom timeframe zones
Zones are highlighted dynamically and labeled clearly, helping you identify balance, breakout, and reversal regions visually.
🟠 Sideways Zone Detector
Built-in compression detector that identifies when the market is stuck in range.
Highlights consolidation zones and labels them with optional Zig Zag markers, helping traders avoid choppy conditions or plan breakout traps early.
🟡 Optional Bollinger Framework
Toggleable Bollinger structure that adds volatility context to the chart, helping spot expansions, squeezes, or range resets quickly.
⚙️ Customization
Dashboard and Sideways Zone ON/OFF switches
Adjustable zone thickness, label names, and colours
Works across stocks, indices, forex, and crypto
Optimized for dark and light chart themes
🧠 How to Use
Best for intraday and positional structure analysis
Works on any timeframe — but ideal visualization on 1m to 1h charts
Ideal timeframe 5mins
Focus on zone reactions and structure shifts, not standalone signals
Combine with your own entry confirmation or volume logic
Remember — Astra Edge shows structure, it doesn’t decide trades.
💎 Philosophy
“Every trader has tools. The elite have Astra Edge.”
Astra Edge was built for traders who prefer clarity over clutter and discipline over guesswork.
It combines multiple technical frameworks — not to replace your strategy, but to enhance your judgment.
⚠️ Disclaimer
I am not a SEBI-registered advisor.
This indicator is created purely for educational and informational purposes.
It does not guarantee profits, nor should it be considered investment advice or a trading signal system.
Trading and investing involve risk — use at your own discretion and consult a SEBI-registered financial advisor before making any financial decisions.
Astra Edge follows price action — price action does not follow Astra Edge.
Sometimes it will align perfectly with the trend, other times it won’t.
This is not a Holy Grail, it’s a structured lens to view the market more intelligently.
Strat Reversal MTF TableStrat Reversal MTF Table — Your Complete Multi-Timeframe Strat Command Center
Take your Strat trading to the next level with an indicator that shows every reversal, on every timeframe, in one powerful visual dashboard.
Designed for traders who demand speed, clarity, and full Strat alignment, the Strat Reversal MTF Table instantly identifies all major bullish and bearish reversal patterns:
Bullish Patterns
2-1-2
3-1-2
1-3-2
3-2-2
Bearish Patterns
2-1-2
3-1-2
1-3-2
3-2-2
Each signal is displayed with:
Clear pattern name (e.g., “2-1-2 Bull”)
Automatic trigger price
Timeframe label
Color-coded background (Bullish / Bearish / Neutral)
Whether you trade options, equities, futures, or crypto, this indicator makes it effortless to see what’s flipping — and where the strongest setups are emerging.
🔥 Key Features
📊 Multi-Timeframe Scanning (1 min → Daily)
Monitor 7 customizable timeframes at once.
From scalping to swing trading, you always know which timeframe is turning.
⚡ Real-Time OR Close-Confirmed Logic
Choose your style:
Realtime (Wick Mode) → Fast entries
Close-Confirmed → Stronger validation
Ideal for traders who want precision on any timeframe.
🎨 Clean & Customizable Dashboard
Move the table anywhere on the chart
Adjust text size
Choose your own colors
Lightweight and non-intrusive
A perfect blend of simplicity and power.
📩 Instant Alerts, Built In
Get notified instantly when:
Any timeframe reverses
A specific timeframe flips
Multiple reversals fire across the stack
The indicator works great with TradingView’s push notifications, email, and webhooks.
🎯 What This Helps You Do
✔ Catch Strat reversals as they happen
✔ Quickly spot full-timeframe alignment
✔ Improve your entries for options plays
✔ Avoid chop by reading higher-timeframe intent
✔ Trade more confidently with automated trigger levels
This indicator is built for Strat traders who want to trade smarter, faster, and cleaner.
✨ Perfect For
Strat Traders
Options Traders
Futures Scalpers
Intraday & Swing Traders
Quant/Algo-inspired traders
Anyone following Rob Smith’s methodology
Smart Money OB FVG
Smart Money OB FVG Strategy — Full Description
🔷 Advanced Order Block + Multi-TF FVG + Liquidity Sweep + Auto TP/SL
A Complete Smart Money Concept Trading System
This script combines multiple professional Smart Money tools into a single, optimized and non-repainting engine. Designed for scalpers, intraday traders, swing traders, and algorithmic strategy users.
🔥 Key Features
✔ Intelligent Order Block Engine (IOB)
Automatic bullish & bearish Order Block detection
ATR-based or Range-based volatility filter
Scalp / Normal / Balanced swing structure modes
Auto extending OB zones
Auto-removal of invalid OBs
OB touch alerts
✔ Buy/Sell Signals With Dynamic TP/SL
Non-repainting BUY/SELL structure shift detection
Auto-generated TP & SL levels
SL placement based on OB structure + liquidation buffer
Adjustable Risk-Reward (RR) multiplier
TP/SL labels update in real-time
Fully dynamic lines extending as new candles appear
✔ Liquidity Grab Detection (Wick Liquidity Sweeps)
Upper/lower wick manipulation detection
RSI-supported confirmation
Automatic "LiQ" labels
Strong reversal indication
Liquidity alert system included
✔ Multi-Timeframe FVG Engine (Fair Value Gaps)
Tracks and updates FVG zones from:
15M
1H
4H
1D
Features:
Auto FVG detection
Bullish/Bearish colored zones
Tested FVG repainting → color changes
Auto-cleaning invalid FVGs
Maximum box limits (reduces clutter)
FVG labels inside zones (15M / 1H / 4H / 1D)
One-click master switch for all FVGs
✔ Real-Time Info Panel (Top-Right Table)
Current symbol
Live price
Turkish local time (UTC+3)
Minimalistic, transparent overlay panel
✔ Smart Alerts
OB Buy/Sell signal
Liquidity grab
OB touch
Trend shift
Multi-timeframe FVG alert
Alert-saving mode (prevents alert spam)
💼 Perfect For
Smart Money Concepts traders
Liquidity hunters
OB + FVG traders
Scalpers
Swing & intraday traders
Algorithmic systems
High RR strategy traders
📌 Notes
This is an Invite-Only Script.
Access is given only to approved users.
WPR Dot PlotterWPR = williams percent range dot plotter.
I put my settings at tiny and yellow dot when WPR is between -20 and 0.
Red dot on top when WPR is -80 to -100
Entertainment purposes only.
Plot Multiple Stock Avg Buy , Stop Loss, Target(s-a-t-i-s-h)This indicator will be mostly helpful for individual, broker or consultant who deal with multiple stock purchase and would like to plot Buy Price, Stop Loss, Target, Just upload the stocks in the format given in the indicator and Voila we have all the plotting in the respective charts. Thanks to Claude for helping me to finalize my idea this indicator.
Now consultant / stock broker can give the list to there client with the respective levels and then can plot it easy with this one indicator.
Enjoy--
Astra EdgeAstra Edge Tool
Astra Edge is built from the ground up, through years of real market experience, observation, and execution — not theory.
It reflects how I personally analyze price structure, volatility, and directional bias in live markets.
The indicator combines multiple layers of technical logic — multi-timeframe trend context, fixed daily structure levels, volatility bands, and range compression detection — into one stable, easy-to-read system.
It does not predict or guarantee direction; it reads what the market is doing right now and presents it visually in a structured way.
Every element of Astra Edge — the dashboard, zones, and compression highlights — is designed to help traders interpret market behavior, not chase it.
It aims to bring clarity and control to your intraday or swing decision-making by helping you focus on structure, momentum, and context instead of noise.
It’s not a shortcut or a holy grail.
It’s a refined tool that mirrors how experienced traders actually think — visually, contextually, and systematically.
⚙️ Features
🟢 Multi–Timeframe Dashboard
A clean grid showing five user-selected symbols across three timeframes — giving instant trend alignment and strength visibility.
LTP, % change, and SMA direction are colour-coded for quick interpretation.
🔵 Fixed Market Structure Levels
Automatic plotting of previous day and today’s high, low, open, and close —
the four most powerful reference points for intraday structure and reaction levels.
No repainting, no recalculation — just static, reliable structure.
🟣 Zone Bands
Calculates zones from the prior candles
Weekly or custom timeframe zones
Zones are highlighted dynamically and labeled clearly, helping you identify balance, breakout, and reversal regions visually.
🟠 Sideways Zone Detector
Built-in compression detector that identifies when the market is stuck in range.
Highlights consolidation zones and labels them with optional Zig Zag markers, helping traders avoid choppy conditions or plan breakout traps early.
🟡 Optional Bollinger Framework
Toggleable Bollinger structure that adds volatility context to the chart, helping spot expansions, squeezes, or range resets quickly.
⚙️ Customization
Dashboard and Sideways Zone ON/OFF switches
Adjustable zone thickness, label names, and colours
Works across stocks, indices, forex, and crypto
Optimized for dark and light chart themes
🧠 How to Use
Best for intraday and positional structure analysis
Works on any timeframe — but ideal visualization on 1m to 1h charts
Ideal timeframe 5mins
Focus on zone reactions and structure shifts, not standalone signals
Combine with your own entry confirmation or volume logic
Remember — Astra Edge shows structure, it doesn’t decide trades.
💎 Philosophy
“Every trader has tools. The elite have Astra Edge.”
Astra Edge was built for traders who prefer clarity over clutter and discipline over guesswork.
It combines multiple technical frameworks — not to replace your strategy, but to enhance your judgment.
⚠️ Disclaimer
I am not a SEBI-registered advisor.
This indicator is created purely for educational and informational purposes.
It does not guarantee profits, nor should it be considered investment advice or a trading signal system.
Trading and investing involve risk — use at your own discretion and consult a SEBI-registered financial advisor before making any financial decisions.
Astra Edge follows price action — price action does not follow Astra Edge.
Sometimes it will align perfectly with the trend, other times it won’t.
This is not a Holy Grail, it’s a structured lens to view the market more intelligently.
💼 Access
“Access available to invite-only users.”
All existing users will receive lifetime updates and improvements without any additional charges.
Triple EMA/SMA + crossoverA powerful 3-in-1 Moving Average system — clean, customizable, and built for real-time clarity.
This indicator combines three fully customizable moving averages into a single tool, giving you a complete view of trend behavior, momentum strength, and market structure — all in one compact and intuitive display.
Whether you prefer EMA or SMA, this script lets you switch seamlessly and adapt instantly to any trading style.
⸻
✅ Key Features
🔹 Three Moving Averages, One Indicator
Instead of cluttering your chart with multiple separate MAs, this script intelligently groups:
• MA1
• MA2
• MA3
…into a single, elegant indicator with unified settings and consistent visuals.
Each MA has its own:
• Length
• Rising/Falling/Flat dynamic color system
• Customizable colors
• Trend-based logic
This makes your chart cleaner, faster to read, and much more powerful.
⸻
🔹 Select Your MA Type
Switch all three MAs at once:
• EMA
• SMA
Perfect for testing different interpretations of trend behavior.
⸻
🔹 Advanced Trend Coloring
Each MA automatically adapts its color based on whether it is:
• Rising (uptrend)
• Falling (downtrend)
• Flat (consolidation / low momentum)
You decide the colors for each state — and for each MA individually.
⸻
🔹 MA Crossover Bar Highlights
When MA1 crosses MA2, the script highlights the exact bar with:
• White for bullish crossovers
• Purple for bearish crossovers
This makes trend shifts and potential reversals instantly visible, directly on price bars.
⸻
🔹 Source Flexibility
All three MAs can use any source series:
• Close, Open, HL2, HLC3, OHLC4, etc.
• Or any other series available on your chart
This gives you much more flexibility than standard MA indicators.
⸻
🔹 Beautiful, Clean & Fully Customizable
Every color — rising, falling, flat, crossover — can be changed.
All plots are clearly named (MA1, MA2, MA3) for easier control in the Style panel.
This script brings together:
• clarity
• flexibility
• and clean design
…into a compact, professional-grade indicator.
⸻
🎯 Why this Indicator Helps
You get the full power of three trend tools at once — but without the chart clutter.
Use it to:
• Spot early trend reversals
• Track short/mid/long-term structure simultaneously
• Identify momentum shifts in real time
• Visualize crossovers instantly
• Keep your chart clean and readable
It’s ideal for scalpers, day traders, swing traders, and anyone who wants a powerful yet simple way to read market conditions.
⸻
⚠️ Disclaimer
This script is for educational purposes only and does not constitute financial advice. Always do your own research before trading.
⸻
Compact Fixed R:R ToolLookback Fixed R/R Tool
Helps me trail my Stop to maximize profit for each trade,
My Risk management:(depends on price speed)
1:2 = BE
1:3 = 1:2 Trailing Stop
1:4 = 1:3 Trailing Stop
1:5 = 1:4 Trailing Stop
1:6 = 1:5 Trailing Stop
If Price will run through my R/R levels I will just max my profit based on consistency rule/ try to chuck for max profits
S/R MTF// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © fluxchart
//@version=6
//S&R; V2.12
const bool DEBUG = false
const bool fixSRs = true
const bool fixRetests = false
indicator("crr S/R MTF", overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500, dynamic_requests = true)
const int maxSRInfoListSize = 10
const int maxBarInfoListSize = 3000
const int maxDistanceToLastBar = 500
const int minSRSize = 5
const int retestLabelCooldown = 3
const float tooCloseATR = 1.0 / 8.0
const int labelOffsetBars = 20
const int atrLen = 20
atr = ta.atr(atrLen)
avgVolume = ta.sma(volume, atrLen)
var int curTFMS = timeframe.in_seconds(timeframe.period) * 1000
var map alerts = map.new()
alerts.put("Retest", false)
alerts.put("Break", false)
srPivotLength = input.int(15, "Pivot Length", minval = 3, maxval = 50, group = "General Configuration", display = display.none)
srStrength = input.int(1, "Strength", , group = "General Configuration", display = display.none)
srInvalidation = input.string("Close", "Invalidation", , group = "General Configuration", display = display.none)
expandZones = input.string("Only Valid", "Expand Lines & Zones", options = , group = "General Configuration", display = display.none)
showInvalidated = input.bool(true, "Show Invalidated", group = "General Configuration", display = display.none)
timeframe1Enabled = input.bool(true, title = "", group = "Timeframes", inline = "timeframe1", display = display.none)
timeframe1 = input.timeframe("", title = "", group = "Timeframes", inline = "timeframe1", display = display.none)
timeframe2Enabled = input.bool(false, title = "", group = "Timeframes", inline = "timeframe2", display = display.none)
timeframe2 = input.timeframe("D", title = "", group = "Timeframes", inline = "timeframe2", display = display.none)
timeframe3Enabled = input.bool(false, title = "", group = "Timeframes", inline = "timeframe3", display = display.none)
timeframe3 = input.timeframe("W", title = "", group = "Timeframes", inline = "timeframe3", display = display.none)
showBreaks = input.bool(true, "Show Breaks", group = "Breaks & Retests", inline = "ShowBR", display = display.none)
showRetests = input.bool(true, "Show Retests", group = "Breaks & Retests", inline = "ShowBR", display = display.none)
avoidFalseBreaks = input.bool(false, "Avoid False Breaks", group = "Breaks & Retests", display = display.none)
breakVolumeThreshold = input.float(0.3, "Break Volume Threshold", minval = 0.1, maxval = 2.0, step = 0.1, group = "Breaks & Retests", tooltip = "Only taken into account if Avoid False Breakouts is enabled. Higher values mean it's less likely to be a break.", display = display.none)
inverseBrokenLineColor = input.bool(false, "Inverse Color After Broken", group = "Breaks & Retests", display = display.none)
styleMode = input.string("Lines", "Style", , group = "Style", display = display.none)
lineStyle = input.string("____", "Line Style", , group = "Style", display = display.none)
lineWidth = input.int(2, "Line Width", minval = 1, group = "Style", display = display.none)
zoneSize = input.float(1.0, "Zone Width", minval = 0.1, maxval = 10, step = 0.1, group = "Style", display = display.none)
zoneSizeATR = zoneSize * 0.075
supportColor = input.color(#08998180, "Support Color", group = "Style", inline = "RScolors", display = display.none)
resistanceColor = input.color(#f2364580, "Resistance Color", group = "Style", inline = "RScolors", display = display.none)
breakColor = input.color(color.blue, "Break Color", group = "Style", inline = "RScolors2", display = display.none)
textColor = input.color(#ffffff80, "Text Color", group = "Style", inline = "RScolors2", display = display.none)
enableRetestAlerts = input.bool(true, "Enable Retest Alerts", tooltip = "Needs Show Retests option enabled.", group = "Alerts", display = display.none)
enableBreakAlerts = input.bool(true, "Enable Break Alerts", tooltip = "Needs Show Breaks option enabled.", group = "Alerts", display = display.none)
insideBounds = (bar_index > last_bar_index - maxDistanceToLastBar)
type srInfo
int startTime
float price
string srType
int strength
string timeframeStr
bool ephemeral = false
int breakTime
array retestTimes
type srObj
srInfo info
bool startFixed
bool breakFixed
bool rendered
string combinedTimeframeStr
line srLine
box srBox
label srLabel
label breakLabel
array retestLabels
type barInfo
int t
int tc
float c
float h
float l
var allSRList = array.new()
//#region Find Val RTN Time
findValRtnTime (barInfo biList, valToFind, toSearch, searchMode, minTime, maxTime, int defVal = na) =>
int rtnTime = defVal
float minDiff = na
if biList.size() > 0
for i = biList.size() - 1 to 0
curBI = biList.get(i)
if curBI.t >= minTime and curBI.t < maxTime
toLook = (toSearch == "Low" ? curBI.l : toSearch == "High" ? curBI.h : curBI.c)
if searchMode == "Nearest"
curDiff = math.abs(valToFind - toLook)
if na(minDiff)
rtnTime := curBI.t
minDiff := curDiff
else
if curDiff <= minDiff
minDiff := curDiff
rtnTime := curBI.t
if searchMode == "Higher"
if toLook >= valToFind
rtnTime := curBI.t
break
if searchMode == "Lower"
if toLook <= valToFind
rtnTime := curBI.t
break
rtnTime
//#endregion
formatTimeframeString (string formatTimeframe, bool short = false) =>
timeframeF = (formatTimeframe == "" ? timeframe.period : formatTimeframe)
if str.contains(timeframeF, "D") or str.contains(timeframeF, "W") or str.contains(timeframeF, "S") or str.contains(timeframeF, "M")
timeframe.from_seconds(timeframe.in_seconds(timeframeF))
else
seconds = timeframe.in_seconds(timeframeF)
if seconds >= 3600
hourCount = int(seconds / 3600)
if short
str.tostring(hourCount) + "h"
else
str.tostring(hourCount) + " Hour" + (hourCount > 1 ? "s" : "")
else
if short
timeframeF + "m"
else
timeframeF + " Min"
renderSRObj (srObj sr) =>
if na(sr.info.breakTime) or showInvalidated
sr.rendered := true
endTime = nz(sr.info.breakTime, time + curTFMS * labelOffsetBars)
extendType = extend.none
if na(sr.info.breakTime)
extendType := extend.right
if expandZones == "Only Valid" and na(sr.info.breakTime)
extendType := extend.both
else if expandZones == "All"
extendType := extend.both
endTime := time + curTFMS * labelOffsetBars
labelTitle = formatTimeframeString(sr.info.timeframeStr)
if not na(sr.combinedTimeframeStr)
labelTitle := sr.combinedTimeframeStr
labelTitle += " | " + str.tostring(sr.info.price, format.mintick) + ((sr.info.ephemeral and DEBUG) ? " " : "")
if styleMode == "Lines"
// Line
sr.srLine := line.new(sr.info.startTime, sr.info.price, endTime, sr.info.price, xloc = xloc.bar_time, color = sr.info.srType == "Resistance" ? resistanceColor : supportColor, width = lineWidth, style = lineStyle == "----" ? line.style_dashed : lineStyle == "...." ? line.style_dotted : line.style_solid, extend = extendType)
// Label
sr.srLabel := label.new(extendType == extend.none ? ((sr.info.startTime + endTime) / 2) : endTime, sr.info.price, xloc = xloc.bar_time, text = labelTitle, textcolor = textColor, style = label.style_none)
else
// Zone
sr.srBox := box.new(sr.info.startTime, sr.info.price + atr * zoneSizeATR, endTime, sr.info.price - atr * zoneSizeATR, xloc = xloc.bar_time, bgcolor = sr.info.srType == "Resistance" ? resistanceColor : supportColor, border_color = na, text = labelTitle, text_color = textColor, extend = extendType, text_size = size.normal, text_halign = (extendType != extend.none) ? text.align_right : text.align_center)
// Break Label
if showBreaks
if not na(sr.info.breakTime)
sr.breakLabel := label.new(sr.info.breakTime, sr.info.price, "B", yloc = sr.info.srType == "Resistance" ? yloc.belowbar : yloc.abovebar, style = sr.info.srType == "Resistance" ? label.style_label_up : label.style_label_down, color = breakColor, textcolor = color.new(textColor, 0), xloc = xloc.bar_time, size = size.small)
if (time - curTFMS <= sr.info.breakTime) and (time + curTFMS >= sr.info.breakTime)
alerts.put("Break", true)
// Retest Labels
if showRetests
if sr.info.retestTimes.size() > 0
for i = sr.info.retestTimes.size() - 1 to 0
curRetestTime = sr.info.retestTimes.get(i)
cooldownOK = true
if sr.retestLabels.size() > 0
lastLabel = sr.retestLabels.get(0)
if math.abs(lastLabel.get_x() - curRetestTime) < curTFMS * retestLabelCooldown
cooldownOK := false
if cooldownOK and (curRetestTime >= sr.info.startTime) and (na(sr.info.breakTime) or curRetestTime < sr.info.breakTime)
if time - curTFMS <= curRetestTime and time >= curRetestTime
alerts.put("Retest", true)
sr.retestLabels.unshift(label.new(curRetestTime, sr.info.price, "R" + (DEBUG ? (" " + str.tostring(sr.info.price)) : ""), yloc = sr.info.srType == "Resistance" ? yloc.abovebar : yloc.belowbar, style = sr.info.srType == "Resistance" ? label.style_label_down : label.style_label_up, color = sr.info.srType == "Resistance" ? resistanceColor : supportColor, textcolor = color.new(textColor, 0), xloc = xloc.bar_time, size = size.small))
safeDeleteSRObj (srObj sr) =>
if sr.rendered
line.delete(sr.srLine)
box.delete(sr.srBox)
label.delete(sr.srLabel)
label.delete(sr.breakLabel)
if sr.retestLabels.size() > 0
for i = 0 to sr.retestLabels.size() - 1
curRetestLabel = sr.retestLabels.get(i)
label.delete(curRetestLabel)
sr.rendered := false
var allSRInfoList = array.new()
var barInfoList = array.new()
pivotHigh = ta.pivothigh(srPivotLength, srPivotLength)
pivotLow = ta.pivotlow(srPivotLength, srPivotLength)
barInfoList.unshift(barInfo.new(time, time_close, close, high, low))
if barInfoList.size() > maxBarInfoListSize
barInfoList.pop()
if insideBounds and barstate.isconfirmed
// Find Supports
if not na(pivotLow)
validSR = true
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
curRSInfo = allSRInfoList.get(i)
if (math.abs(curRSInfo.price - pivotLow) < atr * tooCloseATR) and na(curRSInfo.breakTime)
validSR := false
break
if validSR
newSRInfo = srInfo.new(barInfoList.get(srPivotLength).t, pivotLow, "Support", 1, timeframe.period)
newSRInfo.retestTimes := array.new()
//for i = 1 to srPivotLength
//curBI = barInfoList.get(i)
//if (curBI.l <= newSRInfo.price and curBI.c >= newSRInfo.price)
//newSRInfo.strength += 1
//if curBI.t != newSRInfo.startTime
//newSRInfo.retestTimes.unshift(curBI.t)
allSRInfoList.unshift(newSRInfo)
while allSRInfoList.size() > maxSRInfoListSize
allSRInfoList.pop()
// Find Resistances
if not na(pivotHigh)
validSR = true
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
curRSInfo = allSRInfoList.get(i)
if (math.abs(curRSInfo.price - pivotLow) < atr * tooCloseATR) and na(curRSInfo.breakTime)
validSR := false
break
if validSR
newSRInfo = srInfo.new(barInfoList.get(srPivotLength).t, pivotHigh, "Resistance", 1, timeframe.period)
newSRInfo.retestTimes := array.new()
//for i = 1 to srPivotLength
//curBI = barInfoList.get(i)
//if (curBI.h >= newSRInfo.price and curBI.c <= newSRInfo.price)
//newSRInfo.strength += 1
//if curBI.t != newSRInfo.startTime
//newSRInfo.retestTimes.unshift(curBI.t)
allSRInfoList.unshift(newSRInfo)
if allSRInfoList.size() > maxSRInfoListSize
allSRInfoList.pop()
// Handle SR Infos
if insideBounds and (srInvalidation == "Wick" or barstate.isconfirmed)
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
srInfo curSRInfo = allSRInfoList.get(i)
// Breaks
invHigh = (srInvalidation == "Close" ? close : high)
invLow = (srInvalidation == "Close" ? close : low)
closeTime = time
if na(curSRInfo.breakTime)
if curSRInfo.srType == "Resistance" and invHigh > curSRInfo.price
if (not avoidFalseBreaks) or (volume > avgVolume * breakVolumeThreshold)
curSRInfo.breakTime := closeTime
if inverseBrokenLineColor and (not curSRInfo.ephemeral) and curSRInfo.strength >= srStrength
ephSR = srInfo.new(closeTime, curSRInfo.price, "Support", curSRInfo.strength, curSRInfo.timeframeStr, true)
ephSR.retestTimes := array.new()
allSRInfoList.unshift(ephSR)
else if curSRInfo.srType == "Support" and invLow < curSRInfo.price
if (not avoidFalseBreaks) or (volume > avgVolume * breakVolumeThreshold)
curSRInfo.breakTime := closeTime
if inverseBrokenLineColor and (not curSRInfo.ephemeral) and curSRInfo.strength >= srStrength
ephSR = srInfo.new(closeTime, curSRInfo.price, "Resistance", curSRInfo.strength, curSRInfo.timeframeStr, true)
ephSR.retestTimes := array.new()
allSRInfoList.unshift(ephSR)
// Strength & Retests
if na(curSRInfo.breakTime) and time > curSRInfo.startTime and barstate.isconfirmed
if curSRInfo.srType == "Resistance" and high >= curSRInfo.price and close <= curSRInfo.price
int lastRetestTime = 0
if curSRInfo.retestTimes.size() > 0
lastRetestTime := curSRInfo.retestTimes.get(0)
if lastRetestTime != time
if not curSRInfo.ephemeral
curSRInfo.strength += 1
curSRInfo.retestTimes.unshift(time)
else if curSRInfo.srType == "Support" and low <= curSRInfo.price and close >= curSRInfo.price
int lastRetestTime = 0
if curSRInfo.retestTimes.size() > 0
lastRetestTime := curSRInfo.retestTimes.get(0)
if lastRetestTime != time
if not curSRInfo.ephemeral
curSRInfo.strength += 1
curSRInfo.retestTimes.unshift(time)
fixSRToTimeframe (srObj sr) =>
srMS = math.max(timeframe.in_seconds(sr.info.timeframeStr), timeframe.in_seconds()) * 1000
if (not sr.startFixed)
if not sr.info.ephemeral
if sr.info.srType == "Resistance"
sr.info.startTime := findValRtnTime(barInfoList, sr.info.price, "High", "Nearest", sr.info.startTime - srMS, sr.info.startTime + srMS, sr.info.startTime)
else
sr.info.startTime := findValRtnTime(barInfoList, sr.info.price, "Low", "Nearest", sr.info.startTime - srMS, sr.info.startTime + srMS, sr.info.startTime)
sr.startFixed := true
else
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
curSR = allSRList.get(i)
if (not curSR.info.ephemeral) and (not na(curSR.info.breakTime)) and curSR.info.price == sr.info.price and ((sr.info.srType == "Resistance" and curSR.info.srType == "Support") or (sr.info.srType == "Support" and curSR.info.srType == "Resistance"))
if curSR.breakFixed
sr.info.startTime := curSR.info.breakTime
sr.startFixed := true
break
if not na(sr.info.breakTime)
if (not sr.breakFixed)
if sr.info.srType == "Resistance"
sr.info.breakTime := findValRtnTime(barInfoList, sr.info.price, srInvalidation == "Wick" ? "High" : "Close", "Higher", sr.info.breakTime - srMS, sr.info.breakTime + srMS, sr.info.breakTime)
else
sr.info.breakTime := findValRtnTime(barInfoList, sr.info.price, srInvalidation == "Wick" ? "Low" : "Close", "Lower", sr.info.breakTime - srMS, sr.info.breakTime + srMS, sr.info.breakTime)
sr.breakFixed := true
if sr.info.retestTimes.size() > 0 and fixRetests
for i = 0 to sr.info.retestTimes.size() - 1
curRetestTime = sr.info.retestTimes.get(i)
retestStartTime = curRetestTime - srMS
retestStartTime := math.max(retestStartTime, sr.info.startTime + 1)
retestEndTime = curRetestTime + srMS
if not na(sr.info.breakTime)
retestEndTime := math.min(retestEndTime, sr.info.breakTime - 1)
if sr.info.srType == "Resistance"
sr.info.retestTimes.set(i, findValRtnTime(barInfoList, sr.info.price, "High", "Higher", retestStartTime, retestEndTime, sr.info.retestTimes.get(i)))
else
sr.info.retestTimes.set(i, findValRtnTime(barInfoList, sr.info.price, "Low", "Lower", retestStartTime, retestEndTime, sr.info.retestTimes.get(i)))
getSR (srObj list, srPrice, eph, srType, timeframeStr) =>
srObj rtnSR = na
if list.size() > 0
for i = 0 to list.size() - 1
curSR = list.get(i)
if curSR.info.price == srPrice and curSR.info.ephemeral == eph and curSR.info.srType == srType and curSR.info.timeframeStr == timeframeStr
rtnSR := curSR
break
rtnSR
// Handle SR
handleTF (tfStr, tfEnabled) =>
if tfEnabled
tfSRInfoList = request.security(syminfo.tickerid, tfStr, allSRInfoList)
if not na(tfSRInfoList) and tfSRInfoList.size() > 0
for i = 0 to tfSRInfoList.size() - 1
srInfo curSRInfo = tfSRInfoList.get(i)
if fixSRs
currentSameSR = getSR(allSRList, curSRInfo.price, curSRInfo.ephemeral, curSRInfo.srType, curSRInfo.timeframeStr)
if not na(currentSameSR)
if currentSameSR.startFixed
curSRInfo.startTime := currentSameSR.info.startTime
if currentSameSR.breakFixed
curSRInfo.breakTime := currentSameSR.info.breakTime
curSRInfo.retestTimes := currentSameSR.info.retestTimes
// All other info should be replaced except fixed start, break and all retests.
currentSameSR.info := curSRInfo
if not currentSameSR.breakFixed
fixSRToTimeframe(currentSameSR)
else
srObj newSRObj = srObj.new(curSRInfo)
// We handle retests in current timeframe so no need to get them from upper.
newSRObj.info.retestTimes := array.new()
newSRObj.retestLabels := array.new()
fixSRToTimeframe(newSRObj)
allSRList.unshift(newSRObj)
else
srObj newSRObj = srObj.new(curSRInfo)
newSRObj.retestLabels := array.new()
allSRList.unshift(newSRObj)
true
if (bar_index > last_bar_index - maxDistanceToLastBar * 8) and barstate.isconfirmed
if not fixSRs
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
srObj curSRObj = allSRList.get(i)
safeDeleteSRObj(curSRObj)
allSRList.clear()
handleTF(timeframe1, timeframe1Enabled)
handleTF(timeframe2, timeframe2Enabled)
handleTF(timeframe3, timeframe3Enabled)
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
srObj curSRObj = allSRList.get(i)
safeDeleteSRObj(curSRObj)
tooClose = false
for j = 0 to allSRList.size() - 1
closeSR = allSRList.get(j)
if closeSR.rendered and math.abs(closeSR.info.price - curSRObj.info.price) <= tooCloseATR * atr and closeSR.info.srType == curSRObj.info.srType and closeSR.info.ephemeral == curSRObj.info.ephemeral
tooClose := true
if not str.contains((na(closeSR.combinedTimeframeStr) ? formatTimeframeString(closeSR.info.timeframeStr) : closeSR.combinedTimeframeStr), formatTimeframeString(curSRObj.info.timeframeStr))
if na(closeSR.combinedTimeframeStr)
closeSR.combinedTimeframeStr := formatTimeframeString(closeSR.info.timeframeStr) + " & " + formatTimeframeString(curSRObj.info.timeframeStr)
else
closeSR.combinedTimeframeStr += " & " + formatTimeframeString(curSRObj.info.timeframeStr)
break
if (curSRObj.info.strength >= srStrength) and (na(curSRObj.info.breakTime) or (curSRObj.info.breakTime - curSRObj.info.startTime) >= minSRSize * curTFMS) and (not tooClose)
renderSRObj(curSRObj)
// Current Timeframe Retests
if allSRList.size() > 0 and barstate.isconfirmed
for i = 0 to allSRList.size() - 1
srObj curSR = allSRList.get(i)
if na(curSR.info.breakTime) and time > curSR.info.startTime
if curSR.info.srType == "Resistance" and high >= curSR.info.price and close <= curSR.info.price
int lastRetestTime = 0
if curSR.info.retestTimes.size() > 0
lastRetestTime := curSR.info.retestTimes.get(0)
if lastRetestTime != time
curSR.info.retestTimes.unshift(time)
else if curSR.info.srType == "Support" and low <= curSR.info.price and close >= curSR.info.price
int lastRetestTime = 0
if curSR.info.retestTimes.size() > 0
lastRetestTime := curSR.info.retestTimes.get(0)
if lastRetestTime != time
curSR.info.retestTimes.unshift(time)
//plotchar(alerts.get("Break") ? high : na, "", "✅", size = size.normal)
//plotchar(alerts.get("Retest") ? high : na, "", "❤️", size = size.normal, location = location.belowbar)
alertcondition(alerts.get("Retest"), "New Retest", "")
alertcondition(alerts.get("Break"), "New Break", "")
if enableRetestAlerts and alerts.get("Retest")
alert("New Retests Occured.")
if enableBreakAlerts and alerts.get("Break")
alert("New Breaks Occured.")
EMA Position AlertDescription
EMA Position Alert is a comprehensive trend analysis tool designed to help traders instantly identify the market's direction and strength relative to key Exponential Moving Averages (EMAs). By combining visual trend lines with a real-time data dashboard, this indicator provides a clear snapshot of the current price action across short, medium, and long-term horizons.
Whether you are a scalper looking for short-term momentum or a swing trader identifying major trend reversals, this tool simplifies the complex relationship between price and moving averages.
Key Features
1. Multi-EMA System The indicator plots four essential EMAs commonly used by institutional and retail traders:
EMA 21: Short-term trend/momentum.
EMA 55: Medium-term trend.
EMA 100: Major support/resistance level.
EMA 200: Long-term trend filter.
Visual Aid: The EMA lines change transparency automatically. They appear brighter/solid when the price is above them (bullish) and more transparent/faded when the price is below them (bearish).
2. Real-Time Information Dashboard A customizable table (displayed in the top-right corner) provides live data for the current bar:
Status: Clearly indicates if the price is "Above ▲" (Bullish) or "Below ▼" (Bearish) for each specific EMA.
Distance (%): Calculates the percentage distance between the current closing price and each EMA. This is crucial for identifying overextended moves (mean reversion opportunities) or tight consolidation.
Overall Trend Summary:
Strong ★★: Price is above all EMAs (21, 55, 100, 200).
Building ★: Price is above the long-term EMAs (55, 100, 200) but may be testing the short-term trend.
Weak ▼: Price is below all EMAs.
Ranging: Mixed signals (price is sandwiched between EMAs).
3. Custom Alerts Never miss a move. The script comes with built-in alert conditions compatible with TradingView's alert system:
Breakout Alerts: Trigger an alert when price crosses above specific EMAs (21, 55, 100, or 200).
Strong Trend Alert: Trigger an alert when the price successfully holds above all EMAs, signaling a strong bullish phase.
Settings
Show Status Table: Toggle the dashboard on or off.
Table Transparency: Adjust the background opacity of the dashboard to fit your chart theme.
Line Width: Adjust the thickness of the EMA lines for better visibility.
How to Use
Trend Following: Look for the "Strong ★★" status in the dashboard. When the price is above all EMAs and the EMAs are fanning out, it indicates a strong uptrend.
Pullbacks: If the trend is "Strong" but the price drops to test the EMA 21 or EMA 55, look for support bounces.
Mean Reversion: Watch the Distance %. If the distance becomes historically large, the price may be overextended and due for a correction back to the mean.
Consolidation: When the status shows "Ranging" and the Distance % is very low (near 0.00%), a breakout move is likely imminent.
Sal EMA Cloud Trend Labels + Buy/Sell Signals (Real-Time Only)Sal EMA Cloud Trend Labels + Buy/Sell Signals — Real-Time Trend Precision
Unlock cleaner trend detection and faster trade decision-making with the Sal EMA Cloud — a lightweight yet powerful EMA-based trending system designed for intraday and swing traders.
This indicator combines the reliability of the EMA trend model with an intuitive visual experience:
✅ Real-Time Buy/Sell Signals
Instant label-based alerts appear the moment the EMAs cross — giving you clear momentum-shift entries and exits.
✅ Dynamic EMA Cloud
A color-shifting cloud forms between the EMAs, turning green in bullish conditions and red during bearish phases, making trend direction obvious at a glance.
✅ Trend Status Table
A compact, auto-updating table displays the current trend ("Bullish," "Bearish," or "Neutral") in the corner of your chart for quick confirmation.
✅ Clean, Minimal Overlay
No clutter. Just EMAs, a cloud, and actionable signals that work seamlessly across any timeframe.
If you want a straightforward, real-time trend tool that helps you stay on the right side of momentum — this indicator delivers exactly that.
(CRT) MTF Candle Range Theory Model# 🚀 **CASH Pro MTF – Candle Range Theory (CRT) Indicator**
**The Smart Money ICT Setup Detector** 🔥
Hey Traders!
Here is the **ultimate Pine Script indicator** that automatically detects one of the most powerful Smart Money / ICT setups: **Candle Range Theory (CRT)**
---
### What is Candle Range Theory – CRT?
**CRT** is a high-probability price action model based on **liquidity grabs** and **range expansion**.
Price loves to:
1️⃣ Raid the low/high of the previous candle (take stop-losses)
2️⃣ Then reverse and run to the opposite side of the range (or beyond)
When this happens near a **key higher-timeframe level**, magic happens!
### Bullish CRT Model
- Price touches a **strong HTF support**
- Previous candle closes near that support
- Next candle **sweeps the low** (grabs liquidity)
- Current candle **closes above the raided low AND breaks the high** of the sweep candle
**Result → Aggressive bullish move expected!**
**Entry:** On close above the high (or on retest + MSS)
**Stop Loss:** Below the swept low
**Take Profit:** CRT High or next liquidity pool
### Bearish CRT Model
- Price touches a **strong HTF resistance**
- Previous candle closes near resistance
- Next candle **sweeps the high** (grabs buy stops)
- Current candle **closes below the raided high AND breaks the low** of the sweep candle
**Result → Strong bearish expansion!**
**Entry:** On close below the low
**Stop Loss:** Above the swept high
**Take Profit:** CRT Low or next downside liquidity
This whole setup can form in **just 3 candles**… or sometimes more if price consolidates after the sweep.
---
### Why This Indicator is Special
This is **NOT** a simple 3-candle pattern scanner!
This is a **true CRT + MTF confluence beast** with:
- **Multi-Timeframe Confirmation** (default 4H – fully customizable)
- **Built-in RSI Filter** (avoid fake moves in overbought/oversold)
- **Day-2 High/Low Levels** automatically drawn (the exact CRT range!)
- **Clean “LONG” / “SHORT” labels** right on the candle (no ugly arrows or offset)
- **Background highlight** on signal
- **Fully grouped inputs** – super clean settings panel
---
### Features at a Glance
| Feature | Included |
|--------------------------------|----------|
| Higher Timeframe Confirmation | Yes |
| RSI Overbought/Oversold Filter | Yes |
| Day-2 High/Low Lines + Labels | Yes |
| Clean Text Signals (no offset) | Yes |
| Background Highlight | Yes |
| Fully Customizable Colors & Text| Yes |
| Works on All Markets & TFs | Yes |
---
### How to Use
1. Add the indicator to your chart
2. Wait for a **LONG** or **SHORT** label to appear
3. Confirm price is near a **key HTF level** (order block, FVG, etc.)
4. Enter on close or retest (your choice)
5. Manage risk with the drawn Day-2 levels
**Pro Tip:** Combine with ICT Market Structure Shift (MSS) or Fair Value Gaps for even higher accuracy!
RSI-Adaptive T3 & SAR Strategy [PrimeAutomation]⯁ OVERVIEW
The RSI-Adaptive T3 and SAR Confluence Strategy combines adaptive smoothing with dynamic trend confirmation to identify precise trend reversals and continuation opportunities. It fuses the power of an RSI-based adaptive T3 moving average with the Parabolic SAR filter , aiming to trade in harmony with dominant momentum shifts while maintaining tight control through automatic stop-loss placement.
The RSI-Adaptive T3 is a precision trend-following tool built around the legendary T3 smoothing algorithm developed by Tim Tillson, designed to enhance responsiveness while reducing lag compared to traditional moving averages. Current implementation takes it a step further by dynamically adapting the smoothing length based on real-time RSI conditions — allowing the T3 to “breathe” with market volatility. This dynamic length makes the curve faster in trending moves and smoother during consolidations.
To help traders visualize volatility and directional momentum, adaptive volatility bands are plotted around the T3 line, with visual crossover markers and a dynamic info panel on the chart. It’s ideal for identifying trend shifts, spotting momentum surges, and adapting strategy execution to the pace of the market.
⯁ LOGIC
The T3 moving average length dynamically adjusts based on RSI values — when RSI is high, the smoothing period shortens to react faster; when RSI is low, the period increases for stability in slow markets.
A Parabolic SAR filter confirms directional bias, ensuring trades only occur in alignment with the broader market trend.
Long Entries: Trigger when the T3 curve crosses upward while the current price remains above the SAR — signaling bullish momentum alignment.
Short Entries: Trigger when the T3 crosses downward while the price remains below the SAR — confirming bearish trend alignment.
Stops: Dynamic stops are placed using the highest or lowest price over a set lookback period, adapting automatically to market volatility.
⯁ FEATURES
RSI-Adaptive T3 Filter: Adjusts smoothing in real time to market conditions, blending responsiveness with noise reduction.
SAR Confluence Check: Prevents counter-trend entries by confirming momentum direction via the Parabolic SAR.
Automatic Stop Placement: Uses recent highs or lows as stop-loss anchors, minimizing risk exposure.
Color-coded Visualization: The T3 line dynamically changes color based on slope direction, making momentum shifts visually intuitive.
Smoothed Trend Structure: Reduces market noise, allowing cleaner, more reliable trend recognition across different assets.
⯁ CONCLUSION
The RSI-Adaptive T3 and SAR Confluence Strategy delivers an advanced fusion of adaptive smoothing and structural confirmation. By combining RSI-driven reactivity with Parabolic SAR trend validation, this strategy offers a balanced approach to identifying sustainable momentum reversals while maintaining strong risk management through automatic stop levels. Ideal for traders who seek precision entries aligned with adaptive trend dynamics.
[MTX] Weekly Support & Resistance Weekly Support & Resistance
Overview
Discover key market structure with this all-in-one indicator:
Weekly Support & Resistance (SR) levels , Fair Value Gap (FVG) detection , and Automatic Fibonacci retracements .
Designed for MTX traders, it plots non-repainting weekly highs/lows/opens/closes, highlights unmitigated FVGs for potential imbalances, and auto-draws Fib levels, Perfect for swing/day traders on XAUUSD.
🚀 Key Features
- Weekly SR Levels : Plots previous week's High (resistance), Low (support), Open, and Close. Optional historical levels (Week -2/-3).
- SR Zones : Customizable % zones around levels for dynamic support/resistance bands. Fill colors for easy visualization.
- FVG Detection : Identifies bullish (green) and bearish (red) Fair Value Gaps on your chart timeframe.
- buy/sell Signals :
- Trend Filter : Optional EMA/SMA to filter signals
- Auto Fibonacci : auto-retracement with 20+ levels (0%, 23.6%, 38.2%, 50%, 61.8%, 100%, extensions to 423.6%, negatives). Custom colors, labels, and background fills.
- Alerts: Built-in for FVG creation/mitigation + all buy/sell signals. Set up once for real-time notifications.
⚠️ Important Disclaimer
This indicator is for educational and analysis purposes only. It provides visual tools and signals based on historical price action— not financial advice. Past performance ≠ future results. Trading involves risk; use proper risk management. Backtest thoroughly. No guarantees of profitability. Consult a financial advisor.
#tradingview #smc #MTX #fvg #fibonacci #supportresistance
Professional BOS IndicatorThis is a trend following indicator that focuses on BOS, pullback and entry
BTC Future CME Cross-Market DetectorProject Spec: BTC CME Cross-Market Detector
1. Project Overview
Indicator Name
CME Cross-Market Detector
Objective
To identify high-probability trade setups by detecting and confirming "smart money" activity across two distinct market venues simultaneously: a primary crypto exchange (e.g., Bybit, Binance) and the institutional CME futures market.
Core Philosophy
Price movements are often preceded by the positioning of large, institutional players ("smart money"). While their activity can be seen on any single exchange, the signal becomes exceptionally reliable when the same footprint appears at the same time in both the broader crypto derivatives market and the highly regulated institutional futures market. This dual-market confirmation acts as a powerful noise filter, isolating signals that have a higher probability of follow-through.
2. Key Concepts & Signal Logic
The indicator's entire foundation rests on confirming that specific conditions are met on two datasets at the same time: (1) The user's current chart (e.g., BYBIT:BTCUSDT) and (2) The CME Bitcoin Futures chart (CME:BTC1!).
Smart Volume Analysis
To gauge buying vs. selling pressure, the total volume of a single candle is algorithmically split. This is not a perfect science but an effective estimation based on the candle's structure.
Buying Pressure is considered proportional to the distance the price closed from the low. Buying Pressure ≈ Total Volume × ((Close - Low) / (High - Low))
Selling Pressure is considered proportional to the distance the price closed from the high. Selling Pressure ≈ Total Volume × ((High - Close) / (High - Low))
Signal Trigger Conditions
For a potential signal to be identified on each market independently, two conditions must be met:
Volume Spike: The volume of the current candle must be significantly higher than the recent average volume (e.g., >150% of the 20-period moving average). This shows a sudden, high level of interest.
Pressure Imbalance: The estimated buying pressure must overwhelm the selling pressure by a certain factor (e.g., 3x), or vice versa for a sell signal. This indicates a clear directional intent.
The Final Confirmed Signal
A signal is only considered valid and plotted on the chart when the Signal Trigger Conditions (both Volume Spike and Pressure Imbalance) are met on both the primary chart and the CME chart on the very same candle.
3. Signal Strength Calculation
The percentage shown on the chart is a Signal Strength Score (0-100%), which rates the quality and conviction of the confirmed signal.
The score is calculated as follows:
Base Score Calculation (0-100 points): A base score is calculated for each market (primary and CME) by combining two factors:
Volume Component (0-50 pts): Measures the intensity of the volume spike. A 300% volume spike will score higher than a 150% spike.
Imbalance Component (0-50 pts): Measures the intensity of the buy/sell pressure ratio. A 5x imbalance will score higher than a 3x imbalance.
Advanced Modifiers (Bonus Points): The base score is then enhanced with bonus points for favorable conditions:
Trend Alignment (+10 pts): A buy signal that occurs during a clear uptrend receives extra points.
Candle Structure (+10 pts): A buy signal on a candle with a long lower wick (indicating rejection of lower prices) receives extra points.
Final Averaged Score: The final percentage you see is the average of the two individual strength scores calculated for the primary exchange and the CME market.
4. Visualization
Energy Waves: Signals are displayed as circles. Green for Buy Signals (below the candle) and Red for Sell Signals (above the candle).
Dynamic Sizing: The size of the circle directly reflects the Signal Strength Score, categorized into four distinct levels (e.g., 10%+, 40%+, 60%+, and 80%+) for at-a-glance interpretation.
Percentage Labels: Each signal is plotted with its precise, final strength score for clear analysis.
5. Summary: Steps to Replicate the Logic
To recreate this indicator, follow these high-level steps for each candle on the chart:
Gather Data: Fetch the Open, High, Low, Close, and Volume data for the primary chart asset AND for the corresponding CME Bitcoin Futures symbol (CME:BTC1!).
Calculate Buy/Sell Pressure: For both datasets, use the "Smart Volume Analysis" formula to estimate the buying and selling pressure for the current candle.
Check for Volume Spikes: For both datasets, calculate a simple moving average of the volume. Check if the current candle's volume exceeds this average by a set threshold (e.g., 150%).
Check for Pressure Imbalance: For both datasets, check if the buying pressure is greater than the selling pressure by a set multiplier (e.g., 3.0), or vice versa.
Confirm the Signal: A final signal is only valid if the conditions from both Step 3 and Step 4 are true for both datasets on the same candle.
Calculate Strength: If a signal is confirmed, compute a strength score (0-100) for each dataset based on the intensity of the volume spike and pressure imbalance. Add bonus points for confluence factors like trend alignment.
Finalize and Plot: Average the two strength scores from each market. Plot a colored, sized circle on the chart that visually represents this final averaged score, and display the score as a text label.
Last but not least, the idea of the indicator is inspired by 52SIGNAL
Distância Preço vs VWAPIt calculates the distance from the price to the VWAP. The idea is to make it easier to observe when the price might return to the VWAP.
JokaBAR
This script combines my own liquidity/liq-levels engine with open-source code from BigBeluga’s Volumatic indicators:
• “Volumatic Variable Index Dynamic Average ”
• “Volumatic Support/Resistance Levels ”
The original code is published under the Mozilla Public License 2.0 and is reused here accordingly.
What this script does
Joka puts Volumatic trend logic, dynamic support/resistance and a custom liquidation-levels module into a single overlay. The idea is to give traders one clean view of trend direction, key reactive zones and potential liquidation areas where leveraged positions can be forced out of the market.
Volumatic logic is used to build a dynamic average and adaptive levels that react to volume and volatility. On top of that, the script plots configurable liquidation zones for different leverage tiers (e.g. 5x, 10x, 25x, 50x, 100x).
How to use it
Apply the script on pairs where leverage is actually used (perpetual futures / margin).
Use the Volumatic average as a trend filter (above = long bias, below = short bias).
Treat Volumatic support/resistance levels as key reaction zones for entries, partials and stops.
Read the liquidation levels as context: clusters show where forced liquidations can fuel strong moves and bounces.
Keep the chart clean — this tool is designed to be used without stacking extra indicators on top.
The script is published as open-source in line with TradingView House Rules so that other traders can study, tweak and build on it.
BTC ETF Flow Monitor🚀 Bitcoin ETF Flow Monitor - Track Institutional Money Flows
Monitor real-time dollar flows across major Bitcoin ETFs with this professional-grade indicator inspired by Dune Analytics. Perfect for tracking institutional sentiment and Bitcoin adoption trends.
📊 Key Features: • Real Dollar Flows : Display actual estimated flows in millions USD, not abstract indices
• 5 Major ETFs : IBIT (BlackRock), FBTC (Fidelity), ARKB (ARK), BITB (Bitwise), GBTC (Grayscale)
• Dune Analytics Style : Clean, professional visualization with meaningful thresholds
• Smart Alerts : Get notified of significant flow changes and BTC price divergences
• Enhanced Summary Table : Live stats including total flows, trends, and market sentiment
💡 How It Works: Combines volume, price action, and momentum to estimate institutional dollar flows. Positive values = inflows (buying pressure), negative values = outflows (selling pressure). Scale shows millions of USD for easy interpretation.
🎯 Perfect For:
- Tracking institutional Bitcoin adoption
- Identifying accumulation/distribution phases
- Spotting divergences between ETF flows and BTC price
- Understanding market sentiment shifts
⚡ Professional Grade: Built with advanced Pine Script techniques, optimized performance, and real-world trading applications in mind.






















