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.
Recherche dans les scripts pour "ha溢价率"
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.
Autotable█ OVERVIEW
The library allows to automatically draw a table based on a string or float matrix (or both) controlling all of the parameters of the table (including merging cells) with parameter matrices (like, e.g. matrix of cell colors).
All things you would normally do with table.new() and table.cell() are now possible using respective parameters of library's main function, autotable() (as explained further below).
Headers can be supplied as arrays.
Merging of the cells is controlled with a special matrix of "L" and "U" values which instruct a cell to merged with the cell to the left or upwards (please see examples in the script and in this description).
█ USAGE EXAMPLES
The simplest and most straightforward:
mxF = matrix.new(3,3, 3.14)
mxF.autotable(bgcolor = color.rgb(249, 209, 29)) // displays float matrix as a table in the top right corner with defalult settings
mxS = matrix.new(3,3,"PI")
// displays string matrix as a table in the top right corner with defalult settings
mxS.autotable(Ypos = "bottom", Xpos = "right", bgcolor = #b4d400)
// displays matrix displaying a string value over a float value in each cell
mxS.autotable(mxF, Ypos = "middle", Xpos = "center", bgcolor = color.gray, text_color = #86f62a)
Draws this:
Tables with headers:
if barstate.islast
mxF = matrix.new(3,3, 3.14)
mxS = matrix.new(3,3,"PI")
arColHeaders = array.from("Col1", "Col2", "Col3")
arRowHeaders = array.from("Row1", "Row2", "Row3")
// float matrix with col headers
mxF.autotable(
bgcolor = #fdfd6b
, arColHeaders = arColHeaders
)
// string matrix with row headers
mxS.autotable(arRowHeaders = arRowHeaders, Ypos = "bottom", Xpos = "right", bgcolor = #b4d400)
// string/float matrix with both row and column headers
mxS.autotable(mxF
, Ypos = "middle", Xpos = "center"
, arRowHeaders = arRowHeaders
, arColHeaders = arColHeaders
, cornerBgClr = #707070, cornerTitle = "Corner\ncell", cornerTxtClr = #ffdc13
, bgcolor = color.gray, text_color = #86f62a
)
Draws this:
█ FUNCTIONS
One main function is autotable() which has only one required argument mxValS, a string matrix.
Please see below the description of all of the function parameters:
The table:
tbl (table) (Optional) If supplied, this table will be deleted.
The data:
mxValS (matrix ) (Required) Cell text values
mxValF (matrix) (Optional) Numerical part of cell text values. Is concatenated to the mxValS values via `string_float_separator` string (default "\n")
Table properties, have same effect as in table.new() :
defaultBgColor (color) (Optional) bgcolor to be used if mxBgColor is not supplied
Ypos (string) (Optional) "top", "bottom" or "center"
Xpos (string) (Optional) "left", "right", or "center"
frame_color (color) (Optional) frame_color like in table.new()
frame_width (int) (Optional) frame_width like in table.new()
border_color (color) (Optional) border_color like in table.new()
border_width (int) (Optional) border_width like in table.new()
force_overlay (simple bool) (Optional) If true draws table on main pane.
Cell parameters, have same effect as in table.cell() ):
mxBgColor (matrix) (Optional) like bgcolor argument in table.cell()
mxTextColor (matrix) (Optional) like text_color argument in table.cell()
mxTt (matrix) (Optional) like tooltip argument in table.cell()
mxWidth (matrix) (Optional) like width argument in table.cell()
mxHeight (matrix) (Optional) like height argument in table.cell()
mxHalign (matrix) (Optional) like text_halign argument in table.cell()
mxValign (matrix) (Optional) like text_valign argument in table.cell()
mxTextSize (matrix) (Optional) like text_size argument in table.cell()
mxFontFamily (matrix) (Optional) like text_font_family argument in table.cell()
Other table properties:
tableWidth (float) (Optional) Overrides table width if cell widths are non zero. E.g. if there are four columns and cell widths are 20 (either as set via cellW or via mxWidth) then if tableWidth is set to e.g. 50 then cell widths will be 50 * (20 / 80), where 80 is 20*4 = total width of all cells. Works simialar for widths set via mxWidth - determines max sum of widths across all cloumns of mxWidth and adjusts cell widths proportionally to it. If cell widths are 0 (i.e. auto-adjust) tableWidth has no effect.
tableHeight (float) (Optional) Overrides table height if cell heights are non zero. E.g. if there are four rows and cell heights are 20 (either as set via cellH or via mxHeight) then if tableHeigh is set to e.g. 50 then cell heights will be 50 * (20 / 80), where 80 is 20*4 = total height of all cells. Works simialar for heights set via mxHeight - determines max sum of heights across all cloumns of mxHeight and adjusts cell heights proportionally to it. If cell heights are 0 (i.e. auto-adjust) tableHeight has no effect.
defaultTxtColor (color) (Optional) text_color to be used if mxTextColor is not supplied
text_size (string) (Optional) text_size to be used if mxTextSize is not supplied
font_family (string) (Optional) cell text_font_family value to be used if a value in mxFontFamily is no supplied
cellW (float) (Optional) cell width to be used if a value in mxWidth is no supplied
cellH (float) (Optional) cell height to be used if a value in mxHeight is no supplied
halign (string) (Optional) cell text_halign value to be used if a value in mxHalign is no supplied
valign (string) (Optional) cell text_valign value to be used if a value in mxValign is no supplied
Headers parameters:
arColTitles (array) (Optional) Array of column titles. If not na a header row is added.
arRowTitles (array) (Optional) Array of row titles. If not na a header column is added.
cornerTitle (string) (Optional) If both row and column titles are supplied allows to set the value of the corner cell.
colTitlesBgColor (color) (Optional) bgcolor for header row
colTitlesTxtColor (color) (Optional) text_color for header row
rowTitlesBgColor (color) (Optional) bgcolor for header column
rowTitlesTxtColor (color) (Optional) text_color for header column
cornerBgClr (color) (Optional) bgcolor for the corner cell
cornerTxtClr (color) (Optional) text_color for the corner cell
Cell merge parameters:
mxMerge (matrix) (Optional) A matrix determining how cells will be merged. "L" - cell merges to the left, "U" - upwards.
mergeAllColTitles (bool) (Optional) Allows to print a table title instead of column headers, merging all header row cells and leaving just the value of the first cell. For more flexible options use matrix arguments leaving header/row arguments na.
mergeAllRowTitles (bool) (Optional) Allows to print one text value merging all header row cells and leaving just the value of the first cell. For more flexible options use matrix arguments leaving header/row arguments na.
Format:
string_float_separator (string) (Optional) A string used to separate string and float parts of cell values (mxValS and mxValF). Default is "\n"
format (string) (Optional) format string like in str.format() used to format numerical values
nz (string) (Optional) Determines how na numerical values are displayed.
The only other available function is autotable(string,... ) with a string parameter instead of string and float matrices which draws a one cell table.
█ SAMPLE USE
E.g., CSVParser library demo uses Autotable's for generating complex tables with merged cells.
█ CREDITS
The library was inspired by @kaigouthro's matrixautotable . A true master. Many thanks to him for his creative, beautiful and very helpful libraries.
Support and Resistance HeatmapThe "Support and Resistance Heatmap" indicator is designed to identify key support and resistance levels in the price action by using pivots and ATR (Average True Range) to define the sensitivity of zone detection. The zones are plotted as horizontal lines on the chart, representing areas where the price has shown significant interaction. The indicator features a customizable heatmap to visualize the intensity of these zones, making it a powerful tool for technical analysis.
Features:
Dynamic Support and Resistance Zones:
Identifies potential support and resistance areas based on price pivots.
Zones are defined by ATR-based thresholds, making them adaptive to market volatility.
Customization Options:
Heatmap Visualization: Toggle the heatmap on/off to view the strength of each zone.
Sensitivity Control: Modify the zone sensitivity with the ATR Multiplier to increase or decrease zone detection precision.
Confirmations: Set how many touches a level needs before it is confirmed as a zone.
Extended Zone Visualization:
Option to extend the zones for better long-term visibility.
Ability to limit the number of zones displayed to avoid clutter on the chart.
Color-Coded Zones:
Color-coded zones help differentiate between bullish (support) and bearish (resistance) levels, providing visual clarity for traders.
Heatmap Integration:
Gradient-based color changes on levels show the intensity of touches, helping traders understand which zones are more reliable.
Inputs and Settings:
1. Settings Group:
Length:
Determines the number of bars used for the pivot lookback. This directly affects how frequently new zones are formed.
Sensitivity:
Controls the sensitivity of the zone calculation using ATR (Average True Range). A higher value will result in fewer, larger zones, while a lower value increases the number of detected zones.
Confirmations:
Sets the number of price touches needed before a level is confirmed as a support/resistance zone. Lower values will result in more zones.
2. Visual Group:
Extend Zones:
Option to extend the support and resistance lines across the chart for better visibility over time.
Max Zones to Display (maxZonesToShow):
Limits the maximum number of zones shown on the chart to avoid clutter.
3. Heatmap Group:
Show Heatmap:
Toggle the heatmap display on/off. When enabled, the script visualizes the strength of the zones using color intensity.
Core Logic:
Pivot Calculation:
The script identifies support and resistance zones by using the pivotHigh and pivotLow functions. These pivots are calculated using a lookback period, which defines the number of candles to the left and right of the pivot point.
ATR-Based Threshold:
ATR (Average True Range) is used to create dynamic zones based on volatility. The ATR acts as a buffer around the identified pivot points, creating zones that are more flexible and adaptable to market conditions.
Merging Zones:
If two zones are close to each other (within a certain threshold), they are merged into a single zone. This reduces overlapping zones and gives a cleaner visual representation of significant price levels.
Confirmation Mechanism:
Each time the price touches a zone, the confirmation counter for that zone increases. The more confirmations a zone has, the more reliable it is. Zones are only displayed if they meet the required number of confirmations as specified by the user.
Color Gradient:
Zones are color-coded based on the number of confirmations. A gradient is used to visually represent the strength of each zone, with stronger zones being more vividly colored.
Heatmap Visualization:
When the heatmap is enabled, the color intensity of the zones is adjusted based on the proximity of the price to the zone and the number of touches the zone has received. This helps traders quickly identify which zones are more critical.
How to Use:
Identifying Support and Resistance Zones:
After adding the indicator to your chart, you will see horizontal lines representing key support (bullish) and resistance (bearish) levels. These zones are dynamically updated based on price action and pivots.
Adjusting Zone Sensitivity:
Use the "ATR Multiplier" to fine-tune how sensitive the indicator is to price fluctuations. A higher multiplier will reduce the number of zones, focusing on more significant levels.
Using Confirmations:
The more times a price interacts with a zone, the stronger that zone becomes. Use the "Confirmations" input to filter out weaker zones. This ensures that only zones with enough interaction (touches) are plotted.
Activating the Heatmap:
Enabling the heatmap will provide a color-coded visual representation of the strength of the zones. Zones with more price interactions will appear more vividly, helping you focus on the most significant areas.
Best Practices:
Combine with Other Indicators:
This support and resistance indicator works well when combined with other technical analysis tools, such as oscillators (e.g., RSI, MACD) or moving averages, for better trade confirmations.
Adjust Sensitivity Based on Market Conditions:
In volatile markets, you may want to increase the ATR multiplier to focus on more significant support and resistance zones. In calmer markets, decreasing the multiplier can help you spot smaller, but relevant, levels.
Use in Different Time Frames:
This indicator can be used effectively across different time frames, from intraday charts (e.g., 1-minute or 5-minute charts) to longer-term analysis on daily or weekly charts.
Look for Confluences:
Zones that overlap with other indicators, such as Fibonacci retracements or key moving averages, tend to be more reliable. Use the zones in conjunction with other forms of analysis to increase your confidence in trade setups.
Limitations and Considerations:
False Breakouts:
In highly volatile markets, there may be false breakouts where the price briefly moves through a zone without a sustained trend. Consider combining this indicator with momentum-based tools to avoid false signals.
Sensitivity to ATR Settings:
The ATR multiplier is a key component of this indicator. Adjusting it too high or too low may result in too few or too many zones, respectively. It is important to fine-tune this setting based on your specific trading style and market conditions.
RSI 30-50-70 moving averageDescription:
The RSI 30-50-70 Moving Average indicator plots three distinct moving averages based on different RSI ranges (30%, 50%, and 70%). Each moving average corresponds to different market conditions and provides potential entry and exit signals. Here's how it works:
• RSI_30 Range (25%-35%): The moving average of closing prices when the RSI is between 25% and 35%, representing potential oversold conditions.
• RSI_50 Range (45%-55%): The moving average of closing prices when the RSI is between 45% and 55%, providing a balanced perspective for trend-following strategies.
• RSI_70 Range (65%-75%): The moving average of closing prices when the RSI is between 65% and 75%, representing potential overbought conditions.
This indicator offers flexibility, as users can adjust key parameters such as RSI ranges, periods, and time frames to fine-tune the signals for their trading strategies.
How it Works:
Like traditional moving averages, the RSI 30-50-70 Moving Averages can highlight dynamic levels of support and resistance. They offer additional insight by focusing on specific RSI ranges, providing early signals for trend reversals or continuation. The default settings can be used across various assets but should be optimized via backtesting.
Default Settings:
• RSI_30: 25% to 35% (Oversold Zone, yellow line)
• RSI_50: 45% to 55% (Neutral/Trend Zone, green line)
• RSI_70: 65% to 75% (Overbought Zone, red line)
• RSI Period: 14
Buy Conditions:
• Use the 5- or 15-minute time frame.
• Wait for the price to move below the RSI_30 line, indicating potential oversold conditions.
• Enter a buy order when the price closes above the RSI_30 line, signaling a recovery from the oversold zone.
• For a more conservative approach, use the RSI_50 line as the buy signal to confirm a trend reversal.
• Important: Before entering, ensure that the RSI_30 moving average has flattened or started to level off, signaling that the oversold momentum has slowed.
Sell Conditions:
• Use the 5- or 15-minute time frame.
• Wait for the price to close above the RSI_70 line, indicating potential overbought conditions.
• Enter a sell order when the price closes below the RSI_70 line, signaling a decline from the overbought zone.
• Important: Similar to buying, wait for the RSI_70 moving average to flatten or level off before selling, indicating the overbought conditions are stalling.
Key Features:
1. Dynamic Range Customization: The indicator allows users to modify the RSI ranges and periods, tailoring the moving averages to fit different market conditions or asset classes.
2. Trend-Following and Reversal Signals: The RSI 30-50-70 moving averages provide both reversal and trend-following signals, making it a versatile tool for short-term traders.
3. Visual Representation of Market Strength: By plotting moving averages based on RSI levels, traders can visually interpret the market’s strength and potential turning points.
4. Risk Management: The built-in flexibility allows traders to choose lower-risk entries by adjusting which RSI level (e.g., RSI_30 vs. RSI_50) they rely on for signals.
Practical Use:
Different assets respond uniquely to RSI-based moving averages, so it's recommended to backtest and adjust ranges for specific instruments. For example, volatile assets may require wider RSI ranges, while more stable assets could benefit from tighter ranges.
Checking for Buy conditions:
1st: Wait for current price to go below the RSI_30 (yellow line)
2nd: Wait and observe for bullish divergence
3rd: RSI_30 has flattened indicating potential gain of momentum after a bullish divergence.
4th: Enter a buy order when the price closed above the RSI_30, preferably when a green candle appeared.
Bitcoin Cycle Master [InvestorUnknown]The "Bitcoin Cycle Master" indicator is designed for in-depth, long-term analysis of Bitcoin's price cycles, using several key metrics to track market behavior and forecast potential price tops and bottoms. The indicator integrates multiple moving averages and on-chain metrics, offering a comprehensive view of Bitcoin’s historical and projected performance. Each of its components plays a crucial role in identifying critical cycle points:
Top Cap: This is a multiple of the Average Cap, which is calculated as the cumulative sum of Bitcoin’s price (price has a longer history than Market Cap) divided by its age in days. Top Cap serves as an upper boundary for speculative price peaks, multiplied by a factor of 35.
Time_dif() =>
date = ta.valuewhen(bar_index == 0, time, 0)
sec_r = math.floor(date / 1000)
min_r = math.floor(sec_r / 60)
h_r = math.floor(min_r / 60)
d_r = math.floor(h_r / 24)
// Launch of BTC
start = timestamp(2009, 1, 3, 00, 00)
sec_rb = math.floor(start / 1000)
min_rb = math.floor(sec_rb / 60)
h_rb = math.floor(min_rb / 60)
d_rb = math.floor(h_rb / 24)
difference = d_r - d_rb
AverageCap() =>
ta.cum(btc_price) / (Time_dif() + btc_age)
TopCap() =>
// To calculate Top Cap, it is first necessary to calculate Average Cap, which is the cumulative sum of Market Cap divided by the age of the market in days.
// This creates a constant time-based moving average of market cap.
// Once Average cap is calculated, those values are multiplied by 35. The result is Top Cap.
// For AverageCap the BTC price was used instead of the MC because it has more history
// (the result should have minimal if any deviation since MC would have to be divided by Supply)
AverageCap() * 35
Delta Top: Defined as the difference between the Realized Cap and the Average Cap, this metric is further multiplied by a factor of 7. Delta Top provides a historically reliable signal for Bitcoin market cycle tops.
DeltaTop() =>
// Delta Cap = Realized Cap - Average Cap
// Average Cap is explained in the Top Cap section above.
// Once Delta Cap is calculated, its values over time are then multiplied by 7. The result is Delta Top.
(RealizedPrice() - AverageCap()) * 7
Terminal Price: Derived from Coin Days Destroyed, Terminal Price normalizes Bitcoin’s historical price behavior by its finite supply (21 million bitcoins), offering an adjusted price forecast as all bitcoins approach being mined. The original formula for Terminal Price didn’t produce expected results, hence the calculation was adjusted slightly.
CVDD() =>
// CVDD stands for Cumulative Value Coin Days Destroyed.
// Coin Days Destroyed is a term used for bitcoin to identify a value of sorts to UTXO’s (unspent transaction outputs). They can be thought of as coins moving between wallets.
(MCR - TV) / 21000000
TerminalPrice() =>
// Theory:
// Before Terminal price is calculated, it is first necessary to calculate Transferred Price.
// Transferred price takes the sum of > Coin Days Destroyed and divides it by the existing supply of bitcoin and the time it has been in circulation.
// The value of Transferred Price is then multiplied by 21. Remember that there can only ever be 21 million bitcoin mined.
// This creates a 'terminal' value as the supply is all mined, a kind of reverse supply adjustment.
// Instead of heavily weighting later behavior, it normalizes historical behavior to today. By normalizing by 21, a terminal value is created
// Unfortunately the theoretical calculation didn't produce results it should, in pinescript.
// Therefore the calculation was slightly adjusted/improvised
TransferredPrice = CVDD() / (Supply * math.log(btc_age))
tp = TransferredPrice * 210000000 * 3
Realized Price: Calculated as the Market Cap Realized divided by the current supply of Bitcoin, this metric shows the average value of Bitcoin based on the price at which coins last moved, giving a market consensus price for long-term holders.
CVDD (Cumulative Value Coin Days Destroyed): This on-chain metric analyzes Bitcoin’s UTXOs (unspent transaction outputs) and the velocity of coins moving between wallets. It highlights key market dynamics during prolonged accumulation or distribution phases.
Balanced Price: The Balanced Price is the difference between the Realized Price and the Terminal Price, adjusted by Bitcoin's supply constraints. This metric provides a useful signal for identifying oversold market conditions during bear markets.
BalancedPrice() =>
// It is calculated by subtracting Transferred Price from Realized Price
RealizedPrice() - (TerminalPrice() / (21 * 3))
Each component can be toggled individually, allowing users to focus on specific aspects of Bitcoin’s price cycle and derive meaningful insights from its long-term behavior. The combination of these models provides a well-rounded view of both speculative peaks and long-term value trends.
Important consideration:
Top Cap did historically provide reliable signals for cycle peaks, however it may not be a relevant indication of peaks in the future.
Mean Reversion Cloud (Ornstein-Uhlenbeck) // AlgoFyreThe Mean Reversion Cloud (Ornstein-Uhlenbeck) indicator detects mean-reversion opportunities by applying the Ornstein-Uhlenbeck process. It calculates a dynamic mean using an Exponential Weighted Moving Average, surrounded by volatility bands, signaling potential buy/sell points when prices deviate.
TABLE OF CONTENTS
🔶 ORIGINALITY
🔸Adaptive Mean Calculation
🔸Volatility-Based Cloud
🔸Speed of Reversion (θ)
🔶 FUNCTIONALITY
🔸Dynamic Mean and Volatility Bands
🞘 How it works
🞘 How to calculate
🞘 Code extract
🔸Visualization via Table and Plotshapes
🞘 Table Overview
🞘 Plotshapes Explanation
🞘 Code extract
🔶 INSTRUCTIONS
🔸Step-by-Step Guidelines
🞘 Setting Up the Indicator
🞘 Understanding What to Look For on the Chart
🞘 Possible Entry Signals
🞘 Possible Take Profit Strategies
🞘 Possible Stop-Loss Levels
🞘 Additional Tips
🔸Customize settings
🔶 CONCLUSION
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
🔶 ORIGINALITY The Mean Reversion Cloud (Ornstein-Uhlenbeck) is a unique indicator that applies the Ornstein-Uhlenbeck stochastic process to identify mean-reverting behavior in asset prices. Unlike traditional moving average-based indicators, this model uses an Exponentially Weighted Moving Average (EWMA) to calculate the long-term mean, dynamically adjusting to recent price movements while still considering all historical data. It also incorporates volatility bands, providing a "cloud" that visually highlights overbought or oversold conditions. By calculating the speed of mean reversion (θ) through the autocorrelation of log returns, this indicator offers traders a more nuanced and mathematically robust tool for identifying mean-reversion opportunities. These innovations make it especially useful for markets that exhibit range-bound characteristics, offering timely buy and sell signals based on statistical deviations from the mean.
🔸Adaptive Mean Calculation Traditional MA indicators use fixed lengths, which can lead to lagging signals or over-sensitivity in volatile markets. The Mean Reversion Cloud uses an Exponentially Weighted Moving Average (EWMA), which adapts to price movements by dynamically adjusting its calculation, offering a more responsive mean.
🔸Volatility-Based Cloud Unlike simple moving averages that only plot a single line, the Mean Reversion Cloud surrounds the dynamic mean with volatility bands. These bands, based on standard deviations, provide traders with a visual cue of when prices are statistically likely to revert, highlighting potential reversal zones.
🔸Speed of Reversion (θ) The indicator goes beyond price averages by calculating the speed at which the price reverts to the mean (θ), using the autocorrelation of log returns. This gives traders an additional tool for estimating the likelihood and timing of mean reversion, making the signals more reliable in practice.
🔶 FUNCTIONALITY The Mean Reversion Cloud (Ornstein-Uhlenbeck) indicator is designed to detect potential mean-reversion opportunities in asset prices by applying the Ornstein-Uhlenbeck stochastic process. It calculates a dynamic mean through the Exponentially Weighted Moving Average (EWMA) and plots volatility bands based on the standard deviation of the asset's price over a specified period. These bands create a "cloud" that represents expected price fluctuations, helping traders to identify overbought or oversold conditions. By calculating the speed of reversion (θ) from the autocorrelation of log returns, the indicator offers a more refined way of assessing how quickly prices may revert to the mean. Additionally, the inclusion of volatility provides a comprehensive view of market conditions, allowing for more accurate buy and sell signals.
Let's dive into the details:
🔸Dynamic Mean and Volatility Bands The dynamic mean (μ) is calculated using the EWMA, giving more weight to recent prices but considering all historical data. This process closely resembles the Ornstein-Uhlenbeck (OU) process, which models the tendency of a stochastic variable (such as price) to revert to its mean over time. Volatility bands are plotted around the mean using standard deviation, forming the "cloud" that signals overbought or oversold conditions. The cloud adapts dynamically to price fluctuations and market volatility, making it a versatile tool for mean-reversion strategies. 🞘 How it works Step one: Calculate the dynamic mean (μ) The Ornstein-Uhlenbeck process describes how a variable, such as an asset's price, tends to revert to a long-term mean while subject to random fluctuations. In this indicator, the EWMA is used to compute the dynamic mean (μ), mimicking the mean-reverting behavior of the OU process. Use the EWMA formula to compute a weighted mean that adjusts to recent price movements. Assign exponentially decreasing weights to older data while giving more emphasis to current prices. Step two: Plot volatility bands Calculate the standard deviation of the price over a user-defined period to determine market volatility. Position the upper and lower bands around the mean by adding and subtracting a multiple of the standard deviation. 🞘 How to calculate Exponential Weighted Moving Average (EWMA)
The EWMA dynamically adjusts to recent price movements:
mu_t = lambda * mu_{t-1} + (1 - lambda) * P_t
Where mu_t is the mean at time t, lambda is the decay factor, and P_t is the price at time t. The higher the decay factor, the more weight is given to recent data.
Autocorrelation (ρ) and Standard Deviation (σ)
To measure mean reversion speed and volatility: rho = correlation(log(close), log(close ), length) Where rho is the autocorrelation of log returns over a specified period.
To calculate volatility:
sigma = stdev(close, length)
Where sigma is the standard deviation of the asset's closing price over a specified length.
Upper and Lower Bands
The upper and lower bands are calculated as follows:
upper_band = mu + (threshold * sigma)
lower_band = mu - (threshold * sigma)
Where threshold is a multiplier for the standard deviation, usually set to 2. These bands represent the range within which the price is expected to fluctuate, based on current volatility and the mean.
🞘 Code extract // Calculate Returns
returns = math.log(close / close )
// Calculate Long-Term Mean (μ) using EWMA over the entire dataset
var float ewma_mu = na // Initialize ewma_mu as 'na'
ewma_mu := na(ewma_mu ) ? close : decay_factor * ewma_mu + (1 - decay_factor) * close
mu = ewma_mu
// Calculate Autocorrelation at Lag 1
rho1 = ta.correlation(returns, returns , corr_length)
// Ensure rho1 is within valid range to avoid errors
rho1 := na(rho1) or rho1 <= 0 ? 0.0001 : rho1
// Calculate Speed of Mean Reversion (θ)
theta = -math.log(rho1)
// Calculate Volatility (σ)
sigma = ta.stdev(close, corr_length)
// Calculate Upper and Lower Bands
upper_band = mu + threshold * sigma
lower_band = mu - threshold * sigma
🔸Visualization via Table and Plotshapes
The table shows key statistics such as the current value of the dynamic mean (μ), the number of times the price has crossed the upper or lower bands, and the consecutive number of bars that the price has remained in an overbought or oversold state.
Plotshapes (diamonds) are used to signal buy and sell opportunities. A green diamond below the price suggests a buy signal when the price crosses below the lower band, and a red diamond above the price indicates a sell signal when the price crosses above the upper band.
The table and plotshapes provide a comprehensive visualization, combining both statistical and actionable information to aid decision-making.
🞘 Code extract // Reset consecutive_bars when price crosses the mean
var consecutive_bars = 0
if (close < mu and close >= mu) or (close > mu and close <= mu)
consecutive_bars := 0
else if math.abs(deviation) > 0
consecutive_bars := math.min(consecutive_bars + 1, dev_length)
transparency = math.max(0, math.min(100, 100 - (consecutive_bars * 100 / dev_length)))
🔶 INSTRUCTIONS
The Mean Reversion Cloud (Ornstein-Uhlenbeck) indicator can be set up by adding it to your TradingView chart and configuring parameters such as the decay factor, autocorrelation length, and volatility threshold to suit current market conditions. Look for price crossovers and deviations from the calculated mean for potential entry signals. Use the upper and lower bands as dynamic support/resistance levels for setting take profit and stop-loss orders. Combining this indicator with additional trend-following or momentum-based indicators can improve signal accuracy. Adjust settings for better mean-reversion detection and risk management.
🔸Step-by-Step Guidelines
🞘 Setting Up the Indicator
Adding the Indicator to the Chart:
Go to your TradingView chart.
Click on the "Indicators" button at the top.
Search for "Mean Reversion Cloud (Ornstein-Uhlenbeck)" in the indicators list.
Click on the indicator to add it to your chart.
Configuring the Indicator:
Open the indicator settings by clicking on the gear icon next to its name on the chart.
Decay Factor: Adjust the decay factor (λ) to control the responsiveness of the mean calculation. A higher value prioritizes recent data.
Autocorrelation Length: Set the autocorrelation length (θ) for calculating the speed of mean reversion. Longer lengths consider more historical data.
Threshold: Define the number of standard deviations for the upper and lower bands to determine how far price must deviate to trigger a signal.
Chart Setup:
Select the appropriate timeframe (e.g., 1-hour, daily) based on your trading strategy.
Consider using other indicators such as RSI or MACD to confirm buy and sell signals.
🞘 Understanding What to Look For on the Chart
Indicator Behavior:
Observe how the price interacts with the dynamic mean and volatility bands. The price staying within the bands suggests mean-reverting behavior, while crossing the bands signals potential entry points.
The indicator calculates overbought/oversold conditions based on deviation from the mean, highlighted by color-coded cloud areas on the chart.
Crossovers and Deviation:
Look for crossovers between the price and the mean (μ) or the bands. A bullish crossover occurs when the price crosses below the lower band, signaling a potential buying opportunity.
A bearish crossover occurs when the price crosses above the upper band, suggesting a potential sell signal.
Deviations from the mean indicate market extremes. A large deviation indicates that the price is far from the mean, suggesting a potential reversal.
Slope and Direction:
Pay attention to the slope of the mean (μ). A rising slope suggests bullish market conditions, while a declining slope signals a bearish market.
The steepness of the slope can indicate the strength of the mean-reversion trend.
🞘 Possible Entry Signals
Bullish Entry:
Crossover Entry: Enter a long position when the price crosses below the lower band with a positive deviation from the mean.
Confirmation Entry: Use additional indicators like RSI (above 50) or increasing volume to confirm the bullish signal.
Bearish Entry:
Crossover Entry: Enter a short position when the price crosses above the upper band with a negative deviation from the mean.
Confirmation Entry: Look for RSI (below 50) or decreasing volume to confirm the bearish signal.
Deviation Confirmation:
Enter trades when the deviation from the mean is significant, indicating that the price has strayed far from its expected value and is likely to revert.
🞘 Possible Take Profit Strategies
Static Take Profit Levels:
Set predefined take profit levels based on historical volatility, using the upper and lower bands as guides.
Place take profit orders near recent support/resistance levels, ensuring you're capitalizing on the mean-reversion behavior.
Trailing Stop Loss:
Use a trailing stop based on a percentage of the price deviation from the mean to lock in profits as the trend progresses.
Adjust the trailing stop dynamically along the calculated bands to protect profits as the price returns to the mean.
Deviation-Based Exits:
Exit when the deviation from the mean starts to decrease, signaling that the price is returning to its equilibrium.
🞘 Possible Stop-Loss Levels
Initial Stop Loss:
Place an initial stop loss outside the lower band (for long positions) or above the upper band (for short positions) to protect against excessive deviations.
Use a volatility-based buffer to avoid getting stopped out during normal price fluctuations.
Dynamic Stop Loss:
Move the stop loss closer to the mean as the price converges back towards equilibrium, reducing risk.
Adjust the stop loss dynamically along the bands to account for sudden market movements.
🞘 Additional Tips
Combine with Other Indicators:
Enhance your strategy by combining the Mean Reversion Cloud with momentum indicators like MACD, RSI, or Bollinger Bands to confirm market conditions.
Backtesting and Practice:
Backtest the indicator on historical data to understand how it performs in various market environments.
Practice using the indicator on a demo account before implementing it in live trading.
Market Awareness:
Keep an eye on market news and events that might cause extreme price movements. The indicator reacts to price data and might not account for news-driven events that can cause large deviations.
🔸Customize settings 🞘 Decay Factor (λ): Defines the weight assigned to recent price data in the calculation of the mean. A value closer to 1 places more emphasis on recent prices, while lower values create a smoother, more lagging mean.
🞘 Autocorrelation Length (θ): Sets the period for calculating the speed of mean reversion and volatility. Longer lengths capture more historical data, providing smoother calculations, while shorter lengths make the indicator more responsive.
🞘 Threshold (σ): Specifies the number of standard deviations used to create the upper and lower bands. Higher thresholds widen the bands, producing fewer signals, while lower thresholds tighten the bands for more frequent signals.
🞘 Max Gradient Length (γ): Determines the maximum number of consecutive bars for calculating the deviation gradient. This setting impacts the transparency of the plotted bands based on the length of deviation from the mean.
🔶 CONCLUSION
The Mean Reversion Cloud (Ornstein-Uhlenbeck) indicator offers a sophisticated approach to identifying mean-reversion opportunities by applying the Ornstein-Uhlenbeck stochastic process. This dynamic indicator calculates a responsive mean using an Exponentially Weighted Moving Average (EWMA) and plots volatility-based bands to highlight overbought and oversold conditions. By incorporating advanced statistical measures like autocorrelation and standard deviation, traders can better assess market extremes and potential reversals. The indicator’s ability to adapt to price behavior makes it a versatile tool for traders focused on both short-term price deviations and longer-term mean-reversion strategies. With its unique blend of statistical rigor and visual clarity, the Mean Reversion Cloud provides an invaluable tool for understanding and capitalizing on market inefficiencies.
Uptrick: Market MoodsThe "Uptrick: Market Moods" indicator is an advanced technical analysis tool designed for the TradingView platform. It combines three powerful indicators—Relative Strength Index (RSI), Average True Range (ATR), and Bollinger Bands—into one cohesive framework, aimed at helping traders better understand and interpret market sentiment. By capturing shifts in the emotional climate of the market, it provides a holistic view of market conditions, which can range from calm to stressed or even highly excited. This multi-dimensional analysis tool stands apart from traditional single-indicator approaches by offering a more complete picture of market dynamics, making it a valuable resource for traders looking to anticipate and react to changes in market behavior.
The RSI in the "Uptrick: Market Moods" indicator is used to measure momentum. RSI is an essential component of many technical analysis strategies, and in this tool, it is used to identify potential market extremes. When RSI values are high, they indicate an overbought condition, meaning the market may be approaching a peak. Conversely, low RSI values suggest an oversold condition, signaling that the market could be nearing a bottom. These extremes provide crucial clues about shifts in market sentiment, helping traders gauge whether the current emotional state of the market is likely to result in a reversal. This understanding is pivotal in predicting whether the market is transitioning from calm to stressed or from excited to overbought.
The Average True Range adds another layer to this analysis by offering insights into market volatility. Volatility is a key factor in understanding the mood of the market, as periods of high volatility often reflect high levels of excitement or stress, while low volatility typically indicates a calm, steady market. ATR is calculated based on the range of price movements over a given period, and the higher the value, the more volatile the market is. The "Uptrick: Market Moods" indicator uses ATR to dynamically gauge volatility levels, helping traders understand whether the market is currently moving in a way that aligns with its emotional mood. For example, an increase in ATR accompanied by an RSI value that indicates overbought conditions could suggest that the market is in a highly excited state, with the potential for either strong momentum continuation or a sharp reversal.
Bollinger Bands complement these tools by providing visual cues about price volatility and the range within which the market is likely to move. Bollinger Bands plot two standard deviations away from a simple moving average of the price. This banding technique helps traders visualize how far the price is likely to deviate from its average over a certain period. The "Uptrick: Market Moods" indicator uses Bollinger Bands to establish price boundaries and identify breakout conditions. When prices break above the upper band or below the lower band, it often signals that the market is either highly stressed or excited. This breakout condition serves as a visual representation of the market mood, alerting traders to moments when prices are moving beyond typical ranges and when significant emotional shifts are occurring in the market.
Technically, the "Uptrick: Market Moods" indicator has been developed using TradingView’s Pine Script language, a highly efficient language for building custom indicators. It employs functions like ta.rsi, ta.atr, and ta.sma to perform the necessary calculations. The use of these built-in functions ensures that the calculations are both accurate and efficient, allowing the indicator to operate in real-time without lagging, even in volatile market conditions. The ta.rsi function is used to compute the Relative Strength Index, while ta.atr calculates the Average True Range, and ta.sma is used to smooth out price data for the Bollinger Bands. These functions are applied dynamically within the script, allowing the "Uptrick: Market Moods" indicator to respond to changes in market conditions in real time.
The user interface of the "Uptrick: Market Moods" indicator is designed to provide a visually intuitive experience. The market mood is color-coded on the chart, making it easy for traders to identify whether the market is calm, stressed, or excited at a glance. This feature is especially useful for traders who need to make quick decisions in fast-moving markets. Additionally, the indicator includes an interactive table that updates in real-time, showing the most recent mood state and its frequency. This provides valuable statistical insights into market behavior over specific time frames, helping traders track the dominant emotional state of the market. Whether the market is in a prolonged calm state or rapidly transitioning through moods, this real-time feedback offers actionable data that can help traders adjust their strategies accordingly.
The RSI component of the "Uptrick: Market Moods" indicator helps detect the speed and direction of price movements, offering insight into whether the market is approaching extreme conditions. By providing signals based on overbought and oversold levels, the RSI helps traders decide whether to enter or exit positions. The ATR element acts as a volatility gauge, dynamically adjusting traders’ expectations in response to changes in market volatility. Meanwhile, the Bollinger Bands help identify trends and potential breakout conditions, serving as an additional confirmation tool that highlights when the price has moved beyond normal boundaries, indicating heightened market excitement or stress.
Despite the robust capabilities of the "Uptrick: Market Moods" indicator, it does have limitations. In markets affected by sudden shifts, such as those driven by major news events or external economic factors, the indicator’s performance may not always be reliable. These external factors can cause rapid mood swings that are difficult for any technical analysis tool to fully anticipate. Additionally, the indicator’s complexity may pose a learning curve for novice traders, particularly those who are unfamiliar with the concepts of RSI, ATR, and Bollinger Bands. However, with practice, traders can become proficient in using the tool to its full potential, leveraging the insights it provides to better navigate market shifts.
For traders seeking a deeper understanding of market sentiment, the "Uptrick: Market Moods" indicator is an invaluable resource. It is recommended for those dealing with medium to high volatility instruments, where understanding emotional shifts can offer a strategic advantage. While it can be used on its own, integrating it with other forms of analysis, such as fundamental analysis and additional technical indicators, can enhance its effectiveness. By confirming signals with other tools, traders can reduce the likelihood of false signals and improve their overall trading strategy.
To further enhance the accuracy of the "Uptrick: Market Moods" indicator, it can be integrated with volume-based tools like Volume Profile or On-Balance Volume (OBV). This combination allows traders to confirm the moods identified by the indicator with volume data, providing additional confirmation of market sentiment. For example, when the market is in an excited mood, an increase in trading volume could reinforce the reliability of that signal. Conversely, if the market is stressed but volume remains low, traders may want to proceed with caution. Using multiple indicators together creates a more comprehensive trading approach, helping traders better manage risk and make informed decisions based on multiple data points.
In conclusion, the "Uptrick: Market Moods" indicator is a powerful and unique addition to the suite of technical analysis tools available on TradingView. It provides traders with a multi-dimensional view of market sentiment by combining the analytical strengths of RSI, ATR, and Bollinger Bands into a single tool. Its ability to capture and interpret the emotional mood of the market makes it an essential tool for traders seeking to gain an edge in understanding market behavior. While the indicator has certain limitations, particularly in rapidly shifting markets, its ability to provide real-time insights into market sentiment is a valuable asset for traders of all experience levels. Used in conjunction with other tools and sound trading practices, the "Uptrick: Market Moods" indicator offers a comprehensive solution for navigating the complexities of financial markets.
Support and ResistanceThis indicator, titled "Support and Resistance," is designed to identify and display key price levels based on volume and pivot points. It's a versatile tool that can be adapted for different market views and timeframes.
Key Features
Market View Options
The indicator offers three market view settings:
Short term
Standard
Long term
These settings affect the lookback periods used in calculations, allowing users to adjust the indicator's sensitivity to market movements.
Volume-Based Levels
The indicator calculates support and resistance levels using a rolling Point of Control (POC) derived from volume data. This approach helps identify price levels where the most trading activity has occurred.
Pivot Points
In addition to volume-based levels, the indicator incorporates pivot points to identify potential support and resistance areas.
Customizable Appearance
Users can adjust:
Number of lines to display (1-8)
Colors for support and resistance levels
Line thickness based on level importance
Calculation Methods
Rolling POC
The indicator uses a custom function f_rolling_poc to calculate the rolling Point of Control. This function analyzes volume distribution across price levels within a specified lookback period.
Pivot Points
Both standard and quick pivot points are calculated using the rolling POC as input, rather than traditional price data.
Level Importance
The indicator assigns importance to each level based on:
Number of touches (how often price has interacted with the level)
Duration (how long the level has been relevant)
This importance score determines the thickness of the displayed lines.
Unique Aspects
Dynamic Line Thickness: Lines become thicker when levels overlap, highlighting potentially stronger support/resistance areas.
Adaptive Coloring: The color of each line changes dynamically based on whether the current price is above or below the level, indicating whether it's acting as support or resistance.
Flexible Time Frames: The market view options allow the indicator to be easily adapted for different trading styles and timeframes.
Potential Uses
This indicator could be valuable for:
Identifying key price levels for entry and exit points
Recognizing potential breakout or breakdown levels
Understanding the strength of support and resistance based on line thickness
Adapting analysis to different market conditions and timeframes
Overall, this "Support and Resistance" indicator offers a sophisticated approach to identifying key price levels, combining volume analysis with pivot points and providing visual cues for level importance and current market position.
This Support and Resistance indicator is provided for informational and educational purposes only. It should not be considered as financial advice or a recommendation to buy or sell any security. The indicator's calculations are based on historical data and may not accurately predict future market movements. Trading decisions should be made after thorough research and consultation with a licensed financial advisor. The creator of this indicator is not responsible for any losses incurred from its use. Past performance does not guarantee future results. Use at your own risk.
RSI (Kernel Optimized) | Flux Charts💎 GENERAL OVERVIEW
Introducing our new KDE Optimized RSI Indicator! This indicator adds a new aspect to the well-known RSI indicator, with the help of the KDE (Kernel Density Estimation) algorithm, estimates the probability of a candlestick will be a pivot or not. For more information about the process, please check the "HOW DOES IT WORK ?" section.
Features of the new KDE Optimized RSI Indicator :
A New Approach To Pivot Detection
Customizable KDE Algorithm
Realtime RSI & KDE Dashboard
Alerts For Possible Pivots
Customizable Visuals
❓ HOW TO INTERPRET THE KDE %
The KDE % is a critical metric that reflects how closely the current RSI aligns with the KDE (Kernel Density Estimation) array. In simple terms, it represents the likelihood that the current candlestick is forming a pivot point based on historical data patterns. a low percentage suggests a lower probability of the current candlestick being a pivot point. In these cases, price action is less likely to reverse, and existing trends may continue. At moderate levels, the possibility of a pivot increases, indicating potential trend shifts or consolidations.Traders should start monitoring closely for confirmation signals. An even higher KDE % suggests a strong likelihood that the current candlestick could form a pivot point, which could lead to a reversal or significant price movement. These points often align with overbought or oversold conditions in traditional RSI analysis, making them key moments for potential trade entry or exit.
📌 HOW DOES IT WORK ?
The RSI (Relative Strength Index) is a widely used oscillator among traders. It outputs a value between 0 - 100 and gives a glimpse about the current momentum of the price action. This indicator then calculates the RSI for each candlesticks, and saves them into an array if the candlestick is a pivot. The low & high pivot RSIs' are inserted into two different arrays. Then the a KDE array is calculated for both of the low & high pivot RSI arrays. Explaining the KDE might be too much for this write-up, but for a brief explanation, here are the steps :
1. Define the necessary options for the KDE function. These are : Bandwidth & Nº Steps, Array Range (Array Max - Array Min)
2. After that, create a density range array. The array has (steps * 2 - 1) elements and they are calculated by (arrMin + i * stepCount), i being the index.
3. Then, define a kernel function. This indicator has 3 different kernel distribution modes : Uniform, Gaussian and Sigmoid
4. Then, define a temporary value for the current element of KDE array.
5. For each element E in the pivot RSI array, add "kernel(densityRange.get(i) - E, 1.0 / bandwidth)" to the temporary value.
6. Add 1.0 / arrSize * to the KDE array.
Then the prefix sum array of the KDE array is calculated. For each candlestick, the index closest to it's RSI value in the KDE array is found using binary search. Then for the low pivot KDE calculation, the sum of KDE values from found index to max index is calculated. For the high pivot KDE, the sum of 0 to found index is used. Then if high or low KDE value is greater than the activation threshold determined in the settings, a bearish or bullish arrow is plotted after bar confirmation respectively. The arrows are drawn as long as the KDE value of current candlestick is greater than the threshold. When the KDE value is out of the threshold, a less transparent arrow is drawn, indicating a possible pivot point.
🚩 UNIQUENESS
This indicator combines RSI & KDE Algorithm to get a foresight of possible pivot points. Pivot points are important entry, confirmation and exit points for traders. But to their nature, they can be only detected after more candlesticks are rendered after them. The purpose of this indicator is to alert the traders of possible pivot points using KDE algorithm right away when they are confirmed. The indicator also has a dashboard for realtime view of the current RSI & Bullish or Bearish KDE value. You can fully customize the KDE algorithm and set up alerts for pivot detection.
⚙️ SETTINGS
1. RSI Settings
RSI Length -> The amount of bars taken into account for RSI calculation.
Source -> The source value for RSI calculation.
2. Pivots
Pivot Lengths -> Pivot lengths for both high & low pivots. For example, if this value is set to 21; 21 bars before AND 21 bars after a candlestick must be higher for a candlestick to be a low pivot.
3. KDE
Activation Threshold -> This setting determines the amount of arrows shown. Higher options will result in more arrows being rendered.
Kernel -> The kernel function as explained in the upper section.
Bandwidth -> The bandwidth variable as explained in the upper section. The smoothness of the KDE function is tied to this setting.
Nº Bins -> The Nº Steps variable as explained in the upper section. It determines the precision of the KDE algorithm.
Liquidity Zones [BigBeluga]This indicator is designed to detect liquidity zones on the chart by identifying significant pivot highs and lows filtered by volume strength. It plots these zones as boxes, highlighting areas where liquidity is likely to accumulate. The indicator also draws lines extending from these boxes, marking the levels where price may "grab" this liquidity. The size of these boxes can be dynamic, adjusting based on the volume size, offering a visual representation of market areas where traders might expect significant price reactions.
🔵 IDEA
The idea behind the Liquidity Zones indicator is to help traders identify key market levels where liquidity accumulates. Liquidity zones are areas where there are enough buy or sell orders that can potentially lead to significant price movements. By focusing on pivot points filtered by volume strength, the indicator aims to provide a clearer picture of where large players may have positioned their orders. This insight allows traders to anticipate potential market reactions, such as reversals or breakouts, when the price reaches these zones. The option for dynamic box height further refines the visualization, showing the extent of liquidity based on the volume's intensity.
🔵 KEY FEATURES & USAGE
◉ Volume-Filtered Pivot Highs and Lows:
The indicator scans for pivot highs and lows on the chart, filtering these points based on the volume strength setting (Low, Mid, High). This ensures that only the most significant liquidity zones, backed by notable trading volume, are highlighted. Traders can adjust the filter to focus on different levels of market activity, from small fluctuations to major volume spikes.
Low:
Mid:
High:
◉ Dynamic and Static Liquidity Zones:
Liquidity zones are plotted as boxes around pivot points, with an optional dynamic mode that adjusts the box height based on the normalized volume. This dynamic adjustment reflects the liquidity carried by the volume, making it easier to gauge the significance of each zone. In static mode, the boxes have a fixed height, providing a consistent visual reference for the zones.
◉ Color Intensity Based on Volume:
The indicator adjusts the color intensity of the liquidity zones based on the volume strength. Higher volume zones will be displayed with more intense colors, giving a visual cue to the strength of the liquidity present in that area. This makes it easier to differentiate between zones of varying importance at a glance, allowing traders to quickly identify where the market has the highest concentration of liquidity.
◉ Liquidity Grab Detection and Red Circles:
When the price interacts with a liquidity zone, the indicator detects whether liquidity has been "grabbed" at these levels. If the price moves into a zone and crosses a level, the box label changes to "Liquidity Grabbed," and the line marking the level becomes dashed.
Reversal Points:
The beginning of a trend:
Additionally marks these "liquidity grabs" with red circles, indicating both recent and past liquidity grabs. This feature helps traders identify areas where liquidity has been absorbed by the market, which may signal potential reversals or shifts in market direction.
◉ Dashboard Display:
A dashboard in the upper right corner of the chart provides an overview of the indicator's settings and status. It shows the number of plotted zones, as set in the input settings, and whether the dynamic mode is active. This quick reference helps traders stay informed about the indicator's configuration without needing to open the settings panel.
🔵 CUSTOMIZATION
Length & Zones Amount: Set the length for pivot detection and the maximum number of zones to be displayed on the chart. This allows you to control how many liquidity zones you want to monitor at any given time.
Volume Strength Filter: Adjust the filter to Low, Mid, or High to control the strength of volume required for a pivot to be considered a significant liquidity zone. Higher settings focus on zones with greater volume, indicating stronger liquidity.
Dynamic Distance Mode: Enable or disable the dynamic mode, which adjusts the box height based on the volume size. When dynamic mode is off, the boxes have a fixed height based on the ATR, offering a consistent visualization regardless of the volume size.
The Liquidity Zones indicator is a versatile tool for identifying areas of significant market activity, offering a clear view of where liquidity is likely to reside. By filtering these zones through volume strength and providing dynamic or static visualization options, it equips traders with insights into potential market reaction points, enhancing their ability to anticipate and respond to market movements. The varying color intensity based on volume further aids in quickly recognizing the most critical liquidity zones on the chart.