Buyside & Sellside Liquidity The Buyside & Sellside Liquidity Indicator is an advanced Smart Money Concepts (SMC) tool that automatically detects and visualizes liquidity zones and liquidity voids (imbalances) directly on the chart.
🟢 Function and meaning:
1. Buyside Liquidity (green):
Highlights price zones above current price where short traders’ stop-loss orders are likely resting.
When price sweeps these areas, it often indicates a liquidity grab or stop hunt.
👉 These zones are labeled with 💵💰 emojis for a clear visual cue where smart money collects liquidity.
2. Sellside Liquidity (red):
Highlights zones below the current price where long traders’ stop-losses are likely placed.
Once breached, these often signal a potential reversal upward.
👉 The 💵💰🪙 emojis make these liquidity targets visually intuitive on the chart.
3. Liquidity Voids (bright areas):
Indicate inefficient price areas, where the market moved too quickly without filling orders.
These zones are often revisited later as the market seeks balance (fair value).
👉 Shown as light shaded boxes with 💰 emojis to emphasize imbalance regions.
💡 Usage:
• Helps spot smart money manipulation and stop hunts.
• Marks potential reversal or breakout zones.
• Great for traders applying SMC, ICT, or Fair Value Gap strategies.
✨ Highlight:
Dollar and money bag emojis (💵💰🪙💸) are integrated directly into chart labels to create a clear and visually engaging representation of liquidity areas.
Indicators and strategies
LogNormalLibrary "LogNormal"
A collection of functions used to model skewed distributions as log-normal.
Prices are commonly modeled using log-normal distributions (ie. Black-Scholes) because they exhibit multiplicative changes with long tails; skewed exponential growth and high variance. This approach is particularly useful for understanding price behavior and estimating risk, assuming continuously compounding returns are normally distributed.
Because log space analysis is not as direct as using math.log(price) , this library extends the Error Functions library to make working with log-normally distributed data as simple as possible.
- - -
QUICK START
Import library into your project
Initialize model with a mean and standard deviation
Pass model params between methods to compute various properties
var LogNorm model = LN.init(arr.avg(), arr.stdev()) // Assumes the library is imported as LN
var mode = model.mode()
Outputs from the model can be adjusted to better fit the data.
var Quantile data = arr.quantiles()
var more_accurate_mode = mode.fit(model, data) // Fits value from model to data
Inputs to the model can also be adjusted to better fit the data.
datum = 123.45
model_equivalent_datum = datum.fit(data, model) // Fits value from data to the model
area_from_zero_to_datum = model.cdf(model_equivalent_datum)
- - -
TYPES
There are two requisite UDTs: LogNorm and Quantile . They are used to pass parameters between functions and are set automatically (see Type Management ).
LogNorm
Object for log space parameters and linear space quantiles .
Fields:
mu (float) : Log space mu ( µ ).
sigma (float) : Log space sigma ( σ ).
variance (float) : Log space variance ( σ² ).
quantiles (Quantile) : Linear space quantiles.
Quantile
Object for linear quantiles, most similar to a seven-number summary .
Fields:
Q0 (float) : Smallest Value
LW (float) : Lower Whisker Endpoint
LC (float) : Lower Whisker Crosshatch
Q1 (float) : First Quartile
Q2 (float) : Second Quartile
Q3 (float) : Third Quartile
UC (float) : Upper Whisker Crosshatch
UW (float) : Upper Whisker Endpoint
Q4 (float) : Largest Value
IQR (float) : Interquartile Range
MH (float) : Midhinge
TM (float) : Trimean
MR (float) : Mid-Range
- - -
TYPE MANAGEMENT
These functions reliably initialize and update the UDTs. Because parameterization is interdependent, avoid setting the LogNorm and Quantile fields directly .
init(mean, stdev, variance)
Initializes a LogNorm object.
Parameters:
mean (float) : Linearly measured mean.
stdev (float) : Linearly measured standard deviation.
variance (float) : Linearly measured variance.
Returns: LogNorm Object
set(ln, mean, stdev, variance)
Transforms linear measurements into log space parameters for a LogNorm object.
Parameters:
ln (LogNorm) : Object containing log space parameters.
mean (float) : Linearly measured mean.
stdev (float) : Linearly measured standard deviation.
variance (float) : Linearly measured variance.
Returns: LogNorm Object
quantiles(arr)
Gets empirical quantiles from an array of floats.
Parameters:
arr (array) : Float array object.
Returns: Quantile Object
- - -
DESCRIPTIVE STATISTICS
Using only the initialized LogNorm parameters, these functions compute a model's central tendency and standardized moments.
mean(ln)
Computes the linear mean from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
median(ln)
Computes the linear median from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
mode(ln)
Computes the linear mode from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
variance(ln)
Computes the linear variance from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
skewness(ln)
Computes the linear skewness from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
kurtosis(ln, excess)
Computes the linear kurtosis from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
excess (bool) : Excess Kurtosis (true) or regular Kurtosis (false).
Returns: Between 0 and ∞
hyper_skewness(ln)
Computes the linear hyper skewness from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
Returns: Between 0 and ∞
hyper_kurtosis(ln, excess)
Computes the linear hyper kurtosis from log space parameters.
Parameters:
ln (LogNorm) : Object containing log space parameters.
excess (bool) : Excess Hyper Kurtosis (true) or regular Hyper Kurtosis (false).
Returns: Between 0 and ∞
- - -
DISTRIBUTION FUNCTIONS
These wrap Gaussian functions to make working with model space more direct. Because they are contained within a log-normal library, they describe estimations relative to a log-normal curve, even though they fundamentally measure a Gaussian curve.
pdf(ln, x, empirical_quantiles)
A Probability Density Function estimates the probability density . For clarity, density is not a probability .
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate for which a density will be estimated.
empirical_quantiles (Quantile) : Quantiles as observed in the data (optional).
Returns: Between 0 and ∞
cdf(ln, x, precise)
A Cumulative Distribution Function estimates the area under a Log-Normal curve between Zero and a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
ccdf(ln, x, precise)
A Complementary Cumulative Distribution Function estimates the area under a Log-Normal curve between a linear X coordinate and Infinity.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
cdfinv(ln, a, precise)
An Inverse Cumulative Distribution Function reverses the Log-Normal cdf() by estimating the linear X coordinate from an area.
Parameters:
ln (LogNorm) : Object of log space parameters.
a (float) : Normalized area .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
ccdfinv(ln, a, precise)
An Inverse Complementary Cumulative Distribution Function reverses the Log-Normal ccdf() by estimating the linear X coordinate from an area.
Parameters:
ln (LogNorm) : Object of log space parameters.
a (float) : Normalized area .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
cdfab(ln, x1, x2, precise)
A Cumulative Distribution Function from A to B estimates the area under a Log-Normal curve between two linear X coordinates (A and B).
Parameters:
ln (LogNorm) : Object of log space parameters.
x1 (float) : First linear X coordinate .
x2 (float) : Second linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
ott(ln, x, precise)
A One-Tailed Test transforms a linear X coordinate into an absolute Z Score before estimating the area under a Log-Normal curve between Z and Infinity.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 0.5
ttt(ln, x, precise)
A Two-Tailed Test transforms a linear X coordinate into symmetrical ± Z Scores before estimating the area under a Log-Normal curve from Zero to -Z, and +Z to Infinity.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
ottinv(ln, a, precise)
An Inverse One-Tailed Test reverses the Log-Normal ott() by estimating a linear X coordinate for the right tail from an area.
Parameters:
ln (LogNorm) : Object of log space parameters.
a (float) : Half a normalized area .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
tttinv(ln, a, precise)
An Inverse Two-Tailed Test reverses the Log-Normal ttt() by estimating two linear X coordinates from an area.
Parameters:
ln (LogNorm) : Object of log space parameters.
a (float) : Normalized area .
precise (bool) : Double precision (true) or single precision (false).
Returns: Linear space tuple :
- - -
UNCERTAINTY
Model-based measures of uncertainty, information, and risk.
sterr(sample_size, fisher_info)
The standard error of a sample statistic.
Parameters:
sample_size (float) : Number of observations.
fisher_info (float) : Fisher information.
Returns: Between 0 and ∞
surprisal(p, base)
Quantifies the information content of a single event.
Parameters:
p (float) : Probability of the event .
base (float) : Logarithmic base (optional).
Returns: Between 0 and ∞
entropy(ln, base)
Computes the differential entropy (average surprisal).
Parameters:
ln (LogNorm) : Object of log space parameters.
base (float) : Logarithmic base (optional).
Returns: Between 0 and ∞
perplexity(ln, base)
Computes the average number of distinguishable outcomes from the entropy.
Parameters:
ln (LogNorm)
base (float) : Logarithmic base used for Entropy (optional).
Returns: Between 0 and ∞
value_at_risk(ln, p, precise)
Estimates a risk threshold under normal market conditions for a given confidence level.
Parameters:
ln (LogNorm) : Object of log space parameters.
p (float) : Probability threshold, aka. the confidence level .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
value_at_risk_inv(ln, value_at_risk, precise)
Reverses the value_at_risk() by estimating the confidence level from the risk threshold.
Parameters:
ln (LogNorm) : Object of log space parameters.
value_at_risk (float) : Value at Risk.
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
conditional_value_at_risk(ln, p, precise)
Estimates the average loss beyond a confidence level, aka. expected shortfall.
Parameters:
ln (LogNorm) : Object of log space parameters.
p (float) : Probability threshold, aka. the confidence level .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
conditional_value_at_risk_inv(ln, conditional_value_at_risk, precise)
Reverses the conditional_value_at_risk() by estimating the confidence level of an average loss.
Parameters:
ln (LogNorm) : Object of log space parameters.
conditional_value_at_risk (float) : Conditional Value at Risk.
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and 1
partial_expectation(ln, x, precise)
Estimates the partial expectation of a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and µ
partial_expectation_inv(ln, partial_expectation, precise)
Reverses the partial_expectation() by estimating a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
partial_expectation (float) : Partial Expectation .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
conditional_expectation(ln, x, precise)
Estimates the conditional expectation of a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between X and ∞
conditional_expectation_inv(ln, conditional_expectation, precise)
Reverses the conditional_expectation by estimating a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
conditional_expectation (float) : Conditional Expectation .
precise (bool) : Double precision (true) or single precision (false).
Returns: Between 0 and ∞
fisher(ln, log)
Computes the Fisher Information Matrix for the distribution, not a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
log (bool) : Sets if the matrix should be in log (true) or linear (false) space.
Returns: FIM for the distribution
fisher(ln, x, log)
Computes the Fisher Information Matrix for a linear X coordinate, not the distribution itself.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
log (bool) : Sets if the matrix should be in log (true) or linear (false) space.
Returns: FIM for the linear X coordinate
confidence_interval(ln, x, sample_size, confidence, precise)
Estimates a confidence interval for a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate .
sample_size (float) : Number of observations.
confidence (float) : Confidence level .
precise (bool) : Double precision (true) or single precision (false).
Returns: CI for the linear X coordinate
- - -
CURVE FITTING
An overloaded function that helps transform values between spaces. The primary function uses quantiles, and the overloads wrap the primary function to make working with LogNorm more direct.
fit(x, a, b)
Transforms X coordinate between spaces A and B.
Parameters:
x (float) : Linear X coordinate from space A .
a (LogNorm | Quantile | array) : LogNorm, Quantile, or float array.
b (LogNorm | Quantile | array) : LogNorm, Quantile, or float array.
Returns: Adjusted X coordinate
- - -
EXPORTED HELPERS
Small utilities to simplify extensibility.
z_score(ln, x)
Converts a linear X coordinate into a Z Score.
Parameters:
ln (LogNorm) : Object of log space parameters.
x (float) : Linear X coordinate.
Returns: Between -∞ and +∞
x_coord(ln, z)
Converts a Z Score into a linear X coordinate.
Parameters:
ln (LogNorm) : Object of log space parameters.
z (float) : Standard normal Z Score.
Returns: Between 0 and ∞
iget(arr, index)
Gets an interpolated value of a pseudo -element (fictional element between real array elements). Useful for quantile mapping.
Parameters:
arr (array) : Float array object.
index (float) : Index of the pseudo element.
Returns: Interpolated value of the arrays pseudo element.
NOVA Breakout Signals v2.2 (TF M30)A clean, rules-based breakout signal tool for 30-minute charts.
It detects Dow swing breakouts and filters them with RSI, MACD and Volume so you only see the higher-quality entries. The script does not place trades and does not calculate SL/TP – it only prints clear LONG/SHORT labels at the entry price.
⸻
How it works
1. Timeframe enforcement – Signals are generated only on M30. On other timeframes the script shows a notice and stays silent.
2. Breakout engine (Dow swings) – The last confirmed swing high/low (pivots) is tracked.
• Breakout Up: bar closes above the last swing high by a small buffer.
• Breakout Down: bar closes below the last swing low by a small buffer.
3. Quality filters (all must be true):
• RSI (default length 30):
• Long: RSI > threshold and rising.
• Short: RSI < threshold and falling.
• MACD (12/26/9):
• Long: histogram > 0 and line > signal.
• Short: histogram < 0 and line < signal.
• Volume: current volume > SMA(volume, 20) × multiplier.
4. Debounce / anti-spam
• Cooldown of 4 hours (8 M30 bars) after any signal.
• Minimum price distance from the previous signal to avoid clustered labels.
Signals appear once the bar closes (barstate.isconfirmed). No swing lines are drawn to keep the chart clean; only entry labels are shown.
⸻
Inputs (key)
• RSI length & thresholds for Long/Short confirmation.
• MACD uses 12/26/9 (fixed).
• Volume multiplier (relative to SMA 20).
• Breakout buffer %, Cooldown hours, Min distance %.
• Show labels (on/off).
⸻
Usage tips
• Start with gold/major FX/indices on M30; use “Once per bar close” if you attach alerts.
• Increase the breakout buffer and volume multiplier in choppy markets.
• Tighten RSI thresholds (e.g., 55/45) if you want fewer but stronger signals.
⸻
Notes & limitations
• Pivots confirm after a few bars by definition; signals themselves are printed only on confirmed bar close and do not repaint once shown.
• This is a signal indicator, not investment advice. Always manage risk.
Kalman VWAP Filter [BackQuant]Kalman VWAP Filter
A precision-engineered price estimator that fuses Kalman filtering with the Volume-Weighted Average Price (VWAP) to create a smooth, adaptive representation of fair value. This hybrid model intelligently balances responsiveness and stability, tracking trend shifts with minimal noise while maintaining a statistically grounded link to volume distribution.
If you would like to see my original Kalman Filter, please find it here:
Concept overview
The Kalman VWAP Filter is built on two core ideas from quantitative finance and control theory:
Kalman filtering — a recursive Bayesian estimator used to infer the true underlying state of a noisy system (in this case, fair price).
VWAP anchoring — a dynamic reference that weights price by traded volume, representing where the majority of transactions have occurred.
By merging these concepts, the filter produces a line that behaves like a "smart moving average": smooth when noise is high, fast when markets trend, and self-adjusting based on both market structure and user-defined noise parameters.
How it works
Measurement blend : Combines the chosen Price Source (e.g., close or hlc3) with either a Session VWAP or a Rolling VWAP baseline. The VWAP Weight input controls how much the filter trusts traded volume versus price movement.
Kalman recursion : Each bar updates an internal "state estimate" using the Kalman gain, which determines how much to trust new observations vs. the prior state.
Noise parameters :
Process Noise controls agility — higher values make the filter more responsive but also more volatile.
Measurement Noise controls smoothness — higher values make it steadier but slower to adapt.
Filter order (N) : Defines how many parallel state estimates are used. Larger orders yield smoother output by layering multiple one-dimensional Kalman passes.
Final output : A refined price trajectory that captures VWAP-adjusted fair value while dynamically adjusting to real-time volatility and order flow.
Why this matters
Most smoothing techniques (EMA, SMA, Hull) trade off lag for smoothness. Kalman filtering, however, adaptively rebalances that tradeoff each bar using probabilistic weighting, allowing it to follow market state changes more efficiently. Anchoring it to VWAP integrates microstructure context — capturing where liquidity truly lies rather than only where price moves.
Use cases
Trend tracking : Color-coded candle painting highlights shifts in slope direction, revealing early trend transitions.
Fair value mapping : The line represents a continuously updated equilibrium price between raw price action and VWAP flow.
Adaptive moving average replacement : Outperforms static MAs in variable volatility regimes by self-adjusting smoothness.
Execution & reversion logic : When price diverges from the Kalman VWAP, it may indicate short-term imbalance or overextension relative to volume-adjusted fair value.
Cross-signal framework : Use with standard VWAP or other filters to identify convergence or divergence between liquidity-weighted and state-estimated prices.
Parameter guidance
Process Noise : 0.01–0.05 for swing traders, 0.1–0.2 for intraday scalping.
Measurement Noise : 2–5 for normal use, 8+ for very smooth tracking.
VWAP Weight : 0.2–0.4 balances both price and VWAP influence; 1.0 locks output directly to VWAP dynamics.
Filter Order (N) : 3–5 for reactive short-term filters; 8–10 for smoother institutional-style baselines.
Interpretation
When price > Kalman VWAP and slope is positive → bullish pressure; buyers dominate above fair value.
When price < Kalman VWAP and slope is negative → bearish pressure; sellers dominate below fair value.
Convergence of price and Kalman VWAP often signals equilibrium; strong divergence suggests imbalance.
Crosses between Kalman VWAP and the base VWAP can hint at shifts in short-term vs. long-term liquidity control.
Summary
The Kalman VWAP Filter blends statistical estimation with market microstructure awareness, offering a refined alternative to static smoothing indicators. It adapts in real time to volatility and order flow, helping traders visualize balance, transition, and momentum through a lens of probabilistic fair value rather than simple price averaging.
Average Daily Session Range PRO [Capitalize Labs]Average Daily Session Range PRO
The Average Daily Session Range PRO (ADSR PRO) is a professional-grade analytical tool designed to quantify and visualize the probabilistic range behavior of intraday sessions.
It calculates directional range statistics using historical session data to show how far price typically moves up or down from the session open.
This helps traders understand session volatility profiles, range asymmetry, and probabilistic extensions relative to prior performance.
Key Features
Asymmetric Range Modeling: Separately tracks average upside and downside excursions from each session open, revealing directional bias and volatility imbalance.
Probability Engine Modes: Choose between Rolling Window (fixed-length lookback) and Exponential Decay (weighted historical memory) to control how recent or historic data influences probabilities.
Session-Aware Statistics: Calculates values independently for each defined session, allowing region-specific insights (e.g., Tokyo, London, New York).
Dynamic Range Table: Displays key metrics such as average up/down ticks, expected range extensions, and percentage probabilities.
Adaptive Display: Works across timeframes and instruments, automatically aligning with user-defined session start and end times.
Visual Clarity: Includes clean range markers and labels optimized for both backtesting and live-chart analysis.
Intended Use
ADSR PRO is a statistical reference indicator.
It does not generate buy/sell signals or predictive forecasts.
Its purpose is to help users observe historical session behavior and volatility tendencies to support their own discretionary analysis.
Credits
Developed by Capitalize Labs, specialists in quantitative and discretionary market research tools.
Risk Warning
This material is educational research only and does not constitute financial advice, investment recommendation, or a solicitation to buy or sell any instrument.
Foreign exchange and CFDs are complex, leveraged products that carry a high risk of rapid losses; leverage amplifies both gains and losses, and you should not trade with funds you cannot afford to lose.
Market conditions can change without notice, and news or illiquidity may cause gaps and slippage; stop-loss orders are not guaranteed.
The analysis presented does not take into account your objectives, financial situation, or risk tolerance.
Before acting, assess suitability in light of your circumstances and consider seeking advice from a licensed professional.
Past performance and back-tested or hypothetical scenarios are not reliable indicators of future results, and no outcome or level mentioned here is assured.
You are solely responsible for all trading decisions, including position sizing and risk management.
No external links, promotions, or contact details are provided, in line with TradingView House Rules.
EMA HeatmapEMA Heatmap — Indicator Description
The EMA Order Heatmap is a visual trend-structure tool designed to show whether the market is currently trending bullish, trending bearish, or moving through a neutral consolidation phase. It evaluates the alignment of multiple exponential moving averages (EMAs) at three different structural layers: short-term daily, medium-term daily, and weekly macro trend. This creates a quick and intuitive picture of how well price movement is organized across timeframes.
Each layer of the heatmap is scored from bearish to bullish based on how the EMAs are stacked relative to each other. When EMAs are in a fully bullish configuration, the row displays a bright green or lime color. Fully bearish alignment is shown in red. Yellow tones appear when the EMAs are mixed or compressing, indicating uncertainty, trend exhaustion, or a change in market character. The three rows combined offer a concise view of whether strength or weakness is isolated to one timeframe or broad across the market.
This indicator is best used as a trend filter before making trading decisions. Traders may find more consistent setups when the majority of the heatmap supports the direction of their trade. Green-dominant conditions suggest a trending bullish environment where long trades can be favored. Red-dominant conditions indicate bearish momentum and stronger potential for short opportunities. When yellow becomes more prominent, the market may be transitioning, ranging, or gearing up for a breakout, making timing more challenging and risk higher.
• Helps quickly identify directional bias
• Highlights when trends strengthen, weaken, or turn
• Provides insight into whether momentum is supported by higher timeframes
• Encourages traders to avoid fighting market structure
It is important to recognize the limitations. EMAs are lagging indicators, so the heatmap may confirm a trend after the initial move is underway, especially during fast reversals. In sideways or low-volume environments, the structure can shift frequently, reducing clarity. This tool does not generate entry or exit signals on its own and should be paired with price action, momentum studies, or support and resistance analysis for precise trade execution.
The EMA Order Heatmap offers a clean and reliable way to stay aligned with the broader market environment and avoid lower-quality trades in indecisive conditions. It supports more disciplined decision-making by helping traders focus on setups that match the prevailing structural trend.
Fibonacci levels MTF 2WEEK KKKKA Fibonacci arc trading strategy uses circular arcs drawn at Fibonacci retracement levels (38.2%, 50%, 61.8%) to identify potential support and resistance zones, often intersecting with a trend line. This strategy helps traders anticipate price reversals or pullbacks, and it should be used in conjunction with other indicators
Fibonacci Retracement MTF/LOG 3 WEEK KKKKA Fibonacci arc trading strategy uses circular arcs drawn at Fibonacci retracement levels (38.2%, 50%, 61.8%) to identify potential support and resistance zones, often intersecting with a trend line. This strategy helps traders anticipate price reversals or pullbacks, and it should be used in conjunction with other indicators
Fibonacci Retracement MTF/LOG 2WEEK KKKKFibonacci retracment should be used to create a line of lines to justify the rest of indicators to reduce stress in indicators because we should not shout
TI65**TI65 (Trend Intensity 65)** is a technical indicator designed to measure the strength and momentum of a trend over two distinct periods. It compares a short-term 7-period simple moving average (SMA) with a long-term 65-period SMA, producing a ratio that helps traders identify shifts in market momentum and trend direction.
- When the **TI65 value is greater than 1**, it indicates that the short-term moving average is above the long-term average, suggesting increasing momentum and a potentially bullish trend.
- When the **TI65 value drops below 1**, it signals weakening short-term momentum relative to the longer-term trend, often interpreted as a bearish or consolidating phase.
This indicator can be applied to both price and volume data, making it useful for identifying periods of strong volume surges or price movements. By observing changes in the TI65 ratio, traders can pinpoint low-risk entry points for trend-following strategies and quickly recognize periods of market transition.
TI65 is commonly used by momentum and breakout traders for screening strong candidates and confirming the sustainability of ongoing trends. It is simple, effective, and easily implemented via custom scripts on popular platforms like TradingView.
Dow Jones Trading System with PivotsThis TradingView indicator, tailored for the 30-minute Dow Jones (^DJI) chart, supports DIA options trading with a trend-following approach. It features a 30-period SMA (blue) and a 60-period SMA (red), with an optional 90-period SMA (orange) drawn from rauItrades' Dow SMA outfit. A bullish crossover (30 SMA > 60 SMA) displays a green "BUY" triangle below the bar for potential DIA longs, while a bearish crossunder (30 SMA < 60 SMA) shows a red "SELL" triangle above for shorts or exits. The background turns green (bullish) or red (bearish) to indicate trend bias. Pivot points highlight recent highs (orange circles) and lows (purple circles) for support/resistance, using a 5-bar lookback. Alerts notify for crossovers.
NASDAQ Trading System with PivotsThis TradingView indicator, designed for the 30-minute NASDAQ (^IXIC) chart, guides QQQ options trading using a trend-following strategy. It plots a 20-period SMA (blue) and a 100-period SMA (red), with an optional 250-period SMA (orange) inspired by rauItrades' NASDAQ SMA outfit. A bullish crossover (20 SMA > 100 SMA) triggers a green "BUY" triangle below the bar, signaling a potential long position in QQQ, while a bearish crossunder (20 SMA < 100 SMA) shows a red "SELL" triangle above, indicating a short or exit. The background colors green (bullish) or red (bearish) for trend bias. Orange circles (recent highs) and purple circles (recent lows) mark support/resistance levels using 5-bar pivot points.
Volume TI65**TI65 (Trend Intensity 65)** is a technical indicator designed to measure the strength and momentum of a trend over two distinct periods. It compares a short-term 7-period simple moving average (SMA) with a long-term 65-period SMA, producing a ratio that helps traders identify shifts in market momentum and trend direction.
- When the **TI65 value is greater than 1**, it indicates that the short-term moving average is above the long-term average, suggesting increasing momentum and a potentially bullish trend.
- When the **TI65 value drops below 1**, it signals weakening short-term momentum relative to the longer-term trend, often interpreted as a bearish or consolidating phase.
This indicator can be applied to both price and volume data, making it useful for identifying periods of strong volume surges or price movements. By observing changes in the TI65 ratio, traders can pinpoint low-risk entry points for trend-following strategies and quickly recognize periods of market transition.
TI65 is commonly used by momentum and breakout traders for screening strong candidates and confirming the sustainability of ongoing trends. It is simple, effective, and easily implemented via custom scripts on popular platforms like TradingView.
S&P Trading System with PivotsThe S&P Trading System with Pivots is a TradingView indicator designed for the 30-minute SPX chart to guide SPY options trading. It uses a trend-following strategy with:
10 SMA and 50 SMA: Plots a 10-period (blue) and 50-period (red) Simple Moving Average. A bullish crossover (10 SMA > 50 SMA) signals a potential buy (green triangle below bar), while a bearish crossunder (10 SMA < 50 SMA) signals a sell or exit (red triangle above bar).
Trend Bias: Colors the background green (bullish) or red (bearish) based on SMA positions.
Pivot Points: Marks recent highs (orange circles) and lows (purple circles) as potential resistance and support levels, using a 5-bar lookback period.
WaveTrend RBF What it does
WT-RBF extracts a “wave” of momentum by subtracting a fast Gaussian-weighted smoother from a slow one, then robust-normalizes that wave with a median/MAD proxy to produce a z-score (z). A short EMA of z forms the signal line. Optional dynamic thresholds use the MAD of z itself so overbought/oversold levels adapt to volatility regimes.
How it’s built:
Radial (Gaussian) smoothers
Causal, exponentially-decaying weights over the last radius bars using σ (sigma) to control spread.
fast = rbf_smooth(src, fastR, fastSig)
slow = rbf_smooth(src, slowR, slowSig)
wave = fast − slow (band-pass)
Robust normalization
A two-stage EMA approximates the median; MAD is estimated from EMA of absolute deviations and scaled by 1.4826 to be stdev-comparable.
z = (wave − center) / MAD
Thresholds
Dynamic OB/OS: ±2.5 × MAD(z) (or fixed levels when disabled)
Reading the indicator
Bull Cross: z crosses above sig → momentum turning up.
Bear Cross: z crosses below sig → momentum turning down.
Exits / Bias flips: zero-line crosses (below 0 → exit long bias; above 0 → exit short bias).
Overbought/Oversold: z > +thrOB or z < thrOS. With dynamics on, the bands widen/narrow with recent noise; with dynamics off, static guides at ±2 / ±2.5 are shown.
Core Inputs
Source: Price series to analyze.
Fast Radius / Fast Sigma (defaults 6 / 2.5): Shorter radius/smaller σ = snappier, higher-freq.
Slow Radius / Slow Sigma (defaults 14 / 5.0): Larger radius/σ = smoother, lower-freq baseline.
Normalization
Robust Z-Score Window (default 200): Lookback for median/MAD proxy (stability vs responsiveness).
Small ε for MAD: Floor to avoid division by zero.
Signal & Thresholds
Dynamic Thresholds (MAD-based) (on by default): Adaptive OB/OS; toggle off to use fixed guides.
Visuals
Shade OB/OS Regions: Background highlights when z is beyond thresholds.
Show Zero Line: Midline reference.
(“Plot Cross Markers” input is present for future use.)
Rolling Performance Metrics TableRolling Performance Metrics Table
A clean, customizable table overlay that displays rolling performance metrics across multiple time periods. Perfect for quickly assessing price momentum and performance trends at a glance.
FEATURES:
- Displays performance across 5 time periods: 1 Week, 3 Month, 6 Month, 1 Year, and 2 Year
- Shows historical price at the start of each period
- Calculates both absolute price change and percentage change
- Color-coded results: Green for positive performance, Red for negative performance
- Fully transparent design with no background or borders - text floats cleanly over your chart
- Customizable table position (9 placement options)
DISPLAY COLUMNS:
1. Period - The lookback timeframe
2. Price - The historical price at the start of the period
3. Change (Value) - Absolute price change from the period start
4. Change (%) - Percentage return over the period
CUSTOMIZATION:
- Adjust the number of bars for each period (default: 1 Week = 5 bars, 3 Month = 63 bars, 6 Month = 126 bars, 1 Year = 252 bars, 2 Year = 504 bars)
- Choose from 9 table positions: Top, Middle, Bottom combined with Left, Center, Right
- Default position: Middle Left
USAGE:
Perfect for traders who want to quickly assess momentum across multiple timeframes. The transparent overlay design ensures minimal obstruction of chart analysis while providing critical performance data at a glance.
NOTE:
- The table only appears on the last bar of your chart
- Customize bar counts in settings to match your specific timeframe needs (e.g., daily vs hourly charts)
- "N/A" appears when historical data is insufficient for the selected period
TTM Squeeze Pro - IntradayTTM Squeeze Pro – Intraday (AI MTF Edition)
Design Rationale
This indicator is built to help traders identify when markets are consolidating, when volatility is building (squeeze), and when a breakout or trend is starting — all across multiple timeframes.
The design combines three powerful ideas:
Volatility Compression & Expansion (TTM Squeeze Logic):
By comparing Bollinger Bands (BB) and Keltner Channels (KC), the indicator detects when volatility contracts (BB inside KC). These moments often precede explosive moves. White dots on the BB basis line mark these “squeeze” periods.
Trend Strength & Direction (ADX System):
The ADX (Average Directional Index) measures how strong a trend is.
ADX rising above the threshold → trending market.
ADX falling below the threshold → consolidation.
The system classifies each bar as Trending Up, Trending Down, Consolidating, or Neutral, depending on ADX and momentum direction.
Multi-Timeframe (MTF) Alignment:
The same logic is applied to several timeframes (1m, 3m, 5m, 15m, 30m, 1h).
A compact table at the top-right shows each timeframe’s trend and squeeze strength.
This helps traders see whether short-term and higher timeframes are aligned, improving trade confidence and timing.
The AI Enhancer automatically adjusts all parameters (ADX, BB, KC lengths, and thresholds) depending on the current chart timeframe, keeping signals consistent between scalping and swing trading setups.
Trend and squeeze strengths are normalized on a 1–9 scale, giving users a quick numerical sense of trend power and squeeze intensity. The design emphasizes clarity, speed, and adaptability — critical for intraday trading decisions.
How to Use
Identify a Squeeze Setup:
Look for white dots on the chart — this marks low volatility and potential energy buildup.
Wait for Breakout Confirmation:
When the white dots disappear, volatility expands.
Check the MTF table — if multiple timeframes show green (uptrend) or red (downtrend) in the “TR” column, momentum is aligning.
Enter the Trade:
Go long if breakout happens above BB basis and most timeframes show green.
Go short if breakout happens below BB basis and most timeframes show red.
Exit or Manage Position:
When new white dots appear → volatility contracting again → consider exiting or tightening stops.
If MTF colors become mixed → trend losing strength.
In Summary
The TTM Squeeze Pro – Intraday AI MTF Indicator blends volatility analysis, trend strength, momentum, and multi-timeframe alignment into one adaptive tool.
Its design aims to simplify complex market behavior into a visual, data-backed format — enabling traders to catch high-probability breakout trends early and avoid false moves during low-volatility phases.
Multi-Condition Alert Builder⚡ Multi-Condition Alert Builder — Modular Alert Framework
The Multi-Condition Alert Builder is a powerful, code-free alert engine for TradingView. It allows traders to build complex multi-condition Buy/Sell alerts using simple dropdown menus — no Pine Script experience required.
Combine up to five separate conditions per side and trigger alerts based on your own custom logic.
🧠 How It Works
Each “Buy” and “Sell” side includes up to five configurable slots, where you can define:
Two data sources (indicators, price, or custom inputs)
A comparison or crossover condition
A static value (optional)
Once your slots are defined, the script combines these individual conditions according to your chosen mode:
Any – triggers when any enabled condition is true
All – same bar – triggers only when all enabled conditions occur on the same bar
All – within bars – allows conditions to complete within a user-defined lookback window
This gives traders fine-grained control to design powerful, adaptive alert logic directly in the chart — no coding required.
⚙️ Key Features
🧩 Up to 5 Buy and 5 Sell Slots – Fully customizable condition slots
🧠 Combine Logic Modes – Any / All / Within Bars flexibility
🔔 Custom Alerts – Generates separate Buy, Sell, or combined alert events
⏱️ Close-Bar Confirmation Option – Avoids premature signals on open candles
💡 Visual Signals – Plots arrows on chart for clear alert visualization
🔄 Indicator-Agnostic – Works with any sources or indicators available in your chart
🧮 Combine Logic Modes Explained
Mode Description
Any Triggers an alert if any active condition is met
All – same bar Requires all active slots to confirm on the same candle
All – within bars Conditions may complete within a set lookback window
🧭 Example Use Cases
Combine RSI, MACD, and MA crossovers for precision entries
Create alert triggers for momentum confluence setups
Build “stacked signal” logic (e.g., RSI < 30 and MACD crossover within 3 bars)
Quickly prototype and test multi-factor alert conditions
🧠 Usage Tip
Once your conditions are set, simply add TradingView alerts tied to:
“BUY↟” for long signals
“SELL↡” for short signals
“ANY ALERT” to trigger on either event
The Alert Builder becomes especially powerful when combined with your favorite custom indicators — enabling smart, automated alerts without extra coding.
⚡ In Short
Build. Combine. Alert.
The Multi-Condition Alert Builder gives you total flexibility to design complex alert logic — visually, intuitively, and efficiently — right on your chart.
Bollinger Band Width Oscillator %🧠 Bollinger Band Width Oscillator %
The Bollinger Band Width Oscillator % is a volatility-focused tool that measures the relative width of Bollinger Bands and transforms it into an oscillator format. It helps traders visualize volatility expansions and contractions directly in an indicator pane — a powerful way to anticipate breakout or consolidation phases.
🔍 How It Works
Band Width %: Calculates the percentage distance between the upper and lower Bollinger Bands relative to the basis (SMA).
Smoothed Output: The raw bandwidth is smoothed using a moving average for cleaner, more stable signals.
Dynamic Volatility Zones: The script automatically computes average, high, and low volatility thresholds — each dynamically adapting to market conditions.
User-Adjustable Multipliers: Control how sensitive your high/low zones are with the High Zone Multiplier and Low Zone Multiplier inputs.
⚙️ Key Features
📊 Oscillator Format – Easy-to-read visualization of volatility compression and expansion.
🔥 High/Low Volatility Detection – Automatic labeling and color-coded alerts for shifts in volatility.
🧩 Dynamic Thresholds – Zones adjust automatically with market activity for adaptive sensitivity.
🧠 Hysteresis Logic – Prevents rapid signal flipping, improving clarity and reliability.
🎨 Custom Visuals – Adjustable smoothing and background highlights for quick interpretation.
📈 Trading Applications
Identify Breakouts: Rising bandwidth often precedes price breakouts.
Spot Consolidations: Low bandwidth indicates tightening volatility and potential range trades.
Volatility Regime Analysis: Understand market rhythm and adapt strategies accordingly.
⚡ Inputs
Parameter Description
Band Length Period for Bollinger Band calculation
Band Multiplier Standard deviation multiplier for the bands
Source Price source (default: close)
Smoothing Period for smoothing the oscillator line
High Zone Multiplier Adjusts the high-volatility threshold
Low Zone Multiplier Adjusts the low-volatility threshold
Highlight Volatility Zones Optional background color overlay
🧊 Usage Tip
Combine this indicator with momentum tools or price action analysis to confirm trade setups. Watch for transitions from low to high volatility zones — these often signal the beginning of major market moves.
Ehlers Ultrasmooth Filter (USF)# USF: Ultrasmooth Filter
## Overview and Purpose
The Ultrasmooth Filter (USF) is an advanced signal processing tool that represents the pinnacle of noise reduction technology for financial time series. Developed by John Ehlers, this filter implements a complex algorithm that provides exceptional smoothing capabilities while minimizing the lag typically associated with heavy filtering. USF builds upon the Super Smooth Filter (SSF) with enhanced noise suppression characteristics, making it particularly valuable for identifying clear trends in extremely noisy market conditions where even traditional smoothing techniques struggle to produce clean signals.
## Core Concepts
* **Maximum noise suppression:** Provides the highest level of noise reduction among Ehlers' filter designs
* **Optimized coefficient structure:** Uses carefully designed mathematical relationships to achieve superior filtering performance
* **Market application:** Particularly effective for long-term trend identification and minimizing false signals in highly volatile market conditions
The core innovation of USF is its second-order filter structure with optimized coefficients that create an exceptionally smooth frequency response. By careful mathematical design, USF achieves near-optimal noise suppression characteristics while minimizing the lag and waveform distortion that typically accompany such heavy filtering. This makes it especially valuable for identifying major market trends amid significant short-term volatility.
## Common Settings and Parameters
| Parameter | Default | Function | When to Adjust |
|-----------|---------|----------|---------------|
| Length | 20 | Controls the cutoff period | Increase for smoother signals, decrease for more responsiveness |
| Source | close | Price data used for calculation | Consider using hlc3 for a more balanced price representation |
**Pro Tip:** USF is ideal for defining major market trends - try using it with a length of 40-60 on daily charts to identify dominant market direction and ignoring shorter-term noise completely.
## Calculation and Mathematical Foundation
**Simplified explanation:**
The Ultrasmooth Filter creates an extremely clean price representation by combining current and past price data with previous filter outputs using precisely calculated mathematical relationships. This creates a highly effective "averaging" process that removes virtually all market noise while still maintaining the essential trend information.
**Technical formula:**
USF = (1-c1)X + (2c1-c2)X₁ - (c1+c3)X₂ + c2×USF₁ + c3×USF₂
Where coefficients are calculated as:
- a1 = exp(-1.414π/length)
- b1 = 2a1 × cos(1.414 × 180/length)
- c1 = (1 + c2 - c3)/4
- c2 = b1
- c3 = -a1²
> 🔍 **Technical Note:** The filter combines both feed-forward (X terms) and feedback (USF terms) components in a second-order structure, creating a response with exceptional roll-off characteristics and minimal passband ripple.
## Interpretation Details
The Ultrasmooth Filter can be used in various trading strategies:
* **Major trend identification:** The direction of USF indicates the dominant market trend with minimal noise interference
* **Signal generation:** Crossovers between price and USF generate high-reliability trade signals with minimal false positives
* **Support/resistance levels:** USF can act as strong dynamic support during uptrends and resistance during downtrends
* **Market regime identification:** The slope of USF helps identify whether markets are in trending or consolidation phases
* **Multiple timeframe analysis:** Using USF across different chart timeframes creates a cohesive picture of nested trend structures
## Limitations and Considerations
* **Significant lag:** The extreme smoothing comes with increased lag compared to lighter filters
* **Initialization period:** Requires more bars than simpler filters to stabilize at the start of data
* **Less suitable for short-term trading:** Generally too slow-responding for short-term strategies
* **Parameter sensitivity:** Performance depends on appropriate length selection for the timeframe
* **Complementary tools:** Best used alongside faster-responding indicators for timing signals
## References
* Ehlers, J.F. "Cycle Analytics for Traders," Wiley, 2013
* Ehlers, J.F. "Rocket Science for Traders," Wiley, 2001
Ehlers Even Better Sinewave (EBSW)# EBSW: Ehlers Even Better Sinewave
## Overview and Purpose
The Ehlers Even Better Sinewave (EBSW) indicator, developed by John Ehlers, is an advanced cycle analysis tool. This implementation is based on a common interpretation that uses a cascade of filters: first, a High-Pass Filter (HPF) to detrend price data, followed by a Super Smoother Filter (SSF) to isolate the dominant cycle. The resulting filtered wave is then normalized using an Automatic Gain Control (AGC) mechanism, producing a bounded oscillator that fluctuates between approximately +1 and -1. It aims to provide a clear and responsive measure of market cycles.
## Core Concepts
* **Detrending (High-Pass Filter):** A 1-pole High-Pass Filter removes the longer-term trend component from the price data, allowing the indicator to focus on cyclical movements.
* **Cycle Smoothing (Super Smoother Filter):** Ehlers' Super Smoother Filter is applied to the detrended data to further refine the cycle component, offering effective smoothing with relatively low lag.
* **Wave Generation:** The output of the SSF is averaged over a short period (typically 3 bars) to create the primary "wave".
* **Automatic Gain Control (AGC):** The wave's amplitude is normalized by dividing it by the square root of its recent power (average of squared values). This keeps the oscillator bounded and responsive to changes in volatility.
* **Normalized Oscillator:** The final output is a single sinewave-like oscillator.
## Common Settings and Parameters
| Parameter | Default | Function | When to Adjust |
| ----------- | ------- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Source | close | Price data used for calculation. | Typically `close`, but `hlc3` or `ohlc4` can be used for a more comprehensive price representation. |
| HP Length | 40 | Lookback period for the 1-pole High-Pass Filter used for detrending. | Shorter periods make the filter more responsive to shorter cycles; longer periods focus on longer-term cycles. Adjust based on observed cycle characteristics. |
| SSF Length | 10 | Lookback period for the Super Smoother Filter used for smoothing the detrended cycle component. | Shorter periods result in a more responsive (but potentially noisier) wave; longer periods provide more smoothing. |
**Pro Tip:** The `HP Length` and `SSF Length` parameters should be tuned based on the typical cycle lengths observed in the market and the desired responsiveness of the indicator.
## Calculation and Mathematical Foundation
**Simplified explanation:**
1. Remove the trend from the price data using a 1-pole High-Pass Filter.
2. Smooth the detrended data using a Super Smoother Filter to get a clean cycle component.
3. Average the output of the Super Smoother Filter over the last 3 bars to create a "Wave".
4. Calculate the average "Power" of the Super Smoother Filter output over the last 3 bars.
5. Normalize the "Wave" by dividing it by the square root of the "Power" to get the final EBSW value.
**Technical formula (conceptual):**
1. **High-Pass Filter (HPF - 1-pole):**
`angle_hp = 2 * PI / hpLength`
`alpha1_hp = (1 - sin(angle_hp)) / cos(angle_hp)`
`HP = (0.5 * (1 + alpha1_hp) * (src - src )) + alpha1_hp * HP `
2. **Super Smoother Filter (SSF):**
`angle_ssf = sqrt(2) * PI / ssfLength`
`alpha2_ssf = exp(-angle_ssf)`
`beta_ssf = 2 * alpha2_ssf * cos(angle_ssf)`
`c2 = beta_ssf`
`c3 = -alpha2_ssf^2`
`c1 = 1 - c2 - c3`
`Filt = c1 * (HP + HP )/2 + c2*Filt + c3*Filt `
3. **Wave Generation:**
`WaveVal = (Filt + Filt + Filt ) / 3`
4. **Power & Automatic Gain Control (AGC):**
`Pwr = (Filt^2 + Filt ^2 + Filt ^2) / 3`
`EBSW_SineWave = WaveVal / sqrt(Pwr)` (with check for Pwr == 0)
> 🔍 **Technical Note:** The combination of HPF and SSF creates a form of band-pass filter. The AGC mechanism ensures the output remains scaled, typically between -1 and +1, making it behave like a normalized oscillator.
## Interpretation Details
* **Cycle Identification:** The EBSW wave shows the current phase and strength of the dominant market cycle as filtered by the indicator. Peaks suggest cycle tops, and troughs suggest cycle bottoms.
* **Trend Reversals/Momentum Shifts:** When the EBSW wave crosses the zero line, it can indicate a potential shift in the short-term cyclical momentum.
* Crossing up through zero: Potential start of a bullish cyclical phase.
* Crossing down through zero: Potential start of a bearish cyclical phase.
* **Overbought/Oversold Levels:** While normalized, traders often establish subjective or statistically derived overbought/oversold levels (e.g., +0.85 and -0.85, or other values like +0.7, +0.9).
* Reaching above the overbought level and turning down may signal a potential cyclical peak.
* Falling below the oversold level and turning up may signal a potential cyclical trough.
## Limitations and Considerations
* **Parameter Sensitivity:** The indicator's performance depends on tuning `hpLength` and `ssfLength` to prevailing market conditions.
* **Non-Stationary Markets:** In strongly trending markets with weak cyclical components, or in very choppy non-cyclical conditions, the EBSW may produce less reliable signals.
* **Lag:** All filtering introduces some lag. The Super Smoother Filter is designed to minimize this for its degree of smoothing, but lag is still present.
* **Whipsaws:** Rapid oscillations around the zero line can occur in volatile or directionless markets.
* **Requires Confirmation:** Signals from EBSW are often best confirmed with other forms of technical analysis (e.g., price action, volume, other non-correlated indicators).
## References
* Ehlers, J. F. (2002). *Rocket Science for Traders: Digital Signal Processing Applications*. John Wiley & Sons.
* Ehlers, J. F. (2013). *Cycle Analytics for Traders: Advanced Technical Trading Concepts*. John Wiley & Sons.
Buy And Hold Performance Screener - [JTCAPITAL]Buy And Hold Performance Screener – is a script designed to track and display multi-asset “buy and hold” performance curves and performance statistics over defined timeframes for selected symbols. It doesn’t attempt to time entries or exits; rather, it shows what would happen if one simply bought the asset at the defined start date and held it.
The indicator works by calculating in the following steps:
Start Date Definition
The script begins by reading an input for the start date. This defines the bar from which the equity curves begin.
Symbol Definitions & Close Price Retrieval
The script allows the user to specify up to ten tickers. For each ticker it uses request.security() on the “1D” timeframe to retrieve the daily close price of that symbol.
Plot Enable Inputs
For each ticker there is an input boolean controlling whether the equity curve for that ticker should be plotted.
Asset Name Cleaning
The helper function clean_name(string asset) => … takes the asset string (e.g., “CRYPTO:SOLUSD”) and manipulates it (via string splitting and replacements) to derive a cleaned short name (e.g., “SOL”). This name is used for visuals (labels, table headers).
Equity Curve Calculation (“HODL”)
The helper function f_HODL(closez) defines a variable equity that assumes a starting equity of 1 unit at the start date and then multiplies by the ratio of each bar’s close to the prior bar’s close: i.e. daily compounding of returns.
Performance Metrics Calculation
The helper function f_performance(closez) calculates, for each symbol’s close series, the percentage change of the current close relative to its close 30 days ago, 90 days ago, 180 days ago, 1 year ago (365 days), 2 years ago (730 days) and 3 years ago (1095 days).
Equity Curve Plots
For each ticker, if the corresponding plot input is true, the script assigns a plotted variable equal to the equity curve value. Its then drawing each selected equity curve on the chart, each in a distinct color.
Table Construction
If the plottable input is true, the script constructs a table and populates it with rows and column corresponding to the assigned tickers and the set 6 timeframes used for display.
Buy and Sell Conditions:
Since this is strictly a “buy-and-hold” performance screener, there are no explicit buy or sell signals generated or plotted. The script assumes: buy at the defined start_date, hold continuously to present. There are no filters, no exit logic, no take-profit or stop-loss. The benefit of this approach is to provide a clean benchmark of how selected assets would have performed if one simply adopted a passive “buy & hold” approach from a given start date.
Features and Parameters:
start_date (input.time) : Defines the date from which performance and equity curves begin.
ticker1 … ticker10 (input.symbol) : User-selectable asset symbols to include in the screener.
plot1 … plot10 (input.bool) : Boolean flags to enable/disable plotting of each asset’s equity curve.
plottable (input.bool) : Flag to enable/disable drawing the performance table.
Colored plotting + Labels for identifying each asset curve on the chart.
Specifications:
Here is a detailed breakdown of every calculation/variable/function used in the script and what each part means:
start_date
This is defined via input.time(timestamp("1 Jan 2025"), title = "Start Date"). It allows the user to pick a specific calendar date from which the equity curves and performance calculations will start.
ticker1 … ticker10
These inputs allow the user to select up to ten different assets (symbols) to monitor. The script uses each of these to fetch daily close prices.
plot1 … plot10
Boolean inputs controlling which of the ten asset equity curves are plotted. If plotX is true, the equity curve for ticker X will be visible; otherwise it will be not plotted. This gives the user flexibility to include or exclude specific assets on the chart.
Returns the cleaned asset short name.
This provides friendly text labels like “BTC”, “ETH”, “SOL”, etc., instead of full symbol codes.
The choice of distinct colours for each asset helps differentiate curves visually when multiple assets are overlaid.
Colour definitions
Variables color1…color10 are explicitly defined via color.rgb(r,g,b) to give each asset a unique colour (e.g., red, orange, yellow, green, cyan, blue, purple, pink, etc.).
What are the benefits of combining these calculations?
By computing equity curves for multiple assets from the same start date and overlaying them, you can visualise comparative performance of different assets under a uniform “buy & hold” assumption.
The performance table adds multi-horizon returns (30 D, 90 D, 180 D, 1 Y, 2 Y, 3 Y) which helps the user see both short-term and longer-term performance without having to manually compute returns.
The use of daily close data via request.security(..., "1D") removes dependency on the chart’s timeframe, thereby standardising the comparison across assets.
The equity curve and table together provide both visual (curve) and numerical (table) summaries of performance, making it easier to spot trends, divergences, and cross-asset comparisons at a glance.
Because it uses compounding (equity := equity * (closez / closez )), the curves reflect the real growth of a 1-unit investment held over time, rather than only simple returns.
The labelling of curves and the color-coding make the multi-asset overlay easier to interpret.
Using a clean start date ensures that all curves begin at the same point (1 unit at start_date), making relative performance intuitive.
Because of this, the script is useful as a benchmarking tool: rather than trying to pick entries or exit points, you can simply compare “what if I had held these assets since Jan 1 2025” (or your chosen date), and see which assets out-/under-performed in that period. It helps an investor or trader evaluate the long-term benefits of passive vs. active management, or of allocation decisions.
Please note:
The script assumes continuous daily data and does not account for dividends, fees, slippage, or tax implications.
It does not attempt to optimise timing or provide trading signals.
Returns prior to the start date are ignored (equity only begins once time >= start_date).
For newly listed assets with fewer than 365 or 730 or 1095 days of history, the longer-horizon returns may return na or misleading values.
Because it uses request.security() without specifying lookahead, and on “1D” timeframe, it complies with standard usage but you should verify there is no look-ahead bias in your particular setup.
ENJOY!






















