VPSA-VTDDear Sir/Madam,
I am pleased to present the next iteration of my indicator concept, which, in my opinion, serves as a highly useful tool for analyzing markets using the Volume Spread Analysis (VSA) method or the Wyckoff methodology.
The VPSA (Volume-Price Spread Analysis), the latest version in the family of scripts I’ve developed, appears to perform its task effectively. The combination of visualizing normalized data alongside their significance, achieved through the application of Z-Score standardization, proved to be a sound solution. Therefore, I decided to take it a step further and expand my project with a complementary approach to the existing one.
Theory
At the outset, I want to acknowledge that I’m aware of the existence of other probabilistic models used in financial markets, which may describe these phenomena more accurately. However, in line with Occam's Razor, I aimed to maintain simplicity in the analysis and interpretation of the concepts below. For this reason, I focused on describing the data using the Gaussian distribution.
The data I read from the chart — primarily the closing price, the high-low price difference (spread), and volume — exhibit cyclical patterns. These cycles are described by Wyckoff's methodology, while VSA complements and presents them from a different perspective. I will refrain from explaining these methods in depth due to their complexity and broad scope. What matters is that within these cycles, various events occur, described by candles or bars in distinct ways, characterized by different spreads and volumes. When observing the chart, I notice periods of lower volatility, often accompanied by lower volumes, as well as periods of high volatility and significant volumes. It’s important to find harmony within this apparent chaos. I think that chart interpretation cannot happen without considering the broader context, but the more variables I include in the analytical process, the more challenges arise. For instance, how can I determine if something is large (wide) or small (narrow)? For elements like volume or spread, my script provides a partial answer to this question. Now, let’s get to the point.
Technical Overview
The first technique I applied is Min-Max Normalization. With its help, the script adjusts volume and spread values to a range between 0 and 1. This allows for a comparable bar chart, where a wide bar represents volume, and a narrow one represents spread. Without normalization, visually comparing values that differ by several orders of magnitude would be inconvenient. If the indicator shows that one bar has a unit spread value while another has half that value, it means the first bar is twice as large. The ratio is preserved.
The second technique I used is Z-Score Standardization. This concept is based on the normal distribution, characterized by variables such as the mean and standard deviation, which measures data dispersion around the mean. The Z-Score indicates how many standard deviations a given value deviates from the population mean. The higher the Z-Score, the more the examined object deviates from the mean. If an object has a Z-Score of 3, it falls within 0.1% of the population, making it a rare occurrence or even an anomaly. In the context of chart analysis, such strong deviations are events like climaxes, which often signal the end of a trend, though not always. In my script, I assigned specific colors to frequently occurring Z-Score values:
Below 1 – Blue
Above 1 – Green
Above 2 – Red
Above 3 – Fuchsia
These colors are applied to both spread and volume, allowing for quick visual interpretation of data.
Volume Trend Detector (VTD)
The above forms the foundation of VPSA. However, I have extended the script with a Volume Trend Detector (VTD). The idea is that when I consider market structure - by market structure, I mean the overall chart, support and resistance levels, candles, and patterns typical of spread and volume analysis as well as Wyckoff patterns - I look for price ranges where there is a lack of supply, demand, or clues left behind by Smart Money or the market's enigmatic identity known as the Composite Man. This is essential because, as these clues and behaviors of market participants — expressed through the chart’s dynamics - reflect the actions, decisions, and emotions of all players. These behaviors can help interpret the bull-bear battle and estimate the probability of their next moves, which is one of the key factors for a trader relying on technical analysis to make a trade decision.
I enhanced the script with a Volume Trend Detector, which operates in two modes:
Step-by-Step Logic
The detector identifies expected volume dynamics. For instance, when looking for signs of a lack of bullish interest, I focus on setups with decreasing volatility and volume, particularly for bullish candles. These setups are referred to as No Demand patterns, according to Tom Williams' methodology.
Simple Moving Average (SMA)
The detector can also operate based on a simple moving average, helping to identify systematic trends in declining volume, indicating potential imbalances in market forces.
I’ve designed the program to allow the selection of candle types and volume characteristics to which the script will pay particular attention and notify me of specific market conditions.
Advantages and Disadvantages
Advantages:
Unified visualization of normalized spread and volume, saving time and improving efficiency.
The use of Z-Score as a consistent and repeatable relative mechanism for marking examined values.
The use of colors in visualization as a reference to Z-Score values.
The possibility to set up a continuous alert system that monitors the market in real time.
The use of EMA (Exponential Moving Average) as a moving average for Z-Score.
The goal of these features is to save my time, which is the only truly invaluable resource.
Disadvantages:
The assumption that the data follows a normal distribution, which may lead to inaccurate interpretations.
A fixed analysis period, which may not be perfectly suited to changing market conditions.
The use of EMA as a moving average for Z-Score, listed both as an advantage and a disadvantage depending on market context.
I have included comments within the code to explain the logic behind each part. For those who seek detailed mathematical formulas, I invite you to explore the code itself.
Defining Program Parameters:
Numerical Conditions:
VPSA Period for Analysis – The number of candles analyzed.
Normalized Spread Alert Threshold – The expected normalized spread value; defines how large or small the spread should be, with a range of 0-1.00.
Normalized Volume Alert Threshold – The expected normalized volume value; defines how large or small the volume should be, with a range of 0-1.00.
Spread Z-SCORE Alert Threshold – The Z-SCORE value for the spread; determines how much the spread deviates from the average, with a range of 0-4 (a higher value can be entered, but from a logical standpoint, exceeding 4 is unnecessary).
Volume Z-SCORE Alert Threshold – The Z-SCORE value for volume; determines how much the volume deviates from the average, with a range of 0-4 (the same logical note as above applies).
Logical Conditions:
Logical conditions describe whether the expected value should be less than or equal to or greater than or equal to the numerical condition.
All four parameters accept two possibilities and are analogous to the numerical conditions.
Volume Trend Detector:
Volume Trend Detector Period for Analysis – The analysis period, indicating the number of candles examined.
Method of Trend Determination – The method used to determine the trend. Possible values: Step by Step or SMA.
Trend Direction – The expected trend direction. Possible values: Upward or Downward.
Candle Type – The type of candle taken into account. Possible values: Bullish, Bearish, or Any.
The last available setting is the option to enable a joint alert for VPSA and VTD.
When enabled, VPSA will trigger on the last closed candle, regardless of the VTD analysis period.
Example Use Cases (Labels Visible in the Script Window Indicate Triggered Alerts):
The provided labels in the chart window mark where specific conditions were met and alerts were triggered.
Summary and Reflections
The program I present is a strong tool in the ongoing "game" with the Composite Man.
However, it requires familiarity and understanding of the underlying methodologies to fully utilize its potential.
Of course, like any technical analysis tool, it is not without flaws. There is no indicator that serves as a perfect Grail, accurately signaling Buy or Sell in every case.
I would like to thank those who have read through my thoughts to the end and are willing to take a closer look at my work by using this script.
If you encounter any errors or have suggestions for improvement, please feel free to contact me.
I wish you good health and accurately interpreted market structures, leading to successful trades!
CatTheTrader
Wyszukaj w skryptach "ha溢价率"
Uptrick: Volatility Reversion BandsUptrick: Volatility Reversion Bands is an indicator designed to help traders identify potential reversal points in the market by combining volatility and momentum analysis within one comprehensive framework. It calculates dynamic bands around a simple moving average and issues signals when price interacts with these bands. Below is a fully expanded description, structured in multiple sections, detailing originality, usefulness, uniqueness, and the purpose behind blending standard deviation-based and ATR-based concepts. All references to code have been removed to focus on the written explanation only.
Section 1: Overview
Uptrick: Volatility Reversion Bands centers on a moving average around which various bands are constructed. These bands respond to changes in price volatility and can help gauge potential overbought or oversold conditions. Signals occur when the price moves beyond certain thresholds, which may imply a reversal or significant momentum shift.
Section 2: Originality, Usefulness, Uniqness, Purpose
This indicator merges two distinct volatility measurements—Bollinger Bands and ATR—into one cohesive system. Bollinger Bands use standard deviation around a moving average, offering a baseline for what is statistically “normal” price movement relative to a recent mean. When price hovers near the upper band, it may indicate overbought conditions, whereas price near the lower band suggests oversold conditions. This straightforward construction often proves invaluable in moderate-volatility settings, as it pinpoints likely turning points and gauges a market’s typical trading range.
Yet Bollinger Bands alone can falter in conditions marked by abrupt volatility spikes or sudden gaps that deviate from recent norms. Intraday news, earnings releases, or macroeconomic data can alter market behavior so swiftly that standard-deviation bands do not keep pace. This is where ATR (Average True Range) adds an important layer. ATR tracks recent highs, lows, and potential gaps to produce a dynamic gauge of how much price is truly moving from bar to bar. In quieter times, ATR contracts, reflecting subdued market activity. In fast-moving markets, ATR expands, exposing heightened volatility on each new bar.
By overlaying Bollinger Bands and ATR-based calculations, the indicator achieves a broader situational awareness. Bollinger Bands excel at highlighting relative overbought or oversold areas tied to an established average. ATR simultaneously scales up or down based on real-time market swings, signaling whether conditions are calm or turbulent. When combined, this means a price that barely crosses the Bollinger Band but also triggers a high ATR-based threshold is likely experiencing a volatility surge that goes beyond typical market fluctuations. Conversely, a price breach of a Bollinger Band when ATR remains low may still warrant attention, but not necessarily the same urgency as in a high-volatility regime.
The resulting synergy offers balanced, context-rich signals. In a strong trend, the ATR layer helps confirm whether an apparent price breakout really has momentum or if it is just a temporary spike. In a range-bound market, standard deviation-based Bollinger Bands define normal price extremes, while ATR-based extensions highlight whether a breakout attempt has genuine force behind it. Traders gain clarity on when a move is both statistically unusual and accompanied by real volatility expansion, thus carrying a higher probability of a directional follow-through or eventual reversion.
Practical advantages emerge across timeframes. Scalpers in fast-paced markets appreciate how ATR-based thresholds update rapidly, revealing if a sudden price push is routine or exceptional. Swing traders can rely on both indicators to filter out false signals in stable conditions or identify truly notable moves. By calibrating to changes in volatility, the merged system adapts naturally whether the market is trending, ranging, or transitioning between these phases.
In summary, combining Bollinger Bands (for a static sense of standard-deviation-based overbought/oversold zones) with ATR (for a dynamic read on current volatility) yields an adaptive, intuitive indicator. Traders can better distinguish fleeting noise from meaningful expansions, enabling more informed entries, exits, and risk management. Instead of relying on a single yardstick for all market conditions, this fusion provides a layered perspective, encouraging traders to interpret price moves in the broader context of changing volatility.
Section 3: Why Bollinger Bands and ATR are combined
Bollinger Bands provide a static snapshot of volatility by computing a standard deviation range above and below a central average. ATR, on the other hand, adapts in real time to expansions or contractions in market volatility. When combined, these measures offset each other’s limitations: Bollinger Bands add structure (overbought and oversold references), and ATR ensures responsiveness to rapid price shifts. This synergy helps reduce noisy signals, particularly during sudden market turbulence or extended consolidations.
Section 4: User Inputs
Traders can adjust several parameters to suit their preferences and strategies. These typically include:
1. Lookback length for calculating the moving average and standard deviation.
2. Multipliers to control the width of Bollinger Bands.
3. An ATR multiplier to set the distance for additional reversal bands.
4. An option to display weaker signals when the price merely approaches but does not cross the outer bands.
Section 5: Main Calculations
At the core of this indicator are four important steps:
1. Calculate a basis using a simple moving average.
2. Derive Bollinger Bands by adding and subtracting a product of the standard deviation and a user-defined multiplier.
3. Compute ATR over the same lookback period and multiply it by the selected factor.
4. Combine ATR-based distance with the Bollinger Bands to set the outer reversal bands, which serve as stronger signal thresholds.
Section 6: Signal Generation
The script interprets meaningful reversal points when the price:
1. Crosses below the lower outer band, potentially highlighting oversold conditions where a bullish reversal may occur.
2. Crosses above the upper outer band, potentially indicating overbought conditions where a bearish reversal may develop.
Section 7: Visualization
The indicator provides visual clarity through labeled signals and color-coded references:
1. Distinct colors for upper and lower reversal bands.
2. Markers that appear above or below bars to denote possible buying or selling signals.
3. A gradient bar color scheme indicating a bar’s position between the lower and upper bands, helping traders quickly see if the price is near either extreme.
Section 8: Weak Signals (Optional)
For those preferring early cues, the script can highlight areas where the price nears the outer bands. When weak signals are enabled:
1. Bars closer to the upper reversal zone receive a subtle marker suggesting a less robust, yet still noteworthy, potential selling area.
2. Bars closer to the lower reversal zone receive a subtle marker suggesting a less robust, yet still noteworthy, potential buying area.
Section 9: Simplicity, Effectiveness, and Lower Timeframes
Although combining standard deviation and ATR involves sophisticated volatility concepts, this indicator is visually straightforward. Reversal bands and gradient-colored bars make it easy to see at a glance when price approaches or crosses a threshold. Day traders operating on lower timeframes benefit from such clarity because it helps filter out minor fluctuations and focus on more meaningful signals.
Section 10: Adaptability across Market Phases
Because both the standard deviation (for Bollinger Bands) and ATR adapt to changing volatility, the indicator naturally adjusts to various environments:
1. Trending: The additional ATR-based outer bands help distinguish between temporary pullbacks and deeper reversals.
2. Ranging: Bollinger Bands often remain narrower, identifying smaller reversals, while the outer ATR bands remain relatively close to the main bands.
Section 11: Reduced Noise in High-Volatility Scenarios
By factoring ATR into the band calculations, the script widens or narrows the thresholds during rapid market fluctuations. This reduces the amount of false triggers typically found in indicators that rely solely on fixed calculations, preventing overreactions to abrupt but short-lived price spikes.
Section 12: Incorporation with Other Technical Tools
Many traders combine this indicator with oscillators such as RSI, MACD, or Stochastic, as well as volume metrics. Overbought or oversold signals in momentum oscillators can provide additional confirmation when price reaches the outer bands, while volume spikes may reinforce the significance of a breakout or potential reversal.
Section 13: Risk Management Considerations
All trading strategies carry risk. This indicator, like any tool, can and does produce losing trades if price unexpectedly reverses again or if broader market conditions shift rapidly. Prudent traders employ protective measures:
1. Stop-loss orders or trailing stops.
2. Position sizing that accounts for market volatility.
3. Diversification across different asset classes when possible.
Section 14: Overbought and Oversold Identification
Standard Bollinger Bands highlight regions where price might be overextended relative to its recent average. The extended ATR-based reversal bands serve as secondary lines of defense, identifying moments when price truly stretches beyond typical volatility bounds.
Section 15: Parameter Customization for Different Needs
Users can tailor the script to their unique preferences:
1. Shorter lookback settings yield faster signals but risk more noise.
2. Higher multipliers spread the bands further apart, filtering out small moves but generating fewer signals.
3. Longer lookback periods smooth out market noise, often leading to more stable but less frequent trading cues.
Section 16: Examples of Different Trading Styles
1. Day Traders: Often reduce the length to capture quick price swings.
2. Swing Traders: May use moderate lengths such as 20 to 50 bars.
3. Position Traders: Might opt for significantly longer settings to detect macro-level reversals.
Section 17: Performance Limitations and Reality Check
No technical indicator is free from false signals. Sudden fundamental news events, extreme sentiment changes, or low-liquidity conditions can render signals less reliable. Backtesting and forward-testing remain essential steps to gauge whether the indicator aligns well with a trader’s timeframe, risk tolerance, and instrument of choice.
Section 18: Merging Volatility and Momentum
A critical uniqueness of this indicator lies in how it merges Bollinger Bands (standard deviation-based) with ATR (pure volatility measure). Bollinger Bands provide a relative measure of price extremes, while ATR dynamically reacts to market expansions and contractions. Together, they offer an enhanced perspective on potential market turns, ideally reducing random noise and highlighting moments where price has traveled beyond typical bounds.
Section 19: Purpose of this Merger
The fundamental purpose behind blending standard deviation measures with real-time volatility data is to accommodate different market behaviors. Static standard deviation alone can underreact or overreact in abnormally volatile conditions. ATR alone lacks a baseline reference to normality. By merging them, the indicator aims to provide:
1. A versatile dynamic range for both typical and extreme moves.
2. A filter against frequent whipsaws, especially in choppy environments.
3. A visual framework that novices and experts can interpret rapidly.
Section 20: Summary and Practical Tips
Uptrick: Volatility Reversion Bands offers a powerful tool for traders looking to combine volatility-based signals with momentum-derived reversals. It emphasizes clarity through color-coded bars, defined reversal zones, and optional weak signal markers. While potentially useful across all major timeframes, it demands ongoing risk management, realistic expectations, and careful study of how signals behave under different market conditions. No indicator serves as a crystal ball, so integrating this script into an overall strategy—possibly alongside volume data, fundamentals, or momentum oscillators—often yields the best results.
Disclaimer and Educational Use
This script is intended for educational and informational purposes. It does not constitute financial advice, nor does it guarantee trading success. Sudden economic events, low-liquidity times, and unexpected market behaviors can all undermine technical signals. Traders should use proper testing procedures (backtesting and forward-testing) and maintain disciplined risk management measures.
Line Break Chart StrategyHello All!
We should not pass this year without a gift!
My last publication in 2024 is Complete Line Break Chart Strategy with many features!
What is Line Break Chart?
" Line Break is a Japanese chart style that disregards time intervals and only focuses on price movements, similar to the Kagi and Renko chart styles. Line Break charts form a series of up and down bars (referred to as lines). Up lines represent rising prices, and down lines represent falling prices. New confirmed lines only form on the chart when closing prices break the range covered by previous lines. Users can control the number of past lines used in the calculation via the "Number of Lines" input in the chart settings. The typical "Number of Lines" setting is 3, meaning the chart forms a new up line when the closing price is above the high prices of the last three lines, and it forms a new down line when the closing price is below the past three lines' low prices. If the current price is higher, it is an up line and if it is lower, it is a down line. If the current closing price is the same or the move in the opposite direction is not large enough to warrant a reversal, l then no new line is draw n" by Tradingview. You can find it here
Now let's start examining the features of the indicator:
By using Line break reversals it shows trend on the main chart. You can create alert .
Moreover, you can decide which trade should be taken by using Risk Management in the indicator. You can set the " Maximum Risk " and then if the risk is more than you set then the trade is not taken. When trend changed it checks the distance between reversal level and open price and compare it with the Maximum Risk
Breakout:
It can find breakouts and shows on the chart. You can create alert for breakouts
It can show breakouts on the main chart:
Flip-Flops:
Upon looking at set of price break charts, the trader will notice that there are instances when uptrend blocks is followed by one reversal block, and then by a reversal to a series of uptrend blocks. The opposite is also possible: a series of downtrend blocks is followed by one reversal box and then by an immediate reversal to downtrend. This price action is called a " Flip-Flop ". This structure usually produces trend continuation signal. when we see this then we better use Buy/Sell stop order. lets see this on the chart:
Temporal Sequence Table:
Sequence frequency shows the frequency distribution of the number of sequential highs and the number of sequential lows that have been generated. This is quite important to the trader who is seeking to join a trend or put on a trade when the price break reverses into a new trend direction. For example, if the pattern over the past year has been that there never were more than nine consecutive high closes, it would make sense not to enter a position late into the sequence of new high closes.
also you can see market structure. I have tried to formalize it and show it under the table. so you can understand if it's choppy market.
"Number of Lines" has very important role. While using low time frames such seconds/minutes time frame you may want to choose higher number of lines such 5,6. ( this may minimize the risk of a whipsaw )
Gaps feature:
You can set Gaps on/off. if Gaps on then you can see how long it takes for each box
Reversal and Continuation Probability:
The script calculated Reversal level and Continuation probability of the trend by using Sequence frequency.
It also shows unconfirmed box and current closing price level:
Last but not least it has Overlay option for all items, and can show all items in the main chart!
P.S. I added alerts :)
Wish you all a happy new year!
Enjoy!
three Supertrend EMA Strategy by Prasanna +DhanuThe indicator described in your Pine Script is a Supertrend EMA Strategy that combines the Supertrend and EMA (Exponential Moving Average) to create a trend-following strategy. Here’s a detailed breakdown of how this indicator works:
1. EMA (Exponential Moving Average):
The EMA is a moving average that places more weight on recent prices, making it more responsive to price changes compared to a simple moving average (SMA). In this strategy, the EMA is used to determine the overall trend direction.
Input Parameter:
ema_length: This is the period for the EMA, set to 50 periods by default. A shorter EMA will respond more quickly to price movements, while a longer EMA is smoother and less sensitive to short-term fluctuations.
How it's used:
If the price is above the EMA, it indicates an uptrend.
If the price is below the EMA, it indicates a downtrend.
2. Supertrend Indicator:
The Supertrend indicator is a trend-following tool based on the Average True Range (ATR), which is a volatility measure. It helps to identify the direction of the trend by setting a dynamic support or resistance level.
Input Parameters:
supertrend_atr_period: The period used for calculating the ATR, set to 10 periods by default.
supertrend_multiplier1: Multiplier for the first Supertrend, set to 3.0.
supertrend_multiplier2: Multiplier for the second Supertrend, set to 2.0.
supertrend_multiplier3: Multiplier for the third Supertrend, set to 1.0.
Each Supertrend line has a different multiplier, which affects its sensitivity to price changes. The ATR period defines how many periods of price data are used to calculate the ATR.
How the Supertrend works:
If the Supertrend value is below the price, the trend is considered bullish (uptrend).
If the Supertrend value is above the price, the trend is considered bearish (downtrend).
The Supertrend will switch between up and down based on price movement and ATR, providing a dynamic trend-following signal.
3. Three Supertrend Lines:
In this strategy, three Supertrend lines are calculated with different multipliers and the same ATR period (10 periods). Each line is more or less sensitive to price changes, and they are plotted on the chart in different colors based on whether the trend is bullish (green) or bearish (red).
Supertrend 1: The most sensitive Supertrend with a multiplier of 3.0.
Supertrend 2: A moderately sensitive Supertrend with a multiplier of 2.0.
Supertrend 3: The least sensitive Supertrend with a multiplier of 1.0.
Each Supertrend line signals a bullish trend when its value is below the price and a bearish trend when its value is above the price.
4. Strategy Rules:
This strategy uses the three Supertrend lines combined with the EMA to generate trade signals.
Entry Conditions:
A long entry is triggered when all three Supertrend lines are in an uptrend (i.e., all three Supertrend lines are below the price), and the price is above the EMA. This suggests a strong bullish market condition.
A short entry is triggered when all three Supertrend lines are in a downtrend (i.e., all three Supertrend lines are above the price), and the price is below the EMA. This suggests a strong bearish market condition.
Exit Conditions:
A long exit occurs when the third Supertrend (the least sensitive one) switches to a downtrend (i.e., the price falls below it).
A short exit occurs when the third Supertrend switches to an uptrend (i.e., the price rises above it).
5. Visualization:
The strategy also plots the following on the chart:
The EMA is plotted as a blue line, which helps identify the overall trend.
The three Supertrend lines are plotted with different colors:
Supertrend 1: Green (for uptrend) and Red (for downtrend).
Supertrend 2: Green (for uptrend) and Red (for downtrend).
Supertrend 3: Green (for uptrend) and Red (for downtrend).
Summary of the Strategy:
The strategy combines three Supertrend indicators (with different multipliers) and an EMA to capture both short-term and long-term trends.
Long positions are entered when all three Supertrend lines are bullish and the price is above the EMA.
Short positions are entered when all three Supertrend lines are bearish and the price is below the EMA.
Exits occur when the third Supertrend line (the least sensitive) signals a change in trend direction.
This combination of indicators allows for a robust trend-following strategy that adapts to both short-term volatility and long-term trend direction. The Supertrend lines provide quick reaction to price changes, while the EMA offers a smoother, more stable trend direction for confirmation.
The indicator described in your Pine Script is a Supertrend EMA Strategy that combines the Supertrend and EMA (Exponential Moving Average) to create a trend-following strategy. Here’s a detailed breakdown of how this indicator works:
1. EMA (Exponential Moving Average):
The EMA is a moving average that places more weight on recent prices, making it more responsive to price changes compared to a simple moving average (SMA). In this strategy, the EMA is used to determine the overall trend direction.
Input Parameter:
ema_length: This is the period for the EMA, set to 50 periods by default. A shorter EMA will respond more quickly to price movements, while a longer EMA is smoother and less sensitive to short-term fluctuations.
How it's used:
If the price is above the EMA, it indicates an uptrend.
If the price is below the EMA, it indicates a downtrend.
2. Supertrend Indicator:
The Supertrend indicator is a trend-following tool based on the Average True Range (ATR), which is a volatility measure. It helps to identify the direction of the trend by setting a dynamic support or resistance level.
Input Parameters:
supertrend_atr_period: The period used for calculating the ATR, set to 10 periods by default.
supertrend_multiplier1: Multiplier for the first Supertrend, set to 3.0.
supertrend_multiplier2: Multiplier for the second Supertrend, set to 2.0.
supertrend_multiplier3: Multiplier for the third Supertrend, set to 1.0.
Each Supertrend line has a different multiplier, which affects its sensitivity to price changes. The ATR period defines how many periods of price data are used to calculate the ATR.
How the Supertrend works:
If the Supertrend value is below the price, the trend is considered bullish (uptrend).
If the Supertrend value is above the price, the trend is considered bearish (downtrend).
The Supertrend will switch between up and down based on price movement and ATR, providing a dynamic trend-following signal.
3. Three Supertrend Lines:
In this strategy, three Supertrend lines are calculated with different multipliers and the same ATR period (10 periods). Each line is more or less sensitive to price changes, and they are plotted on the chart in different colors based on whether the trend is bullish (green) or bearish (red).
Supertrend 1: The most sensitive Supertrend with a multiplier of 3.0.
Supertrend 2: A moderately sensitive Supertrend with a multiplier of 2.0.
Supertrend 3: The least sensitive Supertrend with a multiplier of 1.0.
Each Supertrend line signals a bullish trend when its value is below the price and a bearish trend when its value is above the price.
4. Strategy Rules:
This strategy uses the three Supertrend lines combined with the EMA to generate trade signals.
Entry Conditions:
A long entry is triggered when all three Supertrend lines are in an uptrend (i.e., all three Supertrend lines are below the price), and the price is above the EMA. This suggests a strong bullish market condition.
A short entry is triggered when all three Supertrend lines are in a downtrend (i.e., all three Supertrend lines are above the price), and the price is below the EMA. This suggests a strong bearish market condition.
Exit Conditions:
A long exit occurs when the third Supertrend (the least sensitive one) switches to a downtrend (i.e., the price falls below it).
A short exit occurs when the third Supertrend switches to an uptrend (i.e., the price rises above it).
5. Visualization:
The strategy also plots the following on the chart:
The EMA is plotted as a blue line, which helps identify the overall trend.
The three Supertrend lines are plotted with different colors:
Supertrend 1: Green (for uptrend) and Red (for downtrend).
Supertrend 2: Green (for uptrend) and Red (for downtrend).
Supertrend 3: Green (for uptrend) and Red (for downtrend).
Summary of the Strategy:
The strategy combines three Supertrend indicators (with different multipliers) and an EMA to capture both short-term and long-term trends.
Long positions are entered when all three Supertrend lines are bullish and the price is above the EMA.
Short positions are entered when all three Supertrend lines are bearish and the price is below the EMA.
Exits occur when the third Supertrend line (the least sensitive) signals a change in trend direction.
This combination of indicators allows for a robust trend-following strategy that adapts to both short-term volatility and long-term trend direction. The Supertrend lines provide quick reaction to price changes, while the EMA offers a smoother, more stable trend direction for confirmation.
The indicator described in your Pine Script is a Supertrend EMA Strategy that combines the Supertrend and EMA (Exponential Moving Average) to create a trend-following strategy. Here’s a detailed breakdown of how this indicator works:
1. EMA (Exponential Moving Average):
The EMA is a moving average that places more weight on recent prices, making it more responsive to price changes compared to a simple moving average (SMA). In this strategy, the EMA is used to determine the overall trend direction.
Input Parameter:
ema_length: This is the period for the EMA, set to 50 periods by default. A shorter EMA will respond more quickly to price movements, while a longer EMA is smoother and less sensitive to short-term fluctuations.
How it's used:
If the price is above the EMA, it indicates an uptrend.
If the price is below the EMA, it indicates a downtrend.
2. Supertrend Indicator:
The Supertrend indicator is a trend-following tool based on the Average True Range (ATR), which is a volatility measure. It helps to identify the direction of the trend by setting a dynamic support or resistance level.
Input Parameters:
supertrend_atr_period: The period used for calculating the ATR, set to 10 periods by default.
supertrend_multiplier1: Multiplier for the first Supertrend, set to 3.0.
supertrend_multiplier2: Multiplier for the second Supertrend, set to 2.0.
supertrend_multiplier3: Multiplier for the third Supertrend, set to 1.0.
Each Supertrend line has a different multiplier, which affects its sensitivity to price changes. The ATR period defines how many periods of price data are used to calculate the ATR.
How the Supertrend works:
If the Supertrend value is below the price, the trend is considered bullish (uptrend).
If the Supertrend value is above the price, the trend is considered bearish (downtrend).
The Supertrend will switch between up and down based on price movement and ATR, providing a dynamic trend-following signal.
3. Three Supertrend Lines:
In this strategy, three Supertrend lines are calculated with different multipliers and the same ATR period (10 periods). Each line is more or less sensitive to price changes, and they are plotted on the chart in different colors based on whether the trend is bullish (green) or bearish (red).
Supertrend 1: The most sensitive Supertrend with a multiplier of 3.0.
Supertrend 2: A moderately sensitive Supertrend with a multiplier of 2.0.
Supertrend 3: The least sensitive Supertrend with a multiplier of 1.0.
Each Supertrend line signals a bullish trend when its value is below the price and a bearish trend when its value is above the price.
4. Strategy Rules:
This strategy uses the three Supertrend lines combined with the EMA to generate trade signals.
Entry Conditions:
A long entry is triggered when all three Supertrend lines are in an uptrend (i.e., all three Supertrend lines are below the price), and the price is above the EMA. This suggests a strong bullish market condition.
A short entry is triggered when all three Supertrend lines are in a downtrend (i.e., all three Supertrend lines are above the price), and the price is below the EMA. This suggests a strong bearish market condition.
Exit Conditions:
A long exit occurs when the third Supertrend (the least sensitive one) switches to a downtrend (i.e., the price falls below it).
A short exit occurs when the third Supertrend switches to an uptrend (i.e., the price rises above it).
5. Visualization:
The strategy also plots the following on the chart:
The EMA is plotted as a blue line, which helps identify the overall trend.
The three Supertrend lines are plotted with different colors:
Supertrend 1: Green (for uptrend) and Red (for downtrend).
Supertrend 2: Green (for uptrend) and Red (for downtrend).
Supertrend 3: Green (for uptrend) and Red (for downtrend).
Summary of the Strategy:
The strategy combines three Supertrend indicators (with different multipliers) and an EMA to capture both short-term and long-term trends.
Long positions are entered when all three Supertrend lines are bullish and the price is above the EMA.
Short positions are entered when all three Supertrend lines are bearish and the price is below the EMA.
Exits occur when the third Supertrend line (the least sensitive) signals a change in trend direction.
This combination of indicators allows for a robust trend-following strategy that adapts to both short-term volatility and long-term trend direction. The Supertrend lines provide quick reaction to price changes, while the EMA offers a smoother, more stable trend direction for confirmation.
Smart DCA Strategy (Public)INSPIRATION
While Dollar Cost Averaging (DCA) is a popular and stress-free investment approach, I noticed an opportunity for enhancement. Standard DCA involves buying consistently, regardless of market conditions, which can sometimes mean missing out on optimal investment opportunities. This led me to develop the Smart DCA Strategy – a 'set and forget' method like traditional DCA, but with an intelligent twist to boost its effectiveness.
The goal was to build something more profitable than a standard DCA strategy so it was equally important that this indicator could backtest its own results in an A/B test manner against the regular DCA strategy.
WHY IS IT SMART?
The key to this strategy is its dynamic approach: buying aggressively when the market shows signs of being oversold, and sitting on the sidelines when it's not. This approach aims to optimize entry points, enhancing the potential for better returns while maintaining the simplicity and low stress of DCA.
WHAT THIS STRATEGY IS, AND IS NOT
This is an investment style strategy. It is designed to improve upon the common standard DCA investment strategy. It is therefore NOT a day trading strategy. Feel free to experiment with various timeframes, but it was designed to be used on a daily timeframe and that's how I recommend it to be used.
You may also go months without any buy signals during bull markets, but remember that is exactly the point of the strategy - to keep your buying power on the sidelines until the markets have significantly pulled back. You need to be patient and trust in the historical backtesting you have performed.
HOW IT WORKS
The Smart DCA Strategy leverages a creative approach to using Moving Averages to identify the most opportune moments to buy. A trigger occurs when a daily candle, in its entirety including the high wick, closes below the threshold line or box plotted on the chart. The indicator is designed to facilitate both backtesting and live trading.
HOW TO USE
Settings:
The input parameters for tuning have been intentionally simplified in an effort to prevent users falling into the overfitting trap.
The main control is the Buying strictness scale setting. Setting this to a lower value will provide more buying days (less strict) while higher values mean less buying days (more strict). In my testing I've found level 9 to provide good all round results.
Validation days is a setting to prevent triggering entries until the asset has spent a given number of days (candles) in the overbought state. Increasing this makes entries stricter. I've found 0 to give the best results across most assets.
In the backtest settings you can also configure how much to buy for each day an entry triggers. Blind buy size is the amount you would buy every day in a standard DCA strategy. Smart buy size is the amount you would buy each day a Smart DCA entry is triggered.
You can also experiment with backtesting your strategy over different historical datasets by using the Start date and End date settings. The results table will not calculate for any trades outside what you've set in the date range settings.
Backtesting:
When backtesting you should use the results table on the top right to tune and optimise the results of your strategy. As with all backtests, be careful to avoid overfitting the parameters. It's better to have a setup which works well across many currencies and historical periods than a setup which is excellent on one dataset but bad on most others. This gives a much higher probability that it will be effective when you move to live trading.
The results table provides a clear visual representation as to which strategy, standard or smart, is more profitable for the given dataset. You will notice the columns are dynamically coloured red and green. Their colour changes based on which strategy is more profitable in the A/B style backtest - green wins, red loses. The key metrics to focus on are GOA (Gain on Account) and Avg Cost.
Live Trading:
After you've finished backtesting you can proceed with configuring your alerts for live trading.
But first, you need to estimate the amount you should buy on each Smart DCA entry. We can use the Total invested row in the results table to calculate this. Assuming we're looking to trade on
BTCUSD
Decide how much USD you would spend each day to buy BTC if you were using a standard DCA strategy. Lets say that is $5 per day
Enter that USD amount in the Blind buy size settings box
Check the Blind Buy column in the results table. If we set the backtest date range to the last 10 years, we would expect the amount spent on blind buys over 10 years to be $18,250 given $5 each day
Next we need to tweak the value of the Smart buy size parameter in setting to get it as close as we can to the Total Invested amount for Blind Buy
By following this approach it means we will invest roughly the same amount into our Smart DCA strategy as we would have into a standard DCA strategy over any given time period.
After you have calculated the Smart buy size, you can go ahead and set up alerts on Smart DCA buy triggers.
BOT AUTOMATION
In an effort to maintain the 'set and forget' stress-free benefits of a standard DCA strategy, I have set my personal Smart DCA Strategy up to be automated. The bot runs on AWS and I have a fully functional project for the bot on my GitHub account. Just reach out if you would like me to point you towards it. You can also hook this into any other 3rd party trade automation system of your choice using the pre-configured alerts within the indicator.
PLANNED FUTURE DEVELOPMENTS
Currently this is purely an accumulation strategy. It does not have any sell signals right now but I have ideas on how I will build upon it to incorporate an algorithm for selling. The strategy should gradually offload profits in bull markets which generates more USD which gives more buying power to rinse and repeat the same process in the next cycle only with a bigger starting capital. Watch this space!
MARKETS
Crypto:
This strategy has been specifically built to work on the crypto markets. It has been developed, backtested and tuned against crypto markets and I personally only run it on crypto markets to accumulate more of the coins I believe in for the long term. In the section below I will provide some backtest results from some of the top crypto assets.
Stocks:
I've found it is generally more profitable than a standard DCA strategy on the majority of stocks, however the results proved to be a lot more impressive on crypto. This is mainly due to the volatility and cycles found in crypto markets. The strategy makes its profits from capitalising on pullbacks in price. Good stocks on the other hand tend to move up and to the right with less significant pullbacks, therefore giving this strategy less opportunity to flourish.
Forex:
As this is an accumulation style investment strategy, I do not recommend that you use it to trade Forex.
For more info about this strategy including backtest results, please see the full description on the invite only version of this strategy named "Smart DCA Strategy"
300-Candle Weighted Average Zones w/50 EMA SignalsThis indicator is designed to deliver a more nuanced view of price dynamics by combining a custom, weighted price average with a volatility-based zone and a trend filter (in this case, a 50-period exponential moving average). The core concept revolves around capturing the overall price level over a relatively large lookback window (300 candles) but with an intentional bias toward recent market activity (the most recent 20 candles), thereby offering a balance between long-term context and short-term responsiveness. By smoothing this weighted average and establishing a “zone” of standard deviation bands around it, the indicator provides a refined visualization of both average price and its recent volatility envelope. Traders can then look for confluence with a standard trend filter, such as the 50 EMA, to identify meaningful crossover signals that may represent trend shifts or opportunities for entry and exit.
What the Indicator Does:
Weighted Price Average:
Instead of using a simple or exponential moving average, this indicator calculates a custom weighted average price over the past 300 candles. Most historical candles receive a base weight of 1.0, but the most recent 20 candles are assigned a higher weight (for example, a weight of 2.0). This weighting scheme ensures that the calculation is not simply a static lookback average; it actively emphasizes current market conditions. The effect is to generate an average line that is more sensitive to the most recent price swings while still maintaining the historical context of the previous 280 candles.
Smoothing of the Weighted Average:
Once the raw weighted average is computed, an exponential smoothing function (EMA) is applied to reduce noise and produce a cleaner, more stable average line. This smoothing helps traders avoid reacting prematurely to minor price fluctuations. By stabilizing the average line, traders can more confidently identify actual shifts in market direction.
Volatility Zone via Standard Deviation Bands:
To contextualize how far price can deviate from this weighted average, the indicator uses standard deviation. Standard deviation is a statistical measure of volatility—how spread out the price values are around the mean. By adding and subtracting one standard deviation from the smoothed weighted average, the indicator plots an upper band and a lower band, creating a zone or channel. The area between these bands is filled, often with a semi-transparent color, highlighting a volatility corridor within which price and the EMA might oscillate.
This zone is invaluable in visualizing “normal” price behavior. When the 50 EMA line and the weighted average line are both within this volatility zone, it indicates that the market’s short- to mid-term trend and its average pricing are aligned well within typical volatility bounds.
Incorporation of a 50-Period EMA:
The inclusion of a commonly used trend filter, the 50 EMA, adds another layer of context to the analysis. The 50 EMA, being a widely recognized moving average length, is often considered a baseline for intermediate trend bias. It reacts faster than a long-term average (like a 200 EMA) but is still stable enough to filter out the market “chop” seen in very short-term averages.
By overlaying the 50 EMA on this custom weighted average and the surrounding volatility zone, the trader gains a dual-dimensional perspective:
Trend Direction: If the 50 EMA is generally above the weighted average, the short-term trend is gaining bullish momentum; if it’s below, the short-term trend has a bearish tilt.
Volatility Normalization: The bands, constructed from standard deviations, provide a sense of whether the price and the 50 EMA are operating within a statistically “normal” range. If the EMA crosses the weighted average within this zone, it signals a potential trend initiation or meaningful shift, as opposed to a random price spike outside normal volatility boundaries.
Why a Trader Would Want to Use This Indicator:
Contextualized Price Level:
Standard MAs may not fully incorporate the most recent price dynamics in a large lookback window. By weighting the most recent candles more heavily, this indicator ensures that the trader is always anchored to what the market is currently doing, not just what it did 100 or 200 candles ago.
Reduced Whipsaw with Smoothing:
The smoothed weighted average line reduces noise, helping traders filter out inconsequential price movements. This makes it easier to spot genuine changes in trend or sentiment.
Visual Volatility Gauge:
The standard deviation bands create a visual representation of “normal” price movement. Traders can quickly assess if a breakout or breakdown is statistically significant or just another oscillation within the expected volatility range.
Clear Trade Signals with Confirmation:
By integrating the 50 EMA and designing signals that trigger only when the 50 EMA crosses above or below the weighted average while inside the zone, the indicator provides a refined entry/exit criterion. This avoids chasing breakouts that occur in abnormal volatility conditions and focuses on those crossovers likely to have staying power.
How to Use It in an Example Strategy:
Imagine you are a swing trader looking to identify medium-term trend changes. You apply this indicator to a chart of a popular currency pair or a leading tech stock. Over the past few days, the 50 EMA has been meandering around the weighted average line, both confined within the standard deviation zone.
Bullish Example:
Suddenly, the 50 EMA crosses decisively above the weighted average line while both are still hovering within the volatility zone. This might be your cue: you interpret this crossover as the 50 EMA acknowledging the recent upward shift in price dynamics that the weighted average has highlighted. Since it occurred inside the normal volatility range, it’s less likely to be a head-fake. You place a long position, setting an initial stop just below the lower band to protect against volatility.
If the price continues to rise and the EMA stays above the average, you have confirmation to hold the trade. As the price moves higher, the weighted average may follow, reinforcing your bullish stance.
Bearish Example:
On the flip side, if the 50 EMA crosses below the weighted average line within the zone, it suggests a subtle but meaningful change in trend direction to the downside. You might short the asset, placing your protective stop just above the upper band, expecting that the statistically “normal” level of volatility will contain the price action. If the price does break above those bands later, it’s a sign your trade may not work out as planned.
Other Indicators for Confluence:
To strengthen the reliability of the signals generated by this weighted average zone approach, traders may want to combine it with other technical studies:
Volume Indicators (e.g., Volume Profile, OBV):
Confirm that the trend crossover inside the volatility zone is supported by volume. For instance, an uptrend crossover combined with increasing On-Balance Volume (OBV) or volume spikes on up candles signals stronger buying pressure behind the price action.
Momentum Oscillators (e.g., RSI, Stochastics):
Before taking a crossover signal, check if the RSI is above 50 and rising for bullish entries, or if the Stochastics have turned down from overbought levels for bearish entries. Momentum confirmation can help ensure that the trend change is not just an isolated random event.
Market Structure Tools (e.g., Pivot Points, Swing High/Low Analysis):
Identify if the crossover event coincides with a break of a previous pivot high or low. A bullish crossover inside the zone aligned with a break above a recent swing high adds further strength to your conviction. Conversely, a bearish crossover confirmed by a breakdown below a previous swing low can make a short trade setup more compelling.
Volume-Weighted Average Price (VWAP):
Comparing where the weighted average zone lies relative to VWAP can provide institutional insight. If the bullish crossover happens while the price is also holding above VWAP, it can mean that the average participant in the market is in profit and that the trend is likely supported by strong hands.
This indicator serves as a tool to balance long-term perspective, short-term adaptability, and volatility normalization. It can be a valuable addition to a trader’s toolkit, offering enhanced clarity and precision in detecting meaningful shifts in trend, especially when combined with other technical indicators and robust risk management principles.
Enigma End Game Indicator
Enigma End Game Indicator Description
The Enigma End Game indicator is a powerful tool designed to enhance the way traders approach support and resistance, combining mainstream technical analysis with a unique, dynamic perspective. At its core, this indicator enables traders to adapt to market conditions in real time by applying a blend of classic and modern interpretations of support and resistance levels.
In traditional support and resistance analysis, we recognize the significant price points where the market has historically reversed or consolidated. However, the *Enigma End Game* indicator takes this one step further by analyzing each individual candle's high as a potential resistance level and each low as support. This allows the trader to stay more agile, as the market constantly updates and evolves. The dynamic nature of this method acknowledges that price movements are fractal in nature, meaning that these levels are not static but adjust in response to price action on multiple timeframes.
### How It Works:
When using the *Enigma End Game* indicator, it doesn't simply plot buy and sell signals automatically. Instead, the indicator highlights key levels based on the interaction between price and historical price action. Here's how it operates:
1. **Buy Logic:**
The indicator identifies bullish signals based on the *Enigma* logic, but it does not trigger an immediate buy. Instead, it plots arrows above or below the candles, indicating the key price levels where price action has shifted. Traders then focus on these areas, particularly looking for buy opportunities *below* these levels during key market sessions (such as London or New York) while aligning with both mainstream support and resistance and *Enigma* levels.
2. **Sell Logic:**
Similarly, when the indicator identifies a sell signal, it plots an arrow above the candle where price action has reversed. This does not immediately suggest selling. Traders wait for a price retracement back to the previously breached low (for a sell order) or high (for a buy order), observing price action closely on lower timeframes (such as the 1-minute chart) to refine entry points. The entry is triggered when price starts to show signs of reversing at these levels, further validated by mainstream and *Enigma* support/resistance.
### Practical Example – XAU/USD (Gold):
For instance, in the settings of the *Enigma End Game* indicator, if we select the 5-minute (5MN) timeframe as the key level, the indicator will only plot the first 3 arrows following the *Enigma* logic. The arrows will appear above or below the candle that was breached, indicating a potential trend reversal. In this scenario, the first arrow marks the point where price broke a significant support or resistance level. Afterward, the trader watches for a subsequent candle to close below (in the case of a sell) the previous candle’s low, confirming a bearish bias.
Now, the trader does not rush into a sell order. Instead, they wait for the price to pull back towards the previously breached low. At this point, the trader can use a lower timeframe (like the 1-minute chart) to identify both mainstream support and resistance levels and *Enigma* levels above the main 5-minute key level. These additional levels provide a clearer understanding of where price might reverse and give the trader a stronger edge in refining their entry point.
The trader then sets a sell order *above* the price level of the previous low, but only once signs show that price is retracing and ready to fall again. The price point where this retracement occurs, confirmed by both mainstream and *Enigma* levels, becomes the entry signal for the trade.
### Summary:
The *Enigma End Game* indicator combines time-tested principles of support and resistance with a more modern, adaptive view, empowering traders to read the market with greater precision. It guides you to wait for optimal entries, based on dynamic support and resistance levels that change with each price movement. By combining signals on higher timeframes with refined entries on lower timeframes, traders gain a unique advantage in navigating both obvious and hidden levels of support and resistance, ultimately improving their ability to time trades with higher probability of success.
This indicator allows for a more calculated, strategic approach to trading—highlighting the right moments to enter the market while providing the flexibility to adjust to different market conditions.
The *ENIGMA Signals with Retests* indicator is a versatile trading tool that combines key market sessions with dynamic support and resistance levels. It uses logic to identify potential buy and sell signals based on the behavior of recent price swings (highs and lows) and offers flexibility with the number of arrows plotted per session. The user can customize settings like arrow frequency, line styles, and session times, allowing for personalized trading strategies.
The indicator detects buy and sell signals by checking if the price breaks the previous swing high (for buy signals) or swing low (for sell signals). It then stores these levels and draws horizontal lines on the chart, representing critical price levels where traders can expect potential price reactions.
A key feature of this indicator is its ability to limit the number of arrows per session, ensuring a cleaner chart and reducing signal clutter. Horizontal lines are drawn at the identified buy or sell levels, with the option to display labels like "BUY - AT OR BELOW" and "SELL - AT OR ABOVE" to further clarify entry points.
The indicator also incorporates session filtering, allowing traders to focus on specific market sessions (Asia, London, and New York) for more relevant signals, and it ensures that no more than a user-defined number of arrows are plotted within a session.
lib_smcLibrary "lib_smc"
This is an adaptation of LuxAlgo's Smart Money Concepts indicator with numerous changes. Main changes include integration of object based plotting, plenty of performance improvements, live tracking of Order Blocks, integration of volume profiles to refine Order Blocks, and many more.
This is a library for developers, if you want this converted into a working strategy, let me know.
buffer(item, len, force_rotate)
Parameters:
item (float)
len (int)
force_rotate (bool)
buffer(item, len, force_rotate)
Parameters:
item (int)
len (int)
force_rotate (bool)
buffer(item, len, force_rotate)
Parameters:
item (Profile type from robbatt/lib_profile/32)
len (int)
force_rotate (bool)
swings(len)
INTERNAL: detect swing points (HH and LL) in given range
Parameters:
len (simple int) : range to check for new swing points
Returns: values are the price level where and if a new HH or LL was detected, else na
method init(this)
Namespace types: OrderBlockConfig
Parameters:
this (OrderBlockConfig)
method delete(this)
Namespace types: OrderBlock
Parameters:
this (OrderBlock)
method clear_broken(this, broken_buffer)
INTERNAL: delete internal order blocks box coordinates if top/bottom is broken
Namespace types: map
Parameters:
this (map)
broken_buffer (map)
Returns: any_bull_ob_broken, any_bear_ob_broken, broken signals are true if an according order block was broken/mitigated, broken contains the broken block(s)
create_ob(id, mode, start_t, start_i, top, end_t, end_i, bottom, break_price, early_confirmation_price, config, init_plot, force_overlay)
INTERNAL: set internal order block coordinates
Parameters:
id (int)
mode (int) : 1: bullish, -1 bearish block
start_t (int)
start_i (int)
top (float)
end_t (int)
end_i (int)
bottom (float)
break_price (float)
early_confirmation_price (float)
config (OrderBlockConfig)
init_plot (bool)
force_overlay (bool)
Returns: signals are true if an according order block was broken/mitigated
method align_to_profile(block, align_edge, align_break_price)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
align_edge (bool)
align_break_price (bool)
method create_profile(block, opens, tops, bottoms, closes, values, resolution, vah_pc, val_pc, args, init_calculated, init_plot, force_overlay)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
opens (array)
tops (array)
bottoms (array)
closes (array)
values (array)
resolution (int)
vah_pc (float)
val_pc (float)
args (ProfileArgs type from robbatt/lib_profile/32)
init_calculated (bool)
init_plot (bool)
force_overlay (bool)
method create_profile(block, resolution, vah_pc, val_pc, args, init_calculated, init_plot, force_overlay)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
resolution (int)
vah_pc (float)
val_pc (float)
args (ProfileArgs type from robbatt/lib_profile/32)
init_calculated (bool)
init_plot (bool)
force_overlay (bool)
track_obs(swing_len, hh, ll, top, btm, bull_bos_alert, bull_choch_alert, bear_bos_alert, bear_choch_alert, min_block_size, max_block_size, config_bull, config_bear, init_plot, force_overlay, enabled, extend_blocks, clear_broken_buffer_before, align_edge_to_value_area, align_break_price_to_poc, profile_args_bull, profile_args_bear, use_soft_confirm, soft_confirm_offset, use_retracements_with_FVG_out)
Parameters:
swing_len (int)
hh (float)
ll (float)
top (float)
btm (float)
bull_bos_alert (bool)
bull_choch_alert (bool)
bear_bos_alert (bool)
bear_choch_alert (bool)
min_block_size (float)
max_block_size (float)
config_bull (OrderBlockConfig)
config_bear (OrderBlockConfig)
init_plot (bool)
force_overlay (bool)
enabled (bool)
extend_blocks (simple bool)
clear_broken_buffer_before (simple bool)
align_edge_to_value_area (simple bool)
align_break_price_to_poc (simple bool)
profile_args_bull (ProfileArgs type from robbatt/lib_profile/32)
profile_args_bear (ProfileArgs type from robbatt/lib_profile/32)
use_soft_confirm (simple bool)
soft_confirm_offset (float)
use_retracements_with_FVG_out (simple bool)
method draw(this, config, extend_only)
Namespace types: OrderBlock
Parameters:
this (OrderBlock)
config (OrderBlockConfig)
extend_only (bool)
method draw(blocks, config)
INTERNAL: plot order blocks
Namespace types: array
Parameters:
blocks (array)
config (OrderBlockConfig)
method draw(blocks, config)
INTERNAL: plot order blocks
Namespace types: map
Parameters:
blocks (map)
config (OrderBlockConfig)
method cleanup(this, ob_bull, ob_bear)
removes all Profiles that are older than the latest OrderBlock from this profile buffer
Namespace types: array
Parameters:
this (array type from robbatt/lib_profile/32)
ob_bull (OrderBlock)
ob_bear (OrderBlock)
_plot_swing_points(mode, x, y, show_swing_points, linecolor_swings, keep_history, show_latest_swings_levels, trail_x, trail_y, trend)
INTERNAL: plot swing points
Parameters:
mode (int) : 1: bullish, -1 bearish block
x (int) : x-coordingate of swing point to plot (bar_index)
y (float) : y-coordingate of swing point to plot (price)
show_swing_points (bool) : switch to enable/disable plotting of swing point labels
linecolor_swings (color) : color for swing point labels and lates level lines
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
show_latest_swings_levels (bool)
trail_x (int) : x-coordinate for latest swing point (bar_index)
trail_y (float) : y-coordinate for latest swing point (price)
trend (int) : the current trend 1: bullish, -1: bearish, to determine Strong/Weak Low/Highs
_pivot_lvl(mode, trend, hhll_x, hhll, super_hhll, filter_insignificant_internal_breaks)
INTERNAL: detect whether a structural level has been broken and if it was in trend direction (BoS) or against trend direction (ChoCh), also track the latest high and low swing points
Parameters:
mode (simple int) : detect 1: bullish, -1 bearish pivot points
trend (int) : current trend direction
hhll_x (int) : x-coordinate of newly detected hh/ll (bar_index)
hhll (float) : y-coordinate of newly detected hh/ll (price)
super_hhll (float) : level/y-coordinate of superior hhll (if this is an internal structure pivot level)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
Returns: coordinates of internal structure that has been broken (x,y): start of structure, (trail_x, trail_y): tracking hh/ll after structure break, (bos_alert, choch_alert): signal whether a structural level has been broken
_plot_structure(x, y, is_bos, is_choch, line_color, line_style, label_style, label_size, keep_history)
INTERNAL: plot structural breaks (BoS/ChoCh)
Parameters:
x (int) : x-coordinate of newly broken structure (bar_index)
y (float) : y-coordinate of newly broken structure (price)
is_bos (bool) : whether this structural break was in trend direction
is_choch (bool) : whether this structural break was against trend direction
line_color (color) : color for the line connecting the structural level and the breaking candle
line_style (string) : style (line.style_dashed/solid) for the line connecting the structural level and the breaking candle
label_style (string) : style (label.style_label_down/up) for the label above/below the line connecting the structural level and the breaking candle
label_size (string) : size (size.small/tiny) for the label above/below the line connecting the structural level and the breaking candle
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
structure_values(length, super_hh, super_ll, filter_insignificant_internal_breaks)
detect (and plot) structural breaks and the resulting new trend
Parameters:
length (simple int) : lookback period for swing point detection
super_hh (float) : level/y-coordinate of superior hh (for internal structure detection)
super_ll (float) : level/y-coordinate of superior ll (for internal structure detection)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
Returns: trend: direction 1:bullish -1:bearish, (bull_bos_alert, bull_choch_alert, top_x, top_y, trail_up_x, trail_up): whether and which level broke in a bullish direction, trailing high, (bbear_bos_alert, bear_choch_alert, tm_x, btm_y, trail_dn_x, trail_dn): same in bearish direction
structure_plot(trend, bull_bos_alert, bull_choch_alert, top_x, top_y, trail_up_x, trail_up, hh, bear_bos_alert, bear_choch_alert, btm_x, btm_y, trail_dn_x, trail_dn, ll, color_bull, color_bear, show_swing_points, show_latest_swings_levels, show_bos, show_choch, line_style, label_size, keep_history)
detect (and plot) structural breaks and the resulting new trend
Parameters:
trend (int) : crrent trend 1: bullish, -1: bearish
bull_bos_alert (bool) : if there was a bullish bos alert -> plot it
bull_choch_alert (bool) : if there was a bullish choch alert -> plot it
top_x (int) : latest shwing high x
top_y (float) : latest swing high y
trail_up_x (int) : trailing high x
trail_up (float) : trailing high y
hh (float) : if there was a higher high
bear_bos_alert (bool) : if there was a bearish bos alert -> plot it
bear_choch_alert (bool) : if there was a bearish chock alert -> plot it
btm_x (int) : latest swing low x
btm_y (float) : latest swing low y
trail_dn_x (int) : trailing low x
trail_dn (float) : trailing low y
ll (float) : if there was a lower low
color_bull (color) : color for bullish BoS/ChoCh levels
color_bear (color) : color for bearish BoS/ChoCh levels
show_swing_points (bool) : whether to plot swing point labels
show_latest_swings_levels (bool) : whether to track and plot latest swing point levels with lines
show_bos (bool) : whether to plot BoS levels
show_choch (bool) : whether to plot ChoCh levels
line_style (string) : whether to plot BoS levels
label_size (string) : label size of plotted BoS/ChoCh levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
structure(length, color_bull, color_bear, super_hh, super_ll, filter_insignificant_internal_breaks, show_swing_points, show_latest_swings_levels, show_bos, show_choch, line_style, label_size, keep_history, enabled)
detect (and plot) structural breaks and the resulting new trend
Parameters:
length (simple int) : lookback period for swing point detection
color_bull (color) : color for bullish BoS/ChoCh levels
color_bear (color) : color for bearish BoS/ChoCh levels
super_hh (float) : level/y-coordinate of superior hh (for internal structure detection)
super_ll (float) : level/y-coordinate of superior ll (for internal structure detection)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
show_swing_points (bool) : whether to plot swing point labels
show_latest_swings_levels (bool) : whether to track and plot latest swing point levels with lines
show_bos (bool) : whether to plot BoS levels
show_choch (bool) : whether to plot ChoCh levels
line_style (string) : whether to plot BoS levels
label_size (string) : label size of plotted BoS/ChoCh levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
enabled (bool)
_check_equal_level(mode, len, eq_threshold, enabled)
INTERNAL: detect equal levels (double top/bottom)
Parameters:
mode (int) : detect 1: bullish/high, -1 bearish/low pivot points
len (int) : lookback period for equal level (swing point) detection
eq_threshold (float) : maximum price offset for a level to be considered equal
enabled (bool)
Returns: eq_alert whether an equal level was detected and coordinates of the first and the second level/swing point
_plot_equal_level(show_eq, x1, y1, x2, y2, label_txt, label_style, label_size, line_color, line_style, keep_history)
INTERNAL: plot equal levels (double top/bottom)
Parameters:
show_eq (bool) : whether to plot the level or not
x1 (int) : x-coordinate of the first level / swing point
y1 (float) : y-coordinate of the first level / swing point
x2 (int) : x-coordinate of the second level / swing point
y2 (float) : y-coordinate of the second level / swing point
label_txt (string) : text for the label above/below the line connecting the equal levels
label_style (string) : style (label.style_label_down/up) for the label above/below the line connecting the equal levels
label_size (string) : size (size.tiny) for the label above/below the line connecting the equal levels
line_color (color) : color for the line connecting the equal levels (and it's label)
line_style (string) : style (line.style_dotted) for the line connecting the equal levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
equal_levels_values(len, threshold, enabled)
detect (and plot) equal levels (double top/bottom), returns coordinates
Parameters:
len (int) : lookback period for equal level (swing point) detection
threshold (float) : maximum price offset for a level to be considered equal
enabled (bool) : whether detection is enabled
Returns: (eqh_alert, eqh_x1, eqh_y1, eqh_x2, eqh_y2) whether an equal high was detected and coordinates of the first and the second level/swing point, (eql_alert, eql_x1, eql_y1, eql_x2, eql_y2) same for equal lows
equal_levels_plot(eqh_x1, eqh_y1, eqh_x2, eqh_y2, eql_x1, eql_y1, eql_x2, eql_y2, color_eqh, color_eql, show, keep_history)
detect (and plot) equal levels (double top/bottom), returns coordinates
Parameters:
eqh_x1 (int) : coordinates of first point of equal high
eqh_y1 (float) : coordinates of first point of equal high
eqh_x2 (int) : coordinates of second point of equal high
eqh_y2 (float) : coordinates of second point of equal high
eql_x1 (int) : coordinates of first point of equal low
eql_y1 (float) : coordinates of first point of equal low
eql_x2 (int) : coordinates of second point of equal low
eql_y2 (float) : coordinates of second point of equal low
color_eqh (color) : color for the line connecting the equal highs (and it's label)
color_eql (color) : color for the line connecting the equal lows (and it's label)
show (bool) : whether plotting is enabled
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
Returns: (eqh_alert, eqh_x1, eqh_y1, eqh_x2, eqh_y2) whether an equal high was detected and coordinates of the first and the second level/swing point, (eql_alert, eql_x1, eql_y1, eql_x2, eql_y2) same for equal lows
equal_levels(len, threshold, color_eqh, color_eql, enabled, show, keep_history)
detect (and plot) equal levels (double top/bottom)
Parameters:
len (int) : lookback period for equal level (swing point) detection
threshold (float) : maximum price offset for a level to be considered equal
color_eqh (color) : color for the line connecting the equal highs (and it's label)
color_eql (color) : color for the line connecting the equal lows (and it's label)
enabled (bool) : whether detection is enabled
show (bool) : whether plotting is enabled
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
Returns: (eqh_alert) whether an equal high was detected, (eql_alert) same for equal lows
_detect_fvg(mode, enabled, o, h, l, c, filter_insignificant_fvgs, change_tf)
INTERNAL: detect FVG (fair value gap)
Parameters:
mode (int) : detect 1: bullish, -1 bearish gaps
enabled (bool) : whether detection is enabled
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
Returns: whether a new FVG was detected and its top/mid/bottom levels
_clear_broken_fvg(mode, upper_boxes, lower_boxes)
INTERNAL: clear mitigated FVGs (fair value gaps)
Parameters:
mode (int) : detect 1: bullish, -1 bearish gaps
upper_boxes (array) : array that stores the upper parts of the FVG boxes
lower_boxes (array) : array that stores the lower parts of the FVG boxes
_plot_fvg(mode, show, top, mid, btm, border_color, extend_box)
INTERNAL: plot (and clear broken) FVG (fair value gap)
Parameters:
mode (int) : plot 1: bullish, -1 bearish gap
show (bool) : whether plotting is enabled
top (float) : top level of fvg
mid (float) : center level of fvg
btm (float) : bottom level of fvg
border_color (color) : color for the FVG box
extend_box (int) : how many bars into the future the FVG box should be extended after detection
fvgs_values(o, h, l, c, filter_insignificant_fvgs, change_tf, enabled)
detect (and plot / clear broken) FVGs (fair value gaps), and return alerts and level values
Parameters:
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
enabled (bool) : whether detection is enabled
Returns: (bullish_fvg_alert, bull_top, bull_mid, bull_btm): whether a new bullish FVG was detected and its top/mid/bottom levels, (bearish_fvg_alert, bear_top, bear_mid, bear_btm): same for bearish FVGs
fvgs_plot(bullish_fvg_alert, bull_top, bull_mid, bull_btm, bearish_fvg_alert, bear_top, bear_mid, bear_btm, color_bull, color_bear, extend_box, show)
Parameters:
bullish_fvg_alert (bool)
bull_top (float)
bull_mid (float)
bull_btm (float)
bearish_fvg_alert (bool)
bear_top (float)
bear_mid (float)
bear_btm (float)
color_bull (color) : color for bullish FVG boxes
color_bear (color) : color for bearish FVG boxes
extend_box (int) : how many bars into the future the FVG box should be extended after detection
show (bool) : whether plotting is enabled
Returns: (bullish_fvg_alert, bull_top, bull_mid, bull_btm): whether a new bullish FVG was detected and its top/mid/bottom levels, (bearish_fvg_alert, bear_top, bear_mid, bear_btm): same for bearish FVGs
fvgs(o, h, l, c, filter_insignificant_fvgs, change_tf, color_bull, color_bear, extend_box, enabled, show)
detect (and plot / clear broken) FVGs (fair value gaps)
Parameters:
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
color_bull (color) : color for bullish FVG boxes
color_bear (color) : color for bearish FVG boxes
extend_box (int) : how many bars into the future the FVG box should be extended after detection
enabled (bool) : whether detection is enabled
show (bool) : whether plotting is enabled
Returns: (bullish_fvg_alert): whether a new bullish FVG was detected, (bearish_fvg_alert): same for bearish FVGs
OrderBlock
Fields:
id (series int)
dir (series int)
left_top (chart.point)
right_bottom (chart.point)
break_price (series float)
early_confirmation_price (series float)
ltf_high (array)
ltf_low (array)
ltf_volume (array)
plot (Box type from robbatt/lib_plot_objects/49)
profile (Profile type from robbatt/lib_profile/32)
trailing (series bool)
extending (series bool)
awaiting_confirmation (series bool)
touched_break_price_before_confirmation (series bool)
soft_confirmed (series bool)
has_fvg_out (series bool)
hidden (series bool)
broken (series bool)
OrderBlockConfig
Fields:
show (series bool)
show_last (series int)
show_id (series bool)
show_profile (series bool)
args (BoxArgs type from robbatt/lib_plot_objects/49)
txt (series string)
txt_args (BoxTextArgs type from robbatt/lib_plot_objects/49)
delete_when_broken (series bool)
broken_args (BoxArgs type from robbatt/lib_plot_objects/49)
broken_txt (series string)
broken_txt_args (BoxTextArgs type from robbatt/lib_plot_objects/49)
broken_profile_args (ProfileArgs type from robbatt/lib_profile/32)
use_profile (series bool)
profile_args (ProfileArgs type from robbatt/lib_profile/32)
Potential Upcoming Trend ToolThis Script has the specific use of identifying when and how a new trend may start to take form, rather than focusing on how a trend has already formed on a longer term basis.
This Script is useful on it's own and not in conjunction with another. It works by taking on the most recent price data rather than a long term historical string.
It differs from standard trend following indicators because it's use is far less historical, and more present. It requires less pivot points than normal to be validated as a strong trend.
It works by taking local pivot points and fractals to form its parallel basis. The Trend lines will continually move as more recent price action data appears and the the channel will get thinner, until it is clear a trend has arrived and consolidated.
The idea really is to see a constantly evolving picture of a sudden change in movement, allowing you to have an earlier eye on what is potentially to come.
The faint mid-point line gives a reasonable reading of where you would find yourself halfway within a new trend and will also move inline with the shown trendlines.
This allows you to easily track when sentiment and therefore trends are about to change. It's much more useful on lower timeframes because they will often give the first indication something is changing.
Colours are fully customisable.
Enigma UnlockedENIGMA Indicator: A Comprehensive Market Bias & Success Tracker
The ENIGMA Indicator is a powerful tool designed for traders who aim to identify market bias, track price movements, and evaluate trade performance using multiple timeframes. It combines multiple indicators and advanced logic to provide real-time insights into market trends, helping traders make more informed decisions.
Key Features
1. Multi-Timeframe Bias Calculation:
The ENIGMA Indicator tracks the market bias across multiple timeframes—Daily (D), 4-Hour (H4), 1-Hour (H1), 30-Minute (30M), 15-Minute (15M), 5-Minute (5M), and 1-Minute (1M).
How the Bias is Created:
The Bias is a key feature of the ENIGMA Indicator and is determined by comparing the current price with previous price levels for each timeframe.
- Bullish Bias (1): The market is considered **bullish** if the **current closing price** is higher than the **previous timeframe’s high**. This suggests that the market is trending upwards, and buyers are in control.
- Bearish Bias (-1): The market is considered **bearish** if the **current closing price** is lower than the **previous timeframe’s low**. This suggests that the market is trending downwards, and sellers are in control.
- Neutral Bias (0): The market is considered **neutral** if the price is between the **previous high** and **previous low**, indicating indecision or a range-bound market.
This bias calculation is performed independently for each timeframe. The **Bias** for each timeframe is then displayed in the **Bias Table** on your chart, providing a clear view of market direction across multiple timeframes.
2. **Customizable Table Display:**
- The indicator provides a table that displays the bias for each selected timeframe, clearly marking whether the market is **Bullish**, **Bearish**, or **Neutral**.
- Users can choose where to place the table on the chart: top-left, top-right, bottom-left, bottom-right, or center positions, allowing for easy and personalized chart management.
3. **Win/Loss Tracker:**
- The table also tracks the **success rate** of **buy** and **sell** trades based on price retests of key bias levels.
- For each period (Day, Week, Month), it tracks how often the price has moved in the direction of the initial bias, counting **Buy Wins**, **Sell Wins**, **Buy Losses**, and **Sell Losses**.
- This helps traders assess the effectiveness of the market bias over time and adjust their strategies accordingly.
#### **How the Success Calculation Determines the Success Rate:**
The **Success Calculation** is designed to track how often the price follows the direction of the market bias. It does this by evaluating how the price retests key levels associated with the identified market bias:
1. **Buy Success Calculation**:
- The success of a **Buy Trade** is determined when the price breaks above the **previous high** after a **bullish bias** has been identified.
- If the price continues to move higher (i.e., makes a new high) after breaking the previous high, the **buy trade is considered successful**.
- The indicator tracks how many times this condition is met and counts it as a **Buy Win**.
2. **Sell Success Calculation**:
- The success of a **Sell Trade** is determined when the price breaks below the **previous low** after a **bearish bias** has been identified.
- If the price continues to move lower (i.e., makes a new low) after breaking the previous low, the **sell trade is considered successful**.
- The indicator tracks how many times this condition is met and counts it as a **Sell Win**.
3. **Failure Calculations**:
- If the price does not move as expected (i.e., it does not continue in the direction of the identified bias), the trade is considered a **loss** and is tracked as **Buy Loss** or **Sell Loss**, depending on whether it was a bullish or bearish trade.
The ENIGMA Indicator keeps a running tally of **Buy Wins**, **Sell Wins**, **Buy Losses**, and **Sell Losses** over a set period (which can be customized to Days, Weeks, or Months). These statistics are updated dynamically in the **Bias Table**, allowing you to track your success rate in real-time and gain insights into the effectiveness of the market bias.
#### **Customizable Period Tracking:**
- The ENIGMA Indicator allows you to set custom tracking periods (e.g., 30 days, 2 weeks, etc.). The performance metrics reset after each tracking period, helping you monitor your success in different market conditions.
5. **Interactive Settings:**
- **Lookback Period**: Define how many bars the indicator should consider for bias calculations.
- **Success Tracking**: Set the number of candles to track for calculating the win/loss performance.
- **Time Threshold**: Set a time threshold to help define the period during which price retests are considered valid.
- **Info Tooltip**: You can enable the information tool in the settings to view detailed explanations of how wins and losses are calculated, ensuring you understand how the indicator works and how the results are derived.
#### **How to Use the ENIGMA Indicator:**
1. **Install the Indicator**:
- Add the ENIGMA Indicator to your chart. It will automatically calculate and display the bias for multiple timeframes.
2. **Interpret the Bias Table**:
- The bias table will show whether the market is **Bullish**, **Bearish**, or **Neutral** across different timeframes.
- Look for alignment between the timeframes—when multiple timeframes show the same bias, it may indicate a stronger trend.
3. **Use the Win/Loss Tracker**:
- Track how well your trades align with the bias using the **Win/Loss Tracker**. This helps you refine your strategy by understanding which timeframes and biases lead to higher success rates.
- For example, if you see a high number of **Buy Wins** and a low number of **Sell Wins**, you may decide to focus more on buying during bullish trends and avoid selling during bearish retracements.
4. **Track Your Period Performance**:
- The indicator will automatically track your performance over the set period (Days, Weeks, Months). Use this data to adjust your approach and evaluate the effectiveness of your trading strategy.
5. **Position the Table**:
- Customize the placement of the table on your chart based on your preferences. You can choose from options like **Top Left**, **Top Right**, **Bottom Left**, **Bottom Right**, or **Center** to keep the chart uncluttered.
6. **Adjust Settings**:
- Modify the indicator settings according to your trading style. You can adjust the **Lookback Period**, **Number of Candles to Track**, and **Time Threshold** to match the pace of your trading.
7. **Use the Info Tooltip**:
- Enable the **Info Tool** in the settings to understand how the Buy/Sell Wins and Losses are calculated. The tooltip provides a breakdown of how the indicator tracks price movements and calculates the success rate.
**Conclusion:**
The **ENIGMA Indicator** is designed to help traders make informed decisions by providing a clear view of the market bias and performance data. With the ability to track bias across multiple timeframes and evaluate your trading success, it can be a powerful tool for refining your trading strategies.
Whether you're looking to focus on a single timeframe or analyze multiple timeframes for a stronger bias, the ENIGMA Indicator adapts to your needs, providing both real-time market insights and performance feedback.
Candlestick Pattern ScannerCandlestick Pattern Scanner
This indicator identifies popular candlestick patterns on the chart and provides visual and alert-based support for traders. Based on technical analysis, it provides insights into potential trend reversals or continuation signals in price action. The following patterns are detected and marked:
1. Bullish Engulfing
Definition: Considered a strong bullish signal. A small red candle is followed by a large green candle that completely engulfs the previous one.
Chart Display: Marked with a green arrow below the price bar.
Alert Message: "Bullish Engulfing Pattern Detected!"
2. Bearish Engulfing
Definition: Considered a strong bearish signal. A small green candle is followed by a large red candle that completely engulfs the previous one.
Chart Display: Marked with a red arrow above the price bar.
Alert Message: "Bearish Engulfing Pattern Detected!"
3. Doji
Definition: Indicates indecision in the market. The candlestick has an opening and closing price that are almost the same, forming a very small body.
Chart Display: Marked with a blue triangle below the price bar.
Alert Message: "Doji Pattern Detected!"
4. Hammer
Definition: Can signal a strong bullish reversal. It has a long lower shadow and a small body, often appearing at the end of a downtrend.
Chart Display: Marked with an orange triangle below the price bar.
Alert Message: "Hammer Pattern Detected!"
5. Shooting Star
Definition: Can signal a strong bearish reversal. It has a long upper shadow and a small body, often appearing at the end of an uptrend.
Chart Display: Marked with a purple triangle above the price bar.
Alert Message: "Shooting Star Pattern Detected!"
Features:
Visual Support: Patterns are clearly marked on the chart using distinct shapes (arrows and triangles).
Alerts: Receive real-time notifications through TradingView’s alert system when a pattern is detected.
Versatility: Useful for identifying both trend reversals and continuation signals.
User-Friendly: Patterns are easily distinguishable with unique color coding.
Purpose:
This indicator helps traders identify potential reversal points or strong trend beginnings in price action. It can be used as a supportive tool in scalping, swing trading, or long-term investment strategies.
Conditional Value at Risk (CVaR)This Pine Script implements the Conditional Value at Risk (CVaR), a risk metric that evaluates the potential losses in a financial portfolio beyond a certain confidence level, incorporating both the Value at Risk (VaR) and the expected loss given that the VaR threshold has been breached.
Key Features:
Input Parameters:
length: Defines the observation period in days (default is 252, typically used to represent the number of trading days in a year).
confidence: Specifies the confidence interval for calculating VaR and CVaR, with values between 0.5 and 0.99 (default is 0.95, indicating a 95% confidence level).
Logarithmic Returns Calculation: The script computes the logarithmic returns based on the daily closing prices, a common method to measure financial asset returns, given by:
Log Return=ln(PtPt−1)
Log Return=ln(Pt−1Pt)
where PtPt is the price at time tt, and Pt−1Pt−1 is the price at the previous time point.
VaR Calculation: Value at Risk (VaR) is estimated as the percentile of the returns array corresponding to the given confidence interval. This represents the maximum loss expected over a given time horizon under normal market conditions at the specified confidence level.
CVaR Calculation: The Conditional VaR (CVaR) is calculated as the average of the returns that fall below the VaR threshold. This represents the expected loss given that the loss has exceeded the VaR threshold.
Visualization: The script plots two key risk measures:
VaR: The maximum potential loss at the specified confidence level.
CVaR: The average of the losses beyond the VaR threshold.
The script also includes a neutral line at zero to help visualize the losses and their magnitude.
Source and Scientific Background:
The concept of Value at Risk (VaR) was popularized by J.P. Morgan in the 1990s, and it has since become a widely-used tool for risk management (Jorion, 2007). Conditional Value at Risk (CVaR), also known as Expected Shortfall, addresses the limitation of VaR by considering the severity of losses beyond the VaR threshold (Rockafellar & Uryasev, 2002). CVaR provides a more comprehensive risk measure, especially in extreme tail risk scenarios.
References:
Jorion, P. (2007). Value at Risk: The New Benchmark for Managing Financial Risk. McGraw-Hill Education.
Rockafellar, R.T., & Uryasev, S. (2002). Conditional Value-at-Risk for General Loss Distributions. Journal of Banking & Finance, 26(7), 1443–1471.
Systematic Investment Tracker by Ceyhun Gonul### English Description
**Systematic Investment Tracker with Enhanced Features**
This script, titled **Systematic Investment Tracker with Enhanced Features**, is a TradingView tool designed to support systematic investments across different market conditions. It provides traders with two customizable investment strategies — **Continuous Buying** and **Declining Buying** — and includes advanced dynamic investment adjustment features for each.
#### Detailed Explanation of Script Features and Originality
1. **Two Investment Strategies**:
- **Continuous Buying**: This strategy performs purchases consistently at each interval, as set by the user, regardless of market price changes. It follows the principle of dollar-cost averaging, allowing users to build an investment position over time.
- **Declining Buying**: Unlike Continuous Buying, this strategy triggers purchases only when the asset's price has declined from the previous interval's closing price. This approach helps users capitalize on lower price points, potentially improving average costs during downward trends.
2. **Dynamic Investment Adjustment**:
- For both strategies, the script includes a **Dynamic Investment Adjustment** feature. If enabled, this feature increases the purchasing amount by 50% if the current price has fallen by a specific user-defined percentage relative to the previous price. This allows users to accumulate a larger position when the asset is declining, which may benefit long-term cost-averaging strategies.
3. **Customizable Time Frames**:
- Users can specify a **start and end date** for investment, allowing them to restrict or backtest strategies within a specific timeframe. This feature is valuable for evaluating strategy performance over specific market cycles or historical periods.
4. **Graphical Indicators and Labels**:
- The script provides graphical labels on the chart that display purchase points. These indicators help users visualize their investment entries based on the strategy selected.
- A summary **performance label** is also displayed, providing real-time updates on the total amount spent, accumulated quantity, average cost, portfolio value, and profit percentage for each strategy.
5. **Language Support**:
- The script includes English and Turkish language options. Users can toggle between these languages, allowing the summary label text and descriptions to be displayed in their preferred language.
6. **Performance Comparison Table**:
- An optional **Performance Comparison Table** is available, offering a side-by-side analysis of net profit, total investment, and profit percentage for both strategies. This comparison table helps users assess which strategy has yielded better returns, providing clarity on each approach's effectiveness under the chosen parameters.
#### How the Script Works and Its Uniqueness
This closed-source script brings together two established investment strategies in a single, dynamic tool. By integrating continuous and declining purchase strategies with advanced settings for dynamic investment adjustment, the script offers a powerful, flexible tool for both passive and active investors. The design of this script provides unique benefits:
- Enables automated, systematic investment tracking, allowing users to build positions gradually.
- Empowers users to leverage declines through dynamic adjustments to optimize average cost over time.
- Presents an easy-to-read performance label and table, enabling an efficient and transparent performance comparison for informed decision-making.
---
### Türkçe Açıklama
**Gelişmiş Özellikli Sistematik Yatırım Takipçisi**
**Gelişmiş Özellikli Sistematik Yatırım Takipçisi** adlı bu TradingView scripti, çeşitli piyasa koşullarında sistematik yatırım stratejilerini desteklemek üzere tasarlanmış bir araçtır. Script, kullanıcıya iki özelleştirilebilir yatırım stratejisi — **Sürekli Alım** ve **Düşen Alım** — ve her strateji için gelişmiş dinamik yatırım ayarlama seçenekleri sunar.
#### Script Özelliklerinin Detaylı Açıklaması ve Özgünlük
1. **İki Yatırım Stratejisi**:
- **Sürekli Alım**: Bu strateji, fiyat değişimlerine bakılmaksızın kullanıcının belirlediği her aralıkta sabit bir miktar yatırım yapar. Bu yaklaşım, uzun vadede pozisyonu kademeli olarak oluşturmak isteyenler için idealdir.
- **Düşen Alım**: Sürekli Alım’ın aksine, bu strateji yalnızca fiyat bir önceki aralığın kapanış fiyatına göre düştüğünde alım yapar. Bu yöntem, yatırımcıların daha düşük fiyatlardan alım yaparak ortalama maliyeti potansiyel olarak iyileştirmelerine yardımcı olur.
2. **Dinamik Yatırım Ayarlaması**:
- Her iki strateji için de **Dinamik Yatırım Ayarlaması** özelliği bulunmaktadır. Bu özellik aktif edildiğinde, mevcut fiyatın bir önceki fiyata göre kullanıcı tarafından belirlenen bir yüzde oranında düşmesi durumunda alım miktarını %50 artırır. Bu durum, uzun vadede maliyet ortalaması stratejilerine katkıda bulunur.
3. **Özelleştirilebilir Tarih Aralığı**:
- Kullanıcılar, yatırımı belirli bir tarih aralığında sınırlandırmak veya test etmek için bir **başlangıç ve bitiş tarihi** belirleyebilir. Bu özellik, strateji performansını geçmiş piyasa döngüleri veya belirli dönemlerde değerlendirmek için kullanışlıdır.
4. **Grafiksel İşaretleyiciler ve Etiketler**:
- Script, grafik üzerinde alım noktalarını gösteren işaretleyiciler sağlar. Bu görsel göstergeler, kullanıcıların seçilen stratejiye göre yatırım girişlerini görselleştirmesine yardımcı olur.
- Ayrıca, her strateji için harcanan toplam tutar, biriken miktar, ortalama maliyet, portföy değeri ve kâr yüzdesi gibi bilgileri gerçek zamanlı olarak gösteren bir **performans etiketi** sunar.
5. **Dil Desteği**:
- Script, İngilizce ve Türkçe dillerini desteklemektedir. Kullanıcılar, performans etiketi metninin ve açıklamalarının tercih ettikleri dilde görüntülenmesi için dil seçimini yapabilir.
6. **Performans Karşılaştırma Tablosu**:
- İsteğe bağlı olarak kullanılabilen bir **Performans Karşılaştırma Tablosu**, her iki strateji için net kâr, toplam yatırım ve kâr yüzdesi gibi bilgileri yan yana analiz eder. Bu tablo, kullanıcıların hangi stratejinin daha yüksek getiri sağladığını değerlendirmesine yardımcı olur.
#### Scriptin Çalışma Prensibi ve Özgünlüğü
Bu script, iki yatırım stratejisini gelişmiş bir araçta birleştirir. Sürekli ve düşen fiyatlara dayalı alım stratejilerini dinamik yatırım ayarlama özelliğiyle entegre ederek yatırımcılar için güçlü ve esnek bir çözüm sunar. Script’in tasarımı aşağıdaki benzersiz faydaları sağlamaktadır:
- Otomatik, sistematik yatırım takibi yaparak kullanıcıların pozisyonlarını kademeli olarak oluşturmalarına olanak tanır.
- Dinamik ayarlama ile düşüşlerden yararlanarak zaman içinde ortalama maliyeti optimize etme olanağı sağlar.
- Her iki stratejinin performansını basit ve anlaşılır bir şekilde karşılaştıran etiket ve tablo ile verimli bir performans değerlendirmesi sunar.
Sharpe Ratio Z-ScoreThis indicator calculates the Sharpe Ratio and its Z-Score , which are used to evaluate the risk-adjusted return of an asset over a given period. The Sharpe Ratio is computed using the average return and the standard deviation of returns, while the Z-Score standardizes this ratio to assess how far the current Sharpe Ratio deviates from its historical average.
The Sharpe Ratio is a measure of how much return an investment has generated relative to the risk it has taken. In the context of this script, the risk-free rate is assumed to be 0, but in real applications, it would typically be the return on a safe investment, like a Treasury bond. A higher Sharpe Ratio indicates that the investment's returns are higher compared to its risk, making it a more favorable investment. Conversely, a lower Sharpe Ratio suggests that the investment may not be worth the risk.
Calculation:
Daily Returns Calculation: The script calculates the daily return of the asset. This measures the percentage change in the asset’s closing price from one period to the next.
Sharpe Ratio Calculation: The Sharpe Ratio is calculated by taking the average daily return and dividing it by the standard deviation of the returns, then multiplying by the square root of the period length.
Usage:
Traders and Investors can use the Sharpe Ratio to evaluate how well the asset is compensating for risk. A high Sharpe Ratio indicates a high return per unit of risk, whereas a low or negative Sharpe Ratio suggests poor risk-adjusted returns. In overbought times, an asset would have high/positive returns per unit of risk. In oversold times, an asset would have low/negative returns per unit of risk.
The Z-Score provides a way to compare the current Sharpe Ratio to its historical distribution, offering a more standardized view of how extreme or typical the current ratio is.
Positive Z-score: Indicates that the asset's return is significantly lower than its risk, suggesting potential oversold conditions.
Negative Z-score: Indicates that the asset's return is significantly higher than its risk, suggesting potential overbought conditions.
Red Zone (-3 to -2): Strong overbought conditions.
Green Zone (2 to 3): Strong oversold conditions.
Sharpe Ratio Limitations:
While the Sharpe Ratio is widely used to evaluate risk-adjusted returns, it has its limitations.
Fat Tails: It assumes that returns are normally distributed and does not account for extreme events or "fat tails" in the return distribution. This can be problematic for assets like cryptocurrencies, which may experience large, sudden price swings that skew the return distribution.
Single Risk Factor: The Sharpe Ratio only considers standard deviation (total volatility) as a measure of risk, ignoring other types of risks like skewness or kurtosis, which may also impact an asset’s performance.
Time Frame Sensitivity: The accuracy of the Sharpe Ratio and its Z-Score is heavily influenced by the time frame chosen for the calculation. A longer period may smooth out short-term fluctuations, while a shorter period might be more sensitive to recent volatility.
Overbought and Oversold Zones: The script marks overbought and oversold conditions based on the Z-Score, but this is not a guarantee of market reversal. It’s important to combine this tool with other technical indicators and fundamental analysis for a more comprehensive market evaluation.
Volatility: The Sharpe Ratio and Z-Score depend on the volatility (standard deviation) of the asset’s returns. For highly volatile assets, such as cryptocurrencies, the Sharpe Ratio may not fully capture the true risk or may be misleading if the volatility is transient.
Doesn't Account for Downside Risk: The Sharpe Ratio treats upside and downside volatility equally, which may not reflect how investors perceive risk. Some investors may be more concerned with downside risk, which the Sharpe Ratio does not distinguish from upside fluctuations.
Important Considerations:
The Sharpe Ratio should not be used in isolation. While it provides valuable insights into risk-adjusted returns, it is important to combine it with other performance and risk indicators to form a more comprehensive market evaluation. Relying solely on the Sharpe Ratio may lead to misleading conclusions, particularly in volatile or non-normally distributed markets.
When integrated into a broader investment strategy, the Sharpe Ratio can help traders and investors better assess the risk-return profile of an asset, identifying periods of potential overperformance or underperformance. However, it should be used alongside other tools to ensure more informed decision-making, especially in highly fluctuating markets.
Enhanced Buy/Sell Pressure, Volume, and Trend Bar analysisEnhanced Buy/Sell Pressure, Volume, and Trend Bar Analysis Indicator
Overview
This indicator is designed to help traders identify buy and sell pressure, volume changes, and overall trend direction in the market. It combines multiple concepts like price action, volume, and trend analysis, candlestick anaysis to provide a comprehensive view of market dynamics. The visual elements are intuitive, making it suitable for traders at different levels. This indicator works together with Enhanced Pressure MTF Screener which is a screener based of this indicator to make it easier to see Bullish/Bearish pressures and trend across multiple timeframes.
Image below: is the Enhanced Buy/Sell Pressure, Volume, and Trend Bar Analysis with the Enhanced Pressure MTF Screener indicator both active together.
Key Features
1.Buy/Sell Pressure Identification
Buy Pressure: Calculated based on price movement where the close price is higher than the opening price.
Sell Pressure: Calculated when the closing price is equal to or lower than the opening price.These pressures help you understand whether buyers or sellers are more dominant for each bar.
2.Volume Analysis
Normalized Volume: Volume data is normalized, making it easier to compare volume levels over different periods.
Volume Histogram: The volume is also presented as a histogram for easy visualization, showing whether the current volume is higher or lower compared to the average.
3.Simplified Coloring Option
You can choose to simplify the coloring of bars to reflect the dominant pressure: green for bullish pressure and red for bearish pressure. This makes it visually easier to identify who is in control. When simplified coloring is disabled, the bars' colors will represent the combined effect of buy and sell pressure.
4.Heikin-Ashi Candles for Pressure Calculation
The indicator includes an option to use Heikin-Ashi candles instead of traditional candles to calculate buy and sell pressure. Heikin-Ashi candles are known for smoothing out price action and providing a clearer trend representation.
5.Trend Background Coloring
This feature uses exponential moving averages (EMAs) to determine the trend:
Short-Term EMA vs. Long-Term EMA: When the short-term EMA is above the long-term EMA, the trend is considered bullish, and vice versa.
The background color changes based on the identified trend: green for an uptrend and red for a downtrend. This feature helps visualize the overall market direction at a glance.
6.Signals for Key Price Actions
The indicator plots various symbols to signal important price movements:
Bullish Close (▲): Indicates a strong upward movement where the close price crosses above the open.
Bearish Close (▼): Indicates a downward movement where the close price falls below the open.
Higher High (•): Highlights new highs compared to previous bars, useful for confirming an uptrend.
Lower Low (•): Highlights lower lows compared to previous bars, which can indicate a downtrend or bearish pressure.
Calculations Explained
1.Buy and Sell Pressure Calculation
The buy pressure is determined by the price range (high - low) if the closing price is above the opening price, indicating an increase in value.
The sell pressure is similarly calculated when the closing price is equal to or below the opening price.
The indicator uses the Average True Range (ATR) for normalization. Normalizing helps you compare pressure across different periods, regardless of market volatility.
2.Volume Normalization
Volume Normalization: To make volume comparable across different periods, the indicator normalizes it using the Simple Moving Average (SMA) of volume over a user-defined length.
Volume Histogram: The histogram provides a clear representation of volume changes compared to the average, making it easier to spot unusual activity that may indicate market shifts.
3.Combined Pressure Calculation
The indicator calculates a combined pressure value by subtracting sell pressure from buy pressure.
When combined pressure is positive, buying is dominant, and when negative, selling is dominant. This helps in visually understanding the ongoing momentum.
4.Trend Calculation
The indicator uses two EMAs to determine the trend:
Short-Term EMA (default 14-period) to capture recent price movements.
Long-Term EMA (default 50-period) to provide a broader trend perspective.
By comparing these EMAs on a higher timeframe, the indicator can identify whether the trend is up or down, making it easier for traders to align their trades with the larger market movement.
Inputs and Customization
The indicator provides several options for customization, allowing you to adjust it to your preferences:
SMA Length: Determines the lookback period for moving averages and volume normalization. A longer length provides more smoothing, whereas a shorter length makes the indicator more responsive.
Buy/Sell/Volume Colors: Customize the colors used to represent buying, selling, and volume to suit your preferences.
Heikin Ashi Option: Toggle between using Heikin Ashi or traditional OHLC (Open-High-Low-Close) candles for pressure calculations.
Trend Timeframe and EMA Periods: You can choose different timeframes and EMA periods for trend analysis to suit your trading strategy.
How to Use This Indicator
Identifying Market Momentum: Use the buy/sell pressure columns to see which side (buyers or sellers) is in control. Positive pressure combined with green color indicates strong buying, while red indicates selling.
Volume Confirmation: Check the volume area plot and histogram. High volume coupled with strong pressure is a sign of conviction, meaning the current move has backing from market participants.
Trend Identification: The trend background color helps identify the overall trend direction. Trade in the direction of the trend (e.g., take long positions during a green background).
Signal Indicators: The plotted symbols like "Bullish Close" and "Bearish Close" provide visual signals of key price actions, useful for timing entry or exit points.
Practical use Example
Scenario: The market is consolidating, and you see alternating green and red bars.
Action: Wait for a consistent sequence of green bars (buy pressure) along with a green background (uptrend) to consider going long, although you can go long without having a green background, the background adds confirmation layer.
Scenario: The market has several bearish closes (red ▼ symbols) accompanied by increasing volume.
Action: This could indicate strong selling pressure. If the background also turns red, it might be a good time to exit long positions or consider shorting.
Higher timeframe pressure and volume: Another way to use the indicator is to check buy/sell volume and pressure of the higher timeframe say weekly or daily or any timeframe you consider higher, once you’ve identified or feel confident in which direction the bar is going along with the full picture of trend, you can go to the lower timeframe and wait for it to sync with the higher timeframe to consider a long or a short. It is also easier to see when markets sync up by also applying the Enhanced Pressure MTF Screener which works in companion to this indicator.
Visual Cues and Interpretation
Combined Pressure Plot: The green and red column plot at the bottom of the chart represents the dominance between buying and selling. Tall green bars signify strong buying, while tall red bars indicate selling dominance.
Trend Background: Helps visualize the overall direction without manually drawing trend lines. When the background turns green, it generally indicates that the shorter-term moving average has crossed above the longer-term average—a sign of a bullish trend.
To Summarize shortly
The Enhanced Buy/Sell Pressure, Volume, and Trend Bar Analysis Indicator is an advanced but simple tool designed to help traders visually understand market dynamics. It combines different aspects of market analysis of candle pressure from buyers and sellers, volume confirmation, and trend identification into a single view, which can assist both new and experienced traders in making informed trading decisions.
This indicator:
Saves time by simplifying market analysis.
Provides clear visual cues for buy/sell pressure, volume, and trend.
Offers customizable settings to suit individual trading styles.
Always, I am happy to share my creations with you all for free. If you guys have cool ideas you would like to share, or suggestions for improvements the comment is below and I hope this overview gave an idea of how to use the indicator :D
Target Trend [BigBeluga]The Target Trend indicator is a trend-following tool designed to assist traders in capturing directional moves while managing entry, stop loss, and profit targets visually on the chart. Using adaptive SMA bands as the core trend detection method, this indicator dynamically identifies shifts in trend direction and provides structured exit points through customizable target levels.
SP500:
🔵 IDEA
The Target Trend indicator’s concept is to simplify trade management by providing automated visual cues for entries, stops, and targets directly on the chart. When a trend change is detected, the indicator prints an up or down triangle to signal entry direction, plots three customizable target levels for potential exits, and calculates a stop-loss level below or above the entry point. The indicator continuously adapts as price moves, making it easier for traders to follow and manage trades in real time.
When price crosses a target level, the label changes to a check mark, confirming that the target has been achieved. Similarly, if the stop-loss level is hit, the label changes to an "X," and the line becomes dashed, indicating that the stop loss has been activated. This feature provides traders with a clear visual trail of whether their targets or stop loss have been hit, allowing for easier trade tracking and exit strategy management.
🔵 KEY FEATURES & USAGE
SMA Bands for Trend Detection: The indicator uses adaptive SMA bands to identify the trend direction. When price crosses above or below these bands, a new trend is detected, triggering entry signals. The entry point is marked on the chart with a triangle symbol, which updates with each new trend change.
Automated Targets and Stop Loss Management: Upon a new trend signal, the indicator automatically plots three price targets and a stop loss level. These levels provide traders with structured exit points for potential gains and a clear risk limit. The stop loss is placed below or above the entry point, depending on the trend direction, to manage downside risk effectively.
Visual Target and Stop Loss Validation: As price hits each target, the label beside the level updates to a check mark, indicating that the target has been reached. Similarly, if the stop loss is activated, the stop loss label changes to an "X," and the line becomes dashed. This feature visually confirms whether targets or stop losses are hit, simplifying trade management.
The indicator also marks the entry price at each trend change with a label on the chart, allowing traders to quickly see their initial entry point relative to current price and target levels.
🔵 CUSTOMIZATION
Trend Length: Set the lookback period for the trend-detection SMA bands to adjust the sensitivity to trend changes.
Targets Setting: Customize the number and spacing of the targets to fit your trading style and market conditions.
Visual Styles: Adjust the appearance of labels, lines, and symbols on the chart for a clearer view and personalized layout.
🔵 CONCLUSION
The Target Trend indicator offers a streamlined approach to trend trading by integrating entry, target, and stop loss management into a single visual tool. With automatic tracking of target levels and stop loss hits, it helps traders stay focused on the current trend while keeping track of risk and reward with minimal effort.
Price Action StrategyThe **Price Action Strategy** is a tool designed to capture potential market reversals by utilizing classic reversal candlestick patterns such as Hammer, Shooting Star, Doji, and Pin Bar near dinamic support and resistance levels.
***Note to moderators
- The moving average was removed from the strategy because it was not suitable for the strategy and not participating in the entry or exit criteria.
- The moving average length has been replaced/renamed by the support/resistance lenght.
- The bullish engulfing and bearish engulfing patterns were also removed because in practice they were not working as entry criteria, since the candle price invariably closes far from the support/resistance level even considering the sensitivity range. There was no change in the backtest results after removing these patterns.
### Key Elements of the Strategy
1. Support and Resistance Levels
- Support and resistance are pivotal price levels where the asset has previously struggled to move lower (support) or higher (resistance). These levels act as psychological barriers where buying interest (at support) or selling interest (at resistance) often increases, potentially causing price reversals.
- In this strategy, support is calculated as the lowest low and resistance as the highest high over a 16-period length. When the price nears these levels, it indicates possible zones for a reversal, and the strategy looks for specific candlestick patterns to confirm an entry.
2. Candlestick Patterns
- This strategy uses classic reversal patterns, including:
- **Hammer**: Indicates a buy signal, suggesting rejection of lower prices.
- **Shooting Star**: Suggests a sell signal, showing rejection of higher prices.
- **Doji**: Reflects indecision and potential reversal.
- **Pin Bar**: Represents price rejection with a long shadow, often signaling a reversal.
By combining these reversal patterns with the proximity to dinamic support or resistance levels, the strategy aims to capture potential reversal movements.
3. Sensitivity Level
- The sensitivity parameter adjusts the acceptable range (Default 0.018 = 1.8%) around support and resistance levels within which reversal patterns can trigger trades (i.e. the closing price of the candle must occur within the specified range defined by the sensitivity parameter). A higher sensitivity value expands this range, potentially leading to less accurate signals, as it may allow for more false positives.
4. Entry Criteria
- **Buy (Long)**: A Hammer, Doji, or Pin Bar pattern near support.
- **Sell (Short)**: A Shooting Star, Doji, or Pin Bar near resistance.
5. Exit criteria
- Take profit = 9.5%
- Stop loss = 16%
6. No Repainting
- The Price Action Strategy is not subject to repainting.
7. Position Sizing by Equity and risk management
- This strategy has a default configuration to operate with 35% of the equity. The stop loss is set to 16% from the entry price. This way, the strategy is putting at risk about 16% of 35% of equity, that is, around 5.6% of equity for each trade. The percentage of equity and stop loss can be adjusted by the user according to their risk management.
8. Backtest results
- This strategy was subjected to deep backtest and operations in replay mode on **1000000MOGUSDT.P**, with the inclusion of transaction fees at 0.12% and slipagge of 5 ticks, and the past results have shown consistent profitability. Past results are no guarantee of future results. The strategy's backtest results may even be due to overfitting with past data.
9. Chart Visualization
- Support and resistance levels are displayed as green (support) and red (resistance) lines.
- Only the candlestick pattern that generated the entry signal to triger the trade is identified and labeled on the chart. During the operation, the occurrence of new Doji, Pin Bar, Hammer and Shooting Star patterns will not be demonstrated on the chart, since the exit criteria are based on percentage take profit and stop loss.
Doji:
Pin Bar and Doji
Shooting Star and Doji
Hammer
10. Default settings
Chart timeframe: 20 min
Moving average lenght: 16
Sensitivity: 0.018
Stop loss (%): 16
Take Profit (%): 9.5
BYBIT:1000000MOGUSDT.P
ICT Panther (By Obicrypto) V1 ICT Panther Indicator: Full and Detailed Description
The ICT Panther Indicator, created by Obicrypto, is an advanced technical analysis tool designed specifically for traders looking to identify key price action events based on institutional trading techniques, particularly in the context of the Inner Circle Trader (ICT) methodology. This indicator helps traders spot market structure breaks, order blocks, and potential trade opportunities driven by institutional behaviors in the market. Here's a detailed breakdown of its features and how it works:
What Does the ICT Panther Indicator Do?
1. Market Structure Breaks (MSB) Identification:
The ICT Panther identifies critical points where the market changes direction, commonly referred to as a break of structure (BoS). When the price breaks above or below certain key levels (based on highs and lows or opens and closes), it signals a potential shift in market sentiment. These break-of-structure points are essential for traders to determine whether the market is likely to continue its trend or reverse.
2. Order Blocks Visualization:
The indicator plots demand (bullish) and supply (bearish) boxes, which represent areas where institutional traders might place significant buy or sell orders. These zones, known as order blocks, are areas where the price tends to pause or reverse, giving traders key insights into potential entry and exit points. The indicator shows these areas graphically as colored boxes on the chart, which can be used to plan trades based on market structure and price action.
3. Pivot Point Detection:
The ICT Panther identifies important pivot points by tracking higher highs and lower lows. These pivot points are critical in determining the strength of a trend and can help traders confirm the direction of the market. The indicator uses a unique algorithm to detect two levels of pivot points:
- First-Order Pivots: Major pivot points where the price makes notable highs and lows.
- Second-Order Pivots: Smaller pivot points, useful for detecting microtrends within the larger market structure.
4. Bullish and Bearish Break of Structure Lines:
When a significant market structure break (BoS) occurs, the indicator will automatically draw red lines (for bearish break of structure) and green lines (for bullish break of structure) at key price levels. These lines help traders quickly see where institutional moves have occurred in the past and where potential future price moves could originate from.
5. Tested and Filled Boxes:
The ICT Panther also has a built-in mechanism to dim previously tested order blocks. When the price tests an order block (returns to a previous demand or supply zone), the box's color dims to indicate that the area has already been tested, reducing its significance. If the price fully fills an order block, the box stops plotting, providing a clear and clutter-free chart.
Key Features
1. Market Structure Break (MSB) Trigger:
- The indicator allows users to select between highs/lows or opens/closes as the trigger for market structure breaks. This flexibility lets traders adjust the indicator to suit their personal trading style or the behavior of specific assets.
2. Order Block Detection and Visualization:
- The tool automatically plots bullish and bearish demand and supply boxes, representing institutional order blocks on the chart. These boxes provide visual cues for areas of potential price action, where institutional traders might be active.
3. Second-Order Pivot Highlighting:
- The ICT Panther offers an option to plot second-order pivots, highlighting smaller pivot points within the larger market structure. These pivots can be helpful for short-term traders who need to react to smaller price movements while still keeping the larger trend in mind.
4. Box Test and Fill Delays:
- Users can configure delays for box tests and box fills, meaning the indicator will only mark a box as tested or filled after a certain number of bars. This prevents false signals and helps confirm that a zone is truly significant in the market.
5. Customization and Visual Clarity:
- The indicator is highly customizable, allowing users to turn on or off various features like:
- Displaying second-order pivots.
- Highlighting candles that broke structure.
- Plotting market structure broke lines.
- Showing or hiding tested and filled demand boxes.
- Setting custom delays for box testing and filling to suit different market conditions.
6. Tested and Filled Order Block Visualization:
- The indicator visually adjusts the tested and filled order blocks, dimming tested zones and removing filled zones to avoid clutter on the chart. This ensures that traders can focus on active trading opportunities without distractions from historical data.
How Does It Work?
1. Detecting Market Structure Breaks (BoS):
- The indicator continuously tracks the market for key price action signals. When the price breaks through previous highs or lows (or opens and closes, depending on your selection), the indicator marks this as a break of structure. This is a critical signal used by institutional traders and retail traders alike to determine potential future price movements.
2. Order Block Identification:
- Whenever a bullish break of structure occurs, the indicator plots a green demand box to show the area where institutional buyers might have placed significant orders. Similarly, for a bearish break of structure, it plots a red supply box representing areas where institutional sellers are active.
3. Pivot Analysis and Tracking:
- As the market moves, the indicator continuously updates first-order and second-order pivot points based on highs and lows. These points help traders identify whether the market is trending or consolidating. Traders can use these pivot points in combination with the order blocks to make informed trading decisions.
4. Box Testing and Filling:
- When the price retests an existing order block, the box dims to show it has been tested. If the price fully fills the box, it is no longer shown, which helps traders focus on the most relevant, untested order blocks.
Benefits for Traders
- Improved Decision-Making: With clear visuals and advanced logic based on institutional trading strategies, this indicator provides a deeper understanding of market structure and price action.
- Reduced Clutter: The indicator intelligently manages the display of order blocks and pivot points, ensuring that traders focus only on the most relevant information.
- Adaptability: Whether you are a swing trader or a day trader, the ICT Panther can be adjusted to fit your trading style, offering robust and flexible tools for tracking market structure and order blocks.
- Institutional Edge: By identifying institutional-level order blocks and market structure breaks, traders using this indicator can trade in line with the strategies of large market participants.
Who Should Use the ICT Panther Indicator?
This indicator is ideal for:
- Crypto, Forex, and Stock Traders who want to incorporate institutional trading concepts into their strategies.
- Technical Analysts looking for precise tools to measure the market structure and price action.
- ICT Traders who follow the Inner Circle Trader methodology and want an advanced tool to automate and enhance their analysis.
- Price Action Traders seeking a reliable indicator to track pivot points, order blocks, and market structure breaks.
The ICT Panther Indicator is a powerful, versatile tool that brings institutional trading techniques to the fingertips of retail traders. Whether you are looking to identify key market structure breaks, order blocks, or crucial pivot points, this indicator offers detailed visualizations and customizable options to help you make more informed trading decisions. With its ability to track the activities of institutional traders, the ICT Panther Indicator equips traders with the insights needed to stay ahead of the market and trade with confidence.
With the ICT Panther Indicator, traders can follow the movements of institutional money, making it easier to predict market direction and capitalize on high-probability trading opportunities.
Enjoy it and share it with your friends!
SMT Divergences [OutOfOptions]Smart Money Technique (SMT) Divergence is designed to identify discrepancies between correlated assets within the same timeframe. It occurs when two related assets exhibit opposing signals, such as one forming a higher low while the other forms a lower low. This technique is particularly useful for anticipating market shifts or reversals before they become evident through other Premium Discount (PD) Arrays.
This indicator works by identifying the highs and lows that have formed for an asset on the current chart and the correlated symbol defined in the settings. Once a pivot on either asset is formed, it checks if the pivot has taken liquidity as identified by the previous pivot in the same direction (i.e., a new high taking out a previous high). If this is the case and the corresponding asset has not taken a similar pivot, the condition is determined to be a potential valid divergence. The indicator will then filter out SMTs formed by adjacent candles, requiring at least one candle difference between the candles forming the SMT.
If the “Candle Direction Validation” setting is enabled, the indicator will further check both assets to ensure that for bullish SMTs, the last high on both assets was formed by down candle, and for bearish SMTs, the low was formed by an up candle. This check can often eliminate low-probability SMTs that are frequently broken.
The referenced chart shows divergence between Nasdaq (NQ) and S&P 500 (ES) futures, which are normally closely correlated assets that move in the same direction. The lines shown represent bullish and bearish divergences between the two when they are formed. As you can see from the chart, SMT Divergences may not always indicate a reversal, or a reversal might be just a short-term retrace. Therefore, SMT Divergences should not be used independently. However, in conjunction with other PD arrays, they can provide strong confirmation of a change in market direction.
Configurability:
Pivot strength - Indicates how many bars to the left/right of a high for pivot to be considered, recommended to keep at 1 for maximum detection speed
Candle Direction Validation - Additional SMT validation to filter out weak/low-probability SMTs be examining candle direction
Line Styling for Bullish/Bearish SMTs - Ability to customize line style, color & width for bullish/bearish SMTs
Label Control - Whether or not to show SMT label and if shown what font size & color should be used
What makes this indicator different:
Unlike other SMT indicators, this indicators has additional built-in controls to remove low-probability SMTs
Liquidity Pools [LuxAlgo]The Liquidity Pools indicator identifies and displays estimated liquidity pools on the chart by analyzing high and low wicked price areas, along with the amount, and frequency of visits to each zone.
🔶 USAGE
Liquidity Pools are areas where smaller participants are likely to place stop-limit orders to manage risks at reasonable swing points. These zones attract institutional traders who use the pending orders as liquidity to enter larger positions, aiming to influence price movements. By monitoring these zones, traders can anticipate market movements and potentially benefit from these dynamics.
Beyond general liquidity theory, identifying zones consistently visited by price aids in using them as support and resistance zones. By analyzing these areas, we can assess how effectively participants enter or exit these zones, helping to gauge their importance.
In the screenshots below, we will explore both sides of the same chart in more detail to display how each zone could be viewed from a bullish and bearish perspective.
Bullish Zones Example:
Bearish Zones Example:
🔶 DETAILS
The method behind this indicator focuses on identifying a swing point and tracking future interactions with it. It adaptively identifies high and low "potential zones". These zones are monitored over time; if a zone meets the user-defined criteria, the script marks and displays these zones on the chart.
🔹 Identification
The method to identify Liquidity Pools in this indicator revolves around 3 main parameters. By utilizing these settings, the indicator can be tailored to produce zones that fit the specific strategic needs of each trader.
Zone Identification Parameters
Zone Contact Amount: This setting determines the number of times each zone must be in contact with the price (and bought or sold out of) before being identified by the indicator as a Liquidity Pool.
For example: When a zone is first displayed, it is considered as having been reached 1 time. When the zone is re-tested for the first time, this is considered the 2nd contact, since the price has seen the zone a total of 2 times.
Bars Required Between Each Contact: This is used to rule out (or in) consecutive candles reaching each zone from the calculation, adding a separation length between zone contact points to refine the zones produced.
For example: When set to "2", the first contact point (first re-test) will be ignored by the script if it is not at least 2 bars away from the initial zone proposal point.
Confirmation Bars: After a zone has reached the desired Contact Amount, this setting will cause the script to wait a specified number of bars before identifying a zone. While this might initially seem counterintuitive, by waiting, we are able to watch the market's reaction to the proposed zone and respond accordingly. If the price were to continue through the potential liquidity zone Immediately, it would not be logical to consider this area as a valid Liquidity Pool.
Displayed in this screenshot, you will see the specific points we are looking for in order to identify these zones.
🔹 Display
After a Liquidity Pool is identified, its boundary line is extended to the current price to keep it in view for reference. This extension will continue until the zone is mitigated (price has closed above or below the zone), after which it will stop extending.
Candles can optionally be colored when returning to the most recent Liquidity Pool if it is still unmitigated, and will only color after the zone is displayed on the chart. Because of this, if a candle is colored within a zone, then its color comes from being inside a previously unmitigated zone.
🔹 Volume
Each time a candle overlaps an Unmitigated Zone, a percentage of its volume will be accumulated to the total for each specific zone. The volume total is displayed on the right end of the extended boundary lines.
This volume data could help to determine the importance of specific zones based on the amount of volume traded within.
Note: This volume is fractional to the percentage of candles that are contained within the zone. If a candle is 50% within a zone, The zone will receive 50% of the candle's volume added to its current total.
🔶 SETTINGS
See above for a more detailed explanation of the "Zone Identification" parameters.
Zone Contact Amount: The number of times the price must bounce from this zone before considering it as a liquidity pool.
Bars Required Between Each Contact: The number of bars to wait before checking for another zone contact.
Confirmation Bars: The number of bars to wait before identifying a zone to confirm validity.
Display Volume Labels: Toggles the display for the volume readout for each Liquidity Pool.
Fill Candles Inside Zones: Toggles the display of colored candles within Liquidity Pools.
HTF LQ SweepThe following script recognises QL sweeps in the desired time frame with alarm function!
Theory:
There is liquidity above highs and below lows. If this is tapped and the market reacts strongly immediately, the probability of a reversal is greatly increased! In the chart, this is defined in such a way that a candle has its wicks BELOW the old low, but the close is ABOVE the old low. the same applies to the high, of course!
In such a case we have an "LQ Sweep"
How does the script work?
Williams 3 fractals are used as a basis. These are meaningful as lows or highs. Whenever a fractal is created, the price level is saved.
This means that not only the last fractal is relevant, but all historical fractals as long as they have not been reached!
If a candle reaches the level, but shows a rejection and closes within the level again, we have our "LQ Sweep" setup.
In the script you can select the timeframe in which the market has to be analysed. When the QL sweep occurs, an alert is triggered. This saves a lot of time because you can analyse different markets in different timeframes at the same time!
Each QL Sweep is marked in the chart when we are in the selected timeframe. These can also be deactivated so that only the last sweep is displayed.
Benefits for the trader:
An LQ sweep is a nice confirmation for a reversal.
If we have such an LQ sweep, we can wait in the lower timeframe for further confirmation, such as a structural break, to position our entries there.
The alarm function saves us a lot of time and we only go to the chart when a potential setup has been created.
You can set different time frames in the script: The selected time frame is then scanned and sends a signal when the event occurs.
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)))
Multiple ATR Lines with Current Price PercentageThis indicator plots multiple lines based on the Average True Range (ATR) on the chart, helping traders identify potential support and resistance levels. Specifically, it draws three lines above the price and three lines below the price at different multiples of the ATR. Additionally, it plots a dynamic line at the current price level, which shows how much percentage of the ATR the current price has traveled from a specific point.
How it works:
ATR-Based Lines: The indicator calculates three upper and three lower levels based on the ATR of the selected period. These levels represent 1x, 2x, and 3x ATR above and below the current price.
Current Price Line: A dotted line follows the current price, displaying the percentage of the ATR that the price has moved.
Labels: Each line is labeled with its respective ATR multiple (1x ATR, 2x ATR, 3x ATR), and the current price line shows the percentage of the ATR traveled.
Use Cases:
Identifying Market Volatility: Traders can use this indicator to see how far the price has moved relative to its average volatility.
Support and Resistance Levels: The ATR lines can be treated as potential support and resistance zones, providing insight into price targets or stop-loss placement.
Dynamic Tracking: The percentage of ATR traveled helps traders understand the market momentum relative to its historical volatility.
Settings:
ATR Length: The user can adjust the length of the ATR calculation period.
ATR Multiplier: A multiplier to adjust the distance of the lines relative to the ATR.
Advantages:
Clear visualization of market volatility through ATR-based levels.
Real-time tracking of the price’s movement relative to ATR, giving traders a better understanding of price action.
Customizable settings for different trading styles.






















