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
Komut dosyalarını "bar" için ara
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.
Forex Insight Pro 3.0
Forex Insight Pro 3.0 for TradingView gives you abilities to see the stories hiding in the graphs of markets. It marks and reminds you about important parameters that are happening on the graph including:
Helps you to label the numbers from sequential counting of CC-X which compares the Close price of the right bar to the Close price of the left bar in a group of X price bars. For example CC-5 will compare the Close of right bar (current bar) to the Close of left bar in a group of 5 price bars (right, left and other 3 bars in the middle). If the close of right bar is higher than the close of left bar, an increasing number will be printed above the right bar. On the other hand, an increasing number will be printed below the right bar if the close of right bar is lower than the close of left bar. Sequences of consecutive increasing numbers above or below the price bars indicate buying or selling pressure in the market.
Helps you to generate CC-X Support and Resistance levels which are the highest or lowest prices in the range of settable number of bars. For example, if 9 consecutive CC-5 below the price bars is specified, the resistance line will be plotted at the highest price of the most recent 9 bars. Similarly, if 9 consecutive CC-5 above the price bars is specified, the support line will be plotted at the lowest price of the most recent 9 bars. These CC-5 support and resistance levels often become important price structures in the graph for breakout or trend reversal later on.
Helps you to notice increment / decrement of Middle line of the Bollinger band indicator or increment/decrement of MACD indicator in colors. The normal Bollinger band indicator will have the gray middle line. You can set its color to blue/fuchsia to reflect increasing/decreasing value of the Bollinger middle line or set its color to lime/red to reflect increasing/decreasing MACD value.
Helps you to notice high level of RSI value by printing "H-RSI" above the price bar if the RSI value is greater than the preset value such as 70% or notice low level of RSI value by printing "L-RSI" below the price bar if the RSI value is less than the preset value such as 30%. The "H-RSI" and "L-RSI" could be used as warning signs that the reversal of the price trend might follow in the near future.
Helps you to notice the crossing of MACD line and its smoothing Signal line by printing "MACD > Sig" below the price bar if the MACD line crosses above the Signal line and printing "MACD < Sig" above the price bar if the MACD line crosses below the Signal line. Crossing of MACD and Signal lines could be used as warning signs that the reversal of the price trend might follow in the near future.d as warning signs that the reversal of the price trend might follow in the near future.
Helps you to notice the crossing of MACD line between the positive and negative zones by printing "MACD > 0" below the price bar if the MACD line changes to positive region and printing "MACD < 0" above the price bar if the MACD line crosses into the negative region. Changing the sign of MACD value could be used as warning signs that the reversal of the price trend might follow in the near future.
Helps you to notice the crossing of the fast simple moving average line and slow simple moving average line by printing "F > S" below the price bar if the fast SMA line crosses above the slow SMA line and printing "F < S" above the price bar if the fast SMA line crosses below the slow SMA line. Crossings of fast and slow SMA often indicate reversal of the price trends. the price bar if the fast SMA line crosses below the slow SMA line. Crossings of fast and slow SMA often indicate reversal of the price trends.
Helps you to label the Local Maximum and Local Minimum bars. If the high price of the middle bar inside a group of 3 bars is higher than its left and right neighbors, the label "Max" is printed above that middle price bar. Similarly, the label "Min" is printed below that middle price bar if the low price of it inside a group of 3 bars is lower than those of its left and right neighbors. Local Maximum and Minimum helps a lot in drawing the most recent supply and demand lines in which the price may breakout from.
Parameters of features in the above list could be changed, or turned on/off easily in the input options.
The source code of Forex Insight Pro 3.0 custom indicator is protected. Only invited TradingView members can apply this indicator to their forex, crypto currencies and stock price charts. Lifetime invitation is for 100 USD with free future upgrade and online support. Rental invitation is for 10 USD/month. Paypal, bank transfer and Bitcoin payments are welcome.
The author (Dr.Graph or Nimit Chomnawang, Ph.D) can be contacted with his TradingView handle .
Infinite EMA with Alpha Control♾️ Infinite EMA with Alpha Control
What Makes This EMA "Infinite"?
Unlike traditional EMA indicators that are limited to typical periods (1-5000), this Infinite EMA breaks all boundaries. You can create EMAs with periods of 1,000, 10,000, or even 1,000,000 bars - that's why it's called "infinite"! Also Infinite EMA starts working immediately from the very first bar on your chart
Why This EMA is "Infinite":
1. Mathematically: When N → ∞, alpha → 0, meaning infinitely long "memory"
2. Practically: You can set any period - even 100,000 bars
3. Flexibility: Alpha allows precise control over the "forgetting speed"
How Does It Work?
The magic lies in the Alpha parameter. While regular EMAs use fixed formulas, this indicator gives you direct control over the EMA's "memory" through Alpha values:
• High Alpha (0.1-0.2): Fast reaction, short memory
• Medium Alpha (0.01-0.05): Balanced response
• Low Alpha (0.0001-0.001): Extremely slow reaction, very long memory
• Ultra-low Alpha (0.000001): Almost frozen in time
The Mathematical Formula:
Alpha = 2 / (Period + 1)
This means you can achieve any EMA period by adjusting Alpha, giving you infinite flexibility!
Expanded "Infinite EMA" Table:
Period EMA (N) - Alpha (Rounded) - Alpha (Exact) - Description
10 - 0.1818 - 0.181818... - Fast EMA
20 - 0.0952 - 0.095238... - Short-term
50 - 0.0392 - 0.039215... - Medium-term
100 - 0.0198 - 0.019801... - Long-term
200 - 0.0100 - 0.009950... - Standard long-term
500 - 0.0040 - 0.003996... - Very long-term
1,000 - 0.0020 - 0.001998... - Super long-term
2,000 - 0.0010 - 0.000999... - Ultra long-term
5,000 - 0.0004 - 0.000399... - Mega long-term
10,000 - 0.0002 - 0.000199... - Giga long-term
25,000 - 0.00008 - 0.000079... - Century-scale EMA
50,000 - 0.00004 - 0.000039... - Practically motionless
100,000 - 0.00002 - 0.000019... - "Glacial" EMA
500,000 - 0.000004 - 0.000003... - Geological timescale
1,000,000 - 0.000002 - 0.000001... - Approaching constant
5,000,000 - 0.0000004 - 0.0000003... - Virtually static
10,000,000 - 0.0000002 - 0.0000001... - Nearly flat line
100,000,000 - 0.00000002 - 0.00000001... - Mathematical infinity
Formula: Alpha = 2/(N+1) where N is the EMA period
Key Features:
Dual EMA System: Run fast and slow EMAs simultaneously
Crossover Signals: Automatic buy/sell signals with customizable alerts
Alpha Control: Direct mathematical control over EMA behavior
Infinite Periods: From 1 to 100,000,000+ bars
Visual Customization: Colors, fills, backgrounds, signal sizes
Instant Start: Works accurately from the very first bar
Update Intervals: Control calculation frequency for noise reduction
Why Choose Infinite EMA?
1. Unlimited Flexibility: Any period you can imagine
2. Mathematical Precision: Direct alpha control for exact behavior
3. Professional Grade: Suitable for all trading styles
4. Easy to Use: Simple settings with powerful results
5. No Warm-up Period: Accurate values from bar #1
Simple Explanation:
Think of EMA as a "memory system":
• High Alpha = Short memory (forgets quickly, reacts fast)
• Low Alpha = Long memory (remembers everything, moves slowly)
With Infinite EMA, you can set the "memory length" to anything from seconds to centuries!
⚡ Instant Start Feature - EMA from First Bar
Immediate Calculation from Bar #1
Unlike traditional EMA indicators that require a "warm-up period" of N bars before showing accurate values, Infinite EMA starts working immediately from the very first bar on your chart.
How It Works:
Traditional EMA Problem:
• Standard 200-period EMA: Needs 200+ bars to become accurate
• First 200 bars: Shows incorrect/unstable values
• Result: Large portions of historical data are unusable
Infinite EMA Solution:
Bar #1: EMA = Current Price (perfect starting point)
Bar #2: EMA = Alpha × Price + (1-Alpha) × Previous EMA
Bar #3: EMA = Alpha × Price + (1-Alpha) × Previous EMA
...and so on
Key Benefits:
No Warm-up Period: Start trading signals from day one
Full Chart Coverage: Every bar has a valid EMA value
Historical Accuracy: Backtesting works on entire dataset
New Markets: Works perfectly on newly listed assets
Short Datasets: Effective even with limited historical data
Practical Impact:
Scenario Traditional EMA Infinite EMA
New cryptocurrency Unusable for first 200 days ✅ Works from day 1
Limited data (< 200 bars) Inaccurate values ✅ Fully functional
Backtesting Must skip first 200 bars ✅ Test entire history
Real-time trading Wait for stabilization ✅ Trade immediately
Technical Implementation:
if barstate.isfirst
EMA := currentPrice // Perfect initialization
else
EMA := alpha × currentPrice + (1-alpha) × previousEMA
This smart initialization ensures mathematical accuracy from the very first calculation, eliminating the traditional EMA "ramp-up" problem.
Why This Matters:
For Backesters: Use 100% of available data
For Live Trading: Get signals immediately on any timeframe
For Researchers: Analyze complete datasets without gaps
Bottom Line: Infinite EMA is ready to work the moment you add it to your chart - no waiting, no warm-up, no exceptions!
Unlike traditional EMAs that require a "warm-up period" of 200+ bars before showing accurate values, Infinite EMA starts working immediately from bar #1.
This breakthrough eliminates the common problem where the first portion of your chart shows unreliable EMA data. Whether you're analyzing a newly listed cryptocurrency, working with limited historical data, or backtesting strategies, every single bar provides mathematically accurate EMA values.
No more waiting periods, no more unusable data sections - just instant, reliable trend analysis from the moment you apply the indicator to any chart.
🔄 Update Interval Bars Feature
The Update Interval feature allows you to control how frequently the EMA recalculates, providing flexible noise filtering without changing the core mathematics.
Set to 1 for standard behavior (updates every bar), or increase to 5-10 for smoother signals that update less frequently. Higher intervals reduce market noise and false signals but introduce slightly more lag. This is particularly useful on volatile timeframes where you want the EMA's directional bias without every minor price fluctuation affecting the calculation.
Perfect for swing traders who prefer cleaner, more stable trend lines over hyper-responsive indicators.
Conclusion
The Infinite EMA transforms the traditional EMA from a fixed-period tool into a precision instrument with unlimited flexibility. By understanding the Alpha-Period relationship, traders can create custom EMAs that perfectly match their trading style, timeframe, and market conditions.
The "infinite" nature comes from the ability to set any period imaginable - from ultra-fast 2-bar EMAs to glacially slow 10-million-bar EMAs, all controlled through a single Alpha parameter.
________________________________________
Whether you're a beginner looking for simple trend following or a professional researcher analyzing century-long patterns, Infinite EMA adapts to your needs. The power of infinite periods is now in your hands! 🚀
Go forward to the horizon. When you reach it, a new one will open up.
- J. P. Morgan
Dual Volume Profiles: Session + Rolling (Range Delineation)Dual Volume Profiles: Session + Rolling (Range Delineation)
INTRO
This is a probability-centric take on volume profile. I treat the volume histogram as an empirical PDF over price, updated in real time, which makes multi-modality (multiple acceptance basins) explicit rather than assumed away. The immediate benefit is operational: if we can read the shape of the distribution, we can infer likely reversion levels (POC), acceptance boundaries (VAH/VAL), and low-friction corridors (LVNs).
My working hypothesis is that what traders often label “fat tails” or “power-law behavior” at short horizons is frequently a tail-conditioned view of a higher-level Gaussian regime. In other words, child distributions (shorter periodicities) sit within parent distributions (longer periodicities); when price operates in the parent’s tail, the child regime looks heavy-tailed without being fundamentally non-Gaussian. This is consistent with a hierarchical/mixture view and with the spirit of the central limit theorem—Gaussian structure emerges at aggregate scales, while local scales can look non-Gaussian due to nesting and conditioning.
This indicator operationalizes that view by plotting two nested empirical PDFs: a rolling (local) profile and a session-anchored profile. Their confluence makes ranges explicit and turns “regime” into something you can see. For additional nesting, run multiple instances with different lookbacks. When using the default settings combined with a separate daily VP, you effectively get three nested distributions (local → session → daily) on the chart.
This indicator plots two nested distributions side-by-side:
Rolling (Local) Profile — short-window, prorated histogram that “breathes” with price and maps the immediate auction.
Session Anchored Profile — cumulative distribution since the current session start (Premkt → RTH → AH anchoring), revealing the parent regime.
Use their confluence to identify range floors/ceilings, mean-reversion magnets, and low-volume “air pockets” for fast traverses.
What it shows
POC (dashed): central tendency / “magnet” (highest-volume bin).
VAH & VAL (solid): acceptance boundaries enclosing an exact Value Area % around each profile’s POC.
Volume histograms:
Rolling can auto-color by buy/sell dominance over the lookback (green = buying ≥ selling, red = selling > buying).
Session uses a fixed style (blue by default).
Session anchoring (exchange timezone):
Premarket → anchors at 00:00 (midnight).
RTH → anchors at 09:30.
After-hours → anchors at 16:00.
Session display span:
Session Max Span (bars) = 0 → draw from session start → now (anchored).
> 0 → draw a rolling window N bars back → now, while still measuring all volume since session start.
Why it’s useful
Think in terms of nested probability distributions: the rolling node is your local Gaussian; the session node is its parent.
VA↔VA overlap ≈ strong range boundary.
POC↔POC alignment ≈ reliable mean-reversion target.
LVNs (gaps) ≈ low-friction corridors—expect quick moves to the next node.
Quick start
Add to chart (great on 5–10s, 15–60s, 1–5m).
Start with: bins = 240, vaPct = 0.68, barsBack = 60.
Watch for:
First test & rejection at overlapping VALs/VAHs → fade back toward POC.
Acceptance beyond VA (several closes + growing outer-bin mass) → traverse to the next node.
Inputs (detailed)
General
Lookback Bars (Rolling)
Count of most-recent bars for the rolling/local histogram. Larger = smoother node that shifts slower; smaller = more reactive, “breathing” profile.
• Typical: 40–80 on 5–10s charts; 60–120 on 1–5m.
• If you increase this but keep Number of Bins fixed, each bin aggregates more volume (coarser bins).
Number of Bins
Vertical resolution (price buckets) for both rolling and session histograms. Higher = finer detail and crisper LVNs, but more line objects (closer to platform limits).
• Typical: 120–240 on 5–10s; 80–160 on 1–5m.
• If you hit performance or object limits, reduce this first.
Value Area %
Exact central coverage for VAH/VAL around POC. Computed empirically from the histogram (no Gaussian assumption): the algorithm expands from POC outward until the chosen % is enclosed.
• Common: 0.68 (≈“1σ-like”), 0.70 for slightly wider core.
• Smaller = tighter VA (more breakout flags). Larger = wider VA (more reversion bias).
Max Local Profile Width (px)
Horizontal length (in pixels) of the rolling bars/lines and its VA/POC overlays. Visual only (does not affect calculations).
Session Settings
RTH Start/End (exchange tz)
Defines the current session anchor (Premkt=00:00, RTH=your start, AH=your end). The session histogram always measures from the most recent session start and resets at each boundary.
Session Max Span (bars, 0 = full session)
Display window for session drawings (POC/VA/Histogram).
• 0 → draw from session start → now (anchored).
• > 0 → draw N bars back → now (rolling look), while still measuring all volume since session start.
This keeps the “parent” distribution measurable while letting the display track current action.
Local (Rolling) — Visibility
Show Local Profile Bars / POC / VAH & VAL
Toggle each overlay independently. If you approach object limits, disable bars first (POC/VA lines are lighter).
Local (Rolling) — Colors & Widths
Color by Buy/Sell Dominance
Fast uptick/downtick proxy over the rolling window (close vs open):
• Buying ≥ Selling → Bullish Color (default lime).
• Selling > Buying → Bearish Color (default red).
This color drives local bars, local POC, and local VA lines.
• Disable to use fixed Bars Color / POC Color / VA Lines Color.
Bars Transparency (0–100) — alpha for the local histogram (higher = lighter).
Bars Line Width (thickness) — draw thin-line profiles or chunky blocks.
POC Line Width / VA Lines Width — overlay thickness. POC is dashed, VAH/VAL solid by design.
Session — Visibility
Show Session Profile Bars / POC / VAH & VAL
Independent toggles for the session layer.
Session — Colors & Widths
Bars/POC/VA Colors & Line Widths
Fixed palette by design (default blue). These do not change with buy/sell dominance.
• Use transparency and width to make the parent profile prominent or subtle.
• Prefer minimal? Hide session bars; keep only session VA/POC.
Reading the signals (detailed playbook)
Core definitions
POC — highest-volume bin (fair price “magnet”).
VAH/VAL — upper/lower bounds enclosing your Value Area % around POC.
Node — contiguous block of high-volume bins (acceptance).
LVN — low-volume gap between nodes (low friction path).
Rejection vs Acceptance (practical rule)
Rejection at VA edge: 0–1 closes beyond VA and no persistent growth in outer bins.
Acceptance beyond VA: ≥3 closes beyond VA and outer-bin mass grows (e.g., added volume beyond the VA edge ≥ 5–10% of node volume over the last N bars). Treat acceptance as regime change.
Confluence scores (make boundary/target quality objective)
VA overlap strength (range boundary):
C_VA = 1 − |VA_edge_local − VA_edge_session| / ATR(n)
Values near 1.0 = tight overlap (stronger boundary).
Use: if C_VA ≥ 0.6–0.8, treat as high-quality fade zone.
POC alignment (magnet quality):
C_POC = 1 − |POC_local − POC_session| / ATR(n)
Higher C_POC = greater chance a rotation completes to that fair price.
(You can estimate these by eye.)
Setups
1) Range Fade at VA Confluence (mean reversion)
Context: Local VAL/VAH near Session VAL/VAH (tight overlap), clear node, local color not screaming trend (or flips to your side).
Entry: First test & rejection at the overlapped band (wick through ok; prefer close back inside).
Stop: A tick/pip beyond the wider of the two VA edges or beyond the nearest LVN, a small buffer zone can be used to judge whether price is truly rejecting a VAL/VAH or simply probing.
Targets: T1 node mid; T2 POC (size up when C_POC is high).
Flip: If acceptance (rule above) prints, flip bias or stand down.
2) LVN Traverse (continuation)
Context: Price exits VA and enters an LVN with acceptance and growing outer-bin volume.
Entry: Aggressive—first close into LVN; Conservative—retest of the VA edge from the far side (“kiss goodbye”).
Stop: Back inside the prior VA.
Targets: Next node’s VA edge or POC (edge = faster exits; POC = fuller rotations).
Note: Flatter VA edge (shallower curvature) tends to breach more easily.
3) POC→POC Magnet Trade (rotation completion)
Context: Local POC ≈ Session POC (high C_POC).
Entry: Fade a VA touch or pullback inside node, aiming toward the shared POC.
Stop: Past the opposite VA edge or LVN beyond.
Target: The shared POC; optional runner to opposite VA if the node is broad and time-of-day is supportive.
4) Failed Break (Reversion Snap-back)
Context: Push beyond VA fails acceptance (re-enters VA, outer-bin growth stalls/shrinks).
Entry: On the re-entry close, back toward POC.
Stop/Target: Stop just beyond the failed VA; target POC, then opposite VA if momentum persists.
How to read color & shape
Local color = most recent sentiment:
Green = buying ≥ selling; Red = selling > buying (over the rolling window). Treat as context, not a standalone signal. A green local node under a blue session VAH can still be a fade if the parent says “over-valued.”
Shape tells friction:
Fat nodes → rotation-friendly (fade edges).
Sharp LVN gaps → traversal-friendly (momentum continuation).
Time-of-day intuition
Right after session anchor (e.g., RTH 09:30): Session profile is young and moves quickly—treat confluence cautiously.
Mid-session: Cleanest behavior for rotations.
Close / news: Expect more traverses and POC migrations; tighten risk or switch playbooks.
Risk & execution guidance
Use tight, mechanical stops at/just beyond VA or LVN. If you need wide stops to survive noise, your entry is late or the node is unstable.
On micro-timeframes, account for fees & slippage—aim for targets paying ≥2–3× average cost.
If acceptance prints, don’t fight it—flip, reduce size, or stand aside.
Suggested presets
Scalp (5–10s): bins 120–240, barsBack 40–80, vaPct 0.68–0.70, local bars thin (small bar width).
Intraday (1–5m): bins 80–160, barsBack 60–120, vaPct 0.68–0.75, session bars more visible for parent context.
Performance & limits
Reuses line objects to stay under TradingView’s max_lines_count.
Very large bins × multiple overlays can still hit limits—use visibility toggles (hide bars first).
Session drawings use time-based coordinates to avoid “bar index too far” errors.
Known nuances
Rolling buy/sell dominance uses a simple uptick/downtick proxy (close vs open). It’s fast and practical, but it’s not a full tape classifier.
VA boundaries are computed from the empirical histogram—no Gaussian assumption.
This script does not calculate the full daily volume profile. Several other tools already provide that, including TradingView’s built-in Volume Profile indicators. Instead, this indicator focuses on pairing a rolling, short-term volume distribution with a session-wide distribution to make ranges more explicit. It is designed to supplement your use of standard or periodic volume profiles, not replace them. Think of it as a magnifying lens that helps you see where local structure aligns with the broader session.
How to trade it (TL;DR)
Fade overlapping VA bands on first rejection → target POC.
Continue through LVN on acceptance beyond VA → target next node’s VA/POC.
Respect acceptance: ≥3 closes beyond VA + growing outer-bin volume = regime change.
FAQ
Q: Why 68% Value Area?
A: It mirrors the “~1σ” idea, but we compute it exactly from empirical volume, not by assuming a normal distribution.
Q: Why are my profiles thin lines?
A: Increase Bars Line Width for chunkier blocks; reduce for fine, thin-line profiles.
Q: Session bars don’t reach session start—why?
A: Set Session Max Span (bars) = 0 for full anchoring; any positive value draws a rolling window while still measuring from session start.
Changelog (v1.0)
Dual profiles: Rolling + Session with independent POC/VA lines.
Session anchoring (Premkt/RTH/AH) with optional rolling display span.
Dynamic coloring for the rolling profile (buying vs selling).
Fully modular toggles + per-feature colors/widths.
Thin-line rendering via bar line width.
Dip Hunter [BackQuant]Dip Hunter
What this tool does in plain language
Dip Hunter is a pullback detector designed to find high quality buy-the-dip opportunities inside healthy trends and to avoid random knife catches. It watches for a quick drop from a recent high, checks that the drop happened with meaningful participation and volatility, verifies short-term weakness inside a larger uptrend, then scores the setup and paints the chart so you can act with confidence. It also draws clean entry lines, provides a meter that shows dip strength at a glance, and ships with alerts that match common execution workflows.
How Dip Hunter thinks
It defines a recent swing reference, measures how far price has dipped off that high, and only looks at candidates that meet your minimum percentage drop.
It confirms the dip with real activity by requiring a volume spike and a volatility spike.
It checks structure with two EMAs. Price should be weak in the short term while the larger context remains constructive.
It optionally requires a higher-timeframe trend to be up so you focus on pullbacks in trending markets.
It bundles those checks into a score and shows you the score on the candles and on a gradient meter.
When everything lines up it paints a green triangle below the bar, shades the background, and (if you wish) draws a horizontal entry line at your chosen level.
Inputs and what they mean
Dip Hunter Settings
• Vol Lookback and Vol Spike : The script computes an average volume over the lookback window and flags a spike when current volume is a multiple of that average. A multiplier of 2.0 means today’s volume must be at least double the average. This helps filter noise and focuses on dips that other traders actually traded.
• Fast EMA and Slow EMA : Short-term and medium-term structure references. A dip is more credible if price closes below the fast EMA while the fast EMA is still below the slow EMA during the pullback. That is classic corrective behavior inside a larger trend.
• Price Smooth : Optional smoothing length for price-derived series. Use this if you trade very noisy assets or low timeframes.
• Volatility Len and Vol Spike (volatility) : The script checks both standard deviation and true range against their own averages. If either expands beyond your multiplier the market confirms the move with range.
• Dip % and Lookback Bars : The engine finds the highest high over the lookback window, then computes the percentage drawdown from that high to the current close. Only dips larger than your threshold qualify.
Trend Filter
• Enable Trend Filter : When on, Dip Hunter will only trigger if the market is in an uptrend.
• Trend EMA Period : The longer EMA that defines the session’s backbone trend.
• Minimum Trend Strength : A small positive slope requirement. In practice this means the trend EMA should be rising, and price should be above it. You can raise the value to be more selective.
Entries
• Show Entry Lines : Draws a horizontal guide from the signal bar for a fixed number of bars. Great for limit orders, scaling, or re-tests.
• Line Length (bars) : How far the entry guide extends.
• Min Gap (bars) : Suppresses new entry lines if another dip fired recently. Prevents clutter during choppy sequences.
• Entry Price : Choose the line level. “Low” anchors at the signal candle’s low. “Close” anchors at the signal close. “Dip % Level” anchors at the theoretical level defined by recent_high × (1 − dip%). This lets you work resting orders at a consistent discount.
Heat / Meter
• Color Bars by Score : Colors each candle using a red→white→green gradient. Red is overheated, green is prime dip territory, white is neutral.
• Show Meter Table : Adds a compact gradient strip with a pointer that tracks the current score.
• Meter Cells and Meter Position : Resolution and placement of the meter.
UI Settings
• Show Dip Signals : Plots green triangles under qualifying bars and tints the background very lightly.
• Show EMAs : Plots fast, slow, and the trend EMA (if the trend filter is enabled).
• Bullish, Bearish, Neutral colors : Theme controls for shapes, fills, and bar painting.
Core calculations explained simply
Recent high and dip percent
The script finds the highest high over Lookback Bars , calls it “recent high,” then calculates:
dip% = (recent_high − close) ÷ recent_high × 100.
If dip% is larger than Dip % , condition one passes.
Volume confirmation
It computes a simple moving average of volume over Vol Lookback . If current volume ÷ average volume > Vol Spike , we have a participation spike. It also checks 5-bar ROC of volume. If ROC > 50 the spike is forceful. This gets an extra score point.
Volatility confirmation
Two independent checks:
• Standard deviation of closes vs its own average.
• True range vs ATR.
If either expands beyond Vol Spike (volatility) the move has range. This prevents false triggers from quiet drifts.
Short-term structure
Price should close below the Fast EMA and the fast EMA should be below the Slow EMA at the moment of the dip. That is the anatomy of a pullback rather than a full breakdown.
Macro trend context (optional)
When Enable Trend Filter is on, the Trend EMA must be rising and price must be above it. The logic prefers “micro weakness inside macro strength” which is the highest probability pattern for buying dips.
Signal formation
A valid dip requires:
• dip% > threshold
• volume spike true
• volatility spike true
• close below fast EMA
• fast EMA below slow EMA
If the trend filter is enabled, a rising trend EMA with price above it is also required. When all true, the triangle prints, the background tints, and optional entry lines are drawn.
Scoring and visuals
Binary checks into a continuous score
Each component contributes to a score between 0 and 1. The script then rescales to a centered range (−50 to +50).
• Low or negative scores imply “overheated” conditions and are shaded toward red.
• High positive scores imply “ripe for a dip buy” conditions and are shaded toward green.
• The gradient meter repeats the same logic, with a pointer so you can read the state quickly.
Bar coloring
If you enable “Color Bars by Score,” each candle inherits the gradient. This makes sequences obvious. Red clusters warn you not to buy. White means neutral. Increasing green suggests the pullback is maturing.
EMAs and the trend EMA
• Fast EMA turns down relative to the slow EMA inside the pullback.
• Trend EMA stays rising and above price once the dip exhausts, which is your cue to focus on long setups rather than bottom fishing in downtrends.
Entry lines
When a fresh signal fires and no other signal happened within Min Gap (bars) , the indicator draws a horizontal level for Line Length bars. Use these lines for limit entries at the low, at the close, or at the defined dip-percent level. This keeps your plan consistent across instruments.
Alerts and what they mean
• Market Overheated : Score is deeply negative. Do not chase. Wait for green.
• Close To A Dip : Score has reached a healthy level but the full signal did not trigger yet. Prepare orders.
• Dip Confirmed : First bar of a fresh validated dip. This is the most direct entry alert.
• Dip Active : The dip condition remains valid. You can scale in on re-tests.
• Dip Fading : Score crosses below 0.5 from above. Momentum of the setup is fading. Tighten stops or take partials.
• Trend Blocked Signal : All dip conditions passed but the trend filter is offside. Either reduce risk or skip, depending on your plan.
How to trade with Dip Hunter
Classic pullback in uptrend
Turn on the trend filter.
Watch for a Dip Confirmed alert with green triangle.
Use the entry line at “Dip % Level” to stage a limit order. This keeps your entries consistent across assets and timeframes.
Initial stop under the signal bar’s low or under the next lower EMA band.
First target at prior swing high, second target at a multiple of risk.
If you use partials, trail the remainder under the fast EMA once price reclaims it.
Aggressive intraday scalps
Lower Dip % and Lookback Bars so you catch shallow flags.
Keep Vol Spike meaningful so you only trade when participation appears.
Take quick partials when price reclaims the fast EMA, then exit on Dip Fading if momentum stalls.
Counter-trend probes
Disable the trend filter if you intentionally hunt reflex bounces in downtrends.
Require strong volume and volatility confirmation.
Use smaller size and faster targets. The meter should move quickly from red toward white and then green. If it does not, step aside.
Risk management templates
Stops
• Conservative: below the entry line minus a small buffer or below the signal bar’s low.
• Structural: below the slow EMA if you aim for swing continuation.
• Time stop: if price does not reclaim the fast EMA within N bars, exit.
Position sizing
Use the distance between the entry line and your structural stop to size consistently. The script’s entry lines make this distance obvious.
Scaling
• Scale at the entry line first touch.
• Add only if the meter stays green and price reclaims the fast EMA.
• Stop adding on a Dip Fading alert.
Tuning guide by market and timeframe
Equities daily
• Dip %: 1.5 to 3.0
• Lookback Bars: 5 to 10
• Vol Spike: 1.5 to 2.5
• Volatility Len: 14 to 20
• Trend EMA: 100 or 200
• Keep trend filter on for a cleaner list.
Futures and FX intraday
• Dip %: 0.4 to 1.2
• Lookback Bars: 3 to 7
• Vol Spike: 1.8 to 3.0
• Volatility Len: 10 to 14
• Use Min Gap to avoid clusters during news.
Crypto
• Dip %: 3.0 to 6.0 for majors on higher timeframes, lower on 15m to 1h
• Lookback Bars: 5 to 12
• Vol Spike: 1.8 to 3.0
• ATR and stdev checks help in erratic sessions.
Reading the chart at a glance
• Green triangle below the bar: a validated dip.
• Light green background: the current bar meets the full condition.
• Bar gradient: red is overheated, white is neutral, green is dip-friendly.
• EMAs: fast below slow during the pullback, then reclaim fast EMA on the bounce for quality continuation.
• Trend EMA: a rising spine when the filter is on.
• Entry line: a fixed level to anchor orders and risk.
• Meter pointer: right side toward “Dip” means conditions are maturing.
Why this combination reduces false positives
Any single criterion will trigger too often. Dip Hunter demands a dip off a recent high plus a volume surge plus a volatility expansion plus corrective EMA structure. Optional trend alignment pushes odds further in your favor. The score and meter visualize how many of these boxes you are actually ticking, which is more reliable than a binary dot.
Limitations and practical tips
• Thin or illiquid symbols can spoof volume spikes. Use larger Vol Lookback or raise Vol Spike .
• Sideways markets will show frequent small dips. Increase Dip % or keep the trend filter on.
• News candles can blow through entry lines. Widen stops or skip around known events.
• If you see many back-to-back triangles, raise Min Gap to keep only the best setups.
Quick setup recipes
• Clean swing trader: Trend filter on, Dip % 2.0 to 3.0, Vol Spike 2.0, Volatility Len 14, Fast 20 EMA, Slow 50 EMA, Trend 100 EMA.
• Fast intraday scalper: Trend filter off, Dip % 0.7 to 1.0, Vol Spike 2.5, Volatility Len 10, Fast 9 EMA, Slow 21 EMA, Min Gap 10 bars.
• Crypto swing: Trend filter on, Dip % 4.0, Vol Spike 2.0, Volatility Len 14, Fast 20 EMA, Slow 50 EMA, Trend 200 EMA.
Summary
Dip Hunter is a focused pullback engine. It quantifies a real dip off a recent high, validates it with volume and volatility expansion, enforces corrective structure with EMAs, and optionally restricts signals to an uptrend. The score, bar gradient, and meter make reading conditions instant. Entry lines and alerts turn that read into an executable plan. Tune the thresholds to your market and timeframe, then let the tool keep you patient in red, selective in white, and decisive in green.