AG Pro Pivot Cluster Survival Map [AGPro Series]AG Pro Pivot Cluster Survival Map
Overview / What it does
AG Pro Pivot Cluster Survival Map is an overlay tool that evaluates the durability of nearby pivot clusters rather than focusing on a single pivot reaction. The script groups Daily, Weekly, and Monthly Classic Pivot levels when they compress into the same price neighborhood, then measures how well that cluster has held up under repeated interaction.
The goal is not to label every pivot touch as strong or weak. The goal is to show whether a pivot-derived zone has continued to absorb pressure, remain structurally relevant, or lose stability over time. This makes the script suitable for users who want to monitor confluence-based pivot structure instead of isolated one-bar reactions.
The visual model is intentionally compact. The script highlights the nearest upper cluster and the nearest lower cluster, assigns a survival score to each side, and displays a pressure readout for the dominant active zone. The result is a map of pivot-cluster durability, not a generic support/resistance overlay and not a simple reaction detector.
Unique Edge
The distinguishing feature of this script is its focus on pivot-cluster survival.
Many pivot tools concentrate on one level at a time. Many reaction tools classify the immediate response after a touch, reclaim, or rejection. This script approaches the problem differently. It asks whether multiple pivot levels from different higher timeframes are compressing into the same zone, and whether that zone is still surviving repeated market interaction.
That difference matters.
This script does not score a single bounce. It does not try to predict a reversal from one isolated pivot event. It evaluates whether a pivot cluster remains durable after tests, inside-zone pressure, breaches, and time spent without structural failure.
Within the AG Pro catalog, this script is materially different from AG Pro Pivot Points Reaction Map. Pivot Points Reaction Map is centered on reaction quality at pivot levels. Pivot Cluster Survival Map is centered on cluster durability, confluence density, and survival under pressure. In other words, one evaluates the response; the other evaluates the staying power of the pivot cluster itself.
It is also different from broader level-survival or support/resistance tools because the source engine here is explicitly pivot-derived. The script is built around Daily, Weekly, and Monthly Classic Pivot families, then transformed into a confluence-survival framework.
Methodology
The current version uses Classic Pivot calculations from higher timeframes.
1. Daily, Weekly, and Monthly pivot levels are collected.
2. Nearby pivot levels are grouped into clusters when they fall within the active cluster width.
3. The script selects the nearest upper cluster and the nearest lower cluster relative to current price.
4. Each selected cluster is evaluated with a survival model.
The survival model is based on factors such as:
- cluster density
- higher-timeframe participation
- repeated tests
- rejection behavior
- inside-zone pressure
- breach frequency
- time since structural failure
A higher survival score suggests that the cluster has remained more durable under recent interaction. A higher pressure reading suggests that the cluster is experiencing more structural stress.
The chart display is intentionally selective. Instead of plotting every pivot line independently, the script concentrates on the nearest relevant clusters and presents them as zones with a backbone line and state label. This is designed to keep the structure readable.
States / Signals
The script uses state-based interpretation rather than directional promises.
Typical state classifications include:
- Stable
- Strengthening
- Balanced
- Under Stress
- Fragile
- Failed
These states are derived from the relationship between survival and pressure. They are meant to describe the condition of the cluster, not to issue a guaranteed trading outcome.
The panel summarizes:
- nearest upper cluster
- nearest lower cluster
- dominant survival side
- cluster pressure
- pivot mix currently included in the model
The script can also generate alert conditions for:
- cluster strengthening
- cluster failure
- cluster reclaim behavior
These alerts are deterministic conditions derived from the script logic. They are informational and should be interpreted within a broader market workflow.
Key Inputs
Pivot Formula
This version is intentionally limited to Classic Pivots in order to keep the clustering and scoring model consistent.
Include Daily / Weekly / Monthly
These settings control which higher-timeframe pivot families are included in the cluster engine.
Cluster ATR Width
Controls how aggressively nearby pivot levels are merged into the same cluster using ATR-based spacing.
Cluster Percent Width
Adds a percentage-based width floor so clusters remain practical across different price scales.
Minimum Levels Per Cluster
Controls how many pivot levels are required before a true cluster is recognized.
Survival Lookback
Defines the observation window used for the durability calculations.
Visual Controls
The script includes settings for cluster visibility, labels, backbone lines, panel location, and font sizes.
Limitations & Transparency
This script is a structural reading tool. It is not a prediction engine.
A high survival score does not guarantee that price will reverse, hold, or trend from that area. A low survival score does not guarantee immediate failure. The values should be read as condition metrics for pivot-derived zones.
Because the script groups pivot levels into clusters, output can vary depending on volatility, symbol characteristics, and timeframe context. On some symbols, one side may show a stronger cluster than the other. On some charts, one side may temporarily rely on a weaker fallback anchor when cluster density is limited.
This script does not attempt to replace market structure analysis, higher-timeframe context, liquidity analysis, or risk management. It is intended to organize pivot confluence into a readable survival framework.
What this script is not:
- not a buy/sell signal engine
- not a guarantee of support or resistance
- not a standalone trade system
- not a future-price prediction model
Risk Disclosure
This script is for chart analysis and decision support only. It does not provide financial, investment, or trading advice. Markets can move unpredictably, and no indicator can eliminate risk.
Users should evaluate signals, states, and cluster conditions together with their own process, timeframe alignment, and risk controls before making any decision.
Indicator

SuperTrend Cluster (Zeiierman)█ Overview
SuperTrend Cluster (Zeiierman) is a weighted multi-SuperTrend regime indicator that combines 5 differently configured SuperTrend models into a single consensus view. Instead of relying on a single ATR length and a single factor, the script builds a cluster of fast, medium, and slow SuperTrend members, measures how strongly they agree, and then plots the dominant bullish or bearish regime as a weighted trend line. The result is a cleaner trend map built from internal SuperTrend agreement rather than a single trend line.
█ How It Works
For each bar, the script does 3 main things:
⚪ Build 5 SuperTrend members
Each member first smooths the source with the selected moving average type and length, then applies its own SuperTrend calculation using the chosen ATR Length and Factor.
That gives 5 outputs:
5 direction states
5 active SuperTrend lines
⚪ Measure weighted agreement
Each member contributes its assigned weight to either the bullish side or the bearish side.
The script sums:
Bullish cluster weight
Bearish cluster weight
Those are converted into:
Bull Cluster Score
Bear Cluster Score
Cluster Strength
So the final regime is based on weighted internal agreement rather than on a single member.
⚪ Filter through the Base SuperTrend
Even if the cluster is bullish or bearish enough, the selected Base SuperTrend must also align with that side before the final regime flips.
That means:
A bullish cluster only becomes active if the base member is bullish
A bearish cluster only becomes active if the base member is bearish
This keeps the final output more structured and avoids cluster flips that are not confirmed by the chosen anchor member.
█ How to Use
Use this for trend trading with SuperTrend.
Bull Cluster → look for longs.
Bear Cluster → look for shorts.
The % shows how strong the trend is:
Higher % = stronger agreement
Low % = weak/mixed market
Use the weighted SuperTrend line as your guide:
Above it → bullish bias
Below it → bearish bias
Pullbacks to the line = potential entries
Best trades happen when direction and score are both strong.
█ How to Read the Cluster Scores
Bull Cluster Score
Measures how much of the total weighted cluster is currently bullish.
Bear Cluster Score
Measures how much of the total weighted cluster is currently bearish.
█ Settings
Consensus Threshold — minimum weighted agreement required before the bullish or bearish cluster becomes valid.
Base SuperTrend Index — selects which of the 5 members acts as the base reference for flip markers, label placement, and final alignment.
ATR Length — controls how fast or slow the volatility band reacts.
Factor — controls how far the SuperTrend line sits from the price.
Smoothing — selects the moving average used before the SuperTrend is calculated.
Length — controls how much smoothing is applied.
Weight — controls that member’s influence inside the final weighted cluster.
Key effect:
Lower ATR Length + lower Factor = faster, more reactive member
Higher ATR Length + higher Factor = slower, more stable member
Higher Weight = greater impact on cluster direction
Higher Consensus Threshold = fewer but stronger regime flips
-----------------
Disclaimer
The content provided in my scripts, indicators, ideas, algorithms, and systems is for educational and informational purposes only. It does not constitute financial advice, investment recommendations, or a solicitation to buy or sell any financial instruments. I will not accept liability for any loss or damage, including without limitation any loss of profit, which may arise directly or indirectly from the use of or reliance on such information.
All investments involve risk, and the past performance of a security, industry, sector, market, financial product, trading strategy, backtest, or individual's trading does not guarantee future results or returns. Investors are fully responsible for any investment decisions they make. Such decisions should be based solely on an evaluation of their financial circumstances, investment objectives, risk tolerance, and liquidity needs.
Indicator

Cluster Money Flow Index [UAlgo]Cluster Money Flow Index is a zone based MFI structure tool designed to detect repeated Money Flow Index turning points and group them into meaningful reaction areas. Instead of treating every isolated MFI pivot as a standalone event, the script searches for clusters of nearby pivots that occur around similar MFI levels. When enough touches accumulate in the same area, the indicator promotes that region into a live zone.
The main idea is simple. If MFI repeatedly turns down from a similar high region, that area can behave like an overbought supply style zone inside the oscillator. If MFI repeatedly turns up from a similar low region, that area can behave like an oversold demand style zone. By clustering these repeated reactions, the script attempts to map oscillator structure in the same way traders often map support and resistance on price.
What makes this indicator especially useful is that the zones are not static. They can expand when fresh touches appear, they gain visual strength as more reactions accumulate, and they can later be invalidated if MFI decisively breaks beyond them. This creates a much more dynamic view than a simple overbought line, oversold line, or ordinary pivot marker.
The script also includes a smoothed MFI reference, optional center lines, zone labels, a live dashboard, and alert conditions when MFI enters active cluster zones. This makes the indicator useful both for structural oscillator analysis and for workflow monitoring.
In practical use, Cluster Money Flow Index can help highlight repeated MFI rejection areas, repeated MFI support areas, transition zones near the middle range, and regions where oscillator behavior has historically clustered before reversal or pause.
🔹 Features
🔸 Pivot Based MFI Structure Detection
The script detects confirmed MFI pivot highs and pivot lows using user defined left and right pivot settings. This means clusters are built only from confirmed oscillator turning points rather than from every small fluctuation.
🔸 Cluster Logic Instead of Single Pivot Logic
A new pivot does not automatically create a new zone. The script first checks whether that pivot is close enough to an existing valid cluster. If it is, the cluster gains another touch. If it is not, a new cluster is created.
🔸 Adaptive Proximity Threshold
Cluster sensitivity is based on MFI volatility. The script calculates the standard deviation of raw MFI and multiplies it by the user selected proximity multiplier. This makes zone grouping adapt to the current oscillator environment.
🔸 Minimum Touch Confirmation
A cluster is displayed only after it reaches the required minimum number of touches. This helps filter out weak one time reactions and focuses attention on repeated oscillator behavior.
🔸 Optional Zone Expansion
When enabled, the zone can expand with each new retest. If a fresh pivot extends beyond the current cluster boundary, the top or bottom is updated and the center is recalculated. This allows the zone to evolve naturally as more data arrives.
🔸 Dynamic Zone Strength Visualization
Zones become slightly more visible as touch count increases. This gives stronger clusters more visual weight and helps the user quickly distinguish weak from strong oscillator regions.
🔸 Overbought, Oversold, and Mid Context
Zone color is chosen from the zone center. Clusters centered high in the MFI range use the overbought color, clusters centered low use the oversold color, and clusters near the middle range use the mid color.
🔸 Optional Center Line and Labels
Each displayed cluster can include a center line and an information label showing whether the zone is an upper or lower type cluster, its approximate center level, and its total touch count.
🔸 Invalidation Logic
A zone remains valid until MFI breaks clearly beyond it. Upper clusters are invalidated if MFI pushes decisively above the zone. Lower clusters are invalidated if MFI drops decisively below it.
🔸 Dashboard Summary
A built in dashboard can show current MFI state, number of active upper and lower zones, strongest cluster strength, and the nearest upper and lower cluster centers.
🔸 Alert Support
Alerts are provided for:
MFI entering an upper cluster zone,
MFI entering a lower cluster zone,
MFI crossing above 80,
and MFI crossing below 20.
🔹 Calculations
1) Calculating Raw and Smoothed MFI
float rawMFI = ta.mfi(hlc3, mfiLen)
float smoothedMFI = ta.ema(rawMFI, mfiSmooth)
This is the starting point of the indicator.
The script first calculates the standard Money Flow Index from hlc3 using the selected MFI length. Then it applies an EMA smoothing pass to create a softer reference line.
The raw MFI is used for all pivot detection, clustering, invalidation, zone interaction, and alerts. The smoothed MFI is mainly a visual aid that helps the user see the broader oscillator path more clearly.
So the indicator always builds its logic from raw MFI structure while also giving the user a smoother secondary guide.
2) Defining the Cluster Object
type MFICluster
float top
float bottom
float center
bool isOB
int touches
int firstBarTime
int lastTouchTime
int firstBarIdx
bool isValid
bool isDisplayed
box zoneBox
line centerLine
label infoLabel
This object stores the full lifecycle of one MFI cluster zone.
It contains:
the zone top,
the zone bottom,
the center level,
whether the zone came from an upper pivot or lower pivot,
how many touches it has,
when it first formed,
when it was last touched,
whether it is still valid,
whether it has already been drawn,
and its visual objects.
So the script is not just plotting shapes. It is managing structured oscillator zones that have state, memory, and display properties.
3) Calculating the Adaptive Proximity Threshold
float mfiStd = ta.stdev(rawMFI, 50)
float proximity = math.max(2.0, mfiStd * proxMult)
This is the sensitivity engine of the clustering logic.
The script measures the standard deviation of raw MFI over the last fifty bars. It then multiplies that volatility measure by the user selected proximity multiplier. Finally, it enforces a minimum threshold of 2.0.
This means a new pivot is considered close enough to an existing cluster only if it lies within a volatility adjusted distance from the cluster center.
So the zone grouping automatically adapts to how noisy or how compressed the MFI environment currently is.
4) Detecting Confirmed MFI Pivot Highs and Lows
float mfiPH = ta.pivothigh(rawMFI, pivotLeft, pivotRight)
float mfiPL = ta.pivotlow(rawMFI, pivotLeft, pivotRight)
This is the pivot discovery step.
The script finds confirmed pivot highs and pivot lows directly on the raw MFI series. A pivot high becomes an upper type candidate cluster. A pivot low becomes a lower type candidate cluster.
Because the pivots are confirmed using both left and right bars, the script avoids reacting too early to temporary oscillator wiggles.
So all clustering logic is based on confirmed structure rather than live unconfirmed turns.
5) Checking Whether a Pivot Belongs to an Existing Cluster
method checkProximity(MFICluster this, float pivotVal, bool isOB, float threshold) =>
bool result = false
if this.isOB == isOB and this.isValid
if math.abs(pivotVal - this.center) <= threshold
result := true
result
This method decides whether a new pivot should strengthen an existing cluster.
A pivot can only join a cluster if:
the cluster is of the same type,
the cluster is still valid,
and the distance between the pivot value and the cluster center is less than or equal to the current threshold.
This is important because upper pivot highs are never mixed with lower pivot lows, and stale invalidated clusters are ignored.
So this method is the actual grouping filter that turns repeated nearby pivots into one shared zone.
6) Adding a New Touch to a Cluster
method addTouch(MFICluster this, float pivotVal, int pTime, bool shouldExpand) =>
this.touches += 1
this.lastTouchTime := pTime
if shouldExpand
if pivotVal > this.top
this.top := pivotVal
if pivotVal < this.bottom
this.bottom := pivotVal
this.center := (this.top + this.bottom) / 2.0
int(na)
Once a pivot is assigned to a cluster, this method updates the cluster state.
The touch count is incremented and the last touch time is refreshed. If zone expansion is enabled, the script also checks whether the new pivot extends above the current top or below the current bottom. If it does, the cluster boundaries are widened and the center is recalculated.
So clusters do not have to remain frozen. They can evolve as new oscillator reactions appear.
7) Creating a New Cluster When No Match Exists
if not wasClustered
float zoneHalf = math.max(proximity * 0.15, 0.8)
float zTop = pVal + zoneHalf
float zBot = pVal - zoneHalf
MFICluster newCl = MFICluster.new(
top = zTop,
bottom = zBot,
center = pVal,
isOB = isOB,
touches = 1,
firstBarTime = pTime,
lastTouchTime= pTime,
firstBarIdx = pBarIdx,
isValid = true,
isDisplayed = false)
If the new pivot does not belong to any existing valid cluster, the script creates a fresh cluster.
The initial zone width is determined from the current proximity threshold. Specifically, the script takes fifteen percent of that threshold and applies it equally above and below the pivot center, while enforcing a minimum half size of 0.8.
So every new cluster begins as a compact seed zone around one confirmed pivot and can later grow through repeated touches.
8) Minimum Touch Display Rule
if this.touches >= minT
This is the first major visual gate inside the drawing logic.
A cluster is not drawn just because it exists internally. It becomes visible only when its touch count reaches the user selected minimum touches threshold.
This helps reduce noise by hiding weak single touch or low confidence zones until repeated oscillator interaction has been proven.
So display is based on structural repetition, not just first occurrence.
9) Zone Strength and Opacity Calculation
f_calcOpacity(int touches, int baseOp) =>
float strength = math.min((touches - 1) / 8.0, 1.0)
int result = int(baseOp + (strength * 15))
math.min(result, 40)
This function converts touch count into visual intensity.
The script measures strength from the number of touches relative to a capped scale. Then it adds that strength bonus to the base opacity setting, while also imposing an upper limit.
This means zones with more touches appear slightly stronger and easier to notice than weaker zones.
So touch count influences not only logic, but also visual emphasis.
10) Zone Color Selection
f_zoneColor(float center) =>
center >= 70 ? obColor : center <= 30 ? osColor : midColor
This is the color classification rule.
If the cluster center is at or above 70, the zone uses the overbought color.
If the cluster center is at or below 30, the zone uses the oversold color.
Anything in between uses the mid color.
This is important because a cluster may come from an upper or lower pivot, but its actual center still determines how extreme its oscillator location really is.
So the visual color reflects where the cluster sits inside the MFI range.
11) Drawing the Zone Box
this.zoneBox := box.new(
left=this.firstBarTime, top=this.top, right=time, bottom=this.bottom,
border_color=borderCol, border_width=bWidth, bgcolor=fillCol,
xloc=xloc.bar_time)
Once the cluster qualifies for display, the script draws a box from the first touch time to the current bar time, with the cluster’s top and bottom as boundaries.
So the zone is not a single point marker. It becomes a persistent horizontal oscillator region that extends over time.
This makes the MFI structure much easier to interpret as a live area rather than isolated pivot dots.
12) Drawing the Optional Center Line
if drawCenter
this.centerLine := line.new(
x1=this.firstBarTime, y1=this.center, x2=time, y2=this.center,
color=color.new(baseCol, zoneOpacity - 5), style=line.style_dotted,
width=1, xloc=xloc.bar_time)
If enabled, the script also draws a center line through the middle of the cluster.
This gives the user a clean reference for the average reaction level inside the zone, which can be useful when the zone expands and becomes wider over time.
So the center line acts like an equilibrium guide inside the cluster.
13) Drawing the Info Label
string typeStr = this.isOB ? "OB" : "OS"
string lblText = typeStr + " · " + str.tostring(math.round(this.center, 1)) + " | ×" + str.tostring(this.touches)
this.infoLabel := label.new(
x=time, y=this.isOB ? this.top : this.bottom,
text=lblText, textcolor=textCol,
style=label.style_none, size=f_labelSize(lSize),
xloc=xloc.bar_time, textalign=text.align_right)
The label contains three pieces of information:
the cluster type,
the approximate center level,
and the touch count.
This means a user can immediately see whether the zone is an upper or lower cluster, where it is centered, and how strong it is based on repeated reactions.
So the label turns the zone into an interpretable structural object instead of only a colored band.
14) Updating Existing Displayed Zones
box.set_right(this.zoneBox, time)
box.set_bgcolor(this.zoneBox, fillCol)
box.set_border_color(this.zoneBox, borderCol)
box.set_border_width(this.zoneBox, bWidth)
box.set_top(this.zoneBox, this.top)
box.set_bottom(this.zoneBox, this.bottom)
Once a zone is already displayed and still valid, the script updates it on every bar.
It extends the right edge to the latest time, refreshes the fill and border styling, and updates the top and bottom in case the zone expanded after new touches.
So visible zones remain live and adaptive rather than remaining frozen in their original shape.
15) Zone Invalidation Logic
method invalidate(MFICluster this, float mfiVal) =>
bool broken = false
if this.isOB
if mfiVal > this.top + 2
broken := true
else
if mfiVal < this.bottom - 2
broken := true
if broken
this.isValid := false
broken
This method decides when a cluster has failed.
For upper type clusters, invalidation occurs if MFI pushes clearly above the zone top by more than two MFI points.
For lower type clusters, invalidation occurs if MFI falls clearly below the zone bottom by more than two MFI points.
This extra buffer is important because it avoids invalidating zones on tiny marginal touches.
So the script requires a decisive break beyond the zone before it stops treating that cluster as active structure.
16) Visual Handling of Invalidated Zones
else
box.set_bgcolor(this.zoneBox, color.new(baseCol, math.max(zoneOpacity + 20, 95)))
box.set_border_color(this.zoneBox, color.new(baseCol, math.max(zoneOpacity + 20, 95)))
if not na(this.centerLine)
line.set_style(this.centerLine, line.style_dashed)
line.set_color(this.centerLine, color.new(baseCol, 80))
When a cluster becomes invalid, the script does not delete it immediately. Instead, it fades the zone heavily and softens the center line.
This allows the user to keep the historical context of where the zone existed while also clearly seeing that it is no longer considered valid.
So invalidated zones remain on the pane as context, but not as active structure.
17) Detecting Whether MFI Is Inside an Active Cluster
if cl.isValid and cl.touches >= minTouches
if cl.isOB and rawMFI >= cl.bottom and rawMFI <= cl.top + 5
inOBZone := true
if not cl.isOB and rawMFI <= cl.top and rawMFI >= cl.bottom - 5
inOSZone := true
This block checks whether the current raw MFI value has entered a valid displayed cluster zone.
For upper clusters, the script allows a small tolerance above the zone.
For lower clusters, it allows a small tolerance below the zone.
This produces the conditions used by the entry alerts. So the alerts are not tied merely to MFI crossing 80 or 20. They can also trigger when MFI enters historically clustered oscillator reaction areas.
18) Dashboard Metrics
int obZoneCount = 0
int osZoneCount = 0
int strongMax = 0
float nearOB = na
float nearOS = na
if cl.touches > strongMax
strongMax := cl.touches
if cl.touches >= minTouches
if cl.center >= 70
obZoneCount += 1
else if cl.center <= 30
osZoneCount += 1
The dashboard summarizes the live structure.
It counts how many active displayed zones are centered in overbought and oversold territory, finds the highest touch count among all clusters, and tracks the nearest upper and lower cluster centers relative to current MFI.
So the dashboard gives a quick structural overview without requiring the user to visually inspect every zone one by one.
19) MFI State Classification for the Dashboard
string mfiState = rawMFI >= 80 ? "OVERBOUGHT" : rawMFI <= 20 ? "OVERSOLD" : rawMFI >= 50 ? "BULLISH" : "BEARISH"
This line classifies the current oscillator state into four broad conditions.
At or above 80 is treated as overbought.
At or below 20 is treated as oversold.
Between 50 and 80 is treated as bullish.
Between 20 and 50 is treated as bearish.
This gives the dashboard an easy to read directional context in addition to the cluster statistics.
20) Alert Conditions
alertcondition(inOBZone, title="MFI Entered OB Cluster Zone", message="Cluster MFI: Price entered an overbought cluster zone — watch for reversal")
alertcondition(inOSZone, title="MFI Entered OS Cluster Zone", message="Cluster MFI: Price entered an oversold cluster zone — watch for reversal")
alertcondition(ta.crossover(rawMFI, 80), title="MFI Crossed Above 80", message="Cluster MFI: MFI crossed above 80 — overbought territory")
alertcondition(ta.crossunder(rawMFI, 20), title="MFI Crossed Below 20", message="Cluster MFI: MFI crossed below 20 — oversold territory")
The script provides four alert types.
Two alerts are structural cluster alerts:
entering an upper cluster,
and entering a lower cluster.
Two alerts are classic threshold alerts:
crossing above 80,
and crossing below 20.
So the user can monitor both traditional MFI extremes and the more advanced cluster based structure. Indicator

Liquidity Clusters Magnitude [LuxAlgo]The Liquidity Clusters Magnitude indicator quantifies the intensity of dynamic support and resistance zones by counting the number of candle wick "touches" at the most inclusive liquidity levels within a rolling window. This enhanced version includes smoothing, a trend-following metric, and a real-time dashboard to provide a comprehensive view of historical rejection density.
🔶 USAGE
The indicator plots three primary metrics on a centered oscillator to represent liquidity dynamics:
Bullish Magnitude (Green): Represents the concentration of lower wicks touching the support cluster level. A higher value indicates strong buying pressure or rejection at that level.
Bearish Magnitude (Red): Represents the concentration of upper wicks touching the resistance cluster level. A higher negative value indicates strong selling pressure or rejection.
Trend Metric (Blue): A composite line moving between the two areas, representing the net bias between bullish and bearish liquidity. It helps traders identify the prevailing "side" of the market's liquidity interest.
Traders can identify significant liquidity events when the magnitude metrics spike beyond the Magnitude Threshold . These events are highlighted by Signal Dots on the oscillator lines. A real-time Dashboard provides a summary of current magnitudes and the overall "Trend State."
The vertical gradient fills provide a clear "heat map" effect, where the intensity of the color represents the density of the liquidity cluster, fading out as values approach the zero line.
🔶 DETAILS
The script uses mathematical constraints to ensure the identified levels represent true historical "clusters":
🔹 Body-Crossing Constraint
Liquidity levels are strictly constrained to remain outside the highest and lowest candle bodies within the window. This ensures they represent price points reached but not sustained by a close, focusing purely on wick-based rejection.
🔹 Smoothing & Thresholds
To filter out noise, the magnitude metrics are smoothed using a moving average. Threshold lines are included to define what constitutes a "significant" cluster, preventing false signals from minor wick touches and providing clear breakout points for liquidity expansion.
🔹 Trend Analysis
By calculating the difference between bullish and bearish magnitudes, the Trend Metric captures the shift in liquidity focus. This helps traders spot reversals or continuations before they manifest as large price moves by showing which side of the range is seeing more frequent rejection.
🔶 SETTINGS
Window Size: The lookback period for identifying clusters. Larger values identify major historical levels; smaller values focus on local liquidity.
Smoothing: Controls the responsiveness of the oscillator lines.
Magnitude Threshold: Sets the bar for identifying significant liquidity events and triggering signal dots.
Visuals: Customize the colors for bullish, bearish, and trend metrics, as well as the visibility of signal dots.
Dashboard: Enable/disable the status table and adjust its position and size.
Indicator

Apex / ChartFanatics Bubbles + Clusters + SweepsApex / ChartFanatics Bubbles + Clusters + Sweeps
This open-source indicator combines four visual elements — Volume Bubbles, Volume Clusters, Liquidity Sweep Markers, and Dynamic Supply/Demand Zones — into a single overlay tool. The goal is to provide traders with a unified view of volume intensity, aggressive price action, and key institutional reference levels on any timeframe or instrument.
Why this combination?
Many volume and structure tools exist separately, but combining them creates synergy:
- Volume Bubbles highlight relative volume strength instantly (quick glance at participation level).
- Volume Clusters emphasize high-volume bars as potential support/resistance areas.
- Liquidity Sweep markers flag classic "fakeout" or stop-hunt behavior (aggressive wicks that fail to sustain).
- Supply/Demand zones provide context for where price is likely to react after sweeps or clusters form.
Together, these elements help traders spot:
- Areas of high institutional interest (clusters + zones)
- Potential reversals after liquidity grabs (sweeps + zones)
- Confirmation of momentum via volume size and candle direction (bubbles + clusters)
This mashup is not random — it follows a logical Smart-Money / Order-Flow inspired workflow: detect volume → identify aggressive liquidity raids → map reaction zones → visualize everything for fast decision-making.
Core Features & How They Work
1. Volume Bubbles (Quantile-Based)
- Volume is ranked against a rolling lookback (default 200 bars).
- Dynamic quantiles divide the volume range into buckets (default 10 levels).
- Bubble size scales with quantile rank (tiny → huge).
- Color: bright green (bullish close) or bright red (bearish close), with adjustable opacity.
- Only shown when volume exceeds 1.2× the lookback minimum (avoids noise).
- Tooltip shows exact volume, delta (close-open), and quantile position.
2. Volume Clusters
- Draws semi-transparent boxes around bars exceeding a user-defined minimum volume.
- Width adjustable (default 4 bars forward) to highlight clusters visually.
- Same bullish/bearish coloring as bubbles for consistency.
3. Liquidity Sweeps
- Detects classic sweep patterns on the previous bar:
→ Bullish sweep: high > previous high, but close < previous high AND bearish candle
→ Bearish sweep: low < previous low, but close > previous low AND bullish candle
- Marked with a bright yellow star (★) label + tooltip.
- Useful for identifying potential stop hunts or failed breakouts.
4. Supply & Demand Zones
- Uses pivot high/low (default lookback 20 left/right) to detect swing points.
- Supply zone: from pivot high downward by 2× ATR(14).
- Demand zone: from pivot low upward by 2× ATR(14).
- Zones extend rightward dynamically (up to +30 bars) and remain visible until new pivots form.
- Brownish for supply (resistance), greenish for demand (support).
Inputs & Customization
- Bubble Quantiles (3–15): more levels = finer volume grading
- Bubble Opacity: controls transparency
- Volume Lookback: historical window for quantile calculation
- Cluster settings: toggle, min volume, width
- Sweeps & Zones: individual toggles
- Zone Pivot Lookback: sensitivity of swing detection
How to Use
- Best on lower timeframes (1m–15m) for scalping/day trading or higher (1h–4h) for swing setups.
- Look for confluence:
→ Large green bubble + cluster + demand zone + bullish sweep = strong support area
→ Large red bubble + cluster + supply zone + bearish sweep = strong resistance area
- Use sweeps as early warning of potential reversal when price approaches a zone.
- Combine with your own price action or structure analysis — this is a visual aid, not a signal generator.
- Keep chart clean: toggle off unused features if cluttered.
Publishing Notes
- Publish with a clean chart (only this indicator active, no other overlays/drawings).
- Recommended symbols: volatile instruments (forex majors, indices, crypto, gold).
- Max labels/boxes set high (500) to handle long histories — reduce if performance issues occur.
This script is fully open-source for transparency and learning. It is provided for educational purposes — no guarantees of profitability. Trading involves risk.
Feedback welcome — happy charting! Indicator

Volume Cluster Heatmap [BackQuant]Volume Cluster Heatmap
A visualization tool that maps traded volume across price levels over a chosen lookback period. It highlights where the market builds balance through heavy participation and where it moves efficiently through low-volume zones. By combining a heatmap, volume profile, and high/low volume node detection, this indicator reveals structural areas of support, resistance, and liquidity that drive price behavior.
What Are Volume Clusters?
A volume cluster is a horizontal aggregation of traded volume at specific price levels, showing where market participants concentrated their buying and selling.
High Volume Nodes (HVN) : Price levels with significant trading activity; often act as support or resistance.
Low Volume Nodes (LVN) : Price levels with little trading activity; price moves quickly through these areas, reflecting low liquidity.
Volume clusters help identify key structural zones, reveal potential reversals, and gauge market efficiency by highlighting where the market is balanced versus areas of thin liquidity.
By creating heatmaps, profiles, and highlighting high and low volume nodes (HVNs and LVNs), it allows traders to see where the market builds balance and where it moves efficiently through thin liquidity zones.
Example: Bitcoin breaking away from the high-volume zone near 118k and moving cleanly through the low-volume pocket around 113k–115k, illustrating how markets seek efficiency:
Core Features
Visual Analysis Components:
Heatmap Display : Displays volume intensity as colored boxes, lines, or a combination for a dynamic view of market participation.
Volume Profile Overlay : Shows cumulative volume per price level along the right-hand side of the chart.
HVN & LVN Labels : Marks high and low volume nodes with color-coded lines and labels.
Customizable Colors & Transparency : Adjust high and low volume colors and minimum transparency for clear differentiation.
Session Reset & Timeframe Control : Dynamically resets clusters at the start of new sessions or chosen timeframes (intraday, daily, weekly).
Alerts
HVN / LVN Alerts : Notify when price reaches a significant high or low volume node.
High Volume Zone Alerts : Trigger when price enters the top X% of cumulative volume, signaling key areas of market interest.
How It Works
Each bar’s volume is distributed proportionally across the horizontal price levels it touches. Over the lookback period, this builds a cumulative volume profile, identifying price levels with the most and least trading activity. The highest cumulative volume levels become HVNs, while the lowest are LVNs. A side volume profile shows aggregated volume per level, and a heatmap overlay visually reinforces market structure.
Applications for Traders
Identify strong support and resistance at HVNs.
Detect areas of low liquidity where price may move quickly (LVNs).
Determine market balance zones where price may consolidate.
Filter noise: because volume clusters aggregate activity into levels, minor fluctuations and irrelevant micro-moves are removed, simplifying analysis and improving strategy development.
Combine with other indicators such as VWAP, Supertrend, or CVD for higher-probability entries and exits.
Use volume clusters to anticipate price reactions to breaking points in thin liquidity zones.
Advanced Display Options
Heatmap Styles : Boxes, lines, or both. Boxes provide a traditional heatmap, lines are better for high granularity data.
Line Mode Example : Simplified line visualization for easier reading at high level counts:
Profile Width & Offset : Adjust spacing and placement of the volume profile for clarity alongside price.
Transparency Control : Lower transparency for more opaque visualization of high-volume zones.
Best Practices for Usage
Reduce the number of levels when using line mode to avoid clutter.
Use HVN and LVN markers in conjunction with volume profiles to plan entries and exits.
Apply session resets to monitor intraday vs. multi-day volume accumulation.
Combine with other technical indicators to confirm high-probability trading signals.
Watch price interactions with LVNs for potential rapid movements and with HVNs for possible support/resistance or reversals.
Technical Notes
Each bar contributes volume proportionally to the price levels it spans, creating a dynamic and accurate representation of traded interest.
Volume profiles are scaled and offset for visual clarity alongside live price.
Alerts are fully integrated for HVN/LVN interaction and high-volume zone entries.
Optimized to handle large lookback windows and numerous price levels efficiently without performance degradation.
This indicator is ideal for understanding market structure, detecting key liquidity areas, and filtering out noise to model price more accurately in high-frequency or algorithmic strategies.
Indicator

Abnormal volume [VG]🪙 INTRODUCTION
This technical indicator helps identify and highlight large volume clusters on the chart.
Abnormal volume refers to unusually large accumulations of volume over short time intervals. Such clusters appear when the amount of assets bought or sold significantly exceeds typical volumes for a specific asset over a given period. These patterns can indicate significant events or intentions of market participants.
Reasons for abnormal volume clusters:
Institutional investments :
Large investment funds and banks may buy or sell significant volumes of assets to rebalance their portfolios.
Impact of news and events :
Important news (e.g., mergers, bankruptcies, management changes) can trigger large-scale buying or selling of assets.
Market manipulation :
Big players may execute large trades to artificially create demand or supply for an asset, affecting its price in the short term.
Insider trading :
Abnormal volumes may signal that someone with insider information has started buying or selling assets in anticipation of future events that could impact the price.
What do abnormal volume clusters mean for traders?
A signal of potential price changes :
High trading volumes are often accompanied by sharp price movements. An increase in volume during price growth might indicate rising interest in the asset, while an increase during a decline could signal a sell-off.
Potential entry or exit points :
For short-term traders, abnormal trades can serve as signals to enter or exit positions. For example, a large volume growth accompanied by a breakout of a key level might be seen as a buy signal.
Caution due to potential manipulation :
Abnormal trades don’t always lead to expected outcomes. Sometimes, they are part of a price manipulation strategy, so it’s essential to consider the broader context and confirm with other signals.
🪙 USAGE
This indicator doesn’t provide trading signals, entry points, or actionable recommendations.
Instead, it simplifies tracking market dynamics and highlights unusual activity worth considering during analysis.
After adding the indicator to the chart, you only need to configure two parameters: the threshold value that determines what constitutes a significant volume cluster and the period over which volumes are aggregated for comparison against the threshold.
It’s recommended to use the shortest available period, as this helps more precisely identify the prevailing volume direction (since this depends on price changes, not trade direction).
The threshold value can be fine-tuned by switching the chart’s timeframe to match the selected period, observing of the significant volume increase on the classic volume histogram, and noting the corresponding market reactions. This allows for selecting a threshold that highlights early signs of impactful trading events on higher timeframes.
Let’s look at an example in the screenshot:
Once the parameters are set, you can also enable an alert to trigger whenever a new volume cluster appears, simplifying event tracking.
Note: in the current version of the indicator, the alert will be triggered only once per bar on the chart at the first detected cluster of abnormal volume.
🪙 IMPLEMENTATION
Technically, the script retrieves volume data from a lower timeframe and estimates whether the volume was primarily generated by buyers or sellers based on price movements.
The lower resolution timeframe is determined as follows:
if the settings base period is less than 1 minute, then the data timeframe will be equal to 1 second
if the settings base period is equals 1 minute or more, then the data timeframe will be equal to 1 minute
The algorithm checks whether the price increased or decreased at each point. If the price rose, the volume is presumed to be driven by buyers and marked as buy volume; otherwise, it’s marked as sell volume.
The total volume at each point is then checked against the user-defined threshold. If the volume exceeds the threshold, a corresponding circle is drawn on the chart, and an alert is generated if created.
The size of the visual representation is proportional to the most recent maximum volume and follows the rules below:
Percentage of max volume -> Volume cluster size
less than 25% -> Tiny
25% to 50% -> Small
50% to 75% -> Normal
75% to 100% -> Large
100% or more -> Huge
🪙 SETTINGS
The indicator is designed to be as simple and minimalist as possible, making configuration effortless. There are only two core parameters, with additional options to customize the colors of volume clusters based on their type.
Trade volume threshold
Defines the volume level above which a cluster is considered significant and displayed on the chart as a circle. The size of the circle depends on the proportion of the current volume relative to the most recent maximum over the chosen period.
Trades base period
Specifies the period for aggregating trade volumes to determine whether they qualify as abnormal. The significance level is set using the Trade volume threshold parameter.
Buy/Sell trades
Allows you to set the colors for abnormal volume circles based on the price direction during cluster formation.
🪙 CONCLUSION
Abnormal volume clusters are always a critical indicator requiring attention and analysis, but they are not a guaranteed predictor of trend changes. Indicator

Correlation Clusters [LuxAlgo]The Correlation Clusters is a machine learning tool that allows traders to group sets of tickers with a similar correlation coefficient to a user-set reference ticker.
The tool calculates the correlation coefficients between 10 user-set tickers and a user-set reference ticker, with the possibility of forming up to 10 clusters.
🔶 USAGE
Applying clustering methods to correlation analysis allows traders to quickly identify which set of tickers are correlated with a reference ticker, rather than having to look at them one by one or using a more tedious approach such as correlation matrices.
Tickers belonging to a cluster may also be more likely to have a higher mutual correlation. The image above shows the detailed parts of the Correlation Clusters tool.
The correlation coefficient between two assets allows traders to see how these assets behave in relation to each other. It can take values between +1.0 and -1.0 with the following meaning
Value near +1.0: Both assets behave in a similar way, moving up or down at the same time
Value close to 0.0: No correlation, both assets behave independently
Value near -1.0: Both assets have opposite behavior when one moves up the other moves down, and vice versa
There is a wide range of trading strategies that make use of correlation coefficients between assets, some examples are:
Pair Trading: Traders may wish to take advantage of divergences in the price movements of highly positively correlated assets; even highly positively correlated assets do not always move in the same direction; when assets with a correlation close to +1.0 diverge in their behavior, traders may see this as an opportunity to buy one and sell the other in the expectation that the assets will return to the likely same price behavior.
Sector rotation: Traders may want to favor some sectors that are expected to perform in the next cycle, tracking the correlation between different sectors and between the sector and the overall market.
Diversification: Traders can aim to have a diversified portfolio of uncorrelated assets. From a risk management perspective, it is useful to know the correlation between the assets in your portfolio, if you hold equal positions in positively correlated assets, your risk is tilted in the same direction, so if the assets move against you, your risk is doubled. You can avoid this increased risk by choosing uncorrelated assets so that they move independently.
Hedging: Traders may want to hedge positions with correlated assets, from a hedging perspective, if you are long an asset, you can hedge going long a negatively correlated asset or going short a positively correlated asset.
Grouping different assets with similar behavior can be very helpful to traders to avoid over-exposure to those assets, traders may have multiple long positions on different assets as a way of minimizing overall risk when in reality if those assets are part of the same cluster traders are maximizing their risk by taking positions on assets with the same behavior.
As a rule of thumb, a trader can minimize risk via diversification by taking positions on assets with no correlations, the proposed tool can effectively show a set of uncorrelated candidates from the reference ticker if one or more clusters centroids are located near 0.
🔶 DETAILS
K-means clustering is a popular machine-learning algorithm that finds observations in a data set that are similar to each other and places them in a group.
The process starts by randomly assigning each data point to an initial group and calculating the centroid for each. A centroid is the center of the group. K-means clustering forms the groups in such a way that the variances between the data points and the centroid of the cluster are minimized.
It's an unsupervised method because it starts without labels and then forms and labels groups itself.
🔹 Execution Window
In the image above we can see how different execution windows provide different correlation coefficients, informing traders of the different behavior of the same assets over different time periods.
Users can filter the data used to calculate correlations by number of bars, by time, or not at all, using all available data. For example, if the chart timeframe is 15m, traders may want to know how different assets behave over the last 7 days (one week), or for an hourly chart set an execution window of one month, or one year for a daily chart. The default setting is to use data from the last 50 bars.
🔹 Clusters
On this graph, we can see different clusters for the same data. The clusters are identified by different colors and the dotted lines show the centroids of each cluster.
Traders can select up to 10 clusters, however, do note that selecting 10 clusters can lead to only 4 or 5 returned clusters, this is caused by the machine learning algorithm not detecting any more data points deviating from already detected clusters.
Traders can fine-tune the algorithm by changing the 'Cluster Threshold' and 'Max Iterations' settings, but if you are not familiar with them we advise you not to change these settings, the defaults can work fine for the application of this tool.
🔹 Correlations
Different correlations mean different behaviors respecting the same asset, as we can see in the chart above.
All correlations are found against the same asset, traders can use the chart ticker or manually set one of their choices from the settings panel. Then they can select the 10 tickers to be used to find the correlation coefficients, which can be useful to analyze how different types of assets behave against the same asset.
🔶 SETTINGS
Execution Window Mode: Choose how the tool collects data, filter data by number of bars, time, or no filtering at all, using all available data.
Execute on Last X Bars: Number of bars for data collection when the 'Bars' execution window mode is active.
Execute on Last: Time window for data collection when the `Time` execution window mode is active. These are full periods, so `Day` means the last 24 hours, `Week` means the last 7 days, and so on.
🔹 Clusters
Number of Clusters: Number of clusters to detect up to 10. Only clusters with data points are displayed.
Cluster Threshold: Number used to compare a new centroid within the same cluster. The lower the number, the more accurate the centroid will be.
Max Iterations: Maximum number of calculations to detect a cluster. A high value may lead to a timeout runtime error (loop takes too long).
🔹 Ticker of Reference
Use Chart Ticker as Reference: Enable/disable the use of the current chart ticker to get the correlation against all other tickers selected by the user.
Custom Ticker: Custom ticker to get the correlation against all the other tickers selected by the user.
🔹 Correlation Tickers
Select the 10 tickers for which you wish to obtain the correlation against the reference ticker.
🔹 Style
Text Size: Select the size of the text to be displayed.
Display Size: Select the size of the correlation chart to be displayed, up to 500 bars.
Box Height: Select the height of the boxes to be displayed. A high height will cause overlapping if the boxes are close together.
Clusters Colors: Choose a custom colour for each cluster.
Indicator

Support & Resistance AI (K means/median) [ThinkLogicAI]█ OVERVIEW
K-means is a clustering algorithm commonly used in machine learning to group data points into distinct clusters based on their similarities. While K-means is not typically used directly for identifying support and resistance levels in financial markets, it can serve as a tool in a broader analysis approach.
Support and resistance levels are price levels in financial markets where the price tends to react or reverse. Support is a level where the price tends to stop falling and might start to rise, while resistance is a level where the price tends to stop rising and might start to fall. Traders and analysts often look for these levels as they can provide insights into potential price movements and trading opportunities.
█ BACKGROUND
The K-means algorithm has been around since the late 1950s, making it more than six decades old. The algorithm was introduced by Stuart Lloyd in his 1957 research paper "Least squares quantization in PCM" for telecommunications applications. However, it wasn't widely known or recognized until James MacQueen's 1967 paper "Some Methods for Classification and Analysis of Multivariate Observations," where he formalized the algorithm and referred to it as the "K-means" clustering method.
So, while K-means has been around for a considerable amount of time, it continues to be a widely used and influential algorithm in the fields of machine learning, data analysis, and pattern recognition due to its simplicity and effectiveness in clustering tasks.
█ COMPARE AND CONTRAST SUPPORT AND RESISTANCE METHODS
1) K-means Approach:
Cluster Formation: After applying the K-means algorithm to historical price change data and visualizing the resulting clusters, traders can identify distinct regions on the price chart where clusters are formed. Each cluster represents a group of similar price change patterns.
Cluster Analysis: Analyze the clusters to identify areas where clusters tend to form. These areas might correspond to regions of price behavior that repeat over time and could be indicative of support and resistance levels.
Potential Support and Resistance Levels: Based on the identified areas of cluster formation, traders can consider these regions as potential support and resistance levels. A cluster forming at a specific price level could suggest that this level has been historically significant, causing similar price behavior in the past.
Cluster Standard Deviation: In addition to looking at the means (centroids) of the clusters, traders can also calculate the standard deviation of price changes within each cluster. Standard deviation is a measure of the dispersion or volatility of data points around the mean. A higher standard deviation indicates greater price volatility within a cluster.
Low Standard Deviation: If a cluster has a low standard deviation, it suggests that prices within that cluster are relatively stable and less likely to exhibit sudden and large price movements. Traders might consider placing tighter stop-loss orders for trades within these clusters.
High Standard Deviation: Conversely, if a cluster has a high standard deviation, it indicates greater price volatility within that cluster. Traders might opt for wider stop-loss orders to allow for potential price fluctuations without getting stopped out prematurely.
Cluster Density: Each data point is assigned to a cluster so a cluster that is more dense will act more like gravity and
2) Traditional Approach:
Trendlines: Draw trendlines connecting significant highs or lows on a price chart to identify potential support and resistance levels.
Chart Patterns: Identify chart patterns like double tops, double bottoms, head and shoulders, and triangles that often indicate potential reversal points.
Moving Averages: Use moving averages to identify levels where the price might find support or resistance based on the average price over a specific period.
Psychological Levels: Identify round numbers or levels that traders often pay attention to, which can act as support and resistance.
Previous Highs and Lows: Identify significant previous price highs and lows that might act as support or resistance.
The key difference lies in the approach and the foundation of these methods. Traditional methods are based on well-established principles of technical analysis and market psychology, while the K-means approach involves clustering price behavior without necessarily incorporating market sentiment or specific price patterns.
It's important to note that while the K-means approach might provide an interesting way to analyze price data, it should be used cautiously and in conjunction with other traditional methods. Financial markets are influenced by a wide range of factors beyond just price behavior, and the effectiveness of any method for identifying support and resistance levels should be thoroughly tested and validated. Additionally, developments in trading strategies and analysis techniques could have occurred since my last update.
█ K MEANS ALGORITHM
The algorithm for K means is as follows:
Initialize cluster centers
assign data to clusters based on minimum distance
calculate cluster center by taking the average or median of the clusters
repeat steps 1-3 until cluster centers stop moving
█ LIMITATIONS OF K MEANS
There are 3 main limitations of this algorithm:
Sensitive to Initializations: K-means is sensitive to the initial placement of centroids. Different initializations can lead to different cluster assignments and final results.
Assumption of Equal Sizes and Variances: K-means assumes that clusters have roughly equal sizes and spherical shapes. This may not hold true for all types of data. It can struggle with identifying clusters with uneven densities, sizes, or shapes.
Impact of Outliers: K-means is sensitive to outliers, as a single outlier can significantly affect the position of cluster centroids. Outliers can lead to the creation of spurious clusters or distortion of the true cluster structure.
█ LIMITATIONS IN APPLICATION OF K MEANS IN TRADING
Trading data often exhibits characteristics that can pose challenges when applying indicators and analysis techniques. Here's how the limitations of outliers, varying scales, and unequal variance can impact the use of indicators in trading:
Outliers are data points that significantly deviate from the rest of the dataset. In trading, outliers can represent extreme price movements caused by rare events, news, or market anomalies. Outliers can have a significant impact on trading indicators and analyses:
Indicator Distortion: Outliers can skew the calculations of indicators, leading to misleading signals. For instance, a single extreme price spike could cause indicators like moving averages or RSI (Relative Strength Index) to give false signals.
Risk Management: Outliers can lead to overly aggressive trading decisions if not properly accounted for. Ignoring outliers might result in unexpected losses or missed opportunities to adjust trading strategies.
Different Scales: Trading data often includes multiple indicators with varying units and scales. For example, prices are typically in dollars, volume in units traded, and oscillators have their own scale. Mixing indicators with different scales can complicate analysis:
Normalization: Indicators on different scales need to be normalized or standardized to ensure they contribute equally to the analysis. Failure to do so can lead to one indicator dominating the analysis due to its larger magnitude.
Comparability: Without normalization, it's challenging to directly compare the significance of indicators. Some indicators might have a larger numerical range and could overshadow others.
Unequal Variance: Unequal variance in trading data refers to the fact that some indicators might exhibit higher volatility than others. This can impact the interpretation of signals and the performance of trading strategies:
Volatility Adjustment: When combining indicators with varying volatility, it's essential to adjust for their relative volatilities. Failure to do so might lead to overemphasizing or underestimating the importance of certain indicators in the trading strategy.
Risk Assessment: Unequal variance can impact risk assessment. Indicators with higher volatility might lead to riskier trading decisions if not properly taken into account.
█ APPLICATION OF THIS INDICATOR
This indicator can be used in 2 ways:
1) Make a directional trade:
If a trader thinks price will go higher or lower and price is within a cluster zone, The trader can take a position and place a stop on the 1 sd band around the cluster. As one can see below, the trader can go long the green arrow and place a stop on the one standard deviation mark for that cluster below it at the red arrow. using this we can calculate a risk to reward ratio.
Calculating risk to reward: targeting a risk reward ratio of 2:1, the trader could clearly make that given that the next resistance area above that in the orange cluster exceeds this risk reward ratio.
2) Take a reversal Trade:
We can use cluster centers (support and resistance levels) to go in the opposite direction that price is currently moving in hopes of price forming a pivot and reversing off this level.
Similar to the directional trade, we can use the standard deviation of the cluster to place a stop just in case we are wrong.
In this example below we can see that shorting on the red arrow and placing a stop at the one standard deviation above this cluster would give us a profitable trade with minimal risk.
Using the cluster density table in the upper right informs the trader just how dense the cluster is. Higher density clusters will give a higher likelihood of a pivot forming at these levels and price being rejected and switching direction with a larger move.
█ FEATURES & SETTINGS
General Settings:
Number of clusters: The user can select from 3 to five clusters. A good rule of thumb is that if you are trading intraday, less is more (Think 3 rather than 5). For daily 4 to 5 clusters is good.
Cluster Method: To get around the outlier limitation of k means clustering, The median was added. This gives the user the ability to choose either k means or k median clustering. K means is the preferred method if the user things there are no large outliers, and if there appears to be large outliers or it is assumed there are then K medians is preferred.
Bars back To train on: This will be the amount of bars to include in the clustering. This number is important so that the user includes bars that are recent but not so far back that they are out of the scope of where price can be. For example the last 2 years we have been in a range on the sp500 so 505 days in this setting would be more relevant than say looking back 5 years ago because price would have to move far to get there.
Show SD Bands: Select this to show the 1 standard deviation bands around the support and resistance level or unselect this to just show the support and resistance level by itself.
Features:
Besides the support and resistance levels and standard deviation bands, this indicator gives a table in the upper right hand corner to show the density of each cluster (support and resistance level) and is color coded to the cluster line on the chart. Higher density clusters mean price has been there previously more than lower density clusters and could mean a higher likelihood of a reversal when price reaches these areas.
█ WORKS CITED
Victor Sim, "Using K-means Clustering to Create Support and Resistance", 2020, towardsdatascience.com
Chris Piech, "K means", stanford.edu
█ ACKNOLWEDGMENTS
@jdehorty- Thanks for the publish template. It made organizing my thoughts and work alot easier.
Indicator

Variety MA Cluster Filter Crosses [Loxx]What is a Cluster Filter?
One of the approaches to determining a useful signal (trend) in stream data. Small filtering (smoothing) tests applied to market quotes demonstrate the potential for creating non-lagging digital filters (indicators) that are not redrawn on the last bars.
Standard Approach
This approach is based on classical time series smoothing methods. There are lots of articles devoted to this subject both on this and other websites. The results are also classical:
1. The changes in trends are displayed with latency;
2. Better indicator (digital filter) response achieved at the expense of smoothing quality decrease;
3. Attempts to implement non-lagging indicators lead to redrawing on the last samples (bars).
And whereas traders have learned to cope with these things using persistence of economic processes and other tricks, this would be unacceptable in evaluating real-time experimental data, e.g. when testing aerostructures.
The Main Problem
It is a known fact that the majority of trading systems stop performing with the course of time, and that the indicators are only indicative over certain intervals. This can easily be explained: market quotes are not stationary. The definition of a stationary process is available in Wikipedia:
A stationary process is a stochastic process whose joint probability distribution does not change when shifted in time.
Judging by this definition, methods of analysis of stationary time series are not applicable in technical analysis. And this is understandable. A skillful market-maker entering the market will mess up all the calculations we may have made prior to that with regard to parameters of a known series of market quotes.
Even though this seems obvious, a lot of indicators are based on the theory of stationary time series analysis. Examples of such indicators are moving averages and their modifications. However, there are some attempts to create adaptive indicators. They are supposed to take into account non-stationarity of market quotes to some extent, yet they do not seem to work wonders. The attempts to "punish" the market-maker using the currently known methods of analysis of non-stationary series (wavelets, empirical modes and others) are not successful either. It looks like a certain key factor is constantly being ignored or unidentified.
The main reason for this is that the methods used are not designed for working with stream data. All (or almost all) of them were developed for analysis of the already known or, speaking in terms of technical analysis, historical data. These methods are convenient, e.g., in geophysics: you feel the earthquake, get a seismogram and then analyze it for few months. In other words, these methods are appropriate where uncertainties arising at the ends of a time series in the course of filtering affect the end result.
When analyzing experimental stream data or market quotes, we are focused on the most recent data received, rather than history. These are data that cannot be dealt with using classical algorithms.
Cluster Filter
Cluster filter is a set of digital filters approximating the initial sequence. Cluster filters should not be confused with cluster indicators.
Cluster filters are convenient when analyzing non-stationary time series in real time, in other words, stream data. It means that these filters are of principal interest not for smoothing the already known time series values, but for getting the most probable smoothed values of the new data received in real time.
Unlike various decomposition methods or simply filters of desired frequency, cluster filters create a composition or a fan of probable values of initial series which are further analyzed for approximation of the initial sequence. The input sequence acts more as a reference than the target of the analysis. The main analysis concerns values calculated by a set of filters after processing the data received.
In the general case, every filter included in the cluster has its own individual characteristics and is not related to others in any way. These filters are sometimes customized for the analysis of a stationary time series of their own which describes individual properties of the initial non-stationary time series. In the simplest case, if the initial non-stationary series changes its parameters, the filters "switch" over. Thus, a cluster filter tracks real time changes in characteristics.
Cluster Filter Design Procedure
Any cluster filter can be designed in three steps:
1. The first step is usually the most difficult one but this is where probabilistic models of stream data received are formed. The number of these models can be arbitrary large. They are not always related to physical processes that affect the approximable data. The more precisely models describe the approximable sequence, the higher the probability to get a non-lagging cluster filter.
2. At the second step, one or more digital filters are created for each model. The most general condition for joining filters together in a cluster is that they belong to the models describing the approximable sequence.
3. So, we can have one or more filters in a cluster. Consequently, with each new sample we have the sample value and one or more filter values. Thus, with each sample we have a vector or artificial noise made up of several (minimum two) values. All we need to do now is to select the most appropriate value.
An Example of a Simple Cluster Filter
For illustration, we will implement a simple cluster filter corresponding to the above diagram, using market quotes as input sequence. You can simply use closing prices of any time frame.
1. Model description. We will proceed on the assumption that:
The aproximate sequence is non-stationary, i.e. its characteristics tend to change with the course of time.
The closing price of a bar is not the actual bar price. In other words, the registered closing price of a bar is one of the noise movements, like other price movements on that bar.
The actual price or the actual value of the approximable sequence is between the closing price of the current bar and the closing price of the previous bar.
The approximable sequence tends to maintain its direction. That is, if it was growing on the previous bar, it will tend to keep on growing on the current bar.
2. Selecting digital filters. For the sake of simplicity, we take two filters:
The first filter will be a variety filter calculated based on the last closing prices using the slow period. I believe this fits well in the third assumption we specified for our model.
Since we have a non-stationary filter, we will try to also use an additional filter that will hopefully facilitate to identify changes in characteristics of the time series. I've chosen a variety filter using the fast period.
3. Selecting the appropriate value for the cluster filter.
So, with each new sample we will have the sample value (closing price), as well as the value of MA and fast filter. The closing price will be ignored according to the second assumption specified for our model. Further, we select the МА or ЕМА value based on the last assumption, i.e. maintaining trend direction:
For an uptrend, i.e. CF(i-1)>CF(i-2), we select one of the following four variants:
if CF(i-1)fastfilter(i), then CF(i)=slowfilter(i);
if CF(i-1)>slowfilter(i) and CF(i-1)slowfilter(i) and CF(i-1)>fastfilter(i), then CF(i)=MAX(slowfilter(i),fastfilter(i)).
For a downtrend, i.e. CF(i-1)slowfilter(i) and CF(i-1)>fastfilter(i), then CF(i)=MAX(slowfilter(i),fastfilter(i));
if CF(i-1)>slowfilter(i) and CF(i-1)fastfilter(i), then CF(i)=fastfilter(i);
if CF(i-1) Indicator

Indicator

SignalProcessingClusteringKMeansLibrary "SignalProcessingClusteringKMeans"
K-Means Clustering Method.
nearest(point_x, point_y, centers_x, centers_y) finds the nearest center to a point and returns its distance and center index.
Parameters:
point_x : float, x coordinate of point.
point_y : float, y coordinate of point.
centers_x : float array, x coordinates of cluster centers.
centers_y : float array, y coordinates of cluster centers.
@ returns tuple of int, float.
bisection_search(samples, value) Bissection Search
Parameters:
samples : float array, weights to compare.
value : float array, weights to compare.
Returns: int.
label_points(points_x, points_y, centers_x, centers_y) labels each point index with cluster index and distance.
Parameters:
points_x : float array, x coordinates of points.
points_y : float array, y coordinates of points.
centers_x : float array, x coordinates of points.
centers_y : float array, y coordinates of points.
Returns: tuple with int array, float array.
kpp(points_x, points_y, n_clusters) K-Means++ Clustering adapted from Andy Allinger.
Parameters:
points_x : float array, x coordinates of the points.
points_y : float array, y coordinates of the points.
n_clusters : int, number of clusters.
Returns: tuple with 2 arrays, float array, int array. Library

Fibonacci Extension / Retracement / Pivot Points by DGTFɪʙᴏɴᴀᴄᴄɪ Exᴛᴇɴᴛɪᴏɴ / Rᴇᴛʀᴀᴄᴍᴇɴᴛ / Pɪᴠᴏᴛ Pᴏɪɴᴛꜱ
This study combines various Fibonacci concepts into one, and some basic volume and volatility indications
█ Pɪᴠᴏᴛ Pᴏɪɴᴛꜱ — is a technical indicator that is used to determine the levels at which price may face support or resistance. The Pivot Points indicator consists of a pivot point (PP) level and several support (S) and resistance (R) levels. PP, resistance and support values are calculated in different ways, depending on the type of the indicator, this study implements Fibonacci Pivot Points
The indicator resolution is set by the input of the Pivot Points TF (Timeframe). If the Pivot Points TF is set to AUTO (the default value), then the increased resolution is determined by the following algorithm:
for intraday resolutions up to and including 5 min, 4HOURS (4H) is used
for intraday resolutions more than 5 min and up to and including 45 min, DAY (1D) is used
for intraday resolutions more than 45 min and up to and including 4 hour, WEEK (1W) is used
for daily resolutions MONTH is used (1M)
for weekly resolutions, 3-MONTH (3M) is used
for monthly resolutions, 12-MONTH (12M) is used
If the Pivot Points TF is set to User Defined, users may choose any higher timeframe of their preference
█ Fɪʙ Rᴇᴛʀᴀᴄᴇᴍᴇɴᴛ — Fibonacci retracements is a popular instrument used by technical analysts to determine support and resistance areas. In technical analysis, this tool is created by taking two extreme points (usually a peak and a trough) on the chart and dividing the vertical distance by the key Fibonacci coefficients equal to 23.6%, 38.2%, 50%, 61.8%, and 100%. This study implements an automated method of identifying the pivot lows/highs and automatically draws horizontal lines that are used to determine possible support and resistance levels
█ Fɪʙᴏɴᴀᴄᴄɪ Exᴛᴇɴꜱɪᴏɴꜱ — Fibonacci extensions are a tool that traders can use to establish profit targets or estimate how far a price may travel AFTER a retracement/pullback is finished. Extension levels are also possible areas where the price may reverse. This study implements an automated method of identifying the pivot lows/highs and automatically draws horizontal lines that are used to determine possible support and resistance levels.
IMPORTANT NOTE: Fibonacci extensions option may require to do further adjustment of the study parameters for proper usage. Extensions are aimed to be used when a trend is present and they aim to measure how far a price may travel AFTER a retracement/pullback. I will strongly suggest users of this study to check the education post for further details, where to use extensions and where to use retracements
Important input options for both Fibonacci Extensions and Retracements
Deviation, is a multiplier that affects how much the price should deviate from the previous pivot in order for the bar to become a new pivot. Increasing its value is one way to get higher timeframe Fib Retracement Levels
Depth, affects the minimum number of bars that will be taken into account when building
█ Volume / Volatility Add-Ons
High Volatile Bar Indication
Volume Spike Bar Indication
Volume Weighted Colored Bars
This study benefits from build-in auto fib retracement tv study and modifications applied to get extentions and also to fit this combo
Disclaimer:
Trading success is all about following your trading strategy and the indicators should fit within your trading strategy, and not to be traded upon solely
The script is for informational and educational purposes only. Use of the script does not constitute professional and/or financial advice. You alone have the sole responsibility of evaluating the script output and risks associated with the use of the script. In exchange for using the script, you agree not to hold dgtrd TradingView user liable for any possible claim for damages arising from any decision you make based on use of the script
Indicator

Indicator

Indicator

Indicator

Indicator

Indicator
