MERV: Market Entropy & Rhythm Visualizer [BullByte]The MERV (Market Entropy & Rhythm Visualizer) indicator analyzes market conditions by measuring entropy (randomness vs. trend), tradeability (volatility/momentum), and cyclical rhythm. It provides traders with an easy-to-read dashboard and oscillator to understand when markets are structured or choppy, and when trading conditions are optimal.
Purpose of the Indicator
MERV’s goal is to help traders identify different market regimes. It quantifies how structured or random recent price action is (entropy), how strong and volatile the movement is (tradeability), and whether a repeating cycle exists. By visualizing these together, MERV highlights trending vs. choppy environments and flags when conditions are favorable for entering trades. For example, a low entropy value means prices are following a clear trend line, whereas high entropy indicates a lot of noise or sideways action. The indicator’s combination of measures is original: it fuses statistical trend-fit (entropy), volatility trends (ATR and slope), and cycle analysis to give a comprehensive view of market behavior.
Why a Trader Should Use It
Traders often need to know when a market trend is reliable vs. when it is just noise. MERV helps in several ways: it shows when the market has a strong direction (low entropy, high tradeability) and when it’s ranging (high entropy). This can prevent entering trend-following strategies during choppy periods, or help catch breakouts early. The “Optimal Regime” marker (a star) highlights moments when entropy is very low and tradeability is very high, typically the best conditions for trend trades. By using MERV, a trader gains an empirical “go/no-go” signal based on price history, rather than guessing from price alone. It’s also adaptable: you can apply it to stocks, forex, crypto, etc., on any timeframe. For example, during a bullish phase of a stock, MERV will turn green (Trending Mode) and often show a star, signaling good follow-through. If the market later grinds sideways, MERV will shift to magenta (Choppy Mode), warning you that trend-following is now risky.
Why These Components Were Chosen
Market Entropy (via R²) : This measures how well recent prices fit a straight line. We compute a linear regression on the last len_entropy bars and calculate R². Entropy = 1 - R², so entropy is low when prices follow a trend (R² near 1) and high when price action is erratic (R² near 0). This single number captures trend strength vs noise.
Tradeability (ATR + Slope) : We combine two familiar measures: the Average True Range (ATR) (normalized by price) and the absolute slope of the regression line (scaled by ATR). Together they reflect how active and directional the market is. A high ATR or strong slope means big moves, making a trend more “tradeable.” We take a simple average of the normalized ATR and slope to get tradeability_raw. Then we convert it to a percentile rank over the lookback window so it’s stable between 0 and 1.
Percentile Ranks : To make entropy and tradeability values easy to interpret, we convert each to a 0–100 rank based on the past len_entropy periods. This turns raw metrics into a consistent scale. (For example, an entropy rank of 90 means current entropy is higher than 90% of recent values.) We then divide by 100 to plot them on a 0–1 scale.
Market Mode (Regime) : Based on those ranks, MERV classifies the market:
Trending (Green) : Low entropy rank (<40%) and high tradeability rank (>60%). This means the market is structurally trending with high activity.
Choppy (Magenta) : High entropy rank (>60%) and low tradeability rank (<40%). This is a mostly random, low-momentum market.
Neutral (Cyan) : All other cases. This covers mixed regimes not strongly trending or choppy.
The mode is shown as a colored bar at the bottom: green for trending, magenta for choppy, cyan for neutral.
Optimal Regime Signal : Separately, we mark an “optimal” condition when entropy_norm < 0.3 and tradeability > 0.7 (both normalized 0–1). When this is true, a ★ star appears on the bottom line. This star is colored white when truly optimal, gold when only tradeability is high (but entropy not quite low enough), and black when neither condition holds. This gives a quick visual cue for very favorable conditions.
What Makes MERV Stand Out
Holistic View : Unlike a single-oscillator, MERV combines trend, volatility, and cycle analysis in one tool. This multi-faceted approach is unique.
Visual Dashboard : The fixed on-chart dashboard (shown at your chosen corner) summarizes all metrics in bar/gauge form. Even a non-technical user can glance at it: more “█” blocks = a higher value, colors match the plots. This is more intuitive than raw numbers.
Adaptive Thresholds : Using percentile ranks means MERV auto-adjusts to each market’s character, rather than requiring fixed thresholds.
Cycle Insight : The rhythm plot adds information rarely found in indicators – it shows if there’s a repeating cycle (and its period in bars) and how strong it is. This can hint at natural bounce or reversal intervals.
Modern Look : The neon color scheme and glow effects make the lines easy to distinguish (blue/pink for entropy, green/orange for tradeability, etc.) and the filled area between them highlights when one dominates the other.
Recommended Timeframes
MERV can be applied to any timeframe, but it will be more reliable on higher timeframes. The default len_entropy = 50 and len_rhythm = 30 mean we use 30–50 bars of history, so on a daily chart that’s ~2–3 months of data; on a 1-hour chart it’s about 2–3 days. In practice:
Swing/Position traders might prefer Daily or 4H charts, where the calculations smooth out small noise. Entropy and cycles are more meaningful on longer trends.
Day trader s could use 15m or 1H charts if they adjust the inputs (e.g. shorter windows). This provides more sensitivity to intraday cycles.
Scalpers might find MERV too “slow” unless input lengths are set very low.
In summary, the indicator works anywhere, but the defaults are tuned for capturing medium-term trends. Users can adjust len_entropy and len_rhythm to match their chart’s volatility. The dashboard position can also be moved (top-left, bottom-right, etc.) so it doesn’t cover important chart areas.
How the Scoring/Logic Works (Step-by-Step)
Compute Entropy : A linear regression line is fit to the last len_entropy closes. We compute R² (goodness of fit). Entropy = 1 – R². So a strong straight-line trend gives low entropy; a flat/noisy set of points gives high entropy.
Compute Tradeability : We get ATR over len_entropy bars, normalize it by price (so it’s a fraction of price). We also calculate the regression slope (difference between the predicted close and last close). We scale |slope| by ATR to get a dimensionless measure. We average these (ATR% and slope%) to get tradeability_raw. This represents how big and directional price moves are.
Convert to Percentiles : Each new entropy and tradeability value is inserted into a rolling array of the last 50 values. We then compute the percentile rank of the current value in that array (0–100%) using a simple loop. This tells us where the current bar stands relative to history. We then divide by 100 to plot on .
Determine Modes and Signal : Based on these normalized metrics: if entropy < 0.4 and tradeability > 0.6 (40% and 60% thresholds), we set mode = Trending (1). If entropy > 0.6 and tradeability < 0.4, mode = Choppy (-1). Otherwise mode = Neutral (0). Separately, if entropy_norm < 0.3 and tradeability > 0.7, we set an optimal flag. These conditions trigger the colored mode bars and the star line.
Rhythm Detection : Every bar, if we have enough data, we take the last len_rhythm closes and compute the mean and standard deviation. Then for lags from 5 up to len_rhythm, we calculate a normalized autocorrelation coefficient. We track the lag that gives the maximum correlation (best match). This “best lag” divided by len_rhythm is plotted (a value between 0 and 1). Its color changes with the correlation strength. We also smooth the best correlation value over 5 bars to plot as “Cycle Strength” (also 0 to 1). This shows if there is a consistent cycle length in recent price action.
Heatmap (Optional) : The background color behind the oscillator panel can change with entropy. If “Neon Rainbow” style is on, low entropy is blue and high entropy is pink (via a custom color function), otherwise a classic green-to-red gradient can be used. This visually reinforces the entropy value.
Volume Regime (Dashboard Only) : We compute vol_norm = volume / sma(volume, len_entropy). If this is above 1.5, it’s considered high volume (neon orange); below 0.7 is low (blue); otherwise normal (green). The dashboard shows this as a bar gauge and percentage. This is for context only.
Oscillator Plot – How to Read It
The main panel (oscillator) has multiple colored lines on a 0–1 vertical scale, with horizontal markers at 0.2 (Low), 0.5 (Mid), and 0.8 (High). Here’s each element:
Entropy Line (Blue→Pink) : This line (and its glow) shows normalized entropy (0 = very low, 1 = very high). It is blue/green when entropy is low (strong trend) and pink/purple when entropy is high (choppy). A value near 0.0 (below 0.2 line) indicates a very well-defined trend. A value near 1.0 (above 0.8 line) means the market is very random. Watch for it dipping near 0: that suggests a strong trend has formed.
Tradeability Line (Green→Yellow) : This represents normalized tradeability. It is colored bright green when tradeability is low, transitioning to yellow as tradeability increases. Higher values (approaching 1) mean big moves and strong slopes. Typically in a market rally or crash, this line will rise. A crossing above ~0.7 often coincides with good trend strength.
Filled Area (Orange Shade) : The orange-ish fill between the entropy and tradeability lines highlights when one dominates the other. If the area is large, the two metrics diverge; if small, they are similar. This is mostly aesthetic but can catch the eye when the lines cross over or remain close.
Rhythm (Cycle) Line : This is plotted as (best_lag / len_rhythm). It indicates the relative period of the strongest cycle. For example, a value of 0.5 means the strongest cycle was about half the window length. The line’s color (green, orange, or pink) reflects how strong that cycle is (green = strong). If no clear cycle is found, this line may be flat or near zero.
Cycle Strength Line : Plotted on the same scale, this shows the autocorrelation strength (0–1). A high value (e.g. above 0.7, shown in green) means the cycle is very pronounced. Low values (pink) mean any cycle is weak and unreliable.
Mode Bars (Bottom) : Below the main oscillator, thick colored bars appear: a green bar means Trending Mode, magenta means Choppy Mode, and cyan means Neutral. These bars all have a fixed height (–0.1) and make it very easy to see the current regime.
Optimal Regime Line (Bottom) : Just below the mode bars is a thick horizontal line at –0.18. Its color indicates regime quality: White (★) means “Optimal Regime” (very low entropy and high tradeability). Gold (★) means not quite optimal (high tradeability but entropy not low enough). Black means neither condition. This star line quickly tells you when conditions are ideal (white star) or simply good (gold star).
Horizontal Guides : The dotted lines at 0.2 (Low), 0.5 (Mid), and 0.8 (High) serve as reference lines. For example, an entropy or tradeability reading above 0.8 is “High,” and below 0.2 is “Low,” as labeled on the chart. These help you gauge values at a glance.
Dashboard (Fixed Corner Panel)
MERV also includes a compact table (dashboard) that can be positioned in any corner. It summarizes key values each bar. Here is how to read its rows:
Entropy : Shows a bar of blocks (█ and ░). More █ blocks = higher entropy. It also gives a percentage (rounded). A full bar (10 blocks) with a high % means very chaotic market. The text is colored similarly (blue-green for low, pink for high).
Rhythm : Shows the best cycle period in bars (e.g. “15 bars”). If no calculation yet, it shows “n/a.” The text color matches the rhythm line.
Cycle Strength : Gives the cycle correlation as a percentage (smoothed, as shown on chart). Higher % (green) means a strong cycle.
Tradeability : Displays a 10-block gauge for tradeability. More blocks = more tradeable market. It also shows “gauge” text colored green→yellow accordingly.
Market Mode : Simply shows “Trending”, “Choppy”, or “Neutral” (cyan text) to match the mode bar color.
Volume Regime : Similar to tradeability, shows blocks for current volume vs. average. Above-average volume gives orange blocks, below-average gives blue blocks. A % value indicates current volume relative to average. This row helps see if volume is abnormally high or low.
Optimal Status (Large Row) : In bold, either “★ Optimal Regime” (white text) if the star condition is met, “★ High Tradeability” (gold text) if tradeability alone is high, or “— Not Optimal” (gray text) otherwise. This large row catches your eye when conditions are ripe.
In short, the dashboard turns the numeric state into an easy read: filled bars, colors, and text let you see current conditions without reading the plot. For instance, five blue blocks under Entropy and “25%” tells you entropy is low (good), and a row showing “Trending” in green confirms a trend state.
Real-Life Example
Example : Consider a daily chart of a trending stock (e.g. “AAPL, 1D”). During a strong uptrend, recent prices fit a clear upward line, so Entropy would be low (blue line near bottom, perhaps below the 0.2 line). Volatility and slope are high, so Tradeability is high (green-yellow line near top). In the dashboard, Entropy might show only 1–2 blocks (e.g. 10%) and Tradeability nearly full (e.g. 90%). The Market Mode bar turns green (Trending), and you might see a white ★ on the optimal line if conditions are very good. The Volume row might light orange if volume is above average during the rally. In contrast, imagine the same stock later in a tight range: Entropy will rise (pink line up, more blocks in dashboard), Tradeability falls (fewer blocks), and the Mode bar turns magenta (Choppy). No star appears in that case.
Consolidated Use Case : Suppose on XYZ stock the dashboard reads “Entropy: █░░░░░░░░ 20%”, “Tradeability: ██████████ 80%”, Mode = Trending (green), and “★ Optimal Regime.” This tells the trader that the market is in a strong, low-noise trend, and it might be a good time to follow the trend (with appropriate risk controls). If instead it reads “Entropy: ████████░░ 80%”, “Tradeability: ███▒▒▒▒▒▒ 30%”, Mode = Choppy (magenta), the trader knows the market is random and low-momentum—likely best to sit out until conditions improve.
Example: How It Looks in Action
Screenshot 1: Trending Market with High Tradeability (SOLUSD, 30m)
What it means:
The market is in a clear, strong trend with excellent conditions for trading. Both trend-following and active strategies are favored, supported by high tradeability and strong volume.
Screenshot 2: Optimal Regime, Strong Trend (ETHUSD, 1h)
What it means:
This is an ideal environment for trend trading. The market is highly organized, tradeability is excellent, and volume supports the move. This is when the indicator signals the highest probability for success.
Screenshot 3: Choppy Market with High Volume (BTC Perpetual, 5m)
What it means:
The market is highly random and choppy, despite a surge in volume. This is a high-risk, low-reward environment, avoid trend strategies, and be cautious even with mean-reversion or scalping.
Settings and Inputs
The script is fully open-source; here are key inputs the user can adjust:
Entropy Window (len_entropy) : Number of bars used for entropy and tradeability (default 50). Larger = smoother, more lag; smaller = more sensitivity.
Rhythm Window (len_rhythm ): Bars used for cycle detection (default 30). This limits the longest cycle we detect.
Dashboard Position : Choose any corner (Top Right default) so it doesn’t cover chart action.
Show Heatmap : Toggles the entropy background coloring on/off.
Heatmap Style : “Neon Rainbow” (colorful) or “Classic” (green→red).
Show Mode Bar : Turn the bottom mode bar on/off.
Show Dashboard : Turn the fixed table panel on/off.
Each setting has a tooltip explaining its effect. In the description we will mention typical settings (e.g. default window sizes) and that the user can move the dashboard corner as desired.
Oscillator Interpretation (Recap)
Lines : Blue/Pink = Entropy (low=trend, high=chop); Green/Yellow = Tradeability (low=quiet, high=volatile).
Fill : Orange tinted area between them (for visual emphasis).
Bars : Green=Trending, Magenta=Choppy, Cyan=Neutral (at bottom).
Star Line : White star = ideal conditions, Gold = good but not ideal.
Horizontal Guides : 0.2 and 0.8 lines mark low/high thresholds for each metric.
Using the chart, a coder or trader can see exactly what each output represents and make decisions accordingly.
Disclaimer
This indicator is provided as-is for educational and analytical purposes only. It does not guarantee any particular trading outcome. Past market patterns may not repeat in the future. Users should apply their own judgment and risk management; do not rely solely on this tool for trading decisions. Remember, TradingView scripts are tools for market analysis, not personalized financial advice. We encourage users to test and combine MERV with other analysis and to trade responsibly.
-BullByte
在腳本中搜尋"bar"
Up/Down Volume with Table (High Contrast)Up/Down Volume with Table (High Contrast) — Script Summary & User Guide
Purpose of the Script
This TradingView indicator, Up/Down Volume with Table (High Contrast), visually separates and quantifies up-volume and down-volume for each bar, providing both a color-coded histogram and a dynamic table summarizing the last five bars. The indicator helps traders quickly assess buying and selling pressure, recent volume shifts, and their relationship to price changes, all in a highly readable format.
Key Features
Up/Down Volume Columns:
Green columns represent volume on bars where price closed higher than the previous bar (up volume).
Red columns represent volume on bars where price closed lower than the previous bar (down volume).
Delta Line:
Plots the net difference between up and down volume for each bar.
Green when up-volume exceeds down-volume; red when down-volume dominates.
Interactive Table:
Displays the last five bars, showing up-volume, down-volume, delta, and close price.
Color-coding for quick interpretation.
Table position, decimal places, and timeframe are all user-configurable.
Custom Timeframe Support:
Calculate all values on the chart’s timeframe or a custom timeframe of your choice (e.g., daily, hourly).
High-Contrast Design:
Table and plot colors are chosen for maximum clarity and accessibility.
User Inputs & Configuration
Use custom timeframe:
Toggle between the chart’s timeframe and a user-specified timeframe.
Custom timeframe:
Set the timeframe for calculations if custom mode is enabled (e.g., "D" for daily, "60" for 60 minutes).
Decimal Places:
Choose how many decimal places to display in the table.
Table Location:
Select where the table appears on your chart (e.g., Bottom Right, Top Left, etc.).
How to Use
Add the Script to Your Chart:
Copy and paste the code into a new Pine Script indicator on TradingView.
Add the indicator to your chart.
Configure Inputs:
Open the indicator settings.
Adjust the timeframe, decimal places, and table location as desired.
Read the Table:
The table appears on your chart (location is user-selectable) and displays the following for the last five bars:
Bar: "Now" for the current bar, then "Bar -1", "Bar -2", etc. for previous bars.
Up Vol: Volume on bars where price closed higher than previous bar, shown in black text.
Down Vol: Volume on bars where price closed lower than previous bar, shown in black text.
Delta: Up Vol minus Down Vol, colored green for positive, red for negative, black for zero.
Close: Closing price for each bar, colored green if price increased from previous bar, red if decreased, black if unchanged.
Interpret the Histogram and Lines:
Green Columns:
Represent up-volume. Tall columns indicate strong buying volume.
Red Columns:
Represent down-volume. Tall columns indicate strong selling volume.
Delta Line:
Plotted as a line (not a column), colored green for positive values (more up-volume), red for negative (more down-volume).
Large positive or negative spikes may indicate strong buying or selling pressure, respectively.
How to Interpret the Table
Column Meaning Color Coding
Bar "Now" (current bar), "Bar -1" (previous bar), etc. Black text
Up Vol Volume for bars with higher closes than previous bar Black text
Down Vol Volume for bars with lower closes than previous bar Black text
Delta Up Vol - Down Vol. Green if positive, red if negative, black if zero Green/Red/Black
Close Closing price for the bar. Green if price increased, red if decreased, black if unchanged Green/Red/Black
Green Delta: Indicates net buying pressure for that bar.
Red Delta: Indicates net selling pressure for that bar.
Close Price Color:
Green: Price increased from previous bar.
Red: Price decreased.
Black: No change.
Practical Trading Insights
Consistently Green Delta (Histogram & Table):
Sustained buying pressure; may indicate bullish sentiment or accumulation.
Consistently Red Delta:
Sustained selling pressure; may indicate bearish sentiment or distribution.
Large Up/Down Volume Spikes:
Big green or red columns can signal strong market activity or potential reversals if they occur at trend extremes.
Delta Flipping Colors:
Rapid alternation between green and red deltas may indicate a choppy or indecisive market.
Close Price Color in Table:
Use as a quick confirmation of whether volume surges are pushing price in the expected direction.
Troubleshooting & Notes
No Volume Data Error:
If your symbol doesn’t provide volume data (e.g., some indices or synthetic assets), the script will display an error.
Custom Timeframe:
If using a custom timeframe, ensure your chart supports it and that there is enough data for meaningful calculations.
High-Contrast Table:
Designed for clarity and accessibility, but you can adjust colors in the code if needed for your personal preferences.
Summary Table Legend
Bar Up Vol Down Vol Delta Close
Now ... ... ... ...
Bar-1 ... ... ... ...
... ... ... ... ...
Colors reflect the meaning as described above.
In Summary
This indicator visually and numerically breaks down buying and selling volume, helping you spot shifts in market sentiment, volume surges, and price/volume divergences at a glance.
Use the table for precise recent data, the histogram for overall flow, and the color cues for instant market context.
Fair Value Trend Model [SiDec]ABSTRACT
This pine script introduces the Fair Value Trend Model, an on-chart indicator for TradingView that constructs a continuously updating "fair-value" estimate of an asset's price via a logarithmic regression on historical data. Specifically, this model has been applied to Bitcoin (BTC) to fully grasp its fair value in the cryptocurrency market. Symmetric channel bands, defined by fixed percentage offsets around this central fair-value curve, provide a visual band within which normal price fluctuations may occur. Additionally, a short-term projection extends both the fair-value trend and its channel bands forward by a user-specified number of bars.
INTRODUCTION
Technical analysts frequently seek to identify an underlying equilibrium or "fair value" about which prices oscillate. Traditional approaches-moving averages, linear regressions in price-time space, or midlines-capture linear trends but often misrepresent the exponential or power-law growth patterns observable in many financial markets. The Fair Value Trend Model addresses this by performing an ordinary least squares (OLS) regression in log-space, fitting ln(Price) against ln(Days since inception). In practice, the primary application has been to Bitcoin, aiming to fully capture Bitcoin's underlying value dynamics.
The result is a curved trend line in regular (price-time) coordinates, reflecting Bitcoin's long-term compounding characteristics. Surrounding this fair-value curve, symmetric bands at user-specified percentage deviations serve as dynamic support and resistance levels. A simple linear projection extends both the central fair-value and its bands into the immediate future, providing traders with a heuristic for short-term trend continuation.
This exposition details:
Data transformation: converting bar timestamps into days since first bar, then applying natural logarithms to both time and price.
Regression mechanics: incremental (or rolling-window) accumulation of sums to compute the log-space fit parameters.
Fair-value reconstruction: exponentiation of the regression output to yield a price-space estimate.
Channel-band definition: establishing ±X% offsets around the fair-value curve and rendering them visually.
Forecasting methodology: projecting both the fair-value trend and channel bands by extrapolating the most recent incremental change in price-space.
Interpretation: how traders can leverage this model for trend identification, mean-reversion setups, and breakout analysis, particularly in Bitcoin trading.
Analysing the macro cycle on Bitcoin's monthly timeframe illustrates how the fair-value curve aligns with multi-year structural turning points.
DATA TRANSFORMATION AND NOTATION
1. Timestamp Baseline (t0)
Let t0 = timestamp of the very first bar on the chart (in milliseconds). Each subsequent bar has a timestamp ti, where ti ≥ t0.
2. Days Since Inception (d(t))
Define the “days since first bar” as
d(t) = max(1, (t − t0) / 86400000.0)
Here, 86400000.0 represents the number of milliseconds in one day (1,000 ms × 60 seconds × 60 minutes × 24 hours). The lower bound of 1 ensures that we never compute ln(0).
3. Logarithmic Coordinates:
Given the bar’s closing price P(t), define:
xi = ln( d(ti) )
yi = ln( P(ti) )
Thus, each data point is transformed to (xi, yi) in log‐space.
REGRESSION FORMULATION
We assume a log‐linear relationship:
yi = a + b·xi + εi
where εi is the residual error at bar i. Ordinary least squares (OLS) fitting minimizes the sum of squared residuals over N data points. Define the following accumulated sums:
Sx = Σ for i = 1 to N
Sy = Σ for i = 1 to N
Sxy = Σ for i = 1 to N
Sx2 = Σ for i = 1 to N
N = number of data points
The OLS estimates for b (slope) and a (intercept) are:
b = ( N·Sxy − Sx·Sy ) / ( N·Sx2 − (Sx)^2 )
a = ( Sy − b·Sx ) / N
All‐Time Versus Rolling‐Window Mode:
All-Time Mode:
Each new bar increments N by 1.
Update Sx ← Sx + xN, Sy ← Sy + yN, Sxy ← Sxy + xN·yN, Sx2 ← Sx2 + xN^2.
Recompute a and b using the formulas above on the entire dataset.
Rolling-Window Mode:
Fix a window length W. Maintain two arrays holding the most recent W values of {xi} and {yi}.
On each new bar N:
Append (xN, yN) to the arrays; add xN, yN, xN·yN, xN^2 to the sums Sx, Sy, Sxy, Sx2.
If the arrays’ length exceeds W, remove the oldest point (xN−W, yN−W) and subtract its contributions from the sums.
Update N_roll = min(N, W).
Compute b and a using N_roll, Sx, Sy, Sxy, Sx2 as above.
This incremental approach requires only O(1) operations per bar instead of recomputing sums from scratch, making it computationally efficient for long time series.
FAIR‐VALUE RECONSTRUCTION
Once coefficients (a, b) are obtained, the regressed log‐price at time t is:
ŷ(t) = a + b·ln( d(t) )
Mapping back to price space yields the “fair‐value”:
F(t) = exp( ŷ(t) )
= exp( a + b·ln( d(t) ) )
= exp(a) · ^b
In other words, F(t) is a power‐law function of “days since inception,” with exponent b and scale factor C = exp(a). Special cases:
If b = 1, F(t) = C · d(t), which is an exponential function in original time.
If b > 1, the fair‐value grows super‐linearly (accelerating compounding).
If 0 < b < 1, it grows sub‐linearly.
If b < 0, the fair‐value declines over time.
CHANNEL‐BAND DEFINITION
To visualise a “normal” range around the fair‐value curve F(t), we define two channel bands at fixed percentage offsets:
1. Upper Channel Band
U(t) = F(t) · (1 + α_upper)
where α_upper = (Channel Band Upper %) / 100.
2. Lower Channel Band
L(t) = F(t) · (1 − α_lower)
where α_lower = (Channel Band Lower %) / 100.
For example, default values of 50% imply α_upper = α_lower = 0.50, so:
U(t) = 1.50 · F(t)
L(t) = 0.50 · F(t)
When “Show FV Channel Bands” is enabled, both U(t) and L(t) are plotted in a neutral grey, and a semi‐transparent fill is drawn between them to emphasise the channel region.
SHORT‐TERM FORECAST PROJECTION
To extend both the fair‐value and its channel bands M bars into the future, the model uses a simple constant‐increment extrapolation in price space. The procedure is:
1. Compute Recent Increments
Let
F_prev = F( t_{N−1} )
F_curr = F( t_N )
Then define the per‐bar change in fair‐value:
ΔF = F_curr − F_prev
Similarly, for channel bands:
U_prev = U( t_{N−1} ), U_curr = U( t_N ), ΔU = U_curr − U_prev
L_prev = L( t_{N−1} ), L_curr = L( t_N ), ΔL = L_curr − L_prev
2. Forecasted Values After M Bars
Assuming the same per‐bar increments continue:
F_future = F_curr + M · ΔF
U_future = U_curr + M · ΔU
L_future = L_curr + M · ΔL
These forecasted values produce dashed lines on the chart:
A dashed segment from (bar_N, F_curr) to (bar_{N+M}, F_future).
Dashed segments from (bar_N, U_curr) to (bar_{N+M}, U_future), and from (bar_N, L_curr) to (bar_{N+M}, L_future).
Forecasted channel bands are rendered in a subdued grey to distinguish them from the current solid bands. Because this method does not re‐estimate regression coefficients for future t > t_N, it serves as a quick visual heuristic of trend continuation rather than a precise statistical forecast.
MATHEMATICAL SUMMARY
Summarising all key formulas:
1. Days Since Inception
d(t_i) = max( 1, ( t_i − t0 ) / 86400000.0 )
x_i = ln( d(t_i) )
y_i = ln( P(t_i) )
2. Regression Summations (for i = 1..N)
Sx = Σ
Sy = Σ
Sxy = Σ
Sx2 = Σ
N = number of data points (or N_roll if using rolling‐window)
3. OLS Estimator
b = ( N · Sxy − Sx · Sy ) / ( N · Sx2 − (Sx)^2 )
a = ( Sy − b · Sx ) / N
4. Fair‐Value Computation
ŷ(t) = a + b · ln( d(t) )
F(t) = exp( ŷ(t) ) = exp(a) · ^b
5. Channel Bands
U(t) = F(t) · (1 + α_upper)
L(t) = F(t) · (1 − α_lower)
with α_upper = (Channel Band Upper %) / 100, α_lower = (Channel Band Lower %) / 100.
6. Forecast Projection
ΔF = F_curr − F_prev
F_future = F_curr + M · ΔF
ΔU = U_curr − U_prev
U_future = U_curr + M · ΔU
ΔL = L_curr − L_prev
L_future = L_curr + M · ΔL
IMPLEMENTATION CONSIDERATIONS
1. Time Precision
Timestamps are recorded in milliseconds. Dividing by 86400000.0 yields days with fractional precision.
For the very first bar, d(t) = 1 ensures x = ln(1) = 0, avoiding an undefined logarithm.
2. Incremental Versus Sliding Summation
All‐Time Mode: Uses persistent scalar variables (Sx, Sy, Sxy, Sx2, N). On each new bar, add the latest x and y contributions to the sums.
Rolling‐Window Mode: Employs fixed‐length arrays for {x_i} and {y_i}. On each bar, append (x_N, y_N) and update sums; if array length exceeds W, remove the oldest element and subtract its contribution from the sums. This maintains exact sums over the most recent W data points without recomputing from scratch.
3. Numerical Robustness
If the denominator N·Sx2 − (Sx)^2 equals zero (e.g., all x_i identical, as when only one day has passed), then set b = 0 and a = Sy / N. This produces a constant fair‐value F(t) = exp(a).
Enforcing d(t) ≥ 1 avoids attempts to compute ln(0).
4. Plotting Strategy
The fair‐value line F(t) is plotted on each new bar. Its color depends on whether the current price P(t) is above or below F(t): a “bullish” color (e.g., green) when P(t) ≥ F(t), and a “bearish” color (e.g., red) when P(t) < F(t).
The channel bands U(t) and L(t) are plotted in a neutral grey when enabled; otherwise they are set to “not available” (no plot).
A semi‐transparent fill is drawn between U(t) and L(t). Because the fill function is executed at global scope, it is automatically suppressed if either U(t) or L(t) is not plotted (na).
5. Forecast Line Management
Each projection line (for F, U, and L) is created via a persistent line object. On successive bars, the code updates the endpoints of the same line rather than creating a new one each time, preserving chart clarity.
If forecasting is disabled, any existing projection lines are deleted to avoid cluttering the chart.
INTERPRETATION AND APPLICATIONS
1. Trend Identification
The fair‐value curve F(t) represents the best‐fit long‐term trend under the assumption that ln(Price) scales linearly with ln(Days since inception). By capturing power‐law or exponential patterns, it can more accurately reflect underlying compounding behavior than simple linear regressions.
When actual price P(t) lies above U(t), it may be considered “overextended” relative to its long‐term trend; when price falls below L(t), it may be deemed “oversold.” These conditions can signal potential mean‐reversion or breakout opportunities.
2. Mean‐Reversion and Breakout Signals
If price re‐enters the channel after touching or slightly breaching L(t), some traders interpret this as a mean‐reversion bounce and consider initiating a long position.
Conversely, a sustained move above U(t) can indicate strong upward momentum and a possible bullish breakout. Traders often seek confirmation (e.g., price remaining above U(t) for multiple bars, rising volume, or corroborating momentum indicators) before acting.
3. Rolling Versus All‐Time Usage
All‐Time Mode: Captures the entire dataset since inception, focusing on structural, long‐term trends. It is less sensitive to short‐term noise or volatility spikes.
Rolling‐Window Mode: Restricts the regression to the most recent W bars, making the fair‐value curve more responsive to changing market regimes, sudden volatility expansions, or fundamental shifts. Traders who wish to align the model with local behaviour often choose W so that it approximates a market cycle length (e.g., 100–200 bars on a daily chart).
4. Channel Percentage Selection
A wider band (e.g., ±50 %) accommodates larger price swings, reducing the frequency of breaches but potentially delaying actionable signals.
A narrower band (e.g., ±10 %) yields more frequent “overbought/oversold” alerts but may produce more false signals during normal volatility. It is advisable to calibrate the channel width to the asset’s historical volatility regime.
5. Forecast Cautions
The short‐term projection assumes that the last single‐bar increment ΔF remains constant for M bars. In reality, trend acceleration or deceleration can occur, rendering the linear forecast inaccurate.
As such, the forecast serves as a visual guide rather than a statistically rigorous prediction. It is best used in conjunction with other momentum, volume, or volatility indicators to confirm trend continuation or reversal.
LIMITATIONS AND CONSIDERATIONS
1. Power‐Law Assumption
By fitting ln(P) against ln(d), the model posits that P(t) ≈ C · ^b. Real markets may deviate from a pure power‐law, especially around significant news events or structural regime changes. Temporary misalignment can occur.
2. Fixed Channel Width
Markets exhibit heteroskedasticity: volatility can expand or contract unpredictably. A static ±X % band does not adapt to changing volatility. During high‐volatility periods, a fixed ±50 % may prove too narrow and be breached frequently; in unusually calm periods, it may be excessively broad, masking meaningful variations.
3. Endpoint Sensitivity
Regression‐based indicators often display greater curvature near the most recent data, especially under rolling‐window mode. This can create sudden “jumps” in F(t) when new bars arrive, potentially confusing users who expect smoother behaviour.
4. Forecast Simplification
The projection does not re‐estimate regression slope b for future times. It only extends the most recent single‐bar change. Consequently, it should be regarded as an indicative extension rather than a precise forecast.
PRACTICAL IMPLEMENTATION ON TRADINGVIEW
1 Adding the Indicator
In TradingView’s “Indicators” dialog, search for Fair Value Trend Model or visit my profile, under "scripts" add it to your chart.
Add it to any chart (e.g., BTCUSD, AAPL, EURUSD) to see real‐time computation.
2. Configuring Inputs
Show Forecast Line: Toggle on or off the dashed projection of the fair‐value.
Forecast Bars: Choose M, the number of bars to extend into the future (default is often 30).
Forecast Line Colour: Select a high‐contrast colour (e.g., yellow).
Bullish FV Colour / Bearish FV Colour: Define the colour of the fair‐value line when price is above (e.g., green) or below it (e.g., red).
Show FV Channel Bands: Enable to display the grey channel bands around the fair‐value.
Channel Band Upper % / Channel Band Lower %: Set α_upper and α_lower as desired (defaults of 50 % create a ±50 % envelope).
Use Rolling Window?: Choose whether to restrict the regression to recent data.
Window Bars: If rolling mode is enabled, designate W, the number of bars to include.
3. Visual Output
The central curve F(t) appears on the price chart, coloured green when P(t) ≥ F(t) and red when P(t) < F(t).
If channel bands are enabled, the chart shows two grey lines U(t) and L(t) and a subtle shading between them.
If forecasting is active, dashed extensions of F(t), U(t), and L(t) appear, projecting forward by M bars in neutral hues.
CONCLUSION
The Fair Value Trend Model furnishes traders with a mathematically principled estimate of an asset’s equilibrium price curve by fitting a log‐linear regression to historical data. Its channel bands delineate a normal corridor of fluctuation based on fixed percentage offsets, while an optional short‐term projection offers a visual approximation of trend continuation.
By operating in log‐space, the model effectively captures exponential or power‐law growth patterns that linear methods overlook. Rolling‐window capability enables responsiveness to regime shifts, whereas all‐time mode highlights broader structural trends. Nonetheless, users should remain mindful of the model’s assumptions—particularly the power‐law form and fixed band percentages—and employ the forecast projection as a supplemental guide rather than a standalone predictor.
When combined with complementary indicators (e.g., volatility measures, momentum oscillators, volume analysis) and robust risk management, the Fair Value Trend Model can enhance market timing, mean‐reversion identification, and breakout detection across diverse trading environments.
REFERENCES
Draper, N. R., & Smith, H. (1998). Applied Regression Analysis (3rd ed.). Wiley.
Tsay, R. S. (2014). Introductory Time Series with R (2nd ed.). Springer.
Hull, J. C. (2017). Options, Futures, and Other Derivatives (10th ed.). Pearson.
These references provide background on regression, time-series analysis, and financial modeling.
FA_PA_LIBLibrary "FA_PA_LIB"
A collection of custom tools & utility functions commonly used for coding Dr Al Brooks, Price Action System with my scripts
getBodySize()
Gets the current candle's body size (in POINTS, divide by 10 to get pips)
Returns: The current candle's body size in POINTS
getTopWickSize()
Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's top wick size in POINTS
getTopWickPercent()
Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
Returns: Percent of total candle width that is occupied by the upper wick
getBottomWickSize()
Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's bottom wick size in POINTS
getBottomWickPercent()
Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
Returns: Percent of total candle width that is occupied by the lower wick
getBarMidPoint()
Gets the current candle's midpoint wick to wick
Returns: The current candle's mid point
getBodyPercent()
Gets the current candle's body size as a percentage of its entire size including its wicks
Returns: The current candle's body size percentage (00.00)
bullFib(priceLow, priceHigh, fibRatio)
Calculates a bullish fibonacci value
Parameters:
priceLow (float) : The lowest price point
priceHigh (float) : The highest price point
fibRatio (float) : The fibonacci % ratio to calculate
Returns: The fibonacci value of the given ratio between the two price points
bearFib(priceLow, priceHigh, fibRatio)
Calculates a bearish fibonacci value
Parameters:
priceLow (float) : The lowest price point
priceHigh (float) : The highest price point
fibRatio (float) : The fibonacci % ratio to calculate
Returns: The fibonacci value of the given ratio between the two price points
isBr()
Checks if the current bar is a Bear Bar
Returns: A boolean - true if the current bar is bear candle
isBl()
Checks if the current bar is a Bull Bar
Returns: A boolean - true if the current bar is Bull candle
isTrendBar()
Checks if the current bar is a Trend Bar. Candle that its body size is greater than 50% of entire candle size
Returns: A boolean - true if the current bar is Trend candle
isBlTrendBar()
Checks if the current bar is a Bull Trend Bar. Bullish candle that its body size is greater than 50% of entire candle size
Returns: A boolean - true if the current bar is Bull Trend candle
isBrTrendBar()
Checks if the current bar is a Bull Trend Bar. Bullish candle that its body size is greater than 50% of entire candle size
Returns: A boolean - true if the current bar is Bull Trend candle
isBlRevB()
Checks if the current bar is a Bull Reversal Bar. Bullish candle that closes on upper half of candle body
Returns: A boolean - true if the current bar is Bull Reversal candle
isBrRevB()
Checks if the current bar is a Bear Reversal Bar. BulBearish candle that closes on lower half of candle body
Returns: A boolean - true if the current bar is Bear Reversal candle
isDoji(wickSize, bodySize)
Checks if the current bar is a doji candle based on the given parameters
Parameters:
wickSize (float) : (default=2) The maximum top wick size compared to the bottom (and vice versa)
bodySize (float) : (default=0.05) The maximum body size as a percentage compared to the entire candle size
Returns: A boolean - true if the current bar matches the requirements of a doji candle
isHammer(fib, colorMatch)
Checks if the current bar is a hammer candle based on the given parameters
Parameters:
fib (float) : (default=0.382) The fib to base candle body on
colorMatch (bool) : (default=true) Does the candle need to be green? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a hammer candle
isStar(fib, colorMatch)
Checks if the current bar is a shooting star candle based on the given parameters
Parameters:
fib (float) : (default=0.382) The fib to base candle body on
colorMatch (bool) : (default=false) Does the candle need to be red? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a shooting star candle
isBlOB()
Detects Bullish outside bars(OB)
Returns: Returns true if the current bar is a bull outside bar
isBrOB()
Detects Bearish outside bars(OB)
Returns: Returns true if the current bar is a bear outside bar
GAPs and AVPIs by BULL┃NETThe B | N - GAPA (GAPs and AVPIs by BULL|NET)
indicator helps traders to identify gaps between bars and imbalances in price and
volume.
read the 2 Disclaimers before use!
Disclaimer BullNett:
The information provided in this document is for educational and informational purposes only and does not constitute financial, investment, or trading advice. Any use of the content is at your own risk. No liability is assumed for any losses or damages resulting from reliance on this information. Trading financial instruments involves significant risks, including the potential loss of all invested capital. There is no guarantee of profits or specific outcomes. Please conduct your own research and consult a professional financial advisor if needed.
Disclaimer TradingView:
According to the www.tradingview.com
Gaps and imbalances are considered important price levels or ranges because the
price usually tends to close gaps and to get rid of imbalances sooner or later. At the
same time, gaps can deliver support or resistance and tell you a lot about market
sentiment.
Knowing where gaps and imbalances are or have been is vital for successful trading.
Read bevor use!!
Concepts and Functionality:
AVPI: Assumed Volume Price Imbalance
The price curve on a chart is like waves on the ocean. It goes up and
down and sometimes it is smooth. More wind means higher waves and if
the wind slows down the waves get smaller. An under sea earthquake
can cause a tsunami which is the exception of the rule: Extremely higher
waves without more wind.
This is what we consider an AVPI. The price is rising or falling sharply at
a single bar with only slightly increased or even decreased volume. The
change in price seems to be rather the result of a single event than of a
broader change in market sentiment. Such an imbalance is subject to be
corrected sooner or later: the price will return to where the imbalance
started. The Gap will get closed.
AVPIs can be spotted in any timeframe across any asset. And most
importantly you will usually see them at any broker for the same asset.
No matter whether you look i.e. at the original Nasdaq (NASDAQ:NDX)
chart or at the corresponding charts of CFD brokers.
Using the historical display feature of the indicator you will spot price
ranges where a couple of bearish and bullish AVPIs take turns. This is
usually the result of bears and bulls fighting for dominance. Play with the
historical display and the replay feature of TradingView to get a feeling
how things developed depending on who won the fight.
Candle Gaps
If the high and low of two consecutive candles do not overlap we talk
about a candle gap. Other than AVPIs which can be spotted across any
broker Candle Gaps are specific to a broker, the asset and the chart.
If you spot the same Candle Gap across different brokers and the original
chart, i.e. NASDAQ:NDX if you trade the Nasdaq, the Gap can be
considered meaningful and important because it marks a price range in
the market that hasn’t been traded at all (nobody was willing to sell or
buy in that price range).
Candle Gaps are usually closed within a very
short time. Often, you can see these gaps being filled on the same day,
but depending on the asset, they can also remain open for days.
Body Gaps
If you compare the high or low of the current bar with the open or close
of the bar before you will see there are times where the current extreme
does not overlap with the body of the previous bar. This is called a Body
Gap.
If the Body Gap extends a Candle Gap (see impressions section below)
to the body of the previous bar you should consider the Body Gap to be
a bigger Candle Gap.
If several Body Gaps occur in quick succession in a trend they indicate
acceleration and maybe an upcoming exhaustion of the trend.
Combined with the B | N – TREX by BULL|NETT you might find a good trend entry (see
impressions section below).
Single Body Gaps usually do not have much impact other than indicating
the price will likely turn quickly to close the Gap.
It is important to note Body Gaps should always be verified in the 1
minute time frame. You might see a body gap in the 3 minute timeframe
but not below because of the calculation of the Body in the higher time
frame. (see impressions section below)
AVPI OPTIONS
Default assumption for an AVPI:
• If the current bar height (high – low) is at least three times bigger
(growth >= 200%) than the height of the bar before (high –
low )
• And the current bar body (open – close or close – open) measures
at least 70% of its total height (high - low)
• And the growth of volume since the last bar (volume – volume ) is
not bigger than 1.5 times (growth <= 50%) the growth of the current
bar height
Example:
Current bar height: 13205.10 Previous bar height: 2500.60 Growth of
height = 13205.10 / 2500.60 = 5.28 times bigger Growth of height in
percent (GoH) = 13205.10 * 100 / 2500.60 – 100 = 428.08%
Current bar height: 13205.10 Current bar body: 11007.72 Proportion of
body (PoB): 11007.72 * 100 / 13205.10 = 83.36%
Current bar volume: 608470.00 Previous bar volume: 357365.00 Change
in volume: 608470 * 100 / 357365 – 100 = 70.27% Max. change in
volume allowed: 428.08 * 50% = 214%
Condition check: Growth of height (GoH) in percent 428.08% > 200%
Proportion of body 83.36% > 70% Growth of volume (GoV) 70.27% <
214%
All conditions are true and we can assume a volume to price imbalance.
The following settings allow you to modify the calculation parameters.
The defaults deliver highly reliable results across all markets and assets.
Any changes may end in displaying false results.
Settings:
● Maximum GoV in percent The default maximum growth of volume is
50% of the growth of height. You can change it down to 25% in steps of
1%. This setting decreases the allowed maximum growth of volume. The
calculation becomes more strict.
● Minimum GoH in percent The default minimum growth of height of the
current bar compared to the previous bar is 200%. You can change the
setting between 150% and 250%. The previous bar is taken as 100%. A
growth by 100% means the current bar height is two times the height of
the previous bar. If the previous bar has a height of 50 points, a growth of
200% expects the current height to be 150 (50 + 2 * 50) points. A setting
of 150% results in 125 (50 + 50 + 25) points, and 250% gives 175 (50 +
2 * 50 + 25) points.
● Minimum PoB in percent The default minimum proportion of the current
bar's body of its height is 70%. You can choose a value between 65%
and 90%. The height of the bar (high – low) is always 100%. If you
reduce the setting, you allow a smaller body (larger wicks). If you raise
the setting, you demand a larger body (less wicks).
● AVPIs By default, AVPI calculation and display are enabled. For
backtesting purposes, you can switch them off.
The two color fields allow you to differentiate between AVPIs with
increasing and decreasing volume. A lower volume at the current bar
than at the previous bar while the bar height is growing can tell you
something about the market sentiment in higher timeframes.
The text color field allows you to change the color of the range display in
the AVPI box.
● AVPI Insight By default, you will see a small 🛈 in the middle of the
AVPI bar. The tooltip of the label contains all parameters as shown in the
example calculation above. If you don’t need it, you can disable this
feature. The other two fields determine the color and size of the 🛈.
— Body and Candle Gap Options
● Body Gaps By default, the display of Body Gaps is enabled. You can
disable it for backtesting purposes. Change the color of the box and text
to your liking.
● Candle Gaps By default, the display of Candle Gaps is enabled. You
can disable it for backtesting purposes. Change the color of the box and
text to your liking.
— HISTORICAL OPTIONS
All historical options are for backtesting and learning purposes only.
● Show past AVPIs If enabled, the live display of AVPIs is switched off.
Select the number of the latest AVPIs to display. You can differentiate
between bullish (up) and bearish (down) AVPIs. Past AVPIs will be
displayed in their dimension at the moment they occurred.
● Show past Body Gaps If enabled, the live display of Body Gaps is
switched off. Select the number of the latest Body Gaps to display. You
can differentiate between bullish (up) and bearish (down) Body Gaps.
Past Body Gaps will be displayed in their dimension at the moment they
occurred.
● Show past Candle Gaps If enabled, the live display of Candle Gaps is
switched off. Select the number of the latest Candle Gaps to display. You
can differentiate between bullish (up) and bearish (down) Candle Gaps.
Past Candle Gaps will be displayed in their dimension at the moment
they occurred.
— DISPLAY OPTIONS
● 2 Decimals To streamline the appearance of prices, they are set to
display two decimals only. Numbers get rounded! However, trading
currency pairs or crypto assets might need to display the full amount of
decimals. In this case, simply disable the setting “2 Decimals.”
● Show Gap Range By default, each Gap Box will contain its range.
Depending on the direction (up/down), the range is displayed from
Bottom to Top or vice versa. If you want a cleaner chart, you can disable
the range.
— NERDS ONLY
These options are for nerdy pro-traders. For most of them, you need
knowledge about the Pine Protocol Console. If you have no idea what I
am talking about, these features are not for you.
● Bar Details In replay mode, you will see the details of the current bar in
the pine protocol.
_____________________________________________
Disclaimer BullNett:
The information provided in this document is for educational and informational purposes only and does not constitute financial, investment, or trading advice. Any use of the content is at your own risk. No liability is assumed for any losses or damages resulting from reliance on this information. Trading financial instruments involves significant risks, including the potential loss of all invested capital. There is no guarantee of profits or specific outcomes. Please conduct your own research and consult a professional financial advisor if needed.
Disclaimer TradingView:
According to the www.tradingview.com
Copyright: 2025-BULLNET - All rights reserved/b]
Roadmap:
Version 1.0 28.02.2025
NextBarColorNextBarColor
This is two-bars pattern search/matching indicator.
This indicator compares multiple values:
current bar high with previous bar open
current bar high with previous bar close
current bar high with previous bar high
current bar high with previous bar low
current bar low with previous bar open
current bar low with previous bar close
current bar low with previous bar high
current bar low with previous bar low
current bar close/current_price with previous bar high
current bar close/current_price with previous bar low
current bar close/current_price with previous bar open
current bar close/current_price with previous bar close
and searches for the same combination of 2 bars (current and previous) in the past.
Then shows as % value how many times the next bar went up or down.
Grey bar compares ups and downs with all results, including cases when price did not move.
My testing is showing better results when current and previous bars colors are also used in the search.
Volume Spread Analysis [TANHEF]Volume Spread Analysis: Understanding Market Intentions through the Interpretation of Volume and Price Movements.
█ Simple Explanation:
The Volume Spread Analysis (VSA) indicator is a comprehensive tool that helps traders identify key market patterns and trends based on volume and spread data. This indicator highlights significant VSA patterns and provides insights into market behavior through color-coded volume/spread bars and identification of bars indicating strength, weakness, and neutrality between buyers and sellers. It also includes powerful volume and spread forecasting capabilities.
█ Laws of Volume Spread Analysis (VSA):
The origin of VSA begins with Richard Wyckoff, a pivotal figure in its development. Wyckoff made significant contributions to trading theory, including the formulation of three basic laws:
The Law of Supply and Demand: This fundamental law states that supply and demand balance each other over time. High demand and low supply lead to rising prices until demand falls to a level where supply can meet it. Conversely, low demand and high supply cause prices to fall until demand increases enough to absorb the excess supply.
The Law of Cause and Effect: This law assumes that a 'cause' will result in an 'effect' proportional to the 'cause'. A strong 'cause' will lead to a strong trend (effect), while a weak 'cause' will lead to a weak trend.
The Law of Effort vs. Result: This law asserts that the result should reflect the effort exerted. In trading terms, a large volume should result in a significant price move (spread). If the spread is small, the volume should also be small. Any deviation from this pattern is considered an anomaly.
█ Volume and Spread Analysis Bars:
Display: Volume and/or spread bars that consist of color coded levels. If both of these are displayed, the number of spread bars can be limited for visual appeal and understanding, with the spread bars scaled to match the volume bars. While automatic calculation of the number of visual bars for auto scaling is possible, it is avoided to prevent the indicator from reloading whenever the number of visual price bars on the chart is adjusted, ensuring uninterrupted analysis. A displayable table (Legend) of bar colors and levels can give context and clarify to each volume/spread bar.
Calculation: Levels are calculated using multipliers applied to moving averages to represent key levels based on historical data: low, normal, high, ultra. This method smooths out short-term fluctuations and focuses on longer-term trends.
Low Level: Indicates reduced volatility and market interest.
Normal Level: Reflects typical market activity and volatility.
High Level: Indicates increased activity and volatility.
Ultra Level: Identifies extreme levels of activity and volatility.
This illustrates the appearance of Volume and Spread bars when scaled and plotted together:
█ Forecasting Capabilities:
Display: Forecasted volume and spread levels using predictive models.
Calculation: Volume and Spread prediction calculations differ as volume is linear and spread is non-linear.
Volume Forecast (Linear Forecasting): Predicts future volume based on current volume rate and bar time till close.
Spread Forecast (Non-Linear Dynamic Forecasting): Predicts future spread using a dynamic multiplier, less near midpoint (consolidation) and more near low or high (trending), reflecting non-linear expansion.
Moving Averages: In forecasting, moving averages utilize forecasted levels instead of actual levels to ensure the correct level is forecasted (low, normal, high, or ultra).
The following compares forecasted volume with actual resulting volume, highlighting the power of early identifying increased volume through forecasted levels:
█ VSA Patterns:
Criteria and descriptions for each VSA pattern are available as tooltips beside them within the indicator’s settings. These tooltips provide explanations of potential developments based on the volume and spread data.
Signs of Strength (🟢): Patterns indicating strong buying pressure and potential market upturns.
Down Thrust
Selling Climax
No Effort → Bearish Result
Bearish Effort → No Result
Inverse Down Thrust
Failed Selling Climax
Bull Outside Reversal
End of Falling Market (Bag Holder)
Pseudo Down Thrust
No Supply
Signs of Weakness (🔴): Patterns indicating strong selling pressure and potential market downturns.
Up Thrust
Buying Climax
No Effort → Bullish Result
Bullish Effort → No Result
Inverse Up Thrust
Failed Buying Climax
Bear Outside Reversal
End of Rising Market (Bag Seller)
Pseudo Up Thrust
No Demand
Neutral Patterns (🔵): Patterns indicating market indecision and potential for continuation or reversal.
Quiet Doji
Balanced Doji
Strong Doji
Quiet Spinning Top
Balanced Spinning Top
Strong Spinning Top
Quiet High Wave
Balanced High Wave
Strong High Wave
Consolidation
Bar Patterns (🟡): Common candlestick patterns that offer insights into market sentiment. These are required in some VSA patterns and can also be displayed independently.
Bull Pin Bar
Bear Pin Bar
Doji
Spinning Top
High Wave
Consolidation
This demonstrates the acronym and descriptive options for displaying bar patterns, with the ability to hover over text to reveal the descriptive text along with what type of pattern:
█ Alerts:
VSA Pattern Alerts: Notifications for identified VSA patterns at bar close.
Volume and Spread Alerts: Alerts for confirmed and forecasted volume/spread levels (Low, High, Ultra).
Forecasted Volume and Spread Alerts: Alerts for forecasted volume/spread levels (High, Ultra) include a minimum percent time elapsed input to reduce false early signals by ensuring sufficient bar time has passed.
█ Inputs and Settings:
Display Volume and/or Spread: Choose between displaying volume bars, spread bars, or both with different lookback periods.
Indicator Bar Color: Select color schemes for bars (Normal, Detail, Levels).
Indicator Moving Average Color: Select schemes for bars (Fill, Lines, None).
Price Bar Colors: Options to color price bars based on VSA patterns and volume levels.
Legend: Display a table of bar colors and levels for context and clarity of volume/spread bars.
Forecast: Configure forecast display and prediction details for volume and spread.
Average Multipliers: Define multipliers for different levels (Low, High, Ultra) to refine the analysis.
Moving Average: Set volume and spread moving average settings.
VSA: Select the VSA patterns to be calculated and displayed (Strength, Weakness, Neutral).
Bar Patterns: Criteria for bar patterns used in VSA (Doji, Bull Pin Bar, Bear Pin Bar, Spinning Top, Consolidation, High Wave).
Colors: Set exact colors used for indicator bars, indicator moving averages, and price bars.
More Display Options: Specify how VSA pattern text is displayed (Acronym, Descriptive), positioning, and sizes.
Alerts: Configure alerts for VSA patterns, volume, and spread levels, including forecasted levels.
█ Usage:
The Volume Spread Analysis indicator is a helpful tool for leveraging volume spread analysis to make informed trading decisions. It offers comprehensive visual and textual cues on the chart, making it easier to identify market conditions, potential reversals, and continuations. Whether analyzing historical data or forecasting future trends, this indicator provides insights into the underlying factors driving market movements.
VolumeSpreadAnalysisLibrary "VolumeSpreadAnalysis"
A library for Volume Spread Analysis (VSA).
spread(_barIndex)
Calculates the spread of a bar.
Parameters:
_barIndex (int) : (int) The index of the bar.
Returns: (float) The spread of the bar.
volume(_barIndex)
Retrieves the volume of a bar.
Parameters:
_barIndex (int) : (int) The index of the bar.
Returns: (float) The volume of the bar.
body(_barIndex)
Calculates the body of a bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The body size of the bar.
wickUpper(_barIndex)
Calculates the upper wick of a bar (upper shadow).
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The upper wick size of the bar.
wickLower(_barIndex)
Calculates the lower wick of a bar (lower shadow).
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The lower wick size of the bar.
calcForecastedSMA(_source, _length, _forecastedLevel)
Calculates the forecasted Simple Moving Average (SMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the SMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted SMA value.
calcForecastedEMA(_source, _length, _forecastedLevel)
Calculates the forecasted Exponential Moving Average (EMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the EMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted EMA value.
calcForecastedRMA(_source, _length, _forecastedLevel)
Calculates the forecasted Relative Moving Average (RMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the RMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted RMA value.
calcForecastedWMA(_source, _length, _forecastedLevel)
Calculates the forecasted Weighted Moving Average (WMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the WMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted WMA value.
calcElapsedTimePercent()
Calculates the elapsed time percent of the current bar.
Returns: (float) The elapsed time percent.
calcForecastedSpread(multiplierAtMidpoints, multiplierAtPeaks)
Calculates the forecasted spread using elapsed time and dynamic multipliers, handling spread's non-linear nature.
Parameters:
multiplierAtMidpoints (float) : (float) The multiplier value at midpoints.
multiplierAtPeaks (float) : (float) The multiplier value at peaks.
Returns: (float) The forecasted spread value.
calcForecastedVolume()
Calculates the forecasted volume using elapsed time, satisfying volume's linear nature.
Returns: (float) The forecasted volume value.
calcForecastedMA(_source, _length, _forecastedSource, _type)
Calculates the forecasted Moving Average (MA) based on the specified type.
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the MA.
_forecastedSource (float) : (float) The forecasted level to include in the calculation.
_type (simple string) : (string) The type of the MA ("SMA", "EMA", "SMMA (RMA)", "WMA").
Returns: (float) The forecasted MA value.
calcMA(_source, _length, _type)
Calculates the Moving Average (MA) based on the specified type.
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the MA.
_type (simple string) : (string) The type of the MA ("SMA", "EMA", "SMMA (RMA)", "WMA").
Returns: (float) The MA value.
bullBar(_barIndex)
Determines if the bar is bullish.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if the bar is bullish, otherwise false.
bearBar(_barIndex)
Determines if the bar is bearish.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if the bar is bearish, otherwise false.
breakout(_barIndex)
Determines if there is a breakout above the previous bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if there is a breakout, otherwise false.
breakdown(_barIndex)
Determines if there is a breakdown below the previous bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if there is a breakdown, otherwise false.
rejectionWickUpper(_rejectionWick)
Determines if the upper wick is a rejection wick.
Parameters:
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if the upper wick is a rejection wick, otherwise false.
rejectionWickLower(_rejectionWick)
Determines if the lower wick is a rejection wick.
Parameters:
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if the lower wick is a rejection wick, otherwise false.
setupDataVolume(_data, _mult_Low, _mult_High, _mult_Ultra, _maLengthVolume, _maTypeVolume)
Sets up data for volume levels.
Parameters:
_data (map) : (map) The map to store the levels.
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthVolume (simple int) : (int) The length for MA.
_maTypeVolume (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataSpread(_data, _mult_Low, _mult_High, _mult_Ultra, _maLengthSpread, _maTypeSpread)
Sets up data for spread levels.
Parameters:
_data (map) : (map) The map to store the levels.
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthSpread (simple int) : (int) The length for MA.
_maTypeSpread (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataForecastVolume(_dataForecast, _mult_Low, _mult_High, _mult_Ultra, _maLengthVolume, _predictedLevelVolume, _maTypeVolume)
Sets up data for volume and spread levels for forecast.
Parameters:
_dataForecast (map)
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthVolume (simple int) : (int) The length for MA.
_predictedLevelVolume (float) : (float) The predicted level for MA.
_maTypeVolume (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataForecastSpread(_dataForecast, _mult_Low, _mult_High, _mult_Ultra, _maLengthSpread, _predictedLevelSpread, _maTypeSpread)
Sets up data for spread levels for forecast.
Parameters:
_dataForecast (map)
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthSpread (simple int) : (int) The length for MA.
_predictedLevelSpread (float) : (float) The predicted level for MA.
_maTypeSpread (simple string) : (string) The type for MA.
Returns: (void) Nothing.
isVolumeLow(_data, _barIndex)
Determines if the volume is low.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is low, otherwise false.
isVolumeNormal(_data, _barIndex)
Determines if the volume is normal.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is normal, otherwise false.
isVolumeHigh(_data, _barIndex)
Determines if the volume is high.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is high, otherwise false.
isVolumeUltra(_data, _barIndex)
Determines if the volume is ultra.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is ultra, otherwise false.
isSpreadLow(_data, _barIndex)
Determines if the spread is low.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is low, otherwise false.
isSpreadNormal(_data, _barIndex)
Determines if the spread is normal.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is normal, otherwise false.
isSpreadHigh(_data, _barIndex)
Determines if the spread is high.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is high, otherwise false.
isSpreadUltra(_data, _barIndex)
Determines if the spread is ultra.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is ultra, otherwise false.
isVolumeText(_data)
Determines text string representing the volume area level.
Parameters:
_data (map) : (map) The data map with volume levels.
Returns: (string) Text string of Low, Normal, High, or Ultra.
isSpreadText(_data)
Determines text string representing the spread area level.
Parameters:
_data (map) : (map) The data map with spread levels.
Returns: (string) Text string of Low, Normal, High, or Ultra.
calcBarColor(_value, _level)
Calculates the color based level.
Parameters:
_value (float) : (float) The value to check.
_level (float) : (float) The value level for comparison.
Returns: (color) The color for the bar.
bullPinBar(_maxBodyPercent, _minWickPercent)
Determines if the bar is a bull pin bar.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
Returns: (bool) True if the bar is a bull pin bar, otherwise false.
bearPinBar(_maxBodyPercent, _minWickPercent)
Determines if the bar is a bear pin bar.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
Returns: (bool) True if the bar is a bear pin bar, otherwise false.
dojiBar(_maxBodyPercent)
Determines if the bar is a doji.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
Returns: (bool) True if the bar is a doji, otherwise false.
spinningTopBar(_minWicksPercent, _emaLength)
Determines if the bar is a spinning top.
Parameters:
_minWicksPercent (simple float) : (float) The minimum wicks percentage.
_emaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if the bar is a spinning top, otherwise false.
highWaveBar(_minBodyPercent, _minWickPercent, _bars)
Determines if the bar is a high wave bar.
Parameters:
_minBodyPercent (simple float) : (float) The minimum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
_bars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if the bar is a high wave bar, otherwise false.
consolidationBar(_data, _spread, _bars)
Determines if the bars are in consolidation.
Parameters:
_data (map) : (map) The data map with spread levels.
_spread (simple float) : (float) The spread percentage for comparison.
_bars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if the bars are in consolidation, otherwise false.
S_DownThrust(_data, _bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (DownThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (DownThrust), otherwise false.
S_SellingClimax(_data, _rejectionWick)
Determines if there is a sign of strength (Selling Climax).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if there is a sign of strength (Selling Climax), otherwise false.
S_NoEffortBearishResult()
Determines if there is a sign of strength (No Effort Bearish Result).
Returns: (bool) True if there is a sign of strength (No Effort Bearish Result), otherwise false.
S_BearishEffortNoResult()
Determines if there is a sign of strength (Bearish Effort No Result).
Returns: (bool) True if there is a sign of strength (Bearish Effort No Result), otherwise false.
S_InverseDownThrust(_data, _bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of strength (Inverse DownThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of strength (Inverse DownThrust), otherwise false.
S_FailedSellingClimax()
Determines if there is a sign of strength (Failed Selling Climax).
Returns: (bool) True if there is a sign of strength (Failed Selling Climax), otherwise false.
S_BullOutsideReversal(_data)
Determines if there is a sign of strength (Bull Outside Reversal).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of strength (Bull Outside Reversal), otherwise false.
S_EndOfFallingMarket(_data)
Determines if there is a sign of strength (End of Falling Market).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of strength (End of Falling Market), otherwise false.
S_PseudoDownThrust(_bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (Pseudo DownThrust).
Parameters:
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (Pseudo DownThrust), otherwise false.
S_NoSupply(_bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (No Supply).
Parameters:
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (No Supply), otherwise false.
W_UpThrust(_data, _bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (UpThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (UpThrust), otherwise false.
W_BuyingClimax(_data, _rejectionWick)
Determines if there is a sign of weakness (Buying Climax).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if there is a sign of weakness (Buying Climax), otherwise false.
W_NoEffortBullishResult()
Determines if there is a sign of weakness (No Effort Bullish Result).
Returns: (bool) True if there is a sign of weakness (No Effort Bullish Result), otherwise false.
W_BullishEffortNoResult()
Determines if there is a sign of weakness (Bullish Effort No Result).
Returns: (bool) True if there is a sign of weakness (Bullish Effort No Result), otherwise false.
W_InverseUpThrust(_data, _bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of weakness (Inverse UpThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of weakness (Inverse UpThrust), otherwise false.
W_FailedBuyingClimax()
Determines if there is a sign of weakness (Failed Buying Climax).
Returns: (bool) True if there is a sign of weakness (Failed Buying Climax), otherwise false.
W_BearOutsideReversal(_data)
Determines if there is a sign of weakness (Bear Outside Reversal).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of weakness (Bear Outside Reversal), otherwise false.
W_EndOfRisingMarket(_data)
Determines if there is a sign of weakness (End of Rising Market).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of weakness (End of Rising Market), otherwise false.
W_PseudoUpThrust(_bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (Pseudo UpThrust).
Parameters:
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (Pseudo UpThrust), otherwise false.
W_NoDemand(_bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (No Demand).
Parameters:
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (No Demand), otherwise false.
N_QuietDoji(_dojiBarMaxBody)
Determines if there is a neutral signal (Quiet Doji).
Parameters:
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Quiet Doji), otherwise false.
N_BalancedDoji(_data, _dojiBarMaxBody)
Determines if there is a neutral signal (Balanced Doji).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Balanced Doji), otherwise false.
N_StrongDoji(_dojiBarMaxBody)
Determines if there is a neutral signal (Strong Doji).
Parameters:
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Strong Doji), otherwise false.
N_QuietSpinningTop(_spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Quiet Spinning Top).
Parameters:
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Quiet Spinning Top), otherwise false.
N_BalancedSpinningTop(_data, _spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Balanced Spinning Top).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Balanced Spinning Top), otherwise false.
N_StrongSpinningTop(_spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Strong Spinning Top).
Parameters:
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Strong Spinning Top), otherwise false.
N_QuietHighWave(_highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Quiet High Wave).
Parameters:
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Quiet High Wave), otherwise false.
N_BalancedHighWave(_data, _highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Balanced High Wave).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Balanced High Wave), otherwise false.
N_StrongHighWave(_highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Strong High Wave).
Parameters:
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Strong High Wave), otherwise false.
N_Consolidation(_data, _consolidationBarSpread, _consolidationBarBars)
Determines if there is a neutral signal (Consolidation).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_consolidationBarSpread (simple float) : (float) The spread percentage for consolidation bar.
_consolidationBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Consolidation), otherwise false.
Delta ZigZag [LuxAlgo]The Delta ZigZag indicator is focused on volume analysis during the development of ZigZag lines. Volume data can be retrieved from a Lower timeframe (LTF) or real-time Tick data.
Our Delta ZigZag publication can be helpful in detecting indications of a trend reversal or potential weakening/strengthening of the trend.
This indicator by its very nature backpaints, meaning that the displayed components are offset in the past.
🔶 USAGE
The ZigZag line is formed by connecting Swings , which can be set by adjusting the Left and Right settings.
Left is the number of bars for evaluation at the left of the evaluated point.
Right is the number of bars for evaluation at the right of the evaluated point.
A valid Swing is a value higher or lower than the bars at the left/right .
A higher Left or Right set number will generally create broader ZigZag ( ZZ ) lines, while the drawing of the ZZ line will be delayed (especially when Right is set higher). On the other hand, when Right is set at 0, ZZ line are drawn quickly. However, this results in a hyperactive switching of the ZZ direction.
To ensure maximum visibility of values, we recommend using " Bars " from the " Bar's style " menu.
🔹 Volume examination
The script provides two options for Volume examination :
Examination per ZigZag line
Examination per bar
Bullish Volume is volume associated with a green bar ( close > open )
Bearish Volume is volume associated with a red bar ( close < open )
Neutral Volume (volume on a " close == open" bar) is not included in this publication.
🔹 Examination per ZigZag line
As long as the price moves in the same direction, the present ZZ line will continue. When the direction of the price changes, the bull/bear volume of the previous ZZ line is evaluated and drawn on the chart.
The ZZ line is divided into two parts: a bullish green line and a bearish red line.
The intercept of these two lines will depend on the ratio of bullish/bearish volume
This ratio is displayed at the intercept as % bullish volume (Settings -> Show % Bullish Volume)
* Note that we cannot draw between 2 bars. Therefore, if a ZZ line is only 1 bar long, the intercept will be at one of those 2 bars and not in between. The percentage can be helpful in interpreting bull/bear volume.
In the example above (2 most right labels), you can see that an overlap of 2 labels is prevented, ensuring the ability to evaluate the bullish % volume of the ZZ line .
The percentage will be colored green when more than 50%, red otherwise. The color will fade when the direction is contradictory; for example, 40% when the ZZ line goes up or 70% when the ZZ line falls.
More details can be visualized by enabling " Show " and choosing 1 of 3 options:
Average Volume Delta/bar
Average Volume/bar
Normalised Volume Delta
For both 'averages', the sum of " Volume "/" Volume Delta " of every bar on the ZZ line is divided by the number of bars (per ZZ line ).
The " Normalised Volume Delta " is calculated by dividing the sum of " Delta Volume " by the sum of " Volume " (neutral volume not included), which is displayed as a percentage.
All three options will display a label at the last point of the ZZ line and be coloured similarly: green when the ratio bullish/bearish volume of the ZZ line is bullish and red otherwise. Here, the colour also fades when it is bullish, but the ZZ line falls or when it is bearish with a rising ZZ line .
A tooltip at each label hints at the chosen option.
You can pick one of the options or combine them together.
🔹 Examination per bar
Besides information about what's happening during the ZZ line , information per bar can be visualized by enabling " Show Details " in Settings .
Split Volume per bar : show the sum of bullish (upV) and bearish (dnV) volume per bar
Volume (bar) : Total Volume per bar (bullish + bearish volume, neutral volume not included)
Δ Volume (bar) : Show Delta Volume (bullish - bearish volume)
🔹 Using Lower Timeframe Data
The ZigZag lines using LTF data are colored brighter. Also note the vertical line where the LTF data starts and the gap between ZZ lines with LTF data and without.
When " LTF " is chosen for the " Data from: " option in Settings , data is retrieved from Lower Timeframe bars (default 1 minute). When the LTF setting is higher than the current chart timeframe, the LTF period will automatically be adjusted to the current timeframe to prevent errors.
As there is a 100K limit to the number of LTF intrabars that can be analyzed by a script, this implies the higher the difference between LTF and current TF; the fewer ZZ lines will be seen.
🔹 Using real-time tick data
The principles are mostly the same as those of LTF data. However, in contrast with LTF data, where you already have LTF ZZ lines when loading the script, real-time tick data-based ZZ lines will only start after loading the chart.
Changing the settings of a ticker will reset everything. However, returning to the same settings/ticker would show the cached data again.
Here, you can see that changing settings reset everything, but returning after 2 minutes to the initial settings shows the cached data. Don't expect it to be cached for hours or days, though.
🔶 DETAILS
The timeframe used for LTF data should always be the same or lower than the current TF; otherwise, an error occurs. This snippet prevents the error and adjusts the LTF to the current TF when LTF is too high:
res = input.timeframe('1')
res := timeframe.from_seconds( math.min( timeframe.in_seconds(timeframe.period), timeframe.in_seconds(res) ) )
🔶 SETTINGS
Data from: LTF (Lower TimeFrame) or Ticks (Real-time ticks)
Res: Lower TimeFrame (only applicable when choosing LTF )
Option: choose " high/low " or " close " for Swing detection
🔹 ZigZag
Left: Lookback period for Swings
Right: Confirmation period after potential Swing
🔹 ZigZag Delta
Show % Bullish Volume : % bullish volume against total volume during the ZZ line
Show:
Average Volume Delta/bar
Average Volume/bar
Normalised Volume Delta
See USAGE for more information
🔹 Bar Data
Split Volume per bar: shows the sum of bullish ( upV ) and bearish ( dnV ) volume per bar
Volume (bar): Total Volume per bar (bullish + bearish volume, neutral volume not included)
Δ Volume (bar): Show Volume Delta (bullish - bearish volume)
Black RSI (Pro Suite)Black RSI (Pro Suite) is combination of RSI (Relative Strength Index), Volume RSI, Heikin Ashi RSI & other multi Oscillators with multi features into one indicator, features like (Quad Divergences, Multi Time Frame RSI, MTF RSI Panel, Oscillator Support/Resistance/Wedges/Trendlines, Oscillator Moving Average/BBs, Smooth RSI, RSI Price Estimator, Oscillator Over bought/sold Bars, Osc OB/OS Zones, Osc OB/OS Highlights, additionally Black RSI indicator is flexible & completely customizable).
Indicator goal: I have tried my best to organized RSI & other suitable oscillators and oscillator useful tools into one simple and free indicator for Tradingview users (specifically for Tradingview 'basic' subscription users). suggestions are always welcome. please give feedback & appreciate if you like my work.
Black RSI Indicator Features Summary:
Black RSI indicator includes many features mainly relevant to RSI and other Oscillators, these are briefly highlighted below:
Black RSI Dashboard
Multi Oscillators: Choose between multiple oscillators. All oscillators settings are customizable.
Multi Symbol: Multi Symbol Support, applicable on all oscillators
RSI (Relative Strength Index)
VRSI (Volume Relative Strength Index)
HA RSI (Heikin Ashi Relative Strength Index)
OBV (On Balance Volume)
CVD (Comulative Volume Delta)
MFI (Money Flow Index)
UO (Ultimate Oscillator)
MOM (Momentum Oscillator)
ATR (Average True Range)
Stoch (Stochastic Oscillator)
Stoch RSI (Stochastic RSI)
Oscillator Primary Tools ◢
Oscillator Moving Average/Bollinger Bands
Smooth RSI
Multi Timeframe RSI
Multi Timeframe RSI Panel
RSI Price Estimator
Oscillator Support/Resistance/Wedges/Trendlines
Oscillator Moving Average/BBs: Shows Moving Average for selected oscillator.
Smooth Smooth: Smooths out RSI
Multi Timeframe RSI: Displays Multiple Time Frame/Multiple Symbol RSI and converts it and shows it as it is in current time frame without effecting Primary RSI
Multi Timeframe RSI Panel: Displays Multiple Time Frame/Multiple Symbol RSI values of user input specific timeframes in compact panel (max 8 Time frames)
RSI Price Estimator: Calculates RSI estimate price values of 3 different user specific RSI input levels, RSI x MA cross price and RSI future value of user specific price input level.
Oscillator Support/Resistance/Wedges/Trendlines: Draws Trendlines, Wedges and Support & Resistance lines on selected oscillator
Oscillator Quad Divergence ◢
1st Oscillator Divergence: Traditional divergence indicator with enhancements & customization
2nd Oscillator Divergence: Traditional divergence indicator with enhancements & customization
3rd Oscillator Divergence: Advanced Divergence indicator with source selection, RSI/Price threshold, potential divergences & customization
4th Oscillator Divergence: Pivots divergence indicator with flexible pivots selection & customization
Regular bullish divergences are indicated when price is forming lower lows while an oscillator shows higher lows.
Regular bearish divergences are indicated when price is forming higher highs while an oscillator shows lower highs.
While regular divergences indicate trend reversals, hidden divergences indicate a trend continuation.
When the price is making higher lows and the oscillator is showing lower lows, we speak of a bullish hidden divergence.
When the price is making lower highs and the oscillator shows higher highs, it's a bearish hidden divergence.
Oscillator Secondary Tools ◢
Oscillator HH/LL pivots
Osc OB/OS Color Bars
Osc OB/OS Zones
Osc OB/OS Highlights
Background
Oscillator HH/LL pivots: Shows HH/LL pivot points on selected oscillator
Osc OB/OS Color Bars: Plots color chart bars based on RSI, MFI, Stochastic, Stochastic RSI or combine overbought/oversold conditions
Osc OB/OS Zones: Plots Osc OB/OS Zones with user input levels
Osc OB/OS Highlights: Highlight oscillator OB/OS background area
Background: background color customization
+ Primary RSI Settings ▾
- Primary RSI Length: User input RSI Length value
- Primary RSI Source: User RSI Source selection
- RSI Overbought Threshold: Allows the user to set the RSI overbought threshold value. This Overbought Threshold value will also be applied on "RSI Divergence overbought condition", "RSI OB Color Bars" and "Primary RSI Color Schemes
- RSI Oversold Threshold: Allows the user to set the RSI oversold threshold value. The lower band (oversold line) of RSI. This Oversold Threshold value will also be applied on "RSI Divergence oversold condition", "RSI OS Color Bars" and "Primary RSI Color Schemes
- RSI Middle Band: Allows the user to set the RSI middle band value. This value will also applied to "Center Line" color scheme from "Primary RSI Color Schemes" drop menu
- Primary RSI Colors:
Range color specifies a gradient of colors from the overbought to the oversold threshold user inputs from "Primary RSI" section. Color interpolation also a gradient but smoother than Range color. Center Line is similar but is not a gradient, linked to Middle Band ("Primary RSI" section) and changes color with RSI Middle Band. Traditional is simple with Overbought and Oversold colors change.
- RSI Bullish Band: Allows the user to plot extra/optional RSI band on RSI Oscillator (Note: it will not be plotted if "OB/OS Zone only" enabled from "OB/OS Zone Settings" section)
- RSI Bearish Band: Allows the user to plot extra/optional RSI band on RSI Oscillator (Note: it will not be plotted if "OB/OS Zone only" enabled from "OB/OS Zone Settings" section)
+ Primary RSI Smooth Settings ▾
- Smooth Moving Average Type: User selected Smooth MA type. With RSI Smooth enabled, will also effect all RSI Divergences detection (all divergences will be plot according to "Smoothed RSI line")
- Smooth Moving Average Length: User input Smooth MA length value
+ Oscillator Moving Average Settings ▾
- Osc Moving Average Colors: Allows user to select Bullish/Bearish colors of Oscillator Moving Average
- Osc Moving Average Type: Allows user to select Oscillator MA Type
- Osc Moving Average Length: User input Oscillator MA length value
- Osc Moving Average Thickness: User input Oscillator MA thickness
- BB StdDev: user input Bollinger Bands standard deviation value
+ Stochastic Oscillator Settings ▾
- Same as Traditional/Default indicator
+ Stochastic RSI Oscillator Settings ▾
- Same as Traditional/Default indicator
+ Money Index Flow Settings ▾
- Same as Traditional/Default indicator
+ Ultimate Oscillator Settings ▾
- Same as Traditional/Default indicator
+ Momentum Oscillator Settings ▾
- Same as Traditional/Default indicator
+ Average True Range Settings ▾
- Same as Traditional/Default indicator
+ Multi Timeframe RSI Settings ▾
- MTF RSI Time Frame: Allows user to select MTF RSI Time Frame
- MTF RSI Symbol: Allows user to select MTF RSI Time Symbol
- MTF RSI Length: User input MTF RSI length value
- MTF RSI Source: User selected MTF RSI source
- MTF RSI Line Width: User input MTF RSI line thickness value
- Number of Bars for MTF RSI plot
- MTF RSI Color > OB color > OS color : Allows user to select MTF RSI color with additionally Overbought/Oversold colors
+ MTF RSI Panel Settings ▾
- Select MTF RSI Type: If "Primary RSI" or "Volume RSI" selected MTF RSI Panel will show output values based on "Primary RSI" or "Volume RSI" parameters e.g. source, length, but without smooth.
- MTF RSI Panel Symbol: Allows user to select MTF RSI Panel symbol, leave symbol blank or uncheck "checkbox" for current chart symbol
- Show Symbol in Panel: Shows symbol ticker(current or user selected) in MTF RSI Panel
- Panel Background: Allows user to select MTF RSI Panel Background (enable/disable) and Background color selection
- TF1: MTF RSI Timeframe 1 user selection
- TF2: MTF RSI Timeframe 2 user selection
- TF3: MTF RSI Timeframe 3 user selection
- TF4: MTF RSI Timeframe 4 user selection
- TF5: MTF RSI Timeframe 5 user selection
- TF6: MTF RSI Timeframe 6 user selection
- TF7: MTF RSI Timeframe 7 user selection
- TF8: MTF RSI Timeframe 8 user selection
- Panel Top Offset: MTF RSI Panel offset input value
- Position: MTF RSI Panel position selection
- Text Size: MTF RSI Panel text size selection
- Bullish Colors: MTF RSI Panel bullish color selection. (Bullish colors range RSI >75, <75 to >65, <65 to >55)
- Bearish Colors: MTF RSI Panel bearish color selection. (Bearish colors range RSI <45 to >35, <35 to >25, <25)
+ RSI Price Estimator Settings ▾
- Price 1: User input value for RSI future price
- Price 2: User input value for RSI future price
- Price 3: User input value for RSI future price
- Panel Position Offset: User input value for panel position offset
- Price Decimals: User input value for output price decimals in panel
- Show RSI/OscMA cross Price: Enable/Disable RSIxOscillator MA cross future price
- Show RSI Level for Input Price: User input price for future RSI level
- Invisible Background: Enable/Disable Background
Auto Text Color > Auto color change of Panel text according to Dark/Light chart theme
+ Oscillator Support/Resistance Settings ▾
- Show Support line: Allows user to Enable/Disable Oscillator support line
Color > Auto Color: Auto color change of support line according to Dark/Light chart theme
- Show Resistance line: Allows user to Enable/Disable Oscillator resistance line
Color > Auto Color: Auto color display of resistance line according to Dark/Light chart theme
- Lookback lows/highs: User input of Lookback lows/highs value
- Distance threshold: Distance from the line to the low
- Line touch points: Number of points that have to be around the line
- Low/High left bars: User input of Low/High left bars value
- Low/High right bars: User input of Low/High right bars value
- Line style: User selection of line style
- Line thickness: User input of line thickness value
+ Oscillator 1st Divergence Settings ▾
- Divergence Source: User selection of divergence source. "High/Low" (high/low of oscillator/price divergence detection), "Close" (close of oscillator/price divergence detection) and "Both" (Both Close + High/Low of oscillator/price divergence detection). (Note: Traditional Divergence indicator default source is "High/Low")
- Pivot Lookback Right: How many candle to compare on the right side of a candle when deciding whether it is a pivot. The lower the number is, the earlier pivots (and therefore divergences) will be signaled, but the quality of those detections could be lower.
- Pivot Lookback Left: How many candle to compare on the left side of a candle when deciding whether it is a pivot. The lower the number is, the earlier pivots (and therefore divergences) will be signaled, but the quality of those detections could be lower.
- Divergence Max Length (Bars): The maximum length of a divergence (number of bars). If a detected divergence is longer than this, it will be discarded
- Divergence Min Length (Bars): The minimum length of a divergence (number of bars). If a detected divergence is shorter than this, it will be discarded
- Show Divergence as:
- Line Thickness: User input divergence line thickness value
- Label Transparency: it could reduce labels mess on oscillator line, input "100" for label text only without label background
- Labels Text Color: User label text color selection
Auto Text Color > Auto color change of label text according to Dark/Light chart theme
- Bull Divergences: Enable/Disable of Bull divergences
> Color: User selection of Bull divergence color
> Oversold only: It will show Regular Bullish RSI divergences in oversold zone only, RSI oversold threshold can be configure in "Primary RSI Settings" section.
- Bear Divergences: Enable/Disable of Bear divergences
> Color: User selection of Bear divergence color
> Overbought only: It will show Regular Bearish RSI divergences in overbought zone only, RSI overbought threshold can be configure in "Primary RSI Settings" section.
- Hidden Bull Div: Enable/Disable of Hidden Bull divergences
> Color: User selection of Hidden Bull divergence color
- Hidden Bear Div: Enable/Disable of Hidden Bear divergences
> Color: User selection of Hidden Bear divergence color
+ Oscillator 2nd Divergence Settings ▾
- Same as Oscillator 1st Divergence Settings
+ Oscillator 3rd Divergence Settings ▾
- Divergence source: User selection of divergence source . "oscillator" (divergence detection with high/low or close of selected oscillator), "price" (divergence detection with high/low or close of price)
- Bull price source: User selection of Bull price source. Bull price source: "Low" (low of price divergence detection), "Close" (close of price divergence detection) (linked to "price" in "Divergence source")
- Bear price source: User selection of Bear price source. Bear price source: "High" (high of price divergence detection), "Close" (close of price divergence detection) (linked to "price" in "Divergence source")
- Low/High left bars: How many candle to compare on the left side of a candle when deciding whether it is a pivot. The lower the number is, the earlier pivots (and therefore divergences) will be signaled, but the quality of those detections could be lower.
- Low/High right bars: How many candle to compare on the right side of a candle when deciding whether it is a pivot. The lower the number is, the earlier pivots (and therefore divergences) will be signaled, but the quality of those detections could be lower.
- Maximum lookback bars: The maximum length of a divergence (number of bars). If a detected divergence is longer than this, it will be discarded.
- Price threshold: User selection of Price threshold, higher values more lines
- RSI threshold: User selection of RSI threshold, higher values more lines
- Show Lows: Displays lows of RSI
- Show Highs: Displays highs of RSI
- Show Divergence as:
- Line Style:
- Line thickness: User input divergence line thickness value
- Label Transparency: it could reduce labels mess on oscillator line, input "100" for label text only without label background
- Labels Text Color: User label text color selection
Auto Text Color > Auto color change of label text according to Dark/Light chart theme
- Bull Divergences: Enable/Disable of Bull divergences
> Color: User selection of Bull divergence color
> Potential Bull: It will plot potential regular bull divergence with dotted line.
- Bear Divergences: Enable/Disable of Bear divergences
> Color: User selection of Bear divergence color
> Potential Bear: It will plot potential regular bear divergence with dotted line.
- Hidden Bull Div: Enable/Disable of Hidden Bull divergences
> Color: User selection of Hidden Bull divergence color
> Potential H.Bull: It will plot potential hidden bull divergence with dotted line.
- Hidden Bear Div: Enable/Disable of Hidden Bear divergences
> Color: User selection of Hidden Bear divergence color
> Hidden Bear divergence: It will plot potential hidden bear divergence with dotted line.
> Regular Bull oversold only: It will show Regular Bullish RSI divergences in oversold zone only, RSI oversold threshold can be configure in "Primary RSI Settings" section.
> Regular Bear overbought only: It will show Regular Bearish RSI divergences in overbought zone only, RSI overbought threshold can be configure in "Primary RSI Settings" section.
+ Oscillator 4th Divergences Settings ▾
- Upper Length: User pivot input value of draw upper divergence line From
- To Pivot:
- Lower Length: User pivot input value of draw lower divergence line From
- To Pivot:
- Show Divergence as:
- Line Style:
- Line thickness: User input divergence line thickness value
- Label Transparency: it could reduce labels mess on oscillator line, input "100" for label text only without label background
- Labels Text Color: User label text color selection
Auto Text Color > Auto color change of label text according to Dark/Light chart theme
- Bull Divergences: Enable/Disable of Bull divergences
> Color: User selection of Bull divergence color
- Bear Divergences: Enable/Disable of Bear divergences
> Color: User selection of Bear divergence color
- Regular Bull oversold only: It will show Regular Bullish RSI divergences in oversold zone only, RSI oversold threshold can be configure in "Primary RSI Settings" section.
- Regular Bear overbought only: It will show Regular Bearish RSI divergences in overbought zone only, RSI overbought threshold can be configure in "Primary RSI Settings" section.
+ Oscillator HHLL Pivots Settings ▾
- Pivot Length: User input value of HH/LL pivot length
> L.Text Color: User label text color selection
- HH color: User HH Label color selection
- HL color: User HL Label color selection
- LH color: User LH Label color selection
- LL color: User LL Label color selection
+ Oscillator OB/OS Colored Bars Settings▾
- Overbought/Oversold Bars Oscillator: Plots Overbought/Oversold color bars based on RSI, MFI, Stoch, Stoch RSI overbought/oversold threshold conditions separately or combined(when every oscillator reach its OB or OS threshold condition at same time).
- Overbought Bar Color: User RSI OB Bars color selection
- Oversold Bar Color: User RSI OS Bars color selection
+ Primary RSI Range Color ▾
- OB: Overbought Color
- OS: Oversold Color
- Bullish: Bullish Color
- Bearish: Bearish Color
+ Primary RSI Color interpolation ▾
- RSI Color: RSI Color
- OB: Overbought Color
- OS: Oversold Color
+ Primary RSI Center Line Color ▾
- OB: Overbought Color
- Bullish: Bullish Color
- Bearish: Bearish Color
- OS: Oversold Color
+ Primary RSI Traditional Color ▾
- RSI Color: RSI Color
- OB: Overbought Color
- OS: Oversold Color
Osc Overbought/Oversold Zones Settings ▾
- OB/OS Zone Band Lines: Enable/Disable OB/OS Zone Band Lines
- OB/OS Zones only: Only shows OB/OS Zones and disable all RSI band lines except Middle Band. Background will not be effected by this setting.
- Overbought Zone: User input value of Overbought Zone from
> To:
- Oversold Zone: User input value of Oversold Zone from
> To:
Osc Overbought/Oversold Highlights ▾
- Overbought Highlights : Enable/Disable Overbought Highlights
- Oversold Highlights : Enable/Disable Oversold Highlights
- Transparency: Gradient transparency of highlighted area
+ 'Oscillators Color Settings ▾
- Show Osc Symbol label : Enable/Disable of oscillator symbol label. Displays current oscillator symbol, but with "Override Oscillator Symbol" enabled from "Black RSI Dashboard" it will Auto/forcefully displays Override Oscillator Symbol on Oscillator
- Fade out Oscillator line: Fade out the oscillator line color, focusing only the most recent periods prominent for a clearer chart
- Fill Stoch/StochRSI lines: Fills Stoch/Stoch RSI lines
- Oscillator line thickness: user input value of oscillator line thickness
- Oscillator line offset: Shifts the oscillator to the left or to the right on the given number of bars, Default is 0
- OBV Color
- MFI Color
- ATR Color
- UO Color
- MOM Color
- CVD Bullish Color
- CVD Bearish Color
+ Background Setting ▾
- Custom Background Color: User selection of Background color
Authors & Credits: I'd like to THANK to Nabeel Black(myself), LonesomeTheBlue, iFuSiiOnzZ, jmosullivan, zdmre, creengrack, and TradingView for the locally sourced ingredients.
Disclaimer: DYOR. Not financial advice. Not a trading system. I am not affiliated with TradingView or any authors mentioned here; You alone have the sole responsibility of evaluating the script output and risks associated with the use of the script. Trading success is all about following your trading strategy and the indicators should fit within your trading strategy, and not to be traded upon solely. Always trade with confluence and Risk Management.
Feedback & Bug report
if you found any bug in this indicator or any suggestion, please let me know. Please give feedback & appreciate if you like to see more future updates and indicators. Thank you
CVD - Cumulative Volume Delta (Chart)█ OVERVIEW
This indicator displays cumulative volume delta (CVD) as an on-chart oscillator. It uses intrabar analysis to obtain more precise volume delta information compared to methods that only use the chart's timeframe.
The core concepts in this script come from our first CVD indicator , which displays CVD values as plot candles in a separate indicator pane. In this script, CVD values are scaled according to price ranges and represented on the main chart pane.
█ CONCEPTS
Bar polarity
Bar polarity refers to the position of the close price relative to the open price. In other words, bar polarity is the direction of price change.
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 bars at the lower timeframe of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This script utilizes a LTF to analyze intrabars, or price changes within a chart bar. The lower the LTF, the more intrabars are analyzed, but the less chart bars can display information due to the limited number of intrabars that can be analyzed.
Volume delta
Volume delta is a measure that separates volume into "up" and "down" parts, then takes the difference to estimate the net demand for the asset. This approach gives traders a more detailed insight when analyzing volume and market sentiment. There are several methods for determining whether an asset's volume belongs in the "up" or "down" category. Some indicators, such as On Balance Volume and the Klinger Oscillator , use the change in price between bars to assign volume values to the appropriate category. Others, such as Chaikin Money Flow , make assumptions based on open, high, low, and close prices. The most accurate method involves using tick data to determine whether each transaction occurred at the bid or ask price and assigning the volume value to the appropriate category accordingly. However, this method requires a large amount of data on historical bars, which can limit the historical depth of charts and the number of symbols for which tick data is available.
In the context where historical tick data is not yet available on TradingView, intrabar analysis is the most precise technique to calculate volume delta on historical bars on our charts. This indicator uses intrabar analysis to achieve a compromise between simplicity and accuracy in calculating volume delta on historical bars. Our Volume Profile indicators use it as well. Other volume delta indicators in our Community Scripts , such as the Realtime 5D Profile , use real-time chart updates to achieve more precise volume delta calculations. However, these indicators aren't suitable for analyzing historical bars since they only work for real-time analysis.
This is the logic we use to assign intrabar volume to the "up" or "down" category:
• If the intrabar's open and close values are different, their relative position is used.
• If the intrabar's open and close values are the same, the difference between the intrabar's close and the previous intrabar's close is used.
• As a last resort, when there is no movement during an intrabar and it closes at the same price as the previous intrabar, the last known polarity is used.
Once all intrabars comprising a chart bar are analyzed, we calculate the net difference between "up" and "down" intrabar volume to produce the volume delta for the chart bar.
█ FEATURES
CVD resets
The "cumulative" part of the indicator's name stems from the fact that calculations accumulate during a period of time. By periodically resetting the volume delta accumulation, we can analyze the progression of volume delta across manageable chunks, which is often more useful than looking at volume delta accumulated from the beginning of a chart's history.
You can configure the reset period using the "CVD Resets" input, which offers the following selections:
• None : Calculations do not reset.
• On a fixed higher timeframe : Calculations reset on the higher timeframe you select in the "Fixed higher timeframe" field.
• At a fixed time that you specify.
• At the beginning of the regular session .
• On trend changes : Calculations reset on the direction change of either the Aroon indicator, Parabolic SAR , or Supertrend .
• On a stepped higher timeframe : Calculations reset on a higher timeframe automatically stepped using the chart's timeframe and following these rules:
Chart TF HTF
< 1min 1H
< 3H 1D
<= 12H 1W
< 1W 1M
>= 1W 1Y
Specifying intrabar precision
Ten options are included in the script to control the number of intrabars used per chart bar for calculations. The greater the number of intrabars per chart bar, the fewer chart bars can be analyzed.
The first five options allow users to specify the approximate amount of chart bars to be covered:
• Least Precise (Most chart bars) : Covers all chart bars by dividing the current timeframe by four.
This ensures the highest level of intrabar precision while achieving complete coverage for the dataset.
• Less Precise (Some chart bars) & More Precise (Less chart bars) : These options calculate a stepped LTF in relation to the current chart's timeframe.
• Very precise (2min intrabars) : Uses the second highest quantity of intrabars possible with the 2min LTF.
• Most precise (1min intrabars) : Uses the maximum quantity of intrabars possible with the 1min LTF.
The stepped lower timeframe for "Less Precise" and "More Precise" options is calculated from the current chart's timeframe as follows:
Chart Timeframe Lower Timeframe
Less Precise More Precise
< 1hr 1min 1min
< 1D 15min 1min
< 1W 2hr 30min
> 1W 1D 60min
The last five options allow users to specify an approximate fixed number of intrabars to analyze per chart bar. The available choices are 12, 24, 50, 100, and 250. The script will calculate the LTF which most closely approximates the specified number of intrabars per chart bar. Keep in mind that due to factors such as the length of a ticker's sessions and rounding of the LTF, it is not always possible to produce the exact number specified. However, the script will do its best to get as close to the value as possible.
As there is a limit to the number of intrabars that can be analyzed by a script, a tradeoff occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
Display
This script displays raw or cumulative volume delta values on the chart as either line or histogram oscillator zones scaled according to the price chart, allowing traders to visualize volume activity on each bar or cumulatively over time. The indicator's background shows where CVD resets occur, demarcating the beginning of new zones. The vertical axis of each oscillator zone is scaled relative to the one with the highest price range, and the oscillator values are scaled relative to the highest volume delta. A vertical offset is applied to each oscillator zone so that the highest oscillator value aligns with the lowest price. This method ensures an accurate, intuitive visual comparison of volume activity within zones, as the scale is consistent across the chart, and oscillator values sit below prices. The vertical scale of oscillator zones can be adjusted using the "Zone Height" input in the script settings.
This script displays labels at the highest and lowest oscillator values in each zone, which can be enabled using the "Hi/Lo Labels" input in the "Visuals" section of the script settings. Additionally, the oscillator's value on a chart bar is displayed as a tooltip when a user hovers over the bar, which can be enabled using the "Value Tooltips" input.
Divergences occur when the polarity of volume delta does not match that of the chart bar. The script displays divergences as bar colors and background colors that can be enabled using the "Color bars on divergences" and "Color background on divergences" inputs.
An information box in the lower-left corner of the indicator displays the HTF used for resets, the LTF used for intrabars, the average quantity of intrabars per chart bar, and the number of chart bars for which there is LTF data. This is enabled using the "Show information box" input in the "Visuals" section of the script settings.
FOR Pine Script™ CODERS
• This script utilizes `ltf()` and `ltfStats()` from the lower_tf library.
The `ltf()` function determines the appropriate lower timeframe from the selected calculation mode and chart timeframe, and returns it in a format that can be used with request.security_lower_tf() .
The `ltfStats()` function, on the other hand, is used to compute and display statistical information about the lower timeframe in an information box.
• The script utilizes display.data_window and display.status_line to restrict the display of certain plots.
These new built-ins allow coders to fine-tune where a script’s plot values are displayed.
• The newly added session.isfirstbar_regular built-in allows for resetting the CVD segments at the start of the regular session.
• The VisibleChart library developed by our resident PineCoders team leverages the chart.left_visible_bar_time and chart.right_visible_bar_time variables to optimize the performance of this script.
These variables identify the opening time of the leftmost and rightmost visible bars on the chart, allowing the script to recalculate and draw objects only within the range of visible bars as the user scrolls.
This functionality also enables the scaling of the oscillator zones.
These variables are just a couple of the many new built-ins available in the chart.* namespace.
For more information, check out this blog post or look them up by typing "chart." in the Pine Script™ Reference Manual .
• Our ta library has undergone significant updates recently, including the incorporation of the `aroon()` indicator used as a method for resetting CVD segments within this script.
Revisit the library to see more of the newly added content!
Look first. Then leap.
Intrabar Efficiency Ratio█ OVERVIEW
This indicator displays a directional variant of Perry Kaufman's Efficiency Ratio, designed to gauge the "efficiency" of intrabar price movement by comparing the sum of movements of the lower timeframe bars composing a chart bar with the respective bar's movement on an average basis.
█ CONCEPTS
Efficiency Ratio (ER)
Efficiency Ratio was first introduced by Perry Kaufman in his 1995 book, titled "Smarter Trading". It is the ratio of absolute price change to the sum of absolute changes on each bar over a period. This tells us how strong the period's trend is relative to the underlying noise. Simply put, it's a measure of price movement efficiency. This ratio is the modulator utilized in Kaufman's Adaptive Moving Average (KAMA), which is essentially an Exponential Moving Average (EMA) that adapts its responsiveness to movement efficiency.
ER's output is bounded between 0 and 1. A value of 0 indicates that the starting price equals the ending price for the period, which suggests that price movement was maximally inefficient. A value of 1 indicates that price had travelled no more than the distance between the starting price and the ending price for the period, which suggests that price movement was maximally efficient. A value between 0 and 1 indicates that price had travelled a distance greater than the distance between the starting price and the ending price for the period. In other words, some degree of noise was present which resulted in reduced efficiency over the period.
As an example, let's say that the price of an asset had moved from $15 to $14 by the end of a period, but the sum of absolute changes for each bar of data was $4. ER would be calculated like so:
ER = abs(14 - 15)/4 = 0.25
This suggests that the trend was only 25% efficient over the period, as the total distanced travelled by price was four times what was required to achieve the change over the period.
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 intrabars at the LTF of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This script determines which LTF to use by examining the chart's timeframe. The LTF determines how many intrabars are examined for each chart bar; the lower the timeframe, the more intrabars are analyzed, but fewer chart bars can display indicator information because there is a limit to the total number of intrabars that can be analyzed.
Intrabar precision
The precision of calculations increases with the number of intrabars analyzed for each chart bar. As there is a 100K limit to the number of intrabars that can be analyzed by a script, a trade-off occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
Intrabar Efficiency Ratio (IER)
Intrabar Efficiency Ratio applies the concept of ER on an intrabar level. Rather than comparing the overall change to the sum of bar changes for the current chart's timeframe over a period, IER compares single bar changes for the current chart's timeframe to the sum of absolute intrabar changes, then applies smoothing to the result. This gives an indication of how efficient changes are on the current chart's timeframe for each bar of data relative to LTF bar changes on an average basis. Unlike the standard ER calculation, we've opted to preserve directional information by not taking the absolute value of overall change, thus allowing it to be utilized as a momentum oscillator. However, by taking the absolute value of this oscillator, it could potentially serve as a replacement for ER in the design of adaptive moving averages.
Since this indicator preserves directional information, IER can be regarded as similar to the Chande Momentum Oscillator (CMO) , which was presented in 1994 by Tushar Chande in "The New Technical Trader". Both CMO and ER essentially measure the same relationship between trend and noise. CMO simply differs in scale, and considers the direction of overall changes.
█ FEATURES
Display
Three different display types are included within the script:
• Line : Displays the middle length MA of the IER as a line .
Color for this display can be customized via the "Line" portion of the "Visuals" section in the script settings.
• Candles : Displays the non-smooth IER and two moving averages of different lengths as candles .
The `open` and `close` of the candle are the longest and shortest length MAs of the IER respectively.
The `high` and `low` of the candle are the max and min of the IER, longest length MA of the IER, and shortest length MA of the IER respectively.
Colors for this display can be customized via the "Candles" portion of the "Visuals" section in the script settings.
• Circles : Displays three MAs of the IER as circles .
The color of each plot depends on the percent rank of the respective MA over the previous 100 bars.
Different colors are triggered when ranks are below 10%, between 10% and 50%, between 50% and 90%, and above 90%.
Colors for this display can be customized via the "Circles" portion of the "Visuals" section in the script settings.
With either display type, an optional information box can be displayed. This box shows the LTF that the script is using, the average number of lower timeframe bars per chart bar, and the number of chart bars that contain LTF data.
Specifying intrabar precision
Ten options are included in the script to control the number of intrabars used per chart bar for calculations. The greater the number of intrabars per chart bar, the fewer chart bars can be analyzed.
The first five options allow users to specify the approximate amount of chart bars to be covered:
• Least Precise (Most chart bars) : Covers all chart bars by dividing the current timeframe by four.
This ensures the highest level of intrabar precision while achieving complete coverage for the dataset.
• Less Precise (Some chart bars) & More Precise (Less chart bars) : These options calculate a stepped LTF in relation to the current chart's timeframe.
• Very precise (2min intrabars) : Uses the second highest quantity of intrabars possible with the 2min LTF.
• Most precise (1min intrabars) : Uses the maximum quantity of intrabars possible with the 1min LTF.
The stepped lower timeframe for "Less Precise" and "More Precise" options is calculated from the current chart's timeframe as follows:
Chart Timeframe Lower Timeframe
Less Precise More Precise
< 1hr 1min 1min
< 1D 15min 1min
< 1W 2hr 30min
> 1W 1D 60min
The last five options allow users to specify an approximate fixed number of intrabars to analyze per chart bar. The available choices are 12, 24, 50, 100, and 250. The script will calculate the LTF which most closely approximates the specified number of intrabars per chart bar. Keep in mind that due to factors such as the length of a ticker's sessions and rounding of the LTF, it is not always possible to produce the exact number specified. However, the script will do its best to get as close to the value as possible.
Specifying MA type
Seven MA types are included in the script for different averaging effects:
• Simple
• Exponential
• Wilder (RMA)
• Weighted
• Volume-Weighted
• Arnaud Legoux with `offset` and `sigma` set to 0.85 and 6 respectively.
• Hull
Weighting
This script includes the option to weight IER values based on the percent rank of absolute price changes on the current chart's timeframe over a specified period, which can be enabled by checking the "Weigh using relative close changes" option in the script settings. This places reduced emphasis on IER values from smaller changes, which may help to reduce noise in the output.
█ FOR Pine Script™ CODERS
• This script imports the recently published lower_ltf library for calculating intrabar statistics and the optimal lower timeframe in relation to the current chart's timeframe.
• This script uses the recently released request.security_lower_tf() Pine Script™ function discussed in this blog post .
It works differently from the usual request.security() in that it can only be used on LTFs, and it returns an array containing one value per intrabar.
This makes it much easier for programmers to access intrabar information.
• This script implements a new recommended best practice for tables which works faster and reduces memory consumption.
Using this new method, tables are declared only once with var , as usual. Then, on the first bar only, we use table.cell() to populate the table.
Finally, table.set_*() functions are used to update attributes of table cells on the last bar of the dataset.
This greatly reduces the resources required to render tables.
Look first. Then leap.
CVD - Cumulative Volume Delta Candles█ OVERVIEW
This indicator displays cumulative volume delta in candle form. It uses intrabar information to obtain more precise volume delta information than methods using only the chart's timeframe.
█ CONCEPTS
Bar polarity
By bar polarity , we mean the direction of a bar, which is determined by looking at the bar's close vs its open .
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 bars at the lower timeframe of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This script uses a LTF to access intrabars. The lower the LTF, the more intrabars are analyzed, but the less chart bars can display CVD information because there is a limit to the total number of intrabars that can be analyzed.
Volume delta
The volume delta concept divides a bar's volume in "up" and "down" volumes. The delta is calculated by subtracting down volume from up volume. Many calculation techniques exist to isolate up and down volume within a bar. The simplest techniques use the polarity of interbar price changes to assign their volume to up or down slots, e.g., On Balance Volume or the Klinger Oscillator . Others such as Chaikin Money Flow use assumptions based on a bar's OHLC values. The most precise calculation method uses tick data and assigns the volume of each tick to the up or down slot depending on whether the transaction occurs at the bid or ask price. While this technique is ideal, it requires huge amounts of data on historical bars, which usually limits the historical depth of charts and the number of symbols for which tick data is available.
This indicator uses intrabar analysis to achieve a compromise between the simplest and most precise methods of calculating volume delta. In the context where historical tick data is not yet available on TradingView, intrabar analysis is the most precise technique to calculate volume delta on historical bars on our charts. Our Volume Profile indicators use it. Other volume delta indicators in our Community Scripts such as the Realtime 5D Profile use realtime chart updates to achieve more precise volume delta calculations, but that method cannot be used on historical bars, so those indicators only work in real time.
This is the logic we use to assign intrabar volume to up or down slots:
• If the intrabar's open and close values are different, their relative position is used.
• If the intrabar's open and close values are the same, the difference between the intrabar's close and the previous intrabar's close is used.
• As a last resort, when there is no movement during an intrabar and it closes at the same price as the previous intrabar, the last known polarity is used.
Once all intrabars making up a chart bar have been analyzed and the up or down property of each intrabar's volume determined, the up volumes are added and the down volumes subtracted. The resulting value is volume delta for that chart bar.
█ FEATURES
CVD Candles
Cumulative Volume Delta Candles present volume delta information as it evolves during a period of time.
This is how each candle's levels are calculated:
• open : Each candle's' open level is the cumulative volume delta for the current period at the start of the bar.
This value becomes zero on the first candle following a CVD reset.
The candles after the first one always open where the previous candle closed.
The candle's high, low and close levels are then calculated by adding or subtracting a volume value to the open.
• high : The highest volume delta value found in intrabars. If it is not higher than the volume delta for the bar, then that candle will have no upper wick.
• low : The lowest volume delta value found in intrabars. If it is not lower than the volume delta for the bar, then that candle will have no lower wick.
• close : The aggregated volume delta for all intrabars. If volume delta is positive for the chart bar, then the candle's close will be higher than its open, and vice versa.
The candles are plotted in one of two configurable colors, depending on the polarity of volume delta for the bar.
CVD resets
The "cumulative" part of the indicator's name stems from the fact that calculations accumulate during a period of time. This allows you to analyze the progression of volume delta across manageable chunks, which is often more useful than looking at volume delta cumulated from the beginning of a chart's history.
You can configure the reset period using the "CVD Resets" input, which offers the following selections:
• None : Calculations do not reset.
• On a fixed higher timeframe : Calculations reset on the higher timeframe you select in the "Fixed higher timeframe" field.
• At a fixed time that you specify.
• At the beginning of the regular session .
• On a stepped higher timeframe : Calculations reset on a higher timeframe automatically stepped using the chart's timeframe and following these rules:
Chart TF HTF
< 1min 1H
< 3H 1D
<= 12H 1W
< 1W 1M
>= 1W 1Y
The indicator's background shows where resets occur.
Intrabar precision
The precision of calculations increases with the number of intrabars analyzed for each chart bar. It is controlled through the script's "Intrabar precision" input, which offers the following selections:
• Least precise, covering many chart bars
• Less precise, covering some chart bars
• More precise, covering less chart bars
• Most precise, 1min intrabars
As there is a limit to the number of intrabars that can be analyzed by a script, a tradeoff occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
Total volume candles
You can choose to display candles showing the total intrabar volume for the chart bar. This provides you with more context to evaluate a bar's volume delta by showing it relative to the sum of intrabar volume. Note that because of the reasons explained in the "NOTES" section further down, the total volume is the sum of all intrabar volume rather than the volume of the bar at the chart's timeframe.
Total volume candles can be configured with their own up and down colors. You can also control the opacity of their bodies to make them more or less prominent. This publication's chart shows the indicator with total volume candles. They are turned off by default, so you will need to choose to display them in the script's inputs for them to plot.
Divergences
Divergences occur when the polarity of volume delta does not match that of the chart bar. You can identify divergences by coloring the CVD candles differently for them, or by coloring the indicator's background.
Information box
An information box in the lower-left corner of the indicator displays the HTF used for resets, the LTF used for intrabars, and the average quantity of intrabars per chart bar. You can hide the box using the script's inputs.
█ INTERPRETATION
The first thing to look at when analyzing CVD candles is the side of the zero line they are on, as this tells you if CVD is generally bullish or bearish. Next, one should consider the relative position of successive candles, just as you would with a price chart. Are successive candles trending up, down, or stagnating? Keep in mind that whatever trend you identify must be considered in the context of where it appears with regards to the zero line; an uptrend in a negative CVD (below the zero line) may not be as powerful as one taking place in positive CVD values, but it may also predate a movement into positive CVD territory. The same goes with stagnation; a trader in a long position will find stagnation in positive CVD territory less worrisome than stagnation under the zero line.
After consideration of the bigger picture, one can drill down into the details. Exactly what you are looking for in markets will, of course, depend on your trading methodology, but you may find it useful to:
• Evaluate volume delta for the bar in relation to price movement for that bar.
• Evaluate the proportion that volume delta represents of total volume.
• Notice divergences and if the chart's candle shape confirms a hesitation point, as a Doji would.
• Evaluate if the progress of CVD candles correlates with that of chart bars.
• Analyze the wicks. As with price candles, long wicks tend to indicate weakness.
Always keep in mind that unless you have chosen not to reset it, your CVD resets for each period, whether it is fixed or automatically stepped. Consequently, any trend from the preceding period must re-establish itself in the next.
█ NOTES
Know your volume
Traders using volume information should understand the volume data they are using: where it originates and what transactions it includes, as this can vary with instruments, sectors, exchanges, timeframes, and between historical and realtime bars. The information used to build a chart's bars and display volume comes from data providers (exchanges, brokers, etc.) who often maintain distinct feeds for intraday and end-of-day (EOD) timeframes. How volume data is assembled for the two feeds depends on how instruments are traded in that sector and/or the volume reporting policy for each feed. Instruments from crypto and forex markets, for example, will often display similar volume on both feeds. Stocks will often display variations because block trades or other types of trades may not be included in their intraday volume data. Futures will also typically display variations.
Note that as intraday vs EOD variations exist for historical bars on some instruments, differences may also exist between the realtime feeds used on intraday vs 1D or greater timeframes for those same assets. Realtime reporting rules will often be different from historical feed reporting rules, so variations between realtime feeds will often be different from the variations between historical feeds for the same instrument. The Volume X-ray indicator can help you analyze differences between intraday and EOD volumes for the instruments you trade.
If every unit of volume is both bought by a buyer and sold by a seller, how can volume delta make sense?
Traders who do not understand the mechanics of matching engines (the exchange software that matches orders from buyers and sellers) sometimes argue that the concept of volume delta is flawed, as every unit of volume is both bought and sold. While they are rigorously correct in stating that every unit of volume is both bought and sold, they overlook the fact that information can be mined by analyzing variations in the price of successive ticks, or in our case, intrabars.
Our calculations model the situation where, in fully automated order handling, market orders are generally matched to limit orders sitting in the order book. Buy market orders are matched to quotes at the ask level and sell market orders are matched to quotes at the bid level. As explained earlier, we use the same logic when comparing intrabar prices. While using intrabar analysis does not produce results as precise as when individual transactions — or ticks — are analyzed, results are much more precise than those of methods using only chart prices.
Not only does the concept underlying volume delta make sense, it provides a window on an oft-overlooked variable which, with price and time, is the only basic information representing market activity. Furthermore, because the calculation of volume delta also uses price and time variations, one could conceivably surmise that it can provide a more complete model than ones using price and time only. Whether or not volume delta can be useful in your trading practice, as usual, is for you to decide, as each trader's methodology is different.
For Pine Script™ coders
As our latest Polarity Divergences publication, this script uses the recently released request.security_lower_tf() Pine Script™ function discussed in this blog post . It works differently from the usual request.security() in that it can only be used at LTFs, and it returns an array containing one value per intrabar. This makes it much easier for programmers to access intrabar information.
Look first. Then leap.
HighTimeframeSamplingLibrary "HighTimeframeSampling"
Library for sampling high timeframe (HTF) data. Returns an array of historical values, an arbitrary historical value, or the highest/lowest value in a range, spending a single security() call.
An optional pass-through for the chart timeframe is included. Other than that case, the data is fixed and does not alter over the course of the HTF bar. It behaves consistently on historical and elapsed realtime bars.
The first version returns floating-point numbers only. I might extend it if there's interest.
🙏 Credits: This library is (yet another) attempt at a solution of the problems in using HTF data that were laid out by Pinecoders - to whom, especially to Luc F, many thanks are due - in "security() revisited" - which I recommend you consult first. Go ahead, I'll wait.
All code is my own.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WHAT'S THE PROBLEM? OR, WHY NOT JUST USE SECURITY()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are many difficulties with using HTF data, and many potential solutions. It's not really possible to convey it only in words: you need to see it on a chart.
Before using this library, please refer to my other HTF library, HighTimeframeTiming: which explains it extensively, compares many different solutions, and demonstrates (what I think are) the advantages of using this very library, namely, that it's stable, accurate, versatile and inexpensive. Then if you agree, come back here and choose your function.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MOAR EXPLANATION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
🧹 Housekeeping: To see which plot is which, turn line labels on: Settings > Scales > Indicator Name Label. Vertical lines at the top of the chart show the open of a HTF bar: grey for historical and white for real-time bars.
‼ LIMITATIONS: To avoid strange behaviour, use this library on liquid assets and at chart timeframes high enough to reliably produce updates at least once per bar period.
A more conventional and universal limitation is that the library does not offer an unlimited view of historical bars. You need to define upfront how many HTF bars you want to store. Very large numbers might conceivably run into data or performance issues.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BRING ON THE FUNCTIONS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@function f_HTF_Value(string _HTF, float _source, int _arrayLength, int _HTF_Offset, bool _useLiveDataOnChartTF=false)
Returns a floating-point number from a higher timeframe, with a historical operator within an abitrary (but limited) number of bars.
@param string _HTF is the string that represents the higher timeframe. It must be in a format that the request.security() function recognises. The input timeframe cannot be lower than the chart timeframe or an error is thrown.
@param float _source is the source value that you want to sample, e.g. close, open, etc., or you can use any floating-point number.
@param int _arrayLength is the number of HTF bars you want to store and must be greater than zero. You can't go back further in history than this number of bars (minus one, because the current/most recent available bar is also stored).
@param int _HTF_Offset is the historical operator for the value you want to return. E.g., if you want the most recent fixed close, _source=close and _HTF_Offset = 0. If you want the one before that, _HTF_Offset=1, etc.
The number of HTF bars to look back must be zero or more, and must be one less than the number of bars stored.
@param bool _useLiveDataOnChartTF uses live data on the chart timeframe.
If the higher timeframe is the same as the chart timeframe, store the live value (i.e., from this very bar). For all truly higher timeframes, store the fixed value (i.e., from the previous bar).
The default is to use live data for the chart timeframe, so that this function works intuitively, that is, it does not fix data unless it has to (i.e., because the data is from a higher timeframe).
This means that on default settings, on the chart timeframe, it matches the raw source values from security(){0}.
You can override this behaviour by passing _useLiveDataOnChartTF as false. Then it will fix all data for all timeframes.
@returns a floating-point value that you requested from the higher timeframe.
@function f_HTF_Array(string _HTF, float _source, int _arrayLength, bool _useLiveDataOnChartTF=false, int _startIn, int _endIn)
Returns an array of historical values from a higher timeframe, starting with the current bar. Optionally, returns a slice of the array. The array is in reverse chronological order, i.e., index 0 contains the most recent value.
@param string _HTF is the string that represents the higher timeframe. It must be in a format that the request.security() function recognises. The input timeframe cannot be lower than the chart timeframe or an error is thrown.
@param float _source is the source value that you want to sample, e.g. close, open, etc., or you can use any floating-point number.
@param int _arrayLength is the number of HTF bars you want to keep in the array.
@param bool _useLiveDataOnChartTF uses live data on the chart timeframe.
If the higher timeframe is the same as the chart timeframe, store the live value (i.e., from this very bar). For all truly higher timeframes, store the fixed value (i.e., from the previous bar).
The default is to use live data for the chart timeframe, so that this function works intuitively, that is, it does not fix data unless it has to (i.e., because the data is from a higher timeframe).
This means that on default settings, on the chart timeframe, it matches raw source values from security().
You can override this behaviour by passing _useLiveDataOnChartTF as false. Then it will fix all data for all timeframes.
@param int _startIn is the array index to begin taking a slice. Must be at least one less than the length of the array; if out of bounds it is corrected to 0.
@param int _endIn is the array index BEFORE WHICH to end the slice. If the ending index of the array slice would take the slice past the end of the array, it is corrected to the end of the array. The ending index of the array slice must be greater than or equal to the starting index. If the end is less than the start, the whole array is returned. If the starting index is the same as the ending index, an empty array is returned. If either the starting or ending index is negative, the entire array is returned (which is the default behaviour; this is effectively a switch to bypass the slicing without taking up an extra parameter).
@returns an array of HTF values.
@function f_HTF_Highest(string _HTF="", float _source, int _arrayLength, bool _useLiveDataOnChartTF=true, int _rangeIn)
Returns the highest value within a range consisting of a given number of bars back from the most recent bar.
@param string _HTF is the string that represents the higher timeframe. It must be in a format that the request.security() function recognises. The input timeframe cannot be lower than the chart timeframe or an error is thrown.
@param float _source is the source value that you want to sample, e.g. close, open, etc., or you can use any floating-point number.
@param int _arrayLength is the number of HTF bars you want to store and must be greater than zero. You can't have a range greater than this number.
@param bool _useLiveDataOnChartTF uses live data on the chart timeframe.
If the higher timeframe is the same as the chart timeframe, store the live value (i.e., from this very bar). For all truly higher timeframes, store the fixed value (i.e., from the previous bar).
The default is to use live data for the chart timeframe, so that this function works intuitively, that is, it does not fix data unless it has to (i.e., because the data is from a higher timeframe).
This means that on default settings, on the chart timeframe, it matches raw source values from security().
You can override this behaviour by passing _useLiveDataOnChartTF as false. Then it will fix all data for all timeframes.
@param _rangeIn is the number of bars to include in the range of bars from which we want to find the highest value. It is NOT the historical operator of the last bar in the range. The range always starts at the current bar. A value of 1 doesn't make much sense but the function will generously return the only value it can anyway. A value less than 1 doesn't make sense and will return an error. A value that is higher than the number of stored values will be corrected to equal the number of stored values.
@returns a floating-point number representing the highest value in the range.
@function f_HTF_Lowest(string _HTF="", float _source, int _arrayLength, bool _useLiveDataOnChartTF=true, int _rangeIn)
Returns the lowest value within a range consisting of a given number of bars back from the most recent bar.
@param string _HTF is the string that represents the higher timeframe. It must be in a format that the request.security() function recognises. The input timeframe cannot be lower than the chart timeframe or an error is thrown.
@param float _source is the source value that you want to sample, e.g. close, open, etc., or you can use any floating-point number.
@param int _arrayLength is the number of HTF bars you want to store and must be greater than zero. You can't go back further in history than this number of bars (minus one, because the current/most recent available bar is also stored).
@param bool _useLiveDataOnChartTF uses live data on the chart timeframe.
If the higher timeframe is the same as the chart timeframe, store the live value (i.e., from this very bar). For all truly higher timeframes, store the fixed value (i.e., from the previous bar).
The default is to use live data for the chart timeframe, so that this function works intuitively, that is, it does not fix data unless it has to (i.e., because the data is from a higher timeframe).
This means that on default settings, on the chart timeframe, it matches raw source values from security().
You can override this behaviour by passing _useLiveDataOnChartTF as false. Then it will fix all data for all timeframes.
@param _rangeIn is the number of bars to include in the range of bars from which we want to find the highest value. It is NOT the historical operator of the last bar in the range. The range always starts at the current bar. A value of 1 doesn't make much sense but the function will generously return the only value it can anyway. A value less than 1 doesn't make sense and will return an error. A value that is higher than the number of stored values will be corrected to equal the number of stored values.
@returns a floating-point number representing the lowest value in the range.
LeoLibraryLibrary "LeoLibrary"
A collection of custom tools & utility functions commonly used with my scripts
getDecimals() Calculates how many decimals are on the quote price of the current market
Returns: The current decimal places on the market quote price
truncate(float, float) Truncates (cuts) excess decimal places
Parameters:
float : _number The number to truncate
float : _decimalPlaces (default=2) The number of decimal places to truncate to
Returns: The given _number truncated to the given _decimalPlaces
toWhole(float) Converts pips into whole numbers
Parameters:
float : _number The pip number to convert into a whole number
Returns: The converted number
toPips(float) Converts whole numbers back into pips
Parameters:
float : _number The whole number to convert into pips
Returns: The converted number
av_getPositionSize(float, float, float, float) Calculates OANDA forex position size for AutoView based on the given parameters
Parameters:
float : _balance The account balance to use
float : _risk The risk percentage amount (as a whole number - eg. 1 = 1% risk)
float : _stopPoints The stop loss distance in POINTS (not pips)
float : _conversionRate The conversion rate of our account balance currency
Returns: The calculated position size (in units - only compatible with OANDA)
getMA(int, string) Gets a Moving Average based on type
Parameters:
int : _length The MA period
string : _maType The type of MA
Returns: A moving average with the given parameters
getEAP(float) Performs EAP stop loss size calculation (eg. ATR >= 20.0 and ATR < 30, returns 20)
Parameters:
float : _atr The given ATR to base the EAP SL calculation on
Returns: The EAP SL converted ATR size
barsAboveMA(int, float) Counts how many candles are above the MA
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to check
Returns: The bar count of how many recent bars are above the MA
barsBelowMA(int, float) Counts how many candles are below the MA
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to reference
Returns: The bar count of how many recent bars are below the EMA
barsCrossedMA(int, float) Counts how many times the EMA was crossed recently
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to reference
Returns: The bar count of how many times price recently crossed the EMA
getPullbackBarCount(int, int) Counts how many green & red bars have printed recently (ie. pullback count)
Parameters:
int : _lookback The lookback period to look back over
int : _direction The color of the bar to count (1 = Green, -1 = Red)
Returns: The bar count of how many candles have retraced over the given lookback & direction
getBodySize() Gets the current candle's body size (in POINTS, divide by 10 to get pips)
Returns: The current candle's body size in POINTS
getTopWickSize() Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's top wick size in POINTS
getBottomWickSize() Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's bottom wick size in POINTS
getBodyPercent() Gets the current candle's body size as a percentage of its entire size including its wicks
Returns: The current candle's body size percentage
isHammer(float, bool) Checks if the current bar is a hammer candle based on the given parameters
Parameters:
float : _fib (default=0.382) The fib to base candle body on
bool : _colorMatch (default=false) Does the candle need to be green? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a hammer candle
isStar(float, bool) Checks if the current bar is a shooting star candle based on the given parameters
Parameters:
float : _fib (default=0.382) The fib to base candle body on
bool : _colorMatch (default=false) Does the candle need to be red? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a shooting star candle
isDoji(float, bool) Checks if the current bar is a doji candle based on the given parameters
Parameters:
float : _wickSize (default=2) The maximum top wick size compared to the bottom (and vice versa)
bool : _bodySize (default=0.05) The maximum body size as a percentage compared to the entire candle size
Returns: A boolean - true if the current bar matches the requirements of a doji candle
isBullishEC(float, float, bool) Checks if the current bar is a bullish engulfing candle
Parameters:
float : _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
float : _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
bool : _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bullish engulfing candle
isBearishEC(float, float, bool) Checks if the current bar is a bearish engulfing candle
Parameters:
float : _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
float : _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
bool : _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bearish engulfing candle
timeFilter(string, bool) Determines if the current price bar falls inside the specified session
Parameters:
string : _sess The session to check
bool : _useFilter (default=false) Whether or not to actually use this filter
Returns: A boolean - true if the current bar falls within the given time session
dateFilter(int, int) Determines if this bar's time falls within date filter range
Parameters:
int : _startTime The UNIX date timestamp to begin searching from
int : _endTime the UNIX date timestamp to stop searching from
Returns: A boolean - true if the current bar falls within the given dates
dayFilter(bool, bool, bool, bool, bool, bool, bool) Checks if the current bar's day is in the list of given days to analyze
Parameters:
bool : _monday Should the script analyze this day? (true/false)
bool : _tuesday Should the script analyze this day? (true/false)
bool : _wednesday Should the script analyze this day? (true/false)
bool : _thursday Should the script analyze this day? (true/false)
bool : _friday Should the script analyze this day? (true/false)
bool : _saturday Should the script analyze this day? (true/false)
bool : _sunday Should the script analyze this day? (true/false)
Returns: A boolean - true if the current bar's day is one of the given days
atrFilter(float, float) Checks the current bar's size against the given ATR and max size
Parameters:
float : _atr (default=ATR 14 period) The given ATR to check
float : _maxSize The maximum ATR multiplier of the current candle
Returns: A boolean - true if the current bar's size is less than or equal to _atr x _maxSize
fillCell(table, int, int, string, string, color, color) This updates the given table's cell with the given values
Parameters:
table : _table The table ID to update
int : _column The column to update
int : _row The row to update
string : _title The title of this cell
string : _value The value of this cell
color : _bgcolor The background color of this cell
color : _txtcolor The text color of this cell
Returns: A boolean - true if the current bar falls within the given dates
ZenLibraryLibrary "ZenLibrary"
A collection of custom tools & utility functions commonly used with my scripts.
getDecimals() Calculates how many decimals are on the quote price of the current market
Returns: The current decimal places on the market quote price
truncate(float, float) Truncates (cuts) excess decimal places
Parameters:
float : _number The number to truncate
float : _decimalPlaces (default=2) The number of decimal places to truncate to
Returns: The given _number truncated to the given _decimalPlaces
toWhole(float) Converts pips into whole numbers
Parameters:
float : _number The pip number to convert into a whole number
Returns: The converted number
toPips(float) Converts whole numbers back into pips
Parameters:
float : _number The whole number to convert into pips
Returns: The converted number
av_getPositionSize(float, float, float, float) Calculates OANDA forex position size for AutoView based on the given parameters
Parameters:
float : _balance The account balance to use
float : _risk The risk percentage amount (as a whole number - eg. 1 = 1% risk)
float : _stopPoints The stop loss distance in POINTS (not pips)
float : _conversionRate The conversion rate of our account balance currency
Returns: The calculated position size (in units - only compatible with OANDA)
getMA(int, string) Gets a Moving Average based on type
Parameters:
int : _length The MA period
string : _maType The type of MA
Returns: A moving average with the given parameters
getEAP(float) Performs EAP stop loss size calculation (eg. ATR >= 20.0 and ATR < 30, returns 20)
Parameters:
float : _atr The given ATR to base the EAP SL calculation on
Returns: The EAP SL converted ATR size
barsAboveMA(int, float) Counts how many candles are above the MA
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to check
Returns: The bar count of how many recent bars are above the MA
barsBelowMA(int, float) Counts how many candles are below the MA
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to reference
Returns: The bar count of how many recent bars are below the EMA
barsCrossedMA(int, float) Counts how many times the EMA was crossed recently
Parameters:
int : _lookback The lookback period to look back over
float : _ma The moving average to reference
Returns: The bar count of how many times price recently crossed the EMA
getPullbackBarCount(int, int) Counts how many green & red bars have printed recently (ie. pullback count)
Parameters:
int : _lookback The lookback period to look back over
int : _direction The color of the bar to count (1 = Green, -1 = Red)
Returns: The bar count of how many candles have retraced over the given lookback & direction
getBodySize() Gets the current candle's body size (in POINTS, divide by 10 to get pips)
Returns: The current candle's body size in POINTS
getTopWickSize() Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's top wick size in POINTS
getBottomWickSize() Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
Returns: The current candle's bottom wick size in POINTS
getBodyPercent() Gets the current candle's body size as a percentage of its entire size including its wicks
Returns: The current candle's body size percentage
isHammer(float, bool) Checks if the current bar is a hammer candle based on the given parameters
Parameters:
float : _fib (default=0.382) The fib to base candle body on
bool : _colorMatch (default=false) Does the candle need to be green? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a hammer candle
isStar(float, bool) Checks if the current bar is a shooting star candle based on the given parameters
Parameters:
float : _fib (default=0.382) The fib to base candle body on
bool : _colorMatch (default=false) Does the candle need to be red? (true/false)
Returns: A boolean - true if the current bar matches the requirements of a shooting star candle
isDoji(float, bool) Checks if the current bar is a doji candle based on the given parameters
Parameters:
float : _wickSize (default=2) The maximum top wick size compared to the bottom (and vice versa)
bool : _bodySize (default=0.05) The maximum body size as a percentage compared to the entire candle size
Returns: A boolean - true if the current bar matches the requirements of a doji candle
isBullishEC(float, float, bool) Checks if the current bar is a bullish engulfing candle
Parameters:
float : _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
float : _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
bool : _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bullish engulfing candle
isBearishEC(float, float, bool) Checks if the current bar is a bearish engulfing candle
Parameters:
float : _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
float : _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
bool : _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
Returns: A boolean - true if the current bar matches the requirements of a bearish engulfing candle
timeFilter(string, bool) Determines if the current price bar falls inside the specified session
Parameters:
string : _sess The session to check
bool : _useFilter (default=false) Whether or not to actually use this filter
Returns: A boolean - true if the current bar falls within the given time session
dateFilter(int, int) Determines if this bar's time falls within date filter range
Parameters:
int : _startTime The UNIX date timestamp to begin searching from
int : _endTime the UNIX date timestamp to stop searching from
Returns: A boolean - true if the current bar falls within the given dates
dayFilter(bool, bool, bool, bool, bool, bool, bool) Checks if the current bar's day is in the list of given days to analyze
Parameters:
bool : _monday Should the script analyze this day? (true/false)
bool : _tuesday Should the script analyze this day? (true/false)
bool : _wednesday Should the script analyze this day? (true/false)
bool : _thursday Should the script analyze this day? (true/false)
bool : _friday Should the script analyze this day? (true/false)
bool : _saturday Should the script analyze this day? (true/false)
bool : _sunday Should the script analyze this day? (true/false)
Returns: A boolean - true if the current bar's day is one of the given days
atrFilter(float, float) Checks the current bar's size against the given ATR and max size
Parameters:
float : _atr (default=ATR 14 period) The given ATR to check
float : _maxSize The maximum ATR multiplier of the current candle
Returns: A boolean - true if the current bar's size is less than or equal to _atr x _maxSize
fillCell(table, int, int, string, string, color, color) This updates the given table's cell with the given values
Parameters:
table : _table The table ID to update
int : _column The column to update
int : _row The row to update
string : _title The title of this cell
string : _value The value of this cell
color : _bgcolor The background color of this cell
color : _txtcolor The text color of this cell
Returns: A boolean - true if the current bar falls within the given dates
Comprehensive Market AnalyzerVERSION 2.0:
Notice to users: To better reflect its extensive features, this indicator has been renamed from "Tsūrubokkusu (Toolbox) 🧰" to "Comprehensive Market Analyzer". Thank you for your understanding and adaptation to this change.
Purpose and Usage:
The Comprehensive Market Analyzer is designed to provide traders with a holistic view of market conditions by integrating various technical indicators into a single,
cohesive tool. Each indicator has been carefully selected and improved to work together, offering enhanced customization and advanced market insights.
This combination allows for more comprehensive market analysis, improved decision-making, and efficient trading strategies.
📘 Machine Learning Integration
Purpose : Utilizes machine learning algorithms to analyze past market data and provides predictive insights based on historical data.
Usage : Activate machine learning features, set lookback windows, influence weighting, and start bar for improved trend predictions.
Activate Machine Learning :
Description : Enables advanced machine learning features that analyze past market data.
Details : This feature allows the algorithm to use historical data to forecast market movements, providing traders with enhanced predictive insights on historical data.
Kernel Lookback Window :
Description : Sets the number of previous bars that the algorithm will analyze.
Details : A higher number provides a broader view of market trends, while a lower number makes the model more sensitive to recent changes.
Kernel Influence Weighting :
Description : Adjusts the emphasis on recent versus older data.
Details : Increasing this value gives more importance to recent data, potentially making predictions more responsive to new trends.
Kernel Calculation Start Bar :
Description : Specifies the bar number from which to start the machine learning calculations.
Details : Avoids early data which may contain excessive noise and less reliable market signals.
Kernel Functions :
Gaussian Kernel :
Description : Uses a Gaussian distribution to weight historical data, focusing on more recent data points for trend analysis.
Details : Calculates weights based on the Gaussian distribution, emphasizing data points closer to the present.
Laplacian Kernel :
Description : Applies Laplacian distribution, emphasizing data points closer to the current time more heavily.
Details : Uses the Laplacian function to provide a different perspective on data weighting.
RBF Kernel :
Description : Utilizes a Radial Basis Function for smoothing and analyzing data, providing a different approach to trend prediction.
Details : Applies the RBF function to smooth data and enhance the accuracy of trend predictions.
Wavelet Kernel :
Description : Applies wavelet transform for analyzing frequency components, helping to detect patterns in the price movements.
Details : Uses wavelet-based calculations to focus on specific frequency components within the data, aiding in pattern recognition.
📘 Enhanced Ichimoku Kinkō Hyō Integration
Purpose : Provides a comprehensive overview of market trends and momentum using the Ichimoku Kinkō Hyō indicator.
Usage : Display various components of the Ichimoku Kinkō Hyō, customize their appearance, provides additional calculations for trend analysis.
Display Ichimoku Kinkō Hyō :
Description : Toggle to show or hide the Ichimoku Kinkō hyō indicator.
Details : This indicator helps traders see support and resistance levels, trend direction, and potential future movements.
Activate Heikin-Ashi Source :
Description : Switches between regular price data and Heikin-Ashi candles for analysis.
Details : Heikin-Ashi candles smooth price data, making trends easier to spot.
Display Tenkan-Sen Line :
Description : Shows the Tenkan-Sen line, a key short-term trend indicator.
Color Customization : Set the color of the Tenkan-Sen line for better visibility.
Minimum Length : Determine the shortest period for calculating the Tenkan-Sen line.
Maximum Length : Determine the longest period for calculating the Tenkan-Sen line.
Dynamic Length Adjustment : Automatically adjusts the length of the Tenkan-Sen based on market conditions.
Display Kijun-Sen Line :
Description : Shows the Kijun-Sen line, a key medium-term trend indicator.
Color Customization : Set the color of the Kijun-Sen line for better visibility.
Minimum Length : Determine the shortest period for calculating the Kijun-Sen line.
Maximum Length : Determine the longest period for calculating the Kijun-Sen line.
Dynamic Length Adjustment : Automatically adjusts the length of the Kijun-Sen based on market conditions.
Kijun-Sen Divider Tool : Adjust the sensitivity of the Kijun-Sen calculation.
Display Chikou Span :
Description : Shows the Chikou Span, which lags behind the current price to help confirm trends.
Bear Phase Color : Set the color for bearish periods.
Bull Phase Color : Set the color for bullish periods.
Consolidation Color : Set the color for consolidation periods.
Minimum Length : Determine the shortest lag period for the Chikou Span.
Maximum Length : Determine the longest lag period for the Chikou Span.
Dynamic Length Adjustment : Automatically adjusts the length of the Chikou Span based on market conditions.
Display Senkou Span A and B :
Description : Shows the Senkou Span A and B, which form the Ichimoku Cloud indicating future support and resistance levels.
Bear Color : Set the color for bearish clouds.
Bull Color : Set the color for bullish clouds.
Neutral Color : Set the color for neutral periods.
Minimum Length : Determine the shortest period for calculating the Senkou Span.
Maximum Length : Determine the longest period for calculating the Senkou Span.
Dynamic Length Adjustment : Automatically adjusts the length of the Senkou Span based on market conditions.
Projection Offset : Set how far ahead the Senkou Span is projected.
Kumo Cloud Settings :
Enable Kumo Cloud Fill : Toggle to fill the space between Senkou Span A and B with color.
Cloud Fill Transparency : Adjust the transparency of the cloud fill.
Apply WMA Smoothing :
Description : Smooths the indicator lines using a Weighted Moving Average to clarify trends.
Bar Coloring Based on Ichimoku Signals :
Description : Colors the bars based on Ichimoku signals to provide a quick visual indication of market sentiment.
Bearish Signal Bar Color : Set the color for bars during bearish signals.
Bullish Signal Bar Color : Set the color for bars during bullish signals.
Consolidation Signal Bar Color : Set the color for bars during consolidation periods.
Neutral Bar Color : Set the color for bars during neutral conditions.
Enhanced Calculations :
Heikin Ashi Values : Smooths price movements to make trends more visible.
Alternative Source Calculation : Uses a different method for calculating the indicator based on user settings.
Volume Calculations : Enhanced functions for calculating volume based on different candlestick patterns.
Dynamic Length Adjustment : Automatically adjusts the length of Ichimoku components based on market volatility.
Gaussian Kernel Calculations : Uses advanced calculations for smoother and more accurate trend analysis.
Chikou Span Adaptation : Improved calculation for the Chikou Span using dynamic lengths and advanced methods.
Visual Enhancements : Adds color gradients to the Senkou Span and dynamic coloring for the Chikou Span to improve trend visibility.
Plotting Ichimoku Components :
Tenkan-Sen : Plots the Tenkan-Sen line with dynamic adjustments.
Kijun-Sen : Plots the Kijun-Sen line with dynamic adjustments.
Senkou Span A and B : Plots these lines with dynamic projections and advanced smoothing.
Chikou Span : Plots the Chikou Span with dynamic offsets and coloring.
📘 Enhanced Candlestick Patterns Integration
Purpose : Identifies and displays various candlestick patterns to help traders spot key market movements and potential reversals.
Usage : Toggle the display of patterns, select specific pattern types, and customize pattern labels for improved visual analysis.
Display Patterns :
Description : Toggle to enable or disable the display of all candlestick patterns.
Details : When enabled, all selected candlestick patterns will be displayed on the chart, aiding traders in identifying key market movements and potential reversals.
Select Pattern Type :
Description : Select the type of candlestick patterns to detect.
Details : Options include Bullish (indicating potential upward trends), Bearish (indicating potential downward trends), or Both.
Trend Filter Method :
Description : Select the method to filter trends.
Details : Options include True Range (based on price range), Fractals, Volume, Combined, or None (no filtering).
Pattern Label Colors :
Bullish Pattern Color : Choose the color for labeling Bullish patterns, indicating potential upward trends.
Bearish Pattern Color : Choose the color for labeling Bearish patterns, indicating potential downward trends.
Indecision Pattern Color : Choose the color for labeling Indecision patterns, indicating no clear trend direction.
Base Line and Patterns Display Options :
Show Base Line in Place of Labels : Toggle to display a base line instead of labels for detected patterns. This helps visualize the general trend.
Show Counterattack Lines : Toggle to display Counterattack Lines patterns, indicating potential reversal points.
Show Dark Cloud Cover : Toggle to display Dark Cloud Cover patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Engulfing Patterns : Toggle to display Engulfing patterns. Bullish Engulfing patterns suggest a potential upward reversal, while Bearish Engulfing patterns suggest a potential downward reversal.
Show Hammer Patterns : Toggle to display Hammer patterns, a bullish pattern indicating a potential reversal from a downtrend to an uptrend.
Show Hanging Man Patterns : Toggle to display Hanging Man patterns, a bearish pattern indicating a potential reversal from an uptrend to a downtrend.
Show Harami Patterns : Toggle to display Harami patterns. Bullish Harami patterns suggest a potential upward reversal, while Bearish Harami patterns suggest a potential downward reversal.
Show In-Neck Patterns : Toggle to display In-Neck patterns, indicating a potential continuation of the current trend.
Show On-Neck Patterns : Toggle to display On-Neck patterns, indicating a potential continuation of the current trend.
Show Piercing Patterns : Toggle to display Piercing patterns, a bullish pattern suggesting a potential reversal from a downtrend to an uptrend.
Show Three Black Crows : Toggle to display Three Black Crows patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Thrusting Patterns : Toggle to display Thrusting patterns, a bearish pattern suggesting a potential continuation of the downtrend.
Show Upside Gap Two Crows : Toggle to display Upside Gap Two Crows patterns, a bearish pattern suggesting a potential downward reversal after an upward gap.
Show Evening Star : Toggle to display Evening Star patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Inverted Hammer : Toggle to display Inverted Hammer patterns, a bullish pattern suggesting a potential reversal from a downtrend to an uptrend.
Show Morning Star : Toggle to display Morning Star patterns, a bullish pattern suggesting a potential reversal from a downtrend to an uptrend.
Show Shooting Star : Toggle to display Shooting Star patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Doji Patterns : Toggle to display Doji patterns, indicating market indecision and potential reversals.
Show Dragonfly Doji : Toggle to display Dragonfly Doji patterns, a bullish pattern suggesting a potential reversal from a downtrend to an uptrend.
Show Evening Doji Star : Toggle to display Evening Doji Star patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Gravestone Doji : Toggle to display Gravestone Doji patterns, a bearish pattern suggesting a potential reversal from an uptrend to a downtrend.
Show Long-Legged Doji : Toggle to display Long-Legged Doji patterns, indicating high market indecision and potential reversals.
Show Morning Doji Star : Toggle to display Morning Doji Star patterns, a bullish pattern suggesting a potential reversal from a downtrend to an uptrend.
Show Rising Three Methods : Toggle to display Rising Three Methods patterns, a bullish pattern suggesting a continuation of the uptrend.
Show Falling Three Methods : Toggle to display Falling Three Methods patterns, a bearish pattern suggesting a continuation of the downtrend.
Show Tasuki Patterns : Toggle to display Tasuki patterns, indicating potential trend continuation after a gap.
Show Marubozo : Toggle to display Marubozo patterns, indicating strong trend continuation, either bullish or bearish.
Show Long Lower Shadow : Toggle to display Long Lower Shadow patterns, indicating strong buying pressure and potential upward movement.
Show Long Upper Shadow : Toggle to display Long Upper Shadow patterns, indicating strong selling pressure and potential downward movement.
Show Three Inside Up/Down : Toggle to display Three Inside Up/Down patterns, indicating potential bullish or bearish reversals.
Show Kicker Pattern : Toggle to display Kicker patterns, indicating significant potential reversals.
Show Tweezer Tops/Bottoms : Toggle to display Tweezer Tops/Bottoms patterns, indicating potential reversals at the tops or bottoms.
Show Mat Hold Pattern : Toggle to display Mat Hold patterns, a bullish pattern suggesting a continuation of the uptrend.
Candle Body/Shadow Comparison Options :
Candle Body/Shadow Comparison : Choose the criteria to compare candle sizes: Shadows (larger shadows), Body (larger body), Both (larger shadows and body), Either (larger shadows or body), or None (no comparison).
Look-back Period for Candle Comparison : Specify the number of periods to look back when comparing the current candle size to determine if it is significant.
Period for Body Length Average : Specify the period for calculating the average body length of candles to help identify significant patterns.
Period for Candle Length Average : Specify the period for calculating the average length of candles to help identify significant patterns.
Specific Pattern Thresholds :
Doji Body Percentage Threshold : Set the percentage threshold for identifying Doji patterns based on the candle body size compared to its range.
Upper Shadow Percentage Limit : Set the maximum allowed upper shadow percentage of the candle’s range for identifying specific Doji patterns.
Lower Shadow Percentage Limit : Set the maximum allowed lower shadow percentage of the candle’s range for identifying specific Doji patterns.
Price Deviation Tolerance : Specify the price deviation tolerance for pattern recognition, which helps in identifying patterns within a certain price range.
Thrusting Neck Percentage : Set the percentage threshold for identifying Thrusting Neck patterns, indicating a potential continuation of the current trend.
Base Line Settings :
Base Line EMA Length : Specify the length of the EMA for the Base Line, helping to visualize the general trend.
Enhanced Calculations :
Wavelet Transform : If machine learning is enabled, calculates the wavelet transform for smoother and more accurate pattern detection.
Candle Body and Shadows Calculation : Detailed calculations for candle body and shadow lengths to improve pattern detection.
Average Calculations : Calculate averages for body and candle sizes to help identify significant patterns.
Fractals Calculation : Identify fractal highs and lows to aid in trend detection.
Trend Filters : Apply user-selected trend filters based on True Range, Fractals, Volume, or a combination.
Pattern Detection and Labeling : Detects and labels various candlestick patterns, including Doji, Engulfing, Hammer, and more, with options for displaying labels or base lines.
Alerts and Notifications : Set alerts for detected patterns and base line colors to notify traders of significant market events.
Plotting Candlestick Patterns :
Pattern Detection : Automatically detects and labels various candlestick patterns based on user settings.
Label Customization : Customize the labels for different patterns, including color and text.
Base Line Plotting : Option to plot a base line instead of labels for detected patterns, enhancing trend visualization.
Alerts for Patterns : Set alerts for detected patterns to keep traders informed of significant market changes.
📘 Enhanced Fibonacci Retracement Integration
Purpose : Provides a tool for identifying potential support and resistance levels using Fibonacci retracement.
Usage : Toggle the display of Fibonacci levels, adjust the lookback period, and customize the appearance of Fibonacci levels for better market analysis.
Auto Mode :
Description : Toggle to enable or disable automatic detection of price points.
Details : When enabled, the highest and lowest price points within a specified period will be automatically detected to set Fibonacci levels. Disable to manually set the top and bottom prices.
Period :
Description : Set the lookback period for detecting price points.
Details : Defines the number of bars to look back when detecting the highest and lowest prices in Auto Mode, used for calculating Fibonacci levels.
Manual Top :
Description : Manually set the top price level.
Details : Adjust this setting to reflect the peak price of interest when Auto Mode is disabled.
Manual Bottom :
Description : Manually set the bottom price level.
Details : Adjust this setting to reflect the low price of interest when Auto Mode is disabled.
Display Fibonacci :
Description : Toggle to show or hide Fibonacci retracement levels.
Details : When enabled, the calculated Fibonacci levels will be displayed on the chart, overlaying the price data.
Baseline Levels :
Description : Select Fibonacci levels to highlight as baselines.
Details : Choose specific levels to be visually distinct, emphasizing their significance in the analysis.
Fibonacci Levels Colors :
Upper Levels Color : Set the color for Fibonacci levels above the baseline, indicating potential resistance levels.
Lower Levels Color : Set the color for Fibonacci levels below the baseline, indicating potential support levels.
Baseline Levels Color : Set the color for highlighted baseline Fibonacci levels, making them stand out from other levels.
Display Individual Fibonacci Levels :
Show Level : Toggle to enable or disable the display of specific Fibonacci levels.
Level Value : Set the multiplier used to calculate each specific Fibonacci level relative to the price range.
Reverse Levels :
Description : Toggle to switch the calculation direction of Fibonacci levels.
Details : When enabled, levels are calculated in reverse, useful for analyzing downtrends.
Line Extension :
Description : Choose how Fibonacci level lines are extended on the chart.
Details : Options include extending lines to the left, right, or both, affecting their visual presentation.
Text Size :
Description : Adjust the font size of the labels for Fibonacci levels.
Details : Options range from large to tiny, allowing for readability adjustments according to user preference.
Line Style :
Description : Select the line style for Fibonacci levels.
Details : Options include solid, dotted, and dashed, providing visual distinction.
Line Width :
Description : Set the thickness of the Fibonacci level lines.
Details : A higher value makes the lines more prominent on the chart.
Baseline Line Style :
Description : Choose the line style specifically for the baseline levels.
Details : This can differ from other Fibonacci levels to emphasize their importance.
Baseline Line Width :
Description : Adjust the thickness of the baseline level lines.
Details : Can be set differently from other levels for visual emphasis.
Enhanced Calculations :
Automatic and Manual Top/Bottom Setup : Detect or manually set the highest and lowest price points.
Price Range Calculation : Determine the range between the highest and lowest prices.
Fibonacci Level Values : Calculate the values for each Fibonacci level.
Visual and Label Configuration : Configure visual aspects and labels for each level.
Plotting and Labeling :
Level Plotting :
Description : Plot each Fibonacci level on the chart.
Details : Draw lines representing each calculated level.
Label Customization :
Description : Customize the labels for Fibonacci levels.
Details : Include text, colors, and positioning for clarity.
📘 Supports and Resistances Integration
Purpose : Identifies key support and resistance levels to aid in market analysis.
Usage : Toggle the display of support and resistance lines, customize their appearance, and use Bollinger Bands for additional insights.
Display Supports and Resistances :
Description : Toggle to enable or disable the display of support and resistance lines.
Details : When enabled, support and resistance lines will be shown on the chart, providing key levels for market analysis.
Swing Period :
Description : Set the retrospective period for identifying swing points.
Details : A longer period captures more significant trends but may reduce sensitivity. The default value is 10.
Support Line Color :
Description : Set the color for support lines.
Details : Choose a color that enhances chart readability. Default is green.
Resistance Line Color :
Description : Set the color for resistance lines.
Details : Choose a color that makes resistance lines easily distinguishable. Default is red.
Trend-Based Line Color :
Description : Toggle to enable dynamic coloring based on trend direction.
Details : When enabled, the color of the lines will change according to the trend, aiding visual analysis.
Line Thickness :
Description : Adjust the thickness of the support and resistance lines.
Details : Choose a thickness value between 1 and 5 for better visibility.
Line Style :
Description : Select the style of the lines.
Details : Options include Solid, Dotted, or Dashed lines for visual distinction.
Number of Lines to Display :
Description : Set the maximum number of support/resistance lines to display.
Details : Adjust the number of lines to avoid clutter or to show more levels.
Display Bollinger Bands :
Description : Toggle to show or hide Bollinger Bands on the chart.
Details : Bollinger Bands provide a visual representation of volatility and potential price ranges.
Bollinger Bands Integration :
Description : Enable the integration of Bollinger Bands for S/R calculation.
Details : This feature adjusts the placement of S/R lines based on the market volatility captured by the Bollinger Bands.
Bollinger Bands Color Settings :
Description : Set colors for different Bollinger Band conditions.
Details :
Green: Prices above the median but below the upper band (potential overbought area).
Dark green: Prices above the upper band (strong upward momentum).
Light red: Prices below the median but above the lower band (potential oversold area).
Dark red: Prices below the lower band (strong downward momentum).
Fill Opacity Adjustment :
Description : Adjust the fill opacity between Bollinger Bands.
Details : Set the opacity level to balance visibility with other chart elements.
BB Sensitivity Level :
Description : Adjust the sensitivity for determining S/R levels near Bollinger Bands.
Details : A higher value increases the consideration of levels near the bands.
Band Width Multiplier :
Description : Control the width of the Bollinger Bands.
Details : Adjust the multiplier to expand or contract the bands based on market volatility.
Uniform BB Coloring :
Description : Apply a consistent color to Bollinger Bands.
Details : Simplify visual interpretation with a uniform color.
Plotting and Alerts :
Plotting Bollinger Bands :
Description : Plot the Bollinger Bands on the chart.
Details : The bands are colored based on the conditions set for market volatility and price ranges.
Alerts and Notifications :
Description : Set alerts for support/resistance breaks and Bollinger Band breakouts.
Details : Notify traders of significant market events related to these levels.
📘 Enhanced Trend Lines Integration
Purpose : Identifies and plots trend lines based on market structure to help traders understand market direction and potential buy/sell points.
Usage : Toggle the display of trend lines, customize their appearance, and use enhanced calculations for trend analysis.
Display Trend Lines :
Description : Enable or disable the display of trend lines on the chart.
Details : These trend lines are calculated based on market structure, specifically through the detection of Breaks of Structure (BOS). If enabled, the trend lines will help in identifying the market overall trend and potential buy and sell points.
Trend Line Colors :
Upper Line Color : Set the color for the upper trend lines to enhance visual distinction.
Lower Line Color : Set the color for the lower trend lines, aiding in easy identification of support levels.
Pivot Labels :
Show Pivots Labels : Control the display of pivot labels on the chart.
Pivot Label Size : Select the size of the pivot labels displayed on the chart. Options include Tiny, Small, Normal, Large, and Huge.
Trend Line Calculations :
Pivot Depth : Adjust the depth for pivot calculation based on the selected timeframe to capture significant price movements.
Pivot Deviation : Set the deviation for pivot calculation to identify key turning points.
Pivot Backstep : Define the backstep for pivot calculation to ensure accurate detection of pivot points.
Enhanced Calculations :
Market Structure Detection : Utilize advanced algorithms to identify key market structures, improving trend line accuracy.
Adaptive Parameters : Automatically adjust pivot depth, deviation, and backstep based on the selected timeframe for better relevance.
Zigzag Calculation : Implement zigzag patterns to dynamically adjust trend lines, ensuring they reflect current market conditions.
Slope and Intercept Calculation : Compute the slope and intercept for trend lines to enhance precision in trend detection.
Dynamic Updates : Continuously update trend lines as new data becomes available, ensuring real-time accuracy.
Alerts and Notifications : Set alerts for new high and low pivots, as well as for when the price crosses upper or lower trend lines, keeping traders informed of significant market changes.
Plotting Trend Lines :
Trend Line Plotting : Automatically draw trend lines based on detected BOS, helping traders visualize the market trend.
Diagonal Support/Resistance Lines : Plot diagonal lines to indicate support and resistance levels, enhancing the understanding of market dynamics.
Pivot Label Customization : Customize pivot labels for clear identification of high and low points in the trend.
Alerts for Trend Lines : Set alerts for when price crosses trend lines, ensuring timely notifications of potential trading opportunities.
📘 Enhanced Linear Regression Integration
Purpose : Uses linear regression to analyze price movements and identify trends.
Usage : Display the linear regression projection line, customize its appearance, and use enhanced calculations for better trend analysis.
Display Projection Line :
Description : Toggle to display or hide the linear regression projection line on the chart.
Details : This line represents the best fit line that predicts future prices based on historical data.
Data Source :
Description : Select the data source for the linear regression projection.
Details : This is typically the closing price but can be any price point such as open, high, or low. The selected source will be used to calculate the linear regression projection line.
Trend-Based Line Color :
Enable Trend-Based Line Color : Toggle to automatically color the projection line based on the trend direction. When enabled, the line will be red for a downward trend and green for an upward trend, providing a visual indication of market direction.
Uptrend Line Color : Select the color for the projection line when the trend is upward. This color will be used when "Enable Trend-Based Line Color" is active.
Downtrend Line Color : Select the color for the projection line when the trend is downward. This color will be used when "Enable Trend-Based Line Color" is active.
Enhanced Calculations :
Standard Deviation Calculation : Calculate the standard deviation for a given length to understand the volatility around the linear regression line.
Pearson's Correlation Calculation : Compute Pearson's R to measure the strength of the linear relationship between the price points and the linear regression line.
Slope and Intercept Calculation : Calculate the slope and intercept for the regression line, providing the basis for the projection.
Kernel Application : Optionally apply the RBF Kernel to the selected source data for smoothing and enhancing the regression calculations.
Dynamic Length Selection : Automatically select the optimal regression period based on the highest Pearson's R value, ensuring the most accurate trend representation.
Real-Time Updates : Continuously update the regression line and related calculations as new data becomes available, maintaining accuracy in real-time.
Alerts and Notifications : Set alerts for when the price crosses the linear regression projection line, notifying traders of significant market events.
Plotting Linear Regression Components :
Projection Line Plotting : Automatically draw the linear regression projection line based on historical data and the selected data source.
Label Customization : Customize the label for the projection line, including color and text, for clear identification on the chart.
Alerts for Projection Line : Set alerts for when the price crosses the projection line, ensuring timely notifications of potential trading opportunities.
📘 POC Analysis Integration
Purpose : Identifies the Point of Control (POC) to highlight price levels with the highest trading volume.
Usage : Toggle the display of the POC, customize its appearance, and use enhanced calculations for better market analysis.
Display POC :
Description : Toggle to display or hide the Point of Control (POC) on the chart.
Details : The POC is the price level at which the highest volume of trading occurred, indicating a focal point of market activity.
Data Source :
Description : Select the price source for POC analysis.
Details : This is typically the closing price but can be any price point such as open, high, or low. The selected source will be used to calculate the POC.
POC Line Colors :
Color Above POC : Set the line color when the closing price is above the POC.
Color Below POC : Set the line color when the closing price is below the POC.
Width Multiplier :
Description : Adjust the width around the price for POC analysis.
Details : A higher value broadens the calculation range.
POC Calculation and Visualization :
Price Level Initialization : Calculate the initial spacing between price levels based on the first candlestick and user settings.
Volume Data Accumulation : Accumulate volume data at specified price levels for each candlestick to determine the POC.
Dynamic Array Expansion : Expand price levels array to accommodate new price data outside the current range.
POC Determination : Determine and visualize the POC at the last candlestick if enabled by the user.
Alerts and Notifications : Set alerts for when the price crosses the POC, notifying traders of significant market events.
Plotting POC Components :
POC Line Plotting : Automatically draw the POC line based on historical data and the selected data source.
Label Customization : Customize the label for the POC line, including color and text, for clear identification on the chart.
Alerts for POC : Set alerts for when the price crosses the POC, ensuring timely notifications of potential trading opportunities.
📘 Enhanced Divergences Integration
Purpose : Detects and displays divergences between price movements and indicators to identify potential reversal points.
Usage : Toggle the display of divergences, select data sources, customize divergence colors, and use enhanced calculations for better trend analysis.
Display Divergences :
Description : Toggle to display or hide the detected divergences on the chart.
Details : Divergences occur when the price movement of an asset and a related indicator (e.g., volume or momentum) move in opposite directions. They are used to identify potential reversal points in the market. Regular divergences signal possible reversals, while hidden divergences can indicate continuation.
Data Source :
Description : Defines the timeframe from which to fetch data for analysis.
Details : Typically lower than the chart current timeframe for multi-timeframe analysis.
Divergence Colors :
Bearish Divergence Color : Sets the color for bearish divergence lines. Bearish divergences typically suggest potential downward price movement.
Bullish Divergence Color : Sets the color for bullish divergence lines. Bullish divergences typically indicate potential upward price movement.
Pivot Bars :
Left Bars : Number of bars to the left of the pivot point to consider. Helps in identifying the pivot high or low by looking back these many bars.
Right Bars : Number of bars to the right of the pivot point to consider. Assists in confirming a pivot point by ensuring no higher high or lower low is present within this range.
Display Hidden Divergences :
Description : When enabled, this setting reveals hidden divergences on the chart.
Details : Hidden divergences are a subtler form of divergence that often signal continuation rather than reversal. A hidden bullish divergence occurs when price makes a higher low while the indicator makes a lower low, suggesting the continuation of an uptrend. Conversely, a hidden bearish divergence occurs when price makes a lower high while the indicator makes a higher high, indicating the continuation of a downtrend. These divergences are particularly useful for identifying the strength of the current trend.
Dynamic Line Width Based on Divergence Count :
Description : When enabled, adjusts the width of the divergence line dynamically based on the count of divergences detected.
Details : This provides visual emphasis on stronger signals.
Enhanced Calculations :
Standard Deviation Calculation : Calculate the standard deviation for a given length to understand the volatility around the linear regression line.
Pearson's Correlation Calculation : Compute Pearson's R to measure the strength of the linear relationship between the price points and the linear regression line.
Slope and Intercept Calculation : Calculate the slope and intercept for the regression line, providing the basis for the projection.
Kernel Application : Optionally apply the RBF Kernel to the selected source data for smoothing and enhancing the regression calculations.
Dynamic Length Selection : Automatically select the optimal regression period based on the highest Pearson's R value, ensuring the most accurate trend representation.
Real-Time Updates : Continuously update the regression line and related calculations as new data becomes available, maintaining accuracy in real-time.
Alerts and Notifications : Set alerts for when the price crosses the linear regression projection line, notifying traders of significant market events.
Plotting Divergence Components :
Divergence Line Plotting : Automatically draw divergence lines based on historical data and the selected data source.
Label Customization : Customize the label for the divergence lines, including color and text, for clear identification on the chart.
Alerts for Divergences : Set alerts for when a divergence is detected, ensuring timely notifications of potential trading opportunities.
📘 Enhanced Average True Range Integration
Purpose : Measures market volatility using the Average True Range (ATR) to assist in identifying potential buy and sell points.
Usage : Set the ATR period, minimum tick filter, upper and lower coefficients, and customize ATR colors for better market analysis.
Show Labels :
Description : Enable or disable the display of labels for the Average True Range (ATR) indicator.
Details : This option controls whether the ATR signals (buy and sell) are shown on the chart with respective labels.
ATR Period :
Description : Sets the period for calculating the Average True Range (ATR).
Details : The ATR measures market volatility by calculating the average range of price movement over a specified period. A shorter period makes the ATR more sensitive to recent price movements, while a longer period smooths out short-term volatility.
Minimum Tick Filter :
Description : Sets the minimum tick filter for buy and sell signals.
Details : This filter ensures that the price movement is significant enough to be considered a valid signal. For example, a value of 20 means that the price must move at least 20 ticks from the open to the close to generate a signal.
Upper Coefficient :
Description : Sets the upper coefficient for band calculation.
Details : This value adjusts the sensitivity of the upper band used to detect high points. A higher coefficient makes the band wider, capturing more significant price movements, while a lower coefficient makes the band narrower, making it more sensitive to smaller price changes.
Lower Coefficient :
Description : Sets the lower coefficient for band calculation.
Details : This value adjusts the sensitivity of the lower band used to detect low points. A higher coefficient makes the band wider, capturing more significant price movements, while a lower coefficient makes the band narrower, making it more sensitive to smaller price changes.
ATR Colors :
Bullish Color : Sets the color for the bullish signal, helping to visually distinguish bullish trends.
Bearish Color : Sets the color for the bearish signal, helping to visually distinguish bearish trends.
Enhanced Calculations :
Dynamic Coefficient Calculation : Calculates dynamic coefficients based on market volatility, adjusting the sensitivity of ATR bands accordingly.
Band Calculation : Computes high and low bands using dynamic coefficients to detect significant price movements.
High/Low Point Detection : Identifies potential high and low points based on ATR band calculations and price thresholds.
Real-Time Updates : Continuously updates ATR calculations and signals as new data becomes available, ensuring accuracy in real-time.
Plotting ATR Components :
Signal Plotting : Plots bullish and bearish ATR signals on the chart based on calculated conditions.
Label Customization : Customize the labels for ATR signals, including color and text, for clear identification on the chart.
Alerts for Signals : Set alerts for detected bullish and bearish signals, ensuring timely notifications of potential trading opportunities.
📘 Enhanced ATR Visualization Parameters
Purpose : Provides a visual representation of market volatility using the ATR Strength Meter.
Usage : Toggle the display of the ATR Strength Meter, set thresholds, and customize its appearance for better market analysis.
Display ATR Strength Meter :
Description : Toggle to display or hide the ATR Strength Meter, a visual representation of market volatility.
Details : The meter is based on the Average True Range (ATR) and helps identify volatility trends.
High ATR Threshold :
Description : Set the threshold for high volatility.
Details : ATR values above this threshold indicate increased market volatility.
Low ATR Threshold :
Description : Set the threshold for low volatility.
Details : ATR values below this threshold indicate decreased market volatility.
Progression Bar Position :
Description : Select the position of the ATR Strength Meter on the chart.
Details : Options are "Top" or "Bottom", affecting where the volatility meter is displayed relative to price action.
Progress Bar Length :
Description : Set the horizontal length of the ATR Strength progression bar.
Details : Adjust to increase or decrease the bar's width, accommodating different chart sizes and user preferences.
Enhanced Calculations :
ATR Strength Calculation : Calculate the ATR strength to measure market volatility.
Dynamic Coefficients : Use dynamic coefficients based on volatility for more accurate calculations.
Progress Bar Calculation : Determine the position and color of the progression bar based on ATR strength.
Label Positioning : Dynamically position labels for minimum and maximum values to avoid overlap.
Plotting ATR Strength Meter :
Progression Bar Plotting : Plot the progression bar to represent the ATR strength.
Label Customization : Customize labels for the ATR strength, minimum, and maximum values.
📘 Enhanced Relative Strength Index Integration
(A special thanks to RumpyPumpyDumpy for allowing the private reuse of his script.)
Purpose : Measures market momentum using the Relative Strength Index (RSI) and Stochastic RSI to assist in identifying potential buy and sell points.
Usage : Set the RSI and StochRSI parameters, toggle the display of the RSI Meter, and customize its appearance for better market analysis.
RSI Calculation Parameters :
RSI Length : Defines the length of the RSI calculation.
Details : A longer period captures more data points but may reduce sensitivity.
RSI Overbought Level : Sets the overbought level for RSI.
Details : Values above this level indicate overbought conditions.
RSI Oversold Level : Sets the oversold level for RSI.
Details : Values below this level indicate oversold conditions.
StochRSI Length : Defines the length of the StochRSI calculation.
Details : A longer period captures more data points but may reduce sensitivity.
StochRSI %K Length : Defines the length of the %K line of the StochRSI.
StochRSI %D Length : Defines the length of the %D line (SMA of %K) of the StochRSI.
RSI Visualization Parameters :
Display RSI Meter : Toggle the display of the RSI Meter on the chart.
RSI Meter Size : Adjust the size of the RSI Meter displayed on the chart.
Details : Measured as the diameter of the meter. Increase the value for larger display size, enhancing visibility and making it easier to read the RSI trend at a glance.
Horizontal Offset : Move the RSI Meter horizontally across the chart.
Details : Positive values shift the meter to the left, allowing for placement adjustments relative to the chart's current view or specific visual preferences.
RSI Meter Components :
Sectors and Ticks : Draw sector arcs and tick marks around the RSI Meter to represent different RSI levels and thresholds.
Needle : Draw the needle on the RSI Meter to indicate the current RSI value.
Sector Labels : Label each sector of the RSI Meter to indicate market conditions like "Strong Buy," "Buy," "Neutral," "Sell," and "Strong Sell."
Title Label : Draw the title label for the RSI Meter displaying the RSI value and its period.
Enhanced Calculations :
RSI Calculation : Calculate the RSI using the built-in function with the specified length and source.
StochRSI Calculation : Calculate StochRSI values using the specified lengths for RSI, %K, and %D.
Dynamic Line Management : Efficiently manage and update dynamically created line objects to prevent potential memory leaks.
Optimized Sector and Needle Drawing : Enhanced the drawing functions for sectors, needles, and ticks to improve visual clarity and performance.
Plotting RSI Meter :
Sector Plotting : Draw the sectors on the RSI Meter using specified colors and widths to represent different RSI levels and thresholds.
Needle Plotting : Plot the needle on the RSI Meter based on the calculated RSI value to visually indicate the current RSI level.
Tick Plotting : Plot tick marks around the RSI Meter to denote key RSI levels and thresholds for better readability.
Label Plotting : Draw sector labels and a title label on the RSI Meter to provide context and information about the RSI levels and their corresponding market conditions.
📘 Market Sentiment Integration
Purpose : Analyzes market sentiment using various indicators to provide an overall sentiment score.
Usage : Enable or disable individual sentiment indicators, set account type, and customize sentiment calculations for better market analysis.
Volatility Index (IV) :
Description : Enable or disable the use of the Volatility Index in sentiment calculation.
Details : When enabled, the Volatility Index (IV) provides insight into market sentiment by measuring market volatility. The selected Volatility Index varies based on your TradingView account type.
Account Type :
Description : Select your TradingView account type.
Details : Free accounts use SPX, while Premium accounts use VIX.
Put/Call Ratio (PCR) :
Description : Enable or disable the use of the Put/Call ratio in sentiment calculation.
Details : The Put/Call ratio is a sentiment indicator that measures the volume of put options traded relative to call options, indicating market sentiment towards bearish or bullish expectations.
Fear and Greed Index :
Description : Enable or disable the use of the Fear and Greed Index in sentiment calculation.
Details : The Fear and Greed Index gauges the prevailing emotions in the market, indicating whether investors are inclined towards fear (bearish sentiment) or greed (bullish sentiment).
Momentum Indicators :
Description : Enable or disable the use of momentum indicators like MACD and RoC in sentiment calculation.
Details : Momentum indicators help identify the strength and direction of price movements, assisting in sentiment analysis.
Adaptive Periods for Shorter Timeframes :
Description : Toggle this option to use shorter periods for sentiment indicators when analyzing lower timeframes.
Details : Enabling this option allows for more responsive and sensitive analysis when working with shorter timeframes.
Calculation Details :
Normalization Function : Normalize the values of the indicators over a 252-period range.
Set Periods Function : Set periods based on user preference for faster or slower periods, adjusting the analysis sensitivity.
IV Calculation : Calculate the IV value based on the selected Volatility Index (SPX for Free accounts, VIX for Premium accounts).
Put/Call Ratio Calculation : Calculate the Put/Call ratio using volume data, where put volume is proportional to the trading range, and call volume is proportional to the price change.
RoC Calculation : Calculate the Rate of Change (RoC) as a momentum indicator, measuring the percentage change in closing prices over a specified period.
Dynamic Thresholds : Define dynamic thresholds based on historical data, calculating mean and standard deviation to determine upper and lower thresholds for IV, PCR, and RoC.
📘 Enhanced Market Trend Dashboard Integration
Purpose : Provides a summary of key market indicators and signals in a single dashboard for quick and easy reference.
Usage : Customize the dashboard settings to display relevant market information, including Ichimoku components, Linear Regression, Support/Resistance levels, MACD, RSI, and Market Sentiment.
Market Trend Dashboard Parameters :
Display Market Trend Dashboard : Toggle to show or hide the market trend dashboard, providing a summary of key indicators and signals.
Panel Position : Select the position of the dashboard on the chart for optimal viewing.
Panel Text Size : Choose the text size for the information displayed in the dashboard, ensuring readability.
Panel Background Color : Set the background color of the market trend dashboard, enhancing contrast with the chart.
Ichimoku Dashboard Parameters :
Display Ichimoku Dashboard : Toggle to show or hide the Ichimoku section in the dashboard.
Display Tenkan-Sen Price Cross : Indicate when the price crosses the Tenkan-Sen line, signaling potential trade opportunities.
Display Kijun-Sen Price Cross : Indicate when the price crosses the Kijun-Sen line, often considered a stronger signal than Tenkan-Sen crosses.
Display Chikou Span Price Cross : Indicate Chikou Span price crosses, providing insight into potential trend reversals.
Display Kumo Breakout : Indicate Kumo (cloud) breakouts, which can signify major trend shifts.
Display Kumo Twist : Indicate Kumo twists, suggesting changing market dynamics and potential reversals.
Linear Regression Projection Dashboard Parameters :
Display LR Projection Dashboard : Toggle to show or hide the Linear Regression Projection section in the dashboard.
Display Linear Regression Period : Indicate the period used for Linear Regression Projection analysis.
Display Pearson R Details : Show the Pearson R value in the dashboard, indicating the strength and direction of the correlation in the Linear Regression Projection.
Supports and Resistances Dashboard Parameters :
Display S/R Dashboard : Toggle to show or hide the Support and Resistance section in the dashboard.
Display S/R Break Prices : Show the latest break prices of support and resistance levels in the dashboard.
MACD Dashboard Parameters :
Display MACD Dashboard : Toggle to show or hide the MACD section in the dashboard.
RSI Dashboard Parameters :
Display RSI Dashboard : Toggle to show or hide the Relative Strength Index section in the dashboard.
Display RSI Details : Show the RSI value and status in the dashboard.
Display StochRSI Details : Show the StochRSI %K, %D values and status in the dashboard.
Market Sentiment Dashboard Parameters :
Display Market Sentiment Dashboard : Enable or disable the display of the Market Sentiment Dashboard, which summarizes key market sentiment indicators like Implied Volatility, Put/Call Ratio, and Fear and Greed Index.
Display Implied Volatility Details : Show or hide the Implied Volatility details in the Market Sentiment Dashboard.
Display Put/Call Ratio Details : Show or hide the Put/Call Ratio details in the Market Sentiment Dashboard.
Display Fear and Greed Index Details : Show or hide the Fear and Greed Index details in the Market Sentiment Dashboard.
Enhanced Calculations :
Ichimoku Cloud Trend Calculation : Calculates trend based on the relationship between Ichimoku Cloud components, identifying bullish or bearish trends.
Support and Resistance Break Detection : Detects breaks in support and resistance levels and updates the dashboard accordingly.
Linear Regression Projection Calculation : Calculates Linear Regression Projection and Pearson R value for trend analysis.
MACD Signal Calculation : Determines MACD status based on histogram values.
RSI and StochRSI Calculation : Calculates RSI and StochRSI values and updates their statuses in the dashboard.
Market Sentiment Score Calculation : Calculates overall market sentiment score based on individual sentiment indicators.
Dynamic Alert Management : Manages alerts for various dashboard signals to prevent repeated alerts.
Real-Time Data Integration : Continuously updates the dashboard with real-time data for accurate and current trend analysis.
Plotting Market Trend Dashboard Components :
Ichimoku Components Plotting : Plots Tenkan-Sen, Kijun-Sen, Chikou Span, and Kumo cloud with dynamic adjustments.
Support and Resistance Levels Plotting : Plots support and resistance levels and updates them dynamically based on market data.
Linear Regression Projection Plotting : Plots the Linear Regression Projection line and labels with trend-based colors.
MACD and RSI Plotting : Plots MACD and RSI signals on the dashboard, including status updates.
Market Sentiment Indicators Plotting : Plots Market Sentiment indicators like IV, PCR, and Fear and Greed Index with dynamic updates.
Alert Notifications Plotting : Plots alert notifications for significant market changes based on dashboard signals.
Summary
This comprehensive market analyzer integrates multiple technical indicators, including machine learning, Ichimoku Kinkō Hyō, candlestick patterns, Fibonacci retracement, support and resistance levels, trend lines, linear regression, POC analysis, divergences, ATR, RSI, and market sentiment. Each section includes detailed descriptions and usage instructions to help traders understand how to effectively utilize the indicator in their trading strategies.
Pinescript - Common Label & Line Array Functions Library by RRBPinescript - Common Label & Line Array Functions Library by RagingRocketBull 2021
Version 1.0
This script provides a library of common array functions for arrays of label and line objects with live testing of all functions.
Using this library you can easily create, update, delete, join label/line object arrays, and get/set properties of individual label/line object array items.
You can find the full list of supported label/line array functions below.
There are several libraries:
- Common String Functions Library
- Standard Array Functions Library
- Common Fixed Type Array Functions Library
- Common Label & Line Array Functions Library
- Common Variable Type Array Functions Library
Features:
- 30 array functions in categories create/update/delete/join/get/set with support for both label/line objects (45+ including all implementations)
- Create, Update label/line object arrays from list/array params
- GET/SET properties of individual label/line array items by index
- Join label/line objects/arrays into a single string for output
- Supports User Input of x,y coords of 5 different types: abs/rel/rel%/inc/inc% list/array, auto transforms x,y input into list/array based on type, base and xloc, translates rel into abs bar indexes
- Supports User Input of lists with shortened names of string properties, auto expands all standard string properties to their full names for use in functions
- Live Output for all/selected functions based on User Input. Test any function for possible errors you may encounter before using in script.
- Output filters: hide all excluded and show only allowed functions using a list of function names
- Output Panel customization options: set custom style, color, text size, and line spacing
Usage:
- select create function - create label/line arrays from lists or arrays (optional). Doesn't affect the update functions. The only change in output should be function name regardless of the selected implementation.
- specify num_objects for both label/line arrays (default is 7)
- specify common anchor point settings x,y base/type for both label/line arrays and GET/SET items in Common Settings
- fill lists with items to use as inputs for create label/line array functions in Create Label/Line Arrays section
- specify label/line array item index and properties to SET in corresponding sections
- select label/line SET function to see the changes applied live
Code Structure:
- translate x,y depending on x,y type, base and xloc as specified in UI (required for all functions)
- expand all shortened standard property names to full names (required for create/update* from arrays and set* functions, not needed for create/update* from lists) to prevent errors in label.new and line.new
- create param arrays from string lists (required for create/update* from arrays and set* functions, not needed for create/update* from lists)
- create label/line array from string lists (property names are auto expanded) or param arrays (requires already expanded properties)
- update entire label/line array or
- get/set label/line array item properties by index
Transforming/Expanding Input values:
- for this script to work on any chart regardless of price/scale, all x*,y* are specified as % increase relative to x0,y0 base levels by default, but user can enter abs x,price values specific for that chart if necessary.
- all lists can be empty, contain 1 or several items, have the same/different lengths. Array Length = min(min(len(list*)), mum_objects) is used to create label/line objects. Missing list items are replaced with default property values.
- when a list contains only 1 item it is duplicated (label name/tooltip is also auto incremented) to match the calculated Array Length
- since this script processes user input, all x,y values must be translated to abs bar indexes before passing them to functions. Your script may provide all data internally and doesn't require this step.
- at first int x, float y arrays are created from user string lists, transformed as described below and returned as x,y arrays.
- translated x,y arrays can then be passed to create from arrays function or can be converted back to x,y string lists for the create from lists function if necessary.
- all translation logic is separated from create/update/set functions for the following reasons:
- to avoid redundant code/dependency on ext functions/reduce local scopes and to be able to translate everything only once in one place - should be faster
- to simplify internal logic of all functions
- because your script may provide all data internally without user input and won't need the translation step
- there are 5 types available for both x,y: abs, rel, rel%, inc, inc%. In addition to that, x can be: bar index or time, y is always price.
- abs - absolute bar index/time from start bar0 (x) or price (y) from 0, is >= 0
- rel - relative bar index/time from cur bar n (x) or price from y0 base level, is >= 0
- rel% - relative % increase of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- inc - relative increment (step) for each new level of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- inc% - relative % increment (% step) for each new level of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- x base level >= 0
- y base level can be 0 (empty) or open, close, high, low of cur bar
- single item x1_list = "50" translates into:
- for x type abs: "50, 50, 50 ..." num_objects times regardless of xloc => x = 50
- for x type rel: "50, 50, 50 ... " num_objects times => x = x_base + 50
- for x type rel%: "50%, 50%, 50% ... " num_objects times => x_base * (1 + 0.5)
- for x type inc: "0, 50, 100 ... " num_objects times => x_base + 50 * i
- for x type inc%: "0%, 50%, 100% ... " num_objects times => x_base * (1 + 0.5 * i)
- when xloc = xloc.bar_index each rel*/inc* value in the above list is then subtracted from n: n - x to convert rel to abs bar index, values of abs type are not affected
- x1_list = "0, 50, 100, ..." of type rel is the same as "50" of type inc
- x1_list = "50, 50, 50, ..." of type abs/rel/rel% produces a sequence of the same values and can be shortened to just "50"
- single item y1_list = "2" translates into (ragardless of yloc):
- for y type abs: "2, 2, 2 ..." num_objects times => y = 2
- for y type rel: "2, 2, 2 ... " num_objects times => y = y_base + 2
- for y type rel%: "2%, 2%, 2% ... " num_objects times => y = y_base * (1 + 0.02)
- for y type inc: "0, 2, 4 ... " num_objects times => y = y_base + 2 * i
- for y type inc%: "0%, 2%, 4% ... " num_objects times => y = y_base * (1 + 0.02 * i)
- when yloc != yloc.price all calculated values above are simply ignored
- y1_list = "0, 2, 4" of type rel% is the same as "2" with type inc%
- y1_list = "2, 2, 2" of type abs/rel/rel% produces a sequence of the same values and can be shortened to just "2"
- you can enter shortened property names in lists. To lookup supported shortened names use corresponding dropdowns in Set Label/Line Array Item Properties sections
- all shortened standard property names must be expanded to full names (required for create/update* from arrays and set* functions, not needed for create/update* from lists) to prevent errors in label.new and line.new
- examples of shortened property names that can be used in lists: bar_index, large, solid, label_right, white, left, left, price
- expanded to their corresponding full names: xloc.bar_index, size.large, line.style_solid, label.style_label_right, color.white, text.align_left, extend.left, yloc.price
- all expanding logic is separated from create/update* from arrays and set* functions for the same reasons as above, and because param arrays already have different types, implying the use of final values.
- all expanding logic is included in the create/update* from lists functions because it seemed more natural to process string lists from user input directly inside the function, since they are already strings.
Creating Label/Line Objects:
- use study max_lines_count and max_labels_count params to increase the max number of label/line objects to 500 (+3) if necessary. Default number of label/line objects is 50 (+3)
- all functions use standard param sequence from methods in reference, except style always comes before colors.
- standard label/line.get* functions only return a few properties, you can't read style, color, width etc.
- label.new(na, na, "") will still create a label with x = n-301, y = NaN, text = "" because max default scope for a var is 300 bars back.
- there are 2 types of color na, label color requires color(na) instead of color_na to prevent error. text_color and line_color can be color_na
- for line to be visible both x1, x2 ends must be visible on screen, also when y1 == y2 => abs(x1 - x2) >= 2 bars => line is visible
- xloc.bar_index line uses abs x1, x2 indexes and can only be within 0 and n ends, where n <= 5000 bars (free accounts) or 10000 bars (paid accounts) limit, can't be plotted into the future
- xloc.bar_time line uses abs x1, x2 times, can't go past bar0 time but can continue past cur bar time into the future, doesn't have a length limit in bars.
- xloc.bar_time line with length = exact number of bars can be plotted only within bar0 and cur bar, can't be plotted into the future reliably because of future gaps due to sessions on some charts
- xloc.bar_index line can't be created on bar 0 with fixed length value because there's only 1 bar of horiz length
- it can be created on cur bar using fixed length x < n <= 5000 or
- created on bar0 using na and then assigned final x* values on cur bar using set_x*
- created on bar0 using n - fixed_length x and then updated on cur bar using set_x*, where n <= 5000
- default orientation of lines (for style_arrow* and extend) is from left to right (from bar 50 to bar 0), it reverses when x1 and x2 are swapped
- price is a function, not a line object property
Variable Type Arrays:
- you can't create an if/function that returns var type value/array - compiler uses strict types and doesn't allow that
- however you can assign array of any type to another array of any type creating an arr pointer of invalid type that must be reassigned to a matching array type before used in any expression to prevent error
- create_any_array2 uses this loophole to return an int_arr pointer of a var type array
- this works for all array types defined with/without var keyword and doesn't work for string arrays defined with var keyword for some reason
- you can't do this with var type vars, only var type arrays because arrays are pointers passed by reference, while vars are actual values passed by value.
- you can only pass a var type value/array param to a function if all functions inside support every type - otherwise error
- alternatively values of every type must be passed simultaneously and processed separately by corresponding if branches/functions supporting these particular types returning a common single type result
- get_var_types solves this problem by generating a list of dummy values of every possible type including the source type, tricking the compiler into allowing a single valid branch to execute without error, while ignoring all dummy results
Notes:
- uses Pinescript v3 Compatibility Framework
- uses Common String Functions Library, Common Fixed Type Array Functions Library, Common Variable Type Array Functions Library
- has to be a separate script to reduce the number of local scopes/compiled file size, can't be merged with another library.
- lets you live test all label/line array functions for errors. If you see an error - change params in UI
- if you see "Loop too long" error - hide/unhide or reattach the script
- if you see "Chart references too many candles" error - change x type or value between abs/rel*. This can happen on charts with 5000+ bars when a rel bar index x is passed to label.new or line.new instead of abs bar index n - x
- create/update_label/line_array* use string lists, while create/update_label/line_array_from_arrays* use array params to create label/line arrays. "from_lists" is dropped to shorten the names of the most commonly used functions.
- create_label/line_array2,4 are preferable, 5,6 are listed for pure demonstration purposes only - don't use them, they don't improve anything but dramatically increase local scopes/compiled file size
- for this reason you would mainly be using create/update_label/line_array2,4 for list params or create/update_label/line_array_from_arrays2 for array params
- all update functions are executed after each create as proof of work and can be disabled. Only create functions are required. Use update functions when necessary - when list/array params are changed by your script.
- both lists and array item properties use the same x,y_type, x,y_base from common settings
- doesn't use pagination, a single str contains all output
- why is this so complicated? What are all these functions for?
- this script merges standard label/line object methods with standard array functions to create a powerful set of label/line object array functions to simplify manipulation of these arrays.
- this library also extends the functionality of Common Variable Type Array Functions Library providing support for label/line types in var type array functions (any_to_str6, join_any_array5)
- creating arrays from either lists or arrays adds a level of flexibility that comes with complexity. It's very likely that in your script you'd have to deal with both string lists as input, and arrays internally, once everything is converted.
- processing user input, allowing customization and targeting for any chart adds a whole new layer of complexity, all inputs must be translated and expanded before used in functions.
- different function implementations can increase/reduce local scopes and compiled file size. Select a version that best suits your needs. Creating complex scripts often requires rewriting your code multiple times to fit the limits, every line matters.
P.S. Don't rely too much on labels, for too often they are fables.
List of functions*:
* - functions from other libraries are not listed
1. Join Functions
Labels
- join_label_object(label_, d1, d2)
- join_label_array(arr, d1, d2)
- join_label_array2(arr, d1, d2, d3)
Lines
- join_line_object(line_, d1, d2)
- join_line_array(arr, d1, d2)
- join_line_array2(arr, d1, d2, d3)
Any Type
- any_to_str6(arr, index, type)
- join_any_array4(arr, d1, d2, type)
- join_any_array5(arr, d, type)
2. GET/SET Functions
Labels
- label_array_get_text(arr, index)
- label_array_get_xy(arr, index)
- label_array_get_fields(arr, index)
- label_array_set_text(arr, index, str)
- label_array_set_xy(arr, index, x, y)
- label_array_set_fields(arr, index, x, y, str)
- label_array_set_all_fields(arr, index, x, y, str, xloc, yloc, label_style, label_color, text_color, text_size, text_align, tooltip)
- label_array_set_all_fields2(arr, index, x, y, str, xloc, yloc, label_style, label_color, text_color, text_size, text_align, tooltip)
Lines
- line_array_get_price(arr, index, bar)
- line_array_get_xy(arr, index)
- line_array_get_fields(arr, index)
- line_array_set_text(arr, index, width)
- line_array_set_xy(arr, index, x1, y1, x2, y2)
- line_array_set_fields(arr, index, x1, y1, x2, y2, width)
- line_array_set_all_fields(arr, index, x1, y1, x2, y2, xloc, extend, line_style, line_color, width)
- line_array_set_all_fields2(arr, index, x1, y1, x2, y2, xloc, extend, line_style, line_color, width)
3. Create/Update/Delete Functions
Labels
- delete_label_array(label_arr)
- create_label_array(list1, list2, list3, list4, list5, d)
- create_label_array2(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array3(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array4(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array5(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array6(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- update_label_array2(label_arr, x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- update_label_array4(label_arr, x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array_from_arrays2(x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
- create_label_array_from_arrays4(x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
- update_label_array_from_arrays2(label_arr, x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
Lines
- delete_line_array(line_arr)
- create_line_array(list1, list2, list3, list4, list5, list6, d)
- create_line_array2(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array3(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array4(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array5(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array6(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- update_line_array2(line_arr, x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- update_line_array4(line_arr, x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array_from_arrays2(x1_arr, y1_arr, x2_arr, y2_arr, xloc_arr, extend_arr, style_arr, color_arr, width_arr, d)
- update_line_array_from_arrays2(line_arr, x1_arr, y1_arr, x2_arr, y2_arr, xloc_arr, extend_arr, style_arr, color_arr, width_arr, d)
Using `varip` variables [PineCoders]█ OVERVIEW
The new varip keyword in Pine can be used to declare variables that escape the rollback process, which is explained in the Pine User Manual's page on the execution model . This publication explains how Pine coders can use variables declared with varip to implement logic that was impossible to code in Pine before, such as timing events during the realtime bar, or keeping track of sequences of events that occur during successive realtime updates. We present code that allows you to calculate for how much time a given condition is true during a realtime bar, and show how this can be used to generate alerts.
█ WARNINGS
1. varip is an advanced feature which should only be used by coders already familiar with Pine's execution model and bar states .
2. Because varip only affects the behavior of your code in the realtime bar, it follows that backtest results on strategies built using logic based on varip will be meaningless,
as varip behavior cannot be simulated on historical bars. This also entails that plots on historical bars will not be able to reproduce the script's behavior in realtime.
3. Authors publishing scripts that behave differently in realtime and on historical bars should imperatively explain this to traders.
█ CONCEPTS
Escaping the rollback process
Whereas scripts only execute once at the close of historical bars, when a script is running in realtime, it executes every time the chart's feed detects a price or volume update. At every realtime update, Pine's runtime normally resets the values of a script's variables to their last committed value, i.e., the value they held when the previous bar closed. This is generally handy, as each realtime script execution starts from a known state, which simplifies script logic.
Sometimes, however, script logic requires code to be able to save states between different executions in the realtime bar. Declaring variables with varip now makes that possible. The "ip" in varip stands for "intrabar persist".
Let's look at the following code, which does not use varip :
//@version=4
study("")
int updateNo = na
if barstate.isnew
updateNo := 1
else
updateNo := updateNo + 1
plot(updateNo, style = plot.style_circles)
On historical bars, barstate.isnew is always true, so the plot shows a value of "1". On realtime bars, barstate.isnew is only true when the script first executes on the bar's opening. The plot will then briefly display "1" until subsequent executions occur. On the next executions during the realtime bar, the second branch of the if statement is executed because barstate.isnew is no longer true. Since `updateNo` is initialized to `na` at each execution, the `updateNo + 1` expression yields `na`, so nothing is plotted on further realtime executions of the script.
If we now use varip to declare the `updateNo` variable, the script behaves very differently:
//@version=4
study("")
varip int updateNo = na
if barstate.isnew
updateNo := 1
else
updateNo := updateNo + 1
plot(updateNo, style = plot.style_circles)
The difference now is that `updateNo` tracks the number of realtime updates that occur on each realtime bar. This can happen because the varip declaration allows the value of `updateNo` to be preserved between realtime updates; it is no longer rolled back at each realtime execution of the script. The test on barstate.isnew allows us to reset the update count when a new realtime bar comes in.
█ OUR SCRIPT
Let's move on to our script. It has three parts:
— Part 1 demonstrates how to generate alerts on timed conditions.
— Part 2 calculates the average of realtime update prices using a varip array.
— Part 3 presents a function to calculate the up/down/neutral volume by looking at price and volume variations between realtime bar updates.
Something we could not do in Pine before varip was to time the duration for which a condition is continuously true in the realtime bar. This was not possible because we could not save the beginning time of the first occurrence of the true condition.
One use case for this is a strategy where the system modeler wants to exit before the end of the realtime bar, but only if the exit condition occurs for a specific amount of time. One can thus design a strategy running on a 1H timeframe but able to exit if the exit condition persists for 15 minutes, for example. REMINDER: Using such logic in strategies will make backtesting their complete logic impossible, and backtest results useless, as historical behavior will not match the strategy's behavior in realtime, just as using `calc_on_every_tick = true` will do. Using `calc_on_every_tick = true` is necessary, by the way, when using varip in a strategy, as you want the strategy to run like a study in realtime, i.e., executing on each price or volume update.
Our script presents an `f_secondsSince(_cond, _resetCond)` function to calculate the time for which a condition is continuously true during, or even across multiple realtime bars. It only works in realtime. The abundant comments in the script hopefully provide enough information to understand the details of what it's doing. If you have questions, feel free to ask in the Comments section.
Features
The script's inputs allow you to:
• Specify the number of seconds the tested conditions must last before an alert is triggered (the default is 20 seconds).
• Determine if you want the duration to reset on new realtime bars.
• Require the direction of alerts (up or down) to alternate, which minimizes the number of alerts the script generates.
The inputs showcase the new `tooltip` parameter, which allows additional information to be displayed for each input by hovering over the "i" icon next to it.
The script only displays useful information on realtime bars. This information includes:
• The MA against which the current price is compared to determine the bull or bear conditions.
• A dash which prints on the chart when the bull or bear condition is true.
• An up or down triangle that prints when an alert is generated. The triangle will only appear on the update where the alert is triggered,
and unless that happens to be on the last execution of the realtime bar, it will not persist on the chart.
• The log of all triggered alerts to the right of the realtime bar.
• A gray square on top of the elapsed realtime bars where one or more alerts were generated. The square's tooltip displays the alert log for that bar.
• A yellow dot corresponding to the average price of all realtime bar updates, which is calculated using a varip array in "Part 2" of the script.
• Various key values in the Data Window for each parts of the script.
Note that the directional volume information calculated in Part 3 of the script is not plotted on the chart—only in the Data Window.
Using the script
You can try running the script on an open market with a 30sec timeframe. Because the default settings reset the duration on new realtime bars and require a 20 second delay, a reasonable amount of alerts will trigger.
Creating an alert on the script
You can create a script alert on the script. Keep in mind that when you create an alert from this script, the duration calculated by the instance of the script running the alert will not necessarily match that of the instance running on your chart, as both started their calculations at different times. Note that we use alert.freq_all in our alert() calls, so that alerts will trigger on all instances where the associated condition is met. If your alert is being paused because it reaches the maximum of 15 triggers in 3 minutes, you can configure the script's inputs so that up/down alerts must alternate. Also keep in mind that alerts run a distinct instance of your script on different servers, so discrepancies between the behavior of scripts running on charts and alerts can occur, especially if they trigger very often.
Challenges
Events detected in realtime using variables declared with varip can be transient and not leave visible traces at the close of the realtime bar, as is the case with our script, which can trigger multiple alerts during the same realtime bar, when the script's inputs allow for this. In such cases, elapsed realtime bars will be of no use in detecting past realtime bar events unless dedicated code is used to save traces of events, as we do with our alert log in this script, which we display as a tooltip on elapsed realtime bars.
█ NOTES
Realtime updates
We have no control over when realtime updates occur. A realtime bar can open, and then no realtime updates can occur until the open of the next realtime bar. The time between updates can vary considerably.
Past values
There is no mechanism to refer to past values of a varip variable across realtime executions in the same bar. Using the history-referencing operator will, as usual, return the variable's committed value on previous bars. If you want to preserve past values of a varip variable, they must be saved in other variables or in an array .
Resetting variables
Because varip variables not only preserve their values across realtime updates, but also across bars, you will typically need to plan conditions that will at some point reset their values to a known state. Testing on barstate.isnew , as we do, is a good way to achieve that.
Repainting
The fact that a script uses varip does not make it necessarily repainting. A script could conceivably use varip to calculate values saved when the realtime bar closes, and then use confirmed values of those calculations from the previous bar to trigger alerts or display plots, avoiding repaint.
timenow resolution
Although the variable is expressed in milliseconds it has an actual resolution of seconds, so it only increments in multiples of 1000 milliseconds.
Warn script users
When using varip to implement logic that cannot be replicated on historical bars, it's really important to explain this to traders in published script descriptions, even if you publish open-source. Remember that most TradingViewers do not know Pine.
New Pine features used in this script
This script uses three new Pine features:
• varip
• The `tooltip` parameter in input() .
• The new += assignment operator. See these also: -= , *= , /= and %= .
Example scripts
These are other scripts by PineCoders that use varip :
• Tick Delta Volume , by RicadoSantos .
• Tick Chart and Volume Info from Lower Time Frames by LonesomeTheBlue .
Thanks
Thanks to the PineCoders who helped improve this publication—especially to bmistiaen .
Look first. Then leap.
VPA ANALYSIS VPA Analysis provide the indications for various conditions as per the Volume Spread Analysis concept. The various legends are provided below
LEGEND DETAILS
UT1 - Upthrust Bar: This will be widespread Bar on high Volume closing on the low. This normally happens after an up move. Here the smart money move the price to the High and then quickly brings to the Low trapping many retail trader who rushed into in order not to miss the bullish move. This is a bearish Signal
UT2 -Upthrust Bar Confirmation: A widespread Down Bar following a Upthrust Bar. This confirms the weakness of the Upthrust Bar. Expect the stock to move down
Confirms . This is a Bearish Signal
PUT - Pseudo Upthrust: An Upthrust Bar in bar action but the volume remains average. This still indicates weakness. Indicate Possible Bearishness
PUC -Pseudo Upthrust Confirmation: widespread Bar after a pseudo–Upthrust Bar confirms the weakness of the Pseudo Upthrust Bar
Confirms Bearishness
BC - Buying Climax: A very wide Spread bar on ultra-High Volume closing at the top. Such a Bar indicates the climatic move in an uptrend. This Bar traps many retailers as the uptrend ends and reverses quickly. Confirms Bearishness
TC - Trend Change: This Indicates a possible Trend Change in an uptrend. Indicates Weakness
SEC- Sell Condition: This bar indicates confluence of some bearish signals. Possible end of Uptrend and start of Downtrend soon. Bearish Signal
UT - Upthrust Condition: When multiple bearish signals occur, the legend is printed in two lines. The Legend “UT” indicates that an upthrust condition is present. Bearish Signal
ND - No demand in uptrend: This bar indicates that there is no demand. In an uptrend this indicates weakness. Bearish Signal
ND - No Demand: This bar indicates that there is no demand. This can occur in any part of the Trend. In all place other than in an uptrend this just indicates just weakness
ED - Effort to Move Down: Widespread Bar closing down on High volume or above average volume . The smart money is pushing the prices down. Bearish Signal
EDF - Effort to Move Down Failed: Widespread / above average spread Bar closing up on High volume or above average volume appearing after ‘Effort to move down” bar.
This indicates that the Effort to move the pries down has failed. Bullish signal
SV - Stopping Volume: A high volume medium to widespread Bar closing in the upper middle part in a down trend indicates that smart money is buying. This is an indication that the down trend is likely to end soon. Indicates strength
ST1 - Strength Returning 1: Strength seen returning after a down trend. High volume adds to strength. Indicates Strength
ST2 - Strength Returning 2: Strength seen returning after a down trend. High volume adds to strength.
BYC - Buy Condition: This bar indicates confluence of some bullish signals Possible end of downtrend and start of uptrend soon. Indicates Strength
EU - Effort to Move Up: Widespread Bar closing up on High volume or above average volume . The smart money is pushing the prices up. Bullish Signal
EUF - Effort to Move Up Failed: Widespread / above average spread Bar closing down on High volume or above average volume appearing after ‘Effort to move up” bar.
This indicates that the Effort to move the pries up has failed. Bearish Signal
LVT- Low Volume Test: A low volume bar dipping into previous supply area and closing in the upper part of the Bar. A successful test is a positive sign. Indicates Strength
ST(after a LVT ) - Strength after Successful Low Volume Test: An up Bar closing near High after a Test confirms strength. Bullish Signal
RUT - Reverse Upthrust Bar: This will be a widespread Bar on high Volume closing on the high is a Down Trend. Here the buyers have become active and move the prices from the low to High. The down Move is likely to end and up trend likely to start soon. indicates Strength
NS - No supply Bar: This bar indicates that there is no supply. This is a sign of strength especially in a down trend. Indicates strength
ST - Strength Returns: When multiple bullish signals occur, the legend is printed in two lines. The Legend “ST” indicates that an condition of strength other than the condition mentioned in the second line is present. Bullish Signals
BAR COLORS
Green- Bullish / Strength
Red - Bearish / weakness
Blue / White - Sentiment Changing from bullish to Bearish and Vice Versa
TFC - HTF1 = Inside Bar
2 = Breaks one side of the previous bar
3 = Breaks both sides of the previous bar
2up Green = Current bar breaks previous bar's high and it is a green bar
2up Red = Current bar breaks previous bar's high but it is a red bar
2Down Green = Current bar breaks previous bar's low but it is a green bar
2Down Red = Current bar breaks previous bar's low and it is a red bar
Inside Green = Current bar is an inside bar (1) and it is a green bar
Inside Red = Current bar is an inside bar (1) and it is a red bar
Outside Green = Current bar is an outside bar (3) and it is a green bar
Outside Red = Current bar is an outside bar (3) and it is red bar
Looking for above setups on Daily, Weekly, Monthly, 3Month, Year
Only higher timeframe data shows up
e.g. If the chart timeframe is 1D or less, all of the above timeframe analysis will appear
If the chart timeframe is 1Month, only 1M, 3M and Yearly analysis will show up
Please DM me for access
TFC - LTF1 = Inside Bar
2 = Breaks one side of the previous bar
3 = Breaks both sides of the previous bar
2up Green = Current bar breaks previous bar's high and it is a green bar
2up Red = Current bar breaks previous bar's high but it is a red bar
2Down Green = Current bar breaks previous bar's low but it is a green bar
2Down Red = Current bar breaks previous bar's low and it is a red bar
Inside Green = Current bar is an inside bar (1) and it is a green bar
Inside Red = Current bar is an inside bar (1) and it is a red bar
Outside Green = Current bar is an outside bar (3) and it is a green bar
Outside Red = Current bar is an outside bar (3) and it is red bar
Looking for above setups on 15 Minutes, 30 Minutes, 1 Hour, 2 Hour and 4 Hours
Only higher timeframe data shows up
e.g. If the chart timeframe is M15 or less, all of the above timeframe analysis will appear
If the chart timeframe is H1, only H1, H2 and H4 analysis will show up
Please DM me for access
Advanced Candlestick Patterns [vitruvius]This is a very advanced indicator that detects most commonly used candlestick patterns. Please read this document carefully to understand how it works.
It is tailored to identify patterns that only have a great possibility of signaling a price movement. In other words, it can and will ignore some patterns, even though they satisfy the recognition conditions defined in the books. Candlestick patterns should also satisfy some other conditions in this indicator to be valid and you can modify those conditions.
This indicator is not only about identifying the candlestick patterns. By using the different choices, you can:
Avoid fake signals
Confirm patterns
Increase your possibility to win a trade
Reduce risk
Identify bullish/bearish movements better
Recommended Use
This indicator works best when you:
Use it in the daily time frame
Combine it with Support/Resistance areas
Note: For some candlestick patterns, you have the option of confirming the pattern with the next price action. In those cases, there will be obviously one bar delay (because it will wait for one more bar to close to confirm the pattern). However, it will mark the candlestick where it identifies the pattern and it will have ”Confirmed” in its text.
Important Note
This indicator does some serious calculations and checks for a lot of user inputs. Therefore, it might be a little slow. Please give it some time when it needs to do some computing.
MODULES
Trend Detection
Most of the patterns in this script are trend reversal patterns. So, recognition of the candlestick patterns depends heavily on the trend. In fact, even if you do not select a trend detection method, it will use the SMA method as default where it needs a certain trend in identifying a specific pattern.
It is possible to combine multiple trend detection methods. You can see how this affects the overall trend detection by enabling the background coloring.
Note: There might be some cases where a candle has a bullish/bearish confirmation of the same candlestick pattern . In those cases, the script is unable to identify the move and the user should decide if the identified pattern is bullish or bearish.
Below are the inputs of this module:
Color the background according to the trend?
If you select a trend detection method, it will color the background green for an uptrend and red for a downtrend .
Counter the trend when there is no obvious trend?
If you select multiple trend detection methods, there might be some cases where one of the methods indicates an uptrend and the other one indicates a downtrend . In that case, the script will continue with the previous trend (whatever the trend is one bar ago) by default . You can, however, reverse the trend in those cases by using this option. If you choose to reverse, you might catch the trend early .
Use MACD to detect the trend?
Use MACD to detect the trend. Whenever MACD delta is greater or equal to zero, it is an uptrend .
MACD Fast Length
Fast length of MACD.
MACD Slow Length
Slow length of MACD.
MACD Signal Smoothing
Signal smoothing value of MACD. Please note that it is set to 6 by default.
Use SMA to detect the trend?
Use SMA to detect the trend. If the price closes above the SMA line, it is an uptrend
SMA Length
Length of SMA.
Use the average price of previous candles to detect the trend?
If the average of open and close prices constantly go up for n bars that are determined by the next user input, it is an uptrend .
Number of candles to analyze
The number of bars ( n ) to analyze for the average price method.
Use the closing price of the previous candle to detect the trend?
If the difference between the current close and nth previous bar’s close is greater than the given threshold, it is an uptrend .
Position of the previous candle to analyze
Position of the bar (backward) to compare with the current close price.
Threshold for the closing price
The threshold value for closing price method.
Basic Candlestick Patterns
This module detects Doji, Spinning Top, Marubozu candlestick patterns. Also, you can set some specific options that are going to be used in all candlestick patterns.
Note: If you choose to manually enter the body height of a doji , you need to find the optimal value for different timeframes. Different timeframes have difference price action ranges.
Below are the inputs of this module:
Tolerate opening/closing price of the candle?
When a candlestick pattern needs to have a gap between two candles, you can tolerate the opening/closing prices of the one candle. This option is useful where the opening and closing prices are very close. This option is going to be used in all candlestick patterns.
Factor for tolerating opening/closing price
The more the factor is, the more the tolerance is.
Body/Height ratio for a candle to be considered as Bullish/Bearish
A bullish/bearish candle shouldn’t have too much shadow. You can use this option to determine the shadow length of a bullish/bearish bar. This option is going to be used in all candlestick patterns
Use basic candlestick pattern (Doji, Spinning Top, Marubozu)?
Detect doji, spinning top, marubozu candlestick patterns.
Manually set body of Doji?
You can manually set the body height of a doji. Otherwise, it will be calculated automatically. If you choose to use this option, then spinning top, and marubozu will also be calculated based on this.
Body of Doji
Body height of a bar to be considered as doji . Any bar with a body equal or less than the given value will be marked as doji. Only effective if you check the ”Manually set body of Doji?” option .
Verify a Doji by looking at the preceding candle?
If true, it will only mark dojis if the preceding candle is bullish or bearish.
Single Candlestick Patterns
This module detects Hammer, Hanging Man, Inverted Hammer, Shooting Star single candlestick patterns.
Below are the inputs of this module:
Confirm Single Candlestick Patterns with next closing price?
You can confirm a single candlestick pattern with the next closing price. That is, if the next candle closes above the previous one, it will confirm a bullish movement. If the next candle closes below the previous one, it will confirm a bearish movement.
Use Hammer and Hanging Man Single Candlestick Patterns?
Detect hammer and h anging man single candlestick patterns.
Use Inverted Hammer and Shooting Star Single Candlestick Patterns?
Detect inverted hammer and s hooting star single candlestick patterns.
Dual Candlestick Patterns
This module detects Engulfing, Tweezer Bottoms, Tweezer Tops, Harami, Inside Bar, Piercing Line, Dark Cloud Cover dual candlestick patterns.
Below are the inputs of this module:
Use Engulfing Dual Candlestick Pattern?
Detect engulfing dual candlestick pattern.
Validate Engulfing by comparing highs and lows?
If checked, the second bar must engulf the previous bar’s high/low also. If unchecked, the second bar should only engulf the real body of the first bar.
Use Tweezer Bottoms and Tops Dual Candlestick Patterns?
Detect tweezer bottoms and tweezer tops dual candlestick patterns.
Check the shadow equality of Tweezer Bottom and Tops?
Check if the shadows of the tweezer bars are about the same length.
Detect Harami Dual Candlestick Pattern?
Detect harami dual candlestick pattern.
Use High/Low of the second Harami candle instead of Open/Close price?
If checked, the body of the child must be within High and Low of the mother bar. Otherwise, only open/close prices will be checked.
Detect Inside Bar Dual Candlestick Pattern?
Detect inside bar dual candlestick pattern.
Treat Inside Bar as a reversal pattern?
If checked, inside bar will be treated as a bullish/bearish reversal pattern.
Check if the Inside bar formed in the upper/lower half of the Mother bar?
Check if the inside bar forms within the upper/lower body half of the mother. Then it will be treated as a bullish/bearish inside bar .
Detect the Inside Bar only if the previous candle closes outside of the Keltner channel?
This option effects identifying the inside bar . Such that, an inside bar will be detected only if the previous candle closes outside of Keltner Channel . Inside bars are effective when the market is extended and this is a nice way to check for that.
Confirm Inside Bar with the next close breaching the low/high of the inside bar?
Check if the next bar breaches inside bar’s high/low. Then it will be treated as a bullish/bearish inside bar .
Use Piercing Line and Dark Cloud Cover Dual Candlestick Patterns?
Detect Piercing Line and Dark Cloud Cover dual candlestick patterns.
Triple Candlestick Patterns
This module detects Morning Star , Evening Star, Three White Soldiers, Three Black Crows, Three Inside Up, Three Inside Down, Three Line Strike, Abandoned Baby, NR4, NR7 candlestick patterns.
Below are the inputs of this module:
Use Morning and Evening Star Triple Candlestick Pattern?
Detect morning and evening star triple candlestick patterns.
Don't allow the second candle's body to overlap with the first and third candle?
If checked, high and low of the second candle cannot overlap with the first and third candle for morning and evening star candlestick patterns.
The third candle must close beyond the midpoint of the first candle?
If checked, the third candle must close beyond the midpoint of the first candle for morning and evening star candlestick patterns.
Use Three White Soldiers and Three Black Crows Triple Candlestick Pattern?
Detect three white soldiers and three black crows triple candlestick pattern.
Compare bodies of Three White Soldiers and Three Black Crows candles?
You also have the possibility of comparing bodies of the candles in a way that every consecutive candle must have a bigger body than the previous candle.
Check if each candle (TWS&TBC) opens in the middle price range of the previous day?
You can check if each candle of three white soldiers and three black crows opens in the middle price range of the previous day.
Use Three Inside Up/Down Triple Candlestick Pattern?
Detect three inside up and three inside down triple candlestick pattern.
Check candles' bodies and closing prices for Three Inside Up/Down?
There are two different definitions for three inside up/down candlestick patterns. This option allows you to select one of those definitions. That is;
If unchecked , the second candle should make it up all the way to the midpoint of the first candle. Also, the third candle needs to close above the first candle’s high.
If checked , the second candle opens and closes within the real body of the first candle. Also, the third candle needs to close above the first candle's high.
Use Three Line Strike Candlestick Pattern?
Detect three line strike triple candlestick pattern.
Compare High/Lows instead of Open/Close for the Three Line Strike Pattern?
If checked, it will compare high/lows instead of open/close prices for the three line strike pattern.
Use Abandoned Baby Triple Candlestick Pattern?
Detect abandoned baby triple candlestick pattern. If you choose to tolerate opening and closing prices, high and low prices will also be tolerated for abandoned baby.
Use NR4 Candlestick Pattern?
Detect NR4 candlestick pattern.
Use NR7 Candlestick Pattern?
Detect NR7 candlestick pattern.
Confirm Narrow Range Candlestick Patterns with next closing price?
You can confirm NR4 and NR7 candlestick patterns with the next closing price. That way they will be identified as bullish or bearish patterns.
NOTES FROM THE AUTHOR
Please do not hesitate to contact me if you have any questions.
If you are not familiar with a specific candlestick pattern, try to google it. If you still need help, you can always contact me.
If you find a bug, or you think the indicator does not work as intended, please contact me with a screenshot of the chart. Also, please mention how you set up the user inputs.
If you have any ideas to further improve this indicator, please feel free to share it with me :)
LIKE , if you like it. SHARE if you think it would be useful for others too. FOLLOW for future updates and new indicators.