Smart Support & Resistance + Session POCSmart Support & Resistance + Session POC
Overview
Smart Support & Resistance + Session POC is a confirmation-based support and resistance indicator designed to identify meaningful price areas instead of plotting a level after every pivot or wick.
The indicator searches for repeated, separate price rejections on a user-selected detection timeframe. A level remains hidden after its first rejection and only becomes a visible zone after it receives the required number of valid rejections.
Each rejection can be filtered by:
Pivot structure
Approach direction
Minimum wick rejection
Minimum displacement away from the level
Time between separate visits
Distance from existing zones
The indicator can also compare confirmed zones with the Point of Control from previous completed volume-profile sessions. Zones with POC confluence are displayed more prominently, allowing traders to quickly identify areas where repeated price rejection and concentrated traded volume overlap.
This indicator is intended for intraday support and resistance analysis on futures, stocks, forex, and other symbols that provide the required volume and footprint data.
Main Features
Multi-Timeframe Zone Detection
Zones can be calculated from a timeframe independent of the chart timeframe.
For example, you can:
Calculate zones from the 1-hour timeframe.
View those same zones on a 15-minute chart.
Drop to the 5-minute or 1-minute chart for execution.
This keeps the important higher-timeframe structure visible while using a lower timeframe for trade entries.
The selected detection timeframe must be equal to or higher than the chart timeframe.
Confirmation-Based Zone Detection
The indicator does not display every pivot high or pivot low.
A level begins as a hidden candidate after its first valid rejection. It only becomes a visible support or resistance zone after receiving the selected minimum number of separate rejections.
The default requirement is:
Regular zone: 2 valid rejections
Strong zone: 3 or more valid rejections
The thresholds are fully adjustable.
Because pivot confirmation requires bars to form on the right side of the pivot, zones appear after confirmation rather than attempting to predict a turning point in advance.
What Counts as a Valid Rejection?
A rejection must pass the enabled quality filters before it can be counted.
Resistance Rejection
A potential resistance rejection is created when:
A confirmed pivot high forms.
Price approached the area from underneath, when the approach filter is enabled.
The pivot candle closes sufficiently below its high.
Price produces the required downward displacement after the rejection.
The rejection is sufficiently separated from the previous visit.
Support Rejection
A potential support rejection is created when:
A confirmed pivot low forms.
Price approached the area from above, when the approach filter is enabled.
The pivot candle closes sufficiently above its low.
Price produces the required upward displacement after the rejection.
The rejection is sufficiently separated from the previous visit.
These filters help prevent ordinary consolidation, repeated candles inside the same range, and weak pivots from being counted as meaningful support or resistance.
Separate-Visit Logic
Several candles reacting around the same level do not automatically count as several independent rejections.
A new rejection must be separated from the previous rejection by the selected number of detection-timeframe bars.
For example, with:
Detection timeframe: 60 minutes
Minimum bars between rejections: 3
The next rejection must occur at least three 1-hour bars after the previous rejection before it can increase the zone’s rejection count.
This prevents a cluster of candles from incorrectly creating an immediate strong zone.
Adjustable Tick-Based Zones
Zone thickness is defined in ticks using the symbol’s minimum tick size.
This allows the same indicator to adjust correctly across different instruments.
For MNQ:
1 tick = 0.25 points
4 ticks = 1 point
20 ticks = 5 points
40 ticks = 10 points
Support zones are constructed upward from the confirmed rejection low.
Resistance zones are constructed downward from the confirmed rejection high.
When a new valid rejection is merged into an existing zone, the zone may adjust to include the newer rejection extreme while maintaining the selected zone thickness.
Zone Merging
Nearby rejections of the same type can be grouped into one zone instead of creating several overlapping boxes.
The Zone merge tolerance setting controls how close two areas can be before they are treated as the same support or resistance zone.
A larger merge tolerance produces fewer, broader structural areas.
A smaller merge tolerance keeps nearby levels separate and creates more zones.
Zone Strength and Appearance
The indicator uses opacity to display zone quality without adding labels, centerlines, or unnecessary chart clutter.
Default appearance:
Regular zone: 50% opacity
Strong zone: 75% opacity
POC-confluence zone: 100% opacity
Support zones are green by default.
Resistance zones are red by default.
All colors, opacity levels, and border widths are customizable.
Visual Priority
POC confluence has the highest appearance priority.
Therefore:
A two-rejection zone without POC confluence appears as a regular zone.
A zone reaching the strong-rejection threshold appears as a strong zone.
Any confirmed zone overlapping a selected POC appears at the POC opacity level.
The chart remains clean because no labels or centerlines are required to identify zone quality.
Completed Session POC Confluence
The indicator can analyze Point of Control levels from previously completed volume profiles.
The Point of Control represents the highest-volume price row within the selected completed profile.
A confirmed zone receives POC confluence when its price range overlaps a POC row within the selected profile lookback.
POC confluence can be calculated from:
Exchange-defined regular sessions
Extended or full sessions
The profile timeframe is also adjustable.
For intraday trading, a common configuration is:
Profile timeframe: 1D
Profile session: Exchange regular
POC lookback: 5 completed profiles
This compares active support and resistance zones with POCs from the previous five completed daily profiles.
Completed Profiles Only
The indicator uses completed profiles rather than a developing current-session POC.
A developing POC can move throughout the session as additional volume trades. Using completed profiles provides a stable reference that does not continue shifting during the current session.
POC Lookback
The POC lookback controls how many completed profiles remain available for confluence.
For example:
A lookback of 1 checks only the most recently completed profile.
A lookback of 5 checks the previous five completed profiles.
A lookback of 10 checks the previous ten completed profiles.
When an old profile leaves the selected lookback, the indicator recalculates confluence. A zone may therefore lose its POC appearance when the POC supporting it is no longer inside the active lookback.
POC functionality requires footprint data to be available for the PulseWire account and selected symbol.
Zone Invalidation
A zone is considered invalid when price closes completely beyond its outside boundary plus the selected break buffer.
Support Invalidation
A support zone is deleted when the selected confirmation candle closes below:
Support zone bottom − break buffer
Resistance Invalidation
A resistance zone is deleted when the selected confirmation candle closes above:
Resistance zone top + break buffer
A wick through the zone does not automatically invalidate it. Price must close beyond the zone and its buffer.
Once broken:
The zone is permanently removed from the chart.
It is not faded.
It is not retained as a historical zone.
It does not automatically convert into a support/resistance flip.
A new zone can form near the same price only after new valid rejections occur.
Break Confirmation Timeframe
There are two break-confirmation choices.
Detection Timeframe
This is the recommended setting.
A zone calculated from the 1-hour timeframe is invalidated only by a confirmed 1-hour close beyond the zone and buffer.
This prevents a small lower-timeframe close from deleting a higher-timeframe zone prematurely.
Chart Timeframe
The zone is invalidated by a confirmed close on the current chart timeframe.
This is more responsive but also more sensitive.
For example, a 1-minute close could invalidate a zone calculated from the 1-hour timeframe.
Zone Freshness
The Zone freshness lookback determines how long a level can remain active without receiving another valid rejection.
Freshness is measured from the zone’s most recent valid rejection.
For example, with a 10-day freshness setting:
A zone whose most recent valid rejection occurred within the last 10 days remains active.
A zone that has not received a valid rejection for more than 10 days is deleted.
A new valid rejection refreshes the zone’s age.
The freshness setting is measured in calendar-day periods.
Zone Length
Two zone-extension modes are available.
Until Broken
The zone continuously extends to the right until:
Price invalidates it.
It becomes stale.
It is removed because of the maximum tracked-level limit.
This is the recommended setting for active support and resistance trading.
Fixed Detection Bars
The zone extends for a selected number of detection-timeframe bars after confirmation.
For example:
Detection timeframe: 60 minutes
Fixed length: 100 bars
The zone remains active for approximately 100 confirmed 1-hour bars unless it is invalidated or becomes stale first.
How to Use the Indicator
Step 1: Choose the Detection Timeframe
Select the timeframe from which support and resistance should be calculated.
Common examples:
Scalping on a 1-minute chart: use 15-minute, 30-minute, or 1-hour zones.
Trading on a 5-minute chart: use 30-minute or 1-hour zones.
Trading on a 15-minute chart: use 1-hour or 4-hour zones.
The detection timeframe cannot be lower than the chart timeframe.
A good starting point for MNQ intraday trading is:
Chart timeframe: 1–5 minutes
Detection timeframe: 60 minutes
Step 2: Set the Minimum Rejections
Start with:
Minimum rejections: 2
Strong-zone rejections: 3
With these settings:
The first rejection creates a hidden candidate.
The second valid rejection confirms and displays the zone.
The third valid rejection upgrades it to a strong zone.
Increasing the required rejections creates fewer but more selective zones.
Step 3: Set the Zone Thickness
Choose a zone thickness that matches the instrument’s normal movement.
Suggested MNQ starting value:
Zone thickness: 20 ticks, or 5 points
A smaller zone is more precise but may be invalidated or missed more easily.
A larger zone captures a broader area but may create less precise entries.
Zone thickness should generally be adjusted according to the instrument’s volatility and the selected detection timeframe.
Step 4: Configure the Rejection Filters
Recommended starting settings:
Require correct approach direction: On
Minimum rejection wick: 4 ticks
Require displacement: On
Displacement mode: Ticks
Minimum displacement: 20 ticks
Displacement window: 3 bars
These settings require price to produce a meaningful reaction after contacting the area.
For instruments or timeframes with changing volatility, ATR displacement can be used instead of a fixed tick amount.
Step 5: Configure the Volume Profile
Recommended intraday starting configuration:
Use completed-profile POC confluence: On
Profile timeframe: 1D
Profile session: Exchange regular
POC lookback: 5
Footprint row size: 4 ticks
POC overlap tolerance: 0–4 ticks
The profile timeframe must be higher than the chart timeframe.
Use Exchange regular when regular-session institutional volume is the main focus.
Use Extended/full when overnight and extended-session volume should be included.
Step 6: Read the Zones
Regular Zone
A regular zone has reached the minimum rejection requirement but has not reached the strong threshold and does not overlap a selected POC.
It is a valid area, but it has the lowest visual priority.
Strong Zone
A strong zone has received at least the selected number of valid rejections.
Repeated rejection suggests that the area has continued to influence price.
POC Zone
A POC zone is a confirmed support or resistance zone that overlaps a POC from the selected completed-profile lookback.
This combines:
Repeated price rejection
Structural support or resistance
High historical traded volume
POC confluence increases visual importance, but it does not guarantee that the zone will hold.
Suggested Trading Workflow
The indicator identifies reaction areas. It does not automatically provide buy or sell entries.
Long Setup
Establish a bullish directional bias.
Wait for price to return to a support zone.
Give greater attention to strong or POC-confluence support.
Look for lower-timeframe confirmation, such as:
A liquidity sweep and close back above the zone
A bullish rejection candle
A higher low
A bullish market-structure shift
Positive volume or delta confirmation
Consider invalidation below the zone and an appropriate buffer.
Use the next resistance zone or another planned level as a potential target.
Short Setup
Establish a bearish directional bias.
Wait for price to return to a resistance zone.
Give greater attention to strong or POC-confluence resistance.
Look for lower-timeframe confirmation, such as:
A liquidity sweep and close back below the zone
A bearish rejection candle
A lower high
A bearish market-structure shift
Negative volume or delta confirmation
Consider invalidation above the zone and an appropriate buffer.
Use the next support zone or another planned level as a potential target.
Zones should be treated as areas where a reaction may occur, not as automatic entry signals.
Settings Guide
1. Zone Detection
Zone Detection Timeframe
Controls the timeframe used to detect pivots and rejections.
It must be equal to or higher than the current chart timeframe.
Pivot Bars Left
Controls how many bars must appear to the left of a pivot.
Higher values produce fewer and more significant pivots.
Pivot Bars Right
Controls how many bars must form after a pivot before it is confirmed.
Higher values provide more selective confirmation but cause zones to appear later.
Minimum Rejections
The number of separate valid rejections required before a zone becomes visible.
Strong-Zone Rejections
The number of valid rejections required to upgrade a confirmed zone to strong status.
The script will never allow the effective strong threshold to be lower than the minimum confirmation threshold.
Minimum Bars Between Rejections
Controls how many detection-timeframe bars must separate two counted rejections.
Minimum Rejection Wick
Defines how far the pivot candle must close away from its high or low.
For resistance, the pivot candle must close below its high by this amount.
For support, the pivot candle must close above its low by this amount.
Set it to zero to disable this filter.
Require Correct Approach Direction
When enabled:
Resistance should be approached from below.
Support should be approached from above.
This helps prevent sideways price action from repeatedly creating levels inside congestion.
Require Displacement After Rejection
Requires price to move a minimum distance away from the rejection before it is accepted.
Displacement Mode
Choose between:
Fixed ticks
ATR-based displacement
Minimum Displacement
The fixed tick distance required when using Ticks mode.
Displacement Window
The number of bars immediately following the pivot that are examined for displacement.
The effective window cannot exceed the number of pivot-right bars because the rejection must remain fully confirmed.
ATR Length and Multiplier
Control the volatility-adjusted displacement requirement when ATR mode is selected.
2. Zone Construction and Life
Zone Thickness
Controls the vertical size of every support and resistance zone in ticks.
Zone Merge Tolerance
Controls how close two same-direction rejection areas can be before they are grouped together.
Zone Freshness Lookback
Deletes levels whose most recent valid rejection is older than the selected number of days.
Zone Length
Choose between continuous extension until invalidation or a fixed number of detection bars.
Fixed Length
Controls how many detection-timeframe bars a fixed-length zone remains active.
Break Confirmation Candle
Selects whether invalidation is confirmed by the detection timeframe or current chart timeframe.
Break Buffer
Adds extra space beyond the outside boundary before a zone is deleted.
For MNQ:
4 ticks = 1 point
8 ticks = 2 points
Maximum Tracked Levels
Limits the total number of zone records stored by the indicator.
This includes both:
Hidden one-rejection candidates
Visible confirmed zones
When the limit is exceeded, the oldest level based on its most recent rejection is removed.
3. Session Volume Profile Confluence
Use Completed-Profile POC Confluence
Turns POC analysis on or off.
Profile Timeframe
Controls the duration of each completed volume profile.
Use 1D for completed daily profiles.
Profile Session
Choose between exchange regular hours or extended/full-session data.
POC Lookback
Controls how many completed POC rows are retained for confluence testing.
Footprint Row Size
Controls the price height of each footprint row in ticks.
Smaller values provide greater price resolution but may create noisier profile results.
Larger values group more prices into each row.
Value Area Percent
Controls the value-area percentage used when constructing the footprint profile.
The current indicator uses the profile’s POC for zone confluence and does not separately draw VAH or VAL.
POC Overlap Tolerance
Adds a tick allowance around each POC row when checking whether it overlaps a zone.
4. Appearance
The following can be customized independently:
Support color
Resistance color
Regular-zone opacity
Strong-zone opacity
POC-zone opacity
Border width
Zones are drawn behind the candles to keep price action readable.
Recommended MNQ Starting Settings
Setting Starting Value
Detection timeframe 60 minutes
Pivot bars left 3
Pivot bars right 3
Minimum rejections 2
Strong-zone rejections 3
Minimum bars between rejections 3
Minimum rejection wick 4 ticks
Correct approach direction On
Displacement filter On
Displacement mode Ticks
Minimum displacement 20 ticks
Displacement window 3 bars
Zone thickness 20 ticks
Merge tolerance 8 ticks
Freshness 10 days
Zone length Until broken
Break confirmation Detection timeframe
Break buffer 4 ticks
Profile timeframe 1D
Profile session Exchange regular
POC lookback 5 profiles
Footprint row size 4 ticks
POC tolerance 0–4 ticks
Regular opacity 50%
Strong opacity 75%
POC opacity 100%
These are starting values, not universal settings. Different instruments and timeframes may require different zone sizes, displacement requirements, and profile-row sizes.
Available Alerts
The indicator includes alert conditions for:
New support zone
New resistance zone
Zone upgraded to strong
Zone gained POC confluence
Support zone broken
Resistance zone broken
To create an alert:
Add the indicator to the chart.
Select Create Alert.
Choose this indicator under the alert condition.
Select the desired event.
Use Once Per Bar Close when close confirmation is required.
Important Notes
This is an indicator, not an automated strategy.
It does not place trades or calculate position size.
A zone is not displayed until the required rejections are fully confirmed.
Higher pivot-right values create slower but more selective confirmation.
Existing zone boundaries can adjust when a new valid rejection is merged into the same area.
POC appearance can change as completed profiles enter or leave the selected lookback.
Footprint and POC results depend on the data available for the symbol.
Support and resistance zones represent areas of interest, not guaranteed reversal points.
Always combine zones with risk management, market context, and entry confirmation.
Smart Support & Resistance + Session POC is designed to reduce chart clutter while highlighting repeatedly defended price areas and the zones that also contain meaningful historical volume concentration. Indicator

Indicator

Shifted Hourly Candles :00 (RTH, for 1H chart)What it does
On US stocks, PulseWire's hourly bars on Regular Trading Hours are anchored to the 9:30 session open, so every 1-hour candle opens and closes at minute :30 (9:30–10:30, 10:30–11:30, ...). Switching to Extended Hours gives you :00 alignment, but then your chart and indicators include pre-market and after-hours data.
This indicator gives you the third option PulseWire doesn't offer natively: hourly candles cut at the top of the clock hour, built from RTH data only. It redraws all candles of the session as 9:30–10:00 (a short opening candle), then 10:00–11:00, 11:00–12:00, through 15:00–16:00 — the same way TC2000 and several other platforms build their hourly bars.
Who it's for
Traders who track hourly opens/closes at the top of the hour (hourly ORB, top-of-hour reversals, hourly close confirmations) and need the candle boundaries to match.
Traders migrating between TC2000 and PulseWire who want both platforms to show the same hourly bars.
Anyone who tried the ETH workaround and found that extended-hours candles distorted their view of regular-session price action.
How it works
The script requests lower-timeframe intrabar data (request.security_lower_tf) and re-aggregates it into clock-hour buckets, detecting boundaries from actual bar timestamps in exchange time — so the short 9:30–10:00 opening candle, trading halts, and early-close sessions are all handled correctly. Each completed candle is drawn with plotcandle on the chart bar where its hour completes, and the current forming hour is drawn live on the last bar, updating as intrabars confirm.
Setup
Use a 1H chart with Extended Hours OFF.
Add the indicator, then hide the native candles (chart Settings → Symbol → set body/wick/border colors fully transparent) so only the shifted candles are visible.
Optional: switch the intrabar timeframe input to "1" for faster live updates (at the cost of history depth) or "15" for maximum history.
Limitations
The time axis labels read 30 minutes early: the 10:00–11:00 candle sits on the slot labeled 10:30. OHLC values are exact — Pine scripts cannot move the chart's time grid.
Intrabar data is capped by PulseWire (~100k intrabars), giving roughly 1 year of history at "1", ~5 years at "5".
Indicators you add to the chart still calculate on the native :30 bars; indicators must be ported to the shifted closes to match (I use companion scripts for MAs and stochastics built on the same bucket logic).
Background
This came out of a discussion in the PulseWire subreddit asking for a native "align intraday bars to clock hour" option: www.reddit.com — until that exists, this script is the workaround. Indicator

Indicator

Indicator

ICT MulitTimeFrame FVG Tracker Retest Liquidity LevelsOVERVIEW
This indicator provides a structured multi-timeframe view of Fair Value Gaps, wick-based retracements, liquidity levels, and market sessions.
It is designed for traders who identify Fair Value Gaps on a higher timeframe while executing or monitoring price action on a lower timeframe. For example, a 15-minute FVG can be displayed and tracked directly on a 5-minute or 1-minute chart.
CORE FEATURES
Multi-Timeframe Fair Value Gaps
Select the source timeframe used to detect Fair Value Gaps. Each zone displays its source timeframe, such as M15, H1, or H4, so its origin remains clear on lower-timeframe charts.
Only confirmed source-timeframe FVGs are activated. A developing higher-timeframe gap cannot trigger a historical retest signal before its source candle has closed.
Wick-Based Retracement Tracking
The indicator tracks wick penetration into each active FVG and displays the deepest retracement as a percentage.
0% means the confirmed FVG has not been retraced.
The percentage increases as price moves deeper into the gap.
Both candle bodies and wicks are included.
The remaining unfilled portion is updated visually.
Safety Zone
An adjustable safety zone extends beyond the original FVG boundary. This provides additional tolerance for marginal overshoots, which can be especially useful when monitoring higher-timeframe gaps.
If price crosses the outer safety boundary, the zone is marked as invalidated.
Retest Markers
The first valid retest occurring after FVG confirmation produces a BUY or SELL marker:
Bullish FVG retest: BUY
Bearish FVG retest: SELL
The marker also identifies the source timeframe, for example:
SELL · M15 FVG
These markers identify the first confirmed touch of a zone. They are not independent trade recommendations and do not apply additional market-structure or momentum confirmation.
Liquidity Map
The indicator displays several types of potential liquidity levels:
BSL: confirmed buy-side liquidity
SSL: confirmed sell-side liquidity
PDH: previous day high
PDL: previous day low
Asia session high and low
London session high and low
New York session high and low
BSL and SSL levels are derived from confirmed pivots on the selected FVG timeframe.
Liquidity levels extend until their first sweep. Once swept, they stop extending and change to the selected swept-level color.
Market Sessions
Asia, London, and New York sessions can be highlighted with independent chart overlays.
Default colors are:
Asia: blue
London: brown
New York: red
Every overlay includes independent visibility, color, and transparency controls.
TIMEZONE MANAGEMENT
Select your location through the “Your timezone” setting.
Session calculations use their native geographic timezones:
Asia/Tokyo
Europe/London
America/New_York
The local session clock converts these schedules into the selected user timezone. IANA timezone identifiers are used so daylight-saving changes in London and New York are handled automatically.
HOW TO USE
Select the timeframe used to detect FVGs.
Use the indicator on the same timeframe or a lower chart timeframe.
Select your local timezone.
Adjust the safety-zone percentage.
Configure the FVG, signal, liquidity, session, and overlay colors.
Use the displayed liquidity levels and session extremes as discretionary areas of interest.
IMPORTANT NOTES
This is an indicator, not an automated strategy.
It does not calculate automatic take-profit or stop-loss orders. It provides FVG context, retracement information, retest markers, and visible liquidity references so traders can perform their own target selection and risk management.
A displayed BUY or SELL marker confirms a first post-confirmation FVG touch only. It should not be interpreted as financial advice or as a guarantee of future price movement. Indicator

Oybek stats**PM Gap Scanner — 10 Tickers**
Monitors up to 10 symbols at once and fires an alert when a stock moves away from its previous regular-session close by more than a set threshold during pre-market hours.
Key features:
- Ten user-defined symbols, each with its own threshold (set to 0 to fall back to the global one)
- Threshold measured in points or percent
- Direction filter: gap up only, gap down only, or both
- Configurable pre-market window (default 04:00–09:30 ET)
- One alert per ticker per day, optional
- On-chart table showing live Δ$ and Δ% for every symbol, with a highlight on triggered rows
- Alert message includes ticker, gap in points and percent, previous close, current price, and the threshold that fired
Setup: add to a 1-minute chart with Extended Trading Hours enabled, then create an alert using "Any alert() function call" set to Once Per Bar. A single alert covers the whole list. Indicator

Indicator

Previous Day Levels & Stats - High and Low, Wicks, Gaps👀OVERVIEW
Previous Day Levels & Stats (PDH/PDL) draws yesterday's open, high, low and close on today's chart and pairs them with a statistics table showing how this symbol has historically behaved at those levels and split both by whether yesterday closed red or green, and by where today opened.
Most previous-day indicators tell you where yesterday's high and low sit. This one also tells you what price has historically done at those levels including:
⚪ How often the previous day level broke
⚪ How often a break held
⚪ How often price traded into yesterday's wick zone and got rejected
⚪ How far a real break typically ran which is then calculated in today's dollars and added to the chart as an option.
Stats tables like this exist already, but this one splits every statistic two ways at once. First by whether yesterday closed red or green, and then by where today opened. A three-way open classification decides which numbers apply to today.
⚡ CONCEPT
Previous Day. The previous day is the most recently completed regular trading session. At the 4:00 pm close, the levels, candle, projection, and table all flip to the day that just finished and these new levels hold through post-market and the next morning's pre-market. This allows you to prepare for the next day ahead of time.
Conditioning on yesterday's color. The data for red days and green days are kept in two separate sets. The table header tells you which condition applies right now ("AFTER A RED DAY" / "AFTER A GREEN DAY"), and you only ever see the set that matters today.
Conditioning on today's open. Each day is classified three ways against yesterday's range: ⚪Opened inside the range
⚪Gapped above the previous day's high
⚪Gapped below the previous day's low
These are all different situations, a PDH break on an inside day and a gap that opened above PDH are not the same event, so they get separate data and are shown in separate rows.
When trading opens on each new day, the table reduces to only show the section that applies for today. The full table returns at the close so you can study both possibilities while preparing for the next day. If you prefer to always see both sections, a setting turns this off and the non-applicable section dims instead.
Inside-day rows. For days that opened inside yesterday's range.
🔴A: Wick rejected: The day opened inside yesterday's range and traded up into yesterday's upper wick, reaching at least the top of yesterday's body. It never touched yesterday's high, and it ultimately closed back below the top of the body (below the wick). If the day so much as touched yesterday's high, it counts in the break rows instead of in wick rejected row. The percentage is out of all days that opened inside yesterday's range after the same color day. This is showing when we open inside the previous day how often price traded both up into the wick and then got rejected. The PDL column is the mirror image using the lower wick and yesterday's low.
🔵B: Broke but failed: The day opened inside yesterday's range and traded up to or above yesterday's high then ultimately closed at or under yesterday's high. This includes closes just under the high, inside the wick, inside the body and through to the other side of the previous day. This is showing when we open inside the previous day how often price traded both up above the previous day and then got rejected. The PDL column is the mirror image using yesterday's low.
🟡C: Broke & held: The day opened inside yesterday's range and traded up to and above yesterday's high then ended up closing the day above it. This does not track anything that happens in between the break and the close, simply the final outcome. The PDL column is the mirror image using the low of yesterday.
🟢D: Typical run past level: On inside opening days where a break beyond PDH or PDL held, the indicator measures how far price historically ran beyond the level. A run measured in dollars from years ago is not comparable to one from last week. So each historical run is first measured against what a normal daily range was at that time, the median value of all those runs is taken, and that value is converted back to dollars using what a normal daily range is now. The result reads like this: when a break like this held, price typically ran about this far past the level. The median average is used instead of mean average so a single giant day cannot distort the number. In addition to the median distance of the run, a second, farther distance is also available: about 1 in 4 of those runs went beyond this level. This does not include days that closed back inside, these are all from days that broke and held. This also is the furthest distance of the day, not how far the final close of the day was.
Each row is a separate outcome from the same set of days. A day lands in at most one of the three rows per column. The rows do not add up to 100 because some inside days never reach some of the levels at all. The only row that is connected is the Typical run past level row which is based on days that broke and closed past the high or low.
Gap-day rows. For days that opened either above PDH or below PDL.
🔴A: Gap Fill: Opened beyond either PDH or PDL and price came back to at least touch the respective PDH or PDL during the day. This is specifically for the high or low of the previous day, not the previous days close. A day can fill the gap to the level and still close back beyond it, so this row overlaps the rows below it.
🔵B: Wick rejected: Opened beyond either PDH or PDL, traded back into only the wick of the previous day (did not trade back into the body of the candle) and then closed back beyond respective high or low. This is showing when we opened above or below previous day, how often we both traded into the respective high or low wick and back out beyond it. If price at any time during the day traded into the body of the previous candle, it no longer counts in this row.
🟡C: Body rejected: Opened beyond either PDH or PDL, traded back into the body of the previous day candle and then closed the day all the way back beyond respective high or low.
🟢D: Closed back inside: Opened beyond either PDH or PDL and by the end of the day closed back inside the previous day range (wick or body).
🟠E: Closed through: Opened beyond PDH or PDL and ultimately closed the day on the opposite side of the previous day candle than where it opened.
🟣F: Gap held: Opened above PDH and closed the day still above PDH, or opened below PDL and closed the day still below PDL, regardless of what happened in between. This row includes days that never pulled back and days that pulled back and recovered. So price could have never even touched the previous days candle, traded clear through to the other side and back again or anything in between, but closed the day on the same side as the open gap.
Wick rejected and Body rejected are subsets of Gap held. Gap held, Closed back inside, Closed through partition all gap days and sum to 100%.
⭐Doji days. If yesterday closed exactly where it opened, it has no color, so no condition applies. The indicator carries the most recent non-doji color forward for the table, and the header reads "AFTER A DOJI DAY*" on a neutral background so you know a substitution happened. Days that follow a doji are not counted into either condition's statistics, they're displayed under the carried color, never counted under it. So the previous day open, high, low and close are based on the actual previous day (the doji), but the stats are filtered through the most recent colored day before it. There are not enough doji days to have a realistic amount of data to work from. So the levels are used but the data is from the color of the bar before the doji day.
💥FEATURES
• The statistics table: conditioned as described above, with preset color themes (including one designed for light charts). Cell color intensity shows decisiveness, not direction. The further a percentage sits from a coin flip (50/50) in either direction, the stronger the cell glows. Sample sizes appear in hover tooltips on every row.
• Previous-day OHLC lines: with span, style, width, and label options.
• Previous-day candle: a large rendering of yesterday's candle beside today's action, with different placement options.
• Projection overlay: yesterday's candle projected across today's session, so you watch today on top of yesterday's shape.
• Typical-run levels: optional lines shown on the chart from inside days only.
❓HOW TO USE
1. Open an intraday chart of a stock before the market opens. The levels and/or projection already show the most recently completed day and the table shows the data based on what color the previous day was for both if today opens inside previous day and if today opens with a gap in either direction.
2. At 9:30 AM ET, the table will classify the day and the section matching today's open highlights. That shows context, what this symbol has historically done from this starting situation in the past.
3. Use the OHLC lines and wick zones as the map, and the table as the stats at each level. Hover any row for its exact definition and sample size.
4. On inside-open days, turn on the typical-run levels if you want the median-run distances drawn on the chart.
The table describes what this symbol has done, not what it will do. Treat every number as context, not a prediction.
❗ LIMITATIONS
• Session logic is built around US stocks (9:30–4:00 ET regular session). The indicator loads on other symbols, but the open classification, the flip at the close, and the projection presets assume US stock sessions; on 24-hour markets without distinct pre/post sessions the close-flip does not engage.
• Statistics are historical frequencies on your symbol's data. They are not predictions, carry no performance implication, and small samples (newer tickers, rare conditions) mean wider uncertainty so check the sample sizes in the tooltips.
• Days following a doji are excluded from both condition samples (see Concepts), so condition totals will be slightly smaller than the symbol's full day count.
• Absence of typical-run lines on a gap open is intentional, the typical run lines are based on a break out of the prior day. In an attempt to keep the indicator simple and user friendly, the lines are only applied for break outs of the range.
• During post-market, the projection covers the just-completed session behind price; the pre-market view is the designed preparation window.
• Different data feeds disagree by cents on some historical days, so counts can differ slightly between feeds.
• This indicator is for educational purposes and is not intended to be used alone for decision making. Make sure that you properly backtest with any data before using it.
📋NOTES
All statistics are computed from the symbol's complete daily history, so the numbers are the same on every chart timeframe and don't depend on how many bars your chart happens to have loaded. Everything is computed on confirmed bars only and states move forward-only so nothing is retroactively relabeled, and what you see live is what remains on the chart in history and in replay.
Indicator

Indicator

Indicator

Indicator

Liquidity Sweep Reversal [JOAT]═══ LIQUIDITY SWEEP REVERSAL ═══
Liquidity Sweep Reversal hunts the stop-run. Price wicks beyond a prior swing high or low to grab resting liquidity, then snaps back inside — and that reclaim is where the reversal often begins. This tool tracks those levels, validates the sweep, and frames a complete trade with stop, targets and live outcome stats. 🎯
▎ WHAT IT DOES
It maps recent swing highs and swing lows as liquidity pools, watches for a candle to pierce one and then close back on the correct side (the reclaim ), and prints a clean BUY or SELL label. Every valid signal is turned into a structured trade: an ATR-based stop beyond the swept wick and three R-multiple targets, all tracked to resolution on a self-scoring dashboard.
▎ HOW IT WORKS
• Liquidity mapping — Confirmed pivot highs and lows (lookback set by Swing Pivot Lookback ) are stored as active levels per side, capped in count and aged out after a maximum bar age so only relevant pools remain.
• Sweep + reclaim — A bullish setup needs the bar to wick below a tracked swing low, then close back above it (sell-side liquidity grabbed). A bearish setup wicks above a swing high, then closes back below it. The reclaim can complete on the sweep bar or within the Reclaim Window you allow.
• Wick-depth gate — The penetration beyond the level is measured in ATR. Too shallow (noise) or too deep beyond the Max Wick cap (a genuine breakout) is rejected, so only clean stop-hunts qualify.
• Confluence filters — Optional volume-spike confirmation, HTF trend alignment (BUY only above a higher-timeframe EMA, SELL only below), directional restriction, dual-side sweep blocking on wide bars, and a signal cooldown all thin the feed.
• Trade construction — Entry is the reclaim close. The stop sits beyond the swept wick by an ATR buffer, then is clamped between a min-risk floor and max-risk cap. That risk (1R) projects TP1 / TP2 / TP3 at your chosen R multiples.
• Outcome engine — Each trade is followed bar by bar. Same-bar stop-vs-target conflicts resolve by your chosen priority, and trades that never reach TP3 or stop are flattened at a bar timeout — every result feeds the stats.
▎ HOW TO USE IT
• A BUY pill under price marks a bullish reclaim; a SELL pill above price marks a bearish one. The dotted level line and SSL / BSL SWEEP tag show exactly which liquidity pool was raided.
• The green target zone spans entry to TP3; the red risk zone spans entry to stop. Lines and left-side labels print entry, SL and each TP with its R value.
• On close, a result label reports the outcome — TP3 , a protected partial TP , SL , or a TIME exit — with the realised R.
• Treat signals as a structured framework, not a black box: strongest reversals tend to appear at obvious swing extremes, with HTF alignment and a volume spike behind them.
▎ KEY SETTINGS
• Engine — pivot lookback, reclaim window, ATR length, tracked levels per side, level age, and signal direction (Both / Long / Short).
• Filters — min/max wick depth, volume-spike confirmation, HTF timeframe + EMA, dual-side blocking, and cooldown bars.
• Trade Model — stop buffer, min/max risk bounds, TP1/TP2/TP3 in R, same-bar priority, trade timeout, and drawn-trade history depth.
• Visuals — toggles for markers, sweep lines, zones, level labels, result labels, optional signal-candle tint, and a session VWAP ± σ band .
▎ DASHBOARD
A compact panel reports live state — Status (Waiting / Armed / Active), current active trade side, last sweep and its level — alongside performance: sweeps detected, signals taken, closed count, win rate , profit factor , average R , bull vs bear win%, current and max win/loss streak , and an optional TP1/TP2/TP3 vs SL/Timeout breakdown. Position and text size are configurable.
▎ ALERTS
• Bullish Sweep (BUY) and Bearish Sweep (SELL) on confirmed entries.
• TP3 Hit , Partial TP Hit (protected exit), and SL Hit on trade resolution.
▎ NOTES
• Works on all timeframes and all assets — instruments without volume simply pass the volume filter.
• Signals confirm on the reclaim close , so a printed BUY/SELL marker does not move once the bar closes.
• Every visual has a toggle — turn off zones, lines, labels or the dashboard for a minimalist chart.
• The on-chart statistics summarise historical signals only and are illustrative, not a forecast.
For research and education only. This is not financial advice. No indicator can predict the future, and past behaviour does not guarantee future results. Always manage your own risk.
Made with passion by JackOfAllTrades ⚡ Indicator

Indicator

Indicator

XAUUSD Clean Institutional Scalper v11//@version=6
indicator("XAUUSD Clean Institutional Scalper v11", overlay=true, max_boxes_count=40, max_labels_count=80, max_lines_count=60)
//====================
// Inputs
//====================
showBg = input.bool(true, "Session Background")
showBiasBox = input.bool(true, "Bias Box")
showSessionBox = input.bool(true, "Session Box")
showZone = input.bool(true, "Entry Zone")
showSweeps = input.bool(true, "Sweep Labels")
showLevels = input.bool(true, "Support / Resistance")
showTargets = input.bool(true, "SL + TP Levels")
showSMC = input.bool(true, "Smart Money Concepts")
showPD = input.bool(true, "Premium / Discount")
showLabels = input.bool(true, "In-Chart Labels")
biasTf = input.timeframe("240", "Bias TF")
liqLen = input.int(5, "Swing Length", minval=2, maxval=20)
smcLen = input.int(3, "SMC Swing Length", minval=2, maxval=10)
zoneExtend = input.int(12, "Zone Extend", minval=1, maxval=50)
asiaSess = input.session("0000-0600", "Asia")
londonSess = input.session("0700-1600", "London")
nySess = input.session("1300-2100", "New York")
overlapSess = input.session("1300-1600", "Overlap")
bullZoneFill = input.color(color.new(color.lime, 82), "Bull Zone Fill")
bearZoneFill = input.color(color.new(color.red, 82), "Bear Zone Fill")
neutralFill = input.color(color.new(color.gray, 90), "Neutral Fill")
bullBorder = input.color(color.new(color.lime, 0), "Bull Border")
bearBorder = input.color(color.new(color.red, 0), "Bear Border")
neutralBorder = input.color(color.new(color.gray, 30), "Neutral Border")
sessionFill = input.color(color.new(color.white, 88), "Session Fill")
sessionBorder = input.color(color.new(color.white, 35), "Session Border")
supColor = input.color(color.new(color.yellow, 0), "Support Color")
resColor = input.color(color.new(color.yellow, 0), "Resistance Color")
slColor = input.color(color.new(color.red, 0), "Stop Loss Color")
tp1Color = input.color(color.new(color.green, 0), "TP1 Color")
tp2Color = input.color(color.new(color.blue, 0), "TP2 Color")
tp3Color = input.color(color.new(color.purple, 0), "TP3 Color")
//====================
// Helper
//====================
f_callout(_x, _y, _txt, _bg, _tc, _style) =>
label.new(_x, _y, _txt, xloc=xloc.bar_index, yloc=yloc.price, style=_style, textcolor=_tc, color=_bg, size=size.tiny)
//====================
// Sessions
//====================
inAsia = not na(time(timeframe.period, asiaSess))
inLondon = not na(time(timeframe.period, londonSess))
inNY = not na(time(timeframe.period, nySess))
inOverlap = not na(time(timeframe.period, overlapSess))
sessionOk = inLondon or inNY or inOverlap
bgcolor(showBg ? (inOverlap ? color.new(color.orange, 88) : inLondon ? color.new(color.blue, 93) : inNY ? color.new(color.purple, 93) : inAsia ? color.new(color.teal, 95) : na) : na)
//====================
// Bias
//====================
fast = request.security(syminfo.tickerid, biasTf, ta.ema(close, 21), lookahead=barmerge.lookahead_on)
slow = request.security(syminfo.tickerid, biasTf, ta.ema(close, 55), lookahead=barmerge.lookahead_on)
rsiV = request.security(syminfo.tickerid, biasTf, ta.rsi(close, 14), lookahead=barmerge.lookahead_on)
bullBias = fast > slow and rsiV > 50
bearBias = fast < slow and rsiV < 50
var box biasBox = na
if showBiasBox and barstate.islast
biasTop = bullBias ? close + 50 : bearBias ? close + 100 : close + 25
biasBot = bullBias ? close - 10 : bearBias ? close + 10 : close - 10
if na(biasBox)
biasBox := box.new(bar_index - 5, biasTop, bar_index + 10, biasBot)
box.set_left(biasBox, bar_index - 5)
box.set_right(biasBox, bar_index + 10)
box.set_top(biasBox, biasTop)
box.set_bottom(biasBox, biasBot)
box.set_bgcolor(biasBox, bullBias ? color.new(color.lime, 88) : bearBias ? color.new(color.red, 88) : neutralFill)
box.set_border_color(biasBox, bullBias ? bullBorder : bearBias ? bearBorder : neutralBorder)
//====================
// Session box
//====================
var box sessBox = na
var float sessHigh = na
var float sessLow = na
newSession = sessionOk and not sessionOk
if newSession
sessHigh := high
sessLow := low
else if sessionOk
sessHigh := na(sessHigh) ? high : math.max(sessHigh, high)
sessLow := na(sessLow) ? low : math.min(sessLow, low)
if showSessionBox and barstate.islast and sessionOk and not na(sessHigh) and not na(sessLow)
if na(sessBox)
sessBox := box.new(bar_index - 15, sessHigh, bar_index + 15, sessLow)
box.set_left(sessBox, bar_index - 15)
box.set_right(sessBox, bar_index + 15)
box.set_top(sessBox, sessHigh)
box.set_bottom(sessBox, sessLow)
box.set_bgcolor(sessBox, sessionFill)
box.set_border_color(sessBox, sessionBorder)
//====================
// Support / Resistance
//====================
ph = ta.pivothigh(high, liqLen, liqLen)
pl = ta.pivotlow(low, liqLen, liqLen)
var float lastPH = na
var float lastPL = na
var line resLine = na
var line supLine = na
if not na(ph)
lastPH := ph
if not na(resLine)
line.delete(resLine)
resLine := line.new(bar_index - liqLen, ph, bar_index, ph, extend=extend.right, color=resColor, style=line.style_dashed, width=2)
if not na(pl)
lastPL := pl
if not na(supLine)
line.delete(supLine)
supLine := line.new(bar_index - liqLen, pl, bar_index, pl, extend=extend.right, color=supColor, style=line.style_dashed, width=2)
//====================
// Sweep
//====================
bullSweep = showSweeps and not na(lastPL) and low < lastPL and close > lastPL
bearSweep = showSweeps and not na(lastPH) and high > lastPH and close < lastPH
plotshape(bullSweep, style=shape.arrowup, location=location.belowbar, color=color.lime, size=size.small, text="SWEEP")
plotshape(bearSweep, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text="SWEEP")
if showLabels and bullSweep
f_callout(bar_index + 1, low, "sweep", color.new(color.gray, 25), color.white, label.style_label_left)
if showLabels and bearSweep
f_callout(bar_index + 1, high, "sweep", color.new(color.gray, 25), color.white, label.style_label_left)
//====================
// SMC
//====================
smcPH = ta.pivothigh(high, smcLen, smcLen)
smcPL = ta.pivotlow(low, smcLen, smcLen)
var float smcHigh = na
var float smcLow = na
var line smcHighLine = na
var line smcLowLine = na
if showSMC and not na(smcPH)
smcHigh := smcPH
if not na(smcHighLine)
line.delete(smcHighLine)
smcHighLine := line.new(bar_index - smcLen, smcPH, bar_index, smcPH, extend=extend.right, color=color.new(color.aqua, 0), style=line.style_dashed, width=2)
if showSMC and not na(smcPL)
smcLow := smcPL
if not na(smcLowLine)
line.delete(smcLowLine)
smcLowLine := line.new(bar_index - smcLen, smcPL, bar_index, smcPL, extend=extend.right, color=color.new(color.orange, 0), style=line.style_dashed, width=2)
bullBOS = showSMC and not na(smcHigh) and close > smcHigh and close <= smcHigh
bearBOS = showSMC and not na(smcLow) and close < smcLow and close >= smcLow
bullCHoCH = showSMC and not na(smcLow) and close < smcLow and bullBias
bearCHoCH = showSMC and not na(smcHigh) and close > smcHigh and bearBias
if bullBOS and showLabels
f_callout(bar_index, high, "BOS", color.new(color.aqua, 0), color.white, label.style_label_up)
if bearBOS and showLabels
f_callout(bar_index, low, "BOS", color.new(color.orange, 0), color.white, label.style_label_down)
if bullCHoCH and showLabels
f_callout(bar_index, low, "CHOCH", color.new(color.green, 0), color.white, label.style_label_down)
if bearCHoCH and showLabels
f_callout(bar_index, high, "CHOCH", color.new(color.red, 0), color.white, label.style_label_up)
//====================
// Premium / Discount
//====================
midSMC = na(smcHigh) or na(smcLow) ? na : (smcHigh + smcLow) / 2.0
var box pdBox = na
if showPD and not na(midSMC) and barstate.islast and not na(smcHigh) and not na(smcLow)
if na(pdBox)
pdBox := box.new(bar_index - 25, smcHigh, bar_index + 20, smcLow)
box.set_left(pdBox, bar_index - 25)
box.set_right(pdBox, bar_index + 20)
box.set_top(pdBox, smcHigh)
box.set_bottom(pdBox, smcLow)
box.set_bgcolor(pdBox, color.new(color.gray, 92))
box.set_border_color(pdBox, color.new(color.gray, 70))
//====================
// Entry zone
//====================
bullFVG = low > high
bearFVG = high < low
freshBullFVG = bullFVG and not bullFVG
freshBearFVG = bearFVG and not bearFVG
var box zoneBox = na
if showZone and freshBullFVG
if not na(zoneBox)
box.delete(zoneBox)
zoneBox := box.new(bar_index - 2, low, bar_index + zoneExtend, high , border_color=bullBorder, bgcolor=color.new(color.lime, 78))
if showLabels
f_callout(bar_index + 1, low, "support zone", color.new(color.lime, 72), color.black, label.style_label_left)
if showZone and freshBearFVG
if not na(zoneBox)
box.delete(zoneBox)
zoneBox := box.new(bar_index - 2, low , bar_index + zoneExtend, high, border_color=bearBorder, bgcolor=color.new(color.red, 78))
if showLabels
f_callout(bar_index + 1, high, "supply zone", color.new(color.red, 72), color.white, label.style_label_left)
//====================
// Trade logic
//====================
localBull = ta.ema(close, 9) > ta.ema(close, 21)
localBear = ta.ema(close, 9) < ta.ema(close, 21)
buySignal = sessionOk and bullBias and localBull and (bullSweep or freshBullFVG)
sellSignal = sessionOk and bearBias and localBear and (bearSweep or freshBearFVG)
atrv = ta.atr(14)
entryPrice = close
slLong = math.min(nz(lastPL, low), low) - atrv * 0.25
slShort = math.max(nz(lastPH, high), high) + atrv * 0.25
tp1Long = entryPrice + atrv * 1.0
tp2Long = entryPrice + atrv * 1.8
tp3Long = entryPrice + atrv * 2.5
tp1Short = entryPrice - atrv * 1.0
tp2Short = entryPrice - atrv * 1.8
tp3Short = entryPrice - atrv * 2.5
var line slLine = na
var line tp1Line = na
var line tp2Line = na
var line tp3Line = na
if showTargets and buySignal
if not na(slLine)
line.delete(slLine)
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(tp3Line)
line.delete(tp3Line)
slLine := line.new(bar_index, slLong, bar_index + 15, slLong, extend=extend.right, color=slColor, style=line.style_dashed, width=2)
tp1Line := line.new(bar_index, tp1Long, bar_index + 15, tp1Long, extend=extend.right, color=tp1Color, style=line.style_dashed, width=2)
tp2Line := line.new(bar_index, tp2Long, bar_index + 15, tp2Long, extend=extend.right, color=tp2Color, style=line.style_dashed, width=2)
tp3Line := line.new(bar_index, tp3Long, bar_index + 15, tp3Long, extend=extend.right, color=tp3Color, style=line.style_dashed, width=2)
if showLabels
f_callout(bar_index + 2, slLong, "SL", color.new(color.red, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp1Long, "TP1", color.new(color.green, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp2Long, "TP2", color.new(color.blue, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp3Long, "TP3", color.new(color.purple, 10), color.white, label.style_label_left)
if showTargets and sellSignal
if not na(slLine)
line.delete(slLine)
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(tp3Line)
line.delete(tp3Line)
slLine := line.new(bar_index, slShort, bar_index + 15, slShort, extend=extend.right, color=slColor, style=line.style_dashed, width=2)
tp1Line := line.new(bar_index, tp1Short, bar_index + 15, tp1Short, extend=extend.right, color=tp1Color, style=line.style_dashed, width=2)
tp2Line := line.new(bar_index, tp2Short, bar_index + 15, tp2Short, extend=extend.right, color=tp2Color, style=line.style_dashed, width=2)
tp3Line := line.new(bar_index, tp3Short, bar_index + 15, tp3Short, extend=extend.right, color=tp3Color, style=line.style_dashed, width=2)
if showLabels
f_callout(bar_index + 2, slShort, "SL", color.new(color.red, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp1Short, "TP1", color.new(color.green, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp2Short, "TP2", color.new(color.blue, 10), color.white, label.style_label_left)
f_callout(bar_index + 2, tp3Short, "TP3", color.new(color.purple, 10), color.white, label.style_label_left)
// Signals
plotshape(buySignal, style=shape.arrowup, location=location.belowbar, color=color.lime, size=size.small, text="BUY")
plotshape(sellSignal, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text="SELL") Indicator

ATK/DEF Support Resistance S/R Channel Rating EngineATK/DEF Support Resistance S/R Channel Rating Engine is a mu-factor support and resistance evaluat framework designed to analyze historl pric behavior and structural market reactions.
Unlike traditional support and resistance tools that mainly focus on previous reaction leve, this indicator focuses on evaluating the quality, strength, and structural condition of pric-based support and resistance areas through multiple analytical factors.
The engine combines three independent evaluat components into a unified structural rating model:
1. Historical Power Analysis
The Historical Power module evalua the histor significance of swing-based pric areas by analyzing pric movement intensity, volatility conditions, volume relationship, and histor market activity.
This component measures how strongly the market previously interacted with a specific pric area and provides a calcula power measurement based on histor characteristics.
2. Attenuation Index
The Attenuation Index evalua the gradual reduction of historl influence over time.
Pric structures can change as market conditions develop. This module evalua the effect of time distance and price displacement from the original formation area to describe the evolving structural condition of historical support and resistance zones.
3. Swirl Index
The Swirl Index evaluates surrounding market activity and volatility characteristics.
By analyzing recent pric range behavior and volatility changes, this component provides additional context regarding market activity around identified structural areas.
The three components are combined into a comprehensive rating framework that evalua support and resistance quality from mult dimensions instead of relying on a single histo reaction point.
The indicator processes swing-based structural areas, stores historical pric information, evaluates repeated interactions, and displays channel structures based on calculated structural measurements.
Key features:
• Multi-factor support and resistance evalua
• Histori pric reaction analysis
• Swing structure based channel visualization
• Power measurement based on pric and volume characteristics
• Structural weaken evaluati through attenuation analysis
• Market activity measurement through volatility analysis
• Mult-leve rating classification system
• Support and resistance behavior analysis
• Channel condition monitoring
• Detailed analytical table displaying calcula metrics
This indicator is designed as a market structure analysis tool for stud the relationship between histori pric behavior, structural strength, and chang market conditions.
The calcula focus on quantitative evalua of pric areas and structural characteristics rather than simple horizontal leve detection.
All displayed values represent analytical measurements derived from histor market dat and are intended for resea and technical analysis purposes. Indicator

Indicator

V20 StrategyCore concept: This strategy trades the "V20" pattern, a run of consecutive green candles that gains at least 20% (configurable) from the low of the run to the high, followed by a pullback entry near the run's base.
Pattern detection:
- Counts consecutive green candles (close > open, or close == open with open > previous low)
- Once a run ends (a red candle appears), it checks whether that just-finished run gained at least `minGainPct` (default 20%) from its lowest low to its highest high, and lasted at least `minRunLen` candles (default 2)
- If both conditions are met, a signal fires on the last green candle of that run
Entry logic:
- Places a limit buy order at the base (lowest low) of the qualifying run, sized using a fixed cash amount per trade (`cashPerTrade`, default 10,000) rather than a percent of equity, so quantity is always calculated the same way regardless of how many trades are open
- Pyramiding is set very high (1000) and every signal creates a brand new, independently tracked trade with its own ID, so multiple pending or open V20 setups can exist at once without blocking each other
Exit logic:
- Each filled trade exits with its own limit order at the top (highest high) of its run, using an explicit quantity so it can only close its own position
- Pending (unfilled) orders never expire or get invalidated. They stay live indefinitely until price pulls back to the base and fills
DMA filter:
- Optionally requires the run's base to be below a moving average (default 200-period SMA) before a trade is allowed
- A built-in exempt list of large-cap/blue-chip NSE tickers skips this DMA check entirely
- A manual override dropdown lets you force the DMA filter on or off for all stocks, ignoring the exempt list
Visuals:
- Plots the DMA line
- Gray triangle marks a valid V20 pattern that got filtered out by the DMA rule
- Green triangle marks a valid V20 pattern that actually resulted in a trade
- Once a trade fills, it draws dashed BUY/TARGET lines and labels at the base and top prices, extending forward while the trade is open
Stats table: Shows open trade count, closed trade count, average bars held, and average profit per closed trade, updated on the last bar. Strategy

Indicator

Indicator

Pocket Pivot (Kacher/Morales) - tez//@version=6
indicator("Pocket Pivot (Kacher/Morales) - Custom", overlay=true)
// ─────────────────────────────────────
// SETTINGS
// ─────────────────────────────────────
smaLength = input.int(
10,
title="SMA Length",
minval=1
)
maxOffset = input.float(
4.0,
title="Max % Offset from SMA",
minval=0.1,
step=0.1
)
lookback = input.int(
10,
title="Lookback Period (Trading Days)",
minval=1
)
// ─────────────────────────────────────
// SMA
// ─────────────────────────────────────
smaValue = ta.sma(close, smaLength)
// ─────────────────────────────────────
// BUY / SELL VOLUME
// Approximation:
// Bullish candle = Buy Volume
// Bearish candle = Sell Volume
// ─────────────────────────────────────
buyVolume = close > open ? volume : 0.0
sellVolume = close < open ? volume : 0.0
// ─────────────────────────────────────
// HIGHEST SELL VOLUME
// Previous 10 candles only
// Current candle is NOT included
// ─────────────────────────────────────
highestSellVolume = ta.highest(
sellVolume ,
lookback
)
// ─────────────────────────────────────
// PRICE DISTANCE FROM SMA
// ─────────────────────────────────────
percentOffset = math.abs(
close - smaValue
) / smaValue * 100
// Price is close enough to SMA
priceNearSMA = percentOffset <= maxOffset
// ─────────────────────────────────────
// POCKET PIVOT CONDITION
// ─────────────────────────────────────
volumeCondition = buyVolume > highestSellVolume
pocketPivot = volumeCondition and priceNearSMA
// ─────────────────────────────────────
// PLOT SMA
// ─────────────────────────────────────
plot(
smaValue,
title="SMA",
color=color.teal,
linewidth=2
)
// ─────────────────────────────────────
// MARK POCKET PIVOT
// ─────────────────────────────────────
plotshape(
pocketPivot,
title="Pocket Pivot",
style=shape.labelup,
location=location.belowbar,
color=color.green,
text="PP",
textcolor=color.white,
size=size.small
)
// ─────────────────────────────────────
// ALERT
// ─────────────────────────────────────
alertcondition(
pocketPivot,
title="Pocket Pivot Detected",
message="Pocket Pivot detected on {{ticker}}"
) Indicator

Indicator
