MSnR QM LevelMSnR QM Level
This script detects Quasimodo (QM) levels from the close prices of consecutive candles and draws
them as horizontal support and resistance lines.
A QM Level forms when price creates a turning point, breaks it, builds a second turning point on
the other side, and then breaks that too. What is left behind is the price of the original turning
point, which is where liquidity was trapped and where the market often reacts again.
The result is a structural map of QM levels across the scan window, drawn as horizontal lines that
extend to the right from the candle that set the price.
WHAT MAKES THIS DIFFERENT
1. Strict four step detection.
Most QM tools look for swing highs and swing lows relative to some lookback period. This script
uses a precise four step sequence built entirely from consecutive candle pairs. Every step must
complete before a QM Level is confirmed, which eliminates the vague heuristics that plague swing
based detection.
2. The level price is the CLOSE, not the wick.
Every level sits at the close of the candle that set it. Closes are where the market actually
agreed on a price, which is why a close through a level counts as a break here while a wick through
it does not.
3. Every level is checked for uniqueness.
Duplicate prices within a small tolerance are not drawn twice. If two QM Levels land on the same
price, only one line appears. This keeps the chart clean without losing any information.
4. Detection reads confirmed candles only.
The running candle is never used. Every detection step requires a fully closed candle, and the scan
starts one bar behind the latest bar. Nothing on the chart changes while a candle is still open.
THE TWO QM TYPES
A candle is Green when close is greater than open and Red when close is less than open. A Doji,
where close equals open, is neither and forms no level. Only fully closed candles are read.
Buy QM (support)
Step 1. Find a V Level: a Red candle followed by a Green candle. The V Level price is the close of
the Red candle.
Step 2. Find the earliest Red candle after the V Level that closes below the V Level price. This is
the V Breakdown.
Step 3. Between the V Level and the V Breakdown, find an A Level: a Green candle followed by a Red
candle. Use the one nearest the V Breakdown if several exist. The A Level price is the close of the
Green candle.
Step 4. After the V Breakdown, find any Green candle that closes above the A Level price. The A
Level is now broken upward.
If all four steps confirm, the V Level price becomes the Buy QM Level. The line is drawn at that
price and extends to the right.
Sell QM (resistance)
Step 1. Find an A Level: a Green candle followed by a Red candle. The A Level price is the close of
the Green candle.
Step 2. Find the earliest Green candle after the A Level that closes above the A Level price. This
is the A Breakout.
Step 3. Between the A Level and the A Breakout, find a V Level: a Red candle followed by a Green
candle. Use the one nearest the A Breakout if several exist. The V Level price is the close of the
Red candle.
Step 4. After the A Breakout, find any Red candle that closes below the V Level price. The V Level
is now broken downward.
If all four steps confirm, the A Level price becomes the Sell QM Level. The line is drawn at that
price and extends to the right.
In both cases the QM Level marks the price of the ORIGINAL turning point: the one that was broken,
rebuilt from the other side, and then had its counterpart broken as well. That is the price where
liquidity was trapped, and it is the price the script watches.
READING THE CHART
Color tells you the side:
- Green line and green label: Buy QM. This level sits below price as support.
- Red line and red label: Sell QM. This level sits above price as resistance.
Each line starts at the candle that set its price and extends to the right, so you can see how
price has behaved around it since. The label sits at that same candle, below the line for a Buy QM
and above it for a Sell QM, so it never covers the line itself.
A summary table in the corner counts how many Buy QM and Sell QM levels were found in the current
scan window, including those that are hidden by a toggle. The table always reflects what the market
actually printed rather than what is currently switched on.
SETTINGS
Scan
- Scan Length: how many closed candles are scanned backwards from the latest bar. Every QM Level
inside that window is drawn. The running candle is always excluded.
Level Types
- An individual switch for Buy QM and Sell QM. Hiding one side is useful when you only want to
see levels in one direction.
Style
- Sell QM Color and Buy QM Color.
Labels
- Show Labels, Label Offset in ticks, and Label Size. The offset is measured in ticks, so a value
that looks right on one symbol may need adjusting on another.
Summary Table
- Show, position and size of the corner table.
ALERTS
Two alert conditions are available: Buy QM and Sell QM.
Each message carries the level type, the symbol, the timeframe and the closing price. The same
messages are also sent through the alert function, so the "Any alert() function call" alert type
can deliver both through a single alert.
All alerts are evaluated only after a candle has fully closed.
An alert fires when the four step QM sequence completes on the latest closed candle. Because
completion requires a breakout of the inner level, these alerts do not fire on every bar; they fire
only when price actually confirms a new QM structure.
REPAINTING
This script does not repaint.
- Detection reads confirmed candles only. The scan starts one bar behind the latest bar, so the
candle that is still forming is never part of any calculation.
- Alert signals can only become true once a candle has finished. Price moving inside an open candle
cannot make a signal appear and then disappear.
- Levels are rebuilt on the last bar from confirmed history. A level's price never moves. Once
drawn, nothing shifts backwards.
When you create an alert, PulseWire may show a caution banner saying the indicator can repaint.
That banner appears automatically for any script that uses the built in bar state variables, no
matter how they are used, because the platform cannot check the intent behind them. This script
uses them for the opposite purpose: one of them is what restricts every signal to bar close, and
the other is what redraws the levels efficiently on the final bar. Choosing "Once Per Bar Close"
when creating the alert is still recommended.
NOTES AND LIMITATIONS
- A QM Level requires a specific four step sequence to complete. That makes them less common than
plain A and V Levels, so stretches with few or no QM Levels are normal and expected.
- PulseWire caps drawings at 500 lines and 500 labels. A very long Scan Length will hit that
ceiling and the oldest drawings will be dropped. The default is chosen to stay well inside it.
- The label offset is measured in ticks, and a tick is worth a very different amount on a crypto
pair than on a forex pair. Expect to adjust it when you move between symbols.
- Level prices come from closes, so a level can sit in the middle of a long wick. That is
deliberate, not a bug.
- Duplicate prices within a tolerance of two ticks are drawn only once. If two QM Levels land on
nearly the same price, you see one line instead of two stacked on top of each other.
- Detection is purely structural. It reports where QM Levels are and which side they sit on. It
does not rank them by strength, measure what happened afterwards, or produce entries, targets or
stops.
HOW TO USE IT
A QM Level marks a price where price created a turning point, broke it, built the opposite turning
point, and then broke that too. The original turning point is where one side was trapped, and price
returning to that price often produces a reaction.
Buy QM Levels below price act as support. Sell QM Levels above price act as resistance. When
several levels cluster near the same price, the area is often more significant than any single
level, since separate structures agreeing on one price is what a real zone looks like.
These are reference levels, not entry signals. Use them alongside higher timeframe structure, and
apply your own confirmation and risk management.
DISCLAIMER
This indicator is a level detection tool. It is not financial advice and it makes no claim about
profitability. Trading involves risk. Always apply your own analysis and risk management. Indicator

Quasimodo Reversal Zones [AGPro Series]Quasimodo Reversal Zones
🔹 OVERVIEW
Quasimodo Reversal Zones is a focused Smart Money Concepts tool built around one specific idea: the Quasimodo reversal pattern.
Instead of turning the chart into a crowded market-structure dashboard, this script identifies confirmed QM swing sequences, marks the original shoulder-derived QM level, projects a clean reaction zone, and tracks the invalidation threshold from the head.
The goal is simple: help traders see where a valid Quasimodo structure formed, where price may revisit the QM level, whether the reaction zone is active, and when the structure has failed.
It is designed as a premium public-free AGPro tool for traders who want a clean, visual, and selective Quasimodo framework without generic signal clutter.
🔹 WHAT MAKES IT DIFFERENT
Most reversal tools try to detect too many patterns at the same time. They often combine double tops, double bottoms, head and shoulders, order blocks, BOS, CHOCH, liquidity sweeps, and support/resistance zones into one heavy overlay.
Quasimodo Reversal Zones stays intentionally narrow.
Its only job is to map Quasimodo reversal structures with quality scoring, reaction-zone tracking, and invalidation logic. This makes the script easier to read, easier to trust visually, and more useful as a dedicated QM layer inside a larger trading workflow.
The script also avoids marking every small pivot as a pattern. A valid QM structure must pass multiple filters:
- confirmed swing sequence,
- meaningful head extension,
- displacement beyond the pullback swing,
- minimum spacing between pivots,
- swing amplitude quality,
- time-balance evaluation,
- optional relative-volume participation.
This gives the tool a more selective and professional feel than simple pivot-label scripts.
🧭 WHY THIS DOES NOT OVERLAP WITH OTHER AGPRO TOOLS
This script was designed to stay in a very specific lane inside the AGPro Series catalog.
It is not a broad reversal-pattern scanner.
It is not a BOS or CHOCH dashboard.
It is not an order block tool.
It is not a generic support/resistance zone engine.
It is not a liquidity sweep module.
Its focus is the Quasimodo pattern only.
The visual logic is built around four QM-specific components:
- the shoulder,
- the head,
- the QM level,
- the reaction zone with invalidation.
That narrow structure keeps the tool differentiated from broader AGPro pattern, breakout, structure, and zone-based scripts while still giving traders a strong SMC-style visual experience.
⚙️ METHODOLOGY
The script uses confirmed swing pivots to build a four-step Quasimodo sequence.
For a bullish QM structure, the script looks for:
- an initial swing low,
- a swing high,
- a lower low that forms the head,
- a higher high that confirms the sequence break.
For a bearish QM structure, the script looks for:
- an initial swing high,
- a swing low,
- a higher high that forms the head,
- a lower low that confirms the sequence break.
After the sequence is confirmed, the original shoulder becomes the QM level. A compact ATR-based reaction box is projected around that level. The head becomes the invalidation reference, with optional ATR padding.
The quality score is built from:
- head extension strength,
- sequence-break displacement,
- spacing between pivots,
- average swing size,
- internal time balance,
- optional relative-volume confirmation.
Only structures that meet the selected score threshold are drawn on the chart.
📊 PANEL
The AGPro panel summarizes the latest valid QM structure in a compact format.
Panel fields:
- Pattern Side
- Structure Quality
- Zone Status
- Score
The first panel row follows the AGPro standard: one merged blue header row containing only the script name.
Panel location, panel theme, and panel font size are adjustable from settings. The default panel size is Normal for a clean publication-ready layout.
🎛️ KEY INPUTS
Swing Pivot Length
Controls how strict the confirmed swing structure should be. Higher values create fewer but cleaner patterns.
ATR Normalization Length
Used to normalize zone width, head extension, sequence displacement, label offset, and invalidation padding.
Minimum Head Extension
Defines how far the head must extend beyond the original shoulder before the sequence can qualify.
Minimum Sequence Break
Defines how strongly the final swing must break beyond the pullback level.
Minimum Pattern Score
Filters out weaker QM sequences before they are drawn.
Signal Cooldown Bars
Controls label density and prevents the chart from becoming overloaded on noisy markets.
Reaction Zone Width
Controls the ATR-based thickness of the projected QM reaction box.
Reaction Zone Length
Controls how far the reaction zone projects into the future.
Invalidation Buffer
Adds optional ATR padding beyond the head-based invalidation level.
Maximum Visible QM Zones
Limits how many recent QM zones remain visible on the chart.
Label Font Size and Panel Font Size
Both are adjustable, with Normal as the default setting.
🔍 HOW TO READ IT
Start with the panel.
Pattern Side shows whether the latest valid structure is bullish or bearish.
Structure Quality gives a quick qualitative view of the setup.
Zone Status shows whether the reaction zone is waiting, active, confirmed, or invalidated.
Score shows the numerical strength of the latest accepted QM pattern.
On the chart:
- Shoulder marks the original level that later becomes the QM reference.
- Head marks the extension that creates the imbalance.
- QM Level marks the precise shoulder-derived reaction level.
- Reaction Zone shows the area where the QM retest is being tracked.
- Invalidation Line shows where the structure is no longer valid.
- Status Label shows the live state of the latest zone.
The cleanest reads usually come when price returns to the reaction zone after a strong sequence break and then shows a visible response away from the QM level.
🧩 BEST USE CASES
This script is best used for:
- SMC-style Quasimodo analysis,
- swing-based reversal mapping,
- reaction-zone planning,
- invalidation-based structure review,
- higher-timeframe QM context,
- clean chart screenshots for public analysis,
- traders who want one dedicated QM layer instead of a large all-in-one structure scanner.
It can be useful on many markets and timeframes, but the best visual quality usually appears on charts where swings are clear and price action is not excessively compressed.
🧠 VISUAL DESIGN PHILOSOPHY
The visual design is built around clarity, not clutter.
The script uses the AGPro color palette with a restrained premium look:
- blue merged panel header,
- teal bullish structures,
- pink bearish structures,
- gold invalidation or inactive-state emphasis,
- compact labels placed away from candles where possible,
- projected boxes that stay readable without covering the chart.
The chart should not feel empty, but it should also not feel noisy. Labels, zones, and status elements are intentionally controlled with cooldowns, maximum visible zones, adjustable offsets, and configurable font sizes.
The goal is to make the QM story easy to understand at first glance.
🔔 ALERTS
The script includes alerts for important QM events:
- Bullish Quasimodo Sequence
- Bearish Quasimodo Sequence
- QM Reaction Zone Touched
- QM Reaction Confirmed
- QM Pattern Invalidated
These alerts are designed around structure events rather than generic entry messages.
🔹 LIMITATIONS AND TRANSPARENCY
This script uses confirmed pivots, so patterns are confirmed only after enough bars have passed to validate the swing structure.
It is intentionally selective. Some early or aggressive QM ideas may not appear if they fail the pivot, spacing, displacement, or score requirements.
The script is not designed to predict every reversal. It is designed to identify cleaner Quasimodo structures, display the relevant reaction zone, and provide a clear invalidation reference.
It also does not attempt to replace broader market analysis. Trend context, volatility, liquidity conditions, and higher-timeframe structure can still matter.
✅ IDEAL USER
This script is ideal for traders who:
- understand basic SMC and price-action concepts,
- want a clean Quasimodo-specific tool,
- prefer visual structure over signal spam,
- care about invalidation and reaction-zone logic,
- want a focused public-free AGPro tool that does not overlap with broader reversal scanners,
- value a premium chart presentation with adjustable labels, zones, and panel controls.
Quasimodo Reversal Zones is built for traders who want the QM pattern to be visible, structured, and easy to evaluate without adding unnecessary market-structure clutter. Indicator

QML FTB with Quality Score [Malibu]QML FTB with Quality Score
Overview
QML FTB with Quality Score is an open-source market structure indicator designed to detect Quasimodo (QML) reversal formations and highlight potential First Touch Back (FTB) reaction levels after a confirmed break of structure.
The script is built to be selective rather than frequent. Instead of displaying every possible QML pattern, it filters structure through multiple confluence factors and ranks each setup with a normalized Quality Score. The goal is to help traders focus on cleaner and more meaningful reaction zones rather than treating all reversal structures as equal.
What this indicator does
This indicator scans price action for bullish and bearish Quasimodo formations, confirms the related market structure break, and projects the corresponding left-shoulder area as a potential reaction level.
In practical terms, it is a structure-based reversal and reaction-zone tool that can assist with:
- market structure shifts
- support and resistance transitions
- break-of-structure confirmation
- liquidity-driven reversal analysis
- filtered first-touch retest opportunities
Why this indicator can be useful
Raw QML detection can become noisy because many structures may appear valid at first glance, but not all of them carry the same quality. This script attempts to solve that problem by combining pattern detection with context-based filtering.
Instead of only drawing a shape, it asks additional questions:
- Was the structure break strong enough?
- Is momentum aligned?
- Is there RSI divergence?
- Is there Fair Value Gap confluence?
- Was liquidity swept before the reversal?
- Is the level still fresh and untouched?
That layered process is what makes the script more selective and more practical for traders who prefer structured filtering over raw pattern frequency.
How it works
The script uses a ZigZag-style swing engine to track meaningful highs and lows in price structure. Based on those swings, it evaluates whether the sequence forms a valid Quasimodo transition.
Bullish structure:
- price forms a lower low
- price then breaks the prior key high
- the previous shoulder area becomes the projected bullish QML / FTB level
Bearish structure:
- price forms a higher high
- price then breaks the prior key low
- the previous shoulder area becomes the projected bearish QML / FTB level
Once the structure is identified, the setup can be refined through optional confluence filters. The script then calculates a Quality Score and prints the confirmed level only after bar close.
Filtering logic
1) Body Break Filter
This filter requires the break of structure to happen with candle body confirmation rather than wick-only penetration. Its purpose is to reduce weak or cosmetic breaks and focus on clearer structural shifts.
2) Momentum Filter (EMA)
This filter checks whether the setup is aligned with the broader directional bias using an EMA-based trend condition. Bullish setups are generally stronger when price is positioned in bullish momentum context, while bearish setups are generally stronger when price is positioned in bearish momentum context.
3) RSI Divergence Filter
This filter looks for momentum exhaustion. For bullish setups, it checks whether price pushes lower while RSI fails to confirm that weakness. For bearish setups, it checks the opposite. This is the strictest filter and is meant to isolate higher-selectivity reversal conditions.
4) FVG Confluence
This filter checks whether the projected QML level aligns with a Fair Value Gap area. The aim is to add imbalance context and identify zones where inefficient price delivery may support a reaction.
5) Liquidity Sweep Filter
This filter checks whether the head of the QML structure swept prior liquidity before the reversal. It is meant to capture structural traps and stop-hunt style behavior before a turn.
6) Freshness (FTB) Filter
This filter removes levels that have already been touched or used. Its goal is to keep the focus on first-touch reaction opportunities rather than repeatedly tested zones.
Quality Score logic
The script ranks each setup using a normalized Quality Score.
Current score components:
- RSI Divergence: +30
- FVG Confluence: +25
- Liquidity Sweep: +25
- EMA Momentum Alignment: +20
The total score is normalized according to the filters that are currently active, then displayed as a percentage. This allows the indicator to remain usable even when traders prefer a lighter or stricter filter stack.
What it plots on the chart
The indicator can display:
- a thick horizontal QML entry level
- optional dashed ZigZag structure lines
- bullish and bearish QML labels
- a Quality Score percentage
- an additional symbol when RSI divergence is present
The visual design is intentionally simple so the underlying structure remains readable on chart.
Inputs
ZigZag Sensitivity (default: 13)
Controls how sensitive the swing detection is.
- Lower values produce more swing points and more signals, but also more noise.
- Higher values reduce signal frequency and generally improve selectivity, but can introduce more lag.
Body Break Filter (default: true)
Requires structure breaks to happen with body confirmation.
- Usually lowers signal count
- Usually improves reliability
- Best kept enabled in noisier conditions
Momentum Filter / EMA Filter (default: true)
Restricts setups to those aligned with EMA direction.
- Reduces counter-trend signals
- Makes the script more selective
- Generally improves quality in directional markets
EMA Period (default: 50)
Defines the trend filter length.
- Lower values make the filter more responsive
- Higher values make it smoother and slower
RSI Divergence Filter (default: false)
Allows only setups that also show RSI divergence.
- This is the strictest filter
- Strongly reduces signal frequency
- Best used when only higher-selectivity reversal setups are desired
FVG Confluence (default: true)
Requires the level to align with Fair Value Gap context.
- Filters out some otherwise valid patterns
- Can improve contextual quality in imbalanced markets
Liquidity Sweep Filter (default: true)
Requires evidence of liquidity interaction at the head of the structure.
- Helps isolate trap-like reversal conditions
- Adds selectivity around structural extremes
Freshness (FTB) Filter (default: true)
Rejects previously tested levels.
- Keeps the focus on first-touch setups
- Useful for traders who prefer untouched zones
Line Length (bars) (default: 25)
Controls how far the projected QML level is extended to the right.
- This is a visual setting
- It does not change the signal logic
Which settings matter most
The three most important inputs are:
- ZigZag Sensitivity
- Body Break Filter
- Freshness (FTB) Filter
These settings have the biggest impact on how noisy, selective, and practical the final output becomes.
Suggested usage styles
Balanced / default use
For most users, the default settings are the best place to start. They are designed to provide a practical balance between signal frequency and selectivity.
More aggressive use
For traders who want more setups:
- reduce ZigZag Sensitivity toward 8–10
- consider disabling EMA Filter
- consider disabling FVG Confluence
This can increase opportunity count, but it also increases noise and false positives.
More conservative use
For traders who want fewer but stronger setups:
- keep Body Break Filter enabled
- keep Freshness Filter enabled
- enable RSI Divergence Filter
- focus more on higher-score setups, especially 80%+
This creates a much stricter selection process.
Timeframe behavior
This indicator is generally better suited to M15, H1, H4, and Daily charts.
Suggested sensitivity behavior:
- M15 to H1: 13 to 21 is usually more stable
- H4 to Daily: 8 to 13 is often more responsive without becoming overly delayed
Timeframe notes:
- On M1 and M5, low sensitivity settings can produce excessive noise and weak structure breaks.
- In lower timeframes, Body Break confirmation becomes much more important.
- On higher timeframes, very high sensitivity values can reduce opportunities too much and may introduce unnecessary delay.
Market conditions
The script tends to behave more cleanly in liquid markets where structure is clearer, such as:
- crypto majors
- forex majors
- index products
- other actively traded instruments
In very thin or highly irregular markets, the structural quality of setups may degrade.
Why this indicator may be preferred over simpler alternatives
This script is not intended to be just a basic ZigZag visualizer or a simple Quasimodo marker.
Its main differentiator is the way it combines multiple layers of structure validation into one ranked workflow:
- structure recognition
- body-based break confirmation
- momentum alignment
- divergence context
- FVG context
- liquidity sweep context
- freshness filtering
- normalized quality scoring
Instead of showing every possible shape, it tries to separate weaker structural patterns from more meaningful ones.
What makes this script different
The individual concepts used here are known market-structure concepts, but the practical value of the script comes from how they are combined.
Its distinguishing contribution is the orchestration layer:
- the Quality Score model
- the multi-filter ranking process
- the first-touch freshness workflow
- the compact integration of structure, momentum, liquidity, and imbalance into one decision-support tool
In other words, the script is built on generic market-structure concepts, but its filtering and ranking workflow is specific to this implementation.
How to use it in practice
A common workflow is:
- wait for a level to be confirmed
- monitor the first return into that level
- use the score and filter context to judge whether the setup deserves attention
- avoid treating every printed level as a guaranteed reversal
Many users will find it most useful as a structured decision-support tool rather than as a standalone entry engine.
Technical behavior
- Signals are confirmed on bar close.
- Confirmed levels remain fixed after printing.
- The script does not rely on request.security() in the described signal logic.
- No lookahead-based behavior is used in the signal confirmation process.
- The latest developing pivot may evolve while structure is still forming, but confirmed outputs are only printed after confirmation.
Alerts
The script includes on-close alerts when a new bullish or bearish QML level is confirmed.
Alert messages can include contextual details such as:
- direction
- Quality Score
- divergence state
Limitations
This script is a technical analysis tool, not a prediction engine.
Please keep in mind:
- sideways conditions can generate weaker structural setups
- very low timeframes can create more noise and false breaks
- news-driven volatility can invalidate technical levels quickly
- very low ZigZag Sensitivity settings can make ordinary pullbacks look more important than they really are
- no indicator can guarantee that price will react from every marked level
For that reason, the script is best used as a structured analysis tool rather than as a certainty model. Indicator

Quasimodo (QML) Pattern [UAlgo]Quasimodo (QML) Pattern is a market structure pattern detector that identifies Quasimodo formations using confirmed swing pivots and then visualizes the full structure directly on the chart. The Quasimodo concept is often described as a stop run and reversal model where price first violates a prior swing point, then breaks structure in the opposite direction. This script formalizes that idea into a strict pivot sequence and draws the key structural components so the pattern can be reviewed consistently.
The indicator maintains a rolling history of pivot highs and pivot lows, then checks the most recent four pivots for a valid Quasimodo sequence. When a bullish or bearish QML is confirmed, the script draws a connected structure, highlights the pattern area with a fill, plots a Market Structure Break reference line, and marks a QML zone derived from the left shoulder and the head. The most recent pattern zone is extended forward to keep it visible for potential retests.
This tool is intended to support structured analysis of reversal setups, with visual anchors that make it easy to locate left shoulder, reaction, head, and MSB points without manual drawing.
🔹 Features
1) Pivot Based Swing Engine
The script uses pivot highs and pivot lows to define swings. Left Bars and Right Bars control how many bars are required to confirm each pivot. This creates stable swing points and reduces noise compared to raw candle comparisons.
Confirmed pivots are stored as PivotPoint objects with price, bar index, and direction (high or low). The pivot history is capped to keep memory efficient while retaining enough context for detection.
2) Strict Four Pivot Pattern Validation
Detection uses the most recent four pivots, enforcing an alternating sequence so the structure follows a zig zag pattern. Only sequences that alternate high and low consistently are eligible for classification.
This avoids false detections where multiple highs or multiple lows occur in a row.
3) Bullish QML Detection Logic
The bullish model requires:
Left shoulder is a low
Reaction is a high
Head is a lower low than the left shoulder
MSB is a higher high than the reaction
This represents a liquidity grab below the prior swing low followed by a break above the reaction high, which is treated as the structure break confirmation.
4) Bearish QML Detection Logic
The bearish model requires:
Left shoulder is a high
Reaction is a low
Head is a higher high than the left shoulder
MSB is a lower low than the reaction
This represents a liquidity grab above the prior swing high followed by a break below the reaction low.
5) Full Pattern Visualization with Structural Labels
When a pattern is detected, the script draws:
Three visible connector lines linking left shoulder to reaction, reaction to head, and head to MSB
A filled highlight over the core structure area to emphasize the liquidity grab geometry
Point labels at left shoulder, head, and MSB for quick reading
A descriptive pattern label showing Bullish QML or Bearish QML
Visual styling, colors, and label sizing are user configurable.
6) MSB Break Reference Line
A dotted horizontal line is drawn from the reaction point to the MSB point at the reaction price level. This acts as a clear market structure break reference and helps validate that the break level was actually exceeded in the required direction.
7) QML Zone Projection
The script draws a QML zone box that spans the price range between the left shoulder and the head. This zone is extended forward in time so it remains visible for potential retests and reactions.
8) Efficient Execution and Update Behavior
Pattern checks run only when a new pivot is confirmed, reducing repeated evaluation. The script also extends the most recent QML zone and repositions the main label forward for better ongoing visibility.
🔹 Calculations
1) Pivot Detection
Pivot highs and pivot lows are confirmed using Left Bars and Right Bars:
float ph = ta.pivothigh(leftLen, rightLen)
float pl = ta.pivotlow(leftLen, rightLen)
When a pivot is confirmed, the bar index is aligned to the pivot location using the rightLen offset:
if not na(ph)
pivotArray.pushPivot(ph, bar_index , true)
if not na(pl)
pivotArray.pushPivot(pl, bar_index , false)
Each pivot is stored as:
price
index
isHigh flag
2) Alternating Sequence Requirement
The script evaluates the last four pivots p0 through p3 and requires strict alternation:
bool correctSequence =
(p0.isHigh != p1.isHigh) and (p1.isHigh != p2.isHigh) and (p2.isHigh != p3.isHigh)
This ensures the sequence forms a valid zig zag structure.
3) Bullish Quasimodo Conditions
Bullish QML is evaluated when p0 is a low:
if not p0.isHigh
if p2.price < p0.price and p3.price > p1.price
Quasimodo qml = Quasimodo.new(p0, p1, p2, p3, true)
Interpretation:
Head is a lower low relative to the left shoulder
MSB is a higher high relative to the reaction
This produces a sweep and reversal structure with confirmation
4) Bearish Quasimodo Conditions
Bearish QML is evaluated when p0 is a high:
if p0.isHigh
if p2.price > p0.price and p3.price < p1.price
Quasimodo qml = Quasimodo.new(p0, p1, p2, p3, false)
Interpretation:
Head is a higher high relative to the left shoulder
MSB is a lower low relative to the reaction
5) Pattern Drawing Components
When a pattern is confirmed, the script draws connecting lines:
line.new(LS.index, LS.price, R.index, R.price)
line.new(R.index, R.price, H.index, H.price)
line.new(H.index, H.price, MSB.index, MSB.price)
It also draws a horizontal MSB reference at the reaction price:
line.new(reaction.index, reaction.price, msb.index, msb.price, style=line.style_dotted)
A QML zone box is created using left shoulder and head prices and extended forward:
qml.qmlZone := box.new(LS.index, LS.price, bar_index + 10, H.price, bgcolor=color.new(col, 85))
On each bar, the most recent zone is extended further to remain visible:
box.set_right(lastQml.qmlZone, bar_index + 5)
label.set_x(lastQml.lbl, bar_index + 5)
6) Pivot History Management
To keep execution efficient, the pivot array is capped:
if pivots.size() > 50
pivots.shift()
Pattern checking is triggered only when a new pivot is found, which reduces redundant processing on bars where no structural update occurred. Indicator

QM Signal [TradingFinder] Quasimodo Pattern - Head and Shoulders🔵 Introduction
One of the patterns in "RTM" is the "QM" pattern, also known as "Quasimodo". Its name is derived from the appearance of "Hunchback of Notre-Dame" from Victor Hugo's novel. It is a type of "Head and Shoulders" pattern.
🔵 Formation Method
🟣 Upward Trend
In an upward trend, the left shoulder is formed, and the price creates a new peak higher than the left shoulder peak . After a decline, it manages to break the previous low and move upward again. We expect the price to return approximately between and to form the "QM" pattern.
🟣 Downward Trend
In a downward trend, with a price decline, a new valley is created, forming the left shoulder, and the price forms a new valley lower than the left shoulder valley . After a price increase, it manages to break the previous high and move downward again. We expect the price to return approximately between and to form the "Quasimodo" pattern.
Note: The "QM" pattern is a specific type of head and shoulders pattern in which in the first move, the previous support is broken and it's the best condition for price reversal.
🔵 Entry Conditions for "Buy" and "Sell"
🟢 Buy
Buy Position : When a complete "QM" pattern is formed in a downtrend; we expect the price to reach the left shoulder area (with confirmation) during the retracement to enter the "BUY" position.
Profit Target in Buy Scenario : Expecting a move to the peak that broke it and the highest point in the current "Swing".
Stop Loss : Below the "Head," which is the lowest point.
🔴 Sell
Sell Position : When a "QM" pattern is formed in an uptrend, we look for entry into the "Sell" position as the price retraces to the left shoulder area.
Profit Target in Sell Scenario : Expecting a move to the price floor that has been broken and the entire "Swing" or .
Take Profit : Above the highest point or above the area will be the "SL" region.
Note : Certainly, no method alone guarantees trading capability and requires different confirmations. This indicator only detects the "QM" pattern, and the rest of the analysis will be the responsibility of the user.
Note : These profit and loss limits are based on market movements and will be provided as approximate and supportive.
Indicator

Indicator
