Smart Money Concepts [AxeAlgo]Overview
- Smart Money Concepts is a clean, non-repainting indicator designed for traders who want to identify institutional market structure without clutter.
The indicator visualizes where smart money is likely to defend, attack, and accumulate positions by displaying order blocks, fair value gaps, liquidity pools, and premium/discount dealing ranges on your chart.
What It Shows
Market Structure (CHoCH and BOS)Identifies when the market changes direction (Change of Character) and when new directional commitment breaks prior structure (Break of Structure). Each signal confirms only after a specified number of bars, ensuring no repainting.
Order BlocksHighlights the price zones where the last aggressive institutional movement originated. These are areas where smart money entered positions and often acts as support or resistance on subsequent pullbacks.
Fair Value GapsDetects imbalances between candlesticks (gaps not filled by wicks). The indicator marks these zones because institutions often return to fill them as price moves away.
Liquidity PoolsAutomatically identifies clusters of equal highs and equal lows where retail traders typically set stop losses. The indicator marks when price breaks through these pools (institutional sweeps).
Premium and DiscountDisplays whether price is trading above (premium) or below (discount) the 50% equilibrium level between the most recent swing high and low. Extreme premium or discount often precedes reversals.
How to Use It
Enable individual components using the dashboard toggles: Show Structure, Show Order Blocks, Show Fair Value Gaps, Show Liquidity Pools, Show Premium/Discount.
Turn on the dashboard to see your current swing bias, internal structure direction, and range position at a glance.
Auto-Tune automatically scales all sensitivity parameters based on your chart timeframe. Turn it off if you prefer manual tuning.
Use Simple Mode to display only swing structure without internal noise for a cleaner chart.
Key Settings
Confirmation Bars: How many bars confirm a pivot before a structure signal fires. Higher values filter out false signals but add lag. Default is 2.
Min Displacement: The minimum price movement (in ATR multiples) required for a structure signal to register. Default is 1.0 ATR.
Zone Sizing: Controls the minimum and maximum height of order blocks and FVGs. Adjust to filter noise or capture smaller opportunities.
P/D Lookback: How many bars back to scan for the swing high and low that define your premium/discount range.
Dashboard Position and Size: Choose where the info table appears and how large you want it.
Colors: Customize bullish, bearish, and gap colors to match your chart theme.
What This Indicator Is For
Smart Money Concepts is intended for traders who want to visually identify institutional order flow patterns and understand where smart money accumulates and distributes. It helps you:
Spot areas where institutions likely accumulated or distributed (order blocks and FVGs)
Recognize when price is overextended and vulnerable to reversal (premium/discount extremes)
Distinguish real structural breaks from noise during choppy consolidation
Plan entries and stops around levels where smart money defends
How It Works
The indicator uses pivot-point analysis to identify swing highs and lows, then marks the price zones where directional movement originated (order blocks). Fair value gaps are detected using standard three-candle imbalance logic. Liquidity pools are identified by clustering equal price levels within a configurable tolerance.
All signals confirm only on closed bars. Zones never repaint, but they shrink or change state as price action develops.
Limitations
The indicator shows 5 active zones at a time to keep your chart clean. If multiple institutional structures are forming simultaneously, older zones will age out. This is by design to prioritize the most recent price action.
This indicator identifies structural levels and patterns. It does not predict price direction or guaranteed support/resistance. Use it as one component of a complete trading plan, not as a standalone signal.
Fair value gaps and order blocks are useful but not infallible. Price may skip through them or reverse before reaching them.
Important Disclaimer
This indicator is for educational and analytical purposes only. It does not provide financial advice, and past performance does not guarantee future results. Trading involves risk of loss. Always use proper risk management, stop losses, and position sizing. Never risk more than you can afford to lose.
The accuracy and effectiveness of this indicator depends on your market conditions, timeframe, and trading methodology. Results vary by trader and asset class.
Indicator

Liquidity Sweep Confirmation Zones [Pineify]Liquidity Sweep Confirmation Zones
Overview
This overlay separates a wick beyond known swing liquidity from a response that earns a zone. It shows rails, a candidate bridge, confirmed boxes, retest wear, and a dashboard.
Problem Definition
A basic sweep rule labels every wick beyond a prior high or low. It cannot separate rejection from a breakout near the level, and it ignores later response. Permanent lines remain prominent after failure. Back-plotting a pivot also hides that right-side bars were required to confirm it. The task is to find a closed-bar pierce and reclaim at a level already known, then require timely departure before creating support or resistance.
Design Rationale
Confirmed pivots provide structure that existed before the sweep. Each rail is armed once to stop repeated events. ATR scaling replaces raw ticks across price levels, while the sweep freezes its rail, extreme, close, and ATR so later bars cannot rewrite the test. A limited window rejects delayed movement. Net displacement alone was rejected because a choppy path can eventually travel as far; efficiency also measures progress versus total close travel. This can omit real reversals, but accepted events are easier to audit. Dual-rail sweeps are ignored as directionally ambiguous.
Key Features
One-shot confirmed swing rails.
ATR-scaled pierce and reclaim gates.
Frozen response, path efficiency, and age.
Zones beginning at confirmation, with retest wear and bounded life.
Closed-bar candidate, confirmation, and invalidation alerts.
How It Works
ATR is calculated while a pivot waits for its right-side bars; its rail appears only when confirmed. A later closed bar becomes a candidate when its wick pierces one armed rail by the required ATR fraction and its close reclaims it by the chosen distance. That rail is consumed, while a dual-rail reclaim is ignored.
The candidate freezes direction, rail, extreme, reclaim close, and ATR. Later bars accumulate close travel. Response is directional progress divided by frozen ATR, and efficiency divides positive response by total travel. Both thresholds must pass on the reclaimed side before timeout. Closing through the extreme also fails the candidate.
Confirmation creates a green support or red resistance box on that bar. Each new entry counts as a retest and increases transparency. Bullish zones invalidate below their extreme; bearish zones invalidate above it. Age stops extension, storage removes the oldest excess box, and warm-up shows no rail until ATR and a pivot exist.
How Multiple Indicators Work Together
The stages form one causal chain. Pivots supply pre-existing levels; ATR supplies scale; reclaim establishes rejection; displacement tests follow-through; efficiency rejects wandering paths; the time window links response to sweep. The box preserves that frozen evidence for retest and invalidation. Removing a stage changes the question, so the components are not an arbitrary mashup.
Trading Ideas and Insights
A circle records rejection, not completed follow-through. The amber bridge shows the pending interval while response develops. Green means a downside sweep received efficient upward confirmation; red means the inverse. Fading records more separate retests and can suggest wear for review. These states organize rejection, confirmation, retest, and failure, but do not define entries, targets, returns, or size.
Unique Aspects
The contribution separates event knowledge from outcome. A rail begins only when confirmed, a sweep consumes it once, and its facts are frozen. Promotion needs ATR-scaled progress plus path efficiency within a fixed window. The box starts at promotion, so history does not imply earlier confirmation. Retests count only new entries, not every bar inside. This is an auditable state sequence rather than a renamed pivot marker.
How to Use
Choose pivots for the intended structure horizon.
Watch armed rails; a circle marks a closed-bar pierce and reclaim.
Read bridge, response ATR, efficiency, and age while pending.
Treat a diamond and new box as confirmation on that bar; then monitor retests and failure.
Use Once Per Bar Close alerts with separate execution and risk rules.
Customization
Larger pivots select broader but later structure. Higher pierce or reclaim values filter shallow probes. Raising displacement or efficiency requires cleaner response but reduces events; longer windows weaken temporal linkage. Zone life sets the horizon, maximum zones bounds objects, and maximum retests changes wear shading only. Visual layers hide independently. Defaults are not universal optima.
Assumptions and Limitations
Confirmed pivots are assumed useful liquidity references and ATR an adequate scale. Pivot delay leaves recent structure unavailable. Only one candidate is tracked, and dual-rail sweeps are rejected. Bar-based efficiency cannot reveal intrabar order, actual liquidity, stops, or intent. Gaps, fast trends, thin markets, and poor settings can break interpretation. Closed bars drive state, but setting or data revisions can recalculate history. The script does not detect actual stop hunts, predict reversals, measure profitability, or decide whether to trade a zone.
Conclusion
The overlay turns a known swing, closed-bar reclaim, and bounded efficient response into a staged record. No zone exists before follow-through qualifies it; delay, wear, expiry, and failure stay visible.
Indicator

Mbedaiwi - Market Structure and Price Action mbedaiwi - Market Structure & Price Action
Overview
This Pine Script v6 overlay brings market structure, liquidity events, order blocks, volume estimates, price imbalances, and chart-pattern candidates into one configurable workspace. It helps users examine where price has broken structure, where earlier zones remain active, and how several observations align on the same chart.
The indicator is intended for discretionary analysis and chart study. It is not an automated execution system or a backtested TradingView strategy.
Purpose and benefits
Compare short-term internal structure with broader swing structure.
Organize potential reaction areas using order blocks, imbalances, liquidity levels, and range bands.
Compare the volume associated with visible order blocks through an overlay or a separate right-side display.
Select the modules and labels needed for a particular workflow, reducing chart clutter.
Use alerts to monitor defined events without continuously watching the chart.
The integration follows a practical sequence: establish structure, locate relevant areas, observe price interaction, and optionally evaluate a rule-based setup. The components provide context for one another; agreement between them does not establish a probability of success.
1. Market structure
Internal and swing structure can be configured separately. The script supports SMC leg-transition detection and symmetric pivot detection, with adjustable lengths.
BOS: a break classified as continuation of the current structural direction.
CHoCH: a break against the previous structural direction.
CHoCH+: a CHoCH supported by an intervening higher low for a bullish change, or lower high for a bearish change, under this script's pivot and sequence rules.
HH, HL, LH, and LL: higher highs, higher lows, lower highs, and lower lows.
Strong/Weak High-Low: structural classifications based on the current directional state, not forecasts of whether a level will hold.
Each structure selector offers All, BOS, CHoCH (All), CHoCH, CHoCH+, and None. CHoCH (All) includes both ordinary and supported changes; CHoCH and CHoCH+ select their respective classifications. The separate Show BOS and Show CHoCH switches also affect visibility.
Historical and Present display modes, candle coloring, label sizes, and colored or monochrome themes provide additional control.
2. Order blocks and volume display
The script includes independent swing-break, volume-pivot, and legacy structure-break order-block engines. Available controls include zone boundaries, mitigation rules, retained-zone counts, overlap suppression, midlines, and breaker display.
Volume information can appear on the price-chart overlay, in a right-side chart, or in both locations. Users can choose the volume accumulation interval, including the interval between a broken pivot and its break, an origin window, or an origin-based interval.
How to read the volume numbers
The displayed volume belongs to the selected calculation interval. The percentage is that block's share of the summed volume of currently displayed non-breaker blocks. Changing visible blocks, filters, or retention settings can therefore change the percentages. They are not win rates or percentages of the instrument's entire trading volume.
Internal buy/sell activity is an OHLCV-based estimate. Close-location mode allocates volume according to the close's position within each candle's range; candle-direction mode allocates it according to candle direction. These estimates do not measure actual bid/ask transactions, institutional orders, or order-book liquidity. Volume-dependent outputs rely on the data supplied for the symbol.
3. Liquidity tools
Equal Highs and Equal Lows use an adjustable ATR-based tolerance. Liquidity Grabs identify excursions beyond tracked levels followed by a return inside those levels, subject to the detection rules.
Grabs are displayed as hollow frames around the relevant candle wick: blue for bullish lower-wick grabs and red for bearish upper-wick grabs by default. Optional text can be enabled. Detection sensitivity and retained history are adjustable.
Live previews can change or disappear before the candle closes. Liquidity Grab alerts require a confirmed bar. Separate trendline tools and trendline-break alerts are also available.
4. Price imbalances
The imbalance selector displays one of five types:
FVG: a three-candle gap between the first and third candles' price ranges.
Inverse FVG: a tracked FVG that is breached and reclassified in the opposite direction.
Double FVG: an overlapping area between a new FVG and a tracked opposite-direction FVG.
Volume Imbalance: a gap between adjacent candle bodies while their wick ranges overlap. Despite the name, this detection is price-based.
Opening Gap: a gap between adjacent candle ranges.
Controls include source timeframe, volatility threshold, extension, mitigation method, and maximum retained zones. The imbalance timeframe must be the chart timeframe or higher. Higher-timeframe imbalance detection uses completed source candles, so it becomes available after source-bar confirmation.
To hide only the FVG/type text while retaining the shaded zones, disable Show Imbalance Type on Zones. Re-enable it at any time from Inputs.
5. Premium, equilibrium, and discount
Optional bands divide a selected Swing, Internal, or Impulse range into upper, middle, and lower reference areas. Band width and colors are adjustable. These areas describe relative position within the selected range; they do not measure fundamental fair value or guarantee a reversal.
6. Chart-pattern candidates
The pattern module classifies recent pivot geometry and can display pattern boundaries, shaded zones, and a Detected Pattern table. Candidate types include triangles, wedges, broadening wedges, double tops/bottoms, and head-and-shoulders formations.
Pattern drawings are separate from the trendline module. Detection depends on pivot length, available history, and tolerance settings. In this release, a displayed pattern can remain after price has moved outside its boundaries until the detection state updates. Treat the pattern name as a geometric candidate, not confirmation that a formation remains valid or that a breakout will succeed.
7. Additional context and optional setup planning
Optional Fibonacci retracements, an OTE region, extension levels, and previous daily/weekly/monthly/quarterly highs and lows provide additional reference points.
The optional setup layer combines structural events with configurable checks such as liquidity sweeps, order-block or imbalance interaction, displacement, higher-timeframe direction, EMA alignment, volume, and RSI. Score and Strict modes control how these conditions are evaluated.
When enabled, the trade layer can display a hypothetical entry, stop, and up to three targets using configurable zone, structure, ATR, or risk-multiple methods. These are rule-based planning levels, not executed orders or verified performance results. The default mbedaiwi profile suppresses the trade layer.
How to use
Add the indicator to a standard candlestick chart and choose an analysis profile. The default mbedaiwi profile uses internal length 5, swing length 50, and close-based structural breaks. Select Custom or enable Override profile lengths when you want the manual lengths to take effect.
Choose the internal and swing events you want to see. Start with structure and a small number of zones before enabling additional modules.
Enable order-block metrics if you want volume comparisons. Select the accumulation method and overlay/side-chart layout appropriate for your analysis.
Enable Liquidity Grabs and select detection sensitivity. Distinguish a live preview from a completed event.
Choose an imbalance type and its mitigation method. Add premium/discount bands or prior-period levels if they help define context.
Enable Patterns only when studying pivot-based formations, and check the actual candles against the displayed boundaries.
Use Clean chart mode, individual visibility switches, label sizes, and zone-count controls to manage clutter. The Show tables switch controls on-chart tables.
If using the optional setup layer, choose a compatible profile, review all filters and risk settings, and evaluate its behavior before relying on the planning levels.
Reading entries, stops, targets, and exits
Use the indicator as a sequence of observations: structural direction, an area to monitor, confirmation, and a predefined risk/target plan. A BOS, CHoCH, or Liquidity Grab on its own is not an automatic instruction to buy or sell.
Step 1 - Read the structural context
Start with Swing Structure for the broader context, then use Internal Structure to examine shorter movements. Higher highs and higher lows describe an upward structure; lower highs and lower lows describe a downward structure. A bullish BOS is classified as continuation, while a bullish CHoCH marks a potential change from the preceding bearish structure. CHoCH+ adds the script's supporting pivot-sequence condition; it does not guarantee a reversal.
An internal bullish change can occur while swing structure remains bearish. Always identify which structure level produced the label. Pivot confirmations can arrive after the turning point and be drawn back at the earlier pivot bar.
Step 2 - Identify an area to monitor
A bullish order block, bullish FVG, discount band, previous low, or Equal Lows can provide a reference area for studying a possible bullish reaction. Price entering an area only establishes an interaction; it does not confirm that a rebound has started. Order-block volume percentages are calculated volume shares, not probabilities that the area will hold.
Step 3 - Observe confirmation
The following is an illustrative manual reading sequence, not the mandatory algorithm behind every setup generated by the script:
Price reaches a previously identified reference area.
Price moves below a tracked low and closes back above it, producing a confirmed bullish Liquidity Grab if the detection conditions are met.
Price subsequently breaks an internal structural level upward, producing a bullish CHoCH or CHoCH+ under the script's rules.
The user evaluates the completed confirmation candle or a later retest of the broken level, together with the broader structure and the planned invalidation level.
A retest may never occur, and confirmation can still fail. Do not assume that a marker anchored to an earlier candle was available in real time on that candle.
Step 4 - Understand the optional planning layer
The planning layer displays hypothetical levels when its setup conditions are satisfied:
Entry method: Market, Fibonacci, or Zone determines the entry-reference calculation.
Stop method: Structure, ATR, or Zone determines the stop-reference calculation. The selected invalidation level defines where the planned idea no longer applies.
Target method: Risk multiple, Smart money, or Hybrid determines how target references are calculated.
TP1, TP2, and TP3: up to three target references, according to the selected method.
Move stop to breakeven after TP1: updates the hypothetical stop to the entry reference after the first-target condition is met.
These are chart calculations. They do not send orders to a broker, establish actual fills, or move a real stop order.
To make this layer available, choose a profile such as Custom, enable Show trade layer (entry / SL / TP), and disable Structure only. The default mbedaiwi profile suppresses the trade layer. Enabling the display does not guarantee that levels appear immediately: the selected signal conditions and filters must also be satisfied.
Step 5 - Read risk multiples: a numerical example
Consider a hypothetical entry at 100 and a stop at 98. The distance between them is 2 per share, so 1R equals 2. In Risk multiple target mode:
Entry reference: 100.
Stop reference: 98.
1R target: 102.
2R target: 104.
3R target: 106.
This example explains arithmetic only. It is not a trade recommendation, a prediction, or a result produced by a backtest. It excludes fees and slippage. A real fill can differ from the plotted reference, and an actual exit can differ from the stop price. If the hypothetical breakeven option is enabled, a qualifying TP1 event changes the plotted stop reference to 100; this does not guarantee a cost-free exit in actual trading.
Step 6 - Interpret exits and changes in structure
A TP reached alert means that the script's target condition has been met. A Stop-loss reached alert means that its stop condition has been met. Neither confirms that a broker executed an order.
A bearish CHoCH during an upward move provides information about a structural change. It does not automatically mean that the planning layer closed a position, nor that every internal change requires the same response. Target exits, invalidation exits, and any discretionary response to opposing structure should be defined before acting on a setup. The script does not automatically carry out partial sales or discretionary exits described by a user's plan.
Manual analysis versus calculated setups
The manual sequence above explains how the visual components can be read together. The optional planning layer instead evaluates its configured rules, filters, and calculation methods. It does not necessarily require that exact sequence. Neither workflow supplies verified profitability or guarantees that a displayed setup will succeed.
Alerts
Available conditions cover internal and swing BOS/CHoCH/CHoCH+, liquidity grabs and sweeps, equal highs/lows, imbalance formation, zone interactions, order-block breaks, trendline breaks, detected patterns, and optional setup/target/stop events.
Select this indicator in TradingView's Create Alert dialog, then choose the event. Use Once Per Bar Close when you want close-confirmed notifications. General CHoCH alerts also include supported changes; separate CHoCH+ conditions are available. Some touch conditions can remain true across consecutive bars, so they should not be interpreted as one notification per zone for its entire lifetime.
Timing, historical drawings, and limitations
Pivot-based features require later bars to confirm earlier turning points. Labels and zones may be anchored back to those earlier bars, although the information was not available at that time.
Live candles and enabled previews can change before close. This indicator is not presented as universally non-repainting.
Zone removal depends on mitigation, age, overlap, and retention settings. Older drawings can disappear as new observations replace them.
Results depend on the symbol, timeframe, session, available history, and settings. Different indicators can use different definitions and produce different results.
The confluence score is a rule-based score, not a calibrated probability. Volume percentages and Strong/Weak labels are not measures of signal accuracy.
The planning layer does not provide a broker execution model, Strategy Tester results, or verified profitability. No accuracy, return, or future-performance claim is made.
Source acknowledgment
The hierarchical pivot-detection logic used in the Liquidity Grabs module is adapted from LuxAlgo's open-source "Pure Price Action Liquidity Sweeps", licensed under CC BY-NC-SA 4.0. Modifications include wick-frame rendering, display controls, and alert handling. Credit for the adapted source logic belongs to LuxAlgo.
This acknowledgment concerns the identified open-source component and does not imply access to LuxAlgo's closed-source Price Action Concepts indicator. This publication is not affiliated with or endorsed by LuxAlgo.
Intended use
For educational chart analysis and discretionary decision support. Users remain responsible for validating the settings, interpreting signals, and managing risk. No displayed zone, pattern, or setup guarantees a particular market outcome.
Indicator

AMD Structure Map [AxeAlgo]AMD Structure Map
============================================
------------------------------------------------------------
WHAT THIS SCRIPT DOES
------------------------------------------------------------
AMD Structure Map automatically detects the Accumulation → Manipulation →
Distribution cycle on any chart, in real time, and draws each phase as its
own labeled zone directly on the candles — so the market's own three-act
structure is visible as it forms, instead of something you have to
eyeball yourself after the fact.
This is a pattern-recognition and structure-labeling tool. It identifies
and visualizes market structure per the AMD model. It does not predict
future price direction, it does not generate buy or sell signals, and
nothing it draws should be treated as a trading recommendation.
------------------------------------------------------------
BACKGROUND — WHAT "AMD" MEANS
------------------------------------------------------------
AMD is a way of reading price action as three sequential acts:
Accumulation is a period where price contracts into a range while orders
build on both sides of the market. Manipulation is a deliberate-looking
move beyond that range — far enough, and on enough volume, to run the
stop-losses and breakout orders sitting just outside it — that then fails
and closes back inside. Distribution is the real, sustained move that
follows, expanding in the opposite direction of that failed move.
The core idea is that the Manipulation phase exists to create liquidity:
a move beyond an obvious range draws in breakout traders and triggers
stops on the other side, providing the volume needed for the real
directional move that follows. Whether or not you subscribe to that
interpretation, the three-part sequence — range, false break, real break
— is a recurring, observable structure across most liquid markets and
timeframes, and this script exists to detect it mechanically and
consistently rather than by eye.
------------------------------------------------------------
HOW EACH PHASE IS DETECTED
------------------------------------------------------------
ACCUMULATION is flagged by genuine volatility contraction: a fast-length
ATR reading meaningfully below its own slow-length ATR baseline, averaged
over a short recent window rather than judged off a single bar, combined
with a minimum range width relative to current volatility. This rules out
both a lone quiet tick being mistaken for real compression and micro-noise
ranges being mistaken for a real base. Once contraction is confirmed, the
zone locks to the highest high and lowest low of the seed window and does
not move afterward.
MANIPULATION is a liquidity sweep: a wick that pierces beyond the
Accumulation range by a minimum distance, on volume above this specific
cycle's own frozen baseline (measured from its own seed window, not a
constantly-rolling average that would otherwise get distorted by the
sweep's own volume spike), that closes back inside the range within a
short window of bars. It does not have to reverse on the exact same bar
it pierced — it is given a handful of bars to do so, since real liquidity
sweeps do not always resolve instantly. The moment a sweep confirms, the
script labels the zone with an Expected Direction: opposite the side that
was swept, since that is what the AMD model itself defines Distribution to
be. If price later sweeps the OPPOSITE side too, before the range
resolves, that second sweep supersedes the first and the call flips —
capped at one such re-arm, since a range swept a third time no longer
looks like a clean setup.
DISTRIBUTION is a confirmed break — by distance and by volume, both judged
against that same frozen baseline — in the direction the Manipulation
phase called. Only at that point is the cycle logged as complete. A break
in the SAME direction as the earlier sweep is logged separately and
honestly as "Manipulation Failed," since the expected reversal did not
occur — the script does not force an incomplete or contradictory sequence
into the AMD narrative just because a Manipulation event happened
somewhere in the range's history.
------------------------------------------------------------
ON THE EXPECTED DIRECTION LABEL
------------------------------------------------------------
The "Expected Direction" shown on the Manipulation zone is a direct
restatement of the AMD model's own definition, not an independent
forecast: Distribution is, by definition, the move opposite the side that
got swept. It carries no probability estimate, is not back-tested, and is
not a trade instruction. It is confirmed or denied by the same real
price-and-volume break logic used everywhere else in the script — nothing
is assumed true until price actually does it.
------------------------------------------------------------
WHAT YOU SEE ON THE CHART
------------------------------------------------------------
Each phase is drawn as its own colored zone box with a label. The
Accumulation zone appears the moment contraction confirms. The
Manipulation zone appears the moment a sweep confirms, labeled with the
Expected Direction. The Distribution zone appears ONLY once the break
genuinely confirms in that expected direction — it is sized to the
Accumulation range's own width rather than to whatever the breakout bar's
own volatility happened to produce, then grows to track the real move for
a limited window before freezing in place, so it always reads as a
proportionate rectangle rather than an arbitrary spike or a box that
keeps expanding indefinitely.
A cycle that does not complete — a Manipulation that failed to lead to a
real Distribution break, or a breakout with no Manipulation ever detected
beforehand — is marked with a single small flag rather than a full zone
box, since nothing pattern-like actually happened there. A small signal
also marks the exact first candle a genuine Distribution phase begins on.
An optional session-window highlight is available for traders who want to
see which cycles are forming inside a specific trading session.
------------------------------------------------------------
DASHBOARD
------------------------------------------------------------
A compact corner table shows the current phase and its status, the
current Expected Direction, an optional higher-timeframe bias reading
(a simple moving-average slope check on a timeframe you choose, shown
purely as background context and never used to filter or alter
detection), and a running Follow-Through Rate.
The Follow-Through Rate is a historical tally, going back to when the
chart loaded, of how often this chart's own past Manipulation calls
actually went on to confirm into a real Distribution break versus failing
or the range simply expiring. It is not a win rate, not the result of a
back-tested strategy, and not a claim about the cycle currently forming.
The percentage is intentionally hidden until a minimum number of cycles
have been observed, so a small handful of outcomes is never presented as
a statistically meaningful rate.
------------------------------------------------------------
INPUTS
------------------------------------------------------------
A single Detection Sensitivity dial (Loose / Normal / Strict) governs
every underlying threshold at once — the seed window length, the required
depth of volatility contraction, the sweep depth and volume requirements,
and the breakout distance and volume requirements. Loose finds more
cycles at looser quality; Strict finds fewer, higher-conviction cycles
only.
Beyond that, every visual element can be toggled or recolored
independently: the zone boxes, the phase labels, the Expected Direction
label, the Distribution start signal, the Follow-Through Rate row, the
higher-timeframe bias row, the session highlight, and the on-chart legend.
A "completed cycles only" mode is also available, which hides everything
while a cycle is still forming and only draws it — retroactively, all at
once — if and when it actually completes the full sequence.
------------------------------------------------------------
CALCULATION AND REPAINT BEHAVIOR
------------------------------------------------------------
All detection logic runs exclusively on confirmed, closed bars. Nothing is
decided from an intrabar wick on the currently forming candle. A sweep
candidate's return window is evaluated bar by bar as it actually happens,
never by looking ahead. A confirmed Manipulation call can be superseded
later within the same range by the one-time re-arm described above, but
only by an equally real, fully confirmed opposite-side sweep — never
speculatively, and never by revising a call that has already led to a
resolved outcome. Once a range resolves, or a zone's phase has finished,
its boundaries are not redrawn or repainted. Higher-timeframe data is
requested with lookahead explicitly disabled, so historical bars never
change; only the still-forming higher-timeframe candle can naturally
update until it itself closes, which is standard behavior for any
multi-timeframe context reading and is not repainting in the sense of
historical values changing after the fact.
------------------------------------------------------------
LIMITATIONS
------------------------------------------------------------
This script is a structure-labeling tool, not a trading system. It has no
concept of risk management, position sizing, or trade execution, and it
does not account for spread, slippage, commissions, or liquidity
conditions specific to any individual broker or exchange. Detection
quality depends heavily on the instrument, timeframe, and chosen
sensitivity setting — a setting well suited to one market or timeframe may
under- or over-detect on another, and some manual tuning of the
sensitivity dial is expected. Past detected cycles, and the Follow-Through
Rate built from them, describe what has already happened on this specific
chart and are not a guarantee of how future cycles on the same chart, or
on any other chart, will behave.
------------------------------------------------------------
DISCLAIMER
------------------------------------------------------------
This script detects and labels historical and current market structure
per the AMD model only. Nothing it displays is a probability of future
price direction, a guarantee, or a buy or sell instruction — a
Manipulation event describes a liquidity sweep that has already happened,
not a prediction of what comes next, and a Distribution zone is only ever
drawn once the corresponding break has already confirmed. The Expected
Direction label is a restatement of the pattern's own definition, not a
forecast. The Follow-Through Rate is a tally of what has already happened
to this chart's own past Manipulation calls, typically a modest sample
size, and should not be read as a win rate or as investment advice.
Trading involves substantial risk of loss and is not suitable for every
investor. Nothing in this script or its description constitutes financial,
investment, or trading advice, and past structure detected by this
script is not indicative of future results. Use at your own discretion
and risk.
Indicator

Indicator

Smooths Heat Seeker Liquidity MapOverview
This indicator maps resting liquidity by detecting confirmed swing highs and lows at three independent lookback lengths, then rendering each one as a zone that visibly fades the longer it goes untouched. Instead of a static box that holds one shade until it's swept, each zone is built from small time-segments, and each segment locks in whatever color the zone's fade formula produces at the moment it's drawn — so a single zone shows a genuine gradient across its own lifetime, brightest where it formed and dimmer toward the present if nothing has happened to it since.
Concepts used
Tiered pivot detection: ta.pivothigh()/ta.pivotlow() run at three separate lookback lengths (Fast/Mid/Slow). A pivot only confirms after "Confirmation Bars" bars have passed with no higher high / lower low, which is what prevents repainting the level's location after the fact.
Age-based color decay: each level stores the bar index it was formed on. Every time a new segment is drawn, the indicator computes how many bars old the level is, runs that through a decay curve (fadeStrength input controls the curve's steepness), and converts the result into a transparency value for that segment only. Because past segments are never redrawn, the visual history of the fade is preserved rather than the whole zone jumping to one shade at once.
Mitigation vs. retest: a level is deleted the instant price crosses it (wick or close, user's choice) — that's treated as the liquidity being consumed. If price merely touches the level without crossing it, and "Refresh Fade On Retest" is on, the level's age resets to zero, so a level that keeps getting defended stays bright while one that's simply being ignored keeps fading toward removal.
Tier-priority merging: if a new pivot lands at the same price as an existing level, the indicator keeps the higher tier rather than creating a duplicate zone, so a level significant on the Slow lookback doesn't get visually diluted by a Fast-tier duplicate sitting on top of it.
How to use it
Add it to any chart/timeframe with default settings. Brighter zones are recent or actively-retested liquidity; dimmer zones are levels the market has drifted away from without touching. Use Fast/Mid/Slow tier colors to separate minor intraday levels from more structurally significant ones, and adjust Fade/Lifetime, Fade Strength, and Cell Width to control how far back the map looks and how coarse or smooth the fade appears.
Originality
This is not a combination of other publications — there's a single detection-and-rendering pipeline here (pivot detection → age tracking → per-segment decay → mitigation/retest handling), and every part of it was written for this script. No code, calculations, or visual techniques are reused from another publication.
Inputs
Fast / Mid / Slow — pivot lookback lengths for the three liquidity tiers
Confirmation Bars — bars required after a swing point before it's confirmed
Mitigate On — wick or close removes a level
Fade/Lifetime, Fade Strength, Cell Width — control how long a zone lives and how its decay curve is shaped
Refresh Fade On Retest — restarts a zone's age on an unmitigated touch
Box Height Multiplier — sets zone thickness as a multiple of ATR
Weak / Mid / Strong colors — one color per tier
This indicator has no signals, alerts, or trade markers — it's a pure visualization of where liquidity currently sits on the chart, and how fresh or stale each level is. Indicator

SMC EngineSMC Engine
Overview
SMC Engine is a market-context indicator designed to identify potential liquidity sweeps and directional pressure around a selected session range.
The indicator combines an open-based NY range, candle spread analysis, and lower-timeframe volume pressure to classify market conditions such as Stop Hunts, directional aggression, and breakouts.
The default session is 09:30–10:30 New York time, but the session and timezone can be adjusted from the settings.
Key Features
Open-based NY session range
Automatic range box visualization
Projected range levels after the session
Candle spread anomaly detection
Lower-timeframe volume pressure
Stop Hunt High detection
Stop Hunt Low detection
Bullish Aggression detection
Bearish Aggression detection
Breakout Up/Down classification
Real-time sentiment dashboard
How It Works
1. Open-Based NY Range
During the selected session, the indicator tracks the highest and lowest candle opening prices.
These levels form the open-based range used by the sentiment engine.
Note: This is an open-based range, not a conventional opening range calculated from candle highs and lows.
2. Spread Analysis
The indicator compares the current candle's spread (High - Low) with its average spread over the selected baseline period.
Default settings:
Spread Baseline: 50 bars
Spread Anomaly Multiplier: 2.0
When the current spread exceeds the baseline multiplied by the anomaly multiplier, it is classified as a spread anomaly.
3. Volume Pressure
The indicator uses lower-timeframe candle data to estimate directional volume pressure.
Lower-timeframe close > open → volume is counted as positive
Lower-timeframe close < open → volume is counted as negative
Lower-timeframe close = open → volume is ignored
The resulting value is used as a volume-pressure proxy.
This is not true bid/ask volume delta.
Sentiment Conditions
Stop Hunt High
A Stop Hunt High is identified when:
The candle has an unusually large spread
Price trades above the open-based range high
The candle closes back at or below that level
Lower-timeframe volume pressure is negative
The signal is displayed with an orange downward triangle.
This can be viewed as a potential bearish liquidity-sweep setup.
Stop Hunt Low
A Stop Hunt Low is identified when:
The candle has an unusually large spread
Price trades below the open-based range low
The candle closes back at or above that level
Lower-timeframe volume pressure is positive
The signal is displayed with an orange upward triangle.
This can be viewed as a potential bullish liquidity-sweep setup.
Bullish / Bearish Aggression
When a spread anomaly occurs without meeting the Stop Hunt conditions, the indicator evaluates candle direction and volume pressure to identify:
Bullish Aggression
Bearish Aggression
Air Pocket/Uncertain
Breakouts
When the spread is not classified as an anomaly, the indicator can identify:
Breakout Up
Breakout Down
These classifications are based on price closing beyond the open-based range together with corresponding volume pressure.
How to Use It
The indicator is primarily intended as a market-context and confirmation tool, rather than a standalone buy/sell system
A simple way to use the Stop Hunt signals is:
Bullish Setup
Stop Hunt Low → wait for confirmation → consider long
When an orange Stop Hunt Low appears, avoid entering immediately. Observe the following price action and look for bullish confirmation before considering a long trade.
Bearish Setup
Stop Hunt High → wait for confirmation → consider short
When an orange Stop Hunt High appears, avoid entering immediately. Observe the following price action and look for bearish confirmation before considering a short trade.
The Stop Hunt signal should therefore be treated as a setup/area of interest, not an automatic entry signal.
Traders can combine the signal with their own market structure, price action, risk management, and higher-timeframe analysis.
Dashboard
The dashboard displays:
VSA Price Spread — current candle spread in ticks
Baseline Spread — average spread used for anomaly detection
Volume Pressure — calculated lower-timeframe directional volume pressure
Current Sentiment — current classification produced by the engine
Recommended Usage
The default configuration is designed around using a lower timeframe for volume-pressure analysis, such as a 1-minute lower timeframe on a 5-minute chart.
The appropriate settings can vary by market, symbol, and timeframe, so traders should test the indicator under the conditions in which they intend to use it.
Important Limitations
The range is based on candle opens, not highs and lows.
Volume Pressure is a directional-volume proxy and should not be interpreted as true bid/ask delta.
A Stop Hunt signal does not guarantee a reversal or profitable trade.
Breakout classifications do not guarantee that a breakout will continue.
The indicator does not determine stop-loss placement, take-profit levels, or position sizing.
Market conditions, liquidity, and data-feed characteristics can affect the behavior of lower-timeframe calculations.
Traders should independently test and validate the indicator before using it in live trading.
SMC Engine is intended for market analysis and educational purposes and should be used together with appropriate risk management. Indicator

Pattern Atlas : Geometric [AxeAlgo]Pattern Atlas : Geometric Patterns
WHAT THIS LIBRARY IS
This is a Pine Script v6 library of 17 classical chart pattern detectors — Head and Shoulders, Double/Triple Tops and Bottoms, triangles, wedges, flags, and the rest of the standard technical-analysis catalog built from swing highs and lows rather than single-candle shape. Unlike candlestick patterns, which read one to a handful of fixed bars, chart patterns span a variable, often large number of bars, so this library carries one small piece of state — a rolling history of confirmed swing pivots — that every pattern function reads from. Beyond that, the same philosophy as Library #1 applies: no plotting, no alerts, and no inputs in this script by design, since a library's job is to hand other scripts a clean, reusable, well-documented API, not to draw on a chart itself (Pine doesn't allow a library to plot anything anyway). If you're looking for a ready-to-use indicator built on top of this library, see the companion "Pattern Atlas : Geometric Indicator " script, which imports every function here and turns it into on-chart signals, measured-move price targets, a live scanner table, and alerts.
Chart pattern analysis is one of the foundational tools of classical technical analysis, going back to Edwards and Magee's original work and refined since by researchers like Thomas Bulkowski, whose statistical studies of pattern behavior are the closest thing this field has to an industry-standard reference. The patterns in this library follow that standard catalog, so anyone who already knows what a Head and Shoulders top or an Ascending Triangle looks like will recognize exactly what each function is checking for.
WHY A LIBRARY INSTEAD OF ONE MONOLITHIC INDICATOR
Splitting detection logic out as an importable library means:
- Any Pine coder building their own strategy, indicator, or screener can pull in exactly the pattern checks they need without copy-pasting swing-pivot and trendline math into every new script.
- The detection logic is tested and maintained in one place. When a threshold gets refined, everything importing this library benefits from the update by bumping one version number.
- It keeps the math separate from presentation — how a pattern gets drawn, colored, or alerted on is a completely separate decision from whether the pattern is actually present, and different users want different presentations.
HOW TO IMPORT AND USE IT
Add this line near the top of your script (adjust the version number to whatever the current published version is):
import AxeAlgo/Pattern_Atlas_Geometric/1 as geo
Unlike Library #1, most of the functions here need a shared pivot history to work from. Call trackPivots() exactly once per bar, then pass its result into every detect*() function that needs it:
pivots = geo.trackPivots()
match = geo.detectDoubleTopBottom(pivots)
if match.found
label.new(bar_index, high, match.patternName)
Four functions — detectSpike(), detectFlag(), detectPennant(), and detectIslandReversal() — read directly off recent price action instead of the shared pivot history, so they're called without a pivots argument: geo.detectSpike().
trackPivots() takes three optional parameters: leftBars and rightBars (how many less-extreme bars must surround a candidate swing point before it confirms as a pivot — higher values mean fewer, more significant pivots, at the cost of a longer confirmation lag), and maxPivots (how much pivot history to retain). All three have sensible defaults.
Every detect*() function returns the same structure, called ChartPatternMatch, so the calling pattern is identical no matter which of the 17 you use. It has nine fields:
- found — true if the pattern matched at the evaluated bar, false otherwise.
- patternName — the specific name of what matched (e.g. "Ascending Triangle"), na when not found.
- direction — "bullish" or "bearish".
- pivotBars — bar_index of each pivot the match was built from, in chronological order.
- pivotPrices — price of each pivot, in the same order as pivotBars.
- breakoutLevel — the support, resistance, or neckline level price broke through to confirm the pattern.
- necklineSlope — slope (price per bar) of the breakout line, na when the pattern's breakout level isn't a sloped line.
- barIndex — the bar_index the pattern completes (breaks out) on.
- description — a full sentence naming the pattern and the actual measured price levels that triggered it — genuinely useful for a tooltip or an alert message, not just a repeat of the pattern name.
Two additional exported functions turn that raw match into something more actionable, and both work on any ChartPatternMatch regardless of which detect*() function produced it:
- patternStrength(match) — a 0-100 score for how decisively the confirmation close broke through breakoutLevel, relative to the pattern's own price range. A breakout that clears the level by a meaningful fraction of the pattern's own size scores higher than a one-tick poke through it.
- patternTarget(match) — a classical measured-move price target, projecting the pattern's own height from the breakout point. Returns na for patterns without a reliable height to project from (V-Top/V-Bottom Spike, Island Reversal, Bump-and-Run Reversal).
Every detect*() function also exposes its own set of tunable threshold parameters — how flat a "flat top" has to be, how much two shoulders can differ and still count as equal, and so on — all with sensible defaults so you don't have to touch them unless you want to tighten or loosen a specific pattern's sensitivity for a particular instrument or timeframe.
THE 17 PATTERNS
Reversal patterns (7) — signal a potential change in the prevailing trend:
- Head and Shoulders / Inverse Head and Shoulders — detectHeadAndShoulders(). Three swing extremes with the middle one more extreme than the two roughly-equal outer ones, confirmed when price breaks the neckline connecting the two points between them.
- Double Top / Double Bottom — detectDoubleTopBottom(). Two roughly equal peaks (or troughs) with a retracement between them, confirmed when price breaks back through that retracement level.
- Triple Top / Triple Bottom — detectTripleTopBottom(). The same idea as a Double Top/Bottom with a third roughly-equal touch, confirmed on the break of the support or resistance formed between the touches.
- Rounding Top / Rounding Bottom — detectRoundingTopBottom(). A gradual, curved advance-and-rollover (or decline-and-recovery) between two similar edge levels. Approximate: read from three swing pivots rather than fitting a true curve.
- Diamond Top / Diamond Bottom — detectDiamondTopBottom(). Swing range that widens and then narrows again, confirmed on a break of the resulting support or resistance. Rare and approximate: read from three pivot pairs rather than a clean diamond outline.
- Broadening Formation — detectBroadeningTopBottom(). Diverging highs and lows forming an increasingly volatile range, confirmed on a break of either edge. Approximate: read from two pivot pairs rather than a hand-fitted diverging channel.
- V-Top / V-Bottom (Spike) — detectSpike(). A single sharp extreme with no rounding — a large move into the pivot and an equally large move away from it, both measured against the recent average bar range, within a handful of bars. Self-contained, no pivots argument needed.
Continuation patterns (8) — typically resolve in the direction of the move that preceded them:
- Ascending Triangle — detectTriangleAscending(). Flat resistance with rising support, confirmed on a break above resistance.
- Descending Triangle — detectTriangleDescending(). Flat support with falling resistance, confirmed on a break below support.
- Symmetrical Triangle — detectTriangleSymmetrical(). Converging highs and rising lows, confirmed (bullish or bearish) whichever side the price actually breaks.
- Rising Wedge / Falling Wedge — detectWedge(). Both trendlines slope the same direction and converge; breaks the opposite way from the slope, since the shared-direction move was already losing momentum.
- Bull Flag / Bear Flag — detectFlag(). A strong directional move (the pole), followed by a tight, roughly parallel pullback, confirmed on a break back out in the pole's direction. Self-contained, no pivots argument needed.
- Bull Pennant / Bear Pennant — detectPennant(). The same pole-and-consolidation structure as a Flag, but the consolidation narrows and converges rather than staying parallel. Self-contained, no pivots argument needed.
- Rectangle — detectRectangle(). Price boxed between flat support and flat resistance, confirmed on a break of either edge.
- Cup and Handle / Inverted Cup and Handle — detectCupAndHandle(). A rounded recovery (or decline) back to its starting rim, then a shallow pullback (the handle), confirmed on a break through the rim.
Structural / gap-based patterns (2):
- Bullish / Bearish Island Reversal — detectIslandReversal(). A bar (or small cluster) isolated by a gap on both sides, then abandoned by a gap the other way — an abrupt reversal. Self-contained, pure gap logic, no pivots argument needed.
- Bump-and-Run Reversal — detectBumpAndRun(). A lead-in trendline, then a "bump" phase accelerating well beyond it, then a "run" breaking back through the lead-in line. Approximate: the lead-in line is read from just two pivots rather than a hand-drawn trendline.
WHAT THIS LIBRARY DELIBERATELY DOES NOT DO
No plotting, no drawing, no alertcondition() calls, and no inputs — Pine doesn't allow any of those inside a library in the first place, since a library can never be added to a chart on its own. If you want signals, price targets, a scanner table, or alerts, import this library into your own script (or use the companion "Pattern Atlas : Chart Pattern Scanner " indicator, which does exactly that) rather than expecting this script to render anything by itself.
This library also does not evaluate multi-timeframe data, volume, or broader market structure — it's swing-pivot and trendline geometry only, on purpose, so its behavior is easy to reason about and easy to reuse as one building block among several.
Four of the seventeen patterns are explicitly noted above as approximate: Rounding Top/Bottom, Diamond Top/Bottom, Broadening Formation, and Bump-and-Run Reversal are read from a small, fixed number of swing pivots rather than fitting a true curve or hand-drawn trendline to the data. They will not catch every textbook-perfect example of these shapes, and they may occasionally flag a looser approximation of one. Treat them as a starting point for further chart review, not a final word.
PART OF A LARGER SERIES
This is Library #2 in the AxeAlgo Pattern Atlas — a planned set of Pine libraries splitting pattern detection by the method actually used to find each kind of pattern: candlestick shape (Library #1, already published), classical chart/geometric patterns (this library), harmonic patterns (Fibonacci-ratio XABCD structures), and market-structure concepts (order blocks, liquidity, Wyckoff-style events). Each library is independent and useful on its own; together they're meant to cover technical pattern analysis without forcing unrelated detection methods into the same function.
A NOTE ON REPAINTING
trackPivots() only confirms a swing pivot once rightBars bars have passed since it happened — the same confirmation lag ta.pivothigh()/ta.pivotlow() use, just written out as plain comparisons so it works safely inside a library's exported functions. That means a pivot never moves or disappears once confirmed; it just takes rightBars bars to become known, which is a normal and unavoidable part of swing-pivot detection, not a defect in this library. On the currently-forming bar, a pattern's found status can still change tick to tick as that bar's own high, low, and close move — that's inherent to reading live price action. If you're building persisted signals, drawings, alerts, or price targets on top of these functions (rather than a live "what's happening right now" readout), gate your usage on barstate.isconfirmed so a signal only fires once the bar it describes has actually closed, exactly like the companion scanner indicator does.
DISCLAIMER
This library is a technical analysis tool for identifying classical chart pattern shapes in historical and live price data. It does not predict future price movement, and a detected pattern — including any projected price target — is a description of past price action, not a signal guaranteed to repeat. Nothing in this script constitutes financial advice. Always combine pattern recognition with your own risk management and broader analysis before making any trading decision.
Library

Pattern Atlas: Candlestick Indicator [AxeAlgo]Pattern Atlas: Candlestick Indicator
Companion indicator to Pattern Atlas : Candlestick (Library #1 of the AxeAlgo Pattern Atlas)
WHAT THIS INDICATOR IS
This is a complete candlestick pattern scanner built on top of the Pattern Atlas : Candlestick library — 23 classical candlestick patterns, detected on every bar and turned into on-chart highlighting, a live scanner table, and alerts. It doesn't implement any pattern math itself; every detection is delegated to the library's detect*() functions, so what you see here is exactly what that library finds, with nothing added or reinterpreted.
Candlestick reading is one of the oldest tools in technical analysis, tracing back to Steve Nison's work bringing Japanese candlestick charting to Western traders. The 23 patterns here follow that standard catalog (cross-checked against TA-Lib's CDL* function list), so anyone who already knows what a Morning Star or a Bullish Engulfing bar looks like will recognize exactly what's being flagged.
THE 23 PATTERNS IT SCANS
Single-bar patterns (9): Doji, Long-Legged Doji, Dragonfly Doji, Gravestone Doji, Hammer / Hanging Man, Inverted Hammer / Shooting Star, Marubozu, Spinning Top, Belt Hold.
Two-bar patterns (6): Engulfing, Harami, Harami Cross, Piercing Line / Dark Cloud Cover, Tweezer Top / Bottom, Kicker.
Three-bar-and-longer patterns (8): Morning / Evening Star, Morning / Evening Doji Star, Three Soldiers / Crows, Three Inside Up / Down, Three Outside Up / Down, Abandoned Baby, Rising / Falling Three Methods (the one pattern spanning 5 bars), Stick Sandwich.
READING THE CHART
Each matched pattern gets a box drawn around the exact bars it spans, colored gold for bullish, pale gold-white for bearish, and bright gold for neutral (indecision) patterns — colors are user-configurable. On top of that, a "pin" marker appears at the bar: bullish pins hang below the bar, bearish pins sit above it, and neutral patterns get a plain floating gem with no stem, since indecision doesn't have a direction to anchor to. Hovering any pin or gem shows the full description of everything that matched on that bar, including a measured strength percentage for each one — not just the pattern name repeated back at you.
Strength is a generic, direction-based read on how decisively the bar closed within its own high-low range (near the high for a bullish match, near the low for a bearish one, or a small body relative to the range for a neutral one) — a rough, pattern-agnostic proxy, not a bespoke ratio breakdown per pattern, since that level of internal detail isn't something the library exposes.
THE SCANNER TABLE
A table lists all 23 patterns grouped by category, with a live status column showing each one's current match percentage (or a dash when nothing's matching on the current bar). Position, text size, and whether it's shown at all are all configurable. This table is intentionally live — it reflects the forming bar in real time rather than waiting for the bar to close, since it's meant as a "what's happening right now" readout rather than a persisted signal.
FILTERS AND SETTINGS
Every pattern has its own on/off checkbox, and each of the three categories (Single-Bar, Two-Bar, Three-Bar+) has a master switch above its checkboxes to turn the whole group off in one click.
Three additional filters are available, all off by default so the scanner stays an unbiased detector unless you opt in:
- Volume confirmation — requires a match to occur on at least a chosen multiple of its own trailing average volume before it counts.
- Trend context — requires bullish matches to occur against a downtrend and bearish matches against an uptrend (the classical reading that a reversal candle means more against the trend it's reversing than in the middle of a random chop). Neutral patterns are never filtered by this, since they don't imply a direction.
- Minimum strength — hides matches below a chosen strength percentage.
These filters affect what's drawn on the chart and what feeds the pin/gem tooltips. They do not affect the scanner table, which always shows the library's raw, unfiltered read of the current bar, and they do not affect the per-pattern alerts described below, which fire independently of the visual display settings.
ALERTS
Every pattern has its own alert condition available in TradingView's Create Alert dialog, plus three combined conditions (any bullish pattern, any bearish pattern, any neutral pattern), plus one dynamic alert with a full message listing every pattern that matched, grouped by direction, with each one's measured description and strength.
A NOTE ON REPAINTING
Every box, pin, gem, and alert is gated on the bar actually having closed — nothing here fires or gets drawn off a still-forming bar, regardless of your alert-frequency setting in TradingView's dialog. The one exception is the scanner table, which is deliberately live so it can answer "what's happening on this bar right now" — that's a readout, not a persisted signal, and it's expected to change as the current bar develops.
PART OF A LARGER SERIES
This indicator is the companion to Library #1 of the AxeAlgo Pattern Atlas — a planned set of Pine libraries splitting pattern detection by the method actually used to find each kind of pattern: candlestick shape (this one), classical chart/geometric patterns (Library #2), harmonic Fibonacci-ratio patterns (Library #3), and market-structure concepts (order blocks, liquidity, Wyckoff-style events). Each library has, or will have, its own companion scanner indicator built the same way this one is.
DISCLAIMER
This indicator is a technical analysis tool for identifying classical candlestick shapes in historical and live price data. It does not predict future price movement, and a detected pattern — including its measured strength — is a description of past price action, not a signal guaranteed to repeat. Nothing in this script constitutes financial advice. Always combine pattern recognition with your own risk management and broader analysis before making any trading decision.
Indicator

Double Tap Double Top/Bottom [Viprasol]Double Tap — Double Top / Double Bottom
═══════════════════════════════════════════════════════════
WHAT IT DOES
═══════════════════════════════════════════════════════════
Double Tap finds the two most reliable reversal patterns in classic technical analysis —
the Double Top (M) and Double Bottom (W) — draws them as they FORM, and on a confirmed
neckline break projects a complete trade map: Entry, Stop, and measured-move Target, then
tracks the outcome to ✓ or ✗. It keeps a history of recent patterns on the chart, not
just the latest one, so you can see how the tool reads structure over time.
═══════════════════════════════════════════════════════════
HOW THE PATTERN IS DETECTED
═══════════════════════════════════════════════════════════
1. Two confirmed swing highs (Double Top) or lows (Double Bottom) are found via a pivot
length you control.
2. The two extremes must match within a tolerance — a percentage of the pattern's height —
so the "double" is genuinely level, not a random pair of swings.
3. A valley (top) or peak (bottom) between them becomes the NECKLINE.
4. The pattern must span between your min and max width (bars) to filter noise.
5. While these conditions hold, the pattern is shown FORMING (a dotted preview). If price
breaks back past the twin extreme first, the setup is invalidated and the preview clears.
6. TRIGGER: a confirmed bar close through the neckline solidifies the pattern and prints
the trade levels.
Non-repainting: swings are confirmed pivots and the trigger evaluates on closed bars.
═══════════════════════════════════════════════════════════
THE TRADE MAP (drawn on every confirmed pattern)
═══════════════════════════════════════════════════════════
• ENTRY — the neckline-break close.
• STOP — beyond the higher top / lower bottom, padded by an ATR buffer.
• TARGET — the measured move: pattern height projected from the neckline (adjustable %).
On the chart: two peak markers with prices, a shaded pattern box, a dashed neckline, an
Entry line, and green/red TP/SL zones — all extending forward until price resolves them.
The pattern label then flips to ✓ (target hit) or ✗ (stop hit).
═══════════════════════════════════════════════════════════
FEATURES
═══════════════════════════════════════════════════════════
• Live "forming" preview so you see a pattern building before it triggers.
• Tracks multiple patterns across history (configurable how many to keep).
• Detect tops, bottoms, or both; full control of tolerance, pivot length, min/max width.
• Measured-move target (% of height) + ATR stop buffer.
• Dashboard: current status, active Entry / Target / Stop with % distance, and a running
hit rate (how often target was reached before stop, on the patterns shown).
• Alerts on Double Top / Double Bottom confirmation, plus a webhook-ready alert() message
(Text or JSON) carrying entry / stop / target.
═══════════════════════════════════════════════════════════
HOW TO USE
═══════════════════════════════════════════════════════════
1. Set Swing Length to the pattern size you want (larger = bigger, cleaner patterns).
2. Watch the dotted "forming" preview; act only on the confirmed neckline break.
3. Use the drawn Entry / Stop / Target as your plan; scale or exit at the target.
4. Tune Tolerance (how level the two extremes must be) to your market's character.
5. Set an alert on "Any alert() function call" for automation, or use the built-in
Double Top / Double Bottom conditions.
═══════════════════════════════════════════════════════════
HONEST LIMITATIONS
═══════════════════════════════════════════════════════════
• Pattern recognition is inherently subjective; this uses one consistent rule-based
definition — it won't catch every double a human would draw, and vice versa.
• The dashboard's hit rate is a simple tally of the patterns currently shown (target-before-
stop), not a full backtest — use it as a feel, not a performance guarantee.
• Swings confirm after the fact (pivot lookback), so patterns appear with a natural lag.
• This is a decision-support tool, not financial advice. Manage your own risk.
═══════════════════════════════════════════════════════════
CREDITS & ORIGINALITY
═══════════════════════════════════════════════════════════
The double top / double bottom is public, classic technical analysis; ATR is J. Welles
Wilder's public concept. Every line of Pine here — the pivot-pairing detection, the
tolerance/neckline/measured-move logic, the forming preview, the multi-pattern tracker,
and all visualization — is original Viprasol work written from scratch. No third-party
Pine code is reused.
Indicator

Adaptive Structure Support & ResistanceChinese description is provided below. Chinese readers, please scroll down to read.
A structure-based support and resistance framework using confirmed pivots, price clustering, adaptive search ranges, historical reaction analysis and post-break role reversal.
1. What is this indicator?
Adaptive Structure Support & Resistance is a market-structure tool designed to identify the support and resistance areas that are currently most relevant to price.
The purpose of this script is not to display every historical swing high and swing low.
Instead, it attempts to answer a more practical question:
Among all historical turning points, which price areas still have enough structural significance to matter to the current market?
The script therefore treats support and resistance as a multi-stage structural problem.
The complete process is:
Identify confirmed swing highs and swing lows.
Merge nearby turning points into structural price clusters.
Evaluate the historical importance of each cluster.
Determine how far above and below the current price the model needs to search.
Select the most relevant support and resistance structures.
Evaluate the historical strength of the selected structures.
Convert exact levels into practical support/resistance zones.
Track what happens after a confirmed break.
Require a retest or rebound before confirming a support/resistance role reversal.
This means that the script is not simply:
ta.pivothigh(...)
ta.pivotlow(...)
followed by two horizontal lines.
Confirmed pivots are only the raw structural observations. Several additional stages are used before a level becomes the displayed support or resistance.
2. Why was this model designed?
Traditional automatic support/resistance tools often face several practical problems.
Too many levels
If every historical pivot is plotted independently, the chart can quickly become filled with horizontal lines. Many of those lines represent nearly identical prices or structures that are no longer relevant.
A single pivot may not represent a meaningful structure
A temporary local high or low can occur for many reasons. A more meaningful market structure often forms when price reacts around the same area multiple times.
Fixed search distances do not work equally well for every instrument
A low-volatility instrument may have meaningful support only 10–20% below the current price.
A highly volatile or strongly trending instrument may require a much wider historical price range before a significant support or resistance structure appears.
The nearest level is not always the most important level
A minor pivot located very close to current price may be less meaningful than a slightly more distant area that has produced several strong historical reactions.
A breakout does not automatically mean role reversal
Resistance does not necessarily become support simply because price trades above it once.
Likewise, support does not necessarily become resistance immediately after one breakdown.
The model is designed around these problems.
Its goal is therefore not to maximize the number of detected structures, but to reduce historical information into a smaller set of currently relevant structural areas.
3. Where can this indicator be used?
The script is intended for standard price charts where historical swing structure is meaningful.
Typical applications include:
Stocks
Indices
ETFs
Futures
Foreign exchange
Cryptocurrency
Other liquid instruments with usable price history
It can be used on different timeframes, but the meaning of the detected structure changes with the timeframe.
For example:
A support structure on a 15-minute chart describes short-term intraday structure.
A support structure on a daily chart describes a larger swing structure.
A support structure on a weekly chart may represent a long-term structural price area.
The indicator does not automatically convert a lower-timeframe level into a higher-timeframe level.
The displayed support and resistance always belong to the chart timeframe being analyzed.
4. Core principle: confirmed structural pivots
The first stage identifies confirmed pivot highs and pivot lows.
A pivot requires price bars on both sides of the potential turning point.
Representative logic:
float pivotHigh = ta.pivothigh(
high,
pivotLeftBarsInput,
pivotRightBarsInput)
float pivotLow = ta.pivotlow(
low,
pivotLeftBarsInput,
pivotRightBarsInput)
The important word here is confirmed .
A newly formed high is not immediately considered a structural resistance observation.
A newly formed low is not immediately considered a structural support observation.
The model waits for the configured number of right-side bars before confirming the pivot.
The intention is to sacrifice some immediacy in exchange for more stable structural observations.
This also means that pivot detection naturally contains confirmation delay.
That delay is part of the methodology rather than an attempt to predict a turning point before it exists.
5. Core principle: price clustering
Multiple pivots occurring around similar prices should not necessarily be treated as unrelated horizontal levels.
For this reason, the script groups nearby pivot observations into price clusters.
Conceptually:
float distancePercent =
math.abs(price - clusterPrice) /
clusterPrice *
100.0
if distancePercent <= mergePercent
matchingIndex := clusterIndex
If several historical lows occur around approximately the same area, they can contribute to one support structure.
The same process applies to historical highs when building resistance structures.
This changes the interpretation from:
"Price touched 12.01, 12.05 and 12.09."
to:
"Price has repeatedly reacted around the same structural area."
The cluster center is updated using the accumulated structural contribution of its observations rather than simply keeping the first pivot price.
6. Core principle: structural ranking
Not every cluster deserves the same importance.
Each pivot contributes a base structural score that incorporates relative volume participation and recency.
A simplified representation of the calculation is:
float pivotBaseScore =
1.0 +
volumeWeightInput * volumeRatio +
recencyWeightInput * recencyFactor
When several pivots belong to the same cluster, their contributions accumulate.
After the candidate clusters have been created, the model evaluates structures within the active search range.
The final ranking also gives a limited preference to structures nearer the current price:
float candidateRank =
accumulatedBaseScore +
proximityBonusInput *
proximityFactor
Proximity is therefore useful, but it is not the entire model.
A level is not selected only because it is the nearest pivot.
7. Relative volume participation
Historical price reactions can contain different levels of market participation.
For each pivot observation, volume is compared with its recent average.
Representative logic:
float volumeRatio =
pivotAverageVolume > 0.0
? math.min(
pivotVolume / pivotAverageVolume,
3.0)
: 1.0
Higher relative volume can contribute additional structural weight.
However, volume is only one component.
The model does not assume that high volume by itself automatically creates support or resistance.
8. Historical reaction analysis
A structural level is more informative when historical interactions with that area produced meaningful price responses.
For a support pivot, the model measures the maximum upside response after the confirmed low during a configurable observation window.
Conceptually:
float reactionPercent =
(highestPostPivotPrice / pivotPrice - 1.0) *
100.0
For resistance, the opposite calculation is used:
float reactionPercent =
(pivotPrice - lowestPostPivotPrice) /
pivotPrice *
100.0
This allows the model to distinguish between two different situations.
A level that price touched repeatedly but barely reacted to.
A level where historical interaction repeatedly produced meaningful rejection or recovery.
These situations are not treated as structurally equivalent.
9. Why the search range is adaptive
One of the main design features of this script is that support and resistance do not have to use the same fixed search distance.
A fixed 25% range can work well for one instrument but fail on another.
A fixed 100% range may capture important historical structures, but can also introduce unnecessarily distant structures when meaningful nearby levels already exist.
The Auto mode therefore uses progressive search tiers.
25%
50%
75%
100%
The algorithm first asks whether the nearest tier contains a structure that satisfies minimum structural requirements.
If it does, the search can stop.
If it does not, the model expands to the next tier.
Representative logic:
if distancePercent <= 25.0
result := 25.0
else if distancePercent <= 50.0 and maximumRangePercent >= 50.0
result := 50.0
else if distancePercent <= 75.0 and maximumRangePercent >= 75.0
result := 75.0
else if distancePercent <= 100.0 and maximumRangePercent >= 100.0
result := 100.0
The important feature is that support and resistance are evaluated independently .
For example:
Support search range: 25%
Resistance search range: 75%
This can occur when a meaningful support structure exists close below price, while the next meaningful resistance structure is much farther above the market.
10. The model does not stop at the first nearby pivot
Adaptive search would not be useful if any small nearby pivot could immediately stop expansion.
The model therefore requires a nearby structure to satisfy minimum quality conditions.
Conceptually:
bool qualifiedStructure =
touchCount >= minimumStructureTouchesInput and
structureQuality >= adaptiveQualityThreshold
Only a qualified structure can stop the search from expanding to the next distance tier.
This prevents a minor local pivot from automatically hiding a larger and more meaningful historical structure.
11. Volatility-aware search adjustment
Volatility also affects how much evidence is required from nearby structures.
ATR is converted into a percentage of price:
float currentAtrPercent =
close > 0.0
? averageTrueRange / close * 100.0
: 0.0
When volatility is high, the minimum structural-quality requirement is increased moderately.
Representative logic:
if currentAtrPercent >= 6.0
adaptiveQualityThreshold :=
minimumStructureQualityInput + 8.0
else if currentAtrPercent >= 4.0
adaptiveQualityThreshold :=
minimumStructureQualityInput + 5.0
The purpose is not simply:
Higher volatility = wider search range.
Instead:
Higher volatility = minor nearby structures need stronger evidence before they are allowed to stop the search.
This distinction is important.
Volatility assists the structural search; it does not independently determine support or resistance.
12. Structural quality used by adaptive search
To decide whether search expansion can stop, a separate quality model evaluates candidate clusters.
The quality assessment combines several components:
Number of structural interactions
Average historical reaction
Relative volume participation
Recency
Accumulated structural contribution
A simplified representation is:
float structureQuality =
touchComponent +
reactionComponent +
volumeComponent +
recencyComponent +
baseScoreComponent
The result is bounded to a 0–100 scale.
clampValue(
structureQuality,
0.0,
100.0)
This quality score primarily answers:
"Is this structure meaningful enough for the adaptive search to stop here?"
It is separate from the final displayed strength score.
13. Selecting the final support and resistance
After the adaptive search distance has been determined, the model evaluates all valid clusters inside that range.
For support:
The cluster must be below or near the current price.
It must remain inside the active support search range.
Its structural score is combined with a proximity adjustment.
For resistance, the same process is applied above current price.
The highest-ranked candidate becomes the primary structural level.
This means that the displayed level represents the outcome of:
confirmed pivots → clustering → structural scoring → adaptive distance selection → final ranking
rather than simply selecting the latest high or low.
14. Strength score: what does 0–100 mean?
After the primary support and resistance levels are selected, the model performs a second evaluation.
This stage describes the historical quality of the selected structure .
The strength score considers:
Touch count
Average reaction after historical interactions
Relative volume participation
Recency
Repeated crossings of the level
Fast failed breaks
The positive components are conceptually:
float rawStrengthScore =
touchComponent +
reactionComponent +
volumeComponent +
recencyComponent +
stabilityComponent -
totalPenalty
Repeated crossings reduce the score:
float totalPenalty =
crossingCount *
crossingPenaltyInput +
failedBreakCount *
failedBreakPenaltyInput
The final value is limited to 0–100.
The interface converts it into:
Weak
Medium
Strong
The score should not be interpreted as:
82 points = 82% probability that support will hold.
It does not represent probability, expected return or strategy win rate.
It is a normalized description of historical structural behavior.
15. Why repeated crossings reduce strength
A price level may appear frequently in historical data simply because the market traded through it many times.
That does not necessarily make the level stronger.
A structurally useful support or resistance area usually produces some degree of rejection, recovery or directional response.
For this reason, the script counts repeated close-to-close crossings.
Representative logic:
bool crossedAbove =
olderClose <= level and
newerClose > level
bool crossedBelow =
olderClose >= level and
newerClose < level
if crossedAbove or crossedBelow
crossingCount += 1
Frequent crossings therefore reduce structural strength instead of increasing it automatically.
16. Why support and resistance are displayed as zones
Real market structure rarely operates at one mathematically exact tick.
Several pivots may occur at slightly different prices while still representing the same area.
The script therefore displays:
A center structural level
A surrounding structural zone
Zone width contains two elements.
First, the actual spread of the clustered pivot prices.
Second, a small volatility-sensitive padding:
float zonePadding =
math.max(
selectedLevel *
minimumZoneWidthPercentInput /
100.0,
averageTrueRange *
atrZoneMultiplierInput)
The center line is useful for reference.
The surrounding area is intended to represent the broader price region where structural interaction may occur.
17. Breakout detection uses the previous structure
There is an important implementation detail in breakout detection.
When price breaks resistance, the current resistance calculation may immediately change because current price itself has changed.
If breakout detection used only the newly recalculated structure, the model could lose the level that price actually broke.
The script therefore references the previously confirmed zone:
float previousResistanceZoneUpperBound =
resistanceZoneUpperBound
float resistanceBreakTrigger =
previousResistanceZoneUpperBound *
(1.0 +
breakoutBufferPercentInput /
100.0)
The same principle applies to support breakdowns.
This allows the structural state machine to remember the actual area involved in the break.
18. Resistance does not immediately become support
A confirmed break starts a new structural state.
The model uses named states internally:
const int STATE_NORMAL = 0
const int STATE_BREAKOUT_WAITING_RETEST = 1
const int STATE_RESISTANCE_TO_SUPPORT = 2
const int STATE_BREAKDOWN_WAITING_REBOUND = -1
const int STATE_SUPPORT_TO_RESISTANCE = -2
After resistance is broken:
The previous resistance area is stored.
The model enters a "waiting for retest" state.
Price is monitored for a return toward the old resistance.
If the retest holds, the former resistance may become support.
If price falls back through the old zone, the breakout is treated as failed.
Representative confirmation logic:
bool testedFormerResistance =
low <=
roleReversalUpperBound *
(1.0 +
retestTolerancePercentInput /
100.0)
bool retestHeld =
testedFormerResistance and
close > roleReversalUpperBound
Only after this process can the old resistance be promoted to support.
19. Support-to-resistance uses the opposite process
After support is broken:
The previous support area is stored.
The model waits for a rebound.
Price must test the former support area.
If price is rejected and cannot recover the area, the former support can become resistance.
Representative logic:
bool testedFormerSupport =
high >=
roleReversalLowerBound *
(1.0 -
retestTolerancePercentInput /
100.0)
bool reboundRejected =
testedFormerSupport and
close < roleReversalLowerBound
This creates a distinction between:
price crossed a level
and:
the market actually completed a structural role reversal.
20. Failed breakout and failed breakdown
The script also monitors invalidation after a break.
If resistance is broken but price quickly returns below the former resistance structure, the event can be treated as a failed breakout.
If support is broken but price quickly recovers the former support structure, the event can be treated as a failed breakdown.
These events reset the pending role-reversal process rather than automatically promoting the old structure to a new role.
21. How to use the indicator
A simple workflow is:
Locate the current support
Identify the support area below the current market.
This is the structural area currently considered most relevant by the model.
Locate the current resistance
Identify the active structural resistance above price.
Read the strength
A stronger score indicates that the selected structure has historically shown better structural characteristics under this model.
It does not mean the level cannot break.
Read "Why this level?"
The dashboard shows the number of historical structural interactions and the average subsequent reaction.
This gives a plain-language explanation for why the level has been selected.
Check how far the algorithm searched
For example:
"Below 25% | Above 75%"
means that qualified support was available relatively close below current price, while the model had to inspect a much wider area to find qualified resistance.
Observe the current structural state
The dashboard may report states such as:
"Price is between support and resistance"
"Resistance broken; waiting for a retest"
"Former resistance is currently acting as support"
"Support broken; waiting for a rebound"
"Former support is currently acting as resistance"
22. Practical interpretation
The indicator is designed primarily as a context tool .
For example:
Price approaching strong support does not automatically mean "buy".
It means price is entering an area that has meaningful structural evidence and may deserve closer observation.
Likewise:
Price approaching resistance does not automatically mean "sell".
It identifies an area where historical supply or rejection has been structurally significant.
A trader can then combine that context with his or her own analysis of:
Price action
Volume
Trend
Market regime
Higher-timeframe structure
Risk/reward
Position sizing
Independent fundamental or macro analysis
The script itself does not generate automatic buy or sell orders.
23. Dashboard explanation
The dashboard intentionally avoids exposing every internal statistical variable.
Instead, it translates the model into simpler trading language.
Support
Current selected support level and its strength evaluation.
Why this level?
Shows how many historical structural interactions contributed to the area and the average subsequent upside response.
Resistance
Current selected resistance level and strength evaluation.
Why this level?
Shows historical interactions and the average subsequent downside response.
How far it searched
Shows the active adaptive search range below and above the current market.
Current state
Explains whether price remains between the structures, has broken one of them, is waiting for confirmation, or has completed a role reversal.
24. Main settings
Lookback Bars
Controls how much historical price data is considered when constructing structural clusters.
A longer lookback includes more historical structure but may also retain older information.
Pivot Left Bars / Pivot Right Bars
Control how strict pivot confirmation is.
Larger values generally identify larger structural turns but require more confirmation.
Price Cluster Width %
Controls how close two pivot observations must be before they can belong to the same structural area.
Search Mode
Auto allows support and resistance to determine their own search distances.
Manual uses a fixed maximum distance.
Maximum Auto Range
Defines the maximum distance the adaptive search is allowed to inspect.
Minimum Structure Quality
Controls how meaningful a structure must be before it can stop automatic search expansion.
Minimum Valid Tests
Defines the minimum number of structural observations required for a candidate to qualify during adaptive search.
Reaction Observation Bars
Defines how many bars after a historical pivot are examined when measuring its subsequent price reaction.
Break Confirmation Buffer
Adds a small margin beyond the old structural zone before a break is considered confirmed.
Retest Tolerance
Controls how close price must return to the former structural area during retest/rebound evaluation.
25. Alerts
Alert conditions are provided for:
Resistance break
Support break
Resistance confirmed as support
Support confirmed as resistance
Failed breakout
Failed breakdown
When close confirmation is enabled, structural break events are evaluated on confirmed bars.
26. About repainting and structural updates
This script should not be interpreted as a system that predicts pivots before they are confirmed.
Pivot highs and lows require right-side confirmation bars.
Therefore:
A newly forming pivot is not shown as confirmed structure until sufficient bars exist to confirm it.
Once new market data arrives, the active support and resistance can still change for legitimate structural reasons.
Examples include:
A new confirmed pivot enters the calculation.
Several new observations create a stronger price cluster.
Current price moves enough to change the relevant search region.
An older observation exits the configured lookback window.
A breakout creates a role-reversal state.
This is dynamic structural recalculation, not a promise that current support and resistance will remain fixed forever.
27. Why these components belong together
This script combines several concepts, but they are not independent indicators placed together for convenience.
Each component solves a different stage of the same problem.
Confirmed pivots identify potential structural observations.
Price clustering converts nearby observations into common price areas.
Structural ranking determines which areas contain more meaningful historical evidence.
Adaptive search determines how far the model needs to inspect for an adequate structure.
Reaction analysis measures how price historically responded to that structure.
Strength evaluation summarizes the historical quality of the selected area.
ATR-based zone construction converts an exact center price into a practical market area.
The role-reversal state machine manages what happens after the structure is broken.
The components are therefore sequential stages of one structural support/resistance framework rather than a mashup of unrelated indicators.
28. What is distinctive about this implementation?
The primary design characteristics of this implementation are:
Nearby pivots are aggregated into structural price clusters rather than displayed independently.
Support and resistance use independent adaptive search ranges.
Search expansion depends on structural quality rather than distance alone.
Volatility modifies the evidence required from nearby structures.
Level selection and level-strength evaluation are deliberately separated.
Repeated crossings and failed breaks can reduce structural strength.
Support and resistance are represented as price areas instead of exact single-price barriers.
Break detection references the previous structural zone.
Role reversal requires confirmation through a state machine instead of occurring immediately after a single crossing.
The chart intentionally focuses on the current relevant structure rather than filling the chart with historical event markers.
29. Limitations
No support/resistance algorithm can know with certainty whether a level will hold or fail.
Important limitations include:
Pivot confirmation introduces intentional delay.
Support and resistance may change as new information becomes available.
Historical reaction does not guarantee future reaction.
A high strength score is not a probability of success.
Very new instruments with limited history may not contain enough structural observations.
Strong trend transitions can invalidate historical structures quickly.
Volume-based components depend on the quality and meaning of the instrument's volume data.
Different timeframes can produce materially different support and resistance structures.
Synthetic or non-standard chart types may use transformed OHLC values and can therefore produce different structural results.
30. Final note
Support and resistance should be understood as areas of market interaction, not guaranteed turning points.
The purpose of this indicator is to organize historical structure and reduce it into a small number of currently relevant price areas.
It is an analytical framework, not an automatic trading system.
This script is intended for market-structure analysis and educational use. It does not constitute investment advice, a recommendation, or a guarantee of future market performance.
────────────────────────────────────
中文说明
1. 这个指标是什么?
Adaptive Structure Support & Resistance 是一个基于市场历史结构,自动寻找当前价格上下方关键支撑与压力区域的分析工具。
它解决的并不是:
“历史上哪里出现过高点和低点?”
而是试图解决一个更实际的问题:
“历史上这么多高低点里,哪些价格区域到现在仍然具有足够的结构意义,值得当前继续关注?”
所以,这个指标不是简单地把每一个 Pivot High 和 Pivot Low 都画成水平线。
完整计算过程包括:
识别已经确认的历史高低结构。
把价格相近的多个结构合并成一个价格簇。
评价不同价格簇的历史结构意义。
分别判断寻找支撑和压力到底需要看多远。
从有效搜索范围中选择当前更重要的支撑与压力。
评价被选中位置过去的实际价格反应。
将精确价格转化为更加符合实际交易的撑压区域。
价格突破或跌破以后保存原结构。
通过回踩或反抽确认撑压角色是否真正发生转换。
因此,Pivot 只是整个模型的第一步,而不是最终结果。
2. 为什么要做这套模型?
传统的自动支撑压力工具经常存在几个问题。
画出来的线太多
如果把每个前高前低全部保留下来,时间稍长以后主图会出现大量水平线。
不仅影响阅读,而且其中很多价格其实属于同一个结构。
单个高低点不一定有意义
市场临时出现一个局部最高点或最低点,并不能说明这个价格一定存在真正的供需结构。
如果不同时间价格多次来到相近区域并产生反应,它所代表的结构意义通常更加完整。
不同标的不能使用完全相同的搜索距离
有些股票距离现价下方 20% 就存在非常明确的历史结构。
有些高波动、长期趋势较强的股票,却可能需要向下或者向上看 50%、75% 甚至更远,才能找到真正有意义的位置。
距离最近的不一定最重要
现价附近可能存在一个很小的 Pivot,但稍微远一点的位置可能历史上被多次验证,并且每次都出现较大价格反应。
突破并不等于立刻完成撑压转换
突破压力一次,不应该马上认为压力已经变成支撑。
跌破支撑一次,也不应该马上认为原支撑已经成为新压力。
所以这套模型的设计目标不是“尽量多找线”。
而是:
尽量把复杂的历史价格结构压缩成少量、当前更值得关注的支撑和压力区域。
3. 可以用在哪里?
只要历史价格结构具有一定参考意义,理论上都可以使用,例如:
股票
指数
ETF
期货
外汇
加密资产
其他具有正常历史行情数据的流动性标的
不同周期看到的是不同级别的结构。
例如:
15分钟图得到的是偏短线结构。
日线得到的是波段级结构。
周线得到的是更长期的历史结构。
指标不会把15分钟的支撑自动解释成日线支撑。
所有计算都基于当前图表所使用的周期。
4. 第一步:确认历史结构高低点
模型首先通过已经确认的 Pivot High 与 Pivot Low 获取历史结构观察点。
核心逻辑:
float pivotHigh = ta.pivothigh(
high,
pivotLeftBarsInput,
pivotRightBarsInput)
float pivotLow = ta.pivotlow(
low,
pivotLeftBarsInput,
pivotRightBarsInput)
这里最重要的是“确认”。
一个刚刚形成的高点不会马上成为正式压力结构。
一个刚刚形成的低点也不会马上成为正式支撑结构。
需要等待右侧一定数量的K线完成确认。
所以模型主动接受一定的确认延迟,用来减少把尚未成立的短期极值直接当成重要结构的情况。
5. 第二步:把相近价格合并成一个结构
如果历史上存在:
12.01
12.05
12.09
这三个低点,实际上它们很可能描述的是同一片支撑区域,而不是三条完全独立的支撑线。
所以系统会计算不同 Pivot 之间的价格距离:
float distancePercent =
math.abs(price - clusterPrice) /
clusterPrice *
100.0
if distancePercent <= mergePercent
matchingIndex := clusterIndex
如果距离足够接近,就把它们合并到同一个价格结构中。
这样模型关注的就不再是:
“12.01碰过一次”
而是:
“12元附近这个区域历史上反复出现过结构反应。”
6. 第三步:给历史结构进行初步排序
并不是所有 Pivot 对结构的重要性都一样。
模型会考虑:
当时成交量相对大小
这个结构距离现在有多久
多个 Pivot 是否属于同一个价格区域
基础贡献大致表现为:
float pivotBaseScore =
1.0 +
volumeWeightInput * volumeRatio +
recencyWeightInput * recencyFactor
多个相近 Pivot 被合并后,它们的结构贡献会累积。
最后选择当前结构时,还会给予距离现价较近的位置一定加分:
float candidateRank =
accumulatedBaseScore +
proximityBonusInput *
proximityFactor
但这里需要注意:
“距离近”只是一个因素,并不是谁离现价最近就一定选择谁。
7. 成交量在这里做什么?
模型会把 Pivot 当时的成交量与近期平均成交量进行比较。
例如:
float volumeRatio =
pivotAverageVolume > 0.0
? math.min(
pivotVolume / pivotAverageVolume,
3.0)
: 1.0
如果某个结构形成时伴随更明显的市场参与,它可以得到额外权重。
但是成交量并不会单独决定支撑压力。
它只是结构评价中的一个辅助信息。
8. 历史触碰以后到底有没有真正反应?
一个位置历史上碰过很多次,并不代表它一定很重要。
关键还要看:
碰到以后,价格到底有没有发生真正的反向运动?
对于历史支撑 Pivot,系统观察之后一定K线范围内出现的最大向上反应。
核心思想:
float reactionPercent =
(highestPostPivotPrice / pivotPrice - 1.0) *
100.0
对于历史压力,则计算后续最大回落:
float reactionPercent =
(pivotPrice - lowestPostPivotPrice) /
pivotPrice *
100.0
这样能够区别:
一个历史上经常出现,但价格几乎没有明显反应的位置。
一个每次靠近以后,价格都出现较明显反转或回撤的位置。
9. 为什么搜索距离必须智能调整?
这是这个模型比较重要的一部分。
固定使用25%的搜索范围并不适合所有标的。
固定使用100%,又可能在不必要的情况下把非常遥远的历史结构纳入计算。
所以自动模式采用:
25%
50%
75%
100%
逐级寻找。
核心映射逻辑:
if distancePercent <= 25.0
result := 25.0
else if distancePercent <= 50.0 and maximumRangePercent >= 50.0
result := 50.0
else if distancePercent <= 75.0 and maximumRangePercent >= 75.0
result := 75.0
else if distancePercent <= 100.0 and maximumRangePercent >= 100.0
result := 100.0
如果25%以内已经存在合格结构,就可以停止。
如果没有,就扩大到50%。
依次类推。
10. 支撑和压力是分别搜索的
支撑和压力并不会强制使用同一个范围。
完全可能出现:
下方支撑搜索:25%
上方压力搜索:75%
它表达的意思是:
下方距离现价比较近的地方已经存在足够明确的历史支撑结构。
但是上方近距离没有达到要求的压力,所以模型继续向更远的位置寻找。
11. 为什么不是25%以内随便有个Pivot就停止?
如果只要附近出现一个 Pivot 就停止寻找,所谓智能搜索就没有意义。
因此,候选结构必须同时满足最低触碰次数和最低结构质量。
例如:
bool qualifiedStructure =
touchCount >= minimumStructureTouchesInput and
structureQuality >= adaptiveQualityThreshold
这意味着:
附近有结构 ≠ 附近有足够好的结构。
如果近端只是一个很弱的小级别价格点,系统仍然可以继续扩大搜索范围。
12. 波动率为什么也参与?
系统使用 ATR 相对于当前价格的比例观察标的自身波动程度。
float currentAtrPercent =
close > 0.0
? averageTrueRange / close * 100.0
: 0.0
高波动股票附近出现小 Pivot 非常正常。
因此,对于高波动标的,系统会适当提高“附近结构足够好”的要求。
例如:
if currentAtrPercent >= 6.0
adaptiveQualityThreshold :=
minimumStructureQualityInput + 8.0
else if currentAtrPercent >= 4.0
adaptiveQualityThreshold :=
minimumStructureQualityInput + 5.0
这里不是:
“ATR越高,搜索距离一定越远。”
而是:
“波动越高,附近的小结构必须更有说服力,才能阻止系统继续向外寻找。”
13. 智能搜索中的结构质量怎么计算?
用于决定“是否还要继续扩大搜索范围”的结构质量,主要包含:
历史触碰次数
触碰后的平均反应
相对成交量
结构新旧程度
多个结构累积后的基础得分
可以简化理解为:
float structureQuality =
touchComponent +
reactionComponent +
volumeComponent +
recencyComponent +
baseScoreComponent
最后压缩到0–100:
clampValue(
structureQuality,
0.0,
100.0)
这个分数主要解决的是:
“这个位置够不够好,好到可以不用继续向外找了?”
14. 最终支撑压力怎么选?
确定搜索范围以后,系统会重新检查范围内所有候选结构。
支撑必须位于现价下方或附近。
压力必须位于现价上方或附近。
最后比较:
历史结构累积得分
与当前价格的距离
选择当前 Rank 更高的结构。
所以最终看到的线经历了:
Pivot确认
→ 相近价格聚类
→ 结构评价
→ 智能搜索距离
→ 范围内重新排序
→ 最终支撑压力
15. 0–100强度分数到底是什么意思?
当最终支撑压力确定以后,系统会再做一次独立评价。
这一部分不是用来重新选择线,而是告诉你:
“现在已经选中的这条结构,历史质量到底怎么样?”
主要考虑:
触碰次数
历史平均反应
相对成交量
结构是否较新
是否经常被来回穿越
是否出现过快速失败突破
大致计算结构:
float rawStrengthScore =
touchComponent +
reactionComponent +
volumeComponent +
recencyComponent +
stabilityComponent -
totalPenalty
其中反复穿越和失败突破会扣分:
float totalPenalty =
crossingCount *
crossingPenaltyInput +
failedBreakCount *
failedBreakPenaltyInput
最后得到0–100,并转化成:
弱
中
强
但是一定不要理解成:
“82分 = 未来82%概率守住。”
它不是胜率,也不是未来预测概率。
它只是对历史结构质量进行标准化后的评分。
16. 为什么反复穿越反而扣分?
有些价格历史上出现很多次,仅仅是因为市场一直在这个位置上下震荡。
如果价格能够非常轻松地不断穿过这个位置,它未必是真正强支撑或强压力。
所以系统统计价格穿越中心结构的情况:
bool crossedAbove =
olderClose <= level and
newerClose > level
bool crossedBelow =
olderClose >= level and
newerClose < level
穿越越频繁,结构稳定性评价越低。
17. 为什么画的是区域,不只是一条线?
真实交易中,很少存在一个价格精确到最小报价单位以后永远有效。
历史多个 Pivot 本身就可能分布在一个小区间里。
所以模型保留:
中心结构价格
结构区域
区域宽度由:
历史 Pivot 聚类本身的价格范围
少量 ATR 波动缓冲
共同决定。
核心思想:
float zonePadding =
math.max(
selectedLevel *
minimumZoneWidthPercentInput /
100.0,
averageTrueRange *
atrZoneMultiplierInput)
中心线用于定位。
阴影区域用于表达真实市场中的价格博弈带。
18. 为什么突破使用上一根K线的压力?
这是结构判断里很重要的一点。
当价格突破压力以后,如果马上重新计算当前压力,那么旧压力可能已经被系统替换。
这样反而不知道价格刚刚突破的到底是哪一个结构。
所以突破判断使用突破之前已经存在的压力区域:
float previousResistanceZoneUpperBound =
resistanceZoneUpperBound
并基于它计算突破标准:
float resistanceBreakTrigger =
previousResistanceZoneUpperBound *
(1.0 +
breakoutBufferPercentInput /
100.0)
支撑跌破同理。
19. 突破压力以后为什么不能马上变成支撑?
系统内部使用一个状态机:
const int STATE_NORMAL = 0
const int STATE_BREAKOUT_WAITING_RETEST = 1
const int STATE_RESISTANCE_TO_SUPPORT = 2
const int STATE_BREAKDOWN_WAITING_REBOUND = -1
const int STATE_SUPPORT_TO_RESISTANCE = -2
突破压力以后:
保存原来的压力区域。
进入“等待回踩”状态。
观察价格是否重新回来测试原压力。
如果回踩以后守住,才确认压力转支撑。
如果重新跌回原结构下方,则视为突破失败。
回踩逻辑类似:
bool testedFormerResistance =
low <=
roleReversalUpperBound *
(1.0 +
retestTolerancePercentInput /
100.0)
bool retestHeld =
testedFormerResistance and
close > roleReversalUpperBound
20. 支撑转压力同样需要确认
支撑跌破以后:
保存原来的支撑。
等待价格反抽。
观察反抽是否重新接触原支撑区域。
如果无法重新站回,才确认原支撑变成压力。
例如:
bool testedFormerSupport =
high >=
roleReversalLowerBound *
(1.0 -
retestTolerancePercentInput /
100.0)
bool reboundRejected =
testedFormerSupport and
close < roleReversalLowerBound
因此模型会区分:
“价格只是穿过了一下”
与:
“原来的市场结构真正完成了角色转换”
21. 实际怎么使用?
最简单的使用顺序:
先看支撑在哪里
这是当前算法认为下方更值得关注的历史结构区域。
再看压力在哪里
这是当前上方更值得关注的历史结构区域。
看强度
强度越高,代表这个结构在模型评价中具有更好的历史表现。
但再强也可能被突破。
看“为什么是它?”
这里会直接告诉你历史上大致碰过多少次,以及碰到以后平均出现多大的反向运动。
看“算法看了多远”
例如:
下方25%|上方75%
意味着下方较近就找到了合格支撑,但是上方需要看更远,才找到合格压力。
最后看“现在怎么看”
这里会告诉你目前属于:
价格仍在支撑压力之间;
突破压力等待回踩;
原压力已经转为支撑;
跌破支撑等待反抽;
原支撑已经转为压力;
等结构状态。
22. 应该如何理解支撑压力?
这个指标最适合作为“位置和结构背景工具”。
例如:
价格到了强支撑,不等于自动买入。
它代表价格已经进入一个历史结构相对重要的位置,值得进一步观察。
同样:
价格到了强压力,也不等于必须卖出。
它代表价格进入过去曾经出现明显供给或回落反应的区域。
后续仍然可以结合自己的:
价格行为
成交量
趋势结构
大周期方向
市场环境
赔率
风险控制
仓位管理
共同判断。
23. 右上角面板怎么看?
我刻意没有把所有内部统计数据全部堆在面板上。
面板只保留实际使用中更容易理解的信息。
支撑位置
当前支撑在哪里,以及它的结构强弱。
为什么是它?
告诉你历史触碰次数和触碰以后平均反弹幅度。
压力位置
当前压力在哪里,以及强弱。
为什么是它?
告诉你历史触碰次数和之后平均回落幅度。
算法看了多远
显示支撑和压力分别使用了多大的搜索范围。
现在怎么看
使用大白话告诉你当前市场与撑压之间处于什么结构状态。
24. 常用参数怎么理解?
Lookback Bars / 回看K线数
决定使用多少历史K线寻找结构。
周期越长,可以考虑更久以前的结构,但也可能保留更多较旧的信息。
Pivot Left / Right Bars
决定 Pivot 判断严格程度。
数值越大,一般意味着只识别更明显的结构转折,同时确认速度也会更慢。
Price Cluster Width %
决定两个历史 Pivot 相差多少以内可以被认为属于同一结构。
Search Mode
Auto:自动决定支撑和压力分别要搜索多远。
Manual:手动固定搜索范围。
Maximum Auto Range
智能搜索允许向外扩展到的最大距离。
Minimum Structure Quality
决定附近结构必须达到多高质量,才能让系统停止继续扩大搜索。
Minimum Valid Tests
智能搜索中,一个结构至少需要多少次历史观察才能成为有效候选。
Reaction Observation Bars
计算历史 Pivot 出现以后,向后观察多少根K线的价格反应。
Break Confirmation Buffer
突破原撑压区域以后,需要额外超过多少缓冲才认定为有效突破。
Retest Tolerance
回踩或反抽过程中,允许价格距离原结构存在多大误差。
25. 警报
指标支持以下 Alert:
有效突破压力
有效跌破支撑
压力确认转支撑
支撑确认转压力
突破失败
跌破失败
如果启用了收盘确认,那么对应结构事件会等待K线确认以后判断。
26. 关于重绘和结构变化
这个指标不是提前预测 Pivot 的工具。
Pivot 本身必须等待右侧K线确认。
因此:
刚刚形成的最高点或最低点,不会在尚未确认时被当成已经成立的正式结构。
但是当前支撑压力未来仍然可能发生变化。
原因包括:
新的 Pivot 被确认。
新的历史触碰让另一个价格簇变得更重要。
现价移动以后,当前最相关的结构发生变化。
旧数据离开回看范围。
价格突破以后发生撑压角色转换。
这是动态结构模型正常的重新评价过程。
27. 为什么这些模块必须放在一起?
虽然指标中包含多个计算部分,但它们并不是几个无关指标简单拼接。
每一个部分都负责解决同一个支撑压力问题中的不同阶段。
Pivot :找出可能的历史结构观察点。
价格聚类 :把相近观察点合并成真正的价格区域。
结构排序 :判断哪些区域具有更多历史证据。
智能搜索 :判断为了找到有效结构到底需要看多远。
历史反应 :判断价格过去触碰以后是否真的产生明显反应。
强度评分 :评价最终选中结构过去的整体质量。
ATR区域 :把一个中心价格转化为更加符合实际市场的撑压带。
状态机 :处理结构突破以后,到底是真突破、失败突破还是完成撑压转换。
因此:
这是一条连续的结构计算链,而不是把多个独立指标组合到同一个脚本中。
28. 这套实现有什么特点?
主要设计特点包括:
不会把所有 Pivot 独立画线,而是先进行价格聚类。
支撑和压力可以使用完全不同的智能搜索距离。
是否扩大搜索范围由结构质量决定,而不是只有距离。
高波动环境会提高附近小结构的有效要求。
“选哪条线”和“这条线有多强”是两个独立计算阶段。
反复穿越会降低结构评分,而不是因为出现次数多就自动变强。
支撑压力使用区域表达,而不是绝对精确价格。
突破使用之前已经存在的结构,而不是突破以后重新计算出的新位置。
撑压转换必须经过回踩/反抽状态确认。
主图只重点展示当前结构,不保留大量历史突破标签干扰图表。
29. 使用限制
任何支撑压力算法都无法提前确定某个位置未来一定守住或者一定突破。
需要注意:
Pivot 确认天然存在延迟。
随着市场产生新数据,当前支撑压力可能发生变化。
历史上反应明显,不代表未来一定继续反应。
强度分数不是未来成功概率。
刚上市或者历史数据很少的标的可能缺少足够结构样本。
趋势发生巨大变化以后,过去有效的结构可能迅速失效。
成交量相关评价依赖该标的成交量数据本身的有效性。
不同周期得到的撑压位置可以完全不同。
非标准K线可能使用经过转换的 OHLC,因此计算结果可能与真实成交价格图存在差异。
30. 最后
支撑和压力应该被理解为市场可能发生博弈的区域,而不是保证发生反转的价格。
这个指标的核心目标,是把复杂的历史市场结构整理成少量、当前更值得观察的位置。
它是市场结构分析框架,而不是自动交易系统。
本指标仅用于市场结构研究与辅助分析,不构成投资建议、收益承诺或任何形式的买卖推荐。 Indicator

Confirmed Structure Transition Map [Pineify]Confirmed Structure Transition Map
Overview
This Pine Script v6 indicator separates confirmed swings, break-of-structure events, and direction candidates. A finite state appears as a stepped price corridor.
Problem Definition
A common baseline finds fractal highs and lows, then labels any crossing BOS or CHoCH. It hides the pivot bar, the later confirmation bar, and the still later break. One level may emit repeated labels, while one counter-break may be called a reversal. Label density replaces a distinction between swing formation, continuation, and transition. This script separates those events and never triggers an earlier break with future information.
Design Rationale
Confirmed pivots provide stable levels; a moving extreme has no fixed identity. Each high and low becomes a one-use rail. A break with the bias is BOS; the first qualified counter-break is only a potential CHoCH. Bias changes after a fresh rail breaks again in that direction. Crossing the frozen opposite rail or age limit cancels the candidate. This rejects immediate reversal on one counter-break. The tradeoff is lag for explicit evidence. ATR scaling filters tiny overruns but does not estimate probability.
Key Features
Optional confirmed HH, LH, HL, and LL labels.
One-use rails that suppress duplicate breaks.
BOS, potential CHoCH, shift, invalidation, and expiry states.
ATR displacement, state corridor, alerts, and dashboard.
How It Works
The script reads chart OHLC and a symmetric pivot window. A pivot is accepted after its right-side bars close. Its price and index are stored, compared with the prior same-type pivot, and armed as a rail. If price already exceeded the required displacement when it became knowable, that rail is consumed without a hindsight event.
Each confirmed bar compares the Close or Wick probe with both rails. Distance beyond a rail is divided by ATR and must meet Minimum Break Displacement. On a two-sided outside bar, the larger normalized wick defines one event. The first event sets bias; a same-direction event is BOS. A counter-event freezes break rail, invalidation rail, displacement, and start bar. Confirmation needs a fresh rail and second break in the candidate direction. Invalidation or expiry ends the candidate. The corridor shows bullish, bearish, pending, or neutral state; early bars stay neutral.
How Multiple Indicators Work Together
This is one dependent state model, not a mashup. Pivot confirmation supplies stable rails; otherwise levels move while tested. ATR displacement separates a tiny overrun from a range-scaled break. The ordered state machine consumes those qualified breaks; otherwise crossings remain a label stream. The corridor encodes the resulting state instead of adding an unrelated signal.
Trading Ideas and Insights
Read BOS as evidence that price cleared a rail with the established bias, not as an entry command. Violet marks a candidate; amber shows why it ended. A wide corridor requires a larger absolute move. Apply separate risk, liquidity, and execution rules: the map does not select stops, size positions, or forecast events.
Unique Aspects
The contribution is an ordered lifecycle. Rails arm only when knowable, each fires once, a counter-break stays provisional, and a second newly armed break is required before bias changes. Invalidation level and age limit freeze at candidate start, so later pivots cannot rewrite the test. One corridor carries bias and transition while labels, wash, bar colors, and table remain optional. This is more than a renamed fractal plot.
How to Use
Begin with Close and default pivots, then check swing density for the market and timeframe. Read rails first: BOS continues state, P-CH opens a candidate, and SHIFT completes the two-break transition. HH/HL locations are revealed after the right-bar delay, not known on their historical bars. Use BOS and shift alerts only within an existing process.
Customization
Pivot Left/Right Bars control granularity and delay: smaller values add noise; larger values add lag. Close requires settlement beyond a rail. Wick uses extremes and resolves outside bars by larger excursion. Minimum Break Displacement sets ATR clearance; Candidate Expiry limits age. Corridor, labels, wash, bar colors, and dashboard are independently configurable.
Assumptions and Limitations
Pivots need future bars for confirmation, so markers appear on pivot bars only after the right-side delay; breaks and shifts remain on confirmation bars. Probes move live, but state and alerts require bar close. ATR and pivot settings are market-sensitive. Gaps can jump rails, Wick mode reduces an outside bar to one event, and chop can repeat candidates. The model reads chart prices, not order flow, news, higher timeframes, or execution quality. A shift is an ordered event, not a guaranteed reversal or profitable trade.
Conclusion
The map turns delayed pivots and breaks into an auditable sequence: location, one-use break, provisional counter-break, then confirmation or invalidation. It provides structural context; interpretation and risk remain with the user.
Indicator

Khabib Takedown Fractal Nest Breakdown ViprasolKhabib Takedown — Fractal Nest Breakdown 🤼
CONCEPT
This tool looks for SELF-SIMILARITY in a decline: a big bearish leg (lower high -> lower low)
with a smaller bearish leg nested inside it that is a scaled copy — same shape, a fraction of
the size. When the small "fractal" completes in the direction of the big one (a break of the
last low), the structure grounds price -> SHORT. It is a fractal-echo measurement, not a plain
lower-low. The nesting ratio between the small leg and the big leg is the core filter.
HOW IT DETECTS
- Swings are found with confirmed pivot highs/lows (left/right bar lookback) and chained into a
lightweight zigzag.
- The tool reads the last four alternating swings (high, low, high, low).
- Big leg = first high minus first low; small leg = second high minus second low.
- A valid nest requires: lower high and lower low (bearish structure); big leg >= (Min big x ATR);
small leg positive; and the nesting ratio (small/big) inside the band .
- The signal fires when price closes below the most recent swing low and the bar closes red.
- ATR (Wilder) scales the minimum big-leg size across instruments and timeframes.
ENTRY / STOP / TARGET
- Entry: SHORT on the close of the confirming (red) bar that breaks the last low.
- Stop: above the second (inner) swing high plus an ATR buffer (default 0.3 x ATR).
- Target: entry minus R multiple x risk (default 2R, where risk = stop distance).
- The script draws the big leg and the nested small leg, plus filled TP and SL zones that extend
to the right until price touches one of them.
NON-REPAINTING
Pivots are only used once fully confirmed (they require the right-side bars), and the signal is
evaluated on bar close (barstate.isconfirmed). Drawings are created on the confirmed bar. The tool
does not repaint completed signals. Live, the forming bar can still change until it closes, as with
any bar-close tool.
FEATURES
- Fractal nesting (scaled self-similar legs), not a plain lower-low break.
- ATR-scaled minimum big-leg requirement and adjustable nesting-ratio band.
- Automatic R-multiple TP and ATR-buffered SL, drawn as zones that extend until hit.
- One-trade-at-a-time option and a minimum-bars-between-signals gap to reduce clustering.
- On-chart status table (open trades) and an alertcondition for automation.
INPUTS OVERVIEW
- Swing pivot left/right bars: swing sensitivity.
- Nesting ratio band (ratLo/ratHi): how close in scale the small leg must be to the big leg.
- Min big leg (x ATR) and ATR length: minimum move and volatility scaling.
- TP R multiple, SL buffer (x ATR), min bars between signals, one-trade-at-a-time.
- Visual colors, label offset, and zone transparency.
HOW TO USE
1. Add to any liquid symbol and timeframe; start with defaults.
2. Tighten the nesting-ratio band for stricter self-similarity, or widen it for more signals.
3. Raise Min big leg (x ATR) to demand larger, cleaner declines before a nest counts.
4. Use the drawn TP/SL zones for context; set an alert on the signal for hands-off monitoring.
5. Combine with your own trend/context read before acting.
LIMITATIONS
- This is a pattern/education tool, not a signal service, and not financial advice.
- Breakdown patterns fail; nesting geometry is a filter, not a guarantee. Losing signals will occur.
- Pivot confirmation adds inherent lag (it needs bars to the right of a swing to confirm).
- Very choppy or illiquid markets can produce misshapen legs and weak signals.
- Requires user discretion, risk management, and position sizing. No performance is implied.
CREDITS
The name is an inspirational sports homage only; it does not imply any endorsement or affiliation.
ATR uses Wilder's average true range. Pivot/zigzag swing detection uses standard public techniques.
The fractal-nest (scaled self-similar leg) geometry, the detection assembly, and the trade/zone
visualization are original Viprasol work.
Original Viprasol work; no third-party Pine code reused.
Indicator

Tyson Uppercut Compression Spring Breakout (Viprasol)Tyson Uppercut — Compression Spring Breakout 🥊
(The name is an affectionate combat-sports homage — this is an educational pattern tool, not affiliated with or endorsed by any athlete or organization.)
CONCEPT
A spring loaded by VOLATILITY, not by swings. The tool measures the recent bar-range and requires it to be compressed — noticeably tighter than the window before it (energy coiling). Then the uppercut: one wide-range bar that bursts up out of the compression on the close = the release. Distinct from swing-decay coils; this reads raw range contraction directly from the bars.
HOW IT DETECTS
- Compression is measured on CLOSED bars only: the highest high and lowest low over a window (default 10 bars, offset by one bar).
- That compression range must be tight versus the prior, wider window (default: <= 60% of the range over twice the lookback) AND not larger than a set ATR cap.
- Release: the current bar closes above the compression high, its full bar range is at least a set ATR multiple (default 1.3x ATR), and it closes up (close > open).
- All logic runs on bar close (barstate.isconfirmed). An optional dotted live box previews an active compression before any break.
ENTRY / STOP / TARGET
- Entry: on the confirmed release close (long only).
- Stop: below the compression low, minus an ATR buffer.
- Target: entry + R multiple of risk (default 2R, adjustable).
- Drawn as a solid compression box plus an entry line and filled TP/SL zones that extend right until price touches one; the hit side thickens.
NON-REPAINTING
Compression is read from already-closed bars (a one-bar offset is used), and the release is confirmed on the bar close. A printed signal does not move or disappear afterward. The live dotted preview is informational only and is not a signal.
KEY FEATURES
- Volatility-compression detection from raw range, with an ATR height cap to avoid oversized "boxes".
- Release requires a genuinely wide breakout bar, not just a marginal close.
- Optional live compression preview; option to hide new setups while a trade is active.
- Filled, extend-until-hit TP/SL zones and an on-chart status table (open trades). Alert condition included.
INPUTS OVERVIEW
- The spring: compression window (bars), tightness fraction vs prior window, max compression height (x ATR), release bar range (x ATR), ATR length.
- The knockout: TP as R multiple, SL buffer (x ATR), minimum bars between signals, one-trade-at-a-time, hide-setup-while-in-trade.
- Visuals: compression box / entry / TP / SL colors, label offset, zone transparency, show-live toggle.
HOW TO USE
1. Add to a liquid symbol and timeframe; it is fully overlay-based.
2. Set the compression window and tightness fraction to define how coiled the range must be.
3. Raise the release ATR multiple to demand a stronger breakout bar.
4. Watch the live dotted box to anticipate setups, and study the TP/SL zones on your instrument.
5. Optionally create an alert from the built-in condition.
LIMITATIONS (read this)
- This is a pattern/education tool, not a signal service and not financial advice. It does not predict the future.
- Compression breakouts frequently fail or reverse (false breakouts are common), especially in ranging markets.
- It is long-only by design; it does not trade downside releases.
- Range readings depend on the chosen windows; different settings can materially change what counts as "compressed".
- Results depend heavily on your inputs, instrument, and timeframe. Always use your own risk management and discretion.
CREDITS
ATR uses Wilder's Average True Range. Highest/lowest range measurement uses standard public functions (ta.highest / ta.lowest). The raw-range compression-and-release detection and the trade-zone visualization are original Viprasol design.
Original Viprasol work; no third-party Pine code reused.
Indicator

Candlestick Edge Auto-Preset MTF Self-CalibratingCandlestick Edge only fires a candlestick pattern when it is "rightly placed" — confirmed by a higher-timeframe trend AND by where price sits in the developing volume profile. Then it does what most pattern tools don't: it forward-tests every signal and reports the MEASURED edge per pattern, so you read realized performance instead of a marketing claim.
WHY THIS IS ONE TOOL (not a bundle)
The parts answer one question about one candle: "is this pattern in a place that has historically paid, and does it beat a coin-flip here?"
PATTERN detection says WHAT printed (24 classic candlestick patterns).
HTF ALIGNMENT says whether the bigger trend agrees.
VOLUME-PROFILE POSITIONING says WHERE it printed — reversals only at value-area edges, naked POC, HVN support/resistance, or liquidity sweeps; continuations only through low-volume voids or on a value breakout.
The CALIBRATION SPINE forward-resolves each signal with a triple barrier and reports Hit% vs a matched Base% (Edge) with a Wilson confidence interval, so a placed-and-confirmed pattern can be told apart from a small-sample fluke.
One pattern substrate, one location read, one calibration spine.
MEASUREMENT (the differentiator)
Each signal opens at close with target = ±TP·ATR, stop = ∓SL·ATR, over a fixed horizon. The first barrier touched decides win/loss (same-bar tie counts as the stop — conservative). Base% is the unconditional same-barrier win-rate for that direction. Edge = Hit% − Base%; a "*" marks rows whose Wilson 95% lower bound clears the base rate. A leave-one-out row prices each filter's marginal contribution, and a footer lists only the patterns that are green AND have enough samples to trust in the current configuration.
AUTO PRESET (default on)
Candlestick edges are timeframe-specific. Auto Preset reads the chart's timeframe and switches on the pattern subset plus higher-timeframe distance that performed best for that timeframe in the author's study of NSE index futures, and forces the two filters on. Turn it OFF for full manual research mode: all 24 patterns selectable, filters and HTF distance (3x / 5x / 15x / custom) under your control. Nothing is ever removed — the preset only curates which patterns are active by default per timeframe.
HOW TO USE
Leave Auto Preset on and read the labelled signals (teal = bullish, red = bearish, each tagged with the pattern name). Open "Show scoreboard" to see measured Edge per pattern — trust the EDGE column and the "*", never a raw hit-rate. Best behaviour is on intraday timeframes (1H and below).
ORIGINALITY
Standard techniques are credited below. What is original is the combination: a location-gated pattern engine whose every signal is forward-calibrated, a timeframe-adaptive auto-preset, a leave-one-out filter attribution, and an auto-surfaced tradeable set — measured edge, not asserted.
NON-REPAINT
Signals open on confirmed bars; triple-barrier outcomes resolve on bars AFTER the trigger; all higher-timeframe / lower-timeframe / prior-day-POC requests use lookahead_off and confirmed intrabars. Pivots used by sweeps confirm first.
DATA & MARKETS
Runs on any symbol that reports volume; the developing profile needs volume to be meaningful. Defaults are tuned for intraday index futures. On the Enhanced data tier the delta read uses intrabar aggregation (richer on paid plans) and auto-falls-back to an OHLCV proxy when intrabars aren't served — safe to leave on for any plan.
CONCEPT CREDITS (methods operationalized — original Pine re-derivations)
Candlestick patterns — Nison; pattern-performance framing per Bulkowski
Market / auction profile, POC / Value Area — Steidlmayer; Dalton
Bulk Volume Classification — Easley, Lopez de Prado & O'Hara (2012)
Triple-barrier labelling — Lopez de Prado
Wilson score interval — Wilson (1927)
HONESTY / LIMITS
The profile is an ATR-binned developing session profile (not tick POC). Delta is an estimate (proxy or intrabar reconstruction), not true bid/ask. Reported edge is context measured on loaded history — not a prediction or a promise. The preset defaults were tuned on one instrument over a recent window, so treat them as a well-measured hypothesis, not proven alpha.
Educational tool. Not financial advice — you alone are responsible for your trading decisions. Indicator

Bedaiwi's Smart PivotsBedaiwi's Smart Pivots is a three-level market-structure indicator that classifies price turning points as Minor, Intermediate, and Major highs and lows.
HOW IT WORKS
Minor Pivots
A Minor High is confirmed when the middle bar of a three-bar formation has a high that is strictly higher than the highs immediately before and after it.
A Minor Low is confirmed when the middle bar has a low that is strictly lower than the lows immediately before and after it.
Equal highs and equal lows are not treated as Minor pivots.
Intermediate Pivots
Intermediate pivots are derived from confirmed sequences of Minor pivots.
An Intermediate High is identified when a higher Minor High is followed by a lower Minor High.
An Intermediate Low is identified when a lower Minor Low is followed by a higher Minor Low.
Major Pivots
Major pivots apply the same hierarchical logic to confirmed Intermediate pivots.
A Major High is identified when a higher Intermediate High is followed by a lower Intermediate High.
A Major Low is identified when a lower Intermediate Low is followed by a higher Intermediate Low.
SYMBOLS AND COLORS
- Red diamond: Intermediate High
- Green diamond: Intermediate Low
- Red exclamation mark: Major High
- Green exclamation mark: Major Low
Optional Minor pivots use the same High and Low color settings.
When the replacement option is enabled, an Intermediate symbol is removed and replaced with an exclamation mark if the same point is later promoted to Major status.
HISTORICAL PLOTTING AND CONFIRMATION DELAY
Pivot identification requires subsequent price information.
A Minor pivot is confirmed only after the following bar closes. Intermediate and Major pivots require additional confirmed pivot sequences, so their confirmation occurs later.
After confirmation, the indicator places the symbol on the historical bar where the relevant high or low occurred. Therefore, a symbol displayed on an earlier bar was not necessarily available in real time on that bar.
Historical placement is used only to show the actual location of the confirmed turning point. It should not be interpreted as a signal that was known on the historical pivot bar.
SETTINGS
Users can:
- Show or hide Minor pivots
- Show or hide Intermediate pivots
- Show or hide Major pivots
- Replace an Intermediate symbol when it becomes a Major pivot
- Customize High and Low pivot colors
PRACTICAL USE
Smart Pivots can help users:
- Study market structure
- Identify significant historical swing highs and lows
- Separate short-term fluctuations from higher-level price structure
- Review possible support and resistance areas
- Add context to discretionary price-action analysis
LIMITATIONS
Smart Pivots is an analytical indicator. It does not place trading orders and does not define entries, exits, stop-loss levels, profit targets, position sizing, or expected returns.
Pivot confirmation is delayed by design because later price action is required. Results may vary between symbols, timeframes, sessions, and data feeds.
The indicator does not identify final market tops or bottoms with certainty. Historical observations do not guarantee future market behavior.
This script is provided for research and educational purposes only. It is not financial or investment advice. Indicator

Liquidity Structure Framework [PakunFX]Liquidity Sequence Framework
Liquidity Sequence Framework (LSF) is a market structure analysis indicator designed to visualize the progression of liquidity events, structure shifts, and Fair Value Gaps (FVGs) within a single analytical framework.
Instead of focusing on individual signals, the indicator organizes multiple market events into a sequential process, helping traders observe how price structure develops over time. The script combines swing structure, liquidity sweeps, trend filtering, and Fair Value Gap detection into a unified charting tool.
Features
External and Internal Swing Structure detection
Liquidity Sweep identification (SSL / BSL)
Bullish and Bearish Structure Shift detection
Automatic Fair Value Gap (FVG) detection
EMA-based trend filter
Premium / Discount (Equilibrium) filter
Configurable setup conditions
Visual sequence tracking with alerts
How it Works
The indicator monitors market structure using external and internal swing highs and lows. When liquidity is swept beyond a previous swing level, a new sequence begins. The script then tracks whether price confirms a structure shift and subsequently forms a Fair Value Gap within a configurable sequence window.
Trend filtering can be applied using Fast and Slow EMA conditions, while optional Premium / Discount and Fair Value Gap requirements allow users to customize how potential setups are displayed.
Display Elements
External Swing High / Low
Internal Swing High / Low
Liquidity Sweep markers (SSL / BSL)
Structure Shift markers
Active Fair Value Gap zones
Fast and Slow EMA
Equilibrium level
Setup markers
Alerts
Alerts are available for:
Liquidity Sweep
Bullish Structure Shift
Bearish Structure Shift
Bullish Sequence Setup
Bearish Sequence Setup
These alerts are intended to notify users when predefined analytical conditions are detected.
Notes
Liquidity Sequence Framework is designed as a market analysis tool. It visualizes structural relationships between liquidity events and price development but does not generate trading recommendations or predict future market direction.
Disclaimer
This script is provided for educational and research purposes only.
All calculations are based on historical price data. The displayed structures, Fair Value Gaps, and sequence conditions are intended to support chart analysis and should not be interpreted as guarantees of future market behavior or trading performance.
Indicator

Indicator

Rejection Block Matrix [ZOM]Rejection Block Matrix maps supply and demand rejection blocks from failed swing sweeps and confirmed pivot wick rejection.
What it shows:
- Demand and supply blocks built from wick/body rejection structure
- Failed high/low sweep blocks for tape-reading style reversal context
- Tested and broken block state tracking, with broken context hidden by default to reduce clutter
- Reclaim/rejection marks when price retests a live block
- A compact dashboard showing visible demand/supply blocks, tested count, latest source, bias, and quality
How I use it:
The blocks are structure zones, not automatic entries. I use them to see where price rejected prior liquidity, then watch how later candles behave when they revisit those blocks. It is especially useful on liquid intraday markets such as ES, NQ, crypto, and major FX pairs.
Open-source script. Educational tool only; not financial advice. Indicator

Liquidity Vault [Dojo La Nuit]Liquidity Vault maps resting liquidity on your chart as clean horizontal levels and tracks what happens to them — without any buy/sell signals or predictions. It is a pure visualization tool for traders who read price around liquidity.
HOW IT WORKS
The script detects swing pivots and clusters nearby highs (and nearby lows) into single liquidity zones using an ATR-based tolerance, so the levels travel across instruments without re-tuning. Each zone gets a strength score from 0 to 100 built from three factors:
• Touches — how many times price reacted at the level
• Freshness — recent levels score higher and decay over time (configurable half-life)
• Volume — relative volume that accumulated at the level
HOW TO READ IT
• Red lines = sell-side liquidity (resting above price)
• Green lines = buy-side liquidity (resting below price)
• Opacity = strength: the stronger the zone, the more solid the line
• Dimmed, dotted lines = zones that have already been swept (price wicked through the level). They are kept as context, not removed.
SETTINGS
• Zone Detection — adaptive or fixed pivot length, clustering tolerance, lookback, max live zones
• Zone Strength — minimum score to display, freshness half-life, volume weighting on/off
• Visuals — theme (auto/dark/light), strength-based intensity, keep swept zones, line width
• Colors — fully customizable buy-side / sell-side colors
NOTES
Strength is shown through line opacity by design, to keep the chart minimal. Zones are recalculated on confirmed bars. This tool highlights where liquidity rests and when it gets taken — it does not generate entries, targets or signals.
This indicator is for educational and analytical purposes only. It is not financial advice. Always do your own research and manage your own risk.
─────────────────────────
🌙 LIQUIDITY VAULT — Dojo La Nuit
Liquidity Vault mostra la liquidità presente sul grafico come livelli orizzontali puliti e ne traccia l'evoluzione, senza segnali di acquisto/vendita e senza previsioni. È uno strumento puramente visivo per chi opera attorno alla liquidità.
COME FUNZIONA
Lo script individua i pivot di mercato e raggruppa i massimi (e i minimi) vicini in un'unica zona di liquidità tramite una tolleranza basata sull'ATR, così i livelli funzionano su strumenti diversi senza dover ritoccare i parametri. A ogni zona viene assegnato un punteggio di forza da 0 a 100, calcolato su tre fattori:
• Tocchi — quante volte il prezzo ha reagito al livello
• Freschezza — i livelli recenti pesano di più e si attenuano nel tempo (half-life configurabile)
• Volume — il volume relativo accumulato sul livello
COME SI LEGGE
• Linee rosse = liquidità sell-side (sopra il prezzo)
• Linee verdi = liquidità buy-side (sotto il prezzo)
• Opacità = forza: più la zona è forte, più la linea è piena
• Linee attenuate e puntinate = zone già spazzate (il prezzo ha bucato il livello con un'ombra). Restano come contesto, non vengono rimosse.
IMPOSTAZIONI
• Rilevamento zone — pivot adattivo o fisso, tolleranza di clustering, lookback, numero massimo di zone attive
• Forza zone — punteggio minimo da mostrare, half-life della freschezza, peso del volume on/off
• Visual — tema (auto/scuro/chiaro), intensità in base alla forza, mantieni zone spazzate, spessore linea
• Colori — colori buy-side / sell-side completamente personalizzabili
NOTE
La forza è rappresentata tramite l'opacità della linea, per scelta, per mantenere il grafico minimale. Le zone vengono ricalcolate sulle barre confermate. Lo strumento evidenzia dove si trova la liquidità e quando viene presa: non genera entrate, target o segnali.
Questo indicatore è a scopo puramente didattico e di analisi. Non è consulenza finanziaria. Fai sempre le tue valutazioni e gestisci il tuo rischio. Indicator

Elaris Absorption Zones ProElaris Absorption Zones Pro
Elaris Absorption Zones Pro is an advanced price-action and volume analysis indicator designed to identify potential absorption events where aggressive market orders are absorbed by opposing passive liquidity.
The indicator focuses on situations where price attempts to break an important level but fails to continue, suggesting that significant limit orders may be absorbing the incoming buying or selling pressure.
Unlike traditional breakout indicators that look for continuation, this tool is designed to highlight failed auctions, rejection events, and potential liquidity absorption zones that may lead to reversals, pullbacks, or reduced directional momentum.
---
What Is Absorption?
Absorption occurs when aggressive participants repeatedly attempt to push price through a level using market orders, but opposing limit orders absorb that pressure and prevent further movement.
Examples include:
• Buyers aggressively pushing above resistance but failing to achieve continuation.
• Sellers aggressively pushing below support but failing to achieve continuation.
• Large rejection wicks appearing after a breakout attempt.
• High volume with limited price progress (Effort vs Result imbalance).
These conditions can indicate the presence of significant liquidity providers defending a price area.
---
How The Indicator Works
The indicator combines multiple confirmation layers:
Market Structure Analysis
The script monitors:
• Confirmed swing highs and swing lows
• Recent trading ranges
• Failed breakout attempts
Price must first attempt to break an important structural level before absorption conditions can be evaluated.
Rejection Analysis
The indicator evaluates:
• Upper wick size
• Lower wick size
• Body-to-range relationship
Large rejection wicks combined with small candle bodies may indicate strong opposing liquidity.
Volume Confirmation
Volume is evaluated using:
• Relative volume
• Volume moving averages
• Optional volume Z-score analysis
This helps identify situations where participation is elevated compared to normal market activity.
Effort vs Result Model
One of the core components of the indicator is Effort vs Result analysis.
High volume combined with poor directional progress can indicate that incoming orders are being absorbed rather than successfully moving the market.
Absorption Scoring
Every detected signal receives a strength score based on:
• Rejection quality
• Relative volume
• Candle efficiency
Higher scores generally indicate stronger absorption characteristics.
---
Features
✔ Bullish absorption detection
✔ Bearish absorption detection
✔ Failed breakout recognition
✔ Confirmed swing structure analysis
✔ Range breakout absorption detection
✔ Relative volume filters
✔ Volume Z-score filtering
✔ Effort vs Result analysis
✔ Absorption strength scoring
✔ Optional absorption zones
✔ Zone retest detection
✔ Dashboard with live metrics
✔ Alert conditions
✔ Non-repainting confirmation mode
---
Bullish Absorption
Bullish absorption may occur when:
1. Price breaks below support.
2. Sellers attempt continuation.
3. Price quickly returns above the level.
4. A strong lower rejection wick forms.
5. Volume confirms elevated participation.
This may suggest that passive buyers absorbed the selling pressure.
---
Bearish Absorption
Bearish absorption may occur when:
1. Price breaks above resistance.
2. Buyers attempt continuation.
3. Price closes back below the level.
4. A strong upper rejection wick forms.
5. Volume confirms elevated participation.
This may suggest that passive sellers absorbed the buying pressure.
---
How To Use
Many traders use absorption signals as:
• Early reversal warnings
• Liquidity sweep confirmations
• Support and resistance confirmation
• Market structure confirmation
• Trade management tools
For best results, consider combining absorption signals with:
• Trend analysis
• Market structure
• Higher timeframe context
• Risk management rules
• Additional confirmation tools
---
Non-Repainting
When "Confirm Only After Candle Close" is enabled, signals are generated only after a candle has fully closed.
Confirmed swing levels are based on completed pivot structures.
This helps reduce signal instability and prevents intrabar repainting behavior.
---
Important Notes
This indicator does not use Level II, order book, footprint, or exchange matching engine data.
Because TradingView Pine Script does not have direct access to actual market order flow, absorption is estimated using a combination of price action, rejection behavior, volume analysis, and structural breakout failure characteristics.
As with all trading tools, signals should be used as part of a complete trading plan and not as standalone buy or sell recommendations.
Indicator

SXA: Super Xtation Amplitude | MTF FrameworkSXA (Super Xtation Amplitude) is a multi-timeframe market positioning framework designed to provide a complete visual overview of price location within the broader market structure.
Rather than focusing on entry signals, SXA combines trend context, volatility, session activity, anchored VWAPs, prior-day reference levels, Fibonacci projections, and higher-timeframe moving averages into a single environment. The objective is to help traders understand where price is currently trading relative to statistically and structurally significant areas.
The indicator was built around a simple principle:
"Price behaves differently depending on where it is located within the market."
By integrating multiple forms of context into one view, SXA allows traders to quickly identify premium and discount zones, trend alignment, session-driven liquidity areas, and potential reaction levels without switching between multiple indicators.
FEATURES
• Smart Trend Engine
Multi-timeframe moving average framework designed to visualize short, intermediate, and macro directional bias.
• Dynamic Trend Clouds
Visual cloud structures help identify trend alignment and potential transition zones between bullish and bearish conditions.
• Higher Timeframe Context
Daily 50 SMA and 200 SMA provide broader market structure and long-term directional references.
• Prior Day Reference Levels
Automatic plotting of previous day's Open, High, Low, and Close.
• Fibonacci Expansion Grid
Extended Fibonacci projections derived from the previous day's range to identify potential reaction zones and liquidity targets.
• Anchored Session VWAPs
Includes:
* Daily VWAP
* European Session VWAP
* Pre-New York VWAP
* New York Session VWAP
* Post-European Session VWAP
These levels provide institutional-style references for price acceptance and value.
• Weekly Structure Levels
Dynamic weekly Open, High, and Low levels update in real time throughout the trading week.
• Session Mapping
Visual session boxes highlight important market periods, including the Asian session and Pre-New York range.
INTENDED USE
SXA is designed as a contextual decision-support tool rather than a standalone trading system.
The indicator can be used to:
* Assess overall market positioning.
* Identify trend alignment across multiple timeframes.
* Locate potential support and resistance zones.
* Track session-driven liquidity.
* Monitor volatility expansion and contraction.
* Build discretionary trade narratives.
* Enhance existing trading systems.
SXA does not generate buy or sell recommendations. Instead, it seeks to answer a more fundamental question:
"Where is price currently located within the broader market landscape?"
By providing that context at a glance, traders can make more informed decisions while reducing chart clutter and indicator overload.
Created by @Peter_n_n
Indicator

CDC Action Zone+TrueMarket Mean (BTC Focus) By Beckte## Overview
This indicator is a macro-focused trend following and cyclical value tracking tool, specifically designed for Bitcoin (BTC) long-term investors. It combines the momentum logic of the well-known **CDC Action Zone** with a mathematical simulation of the On-Chain **Realized Price** model.
The main purpose of this script is to identify high-probability, macro-generational accumulation zones while filtering out early or false bottom signals during aggressive downtrends.
---
## Key Components
### 1. CDC Action Zone (Trend & Momentum)
Based on the classic EMA 12 and EMA 26 crossover logic, this component colors the candlesticks to reflect the market's current momentum:
- 🟢 **Bright Green:** Strong Bullish Momentum (Hold / Trend is up)
- 🔵 **Blue:** Early Bullish Sign / Potential Reversal (Watch closely or start accumulation)
- 🔴 **Bright Red:** Strong Bearish Momentum (Stay in cash / Wait)
- 🟠 **Orange:** Early Bearish Sign / Technical Rebound in Bear Market
### 2. Realized Price Proxy (The Cyclical Floor)
In on-chain analysis, the **Realized Price** represents the average cost basis of all aggregate Bitcoin supply moving on-network, without omitting lost or dormant coins.
Since native on-chain data requires external API subscriptions on TradingView, this script utilizes a specialized long-term statistical proxy (**730-day SMA with custom logarithmic offsets**) to simulate this ultimate cyclical floor. Historically, major bear market bottoms (2015, 2018, 2022) have strictly formed near or slightly below this baseline.
---
## How it Works & Entry Strategy (The Anti-Doi Mechanism)
To avoid catching falling knives during a capitulation event, this script enforces a strict double-confirmation rule:
1. **Value Zone Check:** The current market price must correct down to within **10% of the Realized Price Proxy** (the light blue line). This ensures you are buying Bitcoin at an extreme discount relative to historical network value.
2. **Momentum Trigger:** Once inside the Value Zone, the script waits for the **CDC Action Zone to flip from Red/Orange to Blue or Green**.
When both conditions are met, a **"REALIZED BUY"** label will plot beneath the candlestick, signaling a safe, low-risk entry spot with a highly compressed downside.
---
## Disclaimer & Credits
- **Credits:** The trend-following logic is inspired by the legendary "CDC Action Zone" concept popularized by Piriya Sambandaraksa. The valuation floor is based on the Realized Price on-chain metric conceptualized by the crypto-asset research community.
- **Disclaimer:** This indicator is designed for high-timeframe spot accumulation (recommended: 1D or 4H charts). It is not a financial advisory tool or a guarantee of future profits. Past performance does not indicate future results. Always practice proper risk management. Indicator
