Industry Group Strength - IndiaPresenting the Industry Group Strength Indicator for India market, designed to help traders identify top-performing stocks within specific industry groups that are predefined.
⦿ Identifies Leading Stocks in Industry Groups
⦿ Analyses the following metrics
YTD Return : Measures stock performance from the start of the year.
RS Rating : Relative Strength rating for user-selected periods.
% Return : Percentage return over a user-selected lookback period.
Features
This indicator dynamically recognises the industry group of the current stock on the chart and ranks stocks within that group based on predefined data points. Traders can add this indicator to focus on top-performing stocks relative to their industry.
⦿ Color-coded for Easy Visualisation
You can choose from the following key metrics to rank stocks:
YTD Return
RS Rating
% Return
⦿ Table Format with Performance Metrics Compact mode
Vertical View
Horizontal View
All of the three metrics are shown in the compact mode and the current stock that is viewed is highlighted!
Vertical view
Horizontal view
Stock Ranking
Stocks are ranked based on their performance within industry groups, enabling traders to easily spot leaders and laggards in each sector. Color-coded gradients visually represent the stocks’ performance rankings, with higher percentile rankings indicating better performance.
Relative Strength (RS)
Relative Strength (RS) compares a stock’s performance against the benchmark index. The RS value is normalized from 1 to 99, making it easier to compare across different stocks. A rising RS value indicates that the stock is outperforming the market, helping traders quickly gauge relative performance within industry groups.
Limitations
At the time of developing this indicator, Pine requests are limited to 40 per script so the predefined symbols had to be filtered to 40 per Industry group
Stocks Filters
Filters that are used to filter the stocks in an Industry group to have maximum of 40 stocks
⦿ Auto, Chemical, Engineering, Finance, Pharma
Market Cap >= 1000 Crores and Market Cap <= 60000 Crores
Price >= 30 and Price <= 6000
50 Days Average ( Price * Volume ) >= 6 Crores
⦿ For rest of the Industry groups
Market Cap >= 1000 Crores and Market Cap <= 100000 Crores
Price >= 20 and Price <= 10000
50 Days Average ( Price * Volume ) >= 3 Crores
Credits
This indicator is forked from the Script for US market by @Amphibiantrading Thanks Brandon for the beginning of this indicator.
This indicator is built on TradingView’s new dynamic requests feature, thanks to @PineCoders for making this possible!
Statistics
Williams %R StrategyThe Williams %R Strategy implemented in Pine Script™ is a trading system based on the Williams %R momentum oscillator. The Williams %R indicator, developed by Larry Williams in 1973, is designed to identify overbought and oversold conditions in a market, helping traders time their entries and exits effectively (Williams, 1979). This particular strategy aims to capitalize on short-term price reversals in the S&P 500 (SPY) by identifying extreme values in the Williams %R indicator and using them as trading signals.
Strategy Rules:
Entry Signal:
A long position is entered when the Williams %R value falls below -90, indicating an oversold condition. This threshold suggests that the market may be near a short-term bottom, and prices are likely to reverse or rebound in the short term (Murphy, 1999).
Exit Signal:
The long position is exited when:
The current close price is higher than the previous day’s high, or
The Williams %R indicator rises above -30, indicating that the market is no longer oversold and may be approaching an overbought condition (Wilder, 1978).
Technical Analysis and Rationale:
The Williams %R is a momentum oscillator that measures the level of the close relative to the high-low range over a specific period, providing insight into whether an asset is trading near its highs or lows. The indicator values range from -100 (most oversold) to 0 (most overbought). When the value falls below -90, it indicates an oversold condition where a reversal is likely (Achelis, 2000). This strategy uses this oversold threshold as a signal to initiate long positions, betting on mean reversion—an established principle in financial markets where prices tend to revert to their historical averages (Jegadeesh & Titman, 1993).
Optimization and Performance:
The strategy allows for an adjustable lookback period (between 2 and 25 days) to determine the range used in the Williams %R calculation. Empirical tests show that shorter lookback periods (e.g., 2 days) yield the most favorable outcomes, with profit factors exceeding 2. This finding aligns with studies suggesting that shorter timeframes can effectively capture short-term momentum reversals (Fama, 1970; Jegadeesh & Titman, 1993).
Scientific Context:
Mean Reversion Theory: The strategy’s core relies on mean reversion, which suggests that prices fluctuate around a mean or average value. Research shows that such strategies, particularly those using oscillators like Williams %R, can exploit these temporary deviations (Poterba & Summers, 1988).
Behavioral Finance: The overbought and oversold conditions identified by Williams %R align with psychological factors influencing trading behavior, such as herding and panic selling, which often create opportunities for price reversals (Shiller, 2003).
Conclusion:
This Williams %R-based strategy utilizes a well-established momentum oscillator to time entries and exits in the S&P 500. By targeting extreme oversold conditions and exiting when these conditions revert or exceed historical ranges, the strategy aims to capture short-term gains. Scientific evidence supports the effectiveness of short-term mean reversion strategies, particularly when using indicators sensitive to momentum shifts.
References:
Achelis, S. B. (2000). Technical Analysis from A to Z. McGraw Hill.
Fama, E. F. (1970). Efficient Capital Markets: A Review of Theory and Empirical Work. The Journal of Finance, 25(2), 383-417.
Jegadeesh, N., & Titman, S. (1993). Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency. The Journal of Finance, 48(1), 65-91.
Murphy, J. J. (1999). Technical Analysis of the Financial Markets: A Comprehensive Guide to Trading Methods and Applications. New York Institute of Finance.
Poterba, J. M., & Summers, L. H. (1988). Mean Reversion in Stock Prices: Evidence and Implications. Journal of Financial Economics, 22(1), 27-59.
Shiller, R. J. (2003). From Efficient Markets Theory to Behavioral Finance. Journal of Economic Perspectives, 17(1), 83-104.
Williams, L. (1979). How I Made One Million Dollars… Last Year… Trading Commodities. Windsor Books.
Wilder, J. W. (1978). New Concepts in Technical Trading Systems. Trend Research.
This explanation provides a scientific and evidence-based perspective on the Williams %R trading strategy, aligning it with fundamental principles in technical analysis and behavioral finance.
Kaufman's Adaptive Moving Average (KAMA)Another simple easy to use indicator that incorporates mean reversion and trend following.
Kaufman's Adaptive Moving Average (KAMA) is an indicator developed by Perry Kaufman that adjusts its sensitivity based on market volatility. It is designed to react more quickly during trending markets and slow down in sideways or volatile markets. The primary idea is that in a trending market, the moving average should be more sensitive to price changes, while in a non-trending market, it should be less responsive to noise.
KAMA Formula
The formula for the Kaufman Adaptive Moving Average is:
Efficiency Ratio (ER): Measures the efficiency of price movement over a given period.
ER
=
Smoothing Factor
Volatility
=
Sum of absolute price change
Sum of absolute price movement
ER=
Volatility
Smoothing Factor
=
Sum of absolute price movement
Sum of absolute price change
The Efficiency Ratio is calculated by taking the price change over a defined period and dividing it by the total price movement (which is the sum of absolute price changes).
Smoothing Constant (SC): This is a factor used to adjust the moving average's responsiveness:
SC
=
ER
×
(
2
/
(
𝑛
+
1
)
)
+
(
1
−
ER
)
×
(
2
/
(
𝑛
+
1
)
)
SC=ER×(2/(n+1))+(1−ER)×(2/(n+1))
where n is the length of the moving average period.
Steps to Calculate KAMA:
Efficiency Ratio (ER):
Calculate the sum of absolute price changes over the chosen period.
Calculate the sum of absolute price movements over the same period.
Smoothing Constant (SC):
Use the Efficiency Ratio to adjust the smoothing factor.
KAMA Calculation:
The initial KAMA is the simple moving average (SMA) of the first n periods.
For subsequent periods, KAMA is calculated using a formula based on the smoothing constant and previous KAMA values.
experiment with the variables as you like!!
Fourier Smoothed Volume Zone Oscillator ( FSVZO )Overview 🔎
The fourier smoothed Volume Zone Oscillator (FSVZO) is a versatile tool designed to provide traders with a detailed understanding of market conditions by examining volume dynamics. FSVZO applies a series of advanced regularization techniques aimed at trying to reduce market noise, making signals potentially more readable and actionable. This indicator combines traditional technical analysis tools with a unique set of smoothing functions, aimed at creating a more balanced and reliable oscillator that can assist traders in their decision-making process.
A Combination of Technical Elements for a Unique Edge 🔀
FSVZO integrates a variety of technical elements to offer a comprehensive perspective on the market. These elements can be used individually or in combination, depending on user preferences. Here are the main components:
Volume Zone Oscillator (VZO): This foundational element leverages volume data to identify trends and shifts in buying or selling pressure. Unlike a standalone VZO, the FSVZO incorporates a Fourier-based regularization technique to reduce false signals, allowing traders to focus on meaningful volume-driven movements.
Ehler's White Noise Filter: This component is a sophisticated filter that helps distinguish genuine market signals from white noise. By isolating the meaningful movements in price and volume, the white noise filter contributes to the clarity and reliability of the signals generated.
Divergences Detection: FSVZO also provides divergence signals (both hidden and regular) based on the oscillator and price action. Divergences can be used to anticipate possible market reversals or confirmations, enhancing the trader's ability to recognize significant market shifts.
Money Flow Index (MFI) Smoothing: The MFI is calculated and then smoothed using wavelet and whitenoise techniques, providing a cleaner view of money flow within the market. This helps reduce erratic fluctuations and focuses on more consistent trends.
Trendshift Visualization: The FSVZO features an optional trendshift indicator, highlighting shifts between bullish and bearish conditions. These visual cues make it easier to identify trend reversals, aiding traders in timely decision-making.
Flexible Display Options 📊
FSVZO offers a variety of display modes to cater to different trading styles and visual preferences:
Neon Style Plot: The oscillator is presented with neon-style plots primarily for aesthetic purposes.
Color Blindness Modes 🌈: FSVZO includes several color palettes to accommodate traders affected by different types of color blindness (Protanopia, Deuteranopia, Tritanopia, Achromatopsia). These options ensure that everyone can easily interpret the signals, regardless of visual impairments.
Take Profit Areas & Alerts: The indicator can display take profit areas based on overbought or oversold conditions of the smoothed oscillator, marked by background hues to provide a clear visual signal. Alerts for high and low thresholds can also be enabled to identify moments of increased buying or selling interest.
Divergences and Trend Analysis 🔍
FSVZO also aims to identify bullish and bearish divergences:
Regular Bullish/Bearish Divergence: These occur when the oscillator diverges from the price action, indicating a possible reversal.
Hidden Bullish/Bearish Divergence: These occur within a trend, signaling continuation opportunities that help traders capitalize on ongoing trends.
FSVZO also supports additional filtering for divergences, allowing users to refine the detection of divergences to better suit their trading preferences.
Enhanced Noise Filtering 🔄
One of the unique features of FSVZO is its Fourier Regularization and Ehler's White Noise Filter, which help improve signal reliability by reducing the impact of market noise. These filtering methods are beneficial for traders seeking to avoid whipsaws and focus on more meaningful market movements.
Why FSVZO Stands Out 🔑
Noise Reduction: By combining multiple filtering techniques, FSVZO is designed to react to price changes as quickly as possible while offering various smoothing options to reduce noise, which may make it less responsive but more stable.
Flexible Visualization: The option to use different display modes and the inclusion of color blindness-friendly palettes make FSVZO versatile and accessible to all traders.
Detailed Divergence Analysis: The integration of both regular and hidden divergence detection helps improve the potential for identifying trading opportunities.
Advanced Regularization Techniques: The use of Fourier transformation and white noise filters adds a unique aspect to volume analysis, differentiating FSVZO from other traditional volume oscillators.
Conclusion 🔒
The Regularized Volume Zone Oscillator (FSVZO) is a unique tool that brings together multiple advanced techniques to help traders better understand market conditions and volume dynamics. The indicator is designed to react to price changes as quickly as possible, which may lead to false signals; however, it also offers smoothing options to help reduce noise at the cost of reduced reaction speed. This balance between responsiveness and stability provides traders with flexibility in adapting the indicator to different market conditions. However, as with all indicators, it is crucial to combine FSVZO with other tools and maintain sound risk management practices.
FSVZO is primarily designed for more experienced traders due the number of different signals it provides. It offers enhanced insights into volume trends and market movement, and should be used alongside other indicators to reduce risk and false signals
Gauss KenJi Robot
Gauss KenJi Trading Robot: Precision and Automation for Traders
The Gauss KenJi robot is a cutting-edge trading solution designed for experienced traders seeking to enhance their decision-making through advanced statistical models and automation. Unlike traditional trading tools that rely on generic indicators prone to false signals, the Gauss KenJi robot offers an innovative approach by utilizing two unique indicators: the Kenji Indicator v.2.0 and the Gauss Indicator .
Kenji Indicator v.2.0
Traditional moving averages and related indicators often fail in flat market conditions, where frequent crossovers lead to confusing signals and false trends. The Kenji Indicator addresses this issue by using a combination of correlation analysis and moving averages to more accurately identify the market’s state. This real-time insight allows for better navigation of local trends, reducing noise and increasing the precision of trade signals.
Gauss Indicator
The Gauss Indicator brings the power of statistical analysis into trading by applying the 3 sigmas rule. It calculates and predicts the likely price ranges for specific time frames (hourly, daily, weekly) with probabilities of 68%, 95%, and 99%. This offers traders an actionable framework for setting stop-loss, take-profit, and identifying key support and resistance levels. By providing a clearer view of potential price movements, the Gauss Indicator improves decision-making, ensuring that traders enter and exit the market at optimal points.
Gauss KenJi Robot: How it Works
The Gauss KenJi robot operates on a statistical algorithm based on the Gaussian function, which uses market volatility as a core indicator of price movements. The robot opens positions in the direction of the trend when the price reaches the predetermined Gauss border. Position sizes are calculated according to the “Initial_lot” parameter, with stop-loss and take-profit levels defined by the “Pips” parameter. Trades are automatically closed either when profit targets or stop-loss limits are reached, or if local trend reversals are detected by the Kenji Indicator.
This highly adaptable algorithm can be applied to any asset class (stocks, forex, crypto, commodities) and any time frame, providing traders with a versatile tool to navigate various markets.
Why Gauss KenJi is Essential for Traders
1. Time Efficiency: The robot operates autonomously, allowing traders to step away from constant chart monitoring while still capitalizing on market movements.
2. Profit Maximization: By leveraging machine learning and advanced statistical models, the robot identifies opportunities faster than human traders, ensuring more profitable trades.
3. Risk Management: The robot strictly adheres to predefined rules, helping traders minimize losses and protect their capital in volatile market conditions.
4. Cross-market Versatility: Whether you’re trading forex, stocks, crypto, or commodities, Gauss KenJi adapts to different markets and time frames, making it a versatile tool for professional traders.
The Gauss KenJi robot is a comprehensive, scientifically driven trading solution designed to eliminate common pitfalls associated with traditional indicators. Its combination of the Kenji Indicator’s trend identification and the Gauss Indicator’s price prediction capabilities makes it an indispensable tool for traders looking to enhance both the precision of their trades and the automation of their strategies. Whether you are aiming for consistent daily profits or optimizing long-term trading strategies, Gauss KenJi offers the efficiency and accuracy required to stay ahead in today’s competitive markets.
VATICAN BANK CARTELVATICAN BANK CARTEL - Precision Signal Detection for Buyers.
The VATICAN BANK CARTEL indicator is a highly sophisticated tool designed specifically for buyers, helping them identify key market trends and generate actionable buy signals. Utilizing advanced algorithms, this indicator employs a multi-variable detection mechanism that dynamically adapts to price movements, offering real-time insights to assist in executing profitable buy trades. This indicator is optimized solely for identifying buying opportunities, ensuring that traders are equipped to make well-timed entries and exits, without signals for shorting or selling.
The recommended settings for VATICAN BANK CARTEL indicator is as follows:-
Depth Engine = 20,30,40,50,100.
Deviation Engine = 3,5,7,15,20.
Backstep Engine = 15,17,20,25.
NOTE:- But you can also use this indicator as per your setting, whichever setting gives you best results use that setting.
Key Features:
1.Adaptive Depth, Deviation, and Backstep Inputs:
The core of this indicator is its customizable Depth Engine, Deviation Engine, and Backstep Engine parameters. These inputs allow traders to adjust the sensitivity of the trend detection algorithm based on specific market conditions:
Depth: Defines how deep the indicator scans historical price data for potential trend reversals.
Deviation: Determines the minimum required price fluctuation to confirm a market movement.
Backstep: Sets the retracement level to filter false signals and maintain the accuracy of trend detection.
2. Visual Signal Representation:
The VATICAN BANK CARTEL plots highly visible labels on the chart to mark trend reversals. These labels are customizable in terms of size and transparency, ensuring clarity in various chart environments. Traders can quickly spot buying opportunities with green labels and potential square-off points with red labels, focusing exclusively on buy-side signals.
3.Real-Time Alerts:
The indicator is equipped with real-time alert conditions to notify traders of significant buy or square-off buy signals. These alerts, which are triggered based on the indicator’s internal signal logic, ensure that traders never miss a critical market movement on the buy side.
4.Custom Label Size and Transparency:
To enhance visual flexibility, the indicator allows the user to adjust label size (from small to large) and transparency levels. This feature provides a clean, adaptable view suited for different charting styles and timeframes.
How It Works:
The VATICAN BANK CARTEL analyzes the price action using a sophisticated algorithm that considers historical low and high points, dynamically detecting directional changes. When a change in market direction is detected, the indicator plots a label at the key reversal points, helping traders confirm potential entry points:
- Buy Signal (Green): Indicates potential buying opportunities based on a trend reversal.
- Square-Off Buy Signal (Red): Marks the exit point for open buy positions, allowing traders to take profits or protect capital from potential market reversals.
Note: This indicator is exclusively designed to provide signals for buyers. It does not generate sell or short signals, making it ideal for traders focused solely on identifying optimal buying opportunities in the market.
Customizable Parameters:
- Depth Engine: Fine-tunes the historical data analysis for signal generation.
- Deviation Engine: Adjusts the minimum price change required for detecting trends.
- Backstep Engine: Controls the indicator's sensitivity to retracements, minimizing false signals.
- Labels Transparency: Adjusts the opacity of the labels, ensuring they integrate seamlessly into any chart layout.
- Buy and Sell Colors: Customizable color options for buy and square-off buy labels to match your preferred color scheme.
- Label Size: Select between five different label sizes for optimal chart visibility.
Ideal For:
This indicator is ideal for both beginner and experienced traders looking to enhance their buying strategy with a highly reliable, visual, and alert-driven tool. The VATICAN BANK CARTEL adapts to various timeframes, making it suitable for day traders, swing traders, and long-term investors alike—focused exclusively on buying opportunities.
Benefits and Applications:
1.Intraday Trading: The VATICAN BANK CARTEL indicator is particularly well-suited for intraday trading, as it provides accurate and timely "buy" and "square-off buy" signals based on the current market dynamics.
2.Trend-following Strategies: Traders who employ trend-following strategies can leverage the indicator's ability to identify the overall market direction, allowing them to align their trades with the dominant trend.
3.Swing Trading: The dynamic price tracking and signal generation capabilities of the indicator can be beneficial for swing traders, who aim to capture medium-term price movements.
Security Measures:
1. The code includes a security notice at the beginning, indicating that it is subject to the Mozilla Public License 2.0, which is a reputable open-source license.
2. The code does not appear to contain any obvious security vulnerabilities or malicious content that could compromise user data or accounts.
NOTE:- This indicator is provided under the Mozilla Public License 2.0 and is subject to its terms and conditions.
Disclaimer: The usage of VATICAN BANK CARTEL indicator might or might not contribute to your trading capital(money) profits and losses and the author is not responsible for the same.
IMPORTANT NOTICE:
While the indicator aims to provide reliable "buy" and "square-off buy" signals, it is crucial to understand that the market can be influenced by unpredictable events, such as natural disasters, political unrest, changes in monetary policies, or economic crises. These unforeseen situations may occasionally lead to false signals generated by the VATICAN BANK CARTEL indicator.
Users should exercise caution and diligence when relying on the indicator's signals, as the market's behavior can be unpredictable, and external factors may impact the accuracy of the signals. It is recommended to thoroughly backtest the indicator's performance in various market conditions and to use it as one of the many tools in a comprehensive trading strategy, rather than solely relying on its output.
Ultimately, the success of the VATICAN BANK CARTEL indicator will depend on the user's ability to adapt it to their specific trading style, market conditions, and risk management approach. Continuous monitoring, analysis, and adjustment of the indicator's settings may be necessary to maintain its effectiveness in the ever-evolving financial markets.
DEVELOPER:- yashgode9
PineScript:- version:- 5
This indicator aims to enhance trading decision-making by combining DEPTH, DEVIATION, BACKSTEP with custom signal generation, offering a comprehensive tool for traders seeking clear "buy" and "square-off buy" signals on the TradingView platform.
Spazz MSiThis innovative adaptation of the Enhanced McClellan Summation Index (MSI) incorporates advanced statistical analysis to refine its market interpretation capabilities. The core enhancement involves the integration of a Z-score calculation, which is applied to a user-selectable price data series (open, high, low, close, or their derivatives).
Key modifications and improvements include:
1. Flexible Data Input: The indicator now allows for the selection of various price points or their combinations (e.g., OHLC4, HLC3) as the basis for the MSI calculation, enhancing its adaptability to different trading strategies and market conditions.
2. Z-Score Integration: By incorporating a Z-score metric, the indicator provides a standardized measure of the price series' deviation from its mean. This statistical approach offers a more nuanced view of market extremes.
3. Dynamic Overbought/Oversold Identification: The Z-score implementation enables a more sophisticated method for identifying overbought and oversold conditions. These states are now determined relative to the asset's own historical volatility, rather than fixed thresholds.
4. Automated Signal Generation: The indicator now features an algorithmic approach to generate buy and sell signals. These signals are triggered when specific Z-score thresholds are breached, offering traders clear, statistically-backed entry and exit points.
5. Visual Enhancements: The addition of graphical elements, such as color-coded plots and shape markers, improves the indicator's visual interpretability, allowing for quicker and more intuitive market analysis.
This enhanced version of the McClellan Summation Index combines the robust trend-following capabilities of the original MSI with the precision of statistical analysis. By doing so, it provides traders with a more refined tool for market timing and trend identification, particularly useful in volatile or transitioning market conditions.
ATR Movement Percentage from Daily (Bal)Script Description: ATR Movement Percentage from Daily
The script titled "ATR Movement Percentage from Daily" is designed to help traders analyze the price movement of an asset in relation to its daily volatility, as represented by the Average True Range (ATR). Here's a breakdown of how the script works:
Key Features of the Script:
ATR Calculation:
The script allows the user to input the length of the ATR calculation (default is 14 periods).
It retrieves the daily ATR value using the request.security function, ensuring that the ATR is based on the daily timeframe, regardless of the current chart's timeframe.
Price Movement Calculation:
It calculates the opening price of the current day using request.security to ensure it is aligned with the daily timeframe.
It retrieves the current closing price and computes the price change from the opening price.
Movement Percentage:
The percentage of price movement relative to the daily ATR is calculated. This value helps traders understand how significant the current price movement is compared to the expected volatility for the day.
Direction of Movement:
The script determines the direction of the price movement (upward or downward) based on whether the price change is positive or negative.
Dynamic Label Display:
A label is created and updated to show the movement percentage and direction on the chart.
If the price movement is upward, the label is displayed in green; if downward, it is shown in red.
The label position updates with each new bar, keeping it relevant to the current price action.
Plotting Daily ATR:
The daily ATR value is plotted on the chart as a blue line, providing a visual reference for traders to see the volatility levels in relation to price movements.
Conclusion:
This script is particularly useful for traders who want to assess market conditions based on volatility. By understanding how much the price has moved in relation to the daily ATR, traders can make informed decisions about entry and exit points, and adjust their risk management strategies accordingly. The dynamic labeling feature enhances the usability of the script, allowing for quick visual assessments of market behavior.
High and Low in Selected Time Window (Chart's Timezone)Simple indicator for finding the high and low in any selected time period. to use enter the start time by selecting the hour and minute and enter the end time the same.
a line will be drawn along with the price and a timestamp of when it occurred. shows multiple days of the same time period. Useful for observing ICT Macros, 6VS10 etc.
Multi-Assets Monthly/Weekly/Daily/ Rate Multi-Assets Rate Indicator
This indicator provides a comprehensive view of performance across multiple asset classes, including Forex pairs, Indices, Commodities, and Cryptocurrencies. It offers the following features:
1. Asset Type Selection: Users can choose between "FOREX" and "Other Assets" to view different sets of instruments.
2. Timeframe Flexibility: Performance can be analyzed on Weekly, Daily, or Monthly timeframes.
3. Performance Metrics:
- Current Period Performance: Percentage change in the selected timeframe.
- Previous Period Performance: Percentage change in the previous period.
- Rate of Change: Difference between current and previous period performances.
4. Visual Representation: Results are displayed in a color-coded table for easy interpretation.
- Green indicates positive performance
- Red indicates negative performance
5. Customizable Symbols: Users can input their preferred symbols for each category.
6. Categorized View: When "Other Assets" is selected, the table is organized into Indices, Commodities, and Cryptocurrencies for better clarity.
This indicator is designed to help traders and investors quickly assess and compare performance across various financial instruments and asset classes. It's particularly useful for identifying trends, comparing relative strengths, and making informed decisions based on multi-timeframe analysis.
Note: This indicator relies on data provided by TradingView. Ensure that you have access to the required data feeds for accurate results.
Disclaimer: This indicator is for informational purposes only and should not be considered as financial advice. Always conduct your own research and consider your financial situation before making investment decisions.
PRINT_DROVINGLibrary "PRINT_DROVING"
method print_droving(foot_bar, sup)
printing all footprint objects
Namespace types: footprint_type.Footprint_bar
Parameters:
foot_bar (Footprint_bar type from Alesetup/PRINT_TYPE/1) : instance of Footprint_bar type
sup (Support_objects type from Alesetup/PRINT_TYPE/1) : instance of Support_objects type
Returns: Void.
PRINT_LOGICLibrary "PRINT_LOGIC"
method fill_imba_line(imba_line, foot_bar, sup)
fill imbalance line
Namespace types: footprint_type.Imbalance_line
Parameters:
imba_line (Imbalance_line type from Alesetup/PRINT_TYPE/1) : instance of Imbalance_line type
foot_bar (Footprint_bar type from Alesetup/PRINT_TYPE/1) : instance of Footprint_bar type
sup (Support_objects type from Alesetup/PRINT_TYPE/1) : instance of Support_objects type
Returns: Void
method fill_footprint_type(foot_bar, sup)
Namespace types: footprint_type.Footprint_bar
Parameters:
foot_bar (Footprint_bar type from Alesetup/PRINT_TYPE/1) : instance of Footprint_bar type
sup (Support_objects type from Alesetup/PRINT_TYPE/1) : instance of Support_objects type
Returns: Void
method fill_footprint_object(foot_bar, sup)
fill all footprint objects
Namespace types: footprint_type.Footprint_bar
Parameters:
foot_bar (Footprint_bar type from Alesetup/PRINT_TYPE/1) : instance of Footprint_bar type
sup (Support_objects type from Alesetup/PRINT_TYPE/1) : instance of Support_objects type
Returns: Void
PRINT_TYPELibrary "PRINT_TYPE"
Inputs
Inputs objects
Fields:
inbalance_percent (series int) : percentage coefficient to determine the Imbalance of price levels
stacked_input (series int) : minimum number of consecutive Imbalance levels required to draw extended lines
show_summary_footprint (series bool)
procent_volume_area (series int) : definition size Value area
new_imbalance_cond (series bool) : bool input for setup alert on new imbalance buy and sell
new_imbalance_line_cond (series bool) : bool input for setup alert on new imbalance line buy and sell
stop_past_imbalance_line_cond (series bool) : bool input for setup alert on stop past imbalance line buy and sell
Constants
Constants all Constants objects
Fields:
imbalance_high_char (series string) : char for printing buy imbalance
imbalance_low_char (series string) : char for printing sell imbalance
color_title_sell (series color) : color for footprint sell
color_title_buy (series color) : color for footprint buy
color_line_sell (series color) : color for sell line
color_line_buy (series color) : color for buy line
color_title_none (series color) : color None
Calculation_data
Calculation_data data for calculating
Fields:
detail_open (array) : array open from calculation timeframe
detail_high (array) : array high from calculation timeframe
detail_low (array) : array low from calculation timeframe
detail_close (array) : array close from calculation timeframe
detail_vol (array) : array volume from calculation timeframe
previos_detail_close (array) : array close from calculation timeframe
isBuyVolume (series bool) : attribute previosly bar buy or sell
Footprint_row
Footprint_row objects one footprint row
Fields:
price (series float) : row price
buy_vol (series float) : buy volume
sell_vol (series float) : sell volume
imbalance_buy (series bool) : attribute buy inbalance
imbalance_sell (series bool) : attribute sell imbalance
buy_vol_box (series box) : for ptinting buy volume
sell_vol_box (series box) : for printing sell volume
buy_vp_box (series box) : for ptinting volume profile buy
sell_vp_box (series box) : for ptinting volume profile sell
row_line (series label) : for ptinting row price
empty (series bool) : = true attribute row with zero volume buy and zero volume sell
Imbalance_line_var_object
Imbalance_line_var_object var objects printing and calculation imbalance line
Fields:
cum_buy_line (array) : line array for saving all history buy imbalance line
cum_sell_line (array) : line array for saving all history sell imbalance line
Imbalance_line
Imbalance_line objects printing and calculation imbalance line
Fields:
buy_price_line (array) : float array for saving buy imbalance price level
sell_price_line (array) : float array for saving sell imbalance price level
var_imba_line (Imbalance_line_var_object) : var objects this type
Footprint_bar
Footprint_bar all objects one bar with footprint
Fields:
foot_rows (array) : objects one row footprint
imba_line (Imbalance_line) : objects imbalance line
row_size (series float) : size rows
total_vol (series float) : total volume one footprint bar
foot_buy_vol (series float) : buy volume one footprint bar
foot_sell_vol (series float) : sell volume one footprint bar
foot_max_price_vol (map) : map with one value - price row with max volume buy + sell
calc_data (Calculation_data) : objects with detail data from calculation resolution
Support_objects
Support_objects support object for footprint calculation
Fields:
consts (Constants) : all consts objects
inp (Inputs) : all input objects
bar_index_show_condition (series bool) : calculation bool value for show all objects footprint
row_line_color (series color) : calculation value - color for row price
dop_info (series string)
show_table_cond (series bool)
[ AlgoChart ] - Pearson Index CorrelationCorrelation Indicator (Pearson Index)
The correlation indicator measures the strength and direction of the relationship between two financial assets using the Pearson Index.
Correlation values range from +100 to -100, where:
+100 indicates perfect positive correlation, meaning the two assets tend to move in the same direction.
-100 indicates perfect negative correlation, where the two assets move in opposite directions.
The neutral zone ranges from +25% to -25%, suggesting that the asset movements are independent, with no clear correlation between them.
Interpreting Correlation Levels:
Correlation above +75%: The two assets tend to move similarly and in the same direction. This may indicate a risk of overexposure if both assets are traded in the same direction, as their movements will be very similar, increasing the likelihood of double losses or gains.
Correlation below -75%: The two assets tend to move similarly but in opposite directions. This correlation level can be useful for strategies that benefit from opposing movements between assets, such as trading pairs with inverse dynamics.
Practical Use of the Indicator:
Risk management: Use the indicator to monitor asset correlations before opening positions. High correlation may indicate you are duplicating exposure, as two highly correlated assets tend to move similarly. This helps avoid excessive risk and improves portfolio diversification.
Statistical Arbitrage: During moments of temporary decorrelation between two assets, the indicator can be used for statistical arbitrage strategies. In such cases, you can take advantage of the divergence by opening positions and closing them when the correlation returns to higher or positive levels, thus potentially profiting from the reconvergence of movements.
While the correlation indicator provides valuable insights into asset relationships, it is most effective when used in conjunction with other concepts and tools. On its own, it may offer limited relevance in trading decisions.
[MAD MBS] L3 Float Operations & ML-NormalizersFirst of all:
This indicator is not a standalone tool ; it relies on other script series for its inputs.
This script is an indicator designed for multi-path float operations with integrated machine learning normalizers.
It supports up to four distinct paths, each customizable with multiple sources, factors, and operations.
Users can perform various mathematical operations on price data, including addition, subtraction, multiplication, division, and percentage changes, as well as more advanced tasks like double and triple moving averages or power operations.
The script also integrates several normalization methods (e.g., Min-Max, Z-Score, Robust) to standardize data—an important step for machine learning models.
Each path supports multiple smoothing techniques (e.g., EMA, SMA, and specialized Ehlers smoothers) to further refine the output.
Designed to handle multiple data inputs simultaneously, this tool is especially useful for traders looking to analyze and normalize data from different price sources.
The combination of advanced mathematical operations, normalization techniques, and smoothing enhances data management, aiding in more effective trading decisions.
Here you can see a single path, out of the four possible:
Details to the screenshot:
First Series
Second Series
Option to override the second series with a custom constant (or when normalizing, use the length instead)
The first selection box sets the mathematical operation or activates the normalizer.
The second selection box sets the normalization method.
The third selection box sets the final smoothing technique, followed by parameters for smoothing length.
These settings are repeated identically for Paths 2–4.
At the bottom of the setup, there's a general offset option (add the 'close' price for overlay purposes).
Additionally, there's an option to display a line at zero for centered results.
Tail ProbabilitiesThe Tail Probabilities indicator offers a sophisticated analysis of potential price distributions, providing traders with a probabilistic framework for forecasting future price behavior based on historical data. By estimating the likelihood of the price closing above or below specified thresholds, the indicator assists in evaluating market sentiment, volatility, and associated risks. The probability calculations are derived from a user-defined analysis window, which operates independently of the transform length window. The transform length parameter dictates the volume of historical data utilized in the calculations, and it must correspond to the window length applied in the mean and standard deviation lines indicator to ensure consistency in visual representation.
Overview of Plotted Probabilities
This indicator plots three core probabilities and their moving averages, involving four primary user inputs:
User Inputs
Tail Type: Allows the user to choose between analyzing the left tail (representing downside risk) or the right tail (representing upside potential).
Transform Window Length (Bars): Specifies the amount of historical data used to calculate the mean and standard deviation. This value must align with the window length applied in the mean and standard deviation lines indicator .
Analysis Period (Bars): Defines the number of historical bars used for probability analysis, setting the window over which probabilities are computed.
SMA Length (Bars): Specifies the length of the simple moving average (SMA) used to plot the historical average of the calculated probabilities. The SMA Length input allows users to plot a simple moving average of the calculated probabilities, providing a smoother historical average and helping to identify trends in the probability values over time.
Key Probabilities Plotted
Probability to Close Above or Below Upper Bound: Represents the likelihood that the price will close above or below an upper threshold derived from the mean and standard deviation lines indicator . This measure helps identify potential for significant upward or downward price movement, depending on the current price relative to the threshold.
Probability to Close Above or Below Mean: Indicates the probability of the closing price being either above or below the mean level, reflecting historical price tendencies and suggesting the presence of skewness in the price distribution.
Probability to Close Above or Below Lower Bound: Reflects the likelihood of the price closing above or below a lower threshold, offering insights into potential risk and directional movement.
The indicator adjusts based on the chosen tail type ("Left" or "Right"), thereby enabling users to assess both potential upward and downward price movements, making it adaptable to varying market conditions.
How Probabilities Are Calculated
The probabilities are calculated through a detailed analysis of historical price data over a user-specified analysis window. Below is an outline of the key steps involved in these calculations:
Calculate Mean and Standard Deviation: The mean and standard deviation are computed using the transform length window, which defines the historical data range employed.
Define Bounds: Upper, mean, and lower bounds are established based on the calculated mean and standard deviation, allowing identification of significant levels within the price distribution.
Count Events: The frequency with which the closing price crosses above or below these bounds is counted over the user-specified probability analysis window.
Calculate Probabilities: Probabilities are then computed as the percentage of observed events relative to the total number of observations in the analysis window.
For example, the probability of closing above the upper bound is calculated as:
Probability = (Number of times price closes above the upper bound) / (Total number of observations in the analysis window) * 100
Practical Usage
Risk Management: The indicator provides a quantitative measure of the probability of extreme price movements, aiding traders in setting stop-loss and take-profit levels based on statistical expectations.
Trend Analysis: The probability of closing above the mean can also serve as an indicator of potential skewness in the price distribution. Values above 50 indicate a right-skewed distribution, while values below 50 indicate a left-skewed distribution for the right tail probability. For the left tail probability, values over 50 indicate a left skew and values below 50 indicate a right skew in the distribution.
Scenario Analysis: By focusing on either the left or right tail, traders can quickly determine whether to prioritize downside protection or capitalize on upside potential. Depending on market conditions and whether the trader is long or short, both upward and downward movements can be analyzed, enabling a comprehensive risk assessment.
Limitations
While the Tail Probabilities indicator provides valuable probabilistic insights based on historical data, it is crucial to understand that historical performance does not guarantee future outcomes. Market dynamics are subject to rapid changes, and relying exclusively on historical probabilities may result in inaccurate assessments. Traders should use this indicator in conjunction with other technical analysis tools, fundamental analysis, and an understanding of broader market conditions to ensure robust decision-making.
Summary
The Tail Probabilities indicator is an advanced tool designed for traders seeking a probabilistic perspective on market behavior. By providing critical insights into the potential distribution of prices beyond significant thresholds, the indicator supports informed decision-making, whether in trending or uncertain market environments.
Universal Ratio Trend Matrix [InvestorUnknown]The Universal Ratio Trend Matrix is designed for trend analysis on asset/asset ratios, supporting up to 40 different assets. Its primary purpose is to help identify which assets are outperforming others within a selection, providing a broad overview of market trends through a matrix of ratios. The indicator automatically expands the matrix based on the number of assets chosen, simplifying the process of comparing multiple assets in terms of performance.
Key features include the ability to choose from a narrow selection of indicators to perform the ratio trend analysis, allowing users to apply well-defined metrics to their comparison.
Drawback: Due to the computational intensity involved in calculating ratios across many assets, the indicator has a limitation related to loading speed. TradingView has time limits for calculations, and for users on the basic (free) plan, this could result in frequent errors due to exceeded time limits. To use the indicator effectively, users with any paid plans should run it on timeframes higher than 8h (the lowest timeframe on which it managed to load with 40 assets), as lower timeframes may not reliably load.
Indicators:
RSI_raw: Simple function to calculate the Relative Strength Index (RSI) of a source (asset price).
RSI_sma: Calculates RSI followed by a Simple Moving Average (SMA).
RSI_ema: Calculates RSI followed by an Exponential Moving Average (EMA).
CCI: Calculates the Commodity Channel Index (CCI).
Fisher: Implements the Fisher Transform to normalize prices.
Utility Functions:
f_remove_exchange_name: Strips the exchange name from asset tickers (e.g., "INDEX:BTCUSD" to "BTCUSD").
f_remove_exchange_name(simple string name) =>
string parts = str.split(name, ":")
string result = array.size(parts) > 1 ? array.get(parts, 1) : name
result
f_get_price: Retrieves the closing price of a given asset ticker using request.security().
f_constant_src: Checks if the source data is constant by comparing multiple consecutive values.
Inputs:
General settings allow users to select the number of tickers for analysis (used_assets) and choose the trend indicator (RSI, CCI, Fisher, etc.).
Table settings customize how trend scores are displayed in terms of text size, header visibility, highlighting options, and top-performing asset identification.
The script includes inputs for up to 40 assets, allowing the user to select various cryptocurrencies (e.g., BTCUSD, ETHUSD, SOLUSD) or other assets for trend analysis.
Price Arrays:
Price values for each asset are stored in variables (price_a1 to price_a40) initialized as na. These prices are updated only for the number of assets specified by the user (used_assets).
Trend scores for each asset are stored in separate arrays
// declare price variables as "na"
var float price_a1 = na, var float price_a2 = na, var float price_a3 = na, var float price_a4 = na, var float price_a5 = na
var float price_a6 = na, var float price_a7 = na, var float price_a8 = na, var float price_a9 = na, var float price_a10 = na
var float price_a11 = na, var float price_a12 = na, var float price_a13 = na, var float price_a14 = na, var float price_a15 = na
var float price_a16 = na, var float price_a17 = na, var float price_a18 = na, var float price_a19 = na, var float price_a20 = na
var float price_a21 = na, var float price_a22 = na, var float price_a23 = na, var float price_a24 = na, var float price_a25 = na
var float price_a26 = na, var float price_a27 = na, var float price_a28 = na, var float price_a29 = na, var float price_a30 = na
var float price_a31 = na, var float price_a32 = na, var float price_a33 = na, var float price_a34 = na, var float price_a35 = na
var float price_a36 = na, var float price_a37 = na, var float price_a38 = na, var float price_a39 = na, var float price_a40 = na
// create "empty" arrays to store trend scores
var a1_array = array.new_int(40, 0), var a2_array = array.new_int(40, 0), var a3_array = array.new_int(40, 0), var a4_array = array.new_int(40, 0)
var a5_array = array.new_int(40, 0), var a6_array = array.new_int(40, 0), var a7_array = array.new_int(40, 0), var a8_array = array.new_int(40, 0)
var a9_array = array.new_int(40, 0), var a10_array = array.new_int(40, 0), var a11_array = array.new_int(40, 0), var a12_array = array.new_int(40, 0)
var a13_array = array.new_int(40, 0), var a14_array = array.new_int(40, 0), var a15_array = array.new_int(40, 0), var a16_array = array.new_int(40, 0)
var a17_array = array.new_int(40, 0), var a18_array = array.new_int(40, 0), var a19_array = array.new_int(40, 0), var a20_array = array.new_int(40, 0)
var a21_array = array.new_int(40, 0), var a22_array = array.new_int(40, 0), var a23_array = array.new_int(40, 0), var a24_array = array.new_int(40, 0)
var a25_array = array.new_int(40, 0), var a26_array = array.new_int(40, 0), var a27_array = array.new_int(40, 0), var a28_array = array.new_int(40, 0)
var a29_array = array.new_int(40, 0), var a30_array = array.new_int(40, 0), var a31_array = array.new_int(40, 0), var a32_array = array.new_int(40, 0)
var a33_array = array.new_int(40, 0), var a34_array = array.new_int(40, 0), var a35_array = array.new_int(40, 0), var a36_array = array.new_int(40, 0)
var a37_array = array.new_int(40, 0), var a38_array = array.new_int(40, 0), var a39_array = array.new_int(40, 0), var a40_array = array.new_int(40, 0)
f_get_price(simple string ticker) =>
request.security(ticker, "", close)
// Prices for each USED asset
f_get_asset_price(asset_number, ticker) =>
if (used_assets >= asset_number)
f_get_price(ticker)
else
na
// overwrite empty variables with the prices if "used_assets" is greater or equal to the asset number
if barstate.isconfirmed // use barstate.isconfirmed to avoid "na prices" and calculation errors that result in empty cells in the table
price_a1 := f_get_asset_price(1, asset1), price_a2 := f_get_asset_price(2, asset2), price_a3 := f_get_asset_price(3, asset3), price_a4 := f_get_asset_price(4, asset4)
price_a5 := f_get_asset_price(5, asset5), price_a6 := f_get_asset_price(6, asset6), price_a7 := f_get_asset_price(7, asset7), price_a8 := f_get_asset_price(8, asset8)
price_a9 := f_get_asset_price(9, asset9), price_a10 := f_get_asset_price(10, asset10), price_a11 := f_get_asset_price(11, asset11), price_a12 := f_get_asset_price(12, asset12)
price_a13 := f_get_asset_price(13, asset13), price_a14 := f_get_asset_price(14, asset14), price_a15 := f_get_asset_price(15, asset15), price_a16 := f_get_asset_price(16, asset16)
price_a17 := f_get_asset_price(17, asset17), price_a18 := f_get_asset_price(18, asset18), price_a19 := f_get_asset_price(19, asset19), price_a20 := f_get_asset_price(20, asset20)
price_a21 := f_get_asset_price(21, asset21), price_a22 := f_get_asset_price(22, asset22), price_a23 := f_get_asset_price(23, asset23), price_a24 := f_get_asset_price(24, asset24)
price_a25 := f_get_asset_price(25, asset25), price_a26 := f_get_asset_price(26, asset26), price_a27 := f_get_asset_price(27, asset27), price_a28 := f_get_asset_price(28, asset28)
price_a29 := f_get_asset_price(29, asset29), price_a30 := f_get_asset_price(30, asset30), price_a31 := f_get_asset_price(31, asset31), price_a32 := f_get_asset_price(32, asset32)
price_a33 := f_get_asset_price(33, asset33), price_a34 := f_get_asset_price(34, asset34), price_a35 := f_get_asset_price(35, asset35), price_a36 := f_get_asset_price(36, asset36)
price_a37 := f_get_asset_price(37, asset37), price_a38 := f_get_asset_price(38, asset38), price_a39 := f_get_asset_price(39, asset39), price_a40 := f_get_asset_price(40, asset40)
Universal Indicator Calculation (f_calc_score):
This function allows switching between different trend indicators (RSI, CCI, Fisher) for flexibility.
It uses a switch-case structure to calculate the indicator score, where a positive trend is denoted by 1 and a negative trend by 0. Each indicator has its own logic to determine whether the asset is trending up or down.
// use switch to allow "universality" in indicator selection
f_calc_score(source, trend_indicator, int_1, int_2) =>
int score = na
if (not f_constant_src(source)) and source > 0.0 // Skip if you are using the same assets for ratio (for example BTC/BTC)
x = switch trend_indicator
"RSI (Raw)" => RSI_raw(source, int_1)
"RSI (SMA)" => RSI_sma(source, int_1, int_2)
"RSI (EMA)" => RSI_ema(source, int_1, int_2)
"CCI" => CCI(source, int_1)
"Fisher" => Fisher(source, int_1)
y = switch trend_indicator
"RSI (Raw)" => x > 50 ? 1 : 0
"RSI (SMA)" => x > 50 ? 1 : 0
"RSI (EMA)" => x > 50 ? 1 : 0
"CCI" => x > 0 ? 1 : 0
"Fisher" => x > x ? 1 : 0
score := y
else
score := 0
score
Array Setting Function (f_array_set):
This function populates an array with scores calculated for each asset based on a base price (p_base) divided by the prices of the individual assets.
It processes multiple assets (up to 40), calling the f_calc_score function for each.
// function to set values into the arrays
f_array_set(a_array, p_base) =>
array.set(a_array, 0, f_calc_score(p_base / price_a1, trend_indicator, int_1, int_2))
array.set(a_array, 1, f_calc_score(p_base / price_a2, trend_indicator, int_1, int_2))
array.set(a_array, 2, f_calc_score(p_base / price_a3, trend_indicator, int_1, int_2))
array.set(a_array, 3, f_calc_score(p_base / price_a4, trend_indicator, int_1, int_2))
array.set(a_array, 4, f_calc_score(p_base / price_a5, trend_indicator, int_1, int_2))
array.set(a_array, 5, f_calc_score(p_base / price_a6, trend_indicator, int_1, int_2))
array.set(a_array, 6, f_calc_score(p_base / price_a7, trend_indicator, int_1, int_2))
array.set(a_array, 7, f_calc_score(p_base / price_a8, trend_indicator, int_1, int_2))
array.set(a_array, 8, f_calc_score(p_base / price_a9, trend_indicator, int_1, int_2))
array.set(a_array, 9, f_calc_score(p_base / price_a10, trend_indicator, int_1, int_2))
array.set(a_array, 10, f_calc_score(p_base / price_a11, trend_indicator, int_1, int_2))
array.set(a_array, 11, f_calc_score(p_base / price_a12, trend_indicator, int_1, int_2))
array.set(a_array, 12, f_calc_score(p_base / price_a13, trend_indicator, int_1, int_2))
array.set(a_array, 13, f_calc_score(p_base / price_a14, trend_indicator, int_1, int_2))
array.set(a_array, 14, f_calc_score(p_base / price_a15, trend_indicator, int_1, int_2))
array.set(a_array, 15, f_calc_score(p_base / price_a16, trend_indicator, int_1, int_2))
array.set(a_array, 16, f_calc_score(p_base / price_a17, trend_indicator, int_1, int_2))
array.set(a_array, 17, f_calc_score(p_base / price_a18, trend_indicator, int_1, int_2))
array.set(a_array, 18, f_calc_score(p_base / price_a19, trend_indicator, int_1, int_2))
array.set(a_array, 19, f_calc_score(p_base / price_a20, trend_indicator, int_1, int_2))
array.set(a_array, 20, f_calc_score(p_base / price_a21, trend_indicator, int_1, int_2))
array.set(a_array, 21, f_calc_score(p_base / price_a22, trend_indicator, int_1, int_2))
array.set(a_array, 22, f_calc_score(p_base / price_a23, trend_indicator, int_1, int_2))
array.set(a_array, 23, f_calc_score(p_base / price_a24, trend_indicator, int_1, int_2))
array.set(a_array, 24, f_calc_score(p_base / price_a25, trend_indicator, int_1, int_2))
array.set(a_array, 25, f_calc_score(p_base / price_a26, trend_indicator, int_1, int_2))
array.set(a_array, 26, f_calc_score(p_base / price_a27, trend_indicator, int_1, int_2))
array.set(a_array, 27, f_calc_score(p_base / price_a28, trend_indicator, int_1, int_2))
array.set(a_array, 28, f_calc_score(p_base / price_a29, trend_indicator, int_1, int_2))
array.set(a_array, 29, f_calc_score(p_base / price_a30, trend_indicator, int_1, int_2))
array.set(a_array, 30, f_calc_score(p_base / price_a31, trend_indicator, int_1, int_2))
array.set(a_array, 31, f_calc_score(p_base / price_a32, trend_indicator, int_1, int_2))
array.set(a_array, 32, f_calc_score(p_base / price_a33, trend_indicator, int_1, int_2))
array.set(a_array, 33, f_calc_score(p_base / price_a34, trend_indicator, int_1, int_2))
array.set(a_array, 34, f_calc_score(p_base / price_a35, trend_indicator, int_1, int_2))
array.set(a_array, 35, f_calc_score(p_base / price_a36, trend_indicator, int_1, int_2))
array.set(a_array, 36, f_calc_score(p_base / price_a37, trend_indicator, int_1, int_2))
array.set(a_array, 37, f_calc_score(p_base / price_a38, trend_indicator, int_1, int_2))
array.set(a_array, 38, f_calc_score(p_base / price_a39, trend_indicator, int_1, int_2))
array.set(a_array, 39, f_calc_score(p_base / price_a40, trend_indicator, int_1, int_2))
a_array
Conditional Array Setting (f_arrayset):
This function checks if the number of used assets is greater than or equal to a specified number before populating the arrays.
// only set values into arrays for USED assets
f_arrayset(asset_number, a_array, p_base) =>
if (used_assets >= asset_number)
f_array_set(a_array, p_base)
else
na
Main Logic
The main logic initializes arrays to store scores for each asset. Each array corresponds to one asset's performance score.
Setting Trend Values: The code calls f_arrayset for each asset, populating the respective arrays with calculated scores based on the asset prices.
Combining Arrays: A combined_array is created to hold all the scores from individual asset arrays. This array facilitates further analysis, allowing for an overview of the performance scores of all assets at once.
// create a combined array (work-around since pinescript doesn't support having array of arrays)
var combined_array = array.new_int(40 * 40, 0)
if barstate.islast
for i = 0 to 39
array.set(combined_array, i, array.get(a1_array, i))
array.set(combined_array, i + (40 * 1), array.get(a2_array, i))
array.set(combined_array, i + (40 * 2), array.get(a3_array, i))
array.set(combined_array, i + (40 * 3), array.get(a4_array, i))
array.set(combined_array, i + (40 * 4), array.get(a5_array, i))
array.set(combined_array, i + (40 * 5), array.get(a6_array, i))
array.set(combined_array, i + (40 * 6), array.get(a7_array, i))
array.set(combined_array, i + (40 * 7), array.get(a8_array, i))
array.set(combined_array, i + (40 * 8), array.get(a9_array, i))
array.set(combined_array, i + (40 * 9), array.get(a10_array, i))
array.set(combined_array, i + (40 * 10), array.get(a11_array, i))
array.set(combined_array, i + (40 * 11), array.get(a12_array, i))
array.set(combined_array, i + (40 * 12), array.get(a13_array, i))
array.set(combined_array, i + (40 * 13), array.get(a14_array, i))
array.set(combined_array, i + (40 * 14), array.get(a15_array, i))
array.set(combined_array, i + (40 * 15), array.get(a16_array, i))
array.set(combined_array, i + (40 * 16), array.get(a17_array, i))
array.set(combined_array, i + (40 * 17), array.get(a18_array, i))
array.set(combined_array, i + (40 * 18), array.get(a19_array, i))
array.set(combined_array, i + (40 * 19), array.get(a20_array, i))
array.set(combined_array, i + (40 * 20), array.get(a21_array, i))
array.set(combined_array, i + (40 * 21), array.get(a22_array, i))
array.set(combined_array, i + (40 * 22), array.get(a23_array, i))
array.set(combined_array, i + (40 * 23), array.get(a24_array, i))
array.set(combined_array, i + (40 * 24), array.get(a25_array, i))
array.set(combined_array, i + (40 * 25), array.get(a26_array, i))
array.set(combined_array, i + (40 * 26), array.get(a27_array, i))
array.set(combined_array, i + (40 * 27), array.get(a28_array, i))
array.set(combined_array, i + (40 * 28), array.get(a29_array, i))
array.set(combined_array, i + (40 * 29), array.get(a30_array, i))
array.set(combined_array, i + (40 * 30), array.get(a31_array, i))
array.set(combined_array, i + (40 * 31), array.get(a32_array, i))
array.set(combined_array, i + (40 * 32), array.get(a33_array, i))
array.set(combined_array, i + (40 * 33), array.get(a34_array, i))
array.set(combined_array, i + (40 * 34), array.get(a35_array, i))
array.set(combined_array, i + (40 * 35), array.get(a36_array, i))
array.set(combined_array, i + (40 * 36), array.get(a37_array, i))
array.set(combined_array, i + (40 * 37), array.get(a38_array, i))
array.set(combined_array, i + (40 * 38), array.get(a39_array, i))
array.set(combined_array, i + (40 * 39), array.get(a40_array, i))
Calculating Sums: A separate array_sums is created to store the total score for each asset by summing the values of their respective score arrays. This allows for easy comparison of overall performance.
Ranking Assets: The final part of the code ranks the assets based on their total scores stored in array_sums. It assigns a rank to each asset, where the asset with the highest score receives the highest rank.
// create array for asset RANK based on array.sum
var ranks = array.new_int(used_assets, 0)
// for loop that calculates the rank of each asset
if barstate.islast
for i = 0 to (used_assets - 1)
int rank = 1
for x = 0 to (used_assets - 1)
if i != x
if array.get(array_sums, i) < array.get(array_sums, x)
rank := rank + 1
array.set(ranks, i, rank)
Dynamic Table Creation
Initialization: The table is initialized with a base structure that includes headers for asset names, scores, and ranks. The headers are set to remain constant, ensuring clarity for users as they interpret the displayed data.
Data Population: As scores are calculated for each asset, the corresponding values are dynamically inserted into the table. This is achieved through a loop that iterates over the scores and ranks stored in the combined_array and array_sums, respectively.
Automatic Extending Mechanism
Variable Asset Count: The code checks the number of assets defined by the user. Instead of hardcoding the number of rows in the table, it uses a variable to determine the extent of the data that needs to be displayed. This allows the table to expand or contract based on the number of assets being analyzed.
Dynamic Row Generation: Within the loop that populates the table, the code appends new rows for each asset based on the current asset count. The structure of each row includes the asset name, its score, and its rank, ensuring that the table remains consistent regardless of how many assets are involved.
// Automatically extending table based on the number of used assets
var table table = table.new(position.bottom_center, 50, 50, color.new(color.black, 100), color.white, 3, color.white, 1)
if barstate.islast
if not hide_head
table.cell(table, 0, 0, "Universal Ratio Trend Matrix", text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.merge_cells(table, 0, 0, used_assets + 3, 0)
if not hide_inps
table.cell(table, 0, 1,
text = "Inputs: You are using " + str.tostring(trend_indicator) + ", which takes: " + str.tostring(f_get_input(trend_indicator)),
text_color = color.white, text_size = fontSize), table.merge_cells(table, 0, 1, used_assets + 3, 1)
table.cell(table, 0, 2, "Assets", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, 2, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.cell(table, 0, x + 3, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = f_asset_col(array.get(ranks, x)), text_size = fontSize)
for r = 0 to (used_assets - 1)
for c = 0 to (used_assets - 1)
table.cell(table, c + 1, r + 3, text = str.tostring(array.get(combined_array, c + (r * 40))),
text_color = hl_type == "Text" ? f_get_col(array.get(combined_array, c + (r * 40))) : color.white, text_size = fontSize,
bgcolor = hl_type == "Background" ? f_get_col(array.get(combined_array, c + (r * 40))) : na)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, x + 3, "", bgcolor = #010c3b)
table.cell(table, used_assets + 1, 2, "", bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 1, x + 3, "==>", text_color = color.white)
table.cell(table, used_assets + 2, 2, "SUM", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
table.cell(table, used_assets + 3, 2, "RANK", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 2, x + 3,
text = str.tostring(array.get(array_sums, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_sum(array.get(array_sums, x), array.get(ranks, x)))
table.cell(table, used_assets + 3, x + 3,
text = str.tostring(array.get(ranks, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_rank(array.get(ranks, x)))
Third-order moment by TonymontanovThe "Third-order moment" indicator is designed to help traders identify asymmetries and potential turning points in a financial instrument's price distribution over a specified period. By calculating the skewness of the price distribution, this indicator provides insights into the potential future movement direction of the market.
User Parameters:
- Length: This parameter defines the number of bars (or periods) used to compute the mean and third-order moment. A longer length provides a broader historical context, which may smooth out short-term volatility.
- Source: The data input for calculations, defaulting to the closing price of each bar, although users can select alternatives like open, high, low, or any custom value to suit their analysis preferences.
Operational Algorithm:
1. Mean Calculation:
- The indicator begins by calculating the arithmetic mean of the selected data source over the specified period.
2. Third-order Moment Calculation:
- A deviation from the mean is calculated for each data point. These deviations are then cubed to capture any asymmetry in the price distribution.
- The third-order moment is determined by summing these cubed deviations over the specified length and dividing by the number of periods, providing a measure of skewness.
3. Graphical Representation:
- The indicator plots the third-order moment as a column plot. The color of the columns changes based on the sign of the moment: green for positive and red for negative, suggesting bullish and bearish skewness, respectively.
- A zero line is included to help visualize transitions between positive and negative skewness clearly.
- Additionally, the background color shifts depending on whether the third-order moment is above or below zero, further highlighting the prevailing market sentiment.
The "Third-order moment" indicator is a valuable tool for traders looking to gauge the market's skewness, helping identify potential trend continuations or reversals. By understanding the dominance of positive or negative skewness, traders can make more informed decisions.
Asymmetric volatilityThe "Asymmetric Volatility" indicator is designed to visualize the differences in volatility between upward and downward price movements of a selected instrument. It operates on the principle of analyzing price movements over a specified time period, with particular focus on the symmetrical evaluation of both price rises and falls.
User Parameters:
- Length: This parameter specifies the number of bars (candles) used to calculate the average volatility. The larger the value, the longer the time period, and the smoother the volatility data will be.
- Source: This represents the input data for the indicator calculations. By default, the close value of each bar is used, but the user can choose another data source (such as open, high, low, or any custom value).
Operational Algorithm:
1. Movement Calculation:
- UpMoves: Computed as the positive difference between the current bar value and the previous bar value, if it is greater than zero.
- DownMoves: Computed as the positive difference between the previous bar value and the current bar value, if it is greater than zero.
2. Volatility Calculation:
- UpVolatility: This is the arithmetic mean of the UpMoves values over the specified period.
- DownVolatility: This is the arithmetic mean of the DownMoves values over the specified period.
3. Graphical Representation:
- The indicator displays two plots: upward and downward volatility, represented by green and red lines, respectively.
- The background color changes based on which volatility is dominant: a green background indicates that upward volatility prevails, while a red background indicates downward volatility.
The indicator allows traders to quickly assess in which direction the market is more volatile at the moment, which can be useful for making trading decisions and evaluating the current market situation.
Statistics plot1. setting the price range
At the beginning of the script, set the price range (interval). Price ranges are used to divide prices into several groups (buckets) and record how many prices have been reached within each group. For example, setting the price range to “10” will divide the price into intervals 0-10, 10-20, 20-30, and so on.
The price range can also be set manually by the user or automatically calculated based on the initial price. This allows for flexibility in adjusting price ranges for different assets and different time frames.
2. aggregate the number of times a price is reached
Record how many times the price reached each price range (e.g., 100-110, 110-120, etc.). This aggregate data is stored in a data structure called an array.
Each element of the array corresponds to a price range, and when a price reaches that range, the corresponding array value is incremented by one. This process is performed in real time, tracking price movements.
3. initializing and extending price ranges
The first bar of the script (when the chart is first loaded) divides the price ranges into several groups and initializes a count of 0 for each range.
When a price reaches a new range, the array is expanded as needed to add the new price range. This allows the script to work with any price movement, even if the price range continues to grow.
4. visualize the number of price arrivals with a histogram
The aggregated number of arrivals per price range is visually displayed in the form of a histogram. This histogram is designed to allow the user to see at a glance which price range is being reached most frequently.
For example, if prices frequently reach the 100-110 range, the histogram bar corresponding to that range will appear higher than the other ranges. This allows you to visually identify price “dwell points” or support and resistance levels.
5. display of moving averages
A moving average (MA) of the number of times a price has been reached is drawn above the histogram. Moving averages are indicators that show a smooth trend for the number of price arrivals and are useful for understanding the overall direction of price movements.
The duration of the moving average (how many data points it is calculated based on) can be set by the user. This allows for flexible analysis of short or long term price trends. 6.
6. price range tracking and labeling
The script keeps track of which price range the current price is located in. Based on this, information related to the current price range is displayed on the chart as labels.
In particular, labels indicate the beginning and end points of the price range, including which range the price was in at the beginning and which range the price reached at the end. These labels are a useful feature to visually identify price ranges on the chart.
7. labeling of current price range
To confirm which price range the current price is in, when a price reaches a specific price range, a label corresponding to that price range is displayed. This label indicates the position of the price in real-time, allowing traders to visually track where the current price is in the area.
8. calculating the start and end points of the range
The script calculates the start and end points of a range with a non-zero number of price arrivals to find the minimum and maximum of the range. This calculation allows you to see where prices are concentrated within a range.
9. out-of-range price processing
When a price reaches outside the range, the script automatically adds the array element corresponding to that price range and inserts the data in the appropriate location for the count. This allows the script to follow the price as it moves unexpectedly.
Daily Seasonality [YuL]This indicator calculates average returns for trading days across specified number of years in the past and displays this as a histogram. In addition, it displays EMA of these values as filled area plot.
Indicator uses ordinal number of trading day in a year, i.e. January 3rd may be 1st trading day, January 4th - 2nd trading day, etc.
Large green or red areas may mean that there is a strong seasonal factor at these dates that may support, launch, or break a trend.
It only works on daily timeframe at the moment. Maximum number of years it can look back is 15.
Financial GrowthOverview
The script named "Financial Growth" is written in Pine Script v5.
It is designed to display various financial metrics and ratios in a tabular format on TradingView charts.
The code pulls financial data like revenue, net income, EPS, etc., and presents these metrics along with ratios such as P/E, D/E, and others.
The table can display these values for different time periods such as quarterly, yearly, or trailing twelve months (TTM).
Additionally, it can show QoQ (Quarter-over-Quarter), YoY (Year-over-Year), and CAGR (Compound Annual Growth Rate) changes for selected financial items.
The code includes plotting options for visual representation of financial data and labels.
Explanation of Code Sections
Revision Notes
The revision notes indicate changes made in different versions of the code.
Each version update introduces new financial metrics and code restructuring.
Indicator Definition
indicator("Financial Growth", overlay=false, format=format.volume): Defines a standalone indicator with the name "Financial Growth". The overlay=false parameter ensures it is not overlaid on the chart but shown in a separate panel.
Text Sizes and Table Positions
Different text sizes and table positions are defined using variables such as text_size_SMALL, tb_pos_POS01, etc.
These variables help in formatting the visual display of the table and labels.
Financial Items
The script defines several financial items like revenue, net income, EPS, EBITDA, debt, and ratios such as ROE, ROA, and D/E.
Each financial item is assigned a corresponding unique identifier, e.g., _revenue_id = 'TOTAL_REVENUE'.
Calculated Financial Ratios
Ratios such as P/E, P/BV, P/S, and P/FCF are calculated using:
price_to_earning
price_to_book_value
price_to_sales
price_to_free_cash_flow
These calculations are done using request.financial function calls.
User Inputs
The code uses input functions to allow users to select financial items and time periods:
financial_item_selection_01 and financial_item_selection_02 enable the selection of financial metrics.
period_selection allows users to choose between periods like FQ (Fiscal Quarter), FY (Fiscal Year), and TTM (Trailing Twelve Months).
Users can control the table's visibility and the display of QoQ, YoY, and CAGR changes using input.bool() settings.
Financial Data Retrieval
The function retreive_financial_data(_financial_item, _period) retrieves financial data based on the selected financial item and period.
It uses the request.financial function to get data for a specific ticker.
Table Creation and Formatting
The script uses table.new() to create a table for displaying financial data.
The table’s headers and values are populated using custom functions like header_column, date_column, and value_column.
QoQ, YoY, and CAGR columns are conditionally displayed based on the user’s input settings.
Plotting Data
The script can also plot the selected financial metrics using the plot() function.
Labels for plotted data are created using the label.new() function.
Handling of Bar States
The barstate.islast condition ensures that the table and plots are only updated at the last bar state, which optimizes performance and prevents unnecessary calculations.
Code Formatting and Optimization
Proper use of variables, functions, and conditional statements adheres to TradingView’s guidelines for efficient Pine Script development.
The use of ignore_invalid_symbol=true in request.financial calls ensures the script handles non-existent financial data gracefully.
Key Functions
is_calculated_data(_financial_item)
Determines whether a given financial item is a calculated metric (e.g., P/E, P/BV) instead of being directly available from TradingView’s data.
get_financial_id(_financial_item)
Returns the financial identifier based on the selected item (e.g., TOTAL_REVENUE for revenue).
get_value_formating(_financial_item)
Returns the appropriate value divider, suffix, and formatting style based on the selected financial item.
create_array(arrayId, val)
Adds a new value to a specified array, used for storing historical financial data for table display.
get_cagr(_data_array, _id, _idmax)
Calculates the compound annual growth rate (CAGR) based on the given data array and index.
Statistical Volatility° [Pro+] (Joshuuu)Introduction:
Statistical Volatility is a custom-built indicator designed to help traders track the historical range volatility of each individual candle of a given Timeframe. Compared to traditional volatility metrics, or lookback-based volatility calculations, this indicator is focused on the idea of Time-based volatility.
Description:
Whether you are looking at intraday price movements or weekly trends, this tool provides a clear, visual representation of the average range each candle typically covers. By understanding these volatility patterns, traders can observe when markets are likely to expand or consolidate, based on Time.
To obtain this insightful metrics, all available candle range data is normalized; values are therefore represented as a percentage of the maximum historical Time volatility, indicating how each candle range compares relative to the highest value. This allows for an easy comparison of volatility across different Time periods.
Key Features:
Detailed Volatility Tracking: The Statistical Volatility indicator enables traders to track the volatility of each candle throughout the day, week, or month, depending on the selected Timeframe. It helps to identify statistical Times of expansion or consolidation, beyond what current price data may showcase.
Timeframe Adaptability: On lower timeframes such as the 5 Minute Timeframe, the indicator calculates and plots the statistical range for each 5 Minute candle of the day, respectively. On higher timeframes, such as 1 Hour Timeframe or above, the ranges are plotted for each candle of the week, respectively. This adaptability ensures the indicator is versatile enough for day traders, scalpers, and swing traders alike; maintaining a highly granular yet versatile statistical edge.
Flexible Display Options: Traders can choose between different visualization methods, in form of a Heatmap or a Barchart, to display the volatility calculations. The heatmap offers a simple visualization of the data, relying entirely on the color gradient to display volatility. On the other hand, the Barchart gives more flexibility to the analyst by providing a more detailed visual analysis, with the ability of overlaying and comparing the current Time-based volatility.
How Traders Can Use Statistical Volatility (Joshuuu) Effectively:
Data-Based Optimization: By understanding when the market typically experiences its largest or smallest moves, traders can better frame the current narrative. Especially when backtesting, this information can help optimize analysts' entry mechanisms thanks to the introduction of a Time-based statistical component.
Asset-Specific Insights: Currencies like Forex pairs (i.e. FOREXCOM:EURUSD , FOREXCOM:AUDUSD ) or other Asset Classes tied to a particular geographical location (i.e. CME_MINI:NQ1! in the United States, XETR:DAX in Germany), experience volatility spikes during the operational hours of major banks. Each asset has its own “active” Time when liquidity and volatility are higher, tied to when their corresponding markets are open. This makes Statistical Volatility particularly useful for traders who focus on multiple assets across different time zones.
Usage Guidance:
Add Statistical Volatility (Joshuuu) to your TradingView chart.
Customize your preferred volatility calculation type, gradient colors, and plot styles.
Use the volatility graphic to monitor current and upcoming shifts in volatility.
Incorporate Statistical Volatility (Joshuuu) into your existing statistical strategies to fine-tune your interpretation of market behaviour.
These tools are available ONLY on the TradingView platform.
Terms and Conditions
Our charting tools are products provided for informational and educational purposes only and do not constitute financial, investment, or trading advice. Our charting tools are not designed to predict market movements or provide specific recommendations. Users should be aware that past performance is not indicative of future results and should not be relied upon for making financial decisions. By using our charting tools, the purchaser agrees that the seller and the creator are not responsible for any decisions made based on the information provided by these charting tools. The purchaser assumes full responsibility and liability for any actions taken and the consequences thereof, including any loss of money or investments that may occur as a result of using these products. Hence, by purchasing these charting tools, the customer accepts and acknowledges that the seller and the creator are not liable nor responsible for any unwanted outcome that arises from the development, the sale, or the use of these products. Finally, the purchaser indemnifies the seller from any and all liability. If the purchaser was invited through the Friends and Family Program, they acknowledge that the provided discount code only applies to the first initial purchase of the Toodegrees Premium Suite subscription. The purchaser is therefore responsible for cancelling – or requesting to cancel – their subscription in the event that they do not wish to continue using the product at full retail price. If the purchaser no longer wishes to use the products, they must unsubscribe from the membership service, if applicable. We hold no reimbursement, refund, or chargeback policy. Once these Terms and Conditions are accepted by the Customer, before purchase, no reimbursements, refunds or chargebacks will be provided under any circumstances.
By continuing to use these charting tools, the user acknowledges and agrees to the Terms and Conditions outlined in this legal disclaimer.
Volume CalendarDescription:
The indicator displays a calendar with Volume data for up to 6 last months. It is designed to work on any timeframe, but works best on Daily and below. It is also consistent in that it displays the same data even if you go to lower timeframes like 5 minutes (even though the data is used is Daily).
Features:
- displays volume data for last N months (volume, volume change, % of weekly, monthly and yearly volume)
- display total volume for each month
- display monthly sentiment
- find dates with volume spikes
Inputs:
- Number of months -> how many last months of data to display (from 1 to 6)
- Volume Type -> display only Bullish, only Bearish or all volume
- Cell color is based on -> Volume - the brighter the cell the higher volume was on that day; Volume Change - the brighter the cell the higher was the volume change that day; Volume Spike - the brighter the cell the higher was volume spike that day (volume spike is based on volume being above its average over last N candles)
- Cell color timeframe -> Weekly - the cell color is calculated comparing volume of that cell with weekly volume; Monthly - comparing volume with monthly volume
- Use volume for sentiment -> take the volume into account when calculating monthly sentiment (otherwise calculate it based on number of Bullish and Bearish days in the month)
- Spike Average Period -> period of the moving average used for spike calculation
- Spike Threshold -> current volume must be this many times greater than the average for it to be considered a spike
- Table Size -> size of the table
- Theme -> colouring of the table