IDX Financials v2This indicator adds financial data, ratios, and valuations to your chart. The main objective is to present financial overview that can be glanced quickly to add to your considerations.
The visualization of the indicator consists of two parts:
A. Plots (lines alongside the candlestick)
B. Financial table on the right. Drag your candlestick to the left to provide blank area for the table.
Programatically, the financial data is obtained by using these Pine API:
request.earnings(...) API for the EPS values that are used by the price at average PER line , and
request.financial(..) API for the rest of financial data required by the indicator.
See What financial data is available in Pine for more info on getting financial data in Pine.
A. THE PLOTS
The plots produces two lines, price at average PER in blue and price at average PBV line in pink, calculated over some adjustable time period (the default is one year). By default, only price at average PER line is shown.
Note that PER stands for Price to Earning Ratio.
The price at average PER line shows the price level at the average PER. It is calculated using formula as follows:
line = AVGPER * EPSTTM
where AVGPER is the average PER over some time period (default is one year, adjustable) and EPSTTM is the standardized EPS TTM.
Note that the EPS is updated at the actual time of earning report publication , and not at standard quarter dates such as March 31st, Dec 31st, etc.. This approach is chosen to represent the actual PE at the time.
The price at average PBV line (PBV stands for Price to Book Value), which can be enabled in settings, shows the price at average PBV. It is calculated using formula as follows:
line = AVGPBV * BVPS
where AVGPBV is the average PBV over some period of time (default is one year, adjustable) and BVPS is the book value per share. Note that the PBV is clipped to range to avoid values that are too small/large.
Also note that unlike PER, the BVPS is updated at each quarterly date (such as March 31st, Dec 31st, etc.).
Apart from those lines, some values are written to the status line (i.e. the numbers next to indicator name), which represent the corresponding value at the currently hovered bar:
PER TTM
Average PER
Std value (zvalue) of PER TTM (equal to = (PERTTM - AVGPER)/STDPER)
PBV
The meaning for these abbreviations should be straightforward.
Using the price at average PER line
There are several ways to use the price at average PER line .
You can quickly get the sense of current valuation by seeing the price relative to the price at average PER line . If the price is above the line, the valuation is higher than the average valuation, and vice versa if the price is lower.
The distance between the price and the average is measured in unit of standard deviation. This is represented by the third number in the status line. Value zero indicates the price is exactly at the average PER line. Positive value indicates price is higher than average, and negative if price is lower than average. Usually people use value +2 and -2 to indicate extreme positions.
The second way to use the line is to see how the line jumps up or down at the earning report date . If the line jumps up, this indicates the increase of EPSTTM. And vice versa when the line jumps down.
When EPSTTM is trending up over several quarters, or if EPSTTM is expected to go up, usually the price is also trending up and the valuation is over the average. And vice versa when EPSTTM is trending down or expected to go down. Deviation from this pattern may present some buying or selling opportunity.
B. THE FINANCIAL TABLE
The second visual part is the financial table. The financial table contains financial information at the last bar . It has four sections:
1. Revenue
2. Income
3. Valuations
4. Ratios
Let's discuss them in detail.
1. Revenue and income sections
The revenue and income table are organized into rows and columns.
Each row shows the data at the specified time frame, as follows:
The first four rows shows quarterly revenue/income of the last four quarters.
Then followed by TTM data.
Then followed by forecast of next quarter revenue/income, if such forecast exists. Note the "(F)" notation next to the quarter name.
Then followed by forecast of TTM data of next quarter (only for income), if such forecast exists. Note the "(F)" notation next to the TTM name.
The columns of revenue and income sections show the following:
The time frame information (such as quarter name, TTM, etc.)
The revenue/income value, in billions or millions (configurable).
YoY (year on year) growth, i.e. comparing the value with the value one year earlier, if any.
QoQ (quarter on quarter) growth, i.e. comparing the value with previous quarter value, if any.
GPM/NPM (gross profit margin or net profit margin), i.e. the margin on the specified time period.
Using the Revenue and Income table
The table provides quick way to see the revenue and income trend. You can see the YoY growth as well as QoQ, if that is applicable (non seasonal stocks). You can also see how the margins change over the periods.
The values are also presented with relevant background color . Green indicates "good" value and red indicates "bad" value. The intensity represents how good/bad the value is. The limits of the good and bad values are currently hardcoded in the script.
2. Valuations section
The valuation shows current stock valuation. The section is organized in rows and columns. Each row contains one type of valuation criteria, as follows:
PER (Price Earning Ratio)
Next quarter PER forecast (marked by "(F)" notation) when available
PBV (Price to Book value)
For each valuation criteria, several values are presented as columns:
The current value of the criteria. By current, it means the value at the last bar.
The one year standard deviation position
The three years standard deviation position
3. Ratios Section
The ratios section contains the following useful financial ratios:
ROA (Return on Asset), equal to: NET_INCOME_TTM / TOTAL_ASSETS
ROE (Return on Equity), equal to: NET_INCOME_TTM / BOOK_VALUE_PER_SHARE
PEG (PER to Growth Ratio), equal to PER_TTM / (INCOME_TTM_GROWTH*100)
DER (Debt to Equity Ratio), taken from request.financial(syminfo.tickerid, "DEBT_TO_EQUITY", "FQ")
DPR (Dividend Payout Ratio), taken from request.financial(syminfo.tickerid, "DIVIDEND_PAYOUT_RATIO", "FY")
Dividend yield, equal to (DPR * (NET_INCOME_TTM / TOTAL_SHARES_OUTSTANDING)) / close
KNOWN BUGS
Currently does not handle when the financial quarter contains gap, i.e. there is missing quarter. This usually happens on newly IPO stocks.
Search in scripts for "Table"
Gridbot Ping Pong🏓 Gridbot Ping Pong is a dynamic grid bot indicator that generates buy and sell signals as price oscillates between automatically calculated support and resistance levels. The grid adapts to trending markets through adjustable tilt and anchor parameters, which control the grid slope and shift resistance respectively. Entry signals trigger when price touches grid levels, while take profit and stop signals manage position exits. Unlike traditional grid bots that require horizontal ranges, this indicator maintains its oscillation zone as price trends by tilting and shifting the grid structure to follow momentum. The grid bot approach aims to accumulate gains through frequent touches across multiple grid levels rather than seeking large directional moves. Like a ping pong ball in motion, price oscillates between grid levels — each touch generates a signal.
⚡ THEORY & CONCEPTS ⚡
Grid trading is a systematic approach that places buy and sell orders at predetermined price intervals, creating a grid of orders above and below a set price level. In ranging markets, this method capitalizes on natural price oscillations by buying at lower grid levels and selling at higher ones. Each completed round trip between levels represents a captured opportunity, and the frequency of these oscillations determines the grid's effectiveness. Traditional grid bots excel when price remains within the defined range, methodically accumulating gains as price bounces between levels.
However, traditional grid structures face significant challenges when markets begin to trend. Fixed horizontal levels that performed well during consolidation become liabilities during directional moves. An uptrend leaves buy orders unfilled while sell orders trigger prematurely, and a downtrend creates the opposite problem. Extended trends can result in accumulated positions at increasingly unfavorable prices, with no mechanism to adapt to the new market reality. The static nature of traditional grids assumes markets will return to the mean, yet sustained breakouts regularly invalidate this assumption.
Gridbot Ping Pong addresses these limitations through dynamic grid adaptation. The tilt parameter angles the grid in the direction of the prevailing trend, aligning support and resistance levels with market momentum rather than fighting against it. The anchor parameter creates buffer zones beyond the outer grid boundaries, requiring price to demonstrate conviction before triggering a grid shift. When price breaks through these buffers, the entire grid recenters to the new price level. This combination of tilting grids and controlled shifting allows the indicator to maintain grid trading mechanics while acknowledging that markets trend.
The grid adapts through a downtrend and early reversal. Entry signals (▲▼), take profit signals (△▽), and grid shifts demonstrate the ping pong sequence as price oscillates between levels.
The grid structure consists of five levels: two potential support levels below, a center base price, and two potential resistance levels above. These levels are calculated as percentage intervals from a dynamic base price, with the spacing parameter determining the distance between each level. Trend direction is derived from consecutive grid shifts, where multiple shifts in the same direction confirm momentum. The grid restricts entries to the trend direction — buy signals in uptrends, sell signals in downtrends — while counter-trend signals convert to exits when appropriate.
Full market cycle demonstrating grid adaptation through rally, reversal, decline, and recovery. Buy signals dominate during uptrends, sell signals during downtrends, with take profits at boundaries throughout. Two stop signals mark the trend reversals.
Tilt
The tilt mechanic introduces slope to the grid structure based on trend direction and momentum. When consecutive shifts occur in the same direction, the tilt increases, creating a steeper grid that tracks with the trend. As the trend progresses, support levels rise with it — buy signals trigger on pullbacks to these rising levels rather than static levels abandoned by price. Similarly, resistance levels fall during downtrends, keeping sell signals relevant to current price action. If the trend reverses and shifts occur in the opposite direction, the tilt resets and begins building in the new direction. The tilt strength parameter controls how aggressively the grid slopes, with higher values producing steeper angles. Negative tilt values invert this relationship, angling the grid against the prevailing momentum rather than with it. This counter-trend configuration positions support levels lower during uptrends and resistance levels higher during downtrends, favoring mean reversion entries that anticipate pullbacks rather than continuation.
Negative tilt applied during an uptrend. Despite the bullish price action from late November through December, the grids slope downward, positioning buy signals at deeper support levels. Take profit signals appear at resistance as price reaches the upper grid boundaries before pulling back. The counter-trend configuration captures oscillations within the rising market rather than chasing momentum.
Anchor
The anchor mechanic provides resistance to grid shifting. Buffer zones extend beyond the outer grid boundaries, requiring price to demonstrate conviction before triggering a shift. Higher anchor values create larger buffers, requiring more significant price movement. As consecutive shifts confirm a trend, the pro-trend buffer shrinks, allowing the grid to follow momentum with increasing ease. This lets the indicator commit to established trends while resisting premature shifts during consolidations. Tilt and anchor work in complementary tension: tilt rewards momentum by angling the grid, while anchor resists excessive shifting by requiring price conviction to recenter. When price breaks through these buffers, the entire grid recenters to the new price level and play continues on a fresh table.
Steady uptrend with minimal tilt. The flat grid segments demonstrate that shifting alone keeps the grid aligned with price action. Buy signals (▲) and take profit signals (▽) alternate as price bounces between levels, accumulating gains through repetition across the entire move.
Sustained uptrend from June through September. The grid follows the trend with increasing ease as consecutive shifts reduce the pro-trend buffer. The October consolidation eventually triggers a downward shift and stop signal, but the system adapts to the renewed uptrend in November with fresh entry signals.
Signal Generation
The indicator generates three signal types. Entry signals (▲▼) trigger when price reaches a grid level in the direction of the trend, initiating a new position. Take profit signals (△▽) trigger when price reaches a grid level against the trend direction while a position is held, capturing gains as the rally continues. Stop signals (⦿) trigger when a grid shift occurs while holding a position adverse to the new shift direction. The ball goes off the table.
Trend reversal from bearish to bullish. The grid follows the downtrend through November with consecutive sell signals. A stop signal (⦿) triggers at the bottom as the grid shifts adversely against the held position. The system resets and adapts to the emerging uptrend in December, generating fresh buy signals as the new direction establishes.
Trigger Options
The signal trigger determines what price data the indicator uses to detect grid touches, balancing responsiveness against confirmation.
Auto : The default setting, using wick-based detection for pro-trend signals and close-based detection for counter-trend signals. This balances responsiveness when entering with the trend against confirmation when signaling against it.
Wick Touch : Generates signals in real-time when the high or low touches a grid level, providing the fastest response to price interaction.
Wick Reverse : Requires the wick to cross through the grid level from the previous bar, confirming the touch before signaling.
SWMA : Uses a Symmetrically Weighted Moving Average as the trigger source, generating signals only when the smoothed price crosses grid levels.
Close : Uses the bar's closing price as the trigger source, providing confirmed signals after each bar completes.
Symmetrically Weighted Moving Average (SWMA) trigger during a trend reversal. The smoothed price line filters intrabar noise, generating signals only when the SWMA crosses grid levels rather than reacting to wick touches. The grid follows the downtrend through November, resets at the bottom, and adapts to the emerging uptrend in December.
Signal Safeguards
The indicator includes built-in protections to reduce overtrading and mitigate risk, keeping the ball in play longer:
Boundary Protection : New entries are blocked at the outermost grid levels where breakout risk is highest. Exits remain permitted at these boundaries.
Signal Spacing : Signals maintain one-level separation from the most recent signal, preventing clusters of entries at similar prices.
Trend Alignment : When conflicting conditions arise, signals align with the prevailing trend direction rather than fighting momentum.
Automatic Profit Taking : Counter-trend interactions convert to take profit signals when a position is held, capturing gains rather than reversing exposure.
Adverse Shift Stops : When the grid shifts against a held position, a stop signal triggers to exit before further adverse movement.
Cautious Breakout Entries : On the first shift in a new direction, entries are restricted to favorable grid levels until the trend confirms through consecutive shifts.
Shift Resistance : Counter-trend shifts always require full buffer conviction, while pro-trend shifts become easier only after the trend is confirmed.
🛠️ CONFIGURATION & SETTINGS 🛠️
Core Parameters
SPACING (%) : Sets the percentage distance between grid levels. Higher values create wider grids with more room between signals, lower values create tighter grids with more frequent signal opportunities.
TRIGGER : Selects the price source for signal detection. See Trigger Options above.
TILT : Controls the grid slope factor in the trend direction.
ANCHOR : Controls resistance to grid shifting.
Visual Settings
GRIDS : Sets the colors for support (lower) and resistance (upper) grid levels.
FILL : Sets the gradient fill colors between the price line and outer grid boundaries.
SWMA : Sets the color of the Symmetrically Weighted Moving Average line.
🏓 PLAYING GRIDBOT PING PONG 🏓
⚪The objective is not to predict where price will go, but to be present at each level when it arrives.
⚪Each touch at a boundary counts. Gains accumulate through repetition, not single swings.
⚪The rally continues until it doesn't. When the ball goes off the table, the game resets.
⚪The grid creates boundaries where price bounces back and forth. The table is set — the ball does the work.
⚪Price oscillates between defined levels. The grid is the table. Everything else is just ping pong.
Tennis is a form of ping pong. In fact, tennis is ping pong played while standing on the table. In fact, all racquet games are nothing but derivatives of ping pong. — George Carlin
⚠️ DISCLAIMER ⚠️
The Gridbot Ping Pong indicator is a visual analysis tool designed to illustrate grid trading concepts and serve as a framework for understanding grid bot mechanics. While the indicator generates entry, exit, and stop signals, no guarantee is made regarding the profitability of these signals. Like all technical indicators, the grid levels and signals generated by this tool may appear to align with favorable trading opportunities in hindsight. However, these signals are not intended as standalone recommendations for trading decisions. This indicator is intended for educational and analytical purposes, complementing other tools and methods of market analysis.
🧠 BEYOND THE CODE 🧠
Gridbot Ping Pong is part of the Grid Bot Series, building on the concepts introduced in the Grid Bot Simulator , Grid Bot Auto , and Grid Bot Parabolic indicators. While those tools established the foundation for grid-based analysis, this indicator introduces dynamic tilt and anchor mechanics that adapt to trending market conditions.
This indicator shares the same educational philosophy as the Fibonacci Time-Price Zones and the Fibonacci Geometry Series - providing frameworks for understanding market concepts through visualization and experimentation rather than black-box signals.
The Gridbot Ping Pong indicator, like other xxattaxx indicators , is designed to encourage both education and community engagement. Feedback and insights are invaluable to refining and enhancing this tool. We look forward to the creative applications, observations, and discussions this indicator inspires within the trading community.
4H HOD/LOD Checkpoint Analysis4H HOD/LOD Checkpoint Analysis - Detailed User Guide
OVERVIEW
This indicator is a data-driven probability framework for NQ Futures traders that predicts High-of-Day (HOD) and Low-of-Day (LOD) placement based on statistical analysis of 3,136+ trading days (2013-2025). Unlike traditional indicators that rely on technical signals, this tool uses checkpoint-based state analysis with zero forward-looking bias to provide real-time probabilities of whether the daily range is complete.
⚠️ IMPORTANT: This indicator is specifically designed for NQ FUTURES ONLY. All probabilities, patterns, and statistics were derived from a 10+ year historical dataset of NQ 1-minute bars. Using this on other instruments will produce inaccurate results.
CORE CONCEPT: CHECKPOINT METHODOLOGY
What is a Checkpoint?
A checkpoint occurs when a 4-hour candle closes. At this moment, the indicator "locks" the current market state and calculates probabilities for the remainder of the trading day. The key innovation is that state never changes after locking - probabilities remain constant throughout the session until the next checkpoint.
The Six 4-Hour Candles (EST):
6PM (18:00-22:00) - Evening/Globex open
10PM (22:00-02:00) - Asia session
2AM (02:00-06:00) - Early London
6AM (06:00-10:00) - Late London + NY Open
10AM (10:00-14:00) - NY Morning
2PM (14:00-17:00) - NY Afternoon (3 hours only)
Five Checkpoints:
10PM Checkpoint - After 6PM closes
2AM Checkpoint - After 10PM closes
6AM Checkpoint - After 2AM closes
10AM Checkpoint - After 6AM closes (most critical)
2PM Checkpoint - After 10AM closes (highest conviction fade signals)
HOW IT WORKS: THE THREE-FACTOR STATE SYSTEM
At each checkpoint, the indicator evaluates three critical factors to determine probability:
1. ELIMINATIONS (Quantity)
An "elimination" occurs when a candle trades beyond a previous candle's high or low, effectively removing that candle from contention for HOD/LOD.
Example at 10AM Checkpoint:
6PM high = 18,000
10PM high = 18,050 (eliminates 6PM high)
2AM high = 18,100 (eliminates 10PM high)
6AM high = 18,075 (does NOT eliminate 2AM high)
Result: 2 eliminations
The number of eliminations indicates trend strength:
0 eliminations = Range-bound, high probability extremes already set
1-2 eliminations = Moderate trend
3-4 eliminations = Strong trend day, range likely to extend
2. STRUCTURE (Pattern Type)
The indicator distinguishes between two elimination patterns:
Sequential: Eliminations occur in order (6pm → 10pm → 2am → 6am → 10am)
Indicates smooth, consistent trend
Example: 10pm eliminates 6pm, then 2am eliminates 10pm (sequential)
Skip: Eliminations skip candles
Indicates choppy/reversal behavior
Example: 2am eliminates 6pm but NOT 10pm (skip pattern)
Why it matters: Skip patterns show 2X probability differences compared to sequential patterns. At 10AM checkpoint with 2 eliminations, skip pattern shows 64% participation rate vs 36% for sequential pattern with previous survived.
3. PREVIOUS CANDLE STATUS
Did the immediately prior candle get eliminated?
Eliminated: Previous candle's high/low was taken out
Indicates relentless trend
Higher probability of continuation
Survived: Previous candle's high/low still intact
Indicates trend pause
Higher probability of mean reversion or range completion
Critical insight: High and low are tracked separately. At 2AM checkpoint, 10PM might have eliminated 6PM high (relentless uptrend) but NOT eliminated 6PM low (low survived). This creates different probabilities for HOD vs LOD.
VISUAL ELEMENTS
4-Hour Candle Boxes
Each 4H candle is displayed as a colored box showing its range:
Gray = 6PM (evening)
Blue = 10PM (Asia)
Purple = 2AM (early London)
Orange = 6AM (London + NY Open) - THE CURVE SESSION
Teal = 10AM (NY morning) - THE MONEY SESSION
Red = 2PM (NY afternoon) - THE FADE SESSION
HOD/LOD Lines
Black horizontal lines extend from current HOD/LOD with labels showing:
Which candle set the extreme
Current price level
THE CHECKPOINT TABLE EXPLAINED
Table Header:
Shows current checkpoint (e.g., "🎯 10AM CHECKPOINT") or "⏳ PRE-CHECKPOINT" if between checkpoints.
Main Metrics (Side-by-Side Comparison):
The table displays HOD and LOD separately in two columns because they can have different patterns:
METRIC
HODLOD Eliminations
Number of candles eliminated so far for highs
Number of candles eliminated so far for lows
Structure
Sequential or Skip pattern for highs
Sequential or Skip pattern for lows
Prev Candle
Was previous candle's high eliminated or did it survive?
Was previous candle's low eliminated or did it survive?
Pattern
Combined interpretation: Relentless/Paused/Skip/Early
Combined interpretation: Relentless/Paused/Skip/Early
Color Coding:
Structure Row:
White = Sequential (smooth trend)
Orange = Skip (choppy/reversal)
Previous Candle Row:
Red = Eliminated (relentless trend continuing)
Blue = Survived (trend paused)
Pattern Row:
Red = Relentless (previous eliminated + sequential = strong trend)
Blue = Paused (previous survived + sequential = trend pause)
Orange = Skip/Chop (skip pattern = reversal likely)
Gray = Early (0-1 eliminations, too early to tell)
Probability Section:
Prob Already In: Percentage chance that HOD/LOD has already been set
Color coding:
Green (>75%) = High confidence extreme is in, FADE
Yellow (45-75%) = Moderate confidence
Red (<45%) = Low confidence extreme is in, CONTINUATION likely
Sample Size: Shows how many historical occurrences match this exact state (n=XXX)
Larger samples = higher confidence
Most common states have n=500-2,000+
Current: Which candle currently holds HOD/LOD
Pattern Guide Section:
Appears when you have 2+ eliminations. Provides interpretation:
📈 Paused: Trend has paused, 2pm more likely to set extreme
📈 Relentless: Breaking higher/lower, continuation expected
📈 Skip/Chop: Choppy pattern, next session likely
Same for lows with 📉 symbol.
PRACTICAL TRADING EXAMPLES
Example 1: High Conviction Fade Setup
State at 10AM Checkpoint:
Eliminations: 0 (both HOD/LOD)
Structure: None (no eliminations yet)
Prev Candle: Survived
Table shows:
HOD Prob Already In: 68.9% (n=582)
LOD Prob Already In: 73.6% (n=785)
Interpretation: Range is likely complete. Fade extremes. With 0 eliminations and 70%+ probability, this is a high-conviction mean reversion signal.
Example 2: Strong Continuation Signal
State at 10AM Checkpoint:
Eliminations: 3 (both HOD/LOD)
Structure: Sequential
Prev Candle: Eliminated (relentless)
Table shows:
HOD Prob Already In: 29.8% (n=1,758)
LOD Prob Already In: 34.6% (n=1,451)
Pattern: 📈 Relentless / 📉 Relentless
Interpretation: Strong trend day. Only 30-35% chance range is complete. Look for breakouts in direction of trend. 10AM and 2PM likely to extend range.
Example 3: Pattern Structure Edge
State at 10AM Checkpoint:
Eliminations: 2 (HOD)
Structure: Skip (orange background)
Prev Candle: Eliminated vs Alternative State:
Eliminations: 2 (HOD)
Structure: Sequential
Prev Candle: Survived
Result: Skip pattern shows 64% chance 10AM participates vs 36% for sequential+survived. Skip pattern = 2X more likely to see 10AM high. This structural edge is unique to this indicator.
Example 4: Different HOD vs LOD Patterns
State at 10AM Checkpoint:
HOD: 2 eliminations, Sequential, Previous Eliminated (Relentless) = 46.7% in
LOD: 2 eliminations, Skip, Previous Eliminated (Choppy) = 48.4% in
Interpretation: Highs show relentless uptrend but lows show choppy behavior. This divergence suggests potential for upside continuation but with volatility. Not a clean trend day.
KEY CHECKPOINT STATISTICS (DERIVED FROM 10-YEAR DATASET)
10PM Checkpoint (After 6PM):
Very early in day
13.5% HOD in, 21.3% LOD in
Most likely outcome: Range extends into 6AM/10AM
2AM Checkpoint (After 10PM):
Still early
With 0 elims: 22-31% in (balanced)
With 1 elim: 8-12% in (strong trend signal)
6AM Checkpoint (After 2AM) - Critical Decision Point:
With 0 elims: 40-47% in (balanced, could go either way)
With 2 elims: 18-22% in (strong trend into 6AM/10AM)
Most likely outcome: 10AM sets extremes (~38-40%)
10AM Checkpoint (After 6AM) - Highest Conviction:
With 0 elims: 69-74% in → FADE (high confidence)
With 3 elims: 30-35% in → BUY/SELL continuation
This is THE money checkpoint for high-probability setups
2PM Checkpoint (After 10AM) - Maximum Fade Conviction:
With 0-3 elims: 67-95% in → FADE strongly
With 4 elims: 49-61% in (monster trend, weaker fade)
2PM is primarily a mean reversion session
UNDERSTANDING THE UNDERLYING DATA
All probabilities are derived from analysis of:
Instrument: NQ Futures (E-mini NASDAQ-100)
Timeframe: 1-minute bars
Period: January 2013 - December 2025
Sample: 3,136+ complete trading days
Methodology: Real-time checkpoint analysis with zero forward-looking bias
Why NQ-Specific?
Each futures contract has unique:
Session characteristics (6AM in NQ shows 60-64% curve behavior, other sessions differ)
Timing patterns (NQ's 10AM session has 67-74% immediate takeouts)
Volatility profiles (NQ 2PM shows 56% bullish bias vs ES shows different bias)
Using this indicator on ES, RTY, or other instruments will produce inaccurate results because the probability tables are NQ-specific.
ORIGINALITY & INNOVATION
What Makes This Indicator Unique:
Zero Forward-Looking Bias: State locks at checkpoint moments. Traditional indicators recalculate continuously, introducing bias. This indicator freezes probabilities at the exact moment a 4H candle closes.
Three-Factor State System: Combines elimination count, structure pattern, and previous candle status. Most indicators only track one dimension. This multi-factor approach provides 2X+ probability differentials.
Separate HOD/LOD Tracking: Highs and lows can have different patterns simultaneously (relentless high with choppy low). This indicator tracks them separately for precision.
Pattern Structure Analysis: Distinguishes between sequential and skip patterns, a concept not found in standard indicators. Skip patterns show mean reversion while sequential shows continuation.
10+ Year Statistical Foundation: Every probability is backed by hundreds to thousands of historical occurrences (sample sizes shown in table). Not based on theories or assumptions.
Checkpoint-Specific Probabilities: Different checkpoints have different probability profiles. 10AM checkpoint with 0 eliminations = 70%+ fade. 6AM checkpoint with same state = 40%+ fade. Context matters.
HOW TO USE THIS INDICATOR
Step 1: Wait for Checkpoint
The table will show "⏳ PRE-CHECKPOINT" until a 4H candle closes. Probabilities are only valid at checkpoint moments.
Step 2: Read the State
Check the three factors:
How many eliminations?
Sequential or skip?
Previous candle eliminated or survived?
Step 3: Check Probability
Look at "Prob Already In" percentage:
>75% (Green) = High confidence extreme is set, fade
45-75% (Yellow) = Moderate confidence, use other confirmation
<45% (Red) = Low confidence extreme is set, continuation likely
Step 4: Check Sample Size
Larger sample (n=1,000+) = higher confidence
Smaller sample (n=50-200) = use caution, edge is real but less robust
Step 5: Consider Pattern
Read the pattern guide:
Relentless = trend continuing
Paused = trend stalled, mean reversion
Skip/Chop = reversal/range likely
Step 6: Compare HOD vs LOD
If both show similar patterns = cleaner signal
If divergent patterns = complex day, be cautious
BEST PRACTICES
Focus on 10AM and 2PM checkpoints - These have the highest conviction signals
Combine with price action - Don't fade blindly at 90% probability if price is breaking out strongly
Larger samples = better edges - Prioritize setups with n=500+
Watch for pattern divergence - When HOD and LOD show different patterns, expect complexity
Remember session characteristics:
6AM = THE CURVE SESSION (60-64% mean reversion when Q2 breaks Q1)
10AM = THE MONEY SESSION (67-74% immediate takeouts, highest conviction)
2PM = THE FADE SESSION (67-95% extremes already in)
SETTINGS
Show 4H Candle Boxes - Display colored boxes for each 4H candle
Show HOD/LOD Lines - Display horizontal lines at current extremes
Show Checkpoint Analysis - Display probability table
Table Position - Choose where to place the checkpoint table
Table Size - Tiny/Small/Normal
Colors - Customize box colors for each session
LIMITATIONS & DISCLAIMERS
NQ FUTURES ONLY - Do not use on other instruments
Not a standalone system - Use as confluence with your strategy
Historical data - Past performance doesn't guarantee future results
Sample size variance - Some states have smaller samples, use judgment
Requires understanding - Read this guide fully before trading with this tool
FINAL NOTES
This indicator represents 10+ years of NQ futures data distilled into actionable, real-time probabilities. The checkpoint methodology ensures zero forward-looking bias, while the three-factor state system provides granular edge that traditional indicators miss.
Remember: This tool provides probabilities, not certainties. Trade with proper risk management, and use this as one input in your decision-making process.
Statistcal Daily Profile & Ranges# Statistical Daily Profile & Ranges - TradingView Publication Guide
## Overview
The **Statistical Daily Profile & Ranges** indicator is a comprehensive tool designed to analyze intraday session behavior and daily range characteristics. It combines Average Daily Range (ADR) projection levels with detailed session-by-session statistics and probability-based trading insights derived from historical price action patterns.
## What This Indicator Does
This indicator provides traders with three core analytical components:
1. **ADR Projection Levels** - Dynamic support/resistance levels based on historical daily ranges
2. **Session Range Analysis** - Visual boxes and statistical breakdowns for four key trading sessions
3. **Dynamic Probability Display** - Real-time probability statistics based on overnight session relationships
## How It Works
### Average Daily Range (ADR) Calculation
The indicator calculates the average daily range over a user-defined lookback period (default: 10 days) and projects this range from each day's opening price. This creates two key levels:
- **ADR High**: Opening price + average daily range
- **ADR Low**: Opening price - average daily range
- **ADR Median**: The opening price (middle of the projected range)
These levels are recalculated at the start of each trading day and extend forward, providing dynamic support and resistance zones based on recent volatility characteristics.
### Session Tracking & Statistics
The indicator monitors four distinct trading sessions (times in Eastern Time):
1. **Asia Session** (8:00 PM - 2:00 AM)
2. **London Session** (2:00 AM - 8:00 AM)
3. **NY Open** (8:00 AM - 9:00 AM)
4. **NY Initial Balance** (9:30 AM - 10:30 AM)
For each session, the indicator:
- Draws a colored box showing the session's high-to-low range
- Tracks the opening price, high, and low
- Stores historical data for statistical analysis
- Calculates average ranges by day of week (Monday through Friday)
The session statistics are displayed in a customizable table showing average point ranges for each session across different weekdays, helping traders identify which sessions and days typically produce the most movement.
### Dynamic Probability System
The indicator analyzes the relationship between the Asia and London sessions to determine the current market setup. After the London session closes, it automatically detects one of four possible conditions:
**1. London Engulfs Asia**
- London session breaks both above Asia's high AND below Asia's low
- This indicates strong momentum during the European session
- Most common occurrence pattern
**2. Asia Engulfs London**
- Asia session range completely contains the London session range
- Indicates consolidation during London hours
- Relatively rare pattern (occurs approximately 5.36% of the time)
**3. London Partially Engulfs Upwards**
- London breaks above Asia's high but stays above Asia's low
- Suggests bullish momentum continuation from Asia into London
**4. London Partially Engulfs Downwards**
- London breaks below Asia's low but stays below Asia's high
- Suggests bearish momentum continuation from Asia into London
Once a condition is detected, the indicator displays a probability table showing historically observed outcomes for that specific setup, including:
- Probability of NY session taking out key levels (Asia high/low, London high/low)
- Probability of NY session engulfing the entire overnight range
- Directional bias for NY Cash session (9:30 AM - 4:00 PM)
## How to Use This Indicator
### Initial Setup
1. Add the indicator to your chart (works on any intraday timeframe below Daily)
2. Adjust the **ADR Days** setting (default: 10) to control the lookback period for range calculation
3. Adjust the **Session Lookback Days** setting (default: 50) to determine how much historical data feeds the statistics tables
### Reading the ADR Levels
- Use the **ADR High** and **ADR Low** lines as potential profit targets or areas where price may encounter resistance
- The **ADR Median** line represents the opening price and can act as a pivot point for intraday directional bias
- If price reaches the ADR High early in the session, it suggests strong bullish momentum; conversely for ADR Low
- These levels adapt daily based on recent volatility, making them more responsive than static levels
### Interpreting Session Boxes
- **Session boxes** visually highlight when each trading session is active and its price range
- Larger boxes indicate higher volatility during that session
- Compare current session ranges to the statistical averages shown in the table
- Sessions that are unusually quiet or active relative to historical averages may signal compression or expansion
### Using the Session Statistics Table
- The table shows average point ranges for each session broken down by weekday
- Identify which sessions typically produce the most movement on specific days
- For example, if London on Thursdays averages 40 points while Mondays average 25 points, you can adjust position sizing or expectations accordingly
- The **Total** column shows the overall average across all days
- Sample sizes (shown in brackets if enabled) indicate data reliability
### Trading with the Probability Table
The probability table updates dynamically after the London session closes and shows statistically probable outcomes based on 12 years of NQ futures data.
**Important Limitations:**
- **These probabilities are derived from NQ (Nasdaq E-mini futures) data only**
- **Do NOT apply these probability statistics to other instruments** (ES, stocks, forex, etc.)
- The probabilities represent historical frequencies, not guarantees
- Always combine with your own analysis, risk management, and market context
**How to Apply the Probabilities:**
When **London Engulfs Asia**:
- Watch for NY session to take out London's extremes (72.33% probability for high, 71.12% for low)
- Slight bullish bias in NY Cash session (54.80% vs 45.20%)
- Lower probability of complete overnight engulfment (44.13%)
When **Asia Engulfs London** (rare - 5.36% occurrence):
- Higher probability NY takes Asia's high (75.86%)
- Moderately high probability NY takes Asia's low (65.52%)
- Slight increase in bullish bias (58.42% vs 41.58%)
- Recognize this as an unusual setup
When **London Partially Engulfs Upwards**:
- Very high probability NY takes London high (81.51%)
- Strong probability NY takes London low (64.45%)
- Moderate probability NY takes Asian low (53.16%)
- Slight bullish bias (55.52%)
When **London Partially Engulfs Downwards**:
- Very high probability NY takes London low (75.29%)
- Strong probability NY takes London high (68.80%)
- Moderate probability NY takes Asian high (56.44%)
- Slight bullish bias maintained (52.99%)
### Practical Trading Applications
**Scenario 1: Range Projection**
If the ADR is 500 points and the market opens at 25,000:
- ADR High: 25,500 (potential resistance/target)
- ADR Low: 24,500 (potential support/target)
- Monitor how price interacts with these levels throughout the day
**Scenario 2: Session-Based Trading**
Using the statistics table, you notice London on Wednesdays averages 35 points. During a Wednesday London session:
- If London has already moved 30 points, the session may be exhausting its typical range
- If London has only moved 15 points with an hour remaining, there may be expansion potential
- Adjust stop losses and targets based on typical session behavior
**Scenario 3: Probability-Based Setup**
It's 8:05 AM ET and the indicator shows "London Partially Engulfs Upwards":
- You now know there's an 81.51% historical probability NY will take out London's high
- There's a 53.16% probability NY will reach down to Asia's low
- The NY Cash session has a slight bullish bias (55.52%)
- Consider this alongside your technical analysis for directional bias and level targeting
## Customization Options
### Visual Settings
- **Line Width**: Adjust thickness of ADR levels
- **ADR Color/Style**: Customize appearance of ADR projection lines (solid, dashed, dotted)
- **Median Line**: Toggle visibility and customize appearance separately
- **Session Box Colors**: Customize each session's box color independently
- **Show Session Boxes**: Toggle session box visibility on/off
### Label Settings
- **ADR Labels**: Show/hide labels for ADR High and ADR Low, adjust size
- **Median Label**: Separate control for median line label
- **Session Labels**: Show/hide session name labels, adjust size
- **Label Colors**: Customize text colors for all labels
### Table Settings
- **Session Stats Table**: Position (9 locations available), size (Tiny to Huge), toggle on/off
- **Sample Sizes**: Show/hide the number of historical samples used for each calculation
- **Probabilities Table**: Separate position and size controls, toggle on/off
### Session Times
- Each session's time range can be customized to fit different markets or preferences
- All times are in Eastern Time (America/New_York timezone)
## Technical Notes
### Data Requirements
- The indicator requires sufficient historical data based on your lookback settings
- Minimum recommended: 50+ days of intraday data for reliable statistics
- Works on any timeframe below Daily (1-minute, 5-minute, 15-minute, etc.)
### Calculation Methodology
- **ADR Calculation**: Simple average of absolute daily high-low ranges
- **Session Statistics**: Mean average of ranges for each session filtered by day of week
- **Condition Detection**: Boolean logic comparing session high/low relationships
- All calculations update in real-time as new bars form
### Probability Data Source
The probability statistics displayed in the dynamic table are derived from:
- **Dataset**: 12 years of NQ (Nasdaq E-mini futures) historical data
- **Methodology**: Frequency analysis of outcomes following specific setup conditions
- **Time Period**: Multiple market cycles including various volatility regimes
**Critical Warning**: These probabilities are specific to NQ and reflect that instrument's behavior patterns. Market microstructure, participant behavior, and volatility characteristics differ significantly across instruments. Do not apply these NQ-derived probabilities to other markets (ES, RTY, YM, individual stocks, forex, commodities, etc.).
## Best Practices
1. **Combine with Other Analysis**: Use this indicator as one component of a complete trading methodology, not a standalone system
2. **Respect Risk Management**: Probabilities are not certainties; always use proper position sizing and stop losses
3. **Context Matters**: High-impact news events, holiday trading, and extreme volatility can invalidate typical patterns
4. **Verify Statistics**: Monitor your own results and compare to the displayed probabilities
5. **Adapt Session Times**: If trading instruments with different active hours, adjust session times accordingly
6. **Regular Calibration**: Periodically review if the session averages and probabilities remain relevant to current market conditions
## Understanding Originality
This indicator is original in its approach to combining three analytical frameworks into a single tool:
1. **Dynamic ADR Projection**: Unlike static pivot points, these levels adapt daily based on recent volatility
2. **Session-Specific Statistics**: Goes beyond simple volume profiles by quantifying average ranges for specific time windows across weekdays
3. **Conditional Probability Display**: Automatically detects overnight session relationships and displays relevant probability data rather than showing all scenarios simultaneously
The conditional logic system that determines which probability set to display is a key differentiator—traders only see the statistics relevant to the current market setup, reducing information overload and improving decision-making clarity.
## Summary
The **Statistical Daily Profile & Ranges** indicator provides traders with a comprehensive framework for understanding daily range potential, session-specific behavior patterns, and probability-based setup analysis. By combining ADR projection levels with detailed session statistics and dynamic probability displays, traders gain multiple perspectives on potential price movement within the trading day.
The indicator is most effective when used to:
- Set realistic profit targets based on average daily range
- Identify which sessions typically produce movement on specific weekdays
- Understand probability-weighted outcomes for different overnight setup conditions (NQ only)
- Visualize session ranges and compare them to historical averages
Remember that all statistical analysis reflects historical patterns, and market behavior can change. Always combine indicator signals with sound risk management, proper position sizing, and your own market analysis.
RS Rating Multi-TimeframeRS Rating Multi-Timeframe (IBD-Style Relative Strength)
Short Description:
IBD-style Relative Strength Rating (1-99) comparing any stock's performance vs the S&P 500 across multiple timeframes.
Full Description:
Overview
This indicator calculates an IBD-style Relative Strength (RS) Rating that measures a stock's price performance relative to the S&P 500 over the past 12 months. The rating scale ranges from 1 (weakest) to 99 (strongest), telling you how a stock ranks against all other stocks in terms of relative performance.
How It Works
The RS Rating uses a weighted formula based on quarterly performance:
Last 63 days (1 quarter): 40% weight
Last 126 days (2 quarters): 20% weight
Last 189 days (3 quarters): 20% weight
Last 252 days (4 quarters): 20% weight
This weighting emphasizes recent performance while still accounting for longer-term strength.
Rating Interpretation
90-99 (Elite): Top 10% of all stocks - exceptional relative strength
80-89 (Excellent): Top 20% - strong leadership candidates
50-79 (Average): Middle of the pack
30-49 (Below Average): Underperforming the market
1-29 (Weak): Bottom 30% - avoid or consider shorting
Features
Multi-Timeframe: Works on any timeframe from 1-hour to weekly (always uses daily data for calculation)
Moving Average: Optional EMA or SMA of the RS Rating to smooth signals
Visual Zones: Color-coded zones for quick identification of strength/weakness
Signal Markers: Triangles appear when RS crosses key levels (80 and 30)
Info Table: Displays current RS Rating, change, MA value, and raw score
Alerts: Built-in alerts for key crossover events
Settings
Show Moving Average: Toggle MA line on/off
MA Length: Period for the moving average (default: 10)
MA Type: Choose between EMA or SMA
Benchmark Index: Change the comparison index (default: SP:SPX)
Show Rating Table: Toggle the info table on/off
How To Use
Buy candidates: Look for stocks with RS Rating above 80, ideally rising
Avoid: Stocks with RS Rating below 30 or falling rapidly
Confirmation: Use RS above its moving average as additional confirmation
Divergence: Watch for RS making new highs before price (bullish) or new lows before price (bearish)
Credits
RS Rating calculation methodology inspired by Investor's Business Daily (IBD) and adapted from Fred6724's RS Rating script. Percentile calibration based on analysis of ~6,600 US stocks.
Tags: relative strength, RS rating, IBD, momentum, CAN SLIM, benchmark, SPX, market leaders, stock ranking
Category: Relative Strength
RSI HTF Hardcoded (A/B Presets) + Regimes [CHE]RSI HTF Hardcoded (A/B Presets) + Regimes — Higher-timeframe RSI emulation with acceptance-based regime filter and on-chart diagnostics
Summary
This indicator emulates a higher-timeframe RSI on the current chart by resolving hardcoded “HTF-like” lengths from a time-bucket mapping, avoiding cross-timeframe requests. It computes RSI on a resolved length, smooths it with a resolved moving average, and derives a histogram-style difference (RSI minus its smoother). A four-state regime classifier is gated by a dead-band and an acceptance filter requiring consecutive bars before a regime is considered valid. An on-chart table reports the active preset, resolved mapping tag, resolved lengths, and the current filtered regime.
Pine version: v6
Overlay: false
Primary outputs: RSI line, SMA(RSI) line, RSI–SMA histogram columns, reference levels (30/50/70), regime-change alert, info table
Motivation
Cross-timeframe RSI implementations often rely on `request.security`, which can introduce repaint pathways and additional update latency. This design uses deterministic, on-series computation: it infers a coarse target bucket (or uses a forced bucket) and resolves lengths accordingly. The dead-band reduces noise at the decision boundaries (around RSI 50 and around the RSI–SMA difference), while the acceptance filter suppresses rapid flip-flops by requiring sustained agreement across bars.
Differences
Baseline: Standard RSI with a user-selected length on the same timeframe, or HTF RSI via cross-timeframe requests.
Key differences:
Hardcoded preset families and a bucket-based mapping to resolve “HTF-like” lengths on the current chart.
No `request.security`; all calculations run on the chart’s own series.
Regime classification uses two independent signals (RSI relative to 50 and RSI–SMA difference), gated by a configurable dead-band and an acceptance counter.
Always-on diagnostics via a persistent table (optional), showing preset, mapping tag, resolved lengths, and filtered regime.
Practical effect: The oscillator behaves like a slower, higher-timeframe variant with more stable regime transitions, at the cost of delayed recognition around sharp turns (by design).
How it works
1. Bucket selection: The script derives a coarse “target bucket” from the chart timeframe (Auto) or uses a user-forced bucket.
2. Length resolution: A chosen preset defines base lengths (RSI length and smoothing length). A bucket/timeframe mapping resolves a multiplier, producing final lengths used for RSI and smoothing.
3. Oscillator construction: RSI is computed on the resolved RSI length. A moving average of RSI is computed on the resolved smoothing length. The difference (RSI minus its smoother) is used as the histogram series.
4. Regime classification: Four regimes are defined from:
RSI relative to 50 (bullish above, bearish below), with a dead-band around 50
Difference relative to 0 (positive/negative), with a dead-band around 0
These two axes produce strong/weak bull and bear states, plus a neutral state when inside the dead-band(s).
5. Acceptance filter: The raw regime must persist for `n` consecutive bars before it becomes the filtered regime. The alert triggers when the filtered regime changes.
6. Diagnostics and visualization: Histogram columns change shade based on sign and whether the difference is rising/falling. The table displays preset, mapping tag, resolved lengths, and the filtered regime description.
Parameter Guide
Source — Input series for RSI — Default: Close — Smoother sources reduce noise but add lag.
Preset — Base lengths family — Default: A(14/14) — Switch presets to change RSI and smoothing responsiveness.
Target Bucket — Auto or forced bucket — Default: Auto — Force a bucket to lock behavior across chart timeframe changes.
Table X / Table Y — Table anchor — Default: right / top — Move to avoid covering content.
Table Size — Table text size — Default: normal — Increase for presentations, decrease for dense layouts.
Dark Mode — Table theme — Default: enabled — Match chart background for readability.
Show Table — Toggle diagnostics table — Default: enabled — Disable for a cleaner pane.
Epsilon (dead-band) — Noise gate for decisions — Default: 1.0 — Raise to reduce flips near boundaries; lower to react faster.
Acceptance bars (n) — Bars required to confirm a regime — Default: 3 — Higher reduces whipsaw; lower increases reactivity.
Reading
Histogram (RSI–SMA):
Above zero indicates RSI is above its smoother (positive momentum bias).
Below zero indicates RSI is below its smoother (negative momentum bias).
Darker/lighter shading indicates whether the difference is increasing or decreasing versus the previous bar.
RSI vs SMA(RSI):
RSI’s position relative to 50 provides broad directional bias.
RSI’s position relative to its smoother provides momentum confirmation/contra-signal.
Regimes:
Strong bull: RSI meaningfully above 50 and difference meaningfully above 0.
Weak bull: RSI above 50 but difference below 0 (pullback/transition).
Strong bear: RSI meaningfully below 50 and difference meaningfully below 0.
Weak bear: RSI below 50 but difference above 0 (pullback/transition).
Neutral: inside the dead-band(s).
Table:
Use it to validate the active preset, the mapping tag, the resolved lengths, and the filtered regime output.
Workflows
Trend confirmation:
Favor long bias when strong bull is active; favor short bias when strong bear is active.
Treat weak regimes as pullback/transition context rather than immediate reversals, especially with higher acceptance.
Structure + oscillator:
Combine regimes with swing structure, breakouts, or a baseline trend filter to avoid trading against dominant structure.
Use regime change alerts as a “state change” notification, not as a standalone entry.
Multi-asset consistency:
The bucket mapping helps keep a consistent “feel” across different chart timeframes without relying on external timeframe series.
Behavior/Constraints
Intrabar behavior:
No cross-timeframe requests are used; values can still evolve on the live bar and settle at close depending on your chart/update timing.
Warm-up requirements:
Large resolved lengths require sufficient history to seed RSI and smoothing. Expect a warm-up period after loading or switching symbols/timeframes.
Latency by design:
Dead-band and acceptance filtering reduce noise but can delay regime changes during sharp reversals.
Chart types:
Intended for standard time-based charts. Non-time-based or synthetic chart types (e.g., Heikin-Ashi, Renko, Kagi, Point-and-Figure, Range) can distort oscillator behavior and regime stability.
Tuning
Too many flips near decision boundaries:
Increase Epsilon and/or increase Acceptance bars.
Too sluggish in clean trends:
Reduce Acceptance bars by one, or choose a faster preset (shorter base lengths).
Too sensitive on lower timeframes:
Choose a slower preset (longer base lengths) or force a higher Target Bucket.
Want less clutter:
Disable the table and keep only the alert + plots you need.
What it is/isn’t
This indicator is a regime and visualization layer for RSI using higher-timeframe emulation and stability gates. It is not a complete trading system and does not provide position sizing, risk management, or execution rules. Use it alongside structure, liquidity/volatility context, and protective risk controls.
Disclaimer
The content provided, including all code and materials, is strictly for educational and informational purposes only. It is not intended as, and should not be interpreted as, financial advice, a recommendation to buy or sell any financial instrument, or an offer of any financial product or service. All strategies, tools, and examples discussed are provided for illustrative purposes to demonstrate coding techniques and the functionality of Pine Script within a trading context.
Any results from strategies or tools provided are hypothetical, and past performance is not indicative of future results. Trading and investing involve high risk, including the potential loss of principal, and may not be suitable for all individuals. Before making any trading decisions, please consult with a qualified financial professional to understand the risks involved.
By using this script, you acknowledge and agree that any trading decisions are made solely at your discretion and risk.
Best regards and happy trading
Chervolino.
MACD HTF Hardcoded (A/B Presets) + Regimes [CHE] MACD HTF Hardcoded (A/B Presets) + Regimes — Higher-timeframe MACD emulation with acceptance-based regime filter and on-chart diagnostics
Summary
This indicator emulates a higher-timeframe MACD directly on the current chart using two hardcoded preset families and a time-bucket mapping, avoiding cross-timeframe requests. It classifies four MACD regimes and applies an acceptance filter that requires several consecutive bars before a state is considered valid. A small dead-band around zero reduces noise near the axis. An on-chart table reports the active preset, the inferred time bucket, the resolved lengths, and the current regime.
Pine version: v6
Overlay: false
Primary outputs: MACD line, Signal line, Histogram columns, zero line, regime-change alert, info table
Motivation: Why this design?
Cross-timeframe indicators often rely on external timeframe requests, which can introduce repaint paths and added latency. This design provides a deterministic alternative: it maps the current chart’s timeframe to coarse higher-timeframe buckets and uses fixed EMA lengths that approximate those views. The dead-band suppresses flip-flops around zero, and the acceptance counter reduces whipsaw by requiring sustained agreement across bars before acknowledging a regime.
What’s different vs. standard approaches?
Baseline: Classical MACD with user-selected lengths on the same timeframe, or higher-timeframe MACD via cross-timeframe requests.
Architecture differences:
Hardcoded A and B length families with a bucket map derived from the chart timeframe.
No `request.security`; all calculations occur on the current series.
Regime classification from MACD and Histogram sign, gated by an acceptance count and a small zero dead-band.
Diagnostics table for transparency.
Practical effect: The MACD behaves like a slower, higher-timeframe variant without external requests. Regimes switch less often due to the dead-band and acceptance logic, which can improve stability in choppy sessions.
How it works (technical)
The script derives a coarse bucket from the chart timeframe using `timeframe.in_seconds` and maps it to preset-specific EMA lengths. EMAs of the source build MACD and Signal; their difference is the Histogram. Signs of MACD and Histogram define four regimes: strong bull, weak bull, strong bear, and weak bear. A small, user-defined band around zero treats values near the axis as neutral. An acceptance counter checks whether the same regime persisted for a given number of consecutive bars before it is emitted as the filtered regime. A single alert condition fires when the filtered regime changes. The histogram columns change shade based on position relative to zero and whether they are rising or falling. A persistent table object shows preset, bucket tag, resolved lengths, and the filtered regime. No cross-timeframe requests are used, so repaint risk is limited to normal live-bar movement; values stabilize on close.
Parameter Guide
Source — Input series for MACD — Default: Close — Using a smoother source increases stability but adds lag.
Preset — A or B length family — Default: “3,10,16” — Switch to “12,26,9” for the classic family mapped to buckets.
Table Position — Anchor for the info table — Default: Top right — Choose a corner that avoids covering price action.
Table Size — Table text size — Default: Normal — Use small on dense charts, large for presentations.
Dark Mode — Table theme — Default: Enabled — Match your chart background for readability.
Show Table — Toggle diagnostics table — Default: Enabled — Disable for a cleaner pane.
Zero dead-band (epsilon) — Noise gate around zero — Default: Zero — Increase slightly when you see frequent flips near zero.
Acceptance bars (n) — Bars required to confirm a regime — Default: Three — Raise to reduce whipsaw; lower to react faster.
Reading & Interpretation
Histogram columns: Above zero indicates bullish pressure; below zero indicates bearish pressure. Darker shade implies the histogram increased compared with the prior bar; lighter shade implies it decreased.
MACD vs. Signal lines: The spread corresponds to histogram height.
Regimes:
Strong bull: MACD above zero and Histogram above zero.
Weak bull: MACD above zero and Histogram below zero.
Strong bear: MACD below zero and Histogram below zero.
Weak bear: MACD below zero and Histogram above zero.
Table: Inspect active preset, bucket tag, resolved lengths, and the filtered regime number with its description.
Practical Workflows & Combinations
Trend following: Use strong bull to favor long exposure and strong bear to favor short exposure. Use weak states as pullback or transition context. Combine with structure tools such as swing highs and lows or a baseline moving average for confirmation.
Exits and risk: In strong trends, consider exiting partial size on a regime downgrade to a weak state. In choppy sessions, increase the acceptance bars to reduce churn.
Multi-asset / Multi-timeframe: Works on time-based charts across liquid futures, indices, currencies, and large-cap equities. Bucket mapping helps retain a consistent feel when moving from lower to higher timeframes.
Behavior, Constraints & Performance
Repaint/confirmation: No cross-timeframe requests; values can evolve intrabar and settle on close. Alerts follow your TradingView alert timing settings.
Resources: `max_bars_back` is set to five thousand. Very large resolved lengths require sufficient history to seed EMAs; expect a warm-up period on first load or after switching symbols.
Known limits: Dead-band and acceptance can delay recognition at sharp turns. Extremely thin markets or large gaps may still cause brief regime reversals.
Sensible Defaults & Quick Tuning
Start with preset “3,10,16”, dead-band near zero, and acceptance of three bars.
Too many flips near zero: increase the dead-band slightly or raise the acceptance bars.
Too sluggish in clean trends: reduce the acceptance bars by one.
Too sensitive on fast lower timeframes: switch to the “12,26,9” preset family or raise the acceptance bars.
Want less clutter: hide the table and keep the alert.
What this indicator is—and isn’t
This is a visualization and regime layer for MACD using higher-timeframe emulation and stability gates. It is not a complete trading system and does not generate position sizing or risk management. Use it with market structure, execution rules, and protective stops.
Disclaimer
The content provided, including all code and materials, is strictly for educational and informational purposes only. It is not intended as, and should not be interpreted as, financial advice, a recommendation to buy or sell any financial instrument, or an offer of any financial product or service. All strategies, tools, and examples discussed are provided for illustrative purposes to demonstrate coding techniques and the functionality of Pine Script within a trading context.
Any results from strategies or tools provided are hypothetical, and past performance is not indicative of future results. Trading and investing involve high risk, including the potential loss of principal, and may not be suitable for all individuals. Before making any trading decisions, please consult with a qualified financial professional to understand the risks involved.
By using this script, you acknowledge and agree that any trading decisions are made solely at your discretion and risk.
Do not use this indicator on Heikin-Ashi, Renko, Kagi, Point-and-Figure, or Range charts, as these chart types can produce unrealistic results for signal markers and alerts.
Best regards and happy trading
Chervolino
Buyer vs Seller ControlBuyer vs Seller Control Analysis
Technical indicator measuring market participation through candlestick wick analysis
Overview:
This indicator analyzes the relationship between closing prices and candlestick wicks to measure buying and selling pressure. It calculates two key metrics and displays their moving averages to help identify market sentiment shifts.
Calculation Method:
The indicator measures two distinct values for each candle:
Buyer Control Value: Distance from candle low to closing price (close - low)
Seller Control Value: Distance from candle high to closing price (high - close)
Both values are then smoothed using a Simple Moving Average (default period: 20) to reduce noise and show clearer trends.
Visual Components:
Lime Line: 20-period SMA of buyer control values
Fuchsia Line: 20-period SMA of seller control values
Area Fill: Colored region between the two lines
Histogram: Difference between buyer and seller control SMAs
Zero Reference Line: Horizontal line at zero level
Information Table: Current numerical values (optional display)
Interpretation:
When the lime line (buyer control) is above the fuchsia line (seller control), it indicates that recent candles have been closing closer to their highs than to their lows on average.
When the fuchsia line is above the lime line, recent candles have been closing closer to their lows than to their highs on average.
Fill Color Logic:
Lime (green) fill appears when buyer control SMA > seller control SMA
Fuchsia (red) fill appears when seller control SMA > buyer control SMA
Fill transparency adjusts based on the magnitude of difference between the two SMAs
Stronger differences result in more opaque fills
Settings:
Moving Average Period: Adjustable from 1-200 periods (default: 20)
Show Info Table: Toggle to display/hide the numerical values table
Technical Notes:
The indicator works on any timeframe
Values are displayed in the same units as the underlying asset's price
The histogram shows the mathematical difference between the two SMA lines
Transparency calculation uses a 50-period lookback for dynamic scaling
This indicator provides a quantitative approach to analyzing candlestick patterns by focusing on where prices close relative to their intraday ranges.
Kelly Optimal Leverage IndicatorThe Kelly Optimal Leverage Indicator mathematically applies Kelly Criterion to determine optimal position sizing based on market conditions.
This indicator helps traders answer the critical question: "How much capital should I allocate to this trade?"
Note that "optimal position sizing" does not equal the position sizing that you should have. The Optima position sizing given by the indicator is based on historical data and cannot predict a crash, in which case, high leverage could be devastating.
Originally developed for gambling scenarios with known probabilities, the Kelly formula has been adapted here for financial markets to dynamically calculate the optimal leverage ratio that maximizes long-term capital growth while managing risk.
Key Features
Kelly Position Sizing: Uses historical returns and volatility to calculate mathematically optimal position sizes
Multiple Risk Profiles: Displays Full Kelly (aggressive), 3/4 Kelly (moderate), 1/2 Kelly (conservative), and 1/4 Kelly (very conservative) leverage levels
Volatility Adjustment: Automatically recommends appropriate Kelly fraction based on current market volatility
Return Smoothing: Option to use log returns and smoothed calculations for more stable signals
Comprehensive Table: Displays key metrics including annualized return, volatility, and recommended exposure levels
How to Use
Interpret the Lines: Each colored line represents a different Kelly fraction (risk tolerance level). When above zero, positive exposure is suggested; when below zero, reduce exposure. Note that this is based on historical returns. I personally like to increase my exposure during market downturns, but this is hard to illustrate in the indicator.
Monitor the Table: The information panel provides precise leverage recommendations and exposure guidance based on current market conditions.
Follow Recommended Position: Use the "Recommended Position" guidance in the table to determine appropriate exposure level.
Select Your Risk Profile: Conservative traders should follow the Half Kelly or Quarter Kelly lines, while more aggressive traders might consider the Three-Quarter or Full Kelly lines.
Adjust with Volatility: During high volatility periods, consider using more conservative Kelly fractions as recommended by the indicator.
Mathematical Foundation
The indicator calculates the optimal leverage (f*) using the formula:
f* = μ/σ²
Where:
μ is the annualized expected return
σ² is the annualized variance of returns
This approach balances potential gains against risk of ruin, offering a scientific framework for position sizing that maximizes long-term growth rate.
Notes
The Full Kelly is theoretically optimal for maximizing long-term growth but can experience significant drawdowns. You should almost never use full kelly.
Most practitioners use fractional Kelly strategies (1/2 or 1/4 Kelly) to reduce volatility while capturing most of the growth benefits
This indicator works best on daily timeframes but can be applied to any timeframe
Negative Kelly values suggest reducing or eliminating market exposure
The indicator should be used as part of a complete trading system, not in isolation
Enjoy the indicator! :)
P.S. If you are really geeky about the Kelly Criterion, I recommend the book The Kelly Capital Growth Investment Criterion by Edward O. Thorp and others.
Indicator DashboardThis script creates an 'Indicator Dashboard' designed to assist you in analyzing financial markets and making informed decisions. The indicator provides a summary of current market conditions by presenting various technical analysis indicators in a table format. The dashboard evaluates popular indicators such as Moving Averages, RSI, MACD, and Stochastic RSI. Below, we'll explain each part of this script in detail and its purpose:
### Overview of Indicators
1. **Moving Averages (MA)**:
- This indicator calculates Simple Moving Averages (“SMA”) for 5, 14, 20, 50, 100, and 200 periods. These averages provide a visual summary of price movements. Depending on whether the price is above or below the moving average, it determines the market direction as either “Bullish” or “Bearish.”
2. **RSI (Relative Strength Index)**:
- The RSI helps identify overbought or oversold market conditions. Here, the RSI is calculated for a 14-period window, and this value is displayed in the table. Additionally, the 14-period moving average of the RSI is also included.
3. **MACD (Moving Average Convergence Divergence)**:
- The MACD indicator is used to determine trend strength and potential reversals. This script calculates the MACD line, signal line, and histogram. The MACD condition (“Bullish,” “Bearish,” or “Neutral”) is displayed alongside the MACD and signal line values.
4. **Stochastic RSI**:
- Stochastic RSI is used to identify momentum changes in the market. The %K and %D lines are calculated to determine the market condition (“Bullish” or “Bearish”), which is displayed along with the calculated values for %K and %D.
### Table Layout and Presentation
The dashboard is presented in a vertical table format in the top-right corner of the chart. The table contains two columns: “Indicator” and “Status,” summarizing the condition of each technical indicator.
- **Indicator Column**: Lists each of the indicators being tracked, such as SMA values, RSI, MACD, etc.
- **Status Column**: Displays the current status of each indicator, such as “Bullish,” “Bearish,” or specific values like the RSI or MACD.
The table also includes rounded indicator values for easier interpretation. This helps traders quickly assess market conditions and make informed decisions based on multiple indicators presented in a single location.
### Detailed Indicator Status Calculations
1. **SMA Status**: For each moving average (5, 14, 20, 50, 100, 200), the script checks if the current price is above or below the SMA. The status is determined as “Bullish” if the price is above the SMA and “Bearish” if below, with the value of the SMA also displayed.
2. **RSI and RSI Average**: The RSI value for a 14-period is displayed along with its 14-period SMA, which provides an average reading of the RSI to smooth out volatility.
3. **MACD Indicator**: The MACD line, signal line, and histogram are calculated using standard parameters (12, 26, 9). The status is shown as “Bullish” when the MACD line is above the signal line, and “Bearish” when it is below. The exact values for the MACD line, signal line, and histogram are also included.
4. **Stochastic RSI**: The %K and %D lines of the Stochastic RSI are used to determine the trend condition. If %K is greater than %D, the condition is “Bullish,” otherwise it is “Bearish.” The actual values of %K and %D are also displayed.
### Conclusion
The 'Indicator Dashboard' provides a comprehensive overview of multiple technical indicators in a single, easy-to-read table. This allows traders to quickly gauge market conditions and make more informed decisions. By consolidating key indicators like Moving Averages, RSI, MACD, and Stochastic RSI into one dashboard, it saves time and enhances the efficiency of technical analysis.
This script is particularly useful for traders who prefer a clean and organized overview of their favorite indicators without needing to plot each one individually on the chart. Instead, all the crucial information is available at a glance in a consolidated format.
Sri Yantra MTF - AynetSri Yantra MTF - Aynet Script Overview
This Pine Script generates a Sri Yantra-inspired geometric pattern overlay on price charts. The pattern is dynamically updated based on multi-timeframe (MTF) inputs, utilizing high and low price ranges, and adjusting its size relative to a chosen multiplier.
The Sri Yantra is a sacred geometric figure used in various spiritual and mathematical contexts, symbolizing the interconnectedness of the universe. Here, it is applied to visualize structured price levels.
Scientific and Technical Explanation
Multi-Timeframe Integration:
Base Timeframe (baseRes): This is the primary timeframe for the analysis. The opening price and ATR (Average True Range) are calculated from this timeframe.
Pattern Timeframe (patternRes): Defines the granularity of the pattern. It ensures synchronization with price movements on specific time intervals.
Geometric Construction:
ATR-Based Scaling: The script uses ATR as a volatility measure to dynamically size the geometric pattern. The sizeMult input scales the pattern relative to price volatility.
Pattern Width (barOffset): Defines the horizontal extent of the pattern in terms of bars. This ensures the pattern is aligned with price movements and scales appropriately.
Sri Yantra-Like Geometry:
Outer Square: A bounding box is drawn around the price level.
Triangles: Multiple layers of triangles (primary, secondary, and tertiary) are calculated and drawn to mimic the structure of the Sri Yantra. These triangles converge and diverge based on price levels.
Horizontal Lines: Added at key levels to provide additional structure and aesthetic alignment.
Dynamic Updates:
The pattern recalculates and redraws itself on the last bar of the selected timeframe, ensuring it adapts to real-time price data.
A built-in check identifies new bars in the chosen timeframe (patternRes), ensuring accurate updates.
Information Table:
Displays the selected base and pattern timeframes in a table format on the top-right corner of the chart.
Allows traders to see the active settings for quick adjustments.
Key Inputs
Style Settings:
Pattern Color: Customize the color of the geometric patterns.
Size Multiplier (sizeMult): Adjusts the size of the pattern relative to price movements.
Line Width: Controls the thickness of the geometric lines.
Timeframe Settings:
Base Resolution (baseRes): Timeframe for calculating the pattern's anchor (default: daily).
Pattern Resolution (patternRes): Timeframe granularity for the pattern’s formation.
Geometric Adjustments:
Pattern Width (barOffset): Horizontal width in bars.
ATR Multiplier (rangeSize): Vertical size adjustment based on price volatility.
Scientific Concepts
Volatility Representation:
ATR (Average True Range): A standard measure of market volatility, representing the average range of price movements over a defined period. Here, ATR adjusts the vertical height of the geometric figures.
Geometric Symmetry:
The script emulates symmetry similar to the Sri Yantra, aligning with the principles of sacred geometry, which often appear in nature and mathematical constructs. Symmetry in financial data visualizations can aid in intuitive interpretation of price movements.
Multi-Timeframe Fusion:
Synchronizing patterns with multiple timeframes enhances the relevance of overlays for different trading strategies. For example, daily trends combined with hourly patterns can help traders optimize entries and exits.
Visual Features
Outer Square:
Drawn to encapsulate the geometric structure.
Represents the broader context of price levels.
Triangles:
Three layers of interlocking triangles create a fractal pattern, providing a visual alignment to price dynamics.
Horizontal Lines:
Emphasize critical levels within the pattern, offering visual cues for potential support or resistance areas.
Information Table:
Displays the active timeframe settings, helping traders quickly verify configurations.
Applications
Trend Visualization:
Patterns overlay on price movements provide a clearer view of trend direction and potential reversals.
Volatility Mapping:
ATR-based scaling ensures the pattern adjusts to varying market conditions, making it suitable for different asset classes and trading strategies.
Multi-Timeframe Analysis:
Integrates higher and lower timeframes, enabling traders to spot confluences between short-term and long-term price levels.
Potential Enhancements
Add Fibonacci Levels: Overlay Fibonacci retracements within the pattern for deeper price level insights.
Dynamic Alerts: Include alert conditions when price intersects key geometric lines.
Custom Labels: Add text descriptions for critical intersections or triangle centers.
This script is a unique blend of technical analysis and sacred geometry, providing traders with an innovative way to visualize market dynamics.
Stationarity Test: Dickey-Fuller & KPSS [Pinescriptlabs]
📊 Kwiatkowski-Phillips-Schmidt-Shin Model Indicator & Dickey-Fuller Test 📈
This algorithm performs two statistical tests on the price spread between two selected instruments: the first from the current chart and the second determined in the settings. The purpose is to determine if their relationship is stationary. It then uses this information to generate **visual signals** based on how far the current relationship deviates from its historical average.
⚙️ Key Components:
• 🧪 ADF Test (Augmented Dickey-Fuller):** Checks if the spread between the two instruments is stationary.
• 🔬 KPSS Test (Kwiatkowski-Phillips-Schmidt-Shin):** Another test for stationarity, complementing the ADF test.
• 📏 Z-Score Calculation:** Measures how many standard deviations the current spread is from its historical mean.
• 📊 Dynamic Threshold:** Adjusts the trading signal threshold based on recent market volatility.
🔍 What the Values Mean:
The indicator displays several key values in a table:
• 📈 ADF Stationarity:** Shows "Stationary" or "Non-Stationary" based on the ADF test result.
• 📉 KPSS Stationarity:** Shows "Stationary" or "Non-Stationary" based on the KPSS test result.
• 📏 Current Z-Score:** The current Z-score of the spread.
• 🔗 Hedge Ratio:** The relationship coefficient between the two instruments.
• 🌐 Market State:** Describes the current market condition based on the Z-score.
📊 How to Interpret the Chart:
• The main chart displays the Z-score of the spread over time.
• The green and red lines represent the upper and lower thresholds for trading signals.
• The area between the **Z-score** and the thresholds is filled when a trading signal is active.
• Additional charts show the **statistics of the ADF and KPSS tests** and their critical values.
**📉 Practical Example: NVIDIA Corporation (NVDA)**
Looking at the chart for **NVIDIA Corporation (NVDA)**, we can see how the indicator applies in a real case:
1. **Main Chart (Top):**
• Shows the **historical price** of NVIDIA on a weekly scale.
• A general **uptrend** is observed with periods of consolidation.
2. **KPSS & ADF Indicator (Bottom):**
• The lower chart shows the KPSS & ADF Model indicator applied to NVIDIA.
• The **green line** represents the Z-score of the spread.
• The **green shaded areas** indicate periods where the Z-score exceeded the thresholds, generating trading signals.
3. **📋 Current Values in the Table:**
• **ADF Stationarity:** Non-Stationary
• **KPSS Stationarity:** Non-Stationary
• **Current Z-Score:** 3.45
• **Hedge Ratio:** -164.8557
• **Market State:** Moderate Volatility
4. **🔍 Interpretation:**
• A Z-score of **3.45** suggests that NVIDIA’s price is significantly above its historical average relative to **EURUSD**.
• Both the **ADF** and **KPSS** tests indicate **non-stationarity**, suggesting **caution** when using mean reversion signals at this moment.
• The market state "Moderate Volatility" indicates noticeable deviation, but not extreme.
---
**💡 Usage:**
• **When Both Tests Show Stationarity:**
• **🔼 If Z-score > Upper Threshold:** Consider **buying the first instrument** and **selling the second**.
• **🔽 If Z-score < Lower Threshold:** Consider **selling the first instrument** and **buying the second**.
• **When Either Test Shows Non-Stationarity:**
• Wait for the relationship to become **stationary** before trading.
• **Market State:**
• Use this information to evaluate **general market conditions** and adjust your trading strategy accordingly.
**Mirror Comparison of the Same as Symbol 2 🔄📊**
**📊 Table Values:**
• **Extreme Volatility Threshold:** This value is displayed when the **Z-score** exceeds **100%**, indicating **extreme deviation**. It signals a potential **trading opportunity**, as the spread has reached unusually high or low levels, suggesting a **reversion or correction** in the market.
• **Mean Reversion Threshold:** Appears when the **Z-score** begins returning towards the mean after a period of **high or extreme volatility**. It indicates that the spread between the assets is returning to normal levels, suggesting a phase of **stabilization**.
• **Neutral Zone:** Displayed when the **Z-score** is near **zero**, signaling that the spread between assets is within expected limits. This indicates a **balanced market** with no significant volatility or clear trading opportunities.
• **Low Volatility Threshold:** Appears when the **Z-score** is below **70%** of the dynamic threshold, reflecting a period of **low volatility** and market stability, indicating fewer trading opportunities.
Español:
📊 Indicador del Modelo Kwiatkowski-Phillips-Schmidt-Shin & Prueba de Dickey-Fuller 📈
Este algoritmo realiza dos pruebas estadísticas sobre la diferencia de precios (spread) entre dos instrumentos seleccionados: el primero en el gráfico actual y el segundo determinado en la configuración. El objetivo es determinar si su relación es estacionaria. Luego utiliza esta información para generar señales visuales basadas en cuánto se desvía la relación actual de su promedio histórico.
⚙️ Componentes Clave:
• 🧪 Prueba ADF (Dickey-Fuller Aumentada): Verifica si el spread entre los dos instrumentos es estacionario.
• 🔬 Prueba KPSS (Kwiatkowski-Phillips-Schmidt-Shin): Otra prueba para la estacionariedad, complementando la prueba ADF.
• 📏 Cálculo del Z-Score: Mide cuántas desviaciones estándar se encuentra el spread actual de su media histórica.
• 📊 Umbral Dinámico: Ajusta el umbral de la señal de trading en función de la volatilidad reciente del mercado.
🔍 Qué Significan los Valores:
El indicador muestra varios valores clave en una tabla:
• 📈 Estacionariedad ADF: Muestra "Estacionario" o "No Estacionario" basado en el resultado de la prueba ADF.
• 📉 Estacionariedad KPSS: Muestra "Estacionario" o "No Estacionario" basado en el resultado de la prueba KPSS.
• 📏 Z-Score Actual: El Z-score actual del spread.
• 🔗 Ratio de Cobertura: El coeficiente de relación entre los dos instrumentos.
• 🌐 Estado del Mercado: Describe la condición actual del mercado basado en el Z-score.
📊 Cómo Interpretar el Gráfico:
• El gráfico principal muestra el Z-score del spread a lo largo del tiempo.
• Las líneas verdes y rojas representan los umbrales superior e inferior para las señales de trading.
• El área entre el Z-score y los umbrales se llena cuando una señal de trading está activa.
• Los gráficos adicionales muestran las estadísticas de las pruebas ADF y KPSS y sus valores críticos.
📉 Ejemplo Práctico: NVIDIA Corporation (NVDA)
Observando el gráfico para NVIDIA Corporation (NVDA), podemos ver cómo se aplica el indicador en un caso real:
Gráfico Principal (Superior): • Muestra el precio histórico de NVIDIA en escala semanal. • Se observa una tendencia alcista general con períodos de consolidación.
Indicador KPSS & ADF (Inferior): • El gráfico inferior muestra el indicador Modelo KPSS & ADF aplicado a NVIDIA. • La línea verde representa el Z-score del spread. • Las áreas sombreadas en verde indican períodos donde el Z-score superó los umbrales, generando señales de trading.
📋 Valores Actuales en la Tabla: • Estacionariedad ADF: No Estacionario • Estacionariedad KPSS: No Estacionario • Z-Score Actual: 3.45 • Ratio de Cobertura: -164.8557 • Estado del Mercado: Volatilidad Moderada
🔍 Interpretación: • Un Z-score de 3.45 sugiere que el precio de NVIDIA está significativamente por encima de su promedio histórico en relación con EURUSD. • Tanto la prueba ADF como la KPSS indican no estacionariedad, lo que sugiere precaución al usar señales de reversión a la media en este momento. • El estado del mercado "Volatilidad Moderada" indica una desviación notable, pero no extrema.
💡 Uso:
• Cuando Ambas Pruebas Muestran Estacionariedad:
• 🔼 Si Z-score > Umbral Superior: Considera comprar el primer instrumento y vender el segundo.
• 🔽 Si Z-score < Umbral Inferior: Considera vender el primer instrumento y comprar el segundo.
• Cuando Alguna Prueba Muestra No Estacionariedad:
• Espera a que la relación se vuelva estacionaria antes de operar.
• Estado del Mercado:
• Usa esta información para evaluar las condiciones generales del mercado y ajustar tu estrategia de trading en consecuencia.
Comparativo en Espejo del Mismo Como Símbolo 2 🔄📊
📊 Valores de la Tabla:
• Umbral de Volatilidad Extrema: Este valor se muestra cuando el Z-score supera el 100%, indicando desviación extrema. Señala una posible oportunidad de trading, ya que el spread entre los activos ha alcanzado niveles inusualmente altos o bajos, lo que podría indicar una reversión o corrección en el mercado.
• Umbral de Reversión a la Media: Aparece cuando el Z-score comienza a volver hacia la media tras un período de alta o extrema volatilidad. Indica que el spread entre los activos está regresando a niveles normales, sugiriendo una fase de estabilización.
• Zona Neutral: Se muestra cuando el Z-score está cerca de cero, señalando que el spread entre activos está dentro de lo esperado. Esto indica un mercado equilibrado con ninguna volatilidad significativa ni oportunidades claras de trading.
• Umbral de Baja Volatilidad: Aparece cuando el Z-score está por debajo del 70% del umbral dinámico, reflejando un período de baja volatilidad y estabilidad del mercado, indicando menos oportunidades de trading.
ChartUtilsLibrary "ChartUtils"
Library for chart utilities, including managing tables
initTable(rows, cols, bgcolor)
Initializes a table with specific dimensions and color
Parameters:
rows (int) : (int) Number of rows in the table
cols (int) : (int) Number of columns in the table
bgcolor (color) : (color) Background color of the table
Returns: (table) The initialized table
updateTable(tbl, is_price_below_avg, current_investment_USD, strategy_position_size, strategy_position_avg_price, strategy_openprofit, strategy_opentrades, isBullishRate, isBearishRate, mlRSIOverSold, mlRSIOverBought)
Updates the trading table
Parameters:
tbl (table) : (table) The table to update
is_price_below_avg (bool) : (bool) If the current price is below the average price
current_investment_USD (float) : (float) The current investment in USD
strategy_position_size (float) : (float) The size of the current position
strategy_position_avg_price (float) : (float) The average price of the current position
strategy_openprofit (float) : (float) The current open profit
strategy_opentrades (int) : (int) The number of open trades
isBullishRate (bool) : (bool) If the current rate is bullish
isBearishRate (bool) : (bool) If the current rate is bearish
mlRSIOverSold (bool) : (bool) If the ML RSI is oversold
mlRSIOverBought (bool) : (bool) If the ML RSI is overbought
updateTableNoPosition(tbl)
Updates the table when there is no position
Parameters:
tbl (table) : (table) The table to update
Index Generator [By MUQWISHI]▋ INTRODUCTION :
The “Index Generator” simplifies the process of building a custom market index, allowing investors to enter a list of preferred holdings from global securities. It aims to serve as an approach for tracking performance, conducting research, and analyzing specific aspects of the global market. The output will include an index value, a table of holdings, and chart plotting, providing a deeper understanding of historical movement.
_______________________
▋ OVERVIEW:
The image can be taken as an example of building a custom index. I created this index and named it “My Oil & Gas Index”. The index comprises several global energy companies. Essentially, the indicator weights each company by collecting the number of shares and then computes the market capitalization before sorting them as seen in the table.
_______________________
▋ OUTPUTS:
The output can be divided into 3 sections:
1. Index Title (Name & Value).
2. Index Holdings.
3. Index Chart.
1. Index Title , displays the index name at the top, and at the bottom, it shows the index value, along with the daily change in points and percentage.
2. Index Holdings , displays list the holding securities inside a table that contains the ticker, price, daily change %, market cap, and weight %. Additionally, a tooltip appears when the user passes the cursor over a ticker's cell, showing brief information about the company, such as the company's name, exchange market, country, sector, and industry.
3. Index Chart , display a plot of the historical movement of the index in the form of a bar, candle, or line chart.
_______________________
▋ INDICATOR SETTINGS:
(1) Naming the index.
(2) Entering a currency. To unite all securities in one currency.
(3) Table location on the chart.
(4) Table’s cells size.
(5) Table’s colors.
(6) Sorting table. By securities’ (Market Cap, Change%, Price, or Ticker Alphabetical) order.
(7) Plotting formation (Candle, Bar, or Line)
(8) To show/hide any indicator’s components.
(9) There are 34 fields where user can fill them with symbols.
Please let me know if you have any questions.
arraysLibrary "arraymethods"
Supplementary array methods.
delete(arr, index)
remove int object from array of integers at specific index
Parameters:
arr : int array
index : index at which int object need to be removed
Returns: void
delete(arr, index)
remove float object from array of float at specific index
Parameters:
arr : float array
index : index at which float object need to be removed
Returns: float
delete(arr, index)
remove bool object from array of bool at specific index
Parameters:
arr : bool array
index : index at which bool object need to be removed
Returns: bool
delete(arr, index)
remove string object from array of string at specific index
Parameters:
arr : string array
index : index at which string object need to be removed
Returns: string
delete(arr, index)
remove color object from array of color at specific index
Parameters:
arr : color array
index : index at which color object need to be removed
Returns: color
delete(arr, index)
remove line object from array of lines at specific index and deletes the line
Parameters:
arr : line array
index : index at which line object need to be removed and deleted
Returns: void
delete(arr, index)
remove label object from array of labels at specific index and deletes the label
Parameters:
arr : label array
index : index at which label object need to be removed and deleted
Returns: void
delete(arr, index)
remove box object from array of boxes at specific index and deletes the box
Parameters:
arr : box array
index : index at which box object need to be removed and deleted
Returns: void
delete(arr, index)
remove table object from array of tables at specific index and deletes the table
Parameters:
arr : table array
index : index at which table object need to be removed and deleted
Returns: void
delete(arr, index)
remove linefill object from array of linefills at specific index and deletes the linefill
Parameters:
arr : linefill array
index : index at which linefill object need to be removed and deleted
Returns: void
popr(arr)
remove last int object from array
Parameters:
arr : int array
Returns: int
popr(arr)
remove last float object from array
Parameters:
arr : float array
Returns: float
popr(arr)
remove last bool object from array
Parameters:
arr : bool array
Returns: bool
popr(arr)
remove last string object from array
Parameters:
arr : string array
Returns: string
popr(arr)
remove last color object from array
Parameters:
arr : color array
Returns: color
popr(arr)
remove and delete last line object from array
Parameters:
arr : line array
Returns: void
popr(arr)
remove and delete last label object from array
Parameters:
arr : label array
Returns: void
popr(arr)
remove and delete last box object from array
Parameters:
arr : box array
Returns: void
popr(arr)
remove and delete last table object from array
Parameters:
arr : table array
Returns: void
popr(arr)
remove and delete last linefill object from array
Parameters:
arr : linefill array
Returns: void
shiftr(arr)
remove first int object from array
Parameters:
arr : int array
Returns: int
shiftr(arr)
remove first float object from array
Parameters:
arr : float array
Returns: float
shiftr(arr)
remove first bool object from array
Parameters:
arr : bool array
Returns: bool
shiftr(arr)
remove first string object from array
Parameters:
arr : string array
Returns: string
shiftr(arr)
remove first color object from array
Parameters:
arr : color array
Returns: color
shiftr(arr)
remove and delete first line object from array
Parameters:
arr : line array
Returns: void
shiftr(arr)
remove and delete first label object from array
Parameters:
arr : label array
Returns: void
shiftr(arr)
remove and delete first box object from array
Parameters:
arr : box array
Returns: void
shiftr(arr)
remove and delete first table object from array
Parameters:
arr : table array
Returns: void
shiftr(arr)
remove and delete first linefill object from array
Parameters:
arr : linefill array
Returns: void
push(arr, val, maxItems)
add int to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : int array
val : int object to be pushed
maxItems : max number of items array can hold
Returns: int
push(arr, val, maxItems)
add float to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : float array
val : float object to be pushed
maxItems : max number of items array can hold
Returns: float
push(arr, val, maxItems)
add bool to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : bool array
val : bool object to be pushed
maxItems : max number of items array can hold
Returns: bool
push(arr, val, maxItems)
add string to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : string array
val : string object to be pushed
maxItems : max number of items array can hold
Returns: string
push(arr, val, maxItems)
add color to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : color array
val : color object to be pushed
maxItems : max number of items array can hold
Returns: color
push(arr, val, maxItems)
add line to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : line array
val : line object to be pushed
maxItems : max number of items array can hold
Returns: line
push(arr, val, maxItems)
add label to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : label array
val : label object to be pushed
maxItems : max number of items array can hold
Returns: label
push(arr, val, maxItems)
add box to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : box array
val : box object to be pushed
maxItems : max number of items array can hold
Returns: box
push(arr, val, maxItems)
add table to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : table array
val : table object to be pushed
maxItems : max number of items array can hold
Returns: table
push(arr, val, maxItems)
add linefill to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : linefill array
val : linefill object to be pushed
maxItems : max number of items array can hold
Returns: linefill
unshift(arr, val, maxItems)
add int to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : int array
val : int object to be unshift
maxItems : max number of items array can hold
Returns: int
unshift(arr, val, maxItems)
add float to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : float array
val : float object to be unshift
maxItems : max number of items array can hold
Returns: float
unshift(arr, val, maxItems)
add bool to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : bool array
val : bool object to be unshift
maxItems : max number of items array can hold
Returns: bool
unshift(arr, val, maxItems)
add string to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : string array
val : string object to be unshift
maxItems : max number of items array can hold
Returns: string
unshift(arr, val, maxItems)
add color to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : color array
val : color object to be unshift
maxItems : max number of items array can hold
Returns: color
unshift(arr, val, maxItems)
add line to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : line array
val : line object to be unshift
maxItems : max number of items array can hold
Returns: line
unshift(arr, val, maxItems)
add label to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : label array
val : label object to be unshift
maxItems : max number of items array can hold
Returns: label
unshift(arr, val, maxItems)
add box to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : box array
val : box object to be unshift
maxItems : max number of items array can hold
Returns: box
unshift(arr, val, maxItems)
add table to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : table array
val : table object to be unshift
maxItems : max number of items array can hold
Returns: table
unshift(arr, val, maxItems)
add linefill to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : linefill array
val : linefill object to be unshift
maxItems : max number of items array can hold
Returns: linefill
flush(arr)
remove all int objects in an array
Parameters:
arr : int array
Returns: int
flush(arr)
remove all float objects in an array
Parameters:
arr : float array
Returns: float
flush(arr)
remove all bool objects in an array
Parameters:
arr : bool array
Returns: bool
flush(arr)
remove all string objects in an array
Parameters:
arr : string array
Returns: string
flush(arr)
remove all color objects in an array
Parameters:
arr : color array
Returns: color
flush(arr)
remove and delete all line objects in an array
Parameters:
arr : line array
Returns: line
flush(arr)
remove and delete all label objects in an array
Parameters:
arr : label array
Returns: label
flush(arr)
remove and delete all box objects in an array
Parameters:
arr : box array
Returns: box
flush(arr)
remove and delete all table objects in an array
Parameters:
arr : table array
Returns: table
flush(arr)
remove and delete all linefill objects in an array
Parameters:
arr : linefill array
Returns: linefill
Price Cross Time Custom Range Interactive█ OVERVIEW
This indicator was a time-based indicator and intended as educational purpose only based on pine script v5 functions for ta.cross() , ta.crossover() and ta.crossunder() .
I realised that there is some overlap price with the cross functions, hence I integrate them into Custom Range Interactive with value variance and overlap displayed into table.
This was my submission for Pinefest #1 , I decided to share this as public, I may accidentally delete this as long as i keep as private.
█ INSPIRATION
Inspired by design, code and usage of CAGR. Basic usage of custom range / interactive, pretty much explained here . Credits to TradingView.
█ FEATURES
1. Custom Range Interactive
2. Label can be resize and change color.
3. Label show tooltip for price and time.
4. Label can be offset to improve readability.
5. Table can show price variance when any cross is true.
6. Table can show overlap if found crosss is overlap either with crossover and crossunder.
7. Table text color automatically change based on chart background (light / dark mode).
8. Source 2 is drawn as straight line, while Source 1 will draw as label either above line for crossover, below line for crossunder and marked 'X' if crossing with Source 2's line.
9. Cross 'X' label can be offset to improve readability.
10. Both Source 1 and Source 2 can select Open, Close, High and Low, which can be displayed into table.
█ LIMITATIONS
1. Table is limited to intraday timeframe only as time format is not accurate for daily timeframe and above. Example daily timeframe will give result less 1 day from actual date.
2. I did not include other sources such external source or any built in sources such as hl2, hlc3, ohlc4 and hlcc4.
█ CODE EXPLAINATION
I pretty much create custom function with method which returns tuple value.
method crossVariant(float price = na, chart.point ref = na) =>
cross = ta.cross( price, ref.price)
over = ta.crossover( price, ref.price)
under = ta.crossunder(price, ref.price)
Unfortunately, I unable make the labels into array which i plan to return string value by getting the text value from array label, hence i use label.all and add incremental int value as reference.
series label labelCross = na, labelCross.delete()
var int num = 0
if over
num += 1
labelCross := label.new()
if under
num += 1
labelCross := label.new()
if cross
num += 1
labelCross := label.new()
I realised cross value can be overlap with crossover and crossunder, hence I add bool to enable force overlap and add additional bools.
series label labelCross = na, labelCross.delete()
var int num = 0
if forceOverlap
if over
num += 1
labelCross := label.new()
if under
num += 1
labelCross := label.new()
if cross
num += 1
labelCross := label.new()
else
if cross and over
num += 1
labelCross := label.new()
if cross and under
num += 1
labelCross := label.new()
if cross and not over and not under
num += 1
labelCross := label.new()
█ USAGE / EXAMPLES
Major and Minor Trend Indicator by Nikhil34a V 2.2Title: Major and Minor Trend Indicator by Nikhil34a V 2.2
Description:
The Major and Minor Trend Indicator v2.2 is a comprehensive technical analysis script designed for use with the TradingView platform. This powerful tool is developed in Pine Script version 5 and helps traders identify potential buying and selling opportunities in the stock market.
Features:
SMA Trend Analysis: The script calculates two Simple Moving Averages (SMAs) with user-defined lengths for major and minor trends. It displays these SMAs on the chart, allowing traders to visualize the prevailing trends easily.
Surge Detection: The indicator can detect buying and selling surges based on specific conditions, such as volume, RSI, MACD, and stochastic indicators. Both Buying and Selling surges are marked in black on the chart.
Option Buy Zone Detection: The script identifies the option buy zone based on SMA crossovers, RSI, and MACD values. The buy zone is categorized as "CE Zone" or "PE Zone" and displayed in the table along with the trigger time.
Two-Day High and Low Range: The script calculates the highest high and lowest low of the previous two trading days and plots them on the chart. The area between these points is shaded in semi-transparent green and red colors.
Crossover Analysis: The script analyzes moving average crossovers on multiple timeframes (2-minute, 3-minute, and 5-minute) and displays buy and sell signals accordingly.
Trend Identification: The script identifies the major and minor trends as either bullish or bearish, providing valuable insights into the overall market sentiment.
Usage:
Customize Major and Minor SMA Periods: Adjust the lengths of major and minor SMAs through input parameters to suit your trading preferences.
Enable/Disable Moving Averages: Choose which SMAs to display on the chart by toggling the "showXMA" input options.
Set Surge and Option Buy Zone Thresholds: Modify the surgeThreshold, volumeThreshold, RSIThreshold, and StochThreshold inputs to refine the surge and buy zone detection.
Analyze Crossover Signals: Monitor the crossover signals in the table, categorized by timeframes (2-minute, 3-minute, and 5-minute).
Explore Market Bias and Distance to 2-Day High/Low: The table provides information on market bias, current price movement relative to the previous two-day high and low, and the option buy zone status.
Additional Use Cases:
Surge Indicator:
The script includes a Surge Indicator that detects sudden buying or selling surges in the market. When a buying surge is identified, the "BSurge" label will appear below the corresponding candle with black text on a white background. Similarly, a selling surge will display the "SSurge" label in white text on a black background. These indicators help traders quickly spot strong buying or selling activities that may influence their trading decisions. These surges can be used to identify sudden premium dump zones.
Option Buy Zone:
The Option Buy Zone is an essential feature that identifies potential zones for buying call options (CE Zone) or put options (PE Zone) based on specific technical conditions. The indicator evaluates SMA crossovers, RSI, and MACD values to determine the current market sentiment. When the option buy zone is triggered, the script will display the respective zone ("CE Zone" or "PE Zone") in the table, highlighted with a white background. Additionally, the time when the buy zone was triggered will be shown under the "Option Buy Zone Trigger Time" column.
Price Movement Relative to 2-Day High/Low:
The script calculates the highest high and lowest low of the previous two trading days (high2DaysAgo and low2DaysAgo) and plots these points on the chart. The area between these two points is shaded in semi-transparent green and red colors. The green region indicates the price range between the highpricetoconsider (highest high of the previous two days) and the lower value between highPreviousDay and high2DaysAgo. Similarly, the red region represents the price range between the lowpricetoconsider (lowest low of the previous two days) and the higher value between lowPreviousDay and low2DaysAgo.
Entry Time and Current Zone:
The script identifies potential entry times for trades within the option buy zone. When a valid buy zone trigger occurs, the script calculates the entryTime by adding the durationInMinutes (user-defined) to the startTime. The entryTime will be displayed in the "Entry Time" column of the table. Depending on the comparison between optionbuyzonetriggertime and entryTime, the background color of the entry time will change. If optionbuyzonetriggertime is greater than entryTime, the background color will be yellow, indicating that a new trigger has occurred before the specified duration. Otherwise, the background color will be green, suggesting that the entry time is still within the defined duration.
Current Zone Indicator:
The script further categorizes the current zone as either "CE Zone" (call option zone) or "PE Zone" (put option zone). When the market is trending upwards and the minor SMA is above the major SMA, the currentZone will be set to "CE Zone." Conversely, when the market is trending downwards and the minor SMA is below the major SMA, the currentZone will be "PE Zone." This information is displayed in the "Current Zone" column of the table.
These additional use cases empower traders with valuable insights into market trends, buying and selling surges, option buy zones, and potential entry times. Traders can combine this information with their analysis and risk management strategies to make informed and confident trading decisions.
Note:
The script is optimized for identifying trends and potential trade opportunities. It is crucial to perform additional analysis and risk management before executing any trades based on the provided signals.
Happy Trading!
Price Legs: Average Heights; 'Smart ATR'Price Legs: Average Heights; 'Smart ATR'. Consol Range Gauge
~~ Indicator to show small and large price legs (based on short and long input pivot lengths), and calculating the average heights of these price legs; counting legs from user-input start time ~~
//Premise: Wanted to use this as something like a 'Smart ATR': where the average/typical range of a distinct & dynamic price leg could be calculated based on a user-input time interval (as opposed to standard ATR, which is simply the average range over a consistent repeating period, with no regard to market structure). My instinct is that this would be most useful for consolidated periods & range trading: giving the trader an idea of what the typical size of a price leg might be in the current market state (hence in the title, Consol Range gauge)
//Features & User inputs:
-Start time: confirm input when loading indicator by clicking on the chart. Then drag the vertical line to change start time easily.
-Large Legs (toggle on/off) and user-input pivot lookback/lookforward length (larger => larger legs)
-Small Legs (toggle on/off) and user-input pivot lookback/lookforward length (smaller => smaller legs)
-Display Stats table: toggle on/off: simple view- shows the averages of large (up & down), small (up & down), and combined (for each).
-Extended stats table: toggle on/off option to show the averages of the last 3 legs of each category (up/down/large/small/combined)
-Toggle on/off Time & Price chart text labels of price legs (time in mins/hours/days; price in $ or pips; auto assigned based on asset)
-Table position: user choice.
//Notes & tips:
-Using custom start time along with replay mode, you can select any arbitrary chunk of price for the purpose of backtesting.
-Play around with the pivot lookback lengths to find price legs most suitable to the current market regime (consolidating/trending; high volatility/ low volatility)
-Single bar price legs will never be counted: they must be at least 2 bars from H>>L or L>>H.
//Credits: Thanks to @crypto_juju for the idea of applying statistics to this simple price leg indicator.
Simple View: showing only the full averages (counting from Start time):
View showing ONLY the large legs, with Time & Price labels toggled ON:
LNL Smart TICKLNL Smart TICK
This study is mostly beneficial for intraday traders. It is basically a user-friendly "colorful" representation of the $TICK chart with highlighted $TICK extremes. This indicator also includes: a simple trend gauge that can visualize the bias for the day, cumulative tick cloud which is showing the cumulative strength of either longs & shorts on the day.
$TICK Trend Gauge
Although it is just a exponential moving average. This average (default set on 20) works quite well as an overall gauge for the day. Whenever the gauge is green (above zero), any negative $TICK values below -500 can offer great pullback opportunities. Same applies for the red gauge. 20 EMA is below zero ? Great time to fade any +500 or +1000 tick readings. Obviously the gauge can be ajdusted to any number based on personal style.
$TICK Extremes (little triangles)
These little triangles are triggered anytime $TICK jumps above or below the pre-set values of +1000 or -1000. By just simply observing the $TICK triangles during the day can tell you how much volaility or pressure there is. Sometimes there will be 20 green triangles and only 2 red ones. That obviously mean there is a strong bearish pressure. But there will be days when you are not going to see any triangles at all which can mean there is either a low volatility or the price is stuck in the indecisive market.
Cumulative $TICK Cloud
Cumulative $TICK by itself is a great study for day traders. It is basically running "counting" $TICK that is adding the previous $TICK values from previous bars. Cumulative $TICK can create a direct picture of the current market sentiment. It is not just a simple green / red line but a cloud that can really show you the depth on the $TICK. Some days, the cloud will be quite wide which is a good sign for the strength to one side, but sometimes the cloud will be so narrow it will practically disappear. This would be telling you the exact opposite - not much conviction to any side. Of course the depth as well as the color of the cloud can change during the day.
$TICK & Cumulative $TICK Tables
By just looking at these tables. You can immidiately tell the state of the current $TICK. They both can be red or green. It all depends whether the values are positive or negative. The tables are just a little visual addition to the whole $TICK study.
Hope it helps.
Swing Counter [theEccentricTrader]█ OVERVIEW
This indicator counts the number of confirmed swing high and swing low scenarios on any given candlestick chart and displays the statistics in a table, which can be repositioned and resized at the user's discretion.
█ CONCEPTS
Green and Red Candles
• A green candle is one that closes with a high price equal to or above the price it opened.
• A red candle is one that closes with a low price that is lower than the price it opened.
Swing Highs and Swing Lows
• A swing high is a green candle or series of consecutive green candles followed by a single red candle to complete the swing and form the peak.
• A swing low is a red candle or series of consecutive red candles followed by a single green candle to complete the swing and form the trough.
Peak and Trough Prices (Basic)
• The peak price of a complete swing high is the high price of either the red candle that completes the swing high or the high price of the preceding green candle, depending on which is higher.
• The trough price of a complete swing low is the low price of either the green candle that completes the swing low or the low price of the preceding red candle, depending on which is lower.
Peak and Trough Prices (Advanced)
• The advanced peak price of a complete swing high is the high price of either the red candle that completes the swing high or the high price of the highest preceding green candle high price, depending on which is higher.
• The advanced trough price of a complete swing low is the low price of either the green candle that completes the swing low or the low price of the lowest preceding red candle low price, depending on which is lower.
Green and Red Peaks and Troughs
• A green peak is one that derives its price from the green candle/s that constitute the swing high.
• A red peak is one that derives its price from the red candle that completes the swing high.
• A green trough is one that derives its price from the green candle that completes the swing low.
• A red trough is one that derives its price from the red candle/s that constitute the swing low.
Historic Peaks and Troughs
The current, or most recent, peak and trough occurrences are referred to as occurrence zero. Previous peak and trough occurrences are referred to as historic and ordered numerically from right to left, with the most recent historic peak and trough occurrences being occurrence one.
Upper Trends
• A return line uptrend is formed when the current peak price is higher than the preceding peak price.
• A downtrend is formed when the current peak price is lower than the preceding peak price.
• A double-top is formed when the current peak price is equal to the preceding peak price.
Lower Trends
• An uptrend is formed when the current trough price is higher than the preceding trough price.
• A return line downtrend is formed when the current trough price is lower than the preceding trough price.
• A double-bottom is formed when the current trough price is equal to the preceding trough price.
█ FEATURES
Inputs
• Start Date
• End Date
• Position
• Text Size
• Show Sample Period
• Show Plots
• Show Lines
Table
The table is colour coded, consists of three columns and nine rows. Blue cells denote neutral scenarios, green cells denote return line uptrend and uptrend scenarios, and red cells denote downtrend and return line downtrend scenarios.
The swing scenarios are listed in the first column with their corresponding total counts to the right, in the second column. The last row in column one, row nine, displays the sample period which can be adjusted or hidden via indicator settings.
Rows three and four in the third column of the table display the total higher peaks and higher troughs as percentages of total peaks and troughs, respectively. Rows five and six in the third column display the total lower peaks and lower troughs as percentages of total peaks and troughs, respectively. And rows seven and eight display the total double-top peaks and double-bottom troughs as percentages of total peaks and troughs, respectively.
Plots
I have added plots as a visual aid to the swing scenarios listed in the table. Green up-arrows with ‘HP’ denote higher peaks, while green up-arrows with ‘HT’ denote higher troughs. Red down-arrows with ‘LP’ denote higher peaks, while red down-arrows with ‘LT’ denote lower troughs. Similarly, blue diamonds with ‘DT’ denote double-top peaks and blue diamonds with ‘DB’ denote double-bottom troughs. These plots can be hidden via indicator settings.
Lines
I have also added green and red trendlines as a further visual aid to the swing scenarios listed in the table. Green lines denote return line uptrends (higher peaks) and uptrends (higher troughs), while red lines denote downtrends (lower peaks) and return line downtrends (lower troughs). These lines can be hidden via indicator settings.
█ HOW TO USE
This indicator is intended for research purposes and strategy development. I hope it will be useful in helping to gain a better understanding of the underlying dynamics at play on any given market and timeframe. It can, for example, give you an idea of any inherent biases such as a greater proportion of higher peaks to lower peaks. Or a greater proportion of higher troughs to lower troughs. Such information can be very useful when conducting top down analysis across multiple timeframes, or considering entry and exit methods.
What I find most fascinating about this logic, is that the number of swing highs and swing lows will always find equilibrium on each new complete wave cycle. If for example the chart begins with a swing high and ends with a swing low there will be an equal number of swing highs to swing lows. If the chart starts with a swing high and ends with a swing high there will be a difference of one between the two total values until another swing low is formed to complete the wave cycle sequence that began at start of the chart. Almost as if it was a fundamental truth of price action, although quite common sensical in many respects. As they say, what goes up must come down.
The objective logic for swing highs and swing lows I hope will form somewhat of a foundational building block for traders, researchers and developers alike. Not only does it facilitate the objective study of swing highs and swing lows it also facilitates that of ranges, trends, double trends, multi-part trends and patterns. The logic can also be used for objective anchor points. Concepts I will introduce and develop further in future publications.
█ LIMITATIONS
Some higher timeframe candles on tickers with larger lookbacks such as the DXY , do not actually contain all the open, high, low and close (OHLC) data at the beginning of the chart. Instead, they use the close price for open, high and low prices. So, while we can determine whether the close price is higher or lower than the preceding close price, there is no way of knowing what actually happened intra-bar for these candles. And by default candles that close at the same price as the open price, will be counted as green. You can avoid this problem by utilising the sample period filter.
The green and red candle calculations are based solely on differences between open and close prices, as such I have made no attempt to account for green candles that gap lower and close below the close price of the preceding candle, or red candles that gap higher and close above the close price of the preceding candle. I can only recommend using 24-hour markets, if and where possible, as there are far fewer gaps and, generally, more data to work with. Alternatively, you can replace the scenarios with your own logic to account for the gap anomalies, if you are feeling up to the challenge.
The sample size will be limited to your Trading View subscription plan. Premium users get 20,000 candles worth of data, pro+ and pro users get 10,000, and basic users get 5,000. If upgrading is currently not an option, you can always keep a rolling tally of the statistics in an excel spreadsheet or something of the like.
█ NOTES
I feel it important to address the mention of advanced peak and trough price logic. While I have introduced the concept, I have not included the logic in my script for a number of reasons. The most pertinent of which being the amount of extra work I would have to do to include it in a public release versus the actual difference it would make to the statistics. Based on my experience, there are actually only a small number of cases where the advanced peak and trough prices are different from the basic peak and trough prices. And with adequate multi-timeframe analysis any high or low prices that are not captured using basic peak and trough price logic on any given time frame, will no doubt be captured on a higher timeframe. See the example below on the 1H FOREXCOM:USDJPY chart (Figure 1), where the basic peak price logic denoted by the indicator plot does not capture what would be the advanced peak price, but on the 2H FOREXCOM:USDJPY chart (Figure 2), the basic peak logic does capture the advanced peak price from the 1H timeframe.
Figure 1.
Figure 2.
█ RAMBLINGS
“Never was there an age that placed economic interests higher than does our own. Never was the need of a scientific foundation for economic affairs felt more generally or more acutely. And never was the ability of practical men to utilize the achievements of science, in all fields of human activity, greater than in our day. If practical men, therefore, rely wholly on their own experience, and disregard our science in its present state of development, it cannot be due to a lack of serious interest or ability on their part. Nor can their disregard be the result of a haughty rejection of the deeper insight a true science would give into the circumstances and relationships determining the outcome of their activity. The cause of such remarkable indifference must not be sought elsewhere than in the present state of our science itself, in the sterility of all past endeavours to find its empirical foundations.” (Menger, 1871, p.45).
█ BIBLIOGRAPHY
Menger, C. (1871) Principles of Economics. Reprint, Auburn, Alabama: Ludwig Von Mises Institute: 2007.
arraymethodsLibrary "arraymethods"
Supplementary array methods.
delete(arr, index)
remove int object from array of integers at specific index
Parameters:
arr : int array
index : index at which int object need to be removed
Returns: void
delete(arr, index)
remove float object from array of float at specific index
Parameters:
arr : float array
index : index at which float object need to be removed
Returns: float
delete(arr, index)
remove bool object from array of bool at specific index
Parameters:
arr : bool array
index : index at which bool object need to be removed
Returns: bool
delete(arr, index)
remove string object from array of string at specific index
Parameters:
arr : string array
index : index at which string object need to be removed
Returns: string
delete(arr, index)
remove color object from array of color at specific index
Parameters:
arr : color array
index : index at which color object need to be removed
Returns: color
delete(arr, index)
remove line object from array of lines at specific index and deletes the line
Parameters:
arr : line array
index : index at which line object need to be removed and deleted
Returns: void
delete(arr, index)
remove label object from array of labels at specific index and deletes the label
Parameters:
arr : label array
index : index at which label object need to be removed and deleted
Returns: void
delete(arr, index)
remove box object from array of boxes at specific index and deletes the box
Parameters:
arr : box array
index : index at which box object need to be removed and deleted
Returns: void
delete(arr, index)
remove table object from array of tables at specific index and deletes the table
Parameters:
arr : table array
index : index at which table object need to be removed and deleted
Returns: void
delete(arr, index)
remove linefill object from array of linefills at specific index and deletes the linefill
Parameters:
arr : linefill array
index : index at which linefill object need to be removed and deleted
Returns: void
popr(arr)
remove last int object from array
Parameters:
arr : int array
Returns: int
popr(arr)
remove last float object from array
Parameters:
arr : float array
Returns: float
popr(arr)
remove last bool object from array
Parameters:
arr : bool array
Returns: bool
popr(arr)
remove last string object from array
Parameters:
arr : string array
Returns: string
popr(arr)
remove last color object from array
Parameters:
arr : color array
Returns: color
popr(arr)
remove and delete last line object from array
Parameters:
arr : line array
Returns: void
popr(arr)
remove and delete last label object from array
Parameters:
arr : label array
Returns: void
popr(arr)
remove and delete last box object from array
Parameters:
arr : box array
Returns: void
popr(arr)
remove and delete last table object from array
Parameters:
arr : table array
Returns: void
popr(arr)
remove and delete last linefill object from array
Parameters:
arr : linefill array
Returns: void
shiftr(arr)
remove first int object from array
Parameters:
arr : int array
Returns: int
shiftr(arr)
remove first float object from array
Parameters:
arr : float array
Returns: float
shiftr(arr)
remove first bool object from array
Parameters:
arr : bool array
Returns: bool
shiftr(arr)
remove first string object from array
Parameters:
arr : string array
Returns: string
shiftr(arr)
remove first color object from array
Parameters:
arr : color array
Returns: color
shiftr(arr)
remove and delete first line object from array
Parameters:
arr : line array
Returns: void
shiftr(arr)
remove and delete first label object from array
Parameters:
arr : label array
Returns: void
shiftr(arr)
remove and delete first box object from array
Parameters:
arr : box array
Returns: void
shiftr(arr)
remove and delete first table object from array
Parameters:
arr : table array
Returns: void
shiftr(arr)
remove and delete first linefill object from array
Parameters:
arr : linefill array
Returns: void
push(arr, val, maxItems)
add int to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : int array
val : int object to be pushed
maxItems : max number of items array can hold
Returns: int
push(arr, val, maxItems)
add float to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : float array
val : float object to be pushed
maxItems : max number of items array can hold
Returns: float
push(arr, val, maxItems)
add bool to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : bool array
val : bool object to be pushed
maxItems : max number of items array can hold
Returns: bool
push(arr, val, maxItems)
add string to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : string array
val : string object to be pushed
maxItems : max number of items array can hold
Returns: string
push(arr, val, maxItems)
add color to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Parameters:
arr : color array
val : color object to be pushed
maxItems : max number of items array can hold
Returns: color
push(arr, val, maxItems)
add line to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : line array
val : line object to be pushed
maxItems : max number of items array can hold
Returns: line
push(arr, val, maxItems)
add label to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : label array
val : label object to be pushed
maxItems : max number of items array can hold
Returns: label
push(arr, val, maxItems)
add box to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : box array
val : box object to be pushed
maxItems : max number of items array can hold
Returns: box
push(arr, val, maxItems)
add table to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : table array
val : table object to be pushed
maxItems : max number of items array can hold
Returns: table
push(arr, val, maxItems)
add linefill to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Parameters:
arr : linefill array
val : linefill object to be pushed
maxItems : max number of items array can hold
Returns: linefill
unshift(arr, val, maxItems)
add int to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : int array
val : int object to be unshift
maxItems : max number of items array can hold
Returns: int
unshift(arr, val, maxItems)
add float to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : float array
val : float object to be unshift
maxItems : max number of items array can hold
Returns: float
unshift(arr, val, maxItems)
add bool to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : bool array
val : bool object to be unshift
maxItems : max number of items array can hold
Returns: bool
unshift(arr, val, maxItems)
add string to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : string array
val : string object to be unshift
maxItems : max number of items array can hold
Returns: string
unshift(arr, val, maxItems)
add color to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Parameters:
arr : color array
val : color object to be unshift
maxItems : max number of items array can hold
Returns: color
unshift(arr, val, maxItems)
add line to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : line array
val : line object to be unshift
maxItems : max number of items array can hold
Returns: line
unshift(arr, val, maxItems)
add label to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : label array
val : label object to be unshift
maxItems : max number of items array can hold
Returns: label
unshift(arr, val, maxItems)
add box to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : box array
val : box object to be unshift
maxItems : max number of items array can hold
Returns: box
unshift(arr, val, maxItems)
add table to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : table array
val : table object to be unshift
maxItems : max number of items array can hold
Returns: table
unshift(arr, val, maxItems)
add linefill to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Parameters:
arr : linefill array
val : linefill object to be unshift
maxItems : max number of items array can hold
Returns: linefill
flush(arr)
remove all int objects in an array
Parameters:
arr : int array
Returns: int
flush(arr)
remove all float objects in an array
Parameters:
arr : float array
Returns: float
flush(arr)
remove all bool objects in an array
Parameters:
arr : bool array
Returns: bool
flush(arr)
remove all string objects in an array
Parameters:
arr : string array
Returns: string
flush(arr)
remove all color objects in an array
Parameters:
arr : color array
Returns: color
flush(arr)
remove and delete all line objects in an array
Parameters:
arr : line array
Returns: line
flush(arr)
remove and delete all label objects in an array
Parameters:
arr : label array
Returns: label
flush(arr)
remove and delete all box objects in an array
Parameters:
arr : box array
Returns: box
flush(arr)
remove and delete all table objects in an array
Parameters:
arr : table array
Returns: table
flush(arr)
remove and delete all linefill objects in an array
Parameters:
arr : linefill array
Returns: linefill
Tape [LucF]█ OVERVIEW
This script prints an ersatz of a trading console's "tape" section to the right of your chart. It displays the time, price and volume of each update of the chart's feed. It also calculates volume delta for the bar. As it calculates from realtime information, it will not display information on historical bars.
█ FEATURES
Calculations
Each new line in the tape displays the last price/volume update from the TradingView feed that's building your chart. These updates do not necessarily correspond to ticks from the originating broker/exchange's matching engine. Multiple broker/exchange ticks are often aggregated in one chart update.
The script first determines if price has moved up or down since the last update. The polarity of the price change, in turn, determines the polarity of the volume for that specific update. If price does not move between consecutive updates, then the last known polarity is used. Using this method, we can calculate a running volume delta accumulation for the bar, which becomes the bar's final volume delta value when the bar closes (you can inspect values of elapsed realtime bars in the Data Window or the indicator's values). Note that these values will all reset if the script re-executes because of a change in inputs or a chart refresh.
While this method of calculating volume delta is not perfect, it is currently the most precise way of calculating volume delta available on TradingView at the moment. Calculating more precise results would require scripts to have access to bid/ask levels from any chart timeframe. Charts at seconds timeframes do use exchange/broker ticks when the feeds you are using allow for it, and this indicator will run on them, but tick data is not yet available from higher timeframes, for now. Also note that the method used in this script is far superior to the intrabar inspection technique used on historical bars in my other "Delta Volume" indicators. This is because volume delta here is calculated from many more realtime updates than the available intrabars in history.
Inputs
You can use the script's inputs to configure:
• The number of lines displayed in the tape.
• If new lines appear at the top or bottom.
• If you want to hide lines with low volume.
• The precision of volume values.
• The size of the text and the colors used to highlight either the tape's text or background.
• The position where you want the tape on your chart.
• Conditions triggering three different markers.
Display
Deltas are shown at the bottom of the tape. They are reset on each bar. Time delta displays the time elapsed since the beginning of the bar, on intraday timeframes only. Contrary to the price change display by TradingView at the top left of charts, which is calculated from the close of the previous bar, the price delta in the tape is calculated from the bar's open, because that's the information used in the calculation of volume delta. The time will become orange when volume delta's polarity diverges from that of the bar. The volume delta value represents the current, cumulative value for the bar. Its color reflects its polarity.
When new realtime bars appear on the chart, a ↻ symbol will appear before the volume value in tape lines.
Markers
There are three types of markers you can choose to display:
• Marker 1 on volume bumps. A bump is defined as two consecutive and increasing/decreasing plus/minus delta volume values,
when no divergence between the polarity of delta volume and the bar occurs on the second bar.
• Marker 2 on volume delta for the bar exceeding a limit of your choice when there is no divergence between the polarity of delta volume and the bar. These trigger at the bar's close.
• Marker 3 on tape lines with volume exceeding a threshold. These trigger in realtime. Be sure to set a threshold high enough so that it doesn't generate too many alerts.
These markers will only display briefly under the bar, but another marker appears next to the relevant line in the tape.
The marker conditions are used to trigger alerts configured on the script. Alert messages will mention the marker(s) that triggered the specific alert event, along with the relevant volume value that triggered the marker. If more than one marker triggers a single alert, they will overprint under the bar, which can make it difficult to distinguish them.
For more detailed on-chart analysis of realtime volume delta, see my Delta Volume Realtime Action .
█ NOTES FOR CODERS
This script showcases two new Pine features:
• Tables, which allow Pine programmers to display tabular information in fixed locations of the chart. The tape uses this feature.
See the Pine User Manual's page on Tables for more information.
• varip -type variables which we can use to save values between realtime updates.
See the " Using `varip` variables " publication by PineCoders for more information.
Multi-Metric Market Regime Detector - [KK]This indicator identifies current market behavioral regimes by synthesizing six complementary analytical methodologies. Rather than generating trading signals, it provides contextual analysis to help traders understand market conditions and adapt their strategies accordingly.
Markets cycle through distinct behavioral states - trending efficiently, consolidating in ranges, compressing before breakouts, or transitioning between states. This tool quantifies these conditions using only price action data (OHLC), enabling traders to filter strategies based on current market structure.
Core Methodology
The indicator combines six independent metrics into a weighted composite classification system:
Efficiency Ratio (30% weight)
Measures the signal-to-noise ratio of price movement by comparing net price displacement to total path traveled. High efficiency indicates clean directional movement; low efficiency indicates choppy, noisy conditions.
Choppiness Index (25% weight)
Quantifies whether the market is trending or consolidating by comparing cumulative True Range to actual price range. Values below 38.2 suggest trending behavior; values above 61.8 suggest range-bound consolidation.
Volatility Analysis (20% weight)
Detects compression and expansion cycles using the relationship between Bollinger Bands and Keltner Channels. Compression phases (squeeze conditions) often precede significant directional moves.
Fractal Efficiency Proxy (10% weight)
Analyzes path complexity by comparing net displacement to cumulative range, providing insight into the smoothness versus randomness of price action.
Market Structure (15% weight)
Examines pivot point sequences to identify structural trends. Higher Highs and Higher Lows indicate bullish structure; Lower Lows and Lower Highs indicate bearish structure.
Wick-to-Body Ratio Analysis (qualitative)
Identifies rejection and indecision patterns by measuring the proportion of candle wicks to bodies, highlighting potential reversal zones or liquidity events.
Regime Classifications
The composite scoring system produces four distinct regime states:
TRENDING : High efficiency, low choppiness, clear directional structure. Favorable conditions for momentum and trend-following strategies.
CHOPPY/RANGE : Low efficiency, high choppiness, mean-reverting behavior. Favorable conditions for range trading and counter-trend setups.
COMPRESSION : Volatility squeeze detected, market coiling. Anticipate expansion; reduce position size until breakout confirmation.
TRANSITION : Mixed signals, conflicting metrics, unclear direction. Recommended to reduce exposure and wait for regime clarity.
Visual Features
Regime-Colored Candles (enabled by default)
Candles are colored according to the current regime state for immediate visual identification. Green indicates trending, gray indicates choppy, orange indicates compression, and yellow indicates transition.
Comprehensive Metrics Table (top right)
Displays real-time values for all six metrics along with individual regime assessments and the final composite classification with score.
Regime Guide Table (middle right)
Quick reference guide showing recommended strategies and actions to avoid for each regime state.
Chart Label ( optional)
Summary label displaying current regime and key metric values.
Background Coloring (optional)
Alternative visualization using background colors instead of candle coloring.
Indicator Plots (optional)
Displays Efficiency Ratio and Choppiness Index with threshold reference lines.
Customization Options
All calculation parameters are adjustable:
- Efficiency Ratio lookback period and thresholds
- Choppiness Index length and classification thresholds
- Volatility analysis parameters (BB/KC multipliers and lengths)
- Pivot detection sensitivity (left/right bars)
- Text size controls for both tables (Tiny to Huge)
- Visual element toggles (candles, background, label, tables, plots)
The indicator automatically detects chart theme (dark/light) and adjusts text colors for optimal readability.
Practical Application
This is a context tool, not a signal generator. Use it to:
- Filter trend-following strategies to trending regimes only
- Identify range-bound conditions for mean-reversion setups
- Anticipate breakout opportunities during compression phases
- Reduce exposure during transitional periods with mixed signals
- Improve risk management by matching position size to regime clarity
The indicator works on all timeframes and instruments using only OHLC data. Higher timeframes generally provide more stable regime classifications.
Alert Conditions
Four alert types are available:
- Efficiency Ratio crosses trend threshold
- Choppiness Index enters range territory
- Volatility squeeze released
- Regime state change detected
Technical Notes
Built with Pine Script v5. Uses up to 500 bars of historical data for stable calculations. All metrics are calculated in real-time with no repainting on confirmed pivots. Compatible with all chart themes through adaptive text coloring.
Disclaimer
This indicator is provided for educational and informational purposes only. It does not constitute financial advice or trading recommendations. Past performance and theoretical analysis do not guarantee future results. Always conduct independent research and implement appropriate risk management. Trading financial instruments involves substantial risk of loss.
Usage Philosophy
The goal is not to trade more frequently, but to think more clearly about market conditions. Use this tool to develop deeper intuition about market structure and to enforce discipline by avoiding low-probability setups during unfavorable regime conditions.






















