Search in scripts for "session"
Session P EdgesThis is an attempt to chart the primary balance ranges, however,
I have been having difficulty getting the lows to work in the graph, any assistance would be welcome
Overnight Mid-pointThis script defines a scrollable intraday session and continuously tracks the highest and lowest candle body closes made during that session, explicitly ignoring wicks. As the session develops, it plots a single horizontal midpoint line (dotted, dashed, or solid by user selection) calculated as the average of those two body closes, extending to the right from the session. For visual verification, it places exactly two dots on the chart: a green dot above the bar with the highest body close and a red dot below the bar with the lowest body close. Each new session resets the calculation, ensuring only one midpoint line and two verification markers are visible at any time. For proper use, 1800 - 0800 local time should be used (may be a couple hours off depending on your region).
DEMA200 + EMA9/20/50 + VWAP (Paul Laurent Trading)This script is an all-in-one overlay indicator for TradingView that combines a **DEMA 200**, **EMA 9/20/50**, and TradingView’s **anchored VWAP** (the same VWAP logic as the default VWAP indicator). It’s designed to keep your chart clean while showing key trend and mean-reversion references in one place.
**How to use it**
* Add it to your chart like any indicator: open **Indicators**, search the script name, and click **Add to chart**.
* Use **EMA 9/20/50** for short-term trend and pullback structure (9 = fastest, 50 = slowest).
* Use **DEMA 200** as your long-term trend filter and major dynamic support/resistance.
* Use **VWAP (middle blue line)** as the intraday “fair value” reference. Price above VWAP generally shows stronger demand; below VWAP suggests weaker demand.
* Open the script **Settings** to customize:
* **Colors** and **Strength (line width)** for each line
* VWAP **Anchor Period** (Session, Week, Month, etc.)
* Optional VWAP **Bands** (off by default, can be enabled anytime)
Last Candle + Previous Day + Pre-Market- RangeV2 of the Indicator (Test)
Last Candle + Previous Day + Pre-Market Script – Features
Last Candle Levels (Current Timeframe)
Draws horizontal lines at the high and low of the last confirmed candle.
Optional display of the candle range in percentage.
Lines automatically update and move correctly when zooming or changing the timeframe.
Previous Day High / Low
Shows the high and low of the previous trading day as dashed lines.
Lines are automatically updated and extend to the right, following the price scale.
Works on any timeframe chart.
Pre-Market High / Low
Highlights the pre-market session (default 04:00–09:30) with dotted lines.
Only calculated during intraday charts.
Lines behave exactly like the daily range lines: zoomable, shiftable, and extendable.
Optional toggle to enable or disable.
Customization Options
Colors for TF candle, daily range, and pre-market range lines.
Length of line extension to the right can be adjusted.
Toggle which levels to show: current TF, previous day, pre-market.
Stable & Safe in Pine Script v6
No repaint issues.
Works reliably on all intraday and daily charts.
Compatible with zooming and chart shifting.
If you want, I can also create a very short “user guide” with screenshots / labels in the chart, so it’s immediately clear what each toggle and line represents.
Do you want me to do that next?
DEMA200 + EMA9/20/50 + VWAP (Paul Laurent Trading)This script is an all-in-one overlay indicator for TradingView that combines a **DEMA 200**, **EMA 9/20/50**, and TradingView’s **anchored VWAP** (the same VWAP logic as the default VWAP indicator). It’s designed to keep your chart clean while showing key trend and mean-reversion references in one place.
**How to use it**
* Add it to your chart like any indicator: open **Indicators**, search the script name, and click **Add to chart**.
* Use **EMA 9/20/50** for short-term trend and pullback structure (9 = fastest, 50 = slowest).
* Use **DEMA 200** as your long-term trend filter and major dynamic support/resistance.
* Use **VWAP (middle blue line)** as the intraday “fair value” reference. Price above VWAP generally shows stronger demand; below VWAP suggests weaker demand.
* Open the script **Settings** to customize:
* **Colors** and **Strength (line width)** for each line
* VWAP **Anchor Period** (Session, Week, Month, etc.)
* Optional VWAP **Bands** (off by default, can be enabled anytime)
AMDX/XAMD indicatorThe AMDX/XAMD indicator is designed to highlight specific trading sessions on the chart using distinct colors and optional vertical lines. Users can choose between two session types, AMDX or XAMD, and customize the visual appearance of the sessions. This tool is particularly useful for traders who want to analyze market behavior during different trading periods.
Meaning of AMDX:
A: Accumulation
M: Manipulation
D: Distribution
X: Continuation Or Reversal
Features:
Session Highlighting:
AMDX Sessions: Split into four segments - A, M, D, X.
XAMD Sessions: Split into four segments - X, A, M, D.
Customizable Colors:
Choose individual colors for each session (A, M, D, X).
Adjust the transparency of the session boxes for better visual integration with the chart.
Drawing Styles:
Box Style: Draws colored boxes around the session ranges.
Line Style: Draws vertical lines at session start and end times.
Vertical Lines:
Option to enable or disable vertical lines at session boundaries.
Customizable line style: Solid, Dotted, or Dashed.
Session Labels:
Automatically labels each session for easy identification.
Customization Options:
Session Type: Select between AMDX and XAMD session types.
Colors: Set custom colors for each session and vertical lines.
Border Width: Adjust the width of the session box borders.
Transparency: Control the transparency level of the session boxes.
Drawing Style: Choose between Box and Line styles for session representation.
Vertical Lines: Enable or disable vertical lines and select the line style.
How It Works:
The indicator calculates the start and end times for each session based on the selected session type (AMDX or XAMD). It then draws either boxes or lines to highlight these sessions on the chart. The indicator also includes options to draw vertical lines at the session boundaries and labels each session with a corresponding letter (A, M, D, X).
Use Cases:
Market Session Analysis: Easily identify and analyze market behavior during different trading sessions.
Intraday Trading: Helps intraday traders to focus on specific time segments of the trading day.
Visual Segmentation: Provides a clear visual segmentation of the trading day, aiding in better decision-making.
Times for AMDX/XAMD session:
A Session: 18:00 (previous day) to 03:00 (current day)
M Session: 03:00 to 09:00
D Session: 09:00 to 12:00
X Session: 12:00 to 18:00
Time for the XAMD session :
X Session: 18:00 (previous day) to 00:00 (current day)
A Session: 00:00 to 09:00
M Session: 09:00 to 12:00
D Session: 12:00 to 18:00
Time Zone PSenseiTitle: Time Zone PS Indicator
Author: Orlando Depablos
Description:
The Time Zone PS Indicator is a tool designed to help traders visualize different trading sessions on their charts. It allows users to specify three different trading sessions: the start of the day, the London session, and the New York (NYC) session. Each session is represented by a distinct color-coded background on the chart.
Features:
Customizable Sessions: Traders can define the start time and end time for each trading session according to their preference. This flexibility enables users to tailor the indicator to their specific trading strategies session time zones.
Session Display Control: Users have the option to choose whether they want to display each trading session on the chart. This feature allows for a clutter-free charting experience, where traders can focus on the sessions relevant to their analysis.
Visual Clarity: The indicator uses distinct colors for each trading session, making it easy for traders to differentiate between different time zones. This visual clarity aids in quickly identifying key trading periods throughout the day.
How to Use:
Setting Up Sessions: Use the input options to define the start and end times for the start of the day, the London session, and the NYC session. Adjust these values based on your trading preferences and time zone.
Display Preferences: Toggle the display options to choose which trading sessions you want to visualize on the chart. This allows for a customizable charting experience tailored to your specific needs.
Interpreting the Chart: Once configured, the indicator will display color-coded backgrounds on the chart corresponding to the defined trading sessions. Interpret these visual cues to identify key trading periods and plan your trading strategies accordingly.
Originality:
The Time Zone PS Indicator adds value to the TradingView community by providing traders with a customizable tool to visualize different trading sessions. While similar indicators exist, this script offers flexibility and ease of use, enhancing the charting experience for traders across various time zones.
Use Cases:
Session-Based Analysis: Traders can use the indicator to analyze price action within specific trading sessions, such as the London or NYC session, to identify potential trading opportunities.
Time Zone Adjustment: Traders operating in different time zones can adjust the indicator settings to align with their local trading hours, ensuring accurate visualization of relevant trading sessions.
Strategy Development: The indicator can aid in the development of trading strategies that capitalize on price movements during specific trading sessions, helping traders optimize their trading performance.
Chart Visualization:
The indicator provides a clear and concise visualization of different trading sessions on the chart. Each session is represented by a color-coded background, allowing traders to quickly identify key trading periods and make informed trading decisions.
Volume Profile [Makit0]VOLUME PROFILE INDICATOR v0.5 beta
Volume Profile is suitable for day and swing trading on stock and futures markets, is a volume based indicator that gives you 6 key values for each session: POC, VAH, VAL, profile HIGH, LOW and MID levels. This project was born on the idea of plotting the RTH sessions Value Areas for /ES in an automated way, but you can select between 3 different sessions: RTH, GLOBEX and FULL sessions.
Some basic concepts:
- Volume Profile calculates the total volume for the session at each price level and give us market generated information about what price and range of prices are the most traded (where the value is)
- Value Area (VA): range of prices where 70% of the session volume is traded
- Value Area High (VAH): highest price within VA
- Value Area Low (VAL): lowest price within VA
- Point of Control (POC): the most traded price of the session (with the most volume)
- Session HIGH, LOW and MID levels are also important
There are a huge amount of things to know of Market Profile and Auction Theory like types of days, types of openings, relationships between value areas and openings... for those interested Jim Dalton's work is the way to come
I'm in my 2nd trading year and my goal for this year is learning to daytrade the futures markets thru the lens of Market Profile
For info on Volume Profile: TV Volume Profile wiki page at www.tradingview.com
For info on Market Profile and Market Auction Theory: Jim Dalton's book Mind over markets (this is a MUST)
BE AWARE: this indicator is based on the current chart's time interval and it only plots on 1, 2, 3, 5, 10, 15 and 30 minutes charts.
This is the correlation table TV uses in the Volume Profile Session Volume indicator (from the wiki above)
Chart Indicator
1 - 5 1
6 - 15 5
16 - 30 10
31 - 60 15
61 - 120 30
121 - 1D 60
This indicator doesn't follow that correlation, it doesn't get the volume data from a lower timeframe, it gets the data from the current chart resolution.
FEATURES
- 6 key values for each session: POC (solid yellow), VAH (solid red), VAL (solid green), profile HIGH (dashed silver), LOW (dashed silver) and MID (dotted silver) levels
- 3 sessions to choose for: RTH, GLOBEX and FULL
- select the numbers of sessions to plot by adding 12 hours periods back in time
- show/hide POC
- show/hide VAH & VAL
- show/hide session HIGH, LOW & MID levels
- highlight the periods of time out of the session (silver)
- extend the plotted lines all the way to the right, be careful this can turn the chart unreadable if there are a lot of sessions and lines plotted
SETTINGS
- Session: select between RTH (8:30 to 15:15 CT), GLOBEX (17:00 to 8:30 CT) and FULL (17:00 to 15:15 CT) sessions. RTH by default
- Last 12 hour periods to show: select the deph of the study by adding periods, for example, 60 periods are 30 natural days and around 22 trading days. 1 period by default
- Show POC (Point of Control): show/hide POC line. true by default
- Show VA (Value Area High & Low): show/hide VAH & VAL lines. true by default
- Show Range (Session High, Low & Mid): show/hide session HIGH, LOW & MID lines. true by default
- Highlight out of session: show/hide a silver shadow over the non session periods. true by default
- Extension: Extend all the plotted lines to the right. false by default
HOW TO SETUP
BE AWARE THIS INDICATOR PLOTS ONLY IN THE FOLLOWING CHART RESOLUTIONS: 1, 2, 3, 5, 10, 15 AND 30 MINUTES CHARTS. YOU MUST SELECT ONE OF THIS RESOLUTIONS TO THE INDICATOR BE ABLE TO PLOT
- By default this indicator plots all the levels for the last RTH session within the last 12 hours, if there is no plot try to adjust the 12 hours periods until the seesion and the periods match
- For Globex/Full sessions just select what you want from the dropdown menu and adjust the periods to plot the values
- Show or hide the levels you want with the 3 groups: POC line, VA lines and Session Range lines
- The highlight and extension options are for a better visibility of the levels as POC or VAH/VAL
THANKS TO
@watsonexchange for all the help, ideas and insights on this and the last two indicators (Market Delta & Market Internals) I'm working on my way to a 'clean chart' but for me it's not an easy path
@PineCoders for all the amazing stuff they do and all the help and tools they provide, in special the Script-Stopwatch at that was key in lowering this indicator's execution time
All the TV and Pine community, open source and shared knowledge are indeed the best way to help each other
IF YOU REALLY LIKE THIS WORK, please send me a comment or a private message and TELL ME WHAT you trade, HOW you trade it and your FAVOURITE SETUP for pulling out money from the market in a consistent basis, I'm learning to trade (this is my 2nd year) and I need all the help I can get
GOOD LUCK AND HAPPY TRADING
ICT Opening Range Projections (tristanlee85)ICT Opening Range Projections
This indicator visualizes key price levels based on ICT's (Inner Circle Trader) "Opening Range" concept. This 30-minute time interval establishes price levels that the algorithm will refer to throughout the session. The indicator displays these levels, including standard deviation projections, internal subdivisions (quadrants), and the opening price.
🟪 What It Does
The Opening Range is a crucial 30-minute window where market algorithms establish significant price levels. ICT theory suggests this range forms the basis for daily price movement.
This script helps you:
Mark the high, low, and opening price of each session.
Divide the range into quadrants (premium, discount, and midpoint/Consequent Encroachment).
Project potential price targets beyond the range using configurable standard deviation multiples .
🟪 How to Use It
This tool aids in time-based technical analysis rooted in ICT's Opening Range model, helping you observe price interaction with algorithmic levels.
Example uses include:
Identifying early structural boundaries.
Observing price behavior within premium/discount zones.
Visualizing initial displacement from the range to anticipate future moves.
Comparing price reactions at projected standard deviation levels.
Aligning price action with significant times like London or NY Open.
Note: This indicator provides a visual framework; it does not offer trade signals or interpretations.
🟪 Key Information
Time Zone: New York time (ET) is required on your chart.
Sessions: Supports multiple sessions, including NY midnight, NY AM, NY PM, and three custom timeframes.
Time Interval: Supports multi-timeframe up to 15 minutes. Best used on a 1-minute chart for accuracy.
🟪 Session Options
The Opening Range interval is configurable for up to 6 sessions:
Pre-defined ICT Sessions:
NY Midnight: 12:00 AM – 12:30 AM ET
NY AM: 9:30 AM – 10:00 AM ET
NY PM: 1:30 PM – 2:00 PM ET
Custom Sessions:
Three user-defined start/end time pairs.
This example shows a custom session from 03:30 - 04:00:
🟪 Understanding the Levels
The Opening Price is the open of the first 1-minute candle within the chosen session.
At session close, the Opening Range is calculated using its High and Low . An optional swing-based mode uses swing highs/lows for range boundaries.
The range is divided into quadrants by its midpoint ( Consequent Encroachment or CE):
Upper Quadrant: CE to high (premium).
Lower Quadrant: Low to CE (discount).
These subdivisions help visualize internal range dynamics, where price often reacts during algorithmic delivery.
🟪 Working with Ranges
By default, the range is determined by the highest high and lowest low of the 30-minute session:
A range can also be determined by the highest/lowest swing points:
Quadrants outline the premium and discount of a range that price will reference:
Small ranges still follow the same algorithmic logic, but may be deemed insignificant for one's trading. These can be filtered in the settings by specifying a minimum ticks limit. In this example, the range is 42 ticks (10.5 points) but the indicator is configured for 80 ticks (20 points). We can select which levels will plot if the range is below the limit. Here, only the 00:00 opening price is plotted:
You may opt to include the range high/low, quadrants, and projections as well. This will plot a red (configurable) range bracket to indicate it is below the limit while plotting the levels:
🟪 Price Projections
Projections extend beyond the Opening Range using standard deviations, framing the market beyond the initial session and identifying potential targets. You define the standard deviation multiples (e.g., 1.0, 1.5, 2.0).
Both positive and negative extensions are displayed, symmetrically projected from the range's high and low.
The Dynamic Levels option plots only the next projection level once price crosses the previous extreme. For example, only the 0.5 STDEV level plots until price reaches it, then the 1.0 level appears, and so on. This continues up to your defined maximum projections, or indefinitely if standard deviations are set to 0.
This example shows dynamic levels for a total of 6 sessions, only 1 of which meet a configured minimum limit of 50 ticks:
Small ranges followed by significant displacement are impacted the most with the number of levels plotted. You may hide projections when configuring the minimum ticks.
A fixed standard deviation will plot levels in both directions, regardless of the price range. Here, we plot up to 3.0 which hiding projections for small ranges:
🟪 Legal Disclaimer
This indicator is provided for informational and educational purposes only. It is not financial advice, and should not be construed as a recommendation to buy or sell any financial instrument. Trading involves substantial risk, and you could lose a significant amount of money. Past performance is not indicative of future results. Always consult with a qualified financial professional before making any trading or investment decisions. The creators and distributors of this indicator assume no responsibility for your trading outcomes.
Custom V2 KillZone US / FVG / EMAThis indicator is designed for traders looking to analyze liquidity levels, opportunity zones, and the underlying trend across different trading sessions. Inspired by the ICT methodology, this tool combines analysis of Exponential Moving Averages (EMA), session management, and Fair Value Gap (FVG) detection to provide a structured and disciplined approach to trading effectively.
Indicator Features
Identifying the Underlying Trend with Two EMAs
The indicator uses two EMAs on different, customizable timeframes to define the underlying trend:
EMA1 (default set to a daily timeframe): Represents the primary underlying trend.
EMA2 (default set to a 4-hour timeframe): Helps identify secondary corrections or impulses within the main trend.
These two EMAs allow traders to stay aligned with the market trend by prioritizing trades in the direction of the moving averages. For example, if prices are above both EMAs, the trend is bullish, and long trades are favored.
Analysis of Market Sessions
The indicator divides the day into key trading sessions:
Asian Session
London Session
US Pre-Open Session
Liquidity Kill Session
US Kill Zone Session
Each session is represented by high and low zones as well as mid-lines, allowing traders to visualize liquidity levels reached during these periods. Tracking the price levels in different sessions helps determine whether liquidity levels have been "swept" (taken) or not, which is essential for ICT methodology.
Liquidity Signal ("OK" or "STOP")
A specific signal appears at the end of the "Liquidity Kill" session (just before the "US Kill Zone" session):
"OK" Signal: Indicates that liquidity conditions are favorable for trading the "US Kill Zone" session. This means that liquidity levels have been swept in previous sessions (Asian, London, US Pre-Open), and the market is ready for an opportunity.
"STOP" Signal: Indicates that it is not favorable to trade the "US Kill Zone" session, as certain liquidity conditions have not been met.
The "OK" or "STOP" signal is based on an analysis of the high and low levels from previous sessions, allowing traders to ensure that significant liquidity zones have been reached before considering positions in the "Kill Zone".
Detection of Fair Value Gaps (FVG) in the US Kill Zone Session
When an "OK" signal is displayed, the indicator identifies Fair Value Gaps (FVG) during the "US Kill Zone" session. These FVGs are areas where price may return to fill an "imbalance" in the market, making them potential entry points.
Bullish FVG: Detected when there is a bullish imbalance, providing a buying opportunity if conditions align with the underlying trend.
Bearish FVG: Detected when there is a bearish imbalance, providing a selling opportunity in the trend direction.
FVG detection aligns with the ICT Silver Bullet methodology, where these imbalance zones serve as probable entry points during the "US Kill Zone".
How to Use This Indicator
Check the Underlying Trend
Before trading, observe the two EMAs (daily and 4-hour) to understand the general market trend. Trades will be prioritized in the direction indicated by these EMAs.
Monitor Liquidity Signals After the Asian, London, and US Pre-Open Sessions
The high and low levels of each session help determine if liquidity has already been swept in these areas. At the end of the "Liquidity Kill" session, an "OK" or "STOP" label will appear:
"OK" means you can look for trading opportunities in the "US Kill Zone" session.
"STOP" means it is preferable not to take trades in the "US Kill Zone" session.
Look for Opportunities in the US Kill Zone if the Signal is "OK"
When the "OK" label is present, focus on the "US Kill Zone" session. Use the Fair Value Gaps (FVG) as potential entry points for trades based on the ICT methodology. The identified FVGs will appear as colored boxes (bullish or bearish) during this session.
Use ICT Methodology to Manage Your Trades
Follow the FVGs as potential reversal zones in the direction of the trend, and manage your positions according to your personal strategy and the rules of the ICT Silver Bullet method.
Customizable Settings
The indicator includes several customization options to suit the trader's preferences:
EMA: Length, source (close, open, etc.), and timeframe.
Market Sessions: Ability to enable or disable each session, with color and line width settings.
Liquidity Signals: Customization of colors for the "OK" and "STOP" labels.
FVG: Option to display FVGs or not, with customizable colors for bullish and bearish FVGs, and the number of bars for FVG extension.
-------------------------------------------------------------------------------------------------------------
Cet indicateur est conçu pour les traders souhaitant analyser les niveaux de liquidité, les zones d’opportunité, et la tendance de fond à travers différentes sessions de trading. Inspiré de la méthodologie ICT, cet outil combine l'analyse des moyennes mobiles exponentielles (EMA), la gestion des sessions de marché, et la détection des Fair Value Gaps (FVG), afin de fournir une approche structurée et disciplinée pour trader efficacement.
Opening Range Breakout with Multi-Timeframe Liquidity]═══════════════════════════════════════
OPENING RANGE BREAKOUT WITH MULTI-TIMEFRAME LIQUIDITY
═══════════════════════════════════════
A professional Opening Range Breakout (ORB) indicator enhanced with multi-timeframe liquidity detection, trading session visualization, volume analysis, and trend confirmation tools. Designed for intraday trading with comprehensive alert system.
───────────────────────────────────────
WHAT THIS INDICATOR DOES
───────────────────────────────────────
This indicator combines multiple trading concepts:
- Opening Range Breakout (ORB) - Customizable time period detection with automatic high/low identification
- Multi-Timeframe Liquidity - HTF (Higher Timeframe) and LTF (Lower Timeframe) key level detection
- Trading Sessions - Tokyo, London, New York, and Sydney session visualization
- Volume Analysis - Volume spike detection and strength measurement
- Multi-Timeframe Confirmation - Trend bias from higher timeframes
- EMA Integration - Trend filter and dynamic support/resistance
- Smart Alerts - Quality-filtered breakout notifications
───────────────────────────────────────
HOW IT WORKS
───────────────────────────────────────
OPENING RANGE BREAKOUT (ORB):
Concept:
The Opening Range is a period at the start of a trading session where price establishes an initial high and low. Breakouts beyond this range often indicate the direction of the day's trend.
Detection Method:
- Default: 15-minute opening range (configurable)
- Custom Range: Set specific session times with timezone support
- Automatically identifies ORH (Opening Range High) and ORL (Opening Range Low)
- Tracks ORB mid-point for reference
Range Establishment:
1. Session starts (or custom time begins)
2. Tracks highest high and lowest low during the period
3. Range confirmed at end of opening period
4. Levels extend throughout the session
Breakout Detection:
- Bullish Breakout: Close above ORH
- Bearish Breakout: Close below ORL
- Mid-point acts as bias indicator
Visual Display:
- Shaded box during range formation
- Horizontal lines for ORH, ORL, and mid-point
- Labels showing level values
- Color-coded fills based on selected method
Fill Color Methods:
1. Session Comparison:
- Green: Current OR mid > Previous OR mid
- Red: Current OR mid < Previous OR mid
- Gray: Equal or first session
- Shows day-over-day momentum
2. Breakout Direction (Recommended):
- Green: Price currently above ORH (bullish breakout)
- Red: Price currently below ORL (bearish breakout)
- Gray: Price inside range (no breakout)
- Real-time breakout status
MULTI-TIMEFRAME LIQUIDITY:
Two-Tier System for comprehensive level identification:
HTF (Higher Timeframe) Key Liquidity:
- Default: 4H timeframe (configurable to Daily, Weekly)
- Identifies major institutional levels
- Uses pivot detection with adjustable parameters
- Suitable for swing highs/lows where large orders rest
LTF (Lower Timeframe) Key Liquidity:
- Default: 1H timeframe (configurable)
- Provides precision entry/exit levels
- Finer granularity for intraday trading
- Captures minor swing points
Calculation Method:
- Pivot high/low detection algorithm
- Configurable left bars (lookback) and right bars (confirmation)
- Timeframe multiplier for accurate multi-timeframe detection
- Automatic level extension
Mitigation System:
- Tracks when levels are swept (broken)
- Configurable mitigation type: Wick or Close-based
- Option to remove or show mitigated levels
- Display limit prevents chart clutter
Asset-Specific Optimization:
The indicator includes quick reference settings for different assets:
- Major Forex (EUR/USD, GBP/USD): Default settings optimal
- Crypto (BTC/ETH): Left=12, Right=4, Display=7
- Gold: HTF=1D, Left=20
TRADING SESSIONS:
Four Major Sessions with Full Customization:
Tokyo Session:
- Default: 04:00-13:00 UTC+4
- Asian trading hours
- Often sets daily range
London Session:
- Default: 11:00-20:00 UTC+4
- Highest liquidity period
- Major institutional activity
New York Session:
- Default: 16:00-01:00 UTC+4
- US market hours
- High-impact news events
Sydney Session:
- Default: 01:00-10:00 UTC+4
- Earliest Asian activity
- Lower volatility
Session Features:
- Shaded background boxes
- Session name labels
- Optional open/close lines
- Session high/low tracking with colored lines
- Each session has independent color settings
- Fully customizable times and timezones
VOLUME ANALYSIS:
Volume-Based Trade Confirmation:
Volume MA:
- Configurable period (default: 20)
- Establishes average volume baseline
- Used for spike detection
Volume Spike Detection:
- Identifies when volume exceeds MA * multiplier
- Default: 1.5x average volume
- Confirms breakout strength
Volume Strength Measurement:
- Calculates current volume as percentage of average
- Shows relative volume intensity
- Used in alert quality filtering
High Volume Bars:
- Identifies bars above 50th percentile
- Additional confirmation layer
- Indicates institutional participation
MULTI-TIMEFRAME CONFIRMATION:
Trend Bias from Higher Timeframes:
HTF 1 (Trend):
- Default: 1H timeframe
- Uses EMA to determine intermediate trend
- Compares current timeframe EMA to HTF EMA
HTF 2 (Bias):
- Default: 4H timeframe
- Uses 50 EMA for longer-term bias
- Confirms overall market direction
Bias Classifications:
- Bullish Bias: HTF close > HTF 50 EMA AND Current EMA > HTF1 EMA
- Bearish Bias: HTF close < HTF 50 EMA AND Current EMA < HTF1 EMA
- Neutral Bias: Mixed signals between timeframes
EMA Stack Analysis:
- Compares EMA alignment across timeframes
- +1: Bullish stack (lower TF EMA > higher TF EMA)
- -1: Bearish stack (lower TF EMA < higher TF EMA)
- 0: Neutral/crossed
Usage:
- Filters false breakouts
- Confirms trend direction
- Improves trade quality
EMA INTEGRATION:
Dynamic EMA for Trend Reference:
Features:
- Configurable period (default: 20)
- Customizable color and width
- Acts as dynamic support/resistance
- Trend filter for ORB trades
Application:
- Above EMA: Favor long breakouts
- Below EMA: Favor short breakouts
- EMA cross: Potential trend change
- Distance from EMA: Momentum gauge
SMART ALERT SYSTEM:
Quality-Filtered Breakout Notifications:
Alert Types:
1. Standard ORB Breakout
2. High Quality ORB Breakout
Quality Criteria:
- Volume Confirmation: Volume > 1.2x average
- MTF Confirmation: Bias aligned with breakout direction
Standard Alert:
- Basic breakout detection
- Price crosses ORH or ORL
- Icon: 🚀 (bullish) or 🔻 (bearish)
High Quality Alert:
- Both volume AND MTF confirmed
- Stronger probability setup
- Icon: 🚀⭐ (bullish) or 🔻⭐ (bearish)
Alert Information Includes:
- Alert quality rating
- Breakout level and current price
- Volume strength percentage (if enabled)
- MTF bias status (if enabled)
- Recommended action
One Alert Per Bar:
- Prevents alert spam
- Uses flag system to track sent alerts
- Resets on new ORB session
───────────────────────────────────────
HOW TO USE
───────────────────────────────────────
OPENING RANGE SETUP:
Basic Configuration:
1. Select time period for opening range (default: 15 minutes)
2. Choose fill color method (Breakout Direction recommended)
3. Enable historical data display if needed
Custom Range (Advanced):
1. Enable Custom Range toggle
2. Set specific session time (e.g., 0930-0945)
3. Select appropriate timezone
4. Useful for specific market opens (NYSE, LSE, etc.)
LIQUIDITY LEVELS SETUP:
Quick Configuration by Asset:
- Forex: Use default settings (Left=15, Right=5)
- Crypto: Set Left=12, Right=4, Display=7
- Gold: Set HTF=1D, Left=20
HTF Liquidity:
- Purpose: Major support/resistance levels
- Recommended: 4H for day trading, 1D for swing trading
- Use as profit targets or reversal zones
LTF Liquidity:
- Purpose: Entry/exit refinement
- Recommended: 1H for day trading, 4H for swing trading
- Use for position management
Mitigation Settings:
- Wick-based: More sensitive (default)
- Close-based: More conservative
- Remove or Show mitigated levels based on preference
TRADING SESSIONS SETUP:
Enable/Disable Sessions:
- Master toggle for all sessions
- Individual session controls
- Show/hide session names
Session High/Low Lines:
- Enable to see session extremes
- Each session has custom colors
- Useful for range trading
Customization:
- Adjust session times for your broker
- Set timezone to match your location
- Customize colors for visibility
VOLUME ANALYSIS SETUP:
Enable Volume Analysis:
1. Toggle on Volume Analysis
2. Set MA length (20 recommended)
3. Adjust spike multiplier (1.5 typical)
Usage:
- Confirm breakouts with volume
- Identify climactic moves
- Filter false signals
MULTI-TIMEFRAME SETUP:
HTF Selection:
- HTF 1 (Trend): 1H for day trading, 4H for swing
- HTF 2 (Bias): 4H for day trading, 1D for swing
Interpretation:
- Trade only with bias alignment
- Neutral bias: Be cautious
- Bias changes: Potential reversals
EMA SETUP:
Configuration:
- Period: 20 for responsive, 50 for smoother
- Color: Choose contrasting color
- Width: 1-2 for visibility
Usage:
- Filter trades: Long above, Short below
- Dynamic support/resistance reference
- Trend confirmation
ALERT SETUP:
TradingView Alert Creation:
1. Enable alerts in indicator settings
2. Enable ORB Breakout Alerts
3. Right-click chart → Add Alert
4. Select this indicator
5. Choose "Any alert() function call"
6. Configure delivery method (mobile, email, webhook)
Alert Filtering:
- All alerts include quality rating
- High Quality alerts = Volume + MTF confirmed
- Standard alerts = Basic breakout only
───────────────────────────────────────
TRADING STRATEGIES
───────────────────────────────────────
CLASSIC ORB STRATEGY:
Setup:
1. Wait for opening range to complete
2. Price breaks and closes above ORH or below ORL
3. Volume > average (if enabled)
4. MTF bias aligned (if enabled)
Entry:
- Bullish: Buy on break above ORH
- Bearish: Sell on break below ORL
- Consider retest entries for better risk/reward
Stop Loss:
- Bullish: Below ORL or range mid-point
- Bearish: Above ORH or range mid-point
- Adjust based on volatility
Targets:
- Initial: Range width extension (ORH + range width)
- Secondary: HTF liquidity levels
- Final: Session high/low or major support/resistance
ORB + LIQUIDITY CONFLUENCE:
Enhanced Setup:
1. Opening range established
2. HTF liquidity level near or beyond ORH/ORL
3. Breakout occurs with volume
4. Price targets the liquidity level
Entry:
- Enter on ORB breakout
- Target the HTF liquidity level
- Use LTF liquidity for position management
Management:
- Partial profits at ORB + range width
- Move stop to breakeven at LTF liquidity
- Final exit at HTF liquidity sweep
ORB REJECTION STRATEGY (Counter-Trend):
Setup:
1. Price breaks above ORH or below ORL
2. Weak volume (below average)
3. MTF bias opposite to breakout
4. Price closes back inside range
Entry:
- Failed bullish break: Short below ORH
- Failed bearish break: Long above ORL
Stop Loss:
- Beyond the failed breakout level
- Or beyond session extreme
Target:
- Opposite end of opening range
- Range mid-point for partial profit
SESSION-BASED ORB TRADING:
Tokyo Session:
- Typically narrower ranges
- Good for range trading
- Wait for London open breakout
London Session:
- Highest volume and volatility
- Strong ORB setups
- Major liquidity sweeps common
New York Session:
- Strong trending moves
- News-driven volatility
- Good for momentum trades
Sydney Session:
- Quieter conditions
- Suitable for range strategies
- Sets up Tokyo session
EMA-FILTERED ORB:
Rules:
- Only take bullish breaks if price > EMA
- Only take bearish breaks if price < EMA
- Ignore counter-trend breaks
Benefits:
- Reduces false signals
- Aligns with larger trend
- Improves win rate
───────────────────────────────────────
CONFIGURATION GUIDE
───────────────────────────────────────
OPENING RANGE SETTINGS:
Time Period:
- 15 min: Standard for most markets
- 30 min: Wider range, fewer breakouts
- 60 min: For slower markets or swing trades
Custom Range:
- Use for specific market opens
- NYSE: 0930-1000 EST
- LSE: 0800-0830 GMT
- Set timezone to match exchange
Historical Display:
- Enable: See all previous session data
- Disable: Cleaner chart, current session only
LIQUIDITY SETTINGS:
Left Bars (5-30):
- Lower: More frequent, sensitive levels
- Higher: Fewer, more significant levels
- Recommended: 15 for most markets
Right Bars (1-25):
- Confirmation period
- Higher: More reliable, less frequent
- Recommended: 5 for balance
Display Limit (1-20):
- Number of active levels shown
- Higher: More context, busier chart
- Recommended: 7 for clarity
Extension Options:
- Short: Levels visible near formation
- Current: Extended to current bar (recommended)
- Max: Extended indefinitely
VOLUME SETTINGS:
MA Length (5-50):
- Shorter: More responsive to spikes
- Longer: Smoother baseline
- Recommended: 20 for balance
Spike Multiplier (1.0-3.0):
- Lower: More sensitive spike detection
- Higher: Only extreme spikes
- Recommended: 1.5 for day trading
MULTI-TIMEFRAME SETTINGS:
HTF 1 (Trend):
- 5m chart: Use 15m or 1H
- 15m chart: Use 1H or 4H
- 1H chart: Use 4H or 1D
HTF 2 (Bias):
- One level higher than HTF 1
- Provides longer-term context
- Don't use same as HTF 1
EMA SETTINGS:
Length:
- 20: Responsive, more signals
- 50: Smoother, stronger filter
- 200: Long-term trend only
Style:
- Choose contrasting color
- Width 1-2 for visibility
- Match your trading style
───────────────────────────────────────
BEST PRACTICES
───────────────────────────────────────
Chart Timeframe Selection:
- ORB Trading: Use 5m or 15m charts
- Session Review: Use 1H or 4H charts
- Swing Trading: Use 1H or 4H charts
Quality Over Quantity:
- Wait for high-quality alerts (volume + MTF)
- Avoid trading every breakout
- Focus on confluence setups
Risk Management:
- Position size based on range width
- Wider ranges = smaller positions
- Use stop losses always
- Take partial profits at targets
Market Conditions:
- Best results in trending markets
- Reduce position size in choppy conditions
- Consider session overlaps for volatility
- Avoid trading near major news if inexperienced
Continuous Improvement:
- Track win rate by session
- Note which confluence factors work best
- Adjust settings based on market volatility
- Review performance weekly
───────────────────────────────────────
PERFORMANCE OPTIMIZATION
───────────────────────────────────────
This indicator is optimized with:
- max_bars_back declarations for efficient processing
- Conditional calculations based on enabled features
- Proper memory management for drawing objects
- Minimal recalculation on each bar
Best Practices:
- Disable unused features (sessions, MTF, volume)
- Limit historical display to reduce rendering
- Use appropriate timeframe for your strategy
- Clear old drawing objects periodically
───────────────────────────────────────
EDUCATIONAL DISCLAIMER
───────────────────────────────────────
This indicator combines established trading concepts:
- Opening Range Breakout theory (price action)
- Liquidity level detection (pivot analysis)
- Session-based trading (time-of-day patterns)
- Volume analysis (confirmation technique)
- Multi-timeframe analysis (trend alignment)
All calculations use standard technical analysis methods:
- Pivot high/low detection algorithms
- Moving averages for trend and volume
- Session time filtering
- Timeframe security functions
The indicator identifies potential trading setups but does not predict future price movements. Success requires proper application within a complete trading strategy including risk management, position sizing, and market context.
───────────────────────────────────────
USAGE DISCLAIMER
───────────────────────────────────────
This tool is for educational and analytical purposes. Opening Range Breakout trading involves substantial risk. The alert system and quality filters are designed to identify potential setups but do not guarantee profitability. Always conduct independent analysis, use proper risk management, and never risk capital you cannot afford to lose. Past performance does not indicate future results. Trading intraday breakouts requires experience and discipline.
───────────────────────────────────────
CREDITS & ATTRIBUTION
───────────────────────────────────────
ORIGINAL SOURCE:
This indicator builds upon concepts from LuxAlgo's-ORB
4H Candle Curves4H Candle Curves - Detailed User Guide
OVERVIEW
This indicator reveals curve vs continuation behavior in NQ Futures by analyzing how price responds after breaking the first-hour range. Based on 10+ years of statistical analysis (2013-2025, 3,136+ trading days), it identifies which 4-hour sessions exhibit mean reversion (curve) behavior versus trend continuation when Q2 (second hour) breaks Q1 (first hour) extremes.
⚠️ IMPORTANT: This indicator is specifically designed for NQ FUTURES ONLY. All curve probabilities and statistics were derived from a decade-long dataset of NQ 1-minute bars. Using this on other instruments will produce inaccurate results.
CORE CONCEPT: THE CURVE
What is a "Curve"?
A curve occurs when price breaks out of the first hour's range in Q2 (hour 2), but then reverses direction in the second half (Q3+Q4) to make a new extreme on the opposite side.
Curve Example (Upside Break → Downside Reversal):
Q1 (Hour 1): Price establishes range 25,000 - 25,050
Q2 (Hour 2): Price breaks ABOVE Q1 high, reaches 25,100
Q3+Q4 (Hours 3-4): Price curves back down, makes new LOW below 25,000
Result: Q2 broke high, but second half curved back to make new low below Q1 = CURVE
What is "Continuation"?
Continuation occurs when Q2 breaks Q1 range and the second half extends further in the same direction.
Continuation Example (Upside Break → Further Upside):
Q1 (Hour 1): Price establishes range 25,000 - 25,050
Q2 (Hour 2): Price breaks ABOVE Q1 high, reaches 25,100
Q3+Q4 (Hours 3-4): Price continues higher, makes new HIGH above 25,100
Result: Q2 broke high, second half made new high above Q2 = CONTINUATION
THE CRITICAL DISCOVERY: 6AM IS THE CURVE SESSION
Curve Probabilities by Session:
When Q2 Breaks Q1 HIGH:
6AM: 60.6% curve (new low below Q1) | 38.5% continuation
2AM: 38.4% curve | 46.7% continuation (balanced)
10AM: 17.2% curve | 60.4% continuation ← STRONG continuation bias
6PM: 29.6% curve | 59.0% continuation
10PM: 27.5% curve | 55.1% continuation
When Q2 Breaks Q1 LOW:
6AM: 64.4% curve (new high above Q1) | 35.0% continuation ← HIGHEST curve
2AM: 42.8% curve | 43.3% continuation (balanced)
10AM: 16.7% curve | 51.6% continuation ← STRONG continuation bias
6PM: 33.7% curve | 51.1% continuation
10PM: 33.1% curve | 48.6% continuation
Key Insight:
6AM is THE ONLY SESSION with >60% curve probability in both directions. This makes it a uniquely exploitable mean reversion session. When Q2 breaks Q1 range during 6AM, expect the second half to curve back 60-64% of the time.
10AM shows the opposite: Strong continuation bias (60% when Q2 breaks high, 52% when Q2 breaks low). 10AM breakouts tend to follow through.
HOW IT WORKS: THE QUARTER SYSTEM
The Six 4-Hour Candles (EST):
Each trading day (6pm-5pm) is divided into six 4-hour periods:
6PM (18:00-22:00) - Evening/Globex open | Blue box
10PM (22:00-02:00) - Asia session | Purple box
2AM (02:00-06:00) - Early London | Orange box
6AM (06:00-10:00) - Late London + NY Open | Green box ← THE CURVE SESSION
10AM (10:00-14:00) - NY Morning | Red box ← THE CONTINUATION SESSION
2PM (14:00-17:00) - NY Afternoon | Yellow box (3 hours only)
The Four Quarters:
Each 4-hour candle (except 2PM) is divided into four 1-hour quarters:
Q1 (Hour 1, minutes 0-60): Establishes initial range
Q2 (Hour 2, minutes 60-120): Tests Q1 range - breaks or holds?
Q3 (Hour 3, minutes 120-180): Second half begins
Q4 (Hour 4, minutes 180-240): Second half completes
2PM candle only has 3 hours (14:00-17:00), so quarters are adjusted accordingly.
The Three-Step Analysis:
STEP 1: Q1 Establishes Range
The first hour sets the high and low for the session. This becomes the reference range.
STEP 2: Q2 Break Detection
The indicator monitors whether Q2 (hour 2) breaks above Q1 high or below Q1 low.
STEP 3: Second Half Response
Once Q2 breaks Q1 range, the indicator tracks what happens in Q3+Q4:
Does price CURVE back to make new extreme on opposite side?
Does price CONTINUE to make new extreme in same direction?
Or does price stay within the established range?
VISUAL ELEMENTS EXPLAINED
1. 4-Hour Candle Boxes
Colored boxes display the high-to-low range of each 4H candle:
Blue = 6PM (evening session start)
Purple = 10PM (Asia session)
Orange = 2AM (early London)
Green = 6AM ← THE CURVE SESSION (watch for mean reversion)
Red = 10AM ← THE CONTINUATION SESSION (trend follow-through)
Yellow = 2PM (afternoon close, 3 hours only)
2. Quarter Separator Lines
Vertical dotted lines mark the boundaries between quarters (1H, 2H, 3H marks). This helps you see:
When Q1 ends (after 1 hour)
When Q2 ends / second half begins (after 2 hours)
When Q3 ends (after 3 hours)
3. Candle Name Labels
At the 2-hour mark (Q2/Q3 boundary), a label shows:
Candle name (e.g., "6am")
Directional indicator:
🔼 = Q2 broke Q1 HIGH
🔽 = Q2 broke Q1 LOW
⚠️ = Q2 broke BOTH Q1 high and low (extended range)
No symbol = Q2 stayed within Q1 range
THE LIVE STATUS TABLE
Located in your chosen corner (default: bottom-right), this table shows real-time analysis of the current 4H candle.
Header Row:
"LIVE: CANDLE" - Shows which 4H session you're currently in
Quarter Row:
"Quarter: Q1/Q2/Q3/Q4 (Hour X)" - Shows which quarter you're currently forming
STATUS Section:
The status updates dynamically based on what has happened:
During Q1-Q2 (First Half):
"⏳ Q1 Building..." - First hour forming, range being established
"⏳ Q2 Building..." - Second hour in progress, Q2 within Q1 range so far
"🔼 Q2 Broke Q1 HIGH" - Q2 has broken above Q1 high
"🔽 Q2 Broke Q1 LOW" - Q2 has broken below Q1 low
"⚠️ Q2 Broke BOTH Q1 Extremes" - Q2 extended range in both directions
During Q3-Q4 (Second Half):
"✓ CURVE CONFIRMED" - Q2 broke one direction, second half reversed to opposite side
"✓ CONTINUATION CONFIRMED" - Q2 broke one direction, second half extended further same direction
"⏳ 2nd Half In Progress" - Q2 broke Q1, waiting to see if curve or continuation
"📊 No Q2 Break Occurred" - Q2 stayed within Q1 range (no curve/continuation setup)
EXPECTATION Section:
Shows the probabilities based on the current state:
When Q2 breaks Q1 high in 6AM:
EXPECT 2nd half:
CURVE (low < Q1): 60.6%
CONT (high > Q2): 38.5%
This tells you there's a 60.6% chance the second half will curve back to make a new low below Q1, versus 38.5% chance it continues higher above Q2.
When curve/continuation is confirmed:
Q2 broke high → 2nd half made new LOW below Q1
Curve: 60.6%
Shows what actually happened and the historical probability.
Color Coding:
Purple background = Curve confirmed (mean reversion occurred)
Green background = Continuation confirmed (upside extension)
Red background = Continuation confirmed (downside extension)
Blue background = Second half in progress, watching
Yellow background = No Q2 break (no setup)
Gray background = Still in first half, building
THE CURVE REFERENCE TABLE
Located in your chosen corner (default: bottom-left), this table provides a quick reference for all sessions.
Table Structure:
TOP SECTION: "When Q2 BREAKS Q1 HIGH"
BOTTOM SECTION: "When Q2 BREAKS Q1 LOW"
How to Read:
"Curve" column = % of time second half makes new extreme on OPPOSITE side
"Cont" column = % of time second half makes new extreme in SAME direction
"Winner" column = Which behavior is more likely
Purple highlight = Curve is the winner (higher %)
Blue highlight = Continuation is the winner
🔥 symbol = Strong edge (>60%)
Quick Reference Usage:
You're in 10AM session, Q2 just broke Q1 high. Look at top section, 10AM row:
Curve: 17.2%
Cont: 60.4%
Winner: CONT
Interpretation: 10AM breakouts tend to follow through. Only 17% chance of curving back. Trade with the break, not against it.
PRACTICAL TRADING EXAMPLES
Example 1: Perfect 6AM Curve Setup
Scenario:
6AM candle in progress
7:00 AM: Q1 ends, range is 18,000 - 18,050
7:30 AM: Price breaks above 18,050, reaches 18,075 (Q2 broke Q1 high)
Live table shows: "🔼 Q2 Broke Q1 HIGH"
Expectation: "CURVE (low < Q1): 60.6%"
Trading Decision:
Even though price broke to new highs, the 60.6% curve probability suggests looking for short opportunities expecting price to curve back below 18,000 in Q3-Q4.
Typical Outcome:
8:15 AM (Q3): Price starts declining
9:15 AM (Q4): Price makes new low at 17,990
Result: ✓ CURVE CONFIRMED
Example 2: 10AM Continuation Signal
Scenario:
10AM candle in progress
11:00 AM: Q1 ends, range is 18,100 - 18,150
11:45 AM: Price breaks above 18,150, reaches 18,180 (Q2 broke Q1 high)
Live table shows: "🔼 Q2 Broke Q1 HIGH"
Expectation: "CONT (high > Q2): 60.4%"
Trading Decision:
With 60.4% continuation probability, breakout likely to follow through. Look for long opportunities expecting extension above 18,180 in Q3-Q4.
Typical Outcome:
12:30 PM (Q3): Price continues higher to 18,200
1:15 PM (Q4): Price makes new high at 18,225
Result: ✓ CONTINUATION CONFIRMED
Example 3: Using Reference Table During Live Trading
You see Q2 breaking Q1 low during 2AM session:
Quick reference check:
2AM row, "When Q2 BREAKS Q1 LOW" section
Curve: 42.8% | Cont: 43.3% | Winner: Balanced
Interpretation: This is a coin flip - 2AM session is balanced when Q2 breaks low. Don't force a directional bias. Wait for second half price action confirmation or skip the setup.
Example 4: No Setup Scenario
Scenario:
6AM candle, Q2 ends at 8:00 AM
Q2 stayed within Q1 range (no break above or below)
Live table shows: "📊 No Q2 Break Occurred"
Trading Decision:
No curve/continuation setup exists. This analysis only applies when Q2 breaks Q1 range. Monitor for different strategies or wait for next 4H candle.
UNDERSTANDING THE UNDERLYING METHODOLOGY
Data Foundation:
Instrument: NQ Futures (E-mini NASDAQ-100)
Timeframe: 1-minute bars for precise quarter tracking
Period: January 2013 - December 2025
Sample: 3,136+ complete trading days
Total 4H Candles Analyzed: ~18,800+ individual sessions
Analysis Process:
For each 4H candle in the dataset:
Calculate Q1 high and low (first hour range)
Track whether Q2 breaks Q1 high, Q1 low, both, or neither
When Q2 breaks Q1 range, measure second half response:
Did Q3+Q4 make new low below Q1? (curve when Q2 broke high)
Did Q3+Q4 make new high above Q1? (curve when Q2 broke low)
Did Q3+Q4 make new high above Q2? (continuation when Q2 broke high)
Did Q3+Q4 make new low below Q2? (continuation when Q2 broke low)
Calculate percentages for each session
Why NQ-Specific?
Different futures contracts exhibit different intraday personality:
NQ (NASDAQ):
Tech-heavy, volatility-prone
6AM shows extreme curve behavior (60-64%) due to NY Open reversal tendency
10AM shows strong continuation (60%) as trends establish
ES (S&P 500) would show different probabilities because:
Lower volatility than NQ
Different institutional participation patterns
Different response to macro events
The indicator's probabilities are calibrated specifically to NQ behavior patterns. Using it on ES, RTY, or other instruments will produce misleading signals.
ORIGINALITY & INNOVATION
What Makes This Indicator Unique:
Quarter-Based Curve Analysis: Unlike traditional indicators that only identify breakouts, this tracks what happens after the breakout. The curve vs continuation framework is novel and provides directional edge.
Session-Specific Behavior: Recognizes that 6AM behaves fundamentally differently than 10AM. Most indicators apply the same logic across all sessions. This indicator provides session-specific probabilities.
Statistical Validation: Every probability shown is backed by 10+ years of data (2,900+ candles per session). Not based on theory or discretionary observation.
Real-Time Quarter Tracking: Precisely identifies which quarter you're in and what stage of the pattern is forming. Provides forward-looking probabilities based on current state.
The 6AM Discovery: The 60-64% curve probability in 6AM is a quantified, repeatable edge that contradicts traditional "breakout = continuation" assumptions. This session exhibits mean reversion characteristics that most traders miss.
Dual-Direction Analysis: Tracks both upside breaks (Q2 > Q1 high) and downside breaks (Q2 < Q1 low) separately, as they can have different probabilities.
Visual Quarter System: The combination of colored boxes, quarter separators, and real-time labels provides instant visual understanding of pattern stage and expected behavior.
HOW TO USE THIS INDICATOR
Step 1: Identify Current 4H Candle
Check which colored box you're in and what session it represents.
Step 2: Wait for Q2 to Complete
The setup doesn't exist until Q2 (hour 2) breaks Q1 range. Monitor the live table.
Step 3: Check Q2 Break Status
Did Q2 break Q1 high? Q1 low? Both? Or neither?
Step 4: Consult Reference Table
Look up current session in curve reference table. What's the probability?
Step 5: Apply Session-Specific Strategy
For 6AM (60-64% curve):
Q2 breaks high → Expect curve back for new low
Q2 breaks low → Expect curve back for new high
Strategy: FADE the Q2 break, look for reversal entries in Q3-Q4
For 10AM (52-60% continuation):
Q2 breaks high → Expect continuation higher
Q2 breaks low → Expect continuation lower
Strategy: TRADE WITH the Q2 break, look for continuation entries in Q3-Q4
For 2AM (38-43% curve, 43-47% continuation):
Balanced probabilities
Strategy: Wait for Q3 price action to confirm direction, or skip
For 6PM/10PM (50-59% continuation):
Moderate continuation bias
Strategy: Lean with the break but use tight stops
Step 6: Monitor Live Status
Watch the live table for confirmation:
"✓ CURVE CONFIRMED" = Mean reversion occurred
"✓ CONTINUATION CONFIRMED" = Follow-through occurred
"⏳ 2nd Half In Progress" = Still developing
BEST PRACTICES
Focus on 6AM for curve trades - This is THE high-probability mean reversion session
Focus on 10AM for continuation trades - This is THE high-probability breakout session
Be cautious with 2AM - Balanced probabilities mean lower edge
Use quarter separators - Enter trades early in Q3 after Q2 break, don't wait for Q4
Combine with price action - Don't blindly fade 6AM or follow 10AM; wait for confirming price structure
Respect the 60% rule - 6AM curve happens 60% of time, which means 40% it doesn't. Manage risk accordingly
Watch for "No Q2 Break" - If Q2 doesn't break Q1, this analysis doesn't apply
Consider overnight context - If 6AM opens with huge gap, curve probability may be affected
SETTINGS & CUSTOMIZATION
Display Settings:
Show 4H Candle Boxes - Toggle colored range boxes
Box Colors - Customize color for each session
Show Quarter Separators - Show/hide 1H, 2H, 3H lines
Show Candle Name Labels - Show/hide session labels at 2H mark
Separator Line Style - Solid/Dashed/Dotted
Max Historical Candles - How many past 4H candles to display (1-50)
Table Settings:
Show Live Status Table - Toggle real-time analysis table
Show Curve Reference Table - Toggle probability reference table
Table Positions - Place tables in any corner
Table Text Size - Tiny/Small/Normal
LIMITATIONS & DISCLAIMERS
NQ FUTURES ONLY - All probabilities are NQ-specific, do not use on other instruments
Requires Q2 break - No curve/continuation setup exists if Q2 stays within Q1 range
Probabilities, not certainties - 60% means it happens 6 out of 10 times, not every time
Lower timeframe noise - 1-minute tracking can be choppy, consider using 5min+ for entries
Gap days - Large overnight gaps may affect curve/continuation probabilities
Not standalone - Use as confluence with your strategy, not as sole decision factor
Historical performance - Past statistics don't guarantee future results
WHY THE CURVE CONCEPT MATTERS
Traditional trading wisdom says: "Breakout = Continuation"
This indicator proves that's not always true. Specifically, during the 6AM session (late London + NY Open), when Q2 breaks the Q1 range, price curves back to the opposite extreme 60-64% of the time.
This creates a unique exploitable edge:
Most breakout traders go LONG when Q2 breaks Q1 high
But in 6AM, 60.6% of the time, price curves back down for new low
Shorting the breakout (counter-intuitive) is the higher-probability trade
The 10AM session shows the opposite:
Breakouts in 10AM tend to follow through (52-60%)
Traditional "trade the breakout" strategy works better here
By knowing which session you're in, you can adapt your strategy to match the session's personality.
FINAL NOTES
This indicator distills 10+ years of NQ intraday behavior into actionable, session-specific probabilities. The discovery that 6AM exhibits 60-64% curve behavior while 10AM exhibits 52-60% continuation behavior provides a statistical edge for mean reversion and trend-following traders respectively.
The highest-probability setups:
6AM Q2 break → FADE (60-64% edge for curve)
10AM Q2 break → FOLLOW (52-60% edge for continuation)
2AM = SKIP (balanced probabilities, no clear edge)
Master the 6AM curve and 10AM continuation first. These two sessions provide the clearest statistical edges.
Remember: Trade with proper risk management. This tool provides probabilities based on historical behavior, not predictions of future performance.
CANDLE RANGE THEORY (H1 Only)Hello traders.
This indicator identifies CRT candles
-Each candle is a range.
-Each candle has its own po3.
-Focus on specific times of the day. By recognizing the importance of time and price, we can capture high-quality trades. Together with HTF PD array, Look for 4-hour candles forming at specific times of the day. (1am - 5am - 9am EST)
-After the 1st candle, wait for the 2nd candle to clear the high/low of the 1st candle and then close inside the 1st candle range at a specific time (1-5-9) and look for entries in the LTF
Why choose 1 5 9 hours EST?
### **1. 1:00 AM (EST)**
- **Trading Session:** This is the time between the Tokyo (Asian) session and the Sydney (Australian) session. The Asian market is very active.
- **Characteristics:**
- Liquidity: Moderate, as only the Asian market is active.
- Volatility: Pairs involving JPY (Japanese Yen), AUD (Australian Dollar), and NZD (New Zealand Dollar) tend to have higher volatility.
- Trading Opportunities: Suitable for traders who like to trade trends or news in the Asian region.
- **Note:** Volatility may be lower than the London or New York session.
### **2. 5:00 AM (EST)**
- **Trading Session:** This is the time near the end of the Tokyo session and the London (European) session is about to open.
- **Characteristics:**
- Liquidity: Starts to increase due to the preparation of the European market.
- Volatility: This is the time between two trading sessions, there can be strong fluctuations, especially in major currency pairs such as EUR/USD, GBP/USD.
- Trading opportunities: Suitable for breakout trading strategies when liquidity increases.
- **Note:** The overlap between Tokyo and London can cause sudden fluctuations.
### **3. 9:00 AM (EST)**
- **Trading sessions:** This time is within the London session and near the beginning of the New York session.
- **Characteristics:**
- Liquidity: Very high, as this is the period between the two largest sessions – London and New York.
- Volatility: Extremely strong, especially for major currency pairs such as EUR/USD, GBP/USD, USD/JPY.
- Trading opportunities: Suitable for both news trading and trend trading, as this is the time when a lot of economic data is released (usually from the US or the European region).
- **Note:** High volatility can bring big profits, but also comes with high risks.
### **Summary of effects:**
- **1 AM (EST):** Moderate volatility, focusing on Asian currency pairs.
- **5 AM (EST):** Increased liquidity and volatility, suitable for breakout trading.
- **9 AM (EST):** High volatility and high liquidity, the best time for Forex trading.
==> How to trade, when the high/low of CRT is swept, move to LTF to wait for confirmation to enter the order
Only sell at high level and buy at discount price.
Find CE at specific important time. Trading CRT with HTF direction has better win rate.
The more inside bars, the higher the probability.
Place a partial and Move breakeven at 50% range.
Do a backtest and post your chart.
High Low Levels by JZCustom High Low Levels Indicator - features
Clearly plotted high and low levels for specific trading sessions. This indicator provides visual representations of key price levels during various trading periods. Below are the main features and benefits of this indicator:
1. Display high and low levels for each session
- previous day high/low: display the high and low from the previous day, giving you a better understanding of how the price moves compared to the prior day.
- asia, london, and custom sessions: track the high and low levels for the major trading sessions (asian and london) and two custom user-defined sessions.
2. Complete line and label customization
- custom line appearance: choose the color, line style (solid, dashed, dotted), and line thickness for each trading session. you can also decide if the lines should extend beyond the current price action.
- custom labels: define your own label texts for each custom session. this way, you can label the levels precisely and easily track price movements.
3. Define your own trading sessions
- add up to two custom sessions (custom and custom 2), which can be defined using precise start and end times (hour and minute).
- each custom session allows you to specify the label text for the high and low levels, enabling you to easily differentiate different parts of the day on the chart.
4. Clear and intuitive design
- grouped settings: all settings are grouped based on trading sessions, so you can easily customize every aspect of the visual representation.
- simple toggle on/off: you can easily enable or disable each line (previous day, asia, london, custom 1, custom 2). this allows you to keep your chart clean and focus only on the important levels you need at any moment.
5. Flexible time zones
- time zone settings: set the time zone (utc, europe/london, america/new_york, asia/tokyo) to properly align the timeframes for each level depending on the market you're focusing on.
6. Automatic cleanup of old lines and labels
- old levels removal: automatically remove old lines and labels to prevent clutter on your chart. this ensures that only current, relevant levels for each trading day or session are displayed.
7. Precise plotting and line extension
- accurate level markings: the indicator calculates the precise times when the high and low levels were reached and plots lines that visually represent these levels.
- line extension options: you have the option to extend the high/low lines beyond their point of calculation, which helps with identifying price action trends beyond the current period.
Dec 7, 2024
Release Notes
Changes and Improvements for Users:
1. Customizable Offset for Lines and Labels:
- A new input, `Line and Label Offset`, allows users to control how far the lines and their associated text labels extend. This ensures the labels and lines remain aligned and can be adjusted as needed.
2. Unified Offset Control:
- The same offset value is applied to all types of lines and labels (e.g., Previous Day High/Low, Asia High/Low, London High/Low, and custom sessions). Users can change this in one place to affect the entire script consistently.
3. Enhanced Flexibility:
- Users now have more control over the appearance and position of their lines and labels, making the indicator adaptable to different chart setups and personal preferences.
These updates aim to enhance user convenience and customization, ensuring a more tailored charting experience.
Monday range by MatboomThe "Monday Range" Pine Script indicator calculates and displays the lowest and highest prices during a specified trading session, focusing on Mondays. Users can configure the trading session parameters, such as start and end times and time zone. The indicator visually highlights the session range on the chart by plotting the session low and high prices and applying a background color within the session period. The customizable days of the week checkboxes allow users to choose which days the indicator should consider for analysis.
Session Configuration:
session = input.session("0000-0000", title="Trading Session")
timeZone = input.string("UTC", title="Time Zone")
monSession = input.bool(true, title="Mon ", group="Trading Session", inline="d1")
tueSession = input.bool(true, title="Tue ", group="Trading Session", inline="d1")
Users can configure the trading session start and end times and the time zone.
Checkboxes for Monday (monSession) and Tuesday (tueSession) sessions are provided.
SessionLow and SessionHigh Functions:
SessionLow(sessionTime, sessionTimeZone=syminfo.timezone) => ...
SessionHigh(sessionTime, sessionTimeZone=syminfo.timezone) => ...
Custom functions to calculate the lowest (SessionLow) and highest (SessionHigh) prices during a specified trading session.
InSession Function:
InSession(sessionTimes, sessionTimeZone=syminfo.timezone) => ...
Determines if the current bar is inside the specified trading session.
Days of Week String and Session String:
sessionDays = ""
if monSession
sessionDays += "2"
if tueSession
sessionDays += "3"
tradingSession = session + ":" + sessionDays
Constructs a string representing the selected days of the week for the session.
Fetch Session Low and High:
sessLow = SessionLow(tradingSession, timeZone)
sessHigh = SessionHigh(tradingSession, timeZone)
Calls the custom functions to obtain the session low and high prices.
Plot Session Low and High and Background Color for Session
plot(sessLow, color=color.red, title="Session Low")
plot(sessHigh, color=color.red, title="Session Low")
bgcolor(InSession(tradingSession, timeZone) ? color.new(color.aqua, 90) : na)
skThis Pine Script is an indicator designed to mark and highlight specific trading sessions on a TradingView chart. Here's a description of the script's functionality:
1. *Session Selection*: The script allows you to select a session time frame using the `session_input` input. The available options for session time frames are "D" (daily), "W" (weekly), "M" (monthly), "H" (hourly), "15" (15 minutes), "5" (5 minutes), and "1" (1 minute).
2. *Session Times*: You can specify the start and end times for three different trading sessions - CBDR (Central Bank Dealer Range), Asia, and London - using the corresponding input options. These times are specified in Indian Standard Time (IST).
3. *Time Calculation*: The script calculates the start and end times for each session based on the specified hours and minutes. It uses the `timestamp` function to create time objects for these sessions.
4. *Session Highlighting*: The script creates rectangles on the chart to highlight each session:
- CBDR Session: A gray rectangle is drawn during the CBDR session time.
- Asia Session: Another gray rectangle is drawn during the Asia session time.
- London Session: A green rectangle is drawn at the top of the chart during the London session time.
5. *Transparency*: The rectangles have a transparency level of 90%, allowing you to see the price data beneath them while still marking the sessions.
6. *Overlay*: The indicator is set to overlay on the price chart, so it doesn't obstruct the price data.
7. *Customization*: You can customize the session times and appearance by adjusting the input values in the settings panel of the indicator.
Overall, this script provides a visual way to identify and highlight specific trading sessions on your TradingView chart, helping traders understand price action in different market sessions.
Time of Day Background with Bar Count & TableDescription:
This indicator provides a comprehensive overview of market activity by dynamically displaying the time-of-day background and tracking bullish and bearish bar counts across different sessions. It also features a table summarizing the market performance for the last 7 days, segmented into four time-based sessions: Morning, Afternoon, Evening, and Night.
Key Features:
Time of Day Background:
The chart's background color changes based on the time of day:
Evening (12 AM - 6 AM) is shaded blue.
Morning (6 AM - 12 PM) is shaded aqua.
Afternoon (12 PM - 6 PM) is shaded yellow.
Night (6 PM - 12 AM) is shaded silver.
Bullish and Bearish Bar Counting:
It tracks the number of bullish (closing higher than opening) and bearish (closing lower than opening) candles.
The sum of the price differences (bullish minus bearish) for each session is displayed as a dynamic label, indicating overall market direction for each session.
Session Breakdown:
The chart is divided into four sessions, each lasting 6 hours (Morning, Afternoon, Evening, Night).
A new label is generated at the start of each session, indicating the bullish/bearish performance and the net difference in price movements for that session.
Historical Session Performance:
The indicator tracks and stores the performance for each session over the past 7 days.
A table is generated in the top-right corner of the chart, summarizing the performance for each session (Morning, Afternoon, Evening, Night) and the price changes for each of the past 7 days.
The values are color-coded to indicate positive (green) or negative (red) results.
Dynamic Table:
The table presents performance data for each time session over the past week with color-coded cells:
Green cells indicate positive performance.
Red cells indicate negative performance.
Empty cells represent no data for that session.
Use Case:
This indicator is useful for traders who want to track market activity and performance across different times of day and monitor how each session contributes to the overall market trend. It provides both visual insights (through background color) and numerical data (via the table) for better decision-making.
Settings:
The background color and session labels update automatically based on the time of day.
The table updates every day, tracking the performance of each session over the past week.
Trading IQ - ICT LibraryLibrary "ICTlibrary"
Used to calculate various ICT related price levels and strategies. An ongoing project.
Hello Coders!
This library is meant for sourcing ICT related concepts. While some functions might generate more output than you require, you can specify "Lite Mode" as "true" in applicable functions to slim down necessary inputs.
isLastBar(userTF)
Identifies the last bar on the chart before a timeframe change
Parameters:
userTF (simple int) : the timeframe you wish to calculate the last bar for, must be converted to integer using 'timeframe.in_seconds()'
Returns: bool true if bar on chart is last bar of higher TF, dalse if bar on chart is not last bar of higher TF
necessaryData(atrTF)
returns necessaryData UDT for historical data access
Parameters:
atrTF (float) : user-selected timeframe ATR value.
Returns: logZ. log return Z score, used for calculating order blocks.
method gradBoxes(gradientBoxes, idColor, timeStart, bottom, top, rightCoordinate)
creates neon like effect for box drawings
Namespace types: array
Parameters:
gradientBoxes (array) : an array.new() to store the gradient boxes
idColor (color)
timeStart (int) : left point of box
bottom (float) : bottom of box price point
top (float) : top of box price point
rightCoordinate (int) : right point of box
Returns: void
checkIfTraded(tradeName)
checks if recent trade is of specific name
Parameters:
tradeName (string)
Returns: bool true if recent trade id matches target name, false otherwise
checkIfClosed(tradeName)
checks if recent closed trade is of specific name
Parameters:
tradeName (string)
Returns: bool true if recent closed trade id matches target name, false otherwise
IQZZ(atrMult, finalTF)
custom ZZ to quickly determine market direction.
Parameters:
atrMult (float) : an atr multiplier used to determine the required price move for a ZZ direction change
finalTF (string) : the timeframe used for the atr calcuation
Returns: dir market direction. Up => 1, down => -1
method drawBos(id, startPoint, getKeyPointTime, getKeyPointPrice, col, showBOS, isUp)
calculates and draws Break Of Structure
Namespace types: array
Parameters:
id (array)
startPoint (chart.point)
getKeyPointTime (int) : the actual time of startPoint, simplystartPoint.time
getKeyPointPrice (float) : the actual time of startPoint, simplystartPoint.price
col (color) : color of the BoS line / label
showBOS (bool) : whether to show label/line. This function still calculates internally for other ICT related concepts even if not drawn.
isUp (bool) : whether BoS happened during price increase or price decrease.
Returns: void
method drawMSS(id, startPoint, getKeyPointTime, getKeyPointPrice, col, showMSS, isUp, upRejections, dnRejections, highArr, lowArr, timeArr, closeArr, openArr, atrTFarr, upRejectionsPrices, dnRejectionsPrices)
calculates and draws Market Structure Shift. This data is also used to calculate Rejection Blocks.
Namespace types: array
Parameters:
id (array)
startPoint (chart.point)
getKeyPointTime (int) : the actual time of startPoint, simplystartPoint.time
getKeyPointPrice (float) : the actual time of startPoint, simplystartPoint.price
col (color) : color of the MSS line / label
showMSS (bool) : whether to show label/line. This function still calculates internally for other ICT related concepts even if not drawn.
isUp (bool) : whether MSS happened during price increase or price decrease.
upRejections (array)
dnRejections (array)
highArr (array) : array containing historical highs, should be taken from the UDT "necessaryData" defined above
lowArr (array) : array containing historical lows, should be taken from the UDT "necessaryData" defined above
timeArr (array) : array containing historical times, should be taken from the UDT "necessaryData" defined above
closeArr (array) : array containing historical closes, should be taken from the UDT "necessaryData" defined above
openArr (array) : array containing historical opens, should be taken from the UDT "necessaryData" defined above
atrTFarr (array) : array containing historical atr values (of user-selected TF), should be taken from the UDT "necessaryData" defined above
upRejectionsPrices (array) : array containing up rejections prices. Is sorted and used to determine selective looping for invalidations.
dnRejectionsPrices (array) : array containing down rejections prices. Is sorted and used to determine selective looping for invalidations.
Returns: void
method getTime(id, compare, timeArr)
gets time of inputted price (compare) in an array of data
this is useful when the user-selected timeframe for ICT concepts is greater than the chart's timeframe
Namespace types: array
Parameters:
id (array) : the array of data to search through, to find which index has the same value as "compare"
compare (float) : the target data point to find in the array
timeArr (array) : array of historical times
Returns: the time that the data point in the array was recorded
method OB(id, highArr, signArr, lowArr, timeArr, sign)
store bullish orderblock data
Namespace types: array
Parameters:
id (array)
highArr (array) : array of historical highs
signArr (array) : array of historical price direction "math.sign(close - open)"
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
sign (int) : orderblock direction, -1 => bullish, 1 => bearish
Returns: void
OTEstrat(OTEstart, future, closeArr, highArr, lowArr, timeArr, longOTEPT, longOTESL, longOTElevel, shortOTEPT, shortOTESL, shortOTElevel, structureDirection, oteLongs, atrTF, oteShorts)
executes the OTE strategy
Parameters:
OTEstart (chart.point)
future (int) : future time point for drawings
closeArr (array) : array of historical closes
highArr (array) : array of historical highs
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
longOTEPT (string) : user-selected long OTE profit target, please create an input.string() for this using the example below
longOTESL (int) : user-selected long OTE stop loss, please create an input.string() for this using the example below
longOTElevel (float) : long entry price of selected retracement ratio for OTE
shortOTEPT (string) : user-selected short OTE profit target, please create an input.string() for this using the example below
shortOTESL (int) : user-selected short OTE stop loss, please create an input.string() for this using the example below
shortOTElevel (float) : short entry price of selected retracement ratio for OTE
structureDirection (string) : current market structure direction, this should be "Up" or "Down". This is used to cancel pending orders if market structure changes
oteLongs (bool) : input.bool() for whether OTE longs can be executed
atrTF (float) : atr of the user-seleceted TF
oteShorts (bool) : input.bool() for whether OTE shorts can be executed
@exampleInputs
oteLongs = input.bool(defval = false, title = "OTE Longs", group = "Optimal Trade Entry")
longOTElevel = input.float(defval = 0.79, title = "Long Entry Retracement Level", options = , group = "Optimal Trade Entry")
longOTEPT = input.string(defval = "-0.5", title = "Long TP", options = , group = "Optimal Trade Entry")
longOTESL = input.int(defval = 0, title = "How Many Ticks Below Swing Low For Stop Loss", group = "Optimal Trade Entry")
oteShorts = input.bool(defval = false, title = "OTE Shorts", group = "Optimal Trade Entry")
shortOTElevel = input.float(defval = 0.79, title = "Short Entry Retracement Level", options = , group = "Optimal Trade Entry")
shortOTEPT = input.string(defval = "-0.5", title = "Short TP", options = , group = "Optimal Trade Entry")
shortOTESL = input.int(defval = 0, title = "How Many Ticks Above Swing Low For Stop Loss", group = "Optimal Trade Entry")
Returns: void (0)
displacement(logZ, atrTFreg, highArr, timeArr, lowArr, upDispShow, dnDispShow, masterCoords, labelLevels, dispUpcol, rightCoordinate, dispDncol, noBorders)
calculates and draws dispacements
Parameters:
logZ (float) : log return of current price, used to determine a "significant price move" for a displacement
atrTFreg (float) : atr of user-seleceted timeframe
highArr (array) : array of historical highs
timeArr (array) : array of historical times
lowArr (array) : array of historical lows
upDispShow (int) : amount of historical upside displacements to show
dnDispShow (int) : amount of historical downside displacements to show
masterCoords (map) : a map to push the most recent displacement prices into, useful for having key levels in one data structure
labelLevels (string) : used to determine label placement for the displacement, can be inside box, outside box, or none, example below
dispUpcol (color) : upside displacement color
rightCoordinate (int) : future time for displacement drawing, best is "last_bar_time"
dispDncol (color) : downside displacement color
noBorders (bool) : input.bool() to remove box borders, example below
@exampleInputs
labelLevels = input.string(defval = "Inside" , title = "Box Label Placement", options = )
noBorders = input.bool(defval = false, title = "No Borders On Levels")
Returns: void
method getStrongLow(id, startIndex, timeArr, lowArr, strongLowPoints)
unshift strong low data to array id
Namespace types: array
Parameters:
id (array)
startIndex (int) : the starting index for the timeArr array of the UDT "necessaryData".
this point should start from at least 1 pivot prior to find the low before an upside BoS
timeArr (array) : array of historical times
lowArr (array) : array of historical lows
strongLowPoints (array) : array of strong low prices. Used to retrieve highest strong low price and see if need for
removal of invalidated strong lows
Returns: void
method getStrongHigh(id, startIndex, timeArr, highArr, strongHighPoints)
unshift strong high data to array id
Namespace types: array
Parameters:
id (array)
startIndex (int) : the starting index for the timeArr array of the UDT "necessaryData".
this point should start from at least 1 pivot prior to find the high before a downside BoS
timeArr (array) : array of historical times
highArr (array) : array of historical highs
strongHighPoints (array)
Returns: void
equalLevels(highArr, lowArr, timeArr, rightCoordinate, equalHighsCol, equalLowsCol, liteMode)
used to calculate recent equal highs or equal lows
Parameters:
highArr (array) : array of historical highs
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
rightCoordinate (int) : a future time (right for boxes, x2 for lines)
equalHighsCol (color) : user-selected color for equal highs drawings
equalLowsCol (color) : user-selected color for equal lows drawings
liteMode (bool) : optional for a lite mode version of an ICT strategy. For more control over drawings leave as "True", "False" will apply neon effects
Returns: void
quickTime(timeString)
used to quickly determine if a user-inputted time range is currently active in NYT time
Parameters:
timeString (string) : a time range
Returns: true if session is active, false if session is inactive
macros(showMacros, noBorders)
used to calculate and draw session macros
Parameters:
showMacros (bool) : an input.bool() or simple bool to determine whether to activate the function
noBorders (bool) : an input.bool() to determine whether the box anchored to the session should have borders
Returns: void
po3(tf, left, right, show)
use to calculate HTF po3 candle
@tip only call this function on "barstate.islast"
Parameters:
tf (simple string)
left (int) : the left point of the candle, calculated as bar_index + left,
right (int) : :the right point of the candle, calculated as bar_index + right,
show (bool) : input.bool() whether to show the po3 candle or not
Returns: void
silverBullet(silverBulletStratLong, silverBulletStratShort, future, userTF, H, L, H2, L2, noBorders, silverBulletLongTP, historicalPoints, historicalData, silverBulletLongSL, silverBulletShortTP, silverBulletShortSL)
used to execute the Silver Bullet Strategy
Parameters:
silverBulletStratLong (simple bool)
silverBulletStratShort (simple bool)
future (int) : a future time, used for drawings, example "last_bar_time"
userTF (simple int)
H (float) : the high price of the user-selected TF
L (float) : the low price of the user-selected TF
H2 (float) : the high price of the user-selected TF
L2 (float) : the low price of the user-selected TF
noBorders (bool) : an input.bool() used to remove the borders from box drawings
silverBulletLongTP (series silverBulletLevels)
historicalPoints (array)
historicalData (necessaryData)
silverBulletLongSL (series silverBulletLevels)
silverBulletShortTP (series silverBulletLevels)
silverBulletShortSL (series silverBulletLevels)
Returns: void
method invalidFVGcheck(FVGarr, upFVGpricesSorted, dnFVGpricesSorted)
check if existing FVGs are still valid
Namespace types: array
Parameters:
FVGarr (array)
upFVGpricesSorted (array) : an array of bullish FVG prices, used to selective search through FVG array to remove invalidated levels
dnFVGpricesSorted (array) : an array of bearish FVG prices, used to selective search through FVG array to remove invalidated levels
Returns: void (0)
method drawFVG(counter, FVGshow, FVGname, FVGcol, data, masterCoords, labelLevels, borderTransp, liteMode, rightCoordinate)
draws FVGs on last bar
Namespace types: map
Parameters:
counter (map) : a counter, as map, keeping count of the number of FVGs drawn, makes sure that there aren't more FVGs drawn
than int FVGshow
FVGshow (int) : the number of FVGs to show. There should be a bullish FVG show and bearish FVG show. This function "drawFVG" is used separately
for bearish FVG and bullish FVG.
FVGname (string) : the name of the FVG, "FVG Up" or "FVG Down"
FVGcol (color) : desired FVG color
data (FVG)
masterCoords (map) : a map containing the names and price points of key levels. Used to define price ranges.
labelLevels (string) : an input.string with options "Inside", "Outside", "Remove". Determines whether FVG labels should be inside box, outside,
or na.
borderTransp (int)
liteMode (bool)
rightCoordinate (int) : the right coordinate of any drawings. Must be a time point.
Returns: void
invalidBlockCheck(bullishOBbox, bearishOBbox, userTF)
check if existing order blocks are still valid
Parameters:
bullishOBbox (array) : an array declared using the UDT orderBlock that contains bullish order block related data
bearishOBbox (array) : an array declared using the UDT orderBlock that contains bearish order block related data
userTF (simple int)
Returns: void (0)
method lastBarRejections(id, rejectionColor, idShow, rejectionString, labelLevels, borderTransp, liteMode, rightCoordinate, masterCoords)
draws rejectionBlocks on last bar
Namespace types: array
Parameters:
id (array) : the array, an array of rejection block data declared using the UDT rejection block
rejectionColor (color) : the desired color of the rejection box
idShow (int)
rejectionString (string) : the desired name of the rejection blocks
labelLevels (string) : an input.string() to determine if labels for the block should be inside the box, outside, or none.
borderTransp (int)
liteMode (bool) : an input.bool(). True = neon effect, false = no neon.
rightCoordinate (int) : atime for the right coordinate of the box
masterCoords (map) : a map that stores the price of key levels and assigns them a name, used to determine price ranges
Returns: void
method OBdraw(id, OBshow, BBshow, OBcol, BBcol, bullishString, bearishString, isBullish, labelLevels, borderTransp, liteMode, rightCoordinate, masterCoords)
draws orderblocks and breaker blocks for data stored in UDT array()
Namespace types: array
Parameters:
id (array) : the array, an array of order block data declared using the UDT orderblock
OBshow (int) : the number of order blocks to show
BBshow (int) : the number of breaker blocks to show
OBcol (color) : color of order blocks
BBcol (color) : color of breaker blocks
bullishString (string) : the title of bullish blocks, which is a regular bullish orderblock or a bearish orderblock that's converted to breakerblock
bearishString (string) : the title of bearish blocks, which is a regular bearish orderblock or a bullish orderblock that's converted to breakerblock
isBullish (bool) : whether the array contains bullish orderblocks or bearish orderblocks. If bullish orderblocks,
the array will naturally contain bearish BB, and if bearish OB, the array will naturally contain bullish BB
labelLevels (string) : an input.string() to determine if labels for the block should be inside the box, outside, or none.
borderTransp (int)
liteMode (bool) : an input.bool(). True = neon effect, false = no neon.
rightCoordinate (int) : atime for the right coordinate of the box
masterCoords (map) : a map that stores the price of key levels and assigns them a name, used to determine price ranges
Returns: void
FVG
UDT for FVG calcualtions
Fields:
H (series float) : high price of user-selected timeframe
L (series float) : low price of user-selected timeframe
direction (series string) : FVG direction => "Up" or "Down"
T (series int) : => time of bar on user-selected timeframe where FVG was created
fvgLabel (series label) : optional label for FVG
fvgLineTop (series line) : optional line for top of FVG
fvgLineBot (series line) : optional line for bottom of FVG
fvgBox (series box) : optional box for FVG
labelLine
quickly pair a line and label together as UDT
Fields:
lin (series line) : Line you wish to pair with label
lab (series label) : Label you wish to pair with line
orderBlock
UDT for order block calculations
Fields:
orderBlockData (array) : array containing order block x and y points
orderBlockBox (series box) : optional order block box
vioCount (series int) : = 0 violation count of the order block. 0 = Order Block, 1 = Breaker Block
traded (series bool)
status (series string) : = "OB" status == "OB" => Level is order block. status == "BB" => Level is breaker block.
orderBlockLab (series label) : options label for the order block / breaker block.
strongPoints
UDT for strong highs and strong lows
Fields:
price (series float) : price of the strong high or strong low
timeAtprice (series int) : time of the strong high or strong low
strongPointLabel (series label) : optional label for strong point
strongPointLine (series line) : optional line for strong point
overlayLine (series line) : optional lines for strong point to enhance visibility
overlayLine2 (series line) : optional lines for strong point to enhance visibility
displacement
UDT for dispacements
Fields:
highPrice (series float) : high price of displacement
lowPrice (series float) : low price of displacement
timeAtPrice (series int) : time of bar where displacement occurred
displacementBox (series box) : optional box to draw displacement
displacementLab (series label) : optional label for displacement
po3data
UDT for po3 calculations
Fields:
dHigh (series float) : higher timeframe high price
dLow (series float) : higher timeframe low price
dOpen (series float) : higher timeframe open price
dClose (series float) : higher timeframe close price
po3box (series box) : box to draw po3 candle body
po3line (array) : line array to draw po3 wicks
po3Labels (array) : label array to label price points of po3 candle
macros
UDT for session macros
Fields:
sessions (array) : Array of sessions, you can populate this array using the "quickTime" function located above "export macros".
prices (matrix) : Matrix of session data -> open, high, low, close, time
sessionTimes (array) : Array of session names. Pairs with array sessions.
sessionLines (matrix) : Optional array for sesion drawings.
OTEtimes
UDT for data storage and drawings associated with OTE strategy
Fields:
upTimes (array) : time of highest point before trade is taken
dnTimes (array) : time of lowest point before trade is taken
tpLineLong (series line) : line to mark tp level long
tpLabelLong (series label) : label to mark tp level long
slLineLong (series line) : line to mark sl level long
slLabelLong (series label) : label to mark sl level long
tpLineShort (series line) : line to mark tp level short
tpLabelShort (series label) : label to mark tp level short
slLineShort (series line) : line to mark sl level short
slLabelShort (series label) : label to mark sl level short
sweeps
UDT for data storage and drawings associated with liquidity sweeps
Fields:
upSweeps (matrix) : matrix containing liquidity sweep price points and time points for up sweeps
dnSweeps (matrix) : matrix containing liquidity sweep price points and time points for down sweeps
upSweepDrawings (array) : optional up sweep box array. Pair the size of this array with the rows or columns,
dnSweepDrawings (array) : optional up sweep box array. Pair the size of this array with the rows or columns,
raidExitDrawings
UDT for drawings associated with the Liquidity Raid Strategy
Fields:
tpLine (series line) : tp line for the liquidity raid entry
tpLabel (series label) : tp label for the liquidity raid entry
slLine (series line) : sl line for the liquidity raid entry
slLabel (series label) : sl label for the liquidity raid entry
m2022
UDT for data storage and drawings associated with the Model 2022 Strategy
Fields:
mTime (series int) : time of the FVG where entry limit order is placed
mIndex (series int) : array index of FVG where entry limit order is placed. This requires an array of FVG data, which is defined above.
mEntryDistance (series float) : the distance of the FVG to the 50% range. M2022 looks for the fvg closest to 50% mark of range.
mEntry (series float) : the entry price for the most eligible fvg
fvgHigh (series float) : the high point of the eligible fvg
fvgLow (series float) : the low point of the eligible fvg
longFVGentryBox (series box) : long FVG box, used to draw the eligible FVG
shortFVGentryBox (series box) : short FVG box, used to draw the eligible FVG
line50P (series line) : line used to mark 50% of the range
line100P (series line) : line used to mark 100% (top) of the range
line0P (series line) : line used to mark 0% (bottom) of the range
label50P (series label) : label used to mark 50% of the range
label100P (series label) : label used to mark 100% (top) of the range
label0P (series label) : label used to mark 0% (bottom) of the range
sweepData (array)
silverBullet
UDT for data storage and drawings associated with the Silver Bullet Strategy
Fields:
session (series bool)
sessionStr (series string) : name of the session for silver bullet
sessionBias (series string)
sessionHigh (series float) : = high high of session // use math.max(silverBullet.sessionHigh, high)
sessionLow (series float) : = low low of session // use math.min(silverBullet.sessionLow, low)
sessionFVG (series float) : if applicable, the FVG created during the session
sessionFVGdraw (series box) : if applicable, draw the FVG created during the session
traded (series bool)
tp (series float) : tp of trade entered at the session FVG
sl (series float) : sl of trade entered at the session FVG
sessionDraw (series box) : optional draw session with box
sessionDrawLabel (series label) : optional label session with label
silverBulletDrawings
UDT for trade exit drawings associated with the Silver Bullet Strategy
Fields:
tpLine (series line) : tp line drawing for strategy
tpLabel (series label) : tp label drawing for strategy
slLine (series line) : sl line drawing for strategy
slLabel (series label) : sl label drawing for strategy
unicornModel
UDT for data storage and drawings associated with the Unicorn Model Strategy
Fields:
hPoint (chart.point)
hPoint2 (chart.point)
hPoint3 (chart.point)
breakerBlock (series box) : used to draw the breaker block required for the Unicorn Model
FVG (series box) : used to draw the FVG required for the Unicorn model
topBlock (series float) : price of top of breaker block, can be used to detail trade entry
botBlock (series float) : price of bottom of breaker block, can be used to detail trade entry
startBlock (series int) : start time of the breaker block, used to set the "left = " param for the box
includes (array) : used to store the time of the breaker block, or FVG, or the chart point sequence that setup the Unicorn Model.
entry (series float) : // eligible entry price, for longs"math.max(topBlock, FVG.get_top())",
tpLine (series line) : optional line to mark PT
tpLabel (series label) : optional label to mark PT
slLine (series line) : optional line to mark SL
slLabel (series label) : optional label to mark SL
rejectionBlocks
UDT for data storage and drawings associated with rejection blocks
Fields:
rejectionPoint (chart.point)
bodyPrice (series float) : candle body price closest to the rejection point, for "Up" rejections => math.max(open, close),
rejectionBox (series box) : optional box drawing of the rejection block
rejectionLabel (series label) : optional label for the rejection block
equalLevelsDraw
UDT for data storage and drawings associated with equal highs / equal lows
Fields:
connector (series line) : single line placed at the first high or low, y = avgerage of distinguished equal highs/lows
connectorLab (series label) : optional label to be placed at the highs or lows
levels (array) : array containing the equal highs or lows prices
times (array) : array containing the equal highs or lows individual times
startTime (series int) : the time of the first high or low that forms a sequence of equal highs or lows
radiate (array) : options label to "radiate" the label in connector lab. Can be used for anything
necessaryData
UDT for data storage of historical price points.
Fields:
highArr (array) : array containing historical high points
lowArr (array) : array containing historical low points
timeArr (array) : array containing historical time points
logArr (array) : array containing historical log returns
signArr (array) : array containing historical price directions
closeArr (array) : array containing historical close points
binaryTimeArr (array) : array containing historical time points, uses "push" instead of "unshift" to allow for binary search
binaryCloseArr (array) : array containing historical close points, uses "push" instead of "unshift" to allow the correct
binaryOpenArr (array) : array containing historical optn points, uses "push" instead of "unshift" to allow the correct
atrTFarr (array) : array containing historical user-selected TF atr points
openArr (array) : array containing historical open points
Adaptive Market Wave TheoryAdaptive Market Wave Theory
🌊 CORE INNOVATION: PROBABILISTIC PHASE DETECTION WITH MULTI-AGENT CONSENSUS
Adaptive Market Wave Theory (AMWT) represents a fundamental paradigm shift in how traders approach market phase identification. Rather than counting waves subjectively or drawing static breakout levels, AMWT treats the market as a hidden state machine —using Hidden Markov Models, multi-agent consensus systems, and reinforcement learning algorithms to quantify what traditional methods leave to interpretation.
The Wave Analysis Problem:
Traditional wave counting methodologies (Elliott Wave, harmonic patterns, ABC corrections) share fatal weaknesses that AMWT directly addresses:
1. Non-Falsifiability : Invalid wave counts can always be "recounted" or "adjusted." If your Wave 3 fails, it becomes "Wave 3 of a larger degree" or "actually Wave C." There's no objective failure condition.
2. Observer Bias : Two expert wave analysts examining the same chart routinely reach different conclusions. This isn't a feature—it's a fundamental methodology flaw.
3. No Confidence Measure : Traditional analysis says "This IS Wave 3." But with what probability? 51%? 95%? The binary nature prevents proper position sizing and risk management.
4. Static Rules : Fixed Fibonacci ratios and wave guidelines cannot adapt to changing market regimes. What worked in 2019 may fail in 2024.
5. No Accountability : Wave methodologies rarely track their own performance. There's no feedback loop to improve.
The AMWT Solution:
AMWT addresses each limitation through rigorous mathematical frameworks borrowed from speech recognition, machine learning, and reinforcement learning:
• Non-Falsifiability → Hard Invalidation : Wave hypotheses die permanently when price violates calculated invalidation levels. No recounting allowed.
• Observer Bias → Multi-Agent Consensus : Three independent analytical agents must agree. Single-methodology bias is eliminated.
• No Confidence → Probabilistic States : Every market state has a calculated probability from Hidden Markov Model inference. "72% probability of impulse state" replaces "This is Wave 3."
• Static Rules → Adaptive Learning : Thompson Sampling multi-armed bandits learn which agents perform best in current conditions. The system adapts in real-time.
• No Accountability → Performance Tracking : Comprehensive statistics track every signal's outcome. The system knows its own performance.
The Core Insight:
"Traditional wave analysis asks 'What count is this?' AMWT asks 'What is the probability we are in an impulsive state, with what confidence, confirmed by how many independent methodologies, and anchored to what liquidity event?'"
🔬 THEORETICAL FOUNDATION: HIDDEN MARKOV MODELS
Why Hidden Markov Models?
Markets exist in hidden states that we cannot directly observe—only their effects on price are visible. When the market is in an "impulse up" state, we see rising prices, expanding volume, and trending indicators. But we don't observe the state itself—we infer it from observables.
This is precisely the problem Hidden Markov Models (HMMs) solve. Originally developed for speech recognition (inferring words from sound waves), HMMs excel at estimating hidden states from noisy observations.
HMM Components:
1. Hidden States (S) : The unobservable market conditions
2. Observations (O) : What we can measure (price, volume, indicators)
3. Transition Matrix (A) : Probability of moving between states
4. Emission Matrix (B) : Probability of observations given each state
5. Initial Distribution (π) : Starting state probabilities
AMWT's Six Market States:
State 0: IMPULSE_UP
• Definition: Strong bullish momentum with high participation
• Observable Signatures: Rising prices, expanding volume, RSI >60, price above upper Bollinger Band, MACD histogram positive and rising
• Typical Duration: 5-20 bars depending on timeframe
• What It Means: Institutional buying pressure, trend acceleration phase
State 1: IMPULSE_DN
• Definition: Strong bearish momentum with high participation
• Observable Signatures: Falling prices, expanding volume, RSI <40, price below lower Bollinger Band, MACD histogram negative and falling
• Typical Duration: 5-20 bars (often shorter than bullish impulses—markets fall faster)
• What It Means: Institutional selling pressure, panic or distribution acceleration
State 2: CORRECTION
• Definition: Counter-trend consolidation with declining momentum
• Observable Signatures: Sideways or mild counter-trend movement, contracting volume, RSI returning toward 50, Bollinger Bands narrowing
• Typical Duration: 8-30 bars
• What It Means: Profit-taking, digestion of prior move, potential accumulation for next leg
State 3: ACCUMULATION
• Definition: Base-building near lows where informed participants absorb supply
• Observable Signatures: Price near recent lows but not making new lows, volume spikes on up bars, RSI showing positive divergence, tight range
• Typical Duration: 15-50 bars
• What It Means: Smart money buying from weak hands, preparing for markup phase
State 4: DISTRIBUTION
• Definition: Top-forming near highs where informed participants distribute holdings
• Observable Signatures: Price near recent highs but struggling to advance, volume spikes on down bars, RSI showing negative divergence, widening range
• Typical Duration: 15-50 bars
• What It Means: Smart money selling to late buyers, preparing for markdown phase
State 5: TRANSITION
• Definition: Regime change period with mixed signals and elevated uncertainty
• Observable Signatures: Conflicting indicators, whipsaw price action, no clear momentum, high volatility without direction
• Typical Duration: 5-15 bars
• What It Means: Market deciding next direction, dangerous for directional trades
The Transition Matrix:
The transition matrix A captures the probability of moving from one state to another. AMWT initializes with empirically-derived values then updates online:
From/To IMP_UP IMP_DN CORR ACCUM DIST TRANS
IMP_UP 0.70 0.02 0.20 0.02 0.04 0.02
IMP_DN 0.02 0.70 0.20 0.04 0.02 0.02
CORR 0.15 0.15 0.50 0.10 0.10 0.00
ACCUM 0.30 0.05 0.15 0.40 0.05 0.05
DIST 0.05 0.30 0.15 0.05 0.40 0.05
TRANS 0.20 0.20 0.20 0.15 0.15 0.10
Key Insights from Transition Probabilities:
• Impulse states are sticky (70% self-transition): Once trending, markets tend to continue
• Corrections can transition to either impulse direction (15% each): The next move after correction is uncertain
• Accumulation strongly favors IMP_UP transition (30%): Base-building leads to rallies
• Distribution strongly favors IMP_DN transition (30%): Topping leads to declines
The Viterbi Algorithm:
Given a sequence of observations, how do we find the most likely state sequence? This is the Viterbi algorithm—dynamic programming to find the optimal path through the state space.
Mathematical Formulation:
δ_t(j) = max_i × B_j(O_t)
Where:
δ_t(j) = probability of most likely path ending in state j at time t
A_ij = transition probability from state i to state j
B_j(O_t) = emission probability of observation O_t given state j
AMWT Implementation:
AMWT runs Viterbi over a rolling window (default 50 bars), computing the most likely state sequence and extracting:
• Current state estimate
• State confidence (probability of current state vs alternatives)
• State sequence for pattern detection
Online Learning (Baum-Welch Adaptation):
Unlike static HMMs, AMWT continuously updates its transition and emission matrices based on observed market behavior:
f_onlineUpdateHMM(prev_state, curr_state, observation, decay) =>
// Update transition matrix
A *= decay
A += (1.0 - decay)
// Renormalize row
// Update emission matrix
B *= decay
B += (1.0 - decay)
// Renormalize row
The decay parameter (default 0.85) controls adaptation speed:
• Higher decay (0.95): Slower adaptation, more stable, better for consistent markets
• Lower decay (0.80): Faster adaptation, more reactive, better for regime changes
Why This Matters for Trading:
Traditional indicators give you a number (RSI = 72). AMWT gives you a probabilistic state assessment :
"There is a 78% probability we are in IMPULSE_UP state, with 15% probability of CORRECTION and 7% distributed among other states. The transition matrix suggests 70% chance of remaining in IMPULSE_UP next bar, 20% chance of transitioning to CORRECTION."
This enables:
• Position sizing by confidence : 90% confidence = full size; 60% confidence = half size
• Risk management by transition probability : High correction probability = tighten stops
• Strategy selection by state : IMPULSE = trend-follow; CORRECTION = wait; ACCUMULATION = scale in
🎰 THE 3-BANDIT CONSENSUS SYSTEM
The Multi-Agent Philosophy:
No single analytical methodology works in all market conditions. Trend-following excels in trending markets but gets chopped in ranges. Mean-reversion excels in ranges but gets crushed in trends. Structure-based analysis works when structure is clear but fails in chaotic markets.
AMWT's solution: employ three independent agents , each analyzing the market from a different perspective, then use Thompson Sampling to learn which agents perform best in current conditions.
Agent 1: TREND AGENT
Philosophy : Markets trend. Follow the trend until it ends.
Analytical Components:
• EMA Alignment: EMA8 > EMA21 > EMA50 (bullish) or inverse (bearish)
• MACD Histogram: Direction and rate of change
• Price Momentum: Close relative to ATR-normalized movement
• VWAP Position: Price above/below volume-weighted average price
Signal Generation:
Strong Bull: EMA aligned bull AND MACD histogram > 0 AND momentum > 0.3 AND close > VWAP
→ Signal: +1 (Long), Confidence: 0.75 + |momentum| × 0.4
Moderate Bull: EMA stack bull AND MACD rising AND momentum > 0.1
→ Signal: +1 (Long), Confidence: 0.65 + |momentum| × 0.3
Strong Bear: EMA aligned bear AND MACD histogram < 0 AND momentum < -0.3 AND close < VWAP
→ Signal: -1 (Short), Confidence: 0.75 + |momentum| × 0.4
Moderate Bear: EMA stack bear AND MACD falling AND momentum < -0.1
→ Signal: -1 (Short), Confidence: 0.65 + |momentum| × 0.3
When Trend Agent Excels:
• Trend days (IB extension >1.5x)
• Post-breakout continuation
• Institutional accumulation/distribution phases
When Trend Agent Fails:
• Range-bound markets (ADX <20)
• Chop zones after volatility spikes
• Reversal days at major levels
Agent 2: REVERSION AGENT
Philosophy: Markets revert to mean. Extreme readings reverse.
Analytical Components:
• Bollinger Band Position: Distance from bands, percent B
• RSI Extremes: Overbought (>70) and oversold (<30)
• Stochastic: %K/%D crossovers at extremes
• Band Squeeze: Bollinger Band width contraction
Signal Generation:
Oversold Bounce: BB %B < 0.20 AND RSI < 35 AND Stochastic < 25
→ Signal: +1 (Long), Confidence: 0.70 + (30 - RSI) × 0.01
Overbought Fade: BB %B > 0.80 AND RSI > 65 AND Stochastic > 75
→ Signal: -1 (Short), Confidence: 0.70 + (RSI - 70) × 0.01
Squeeze Fire Bull: Band squeeze ending AND close > upper band
→ Signal: +1 (Long), Confidence: 0.65
Squeeze Fire Bear: Band squeeze ending AND close < lower band
→ Signal: -1 (Short), Confidence: 0.65
When Reversion Agent Excels:
• Rotation days (price stays within IB)
• Range-bound consolidation
• After extended moves without pullback
When Reversion Agent Fails:
• Strong trend days (RSI can stay overbought for days)
• Breakout moves
• News-driven directional moves
Agent 3: STRUCTURE AGENT
Philosophy: Market structure reveals institutional intent. Follow the smart money.
Analytical Components:
• Break of Structure (BOS): Price breaks prior swing high/low
• Change of Character (CHOCH): First break against prevailing trend
• Higher Highs/Higher Lows: Bullish structure
• Lower Highs/Lower Lows: Bearish structure
• Liquidity Sweeps: Stop runs that reverse
Signal Generation:
BOS Bull: Price breaks above prior swing high with momentum
→ Signal: +1 (Long), Confidence: 0.70 + structure_strength × 0.2
CHOCH Bull: First higher low after downtrend, breaking structure
→ Signal: +1 (Long), Confidence: 0.75
BOS Bear: Price breaks below prior swing low with momentum
→ Signal: -1 (Short), Confidence: 0.70 + structure_strength × 0.2
CHOCH Bear: First lower high after uptrend, breaking structure
→ Signal: -1 (Short), Confidence: 0.75
Liquidity Sweep Long: Price sweeps below swing low then reverses strongly
→ Signal: +1 (Long), Confidence: 0.80
Liquidity Sweep Short: Price sweeps above swing high then reverses strongly
→ Signal: -1 (Short), Confidence: 0.80
When Structure Agent Excels:
• After liquidity grabs (stop runs)
• At major swing points
• During institutional accumulation/distribution
When Structure Agent Fails:
• Choppy, structureless markets
• During news events (structure becomes noise)
• Very low timeframes (noise overwhelms structure)
Thompson Sampling: The Bandit Algorithm
With three agents giving potentially different signals, how do we decide which to trust? This is the multi-armed bandit problem —balancing exploitation (using what works) with exploration (testing alternatives).
Thompson Sampling Solution:
Each agent maintains a Beta distribution representing its success/failure history:
Agent success rate modeled as Beta(α, β)
Where:
α = number of successful signals + 1
β = number of failed signals + 1
On Each Bar:
1. Sample from each agent's Beta distribution
2. Weight agent signals by sampled probabilities
3. Combine weighted signals into consensus
4. Update α/β based on trade outcomes
Mathematical Implementation:
// Beta sampling via Gamma ratio method
f_beta_sample(alpha, beta) =>
g1 = f_gamma_sample(alpha)
g2 = f_gamma_sample(beta)
g1 / (g1 + g2)
// Thompson Sampling selection
for each agent:
sampled_prob = f_beta_sample(agent.alpha, agent.beta)
weight = sampled_prob / sum(all_sampled_probs)
consensus += agent.signal × agent.confidence × weight
Why Thompson Sampling?
• Automatic Exploration : Agents with few samples get occasional chances (high variance in Beta distribution)
• Bayesian Optimal : Mathematically proven optimal solution to exploration-exploitation tradeoff
• Uncertainty-Aware : Small sample size = more exploration; large sample size = more exploitation
• Self-Correcting : Poor performers naturally get lower weights over time
Example Evolution:
Day 1 (Initial):
Trend Agent: Beta(1,1) → samples ~0.50 (high uncertainty)
Reversion Agent: Beta(1,1) → samples ~0.50 (high uncertainty)
Structure Agent: Beta(1,1) → samples ~0.50 (high uncertainty)
After 50 Signals:
Trend Agent: Beta(28,23) → samples ~0.55 (moderate confidence)
Reversion Agent: Beta(18,33) → samples ~0.35 (underperforming)
Structure Agent: Beta(32,19) → samples ~0.63 (outperforming)
Result: Structure Agent now receives highest weight in consensus
Consensus Requirements by Mode:
Aggressive Mode:
• Minimum 1/3 agents agreeing
• Consensus threshold: 45%
• Use case: More signals, higher risk tolerance
Balanced Mode:
• Minimum 2/3 agents agreeing
• Consensus threshold: 55%
• Use case: Standard trading
Conservative Mode:
• Minimum 2/3 agents agreeing
• Consensus threshold: 65%
• Use case: Higher quality, fewer signals
Institutional Mode:
• Minimum 2/3 agents agreeing
• Consensus threshold: 75%
• Additional: Session quality >0.65, mode adjustment +0.10
• Use case: Highest quality signals only
🌀 INTELLIGENT CHOP DETECTION ENGINE
The Chop Problem:
Most trading losses occur not from being wrong about direction, but from trading in conditions where direction doesn't exist . Choppy, range-bound markets generate false signals from every methodology—trend-following, mean-reversion, and structure-based alike.
AMWT's chop detection engine identifies these low-probability environments before signals fire, preventing the most damaging trades.
Five-Factor Chop Analysis:
Factor 1: ADX Component (25% weight)
ADX (Average Directional Index) measures trend strength regardless of direction.
ADX < 15: Very weak trend (high chop score)
ADX 15-20: Weak trend (moderate chop score)
ADX 20-25: Developing trend (low chop score)
ADX > 25: Strong trend (minimal chop score)
adx_chop = (i_adxThreshold - adx_val) / i_adxThreshold × 100
Why ADX Works: ADX synthesizes +DI and -DI movements. Low ADX means price is moving but not directionally—the definition of chop.
Factor 2: Choppiness Index (25% weight)
The Choppiness Index measures price efficiency using the ratio of ATR sum to price range:
CI = 100 × LOG10(SUM(ATR, n) / (Highest - Lowest)) / LOG10(n)
CI > 61.8: Choppy (range-bound, inefficient movement)
CI < 38.2: Trending (directional, efficient movement)
CI 38.2-61.8: Transitional
chop_idx_score = (ci_val - 38.2) / (61.8 - 38.2) × 100
Why Choppiness Index Works: In trending markets, price covers distance efficiently (low ATR sum relative to range). In choppy markets, price oscillates wildly but goes nowhere (high ATR sum relative to range).
Factor 3: Range Compression (20% weight)
Compares recent range to longer-term range, detecting volatility squeezes:
recent_range = Highest(20) - Lowest(20)
longer_range = Highest(50) - Lowest(50)
compression = 1 - (recent_range / longer_range)
compression > 0.5: Strong squeeze (potential breakout imminent)
compression < 0.2: No compression (normal volatility)
range_compression_score = compression × 100
Why Range Compression Matters: Compression precedes expansion. High compression = market coiling, preparing for move. Signals during compression often fail because the breakout hasn't occurred yet.
Factor 4: Channel Position (15% weight)
Tracks price position within the macro channel:
channel_position = (close - channel_low) / (channel_high - channel_low)
position 0.4-0.6: Center of channel (indecision zone)
position <0.2 or >0.8: Near extremes (potential reversal or breakout)
channel_chop = abs(0.5 - channel_position) < 0.15 ? high_score : low_score
Why Channel Position Matters: Price in the middle of a range is in "no man's land"—equally likely to go either direction. Signals in the channel center have lower probability.
Factor 5: Volume Quality (15% weight)
Assesses volume relative to average:
vol_ratio = volume / SMA(volume, 20)
vol_ratio < 0.7: Low volume (lack of conviction)
vol_ratio 0.7-1.3: Normal volume
vol_ratio > 1.3: High volume (conviction present)
volume_chop = vol_ratio < 0.8 ? (1 - vol_ratio) × 100 : 0
Why Volume Quality Matters: Low volume moves lack institutional participation. These moves are more likely to reverse or stall.
Combined Chop Intensity:
chopIntensity = (adx_chop × 0.25) + (chop_idx_score × 0.25) +
(range_compression_score × 0.20) + (channel_chop × 0.15) +
(volume_chop × i_volumeChopWeight × 0.15)
Regime Classifications:
Based on chop intensity and component analysis:
• Strong Trend (0-20%): ADX >30, clear directional momentum, trade aggressively
• Trending (20-35%): ADX >20, moderate directional bias, trade normally
• Transitioning (35-50%): Mixed signals, regime change possible, reduce size
• Mid-Range (50-60%): Price trapped in channel center, avoid new positions
• Ranging (60-70%): Low ADX, price oscillating within bounds, fade extremes only
• Compression (70-80%): Volatility squeeze, expansion imminent, wait for breakout
• Strong Chop (80-100%): Multiple chop factors aligned, avoid trading entirely
Signal Suppression:
When chop intensity exceeds the configurable threshold (default 80%), signals are suppressed entirely. The dashboard displays "⚠️ CHOP ZONE" with the current regime classification.
Chop Box Visualization:
When chop is detected, AMWT draws a semi-transparent box on the chart showing the chop zone. This visual reminder helps traders avoid entering positions during unfavorable conditions.
💧 LIQUIDITY ANCHORING SYSTEM
The Liquidity Concept:
Markets move from liquidity pool to liquidity pool. Stop losses cluster at predictable locations—below swing lows (buy stops become sell orders when triggered) and above swing highs (sell stops become buy orders when triggered). Institutions know where these clusters are and often engineer moves to trigger them before reversing.
AMWT identifies and tracks these liquidity events, using them as anchors for signal confidence.
Liquidity Event Types:
Type 1: Volume Spikes
Definition: Volume > SMA(volume, 20) × i_volThreshold (default 2.8x)
Interpretation: Sudden volume surge indicates institutional activity
• Near swing low + reversal: Likely accumulation
• Near swing high + reversal: Likely distribution
• With continuation: Institutional conviction in direction
Type 2: Stop Runs (Liquidity Sweeps)
Definition: Price briefly exceeds swing high/low then reverses within N bars
Detection:
• Price breaks above recent swing high (triggering buy stops)
• Then closes back below that high within 3 bars
• Signal: Bullish stop run complete, reversal likely
Or inverse for bearish:
• Price breaks below recent swing low (triggering sell stops)
• Then closes back above that low within 3 bars
• Signal: Bearish stop run complete, reversal likely
Type 3: Absorption Events
Definition: High volume with small candle body
Detection:
• Volume > 2x average
• Candle body < 30% of candle range
• Interpretation: Large orders being filled without moving price
• Implication: Accumulation (at lows) or distribution (at highs)
Type 4: BSL/SSL Pools (Buy-Side/Sell-Side Liquidity)
BSL (Buy-Side Liquidity):
• Cluster of swing highs within ATR proximity
• Stop losses from shorts sit above these highs
• Breaking BSL triggers short covering (fuel for rally)
SSL (Sell-Side Liquidity):
• Cluster of swing lows within ATR proximity
• Stop losses from longs sit below these lows
• Breaking SSL triggers long liquidation (fuel for decline)
Liquidity Pool Mapping:
AMWT continuously scans for and maps liquidity pools:
// Detect swing highs/lows using pivot function
swing_high = ta.pivothigh(high, 5, 5)
swing_low = ta.pivotlow(low, 5, 5)
// Track recent swing points
if not na(swing_high)
bsl_levels.push(swing_high)
if not na(swing_low)
ssl_levels.push(swing_low)
// Display on chart with labels
Confluence Scoring Integration:
When signals fire near identified liquidity events, confluence scoring increases:
• Signal near volume spike: +10% confidence
• Signal after liquidity sweep: +15% confidence
• Signal at BSL/SSL pool: +10% confidence
• Signal aligned with absorption zone: +10% confidence
Why Liquidity Anchoring Matters:
Signals "in a vacuum" have lower probability than signals anchored to institutional activity. A long signal after a liquidity sweep below swing lows has trapped shorts providing fuel. A long signal in the middle of nowhere has no such catalyst.
📊 SIGNAL GRADING SYSTEM
The Quality Problem:
Not all signals are created equal. A signal with 6/6 factors aligned is fundamentally different from a signal with 3/6 factors aligned. Traditional indicators treat them the same. AMWT grades every signal based on confluence.
Confluence Components (100 points total):
1. Bandit Consensus Strength (25 points)
consensus_str = weighted average of agent confidences
score = consensus_str × 25
Example:
Trend Agent: +1 signal, 0.80 confidence, 0.35 weight
Reversion Agent: 0 signal, 0.50 confidence, 0.25 weight
Structure Agent: +1 signal, 0.75 confidence, 0.40 weight
Weighted consensus = (0.80×0.35 + 0×0.25 + 0.75×0.40) / (0.35 + 0.40) = 0.77
Score = 0.77 × 25 = 19.25 points
2. HMM State Confidence (15 points)
score = hmm_confidence × 15
Example:
HMM reports 82% probability of IMPULSE_UP
Score = 0.82 × 15 = 12.3 points
3. Session Quality (15 points)
Session quality varies by time:
• London/NY Overlap: 1.0 (15 points)
• New York Session: 0.95 (14.25 points)
• London Session: 0.70 (10.5 points)
• Asian Session: 0.40 (6 points)
• Off-Hours: 0.30 (4.5 points)
• Weekend: 0.10 (1.5 points)
4. Energy/Participation (10 points)
energy = (realized_vol / avg_vol) × 0.4 + (range / ATR) × 0.35 + (volume / avg_volume) × 0.25
score = min(energy, 1.0) × 10
5. Volume Confirmation (10 points)
if volume > SMA(volume, 20) × 1.5:
score = 10
else if volume > SMA(volume, 20):
score = 5
else:
score = 0
6. Structure Alignment (10 points)
For long signals:
• Bullish structure (HH + HL): 10 points
• Higher low only: 6 points
• Neutral structure: 3 points
• Bearish structure: 0 points
Inverse for short signals
7. Trend Alignment (10 points)
For long signals:
• Price > EMA21 > EMA50: 10 points
• Price > EMA21: 6 points
• Neutral: 3 points
• Against trend: 0 points
8. Entry Trigger Quality (5 points)
• Strong trigger (multiple confirmations): 5 points
• Moderate trigger (single confirmation): 3 points
• Weak trigger (marginal): 1 point
Grade Scale:
Total Score → Grade
85-100 → A+ (Exceptional—all factors aligned)
70-84 → A (Strong—high probability)
55-69 → B (Acceptable—proceed with caution)
Below 55 → C (Marginal—filtered by default)
Grade-Based Signal Brightness:
Signal arrows on the chart have transparency based on grade:
• A+: Full brightness (alpha = 0)
• A: Slight fade (alpha = 15)
• B: Moderate fade (alpha = 35)
• C: Significant fade (alpha = 55)
This visual hierarchy helps traders instantly identify signal quality.
Minimum Grade Filter:
Configurable filter (default: C) sets the minimum grade for signal display:
• Set to "A" for only highest-quality signals
• Set to "B" for moderate selectivity
• Set to "C" for all signals (maximum quantity)
🕐 SESSION INTELLIGENCE
Why Sessions Matter:
Markets behave differently at different times. The London open is fundamentally different from the Asian lunch hour. AMWT incorporates session-aware logic to optimize signal quality.
Session Definitions:
Asian Session (18:00-03:00 ET)
• Characteristics: Lower volatility, range-bound tendency, fewer institutional participants
• Quality Score: 0.40 (40% of peak quality)
• Strategy Implications: Fade extremes, expect ranges, smaller position sizes
• Best For: Mean-reversion setups, accumulation/distribution identification
London Session (03:00-12:00 ET)
• Characteristics: European institutional activity, volatility pickup, trend initiation
• Quality Score: 0.70 (70% of peak quality)
• Strategy Implications: Watch for trend development, breakouts more reliable
• Best For: Initial trend identification, structure breaks
New York Session (08:00-17:00 ET)
• Characteristics: Highest liquidity, US institutional activity, major moves
• Quality Score: 0.95 (95% of peak quality)
• Strategy Implications: Best environment for directional trades
• Best For: Trend continuation, momentum plays
London/NY Overlap (08:00-12:00 ET)
• Characteristics: Peak liquidity, both European and US participants active
• Quality Score: 1.0 (100%—maximum quality)
• Strategy Implications: Highest probability for successful breakouts and trends
• Best For: All signal types—this is prime time
Off-Hours
• Characteristics: Thin liquidity, erratic price action, gaps possible
• Quality Score: 0.30 (30% of peak quality)
• Strategy Implications: Avoid new positions, wider stops if holding
• Best For: Waiting
Smart Weekend Detection:
AMWT properly handles the Sunday evening futures open:
// Traditional (broken):
isWeekend = dayofweek == saturday OR dayofweek == sunday
// AMWT (correct):
anySessionActive = not na(asianTime) or not na(londonTime) or not na(nyTime)
isWeekend = calendarWeekend AND NOT anySessionActive
This ensures Sunday 6pm ET (when futures open) correctly shows "Asian Session" rather than "Weekend."
Session Transition Boosts:
Certain session transitions create trading opportunities:
• Asian → London transition: +15% confidence boost (volatility expansion likely)
• London → Overlap transition: +20% confidence boost (peak liquidity approaching)
• Overlap → NY-only transition: -10% confidence adjustment (liquidity declining)
• Any → Off-Hours transition: Signal suppression recommended
📈 TRADE MANAGEMENT SYSTEM
The Signal Spam Problem:
Many indicators generate signal after signal, creating confusion and overtrading. AMWT implements a complete trade lifecycle management system that prevents signal spam and tracks performance.
Trade Lock Mechanism:
Once a signal fires, the system enters a "trade lock" state:
Trade Lock Duration: Configurable (default 30 bars)
Early Exit Conditions:
• TP3 hit (full target reached)
• Stop Loss hit (trade failed)
• Lock expiration (time-based exit)
During lock:
• No new signals of same type displayed
• Opposite signals can override (reversal)
• Trade status tracked in dashboard
Target Levels:
Each signal generates three profit targets based on ATR:
TP1 (Conservative Target)
• Default: 1.0 × ATR
• Purpose: Quick partial profit, reduce risk
• Action: Take 30-40% off position, move stop to breakeven
TP2 (Standard Target)
• Default: 2.5 × ATR
• Purpose: Main profit target
• Action: Take 40-50% off position, trail stop
TP3 (Extended Target)
• Default: 5.0 × ATR
• Purpose: Runner target for trend days
• Action: Close remaining position or continue trailing
Stop Loss:
• Default: 1.9 × ATR from entry
• Purpose: Define maximum risk
• Placement: Below recent swing low (longs) or above recent swing high (shorts)
Invalidation Level:
Beyond stop loss, AMWT calculates an "invalidation" level where the wave hypothesis dies:
invalidation = entry - (ATR × INVALIDATION_MULT × 1.5)
If price reaches invalidation, the current market interpretation is wrong—not just the trade.
Visual Trade Management:
During active trades, AMWT displays:
• Entry arrow with grade label (▲A+, ▼B, etc.)
• TP1, TP2, TP3 horizontal lines in green
• Stop Loss line in red
• Invalidation line in orange (dashed)
• Progress indicator in dashboard
Persistent Execution Markers:
When targets or stops are hit, permanent markers appear:
• TP hit: Green dot with "TP1"/"TP2"/"TP3" label
• SL hit: Red dot with "SL" label
These persist on the chart for review and statistics.
💰 PERFORMANCE TRACKING & STATISTICS
Tracked Metrics:
• Total Trades: Count of all signals that entered trade lock
• Winning Trades: Signals where at least TP1 was reached before SL
• Losing Trades: Signals where SL was hit before any TP
• Win Rate: Winning / Total × 100%
• Total R Profit: Sum of R-multiples from winning trades
• Total R Loss: Sum of R-multiples from losing trades
• Net R: Total R Profit - Total R Loss
Currency Conversion System:
AMWT can display P&L in multiple formats:
R-Multiple (Default)
• Shows risk-normalized returns
• "Net P&L: +4.2R | 78 trades" means 4.2 times initial risk gained over 78 trades
• Best for comparing across different position sizes
Currency Conversion (USD/EUR/GBP/JPY/INR)
• Converts R-multiples to currency based on:
- Dollar Risk Per Trade (user input)
- Tick Value (user input)
- Selected currency
Example Configuration:
Dollar Risk Per Trade: $100
Display Currency: USD
If Net R = +4.2R
Display: Net P&L: +$420.00 | 78 trades
Ticks
• For futures traders who think in ticks
• Converts based on tick value input
Statistics Reset:
Two reset methods:
1. Toggle Reset
• Turn "Reset Statistics" toggle ON then OFF
• Clears all statistics immediately
2. Date-Based Reset
• Set "Reset After Date" (YYYY-MM-DD format)
• Only trades after this date are counted
• Useful for isolating recent performance
🎨 VISUAL FEATURES
Macro Channel:
Dynamic regression-based channel showing market boundaries:
• Upper/lower bounds calculated from swing pivot linear regression
• Adapts to current market structure
• Shows overall trend direction and potential reversal zones
Chop Boxes:
Semi-transparent overlay during high-chop periods:
• Purple/orange coloring indicates dangerous conditions
• Visual reminder to avoid new positions
Confluence Heat Zones:
Background shading indicating setup quality:
• Darker shading = higher confluence
• Lighter shading = lower confluence
• Helps identify optimal entry timing
EMA Ribbon:
Trend visualization via moving average fill:
• EMA 8/21/50 with gradient fill between
• Green fill when bullish aligned
• Red fill when bearish aligned
• Gray when neutral
Absorption Zone Boxes:
Marks potential accumulation/distribution areas:
• High volume + small body = absorption
• Boxes drawn at these levels
• Often act as support/resistance
Liquidity Pool Lines:
BSL/SSL levels with labels:
• Dashed lines at liquidity clusters
• "BSL" label above swing high clusters
• "SSL" label below swing low clusters
Six Professional Themes:
• Quantum: Deep purples and cyans (default)
• Cyberpunk: Neon pinks and blues
• Professional: Muted grays and greens
• Ocean: Blues and teals
• Matrix: Greens and blacks
• Ember: Oranges and reds
🎓 PROFESSIONAL USAGE PROTOCOL
Phase 1: Learning the System (Week 1)
Goal: Understand AMWT concepts and dashboard interpretation
Setup:
• Signal Mode: Balanced
• Display: All features enabled
• Grade Filter: C (see all signals)
Actions:
• Paper trade ONLY—no real money
• Observe HMM state transitions throughout the day
• Note when agents agree vs disagree
• Watch chop detection engage and disengage
• Track which grades produce winners vs losers
Key Learning Questions:
• How often do A+ signals win vs B signals? (Should see clear difference)
• Which agent tends to be right in current market? (Check dashboard)
• When does chop detection save you from bad trades?
• How do signals near liquidity events perform vs signals in vacuum?
Phase 2: Parameter Optimization (Week 2)
Goal: Tune system to your instrument and timeframe
Signal Mode Testing:
• Run 5 days on Aggressive mode (more signals)
• Run 5 days on Conservative mode (fewer signals)
• Compare: Which produces better risk-adjusted returns?
Grade Filter Testing:
• Track A+ only for 20 signals
• Track A and above for 20 signals
• Track B and above for 20 signals
• Compare win rates and expectancy
Chop Threshold Testing:
• Default (80%): Standard filtering
• Try 70%: More aggressive filtering
• Try 90%: Less filtering
• Which produces best results for your instrument?
Phase 3: Strategy Development (Weeks 3-4)
Goal: Develop personal trading rules based on system signals
Position Sizing by Grade:
• A+ grade: 100% position size
• A grade: 75% position size
• B grade: 50% position size
• C grade: 25% position size (or skip)
Session-Based Rules:
• London/NY Overlap: Take all A/A+ signals
• NY Session: Take all A+ signals, selective on A
• Asian Session: Only A+ signals with extra confirmation
• Off-Hours: No new positions
Chop Zone Rules:
• Chop >70%: Reduce position size 50%
• Chop >80%: No new positions
• Chop <50%: Full position size allowed
Phase 4: Live Micro-Sizing (Month 2)
Goal: Validate paper trading results with minimal risk
Setup:
• 10-20% of intended full position size
• Take ONLY A+ signals initially
• Follow trade management religiously
Tracking:
• Log every trade: Entry, Exit, Grade, HMM State, Chop Level, Agent Consensus
• Calculate: Win rate by grade, by session, by chop level
• Compare to paper trading (should be within 15%)
Red Flags:
• Win rate diverges significantly from paper trading: Execution issues
• Consistent losses during certain sessions: Adjust session rules
• Losses cluster when specific agent dominates: Review that agent's logic
Phase 5: Scaling Up (Months 3-6)
Goal: Gradually increase to full position size
Progression:
• Month 3: 25-40% size (if micro-sizing profitable)
• Month 4: 40-60% size
• Month 5: 60-80% size
• Month 6: 80-100% size
Scale-Up Requirements:
• Minimum 30 trades at current size
• Win rate ≥50%
• Net R positive
• No revenge trading incidents
• Emotional control maintained
💡 DEVELOPMENT INSIGHTS
Why HMM Over Simple Indicators:
Early versions used standard indicators (RSI >70 = overbought, etc.). Win rates hovered at 52-55%. The problem: indicators don't capture state. RSI can stay "overbought" for weeks in a strong trend.
The insight: markets exist in states, and state persistence matters more than indicator levels. Implementing HMM with state transition probabilities increased signal quality significantly. The system now knows not just "RSI is high" but "we're in IMPULSE_UP state with 70% probability of staying in IMPULSE_UP."
The Multi-Agent Evolution:
Original version used a single analytical methodology—trend-following. Performance was inconsistent: great in trends, destroyed in ranges. Added mean-reversion agent: now it was inconsistent the other way.
The breakthrough: use multiple agents and let the system learn which works . Thompson Sampling wasn't the first attempt—tried simple averaging, voting, even hard-coded regime switching. Thompson Sampling won because it's mathematically optimal and automatically adapts without manual regime detection.
Chop Detection Revelation:
Chop detection was added almost as an afterthought. "Let's filter out obviously bad conditions." Testing revealed it was the most impactful single feature. Filtering chop zones reduced losing trades by 35% while only reducing total signals by 20%. The insight: avoiding bad trades matters more than finding good ones.
Liquidity Anchoring Discovery:
Watched hundreds of trades. Noticed pattern: signals that fired after liquidity events (stop runs, volume spikes) had significantly higher win rates than signals in quiet markets. Implemented liquidity detection and anchoring. Win rate on liquidity-anchored signals: 68% vs 52% on non-anchored signals.
The Grade System Impact:
Early system had binary signals (fire or don't fire). Adding grading transformed it. Traders could finally match position size to signal quality. A+ signals deserved full size; C signals deserved caution. Just implementing grade-based sizing improved portfolio Sharpe ratio by 0.3.
🚨 LIMITATIONS & CRITICAL ASSUMPTIONS
What AMWT Is NOT:
• NOT a Holy Grail : No system wins every trade. AMWT improves probability, not certainty.
• NOT Fully Automated : AMWT provides signals and analysis; execution requires human judgment.
• NOT News-Proof : Exogenous shocks (FOMC surprises, geopolitical events) invalidate all technical analysis.
• NOT for Scalping : HMM state estimation needs time to develop. Sub-minute timeframes are not appropriate.
Core Assumptions:
1. Markets Have States : Assumes markets transition between identifiable regimes. Violation: Random walk markets with no regime structure.
2. States Are Inferable : Assumes observable indicators reveal hidden states. Violation: Market manipulation creating false signals.
3. History Informs Future : Assumes past agent performance predicts future performance. Violation: Regime changes that invalidate historical patterns.
4. Liquidity Events Matter : Assumes institutional activity creates predictable patterns. Violation: Markets with no institutional participation.
Performs Best On:
• Liquid Futures : ES, NQ, MNQ, MES, CL, GC
• Major Forex Pairs : EUR/USD, GBP/USD, USD/JPY
• Large-Cap Stocks : AAPL, MSFT, TSLA, NVDA (>$5B market cap)
• Liquid Crypto : BTC, ETH on major exchanges
Performs Poorly On:
• Illiquid Instruments : Low volume stocks, exotic pairs
• Very Low Timeframes : Sub-5-minute charts (noise overwhelms signal)
• Binary Event Days : Earnings, FDA approvals, court rulings
• Manipulated Markets : Penny stocks, low-cap altcoins
Known Weaknesses:
• Warmup Period : HMM needs ~50 bars to initialize properly. Early signals may be unreliable.
• Regime Change Lag : Thompson Sampling adapts over time, not instantly. Sudden regime changes may cause short-term underperformance.
• Complexity : More parameters than simple indicators. Requires understanding to use effectively.
⚠️ RISK DISCLOSURE
Trading futures, stocks, options, forex, and cryptocurrencies involves substantial risk of loss and is not suitable for all investors. Adaptive Market Wave Theory, while based on rigorous mathematical frameworks including Hidden Markov Models and multi-armed bandit algorithms, does not guarantee profits and can result in significant losses.
AMWT's methodologies—HMM state estimation, Thompson Sampling agent selection, and confluence-based grading—have theoretical foundations but past performance is not indicative of future results.
Hidden Markov Model assumptions may not hold during:
• Major news events disrupting normal market behavior
• Flash crashes or circuit breaker events
• Low liquidity periods with erratic price action
• Algorithmic manipulation or spoofing
Multi-agent consensus assumes independent analytical perspectives provide edge. Market conditions change. Edges that existed historically can diminish or disappear.
Users must independently validate system performance on their specific instruments, timeframes, and broker execution environment. Paper trade extensively before risking capital. Start with micro position sizing.
Never risk more than you can afford to lose completely. Use proper position sizing. Implement stop losses without exception.
By using this indicator, you acknowledge these risks and accept full responsibility for all trading decisions and outcomes.
"Elliott Wave was a first-order approximation of market phase behavior. AMWT is the second—probabilistic, adaptive, and accountable."
Initial Public Release
Core Engine:
• True Hidden Markov Model with online Baum-Welch learning
• Viterbi algorithm for optimal state sequence decoding
• 6-state market regime classification
Agent System:
• 3-Bandit consensus (Trend, Reversion, Structure)
• Thompson Sampling with true Beta distribution sampling
• Adaptive weight learning based on performance
Signal Generation:
• Quality-based confluence grading (A+/A/B/C)
• Four signal modes (Aggressive/Balanced/Conservative/Institutional)
• Grade-based visual brightness
Chop Detection:
• 5-factor analysis (ADX, Choppiness Index, Range Compression, Channel Position, Volume)
• 7 regime classifications
• Configurable signal suppression threshold
Liquidity:
• Volume spike detection
• Stop run (liquidity sweep) identification
• BSL/SSL pool mapping
• Absorption zone detection
Trade Management:
• Trade lock with configurable duration
• TP1/TP2/TP3 targets
• ATR-based stop loss
• Persistent execution markers
Session Intelligence:
• Asian/London/NY/Overlap detection
• Smart weekend handling (Sunday futures open)
• Session quality scoring
Performance:
• Statistics tracking with reset functionality
• 7 currency display modes
• Win rate and Net R calculation
Visuals:
• Macro channel with linear regression
• Chop boxes
• EMA ribbon
• Liquidity pool lines
• 6 professional themes
Dashboards:
• Main Dashboard: Market State, Consensus, Trade Status, Statistics
📋 AMWT vs AMWT-PRO:
This version includes all core AMWT functionality:
✓ Full Hidden Markov Model state estimation
✓ 3-Bandit Thompson Sampling consensus system
✓ Complete 5-factor chop detection engine
✓ All four signal modes
✓ Full trade management with TP/SL tracking
✓ Main dashboard with complete statistics
✓ All visual features (channels, zones, pools)
✓ Identical signal generation to PRO
✓ Six professional themes
✓ Full alert system
The PRO version adds the AMWT Advisor panel—a secondary dashboard providing:
• Real-time Market Pulse situation assessment
• Agent Matrix visualization (individual agent votes)
• Structure analysis breakdown
• "Watch For" upcoming setups
• Action Command coaching
Both versions generate identical signals . The Advisor provides additional guidance for interpreting those signals.
Taking you to school. - Dskyz, Trade with probability. Trade with consensus. Trade with AMWT.
Casa_VolumeProfileSessionLibrary "Casa_VolumeProfileSession"
Analyzes price and volume during regular trading hours to provide a session volume profile,
including Point of Control (POC), Value Area High (VAH), and Value Area Low (VAL).
Calculates and displays these levels historically and for the developing session.
Offers customizable visualization options for the Value Area, POC, histogram, and labels.
Uses lower timeframe data for increased accuracy and supports futures sessions.
The number of rows used for the volume profile can be fixed or dynamically calculated based on the session's price range and the instrument's minimum tick increment, providing optimal resolution.
calculateEffectiveRows(configuredRows, dayHigh, dayLow)
Determines the optimal number of rows for the volume profile, either using the configured value or calculating dynamically based on price range and tick size
Parameters:
configuredRows (int) : User-specified number of rows (0 means auto-calculate)
dayHigh (float) : Highest price of the session
dayLow (float) : Lowest price of the session
Returns: The number of rows to use for the volume profile
debug(vp, position)
Helper function to write some information about the supplied SVP object to the screen in a table.
Parameters:
vp (Object) : The SVP object to debug
position (string) : The position.* to place the table. Defaults to position.bottom_center
getLowerTimeframe()
Depending on the timeframe of the chart, determines a lower timeframe to grab volume data from for the analysis
Returns: The timeframe string to fetch volume for
get(volumeProfile, lowerTimeframeHigh, lowerTimeframeLow, lowerTimeframeVolume, lowerTimeframeTime, lowerTimeframeSessionIsMarket)
Populated the provided SessionVolumeProfile object with vp data on the session.
Parameters:
volumeProfile (Object) : The SessionVolumeProfile object to populate
lowerTimeframeHigh (array) : The lower timeframe high values
lowerTimeframeLow (array) : The lower timeframe low values
lowerTimeframeVolume (array) : The lower timeframe volume values
lowerTimeframeTime (array) : The lower timeframe time values
lowerTimeframeSessionIsMarket (array) : The lower timeframe session.ismarket values (that are futures-friendly)
drawPriorValueAreas(todaySessionVolumeProfile, extendYesterdayOverToday, showLabels, labelSize, pocColor, pocStyle, pocWidth, vahlColor, vahlStyle, vahlWidth, vaColor)
Given a SessionVolumeProfile Object, will render the historical value areas for that object.
Parameters:
todaySessionVolumeProfile (Object) : The SessionVolumeProfile Object to draw
extendYesterdayOverToday (bool) : Defaults to true
showLabels (bool) : Defaults to true
labelSize (string) : Defaults to size.small
pocColor (color) : Defaults to #e500a4
pocStyle (string) : Defaults to line.style_solid
pocWidth (int) : Defaults to 1
vahlColor (color) : The color of the value area high/low lines. Defaults to #1592e6
vahlStyle (string) : The style of the value area high/low lines. Defaults to line.style_solid
vahlWidth (int) : The width of the value area high/low lines. Defaults to 1
vaColor (color) : The color of the value area background. Defaults to #00bbf911)
drawHistogram(volumeProfile, bgColor, showVolumeOnHistogram)
Given a SessionVolumeProfile object, will render the histogram for that object.
Parameters:
volumeProfile (Object) : The SessionVolumeProfile object to draw
bgColor (color) : The baseline color to use for the histogram. Defaults to #00bbf9
showVolumeOnHistogram (bool) : Show the volume amount on the histogram bars. Defaults to false.
Object
Object Contains all settings and calculated values for a Volume Profile Session analysis
Fields:
numberOfRows (series int) : Number of price levels to divide the range into. If set to 0, auto-calculates based on price range and tick size
valueAreaCoverage (series int) : Percentage of total volume to include in the Value Area (default 70%)
trackDevelopingVa (series bool) : Whether to calculate and display the Value Area as it develops during the session
valueAreaHigh (series float) : Upper boundary of the Value Area - price level containing specified % of volume
pointOfControl (series float) : Price level with the highest volume concentration
valueAreaLow (series float) : Lower boundary of the Value Area
startTime (series int) : Session start time in Unix timestamp format
endTime (series int) : Session end time in Unix timestamp format
dayHigh (series float) : Highest price of the session
dayLow (series float) : Lowest price of the session
step (series float) : Size of each price row (calculated as price range divided by number of rows)
pointOfControlLevel (series int) : Index of the row containing the Point of Control
valueAreaHighLevel (series int) : Index of the row containing the Value Area High
valueAreaLowLevel (series int) : Index of the row containing the Value Area Low
lastTime (series int) : Tracks the most recent timestamp processed
volumeRows (map) : Stores volume data for each price level row (key=row number, value=volume)
ltfSessionHighs (array) : Stores high prices from lower timeframe data
ltfSessionLows (array) : Stores low prices from lower timeframe data
ltfSessionVols (array) : Stores volume data from lower timeframe data
Scalp Precision Matrix [BullByte]SCALP PRECISION MATRIX (SPM)
OVERVIEW
Scalp Precision Matrix (SPM) is a comprehensive decision-support framework designed specifically for scalpers and short-term traders. This indicator synthesizes five distinct analytical layers into a unified system that helps identify high-quality setups while avoiding common pitfalls that trap traders.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE CORE PROBLEM THIS INDICATOR ADDRESSES
Scalping demands rapid decision-making while simultaneously processing multiple data points. Traders constantly ask themselves: Is momentum still alive? Am I entering near a potential reversal zone? Is this the right session to trade? What is my actual risk-to-reward? Most traders either overwhelm themselves with too many separate indicators (creating analysis paralysis) or use too few (missing crucial context).
SPM was developed to consolidate these essential checks into one cohesive framework. Rather than overlaying disconnected indicators, each component in SPM directly informs and adjusts the others, creating an integrated analytical system.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHY THESE SPECIFIC COMPONENTS AND HOW THEY WORK TOGETHER
The five analytical layers in SPM are not arbitrarily combined. Each addresses a specific question in the scalping decision process, and together they form a logical workflow:
LAYER 1: MOMENTUM FUEL GAUGE
This answers the question: "Does the current move still have energy?"
After any impulse move (a significant directional price movement), momentum naturally decays over time. The Fuel Gauge estimates remaining momentum by analyzing four factors:
Body Strength (30% weight): Compares recent candle body sizes against the historical average. Strong momentum produces candles with large bodies relative to their wicks. The calculation takes the 3-bar average body size divided by the 20-bar average body size, then scales it to a 0-100 range.
Wick Rejection (25% weight): Measures the wick-to-body ratio. When wicks are large relative to bodies, it suggests rejection and weakening momentum. A ratio of 2.0 or higher (wicks twice the body size) scores low; smaller ratios score higher.
Volume Consistency (20% weight): Compares recent 3-bar average volume against the lookback period average. Sustained moves require consistent volume support. Volume dropping off suggests the move may be losing participation.
Time Decay (25% weight): Tracks how many bars have passed since the last detected impulse. Momentum naturally fades over time. The typical impulse duration is adjusted based on the current volatility regime.
These components are weighted and combined, then smoothed with a 3-period EMA to reduce noise. The result is a 0-100% gauge where:
- Above 70% = Strong momentum (green)
- 40-70% = Moderate momentum (amber)
- Below 40% = Weak momentum (red)
- Below 20% = Exhausted (triggers EXIT warning)
The Fuel Gauge also estimates how many bars of momentum remain based on the current burn rate.
IMPORTANT DISCLAIMER : The Fuel Gauge is NOT order flow, volume profile, or depth of market data. It is a technical proxy calculated entirely from standard OHLCV (Open, High, Low, Close, Volume) data. The term "Fuel" is used metaphorically to represent estimated remaining momentum energy.
LAYER 2: TRAP ZONE DETECTION
This answers the question: "Am I walking into a potential reversal area?"
Price tends to reverse at levels where it has reversed before. SPM identifies these zones by detecting clusters of historical swing points:
How it works:
1. The indicator detects swing highs and swing lows using the Swing Detection Length setting (default 5 bars on each side required to confirm a pivot).
2. Recent swing points are stored (up to 10 of each type).
3. For each potential zone, the algorithm counts how many swing points cluster within a tolerance of 0.5 ATR.
4. Zones with 2 or more clustered swing points, positioned between 0.3 and 4.0 ATR from current price, are marked as Trap Zones.
5. A Confluence Score is calculated based on cluster density and proximity to current price.
The percentage displayed (e.g., "TRAP 85%") is a CONFLUENCE SCORE, not a probability. Higher percentages mean more swing points cluster at that level and price is closer to it. This indicates stronger historical significance, not a prediction of future reversal.
CRITICAL DISCLAIMER : Trap Zones are NOT institutional order flow, liquidity pools, smart money footprints, or any proprietary data feed. They are calculated purely from historical swing point clustering using standard technical analysis. The term "trap" describes how price action has historically reversed at these levels, potentially trapping traders who enter prematurely. This is pattern recognition, not market structure data.
LAYER 3: VELOCITY ANALYSIS
This answers the question: "Is price moving favorably right now?"
Velocity measures how fast price is currently moving compared to its recent average:
Calculation:
- Current velocity = Absolute price change from previous bar divided by ATR
- Average velocity = Simple moving average of velocity over the lookback period
- Velocity ratio = Current velocity divided by average velocity
Classification:
- FAST (ratio above 1.5 ): Price is moving significantly faster than normal. Good for momentum continuation plays.
- NORMAL (ratio 0.5 to 1.5) : Typical price movement speed.
- SLOW (ratio below 0.5 ): Price is moving sluggishly. Often indicates ranging or choppy conditions where scalping becomes difficult.
The velocity score contributes 18% to the overall quality score calculation.
LAYER 4: SESSION AWARENESS
This answers the question: "Is this a good time to trade?"
Different trading sessions have different characteristics. SPM automatically detects which major session is active and adjusts its quality assessment:
Session Times (all in UTC):
- A sia Session : 00:00 - 08:00 UTC
- London Session : 08:00 - 16:00 UTC
- New York Session : 13:00 - 21:00 UTC
- London/NY Overlap : 13:00 - 16:00 UTC
- Off-Peak : Outside major sessions
Session Quality Weighting:
- Overlap : 100 points (highest liquidity, best movement)
- London : 85 points
- New York : 80 points
- Asia : 50 points (tends to range more)
- Off-Peak : 30 points (lower liquidity, more false signals)
The session score contributes 17% to the overall quality calculation. Signals are also filtered to prevent firing during off-peak hours.
Note : These are fixed UTC times and may not perfectly match your broker's session boundaries. Use them as general guidance rather than precise timing.
LAYER 5: VOLATILITY REGIME ADAPTATION
This answers the question: "How should I adjust for current market conditions?"
SPM compares current volatility (14-period ATR) against historical volatility (50-period ATR) to categorize the market:
HIGH Volatility (ratio above 1.3): Current ATR is 30%+ above normal. SPM widens thresholds to filter noise and extends target projections.
NORMAL Volatility (ratio 0.7 to 1.3): Typical conditions. Standard parameters apply.
LOW Volatility (ratio below 0.7): Current ATR is 30%+ below normal. SPM tightens thresholds for sensitivity and reduces target expectations. The market state may show AVOID during prolonged low volatility.
This adaptation prevents false signals during erratic markets and missed signals during quiet markets.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE SYNERGY: WHY THIS COMBINATION MATTERS
These five layers are not independent indicators placed on one chart. They form an interconnected system:
- A signal only fires when momentum exists (Fuel above 40%), price is away from danger zones (Trap Zones factored into quality score), movement is favorable (Velocity contributes to score), timing is appropriate (Session is not off-peak), and volatility is accounted for (thresholds adapt to regime).
- The Trap Zones directly influence Entry Zone placement. Entry zones are positioned beyond trap zones to avoid getting caught in reversals.
- Target projections automatically adjust to avoid placing take-profit levels inside detected trap zones.
- The Fuel Gauge affects which signal tier fires. Insufficient fuel prevents all signals.
- Session quality is weighted into the overall score, reducing signal quality during less favorable trading hours.
This integration is the core originality of SPM. Each component makes the others more useful than they would be in isolation.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW THE QUALITY SCORE IS CALCULATED
The Quality Score (0-100) synthesizes all layers into a single number for each direction (long and short):
For Long Quality Score:
- Fuel Component (28% weight) : Full fuel value if impulse direction is bullish; 60% of fuel value otherwise
- Trap Avoidance (22% weight) : 75 points if no trap zone below; otherwise 100 minus the trap confluence score (minimum 20)
- Velocity Component (18% weight) : Direct velocity score
- Session Component (17% weight) : Current session quality score
- Trend Alignment (15% bonus) : Adds 12 points if price is above the 20-period SMA
For Short Quality Score:
- Same structure but reversed (bearish impulse direction, trap zone above, price below SMA)
The direction with the higher score becomes the current Bias. A 12-point difference is required to switch bias, preventing flip-flopping in neutral conditions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SIGNAL TYPES AND WHAT THEY MEAN
SPM generates four types of signals, each with specific visual representation:
PRIME SIGNALS (Cyan Diamond)
These represent the highest quality confluence. Requirements:
- Quality score crosses above the Prime threshold (default 80)
- Bias aligns with signal direction
- Fuel is sufficient (above 40%)
- Session is active (not off-peak)
- Cooldown period has passed
Prime signals appear as cyan-colored diamond shapes. Long signals appear below the bar; short signals appear above.
STANDARD SIGNALS (Green Triangle Up / Red Triangle Down)
These represent good quality setups. Requirements:
- Quality score crosses above the Standard threshold (default 75) but below Prime
- Same bias, fuel, and cooldown requirements as Prime
Standard signals appear as small triangles in green (long) or red (short).
CAUTION SIGNALS (Small Faded Circle)
These represent minimum threshold setups. Requirements:
- Quality score crosses above the Caution threshold (default 65) but below Standard
- Same additional requirements
Caution signals appear as small, faded circles. These suggest the setup exists but with weaker confluence. Consider these only when broader market context supports them, or skip them entirely during uncertain conditions.
EXHAUSTION SIGNAL (Purple X with "EXIT" text)
This warning appears when the Fuel Gauge drops below 20% from above, indicating momentum has depleted. This is not a trade signal but a warning to:
- Consider exiting existing positions
- Avoid entering new trades in the current direction
- Wait for new momentum to develop
All signals use CONFIRMED bar data only (referencing the previous closed bar) to prevent repainting. Once a signal appears, it will never disappear or change position on historical bars.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
READING THE CHART ELEMENTS
TRAP ZONES (Red Dashed Box with "TRAP XX%" Label)
These mark price levels where multiple historical swing points cluster. The red dashed box shows the zone boundaries. The percentage is the confluence score indicating cluster strength and proximity.
How to use: When price approaches a trap zone, be cautious about entering in that direction. If your bias is LONG and there's a strong trap zone above, consider taking partial profits before price reaches it or adjusting your target below it.
ENTRY ZONES (Green Solid Box with "ENTRY" Label)
These show suggested entry areas based on the current bias direction. For LONG bias, the entry zone appears below the trap zone (buying the dip beyond support). For SHORT bias, it appears above the trap zone (selling the rally beyond resistance).
How to use: Rather than entering at current price, consider placing limit orders within the entry zone. This positions you beyond where typical trap reversals occur.
TARGET ZONES (Blue Dotted Box with "TARGET" Label)
These project potential take-profit areas based on ATR multiples, adjusted for:
- Current volatility regime (wider in high volatility, tighter in low)
- Impulse direction (larger targets when aligned with impulse)
- Nearby trap zones (targets adjust to avoid placing TP inside trap zones)
How to use: These are suggestions, not guarantees. Consider taking partial profits before the target or using trailing stops once price moves favorably.
STOP LEVEL (Orange Dashed Line with "STOP" Label)
This shows suggested stop-loss placement, calculated as 0.8 ATR beyond the trap zone (or 2.0 ATR from current price if no trap zone exists).
How to use: This provides a reference for risk calculation. The dashboard R:R ratio is calculated using this stop level.
Chart Example: Scalp Precision Matrix displays real-time market analysis through dynamic zones and quality scores. ENTRY/TARGET/STOP zones show potential price levels based on current market structure - they appear continuously as reference points, NOT as trade instructions. Actual trade signals (diamonds, triangles, circles) fire only when multiple conditions align: quality score thresholds are crossed, fuel gauge is sufficient, session is active, and cooldown period has passed. The zones help you understand market context; the signals tell you when to act.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
UNDERSTANDING THE DASHBOARD (Top Right Panel)
The main dashboard provides comprehensive market context:
Row 1 - Header:
- "SPM " : Indicator name
- Market State : Current overall condition
Market States Explained:
- PRIME : Excellent conditions. Quality score meets prime threshold, session is active. Best opportunities.
- READY : Good conditions. Quality score meets standard threshold. Solid setups available.
- WAIT : Mixed conditions. Some factors favorable, others not. Patience recommended.
- AVOID : Poor conditions. Off-peak session or very low volatility. High risk of false signals.
- EXIT : Fuel exhausted. Momentum depleted. Consider closing positions or waiting.
Row 2-3 - Quality Bars:
- " UP ########## " : Visual meter for long quality (each # = 10 points, . = empty)
- " DN ########## " : Visual meter for short quality
- The number on the right shows the exact quality score
Row 4 - Bias:
- Shows current directional lean: LONG, SHORT, or NEUTRAL
- Color-coded: Green for long, red for short, gray for neutral
Rows 5-7 (Full Mode Only) - Trade Levels:
- Entry : Suggested entry price for current bias direction
- Stop : Suggested stop-loss price
- Target : Projected take-profit price
Row 8 - Risk:Reward Ratio:
- Format : "1:X.X" where X.X is the reward multiple
- Color-coded : Green if 2:1 or better, amber if 1.5:1 to 2:1, red if below 1.5:1
Row 9 - Fuel:
- Shows percentage and estimated bars remaining in parentheses
- Example : "72% (8)" means 72% fuel with approximately 8 bars remaining
- Color-coded : Green above 70%, amber 40-70%, red below 40%
Row 10-11 (Full Mode Only) - Market Conditions:
- Vol : Current volatility regime (HIGH/NORMAL/LOW)
- Speed : Current velocity zone (FAST/NORMAL/SLOW)
Row 12 - Session:
- Shows active trading session
- Color-coded by session type
Row 13 (Full Mode Only) - Remaining:
- Time remaining in current session (hours and minutes)
Row 14 (Conditional) - Trap Warning:
- Appears when a significant trap zone exists in your bias direction
- Shows direction (ABOVE/BELOW) and confluence percentage
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
UNDERSTANDING THE QUICK PANEL (Bottom Left)
The Quick Panel provides essential information at a glance without looking away from price action:
Row 1: Current Bias and Quality Score (large text for quick reading)
Row 2: Market State
Row 3: Fuel Percentage
Row 4: Estimated Bars Remaining
Row 5: Risk:Reward Ratio
Row 6: Current Session
Both panels can be repositioned using the settings, and each can be toggled on/off independently.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS EXPLAINED
CORE SETTINGS:
Analysis Lookback (Default: 20)
Number of bars used for statistical calculations including average volume and average body size. Higher values create smoother but slower-reacting analysis. Lower values are more responsive but may include more noise.
Swing Detection Length (Default: 5)
Bars required on each side to confirm a swing high or low. A setting of 5 means a swing high must have 5 lower highs on each side. Lower values detect more swings (more trap zones, more sensitivity). Higher values find only major pivots (fewer but more significant zones).
Impulse Sensitivity (Default: 1.5)
Multiplier for ATR when detecting impulse moves. Lower values (like 1.0) detect smaller price movements as impulses, refreshing the fuel gauge more frequently. Higher values (like 2.5) require larger moves, making impulse detection less frequent but more significant.
SIGNAL SETTINGS:
Prime/Standard/Caution Thresholds (Defaults: 80/75/65)
These control the quality score required for each signal tier. You can adjust these based on your preference:
- More conservative : Raise thresholds (e.g., 85/80/70) for fewer but higher-quality signals
- More aggressive : Lower thresholds (e.g., 75/70/60) for more signals with slightly lower quality
Signal Cooldown (Default: 8 bars)
Minimum bars between signals to prevent signal spam. After any signal fires, no new signals can appear until this many bars pass. Increase for fewer signals in choppy markets; decrease if you want faster signal refresh.
Show Prime/Standard/Caution/Exhaustion Signals
Toggle each signal type on or off based on your preference.
ZONE DISPLAY:
Show Trap Zones / Entry Zones / Target Zones / Stop Levels
Toggle each zone type on or off. Turning off zones you don't use reduces chart clutter.
Zone Transparency (Default: 88)
Controls how transparent zone boxes appear. Higher values (closer to 95) make zones barely visible; lower values (closer to 75) make them more prominent.
Zone History (Default: 25 bars)
How far back zone boxes extend on the chart. Purely visual preference.
BACKGROUND:
Background Mode (Options: Off, Subtle, Normal)
Controls whether and how intensely the chart background is colored. Subtle is barely noticeable; Normal is more visible; Off disables background coloring entirely.
Background Type (Options: Bias, Fuel)
- Bias : Colors background based on current directional lean (green for long, red for short)
- Fuel : Colors background based on momentum level (green for high fuel, amber for moderate, red for low)
DASHBOARD / QUICK PANEL:
Show Dashboard / Show Quick Panel
Toggle each panel on or off.
Compact Mode
When enabled, the main dashboard shows only essential rows (quality bars, bias, R:R, fuel, session) without entry/stop/target levels, volatility, velocity, or time remaining.
Position Settings
Choose where each panel appears on your chart from six options: Top Right, Top Left, Bottom Right, Bottom Left, Middle Right, Middle Left.
ALERTS:
Alert Prime Signals / Standard Signals / Fuel Exhaustion
Enable or disable TradingView alerts for each condition. When enabled, you can set up alerts in TradingView that will notify you when these conditions occur.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
RECOMMENDED TIMEFRAMES AND USAGE
OPTIMAL TIMEFRAMES:
- 1-minute to 5-minute : Best for active scalping with quick entries and exits
- 5-minute to 15-minute : Balanced scalping with slightly more confirmation
- 15-minute to 1-hour : Short-term swing entries, fewer but more significant signals
Zone visualizations only appear on intraday timeframes to prevent chart clutter on higher timeframes.
BEST PRACTICES:
1. Trade primarily during LONDON, NEW YORK, or OVERLAP sessions. The indicator weights these sessions higher for good reason - liquidity and movement are typically better.
2. Prioritize PRIME signals. These represent the highest confluence and have proven most reliable. Use STANDARD signals as secondary opportunities. Treat CAUTION signals with extra scrutiny.
3. Respect the Fuel Gauge. Avoid entering new positions when fuel is below 40%. When the EXIT signal appears, seriously consider closing or reducing positions.
4. Pay attention to TRAP warnings. When the dashboard shows a trap zone in your bias direction, be cautious about holding through that level.
5. Verify R:R before entry. The dashboard shows the risk-to-reward ratio. Ensure it meets your minimum requirements (many traders require at least 1.5:1 or 2:1).
6. When state shows AVOID or EXIT, step back. These conditions typically produce poor results.
7. Combine with your own analysis. SPM is a decision-support tool, not a standalone system. Use it alongside your understanding of market structure, news events, and overall context.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRACTICAL EXAMPLE
Scenario : You're watching a 5-minute chart during London session. A cyan diamond (Prime Long signal) appears below the bar.
Before entering, you check the dashboard:
- State shows "PRIME" - conditions are favorable
- Fuel shows "72% (8)" - plenty of momentum remaining (approximately 8 bars)
- R:R shows "1:2.3" - acceptable risk-to-reward ratio
- Session shows "LONDON" - active session with good liquidity
- No TRAP warning in dashboard - no immediate resistance cluster in your way
- Entry zone visible on chart at a lower price level
- Stop and Target zones clearly marked
With this confluence of factors, you have context for a more informed decision. The signal indicates quality, the fuel suggests momentum remains, the R:R is favorable, and no immediate trap threatens your trade.
However, you also notice the target zone sits just below where a trap zone would be if there were one. This is by design - SPM adjusts targets to avoid placing them inside reversal zones.
This multi-factor confirmation delivered in a single glance is what SPM provides.
Chart Example :This chart demonstrates how the Scalp Precision Matrix identifies key market transitions. After a strong bullish impulse (cyan PRIME signal at ~08:30), price reached a historical reversal cluster (TRAP ZONE at 92,300). The indicator detected momentum exhaustion (purple EXIT signal) as fuel dropped below 20%, warning traders to exit longs. Now showing a SHORT bias with entry/stop/target zones clearly marked. The 92% trap zone confluence indicates a strong cluster of previous swing highs where price historically reversed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DATA WINDOW VALUES
For detailed analysis and strategy development, SPM exports the following values to TradingView's Data Window (visible when you hover over the chart with the indicator selected):
- Long Quality Score (0-100)
- Short Quality Score (0-100)
- Fuel Gauge (0-100%)
- Risk:Reward Ratio
These values can be useful for understanding how the indicator behaves over time and for developing your own insights about when it works best for your trading style.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NON-REPAINTING CONFIRMATION
All signals in SPM are generated using CONFIRMED bar data only. The signal logic references the previous closed bar's values ( and in Pine Script terms). This means:
- Signals appear at the OPEN of the new bar (after the previous bar closes)
- Signals will NEVER disappear once they appear
- Signals will NEVER change position on historical bars
- What you see in backtesting is what you would have seen in real-time
The dashboard and zones update in real-time to provide current market context, but the trading signals themselves are non-repainting.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IMPORTANT DISCLAIMERS
TERMINOLOGY CLARIFICATION:
This indicator uses terms that might imply access to data it does not have. To be completely transparent:
- "Trap Zones" are calculated from historical swing point clustering. They are NOT institutional liquidity pools, order blocks, smart money footprints, or any form of order flow data. The term "trap" is metaphorical, describing how price has historically reversed at these levels.
- "Fuel Gauge" is a technical momentum proxy. It is NOT order flow, volume profile, depth of market, or bid/ask data. It estimates momentum remaining based entirely on standard OHLCV price and volume data.
- "Quality Scores" are weighted combinations of the technical factors described above. A high score indicates multiple conditions align favorably according to the indicator's logic. It does NOT predict or guarantee trade success.
- The percentages shown on trap zones are CONFLUENCE SCORES measuring cluster density and proximity. They are NOT probability predictions of reversal.
TRADING RISK WARNING:
Trading involves substantial risk of loss and is not suitable for all investors. This indicator is a technical analysis tool designed to assist with decision-making. It does not constitute financial advice, trading advice, or any other sort of advice. Past performance of any signal or pattern does not guarantee future results. Markets are inherently unpredictable.
Always use proper risk management. Define your risk before entering any trade. Never risk more than you can afford to lose. Consider consulting with a licensed financial advisor before making trading decisions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ORIGINALITY STATEMENT - NOT A MASHUP
Scalp Precision Matrix is an original work that combines several analytical concepts into a purpose-built scalping framework. While individual components like ATR calculations, pivot detection, session timing, and trend alignment exist in various forms elsewhere, the specific implementation here represents original synthesis:
- The Fuel Gauge decay model with its four-component weighted calculation
- The Trap Zone cluster detection with confluence scoring
- The multi-factor quality scoring system that integrates all layers
- The trap-aware entry and target zone placement logic
- The volatility regime adaptation across all components
- The session weighting is integrated into the quality assessment
The indicator does not simply overlay separate indicators on one chart. It creates interconnected layers where each component informs and adjusts the others. This integration is the core originality of SPM.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
For best results, combine SPM with your own market understanding and always practice proper risk management.
-BullByte
Volume Profile (Simple)Simple Volume Profile (Simple)
Master the Market's Structure with a Clear View of Volume
by mercaderoaurum
The Simple Volume Profile (Simple) indicator removes the guesswork by showing you exactly where the most significant trading activity has occurred. By visualizing the Point of Control (POC) and Value Area (VA) for today and yesterday, you can instantly identify the price levels that matter most, giving you a critical edge in your intraday trading.
This tool is specifically optimized for day trading SPY on a 1-minute chart, but it's fully customizable for any symbol or timeframe.
Key Features
Multi-Day Analysis: Automatically plots the volume profiles for the current and previous trading sessions, allowing you to see how today's market is reacting to yesterday's key levels.
Automatic Key Level Plotting: Instantly see the most important levels from each session:
Point of Control (POC): The single price level with the highest traded volume, acting as a powerful magnet for price.
Value Area High (VAH): The upper boundary of the area where 50% of the volume was traded. It often acts as resistance.
Value Area Low (VAL): The lower boundary of the 50% value area, often acting as support.
Extended Levels: The POC, VAH, and VAL from previous sessions are automatically extended into the current day, providing a clear map of potential support and resistance zones.
Customizable Sessions: While optimized for the US stock market, you can define any session time and time zone, making it a versatile tool for forex, crypto, and futures traders.
Core Trading Strategies
The Simple Volume Profile helps you understand market context. Instead of trading blind, you can now make decisions based on where the market has shown the most interest.
1. Identifying Support and Resistance
This is the most direct way to use the indicator. The extended lines from the previous day are your roadmap for the current session.
Previous Day's POC (pPOC): This is the most significant level. Watch for price to react strongly here. It can act as powerful support if approached from above or strong resistance if approached from below.
Previous Day's VAH (pVAH): Expect this level to act as initial resistance. A clean break above pVAH can signal a strong bullish trend.
Previous Day's VAL (pVAL): Expect this level to act as initial support. A firm break below pVAL can indicate a strong bearish trend.
Example Strategy: If SPY opens and rallies up to the previous day's VAH and stalls, this is a high-probability area to look for a short entry, with a stop loss just above the level.
2. The "Open-Drive" Rejection
How the market opens in relation to the previous day's value area is a powerful tell.
Open Above Yesterday's Value Area: If the market opens above the pVAH, it signals strength. The first pullback to test the pVAH is often a key long entry point. The level is expected to flip from resistance to support.
Open Below Yesterday's Value Area: If the market opens below the pVAL, it signals weakness. The first rally to test the pVAL is a potential short entry, as the level is likely to act as new resistance.
3. Fading the Extremes
When price pushes far outside the previous day's value area, it can become overextended.
Reversal at Highs: If price rallies significantly above the pVAH and then starts to lose momentum (e.g., forming bearish divergence on RSI or a topping pattern), it could be an opportunity to short the market, targeting a move back toward the pVAH or pPOC.
Reversal at Lows: Conversely, if price drops far below the pVAL and shows signs of bottoming, it can be a good opportunity to look for a long entry, targeting a reversion back to the value area.
Recommended Settings (SPY Intraday)
These settings are the default and are optimized for scalping or day trading SPY on a 1-minute chart.
Value Area (%): 50%. This creates a tighter, more sensitive value area, perfect for identifying the most critical intraday zones.
Number of Rows: 1000. This high resolution is essential for a low-volatility instrument like SPY, ensuring that the profile is detailed and the levels are precise.
Session Time: 0400-1800 in America/New_York. This captures the full pre-market and core session, which is crucial for understanding the day's complete volume story.
Ready to trade with an edge? Add the Simple Volume Profile (Multi-Day) to your chart now and see the market in a new light!






















