Ticker Tape█ OVERVIEW
This indicator creates a dynamic, scrolling display of multiple securities' latest prices and daily changes, similar to the ticker tapes on financial news channels and the Ticker Tape Widget . It shows realtime market information for a user-specified list of symbols along the bottom of the main chart pane.
█ CONCEPTS
Ticker tape
Traditionally, a ticker tape was a continuous, narrow strip of paper that displayed stock prices, trade volumes, and other financial and security information. Invented by Edward A. Calahan in 1867, ticker tapes were the earliest method for electronically transmitting live stock market data.
A machine known as a "stock ticker" received stock information via telegraph, printing abbreviated company names, transaction prices, and other information in a linear sequence on the paper as new data came in. The term "ticker" in the name comes from the "tick" sound the machine made as it printed stock information. The printed tape provided a running record of trading activity, allowing market participants to stay informed on recent market conditions without needing to be on the exchange floor.
In modern times, electronic displays have replaced physical ticker tapes. However, the term "ticker" remains persistent in today's financial lexicon. Nowadays, ticker symbols and digital tickers appear on financial news networks, trading platforms, and brokerage/exchange websites, offering live updates on market information. Modern electronic displays, thankfully, do not rely on telegraph updates to operate.
█ FEATURES
Requesting a list of securities
The "Symbol list" text box in the indicator's "Settings/Inputs" tab allows users to list up to 40 symbols or ticker Identifiers. The indicator dynamically requests and displays information for each one. To add symbols to the list, enter their names separated by commas . For example: "BITSTAMP:BTCUSD, TSLA, MSFT".
Each item in the comma-separated list must represent a valid symbol or ticker ID. If the list includes an invalid symbol, the script will raise a runtime error.
To specify a broker/exchange for a symbol, include its name as a prefix with a colon in the "EXCHANGE:SYMBOL" format. If a symbol in the list does not specify an exchange prefix, the indicator selects the most commonly used exchange when requesting the data.
Realtime updates
This indicator requests symbol descriptions, current market prices, daily price changes, and daily change percentages for each ticker from the user-specified list of symbols or ticker identifiers. It receives updated information for each security after new realtime ticks on the current chart.
After a new realtime price update, the indicator updates the values shown in the tape display and their colors.
The color of the percentages in the tape depends on the change in price from the previous day . The text is green when the daily change is positive, red when the value is negative, and gray when the value is 0.
The color of each displayed price depends on the change in value from the last recorded update, not the change over a daily period. For example, if a security's price increases in the latest update, the ticker tape shows that price with green text, even if the current price is below the previous day's closing price. This behavior allows users to monitor realtime directional changes in the requested securities.
NOTE: Pine scripts execute on realtime bars when new ticks are available in the chart's data feed. If no new updates are available from the chart's realtime feed, it may cause a delay in the data the indicator receives.
Ticker motion
This indicator's tape display shows a list of security information that incrementally scrolls horizontally from right to left after new chart updates, providing a dynamic visual stream of current market data. The scrolling effect works by using a counter that increments across successive intervals after realtime ticks to control the offset of each listed security. Users can set the initial scroll offset with the "Offset" input in the "Settings/Inputs" tab.
The scrolling rate of the ticker tape display depends on the realtime ticks available from the chart's data feed. Using the indicator on a chart with frequent realtime updates results in smoother scrolling. If no new realtime ticks are available in the chart's feed, the ticker tape does not move. Users can also deactivate the scrolling feature by toggling the "Running" input in the indicator's settings.
█ FOR Pine Script™ CODERS
• This script utilizes dynamic requests to iteratively fetch information from multiple contexts using a single request.security() instance in the code. Previously, `request.*()` functions were not allowed within the local scopes of loops or conditional structures, and most `request.*()` function parameters, excluding `expression`, required arguments of a simple or weaker qualified type. The new `dynamic_requests` parameter in script declaration statements enables more flexibility in how scripts can use `request.*()` calls. When its value is `true`, all `request.*()` functions can accept series arguments for the parameters that define their requested contexts, and `request.*()` functions can execute within local scopes. See the Dynamic requests section of the Pine Script™ User Manual to learn more.
• Scripts can execute up to 40 unique `request.*()` function calls. A `request.*()` call is unique only if the script does not already call the same function with the same arguments. See this section of the User Manual's Limitations page for more information.
• This script converts a comma-separated "string" list of symbols or ticker IDs into an array . It then loops through this array, dynamically requesting data from each symbol's context and storing the results within a collection of custom `Tape` objects . Each `Tape` instance holds information about a symbol, which the script uses to populate the table that displays the ticker tape.
• This script uses the varip keyword to declare variables and `Tape` fields that update across ticks on unconfirmed bars without rolling back. This behavior allows the script to color the tape's text based on the latest price movements and change the locations of the table cells after realtime updates without reverting. See the `varip` section of the User Manual to learn more about using this keyword.
• Typically, when requesting higher-timeframe data with request.security() using barmerge.lookahead_on as the `lookahead` argument, the `expression` argument should use the history-referencing operator to offset the series, preventing lookahead bias on historical bars. However, the request.security() call in this script uses barmerge.lookahead_on without offsetting the `expression` because the script only displays results for the latest historical bar and all realtime bars, where there is no future information to leak into the past. Instead, using this call on those bars ensures each request fetches the most recent data available from each context.
• The request.security() instance in this script includes a `calc_bars_count` argument to specify that each request retrieves only a minimal number of bars from the end of each symbol's historical data feed. The script does not need to request all the historical data for each symbol because it only shows results on the last chart bar that do not depend on the entire time series. In this case, reducing the retrieved bars in each request helps minimize resource usage without impacting the calculated results.
Look first. Then leap.
ابحث في النصوص البرمجية عن "daily"
Trend and RSI Bias FusionTrend and RSI Bias Fusion Indicator
This is my first ever indicator. I created this indicator for myself. I was inspired by the indicators created by Bjorgum, Duyck and QuantTherapy and decided to create multiple indicators that either work well combined with their indicators or something new that applies some of their indicator concepts. I decided to share this because I believe in learning and earing together as a community. I will later share the rest of the indicators I have created. This is my first time ever sharing any indicator so if you guys have any questions or suggestions write them.
Overview
The "Trend and RSI Bias Fusion" indicator is a versatile tool designed to help traders identify key market trends, potential reversals, momentum shifts, and RSI-based pullbacks. This indicator fuses trend analysis and RSI bias into a single, comprehensive visual, making it easier to make informed trading decisions across various timeframes and market conditions.
Features
Dual Timeframe Analysis: Combines trend analysis on a higher timeframe (e.g., Daily) with RSI analysis on a lower timeframe (e.g., 4-Hour), providing a more granular view of market conditions. You can, however, choose any timeframe you want for instance 12hr with trend and 2hr RSI analysis.
Trend and Momentum Visualization: The indicator uses Exponential Moving Averages (EMAs) to determine trend direction and colors the chart background to reflect bullish or bearish trends, along with momentum strength.
RSI Bias Detection: Automatically identifies overbought and oversold conditions using the RSI, providing a clear indication of potential market reversals or continuations.
Color-Coded Bars: Optionally color codes bars based on either trend direction or RSI bias, giving you a quick visual cue of the market's state.
Reversal Markers: Displays trend reversal markers on the chart when the short-term EMA crosses over or under the long-term EMA.
Calculation Details
Exponential Moving Averages (EMAs): The indicator calculates short-term and long-term EMAs using the closing prices.
The crossover between these EMAs is used to determine the trend direction:
Short-Term EMA: Typically a 14-period EMA.
Long-Term EMA: Typically a 50-period EMA.
Momentum: Calculated using the RSI and then centered around zero by subtracting 50. This allows the indicator to distinguish between positive and negative momentum.
RSI Bias: The RSI is calculated on a lower timeframe to detect overbought (above 60) and oversold (below 40) conditions, which are used to determine the bias:
RSI Above 60: Indicates potential overbought conditions (bearish bias).
RSI Below 40: Indicates potential oversold conditions (bullish bias).
How to Use the Indicator
Select Your Timeframes: Choose your preferred trend timeframe (e.g., Daily) and RSI timeframe (e.g., 4-2 Hour) in the indicator settings. These should match your trading strategy and the asset class you're analyzing.
Interpret Trend and Momentum
Background Color: The background color reflects the current trend direction:
Green/Lime: Uptrend, with lime indicating positive momentum.
Red/Maroon: Downtrend, with maroon indicating positive momentum within a downtrend.
Momentum Histogram: The histogram plot shows momentum, color-coded by the trend. A histogram above zero with green/lime indicates bullish momentum, while below zero with red/maroon indicates bearish momentum.
Image above: Both RSI and Trend are set to daily, uses RSI bar color
Read RSI Bias:
The RSI bias line helps identify the current market state relative to overbought or oversold levels. The RSI value is plotted on the chart, with lines at 60 and 40 to mark these levels.
When the RSI crosses above 60, it suggests a bearish bias; crossing below 40 suggests a bullish bias.
Use Reversal Markers: The indicator places small circles on the chart at points where the short-term EMA crosses the long-term EMA, signaling potential trend reversals.
Bar Color Customization:
You can choose to color the bars based on either the trend or the RSI bias in the indicator settings. In the Images below I have changed the colors to fit my personal style , Blue for uptrend and Pink for downtrend:
Trend-Based: Bars will reflect the trend direction (green for uptrend or in this case blue, red for downtrend or in this case pink).
RSI-Based: Bars will reflect RSI conditions (yellow for overbought, maroon for oversold).
Image above: RSI is set to 4hr and Trend is set to daily, uses RSI bar color
Image above: RSI is set to 4hr and Trend is set to daily, uses Trend bar color
Image above: Both RSI and Trend are set to daily, uses RSI bar color
Image above: Both RSI and Trend are set to daily, uses Trend bar color
Image above: Both RSI and Trend are set to daily, without bar color
Image above: Both RSI and Trend are set to daily, how it looks on a clean chart
Example Use Case Swing Traders:
For instance, if you're trading a 4-hour chart of USDCHF:
Set the trend timeframe to Daily and the RSI timeframe to 4-Hour.
Watch for background color shifts and reversal markers to determine trend direction.
Use RSI bias to time your entries and exits, especially around overbought/oversold levels.
Enable bar coloring to quickly see when conditions favor either trend continuation or reversal.
This indicator is particularly effective for swing traders and those who want to align their trades with higher timeframe trends while using momentum and RSI for entry and exit signals.
For Day Traders
Timeframe Selection:
Trend Timeframe: Set to a higher intraday timeframe such as the 1 or 2 Hour chart.
RSI Timeframe: Set to a shorter timeframe like 15-10 Minutes or 5-Minutes to capture finer details of intraday momentum shifts.
Using the Indicator:
Trend Identification: Day traders can use the background color to quickly identify whether the market is in a bullish or bearish trend on the 1-Hour chart. A green background suggests looking for long opportunities, while a red background suggests short opportunities.
Momentum Analysis: The histogram can help day traders gauge the strength of the current trend. For example, if the histogram is green and above zero, the trader may consider buying pullbacks within the trend.
RSI Bias: Monitor RSI levels on the lower timeframe (e.g., 15-Minutes). If the RSI crosses below 40, it indicates an oversold condition, potentially signaling a buying opportunity, especially if it aligns with a bullish trend on the higher timeframe.
Trade Execution:
Look for entries when the RSI shows a reversal or pullback in the direction of the higher timeframe trend.
Use the trend reversal markers to confirm potential intraday reversals, adding extra confidence to trade setups.
For Scalpers
Timeframe Selection:
Trend Timeframe: Set to a short intraday timeframe like 15-Minutes or 5-Minutes.
RSI Timeframe: Use an even shorter timeframe, such as 1-Minute, to capture rapid price movements.
Final Notes:
The "Trend and RSI Bias Fusion" indicator is a powerful tool that combines trend analysis, momentum assessment, and RSI insights into one cohesive package. By integrating these different aspects, the indicator helps traders navigate complex market environments with greater clarity and confidence. Customize the settings to fit your specific trading style and market and use it to stay ahead of market trends and potential reversals.
My Scripts/Indicators/Ideas /Systems that I share are only for educational purposes!
MTF AnalysisMTF Analysis - Multi-Timeframe TradingView Script
Overview: The "MTF Analysis" script provides a comprehensive approach to analyzing price trends across daily, weekly, and monthly timeframes using linear regression channels. It helps traders identify strong and weak bullish or bearish conditions based on the relationship between the current price and regression lines derived from multiple timeframes.
Key Features:
User-Defined Inputs:
Regression Lengths: Customize regression lengths for daily, weekly, and monthly timeframes.
Smoothing Length: Apply smoothing to regression lines.
Near-Zero Threshold: Filter out signals near a defined slope threshold for more refined analysis.
Daily Time Frame Filter: Optional filter to consider daily regression slope in signal generation.
Regression Line Calculation:
The script calculates linear regression lines for each timeframe (daily, weekly, monthly) and applies a smoothing function to refine the signals.
Signal Conditions:
Strong Bullish/Bearish: Signals generated when the price is consistently above/below weekly and monthly regression lines, with the option to apply the daily timeframe filter.
Weak Bullish/Bearish: Signals generated when the price is above/below the monthly regression line alone.
Visual Indicators:
The script plots regression lines on the chart with different colors for easy identification.
It also displays arrows on the chart to indicate strong or weak bullish/bearish signals.
Alerts:
Custom alerts for each signal condition help traders stay informed of potential trading opportunities.
This script is highly customizable, allowing traders to tailor it to their specific trading style and preferences.
This summary can be used to introduce the script to other traders or for publication on platforms like TradingView.
EMAs for D W M TimeframesEMAs for D W M Timeframes
Description:
The “EMAs for D W M Timeframes” indicator allows users to set specific Exponential Moving Averages (EMAs) for Daily, Weekly, and Monthly timeframes. The script utilizes these user-defined EMA settings based on the chart’s current timeframe, ensuring that the appropriate EMAs are always displayed.
Please note that for timeframes other than specified, it defaults to daily EMA values.
EMA : The Exponential Moving Average (EMA) is a type of moving average that places greater weight and significance on the most recent data points. This makes the EMA more responsive to recent price changes compared to a simple moving average (SMA), making it a popular tool for identifying trends in financial markets.
Features:
Daily and Default EMAs: Users can specify two EMAs for the Daily timeframe, which also act as the default EMAs for any unspecified timeframe. The default values are set to 10 and 20.
Weekly EMAs: For Weekly charts, the indicator plots two EMAs with default values of 10 and 30. These EMAs help in tracking medium-term trends.
Monthly EMAs: On Monthly charts, the indicator plots EMAs with default values of 5 and 10, providing insights into long-term trends.
Timeframe-Based Display: The indicator automatically uses the EMA settings corresponding to the current chart’s timeframe, whether it is Daily, Weekly, or Monthly.
If the chart is set to any other timeframe, the Daily EMA settings are used by default.
How to Use:
Inputs:
* Daily and Default EMA 1 & 2: Adjust the values for the short-term and long-term EMAs on the Daily chart, which are also used for any other unspecified timeframe.
* Weekly EMA 1 & 2: Set the values for the EMAs that will be shown on Weekly charts.
* Monthly EMA 1 & 2: Specify the values for the EMAs to be displayed on Monthly charts.
Visualization:
* Depending on the current chart timeframe, the script will automatically display the relevant EMAs.
Default Values:
* Daily and Default EMAs: 10 (EMA 1), 20 (EMA 2)
* Weekly EMAs: 10 (EMA 1), 30 (EMA 2)
* Monthly EMAs: 5 (EMA 1), 10 (EMA 2)
This indicator is designed for users who want to monitor EMAs across different timeframes, using specific settings for Daily, Weekly, and Monthly charts.
Swing Trend AnalysisIntroducing the Swing Trend Analyzer: A Powerful Tool for Swing and Positional Trading
The Swing Trend Analyzer is a cutting-edge indicator designed to enhance your swing and positional trading by providing precise entry points based on volatility contraction patterns and other key technical signals. This versatile tool is packed with features that cater to traders of all timeframes, offering flexibility, clarity, and actionable insights.
Key Features:
1. Adaptive Moving Averages:
The Swing Trend Analyzer offers multiple moving averages tailored to the timeframe you are trading on. On the daily chart, you can select up to four different moving average lengths, while all other timeframes provide three moving averages. This flexibility allows you to fine-tune your analysis according to your trading strategy. Disabling a moving average is as simple as setting its value to zero, making it easy to customize the indicator to your needs.
2. Dynamic Moving Average Colors Based on Relative Strength:
This feature allows you to compare the performance of the current ticker against a major index or any symbol of your choice. The moving average will change color based on whether the ticker is outperforming or underperforming the selected index over the chosen period. For example, on a daily chart, if the 21-day moving average turns blue, it indicates that the ticker has outperformed the selected index over the last 21 days. This visual cue helps you quickly identify relative strength, a key factor in successful swing trading.
3. Visual Identification of Price Contractions:
The Swing Trend Analyzer changes the color of price bars to white (on a dark theme) or black (on a light theme) when a contraction in price is detected. Price contractions are highlighted when either of the following conditions is met: a) the current bar is an inside bar, or b) the price range of the current bar is less than the 14-period Average Daily Range (ADR). This feature makes it easier to spot price contractions across all timeframes, which is crucial for timing entries in swing trading.
4. Overhead Supply Detection with Automated Resistance Lines:
The indicator intelligently detects the presence of overhead supply and draws a single resistance line to avoid clutter on the chart. As price breaches the resistance line, the old line is automatically deleted, and a new resistance line is drawn at the appropriate level. This helps you focus on the most relevant resistance levels, reducing noise and improving decision-making.
5. Buyable Gap Up Marker: The indicator highlights bars in blue when a candle opens with a gap that remains unfilled. These bars are potential Buyable Gap Up (BGU) candidates, signaling opportunities for long-side entries.
6. Comprehensive Swing Trading Information Table:
The indicator includes a detailed table that provides essential data for swing trading:
a. Sector and Industry Information: Understand the sector and industry of the ticker to identify stocks within strong sectors.
b. Key Moving Averages Distances (10MA, 21MA, 50MA, 200MA): Quickly assess how far the current price is from key moving averages. The color coding indicates whether the price is near or far from these averages, offering vital visual cues.
c. Price Range Analysis: Compare the current bar's price range with the previous bar's range to spot contraction patterns.
d. ADR (20, 10, 5): Displays the Average Daily Range over the last 20, 10, and 5 periods, crucial for identifying contraction patterns. On the weekly chart, the ADR continues to provide daily chart information.
e. 52-Week High/Low Data: Shows how close the stock is to its 52-week high or low, with color coding to highlight proximity, aiding in the identification of potential breakout or breakdown candidates.
f. 3-Month Price Gain: See the price gain over the last three months, which helps identify stocks with recent momentum.
7. Pocket Pivot Detection with Visual Markers:
Pocket pivots are a powerful bullish signal, especially relevant for swing trading. Pocket pivots are crucial for swing trading and are effective across all timeframes. The indicator marks pocket pivots with circular markers below the price bar:
a. 10-Day Pocket Pivot: Identified when the volume exceeds the maximum selling volume of the last 10 days. These are marked with a blue circle.
b. 5-Day Pocket Pivot: Identified when the volume exceeds the maximum selling volume of the last 5 days. These are marked with a green circle.
The Swing Trend Analyzer is designed to provide traders with the tools they need to succeed in swing and positional trading. Whether you're looking for precise entry points, analyzing relative strength, or identifying key price contractions, this indicator has you covered. Experience the power of advanced technical analysis with the Swing Trend Analyzer and take your trading to the next level.
Multiple Naked LevelsPURPOSE OF THE INDICATOR
This indicator autogenerates and displays naked levels and gaps of multiple types collected into one simple and easy to use indicator.
VALUE PROPOSITION OF THE INDICATOR AND HOW IT IS ORIGINAL AND USEFUL
1) CONVENIENCE : The purpose of this indicator is to offer traders with one coherent and robust indicator providing useful, valuable, and often used levels - in one place.
2) CLUSTERS OF CONFLUENCES : With this indicator it is easy to identify levels and zones on the chart with multiple confluences increasing the likelihood of a potential reversal zone.
THE TYPES OF LEVELS AND GAPS INCLUDED IN THE INDICATOR
The types of levels include the following:
1) PIVOT levels (Daily/Weekly/Monthly) depicted in the chart as: dnPIV, wnPIV, mnPIV.
2) POC (Point of Control) levels (Daily/Weekly/Monthly) depicted in the chart as: dnPoC, wnPoC, mnPoC.
3) VAH/VAL STD 1 levels (Value Area High/Low with 1 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH1/dnVAL1, wnVAH1/wnVAL1, mnVAH1/mnVAL1
4) VAH/VAL STD 2 levels (Value Area High/Low with 2 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH2/dnVAL2, wnVAH2/wnVAL2, mnVAH1/mnVAL2
5) FAIR VALUE GAPS (Daily/Weekly/Monthly) depicted in the chart as: dnFVG, wnFVG, mnFVG.
6) CME GAPS (Daily) depicted in the chart as: dnCME.
7) EQUILIBRIUM levels (Daily/Weekly/Monthly) depicted in the chart as dnEQ, wnEQ, mnEQ.
HOW-TO ACTIVATE LEVEL TYPES AND TIMEFRAMES AND HOW-TO USE THE INDICATOR
You can simply choose which of the levels to be activated and displayed by clicking on the desired radio button in the settings menu.
You can locate the settings menu by clicking into the Object Tree window, left-click on the Multiple Naked Levels and select Settings.
You will then get a menu of different level types and timeframes. Click the checkboxes for the level types and timeframes that you want to display on the chart.
You can then go into the chart and check out which naked levels that have appeared. You can then use those levels as part of your technical analysis.
The levels displayed on the chart can serve as additional confluences or as part of your overall technical analysis and indicators.
In order to back-test the impact of the different naked levels you can also enable tapped levels to be depicted on the chart. Do this by toggling the 'Show tapped levels' checkbox.
Keep in mind however that Trading View can not shom more than 500 lines and text boxes so the indocator will not be able to give you the complete history back to the start for long duration assets.
In order to clean up the charts a little bit there are two additional settings that can be used in the Settings menu:
- Selecting the price range (%) from the current price to be included in the chart. The default is 25%. That means that all levels below or above 20% will not be displayed. You can set this level yourself from 0 up to 100%.
- Selecting the minimum gap size to include on the chart. The default is 1%. That means that all gaps/ranges below 1% in price difference will not be displayed on the chart. You can set the minimum gap size yourself.
BASIC DESCRIPTION OF THE INNER WORKINGS OF THE INDICTATOR
The way the indicator works is that it calculates and identifies all levels from the list of levels type and timeframes above. The indicator then adds this level to a list of untapped levels.
Then for each bar after, it checks if the level has been tapped. If the level has been tapped or a gap/range completely filled, this level is removed from the list so that the levels displayed in the end are only naked/untapped levels.
Below is a descrition of each of the level types and how it is caluclated (algorithm):
PIVOT
Daily, Weekly and Monthly levels in trading refer to significant price points that traders monitor within the context of a single trading day. These levels can provide insights into market behavior and help traders make informed decisions regarding entry and exit points.
Traders often use D/W/M levels to set entry and exit points for trades. For example, entering long positions near support (daily close) or selling near resistance (daily close).
Daily levels are used to set stop-loss orders. Placing stops just below the daily close for long positions or above the daily close for short positions can help manage risk.
The relationship between price movement and daily levels provides insights into market sentiment. For instance, if the price fails to break above the daily high, it may signify bearish sentiment, while a strong breakout can indicate bullish sentiment.
The way these levels are calculated in this indicator is based on finding pivots in the chart on D/W/M timeframe. The level is then set to previous D/W/M close = current D/W/M open.
In addition, when price is going up previous D/W/M open must be smaller than previous D/W/M close and current D/W/M close must be smaller than the current D/W/M open. When price is going down the opposite.
POINT OF CONTROL
The Point of Control (POC) is a key concept in volume profile analysis, which is commonly used in trading.
It represents the price level at which the highest volume of trading occurred during a specific period.
The POC is derived from the volume traded at various price levels over a defined time frame. In this indicator the timeframes are Daily, Weekly, and Montly.
It identifies the price level where the most trades took place, indicating strong interest and activity from traders at that price.
The POC often acts as a significant support or resistance level. If the price approaches the POC from above, it may act as a support level, while if approached from below, it can serve as a resistance level. Traders monitor the POC to gauge potential reversals or breakouts.
The way the POC is calculated in this indicator is by an approximation by analysing intrabars for the respective timeperiod (D/W/M), assigning the volume for each intrabar into the price-bins that the intrabar covers and finally identifying the bin with the highest aggregated volume.
The POC is the price in the middle of this bin.
The indicator uses a sample space for intrabars on the Daily timeframe of 15 minutes, 35 minutes for the Weekly timeframe, and 140 minutes for the Monthly timeframe.
The indicator has predefined the size of the bins to 0.2% of the price at the range low. That implies that the precision of the calulated POC og VAH/VAL is within 0.2%.
This reduction of precision is a tradeoff for performance and speed of the indicator.
This also implies that the bigger the difference from range high prices to range low prices the more bins the algorithm will iterate over. This is typically the case when calculating the monthly volume profile levels and especially high volatility assets such as alt coins.
Sometimes the number of iterations becomes too big for Trading View to handle. In these cases the bin size will be increased even more to reduce the number of iterations.
In such cases the bin size might increase by a factor of 2-3 decreasing the accuracy of the Volume Profile levels.
Anyway, since these Volume Profile levels are approximations and since precision is traded for performance the user should consider the Volume profile levels(POC, VAH, VAL) as zones rather than pin point accurate levels.
VALUE AREA HIGH/LOW STD1/STD2
The Value Area High (VAH) and Value Area Low (VAL) are important concepts in volume profile analysis, helping traders understand price levels where the majority of trading activity occurs for a given period.
The Value Area High/Low is the upper/lower boundary of the value area, representing the highest price level at which a certain percentage of the total trading volume occurred within a specified period.
The VAH/VAL indicates the price point above/below which the majority of trading activity is considered less valuable. It can serve as a potential resistance/support level, as prices above/below this level may experience selling/buying pressure from traders who view the price as overvalued/undervalued
In this indicator the timeframes are Daily, Weekly, and Monthly. This indicator provides two boundaries that can be selected in the menu.
The first boundary is 70% of the total volume (=1 standard deviation from mean). The second boundary is 95% of the total volume (=2 standard deviation from mean).
The way VAH/VAL is calculated is based on the same algorithm as for the POC.
However instead of identifying the bin with the highest volume, we start from range low and sum up the volume for each bin until the aggregated volume = 30%/70% for VAL1/VAH1 and aggregated volume = 5%/95% for VAL2/VAH2.
Then we simply set the VAL/VAH equal to the low of the respective bin.
FAIR VALUE GAPS
Fair Value Gaps (FVG) is a concept primarily used in technical analysis and price action trading, particularly within the context of futures and forex markets. They refer to areas on a price chart where there is a noticeable lack of trading activity, often highlighted by a significant price movement away from a previous level without trading occurring in between.
FVGs represent price levels where the market has moved significantly without any meaningful trading occurring. This can be seen as a "gap" on the price chart, where the price jumps from one level to another, often due to a rapid market reaction to news, events, or other factors.
These gaps typically appear when prices rise or fall quickly, creating a space on the chart where no transactions have taken place. For example, if a stock opens sharply higher and there are no trades at the prices in between the two levels, it creates a gap. The areas within these gaps can be areas of liquidity that the market may return to “fill” later on.
FVGs highlight inefficiencies in pricing and can indicate areas where the market may correct itself. When the market moves rapidly, it may leave behind price levels that traders eventually revisit to establish fair value.
Traders often watch for these gaps as potential reversal or continuation points. Many traders believe that price will eventually “fill” the gap, meaning it will return to those price levels, providing potential entry or exit points.
This indicator calculate FVGs on three different timeframes, Daily, Weekly and Montly.
In this indicator the FVGs are identified by looking for a three-candle pattern on a chart, signalling a discrete imbalance in order volume that prompts a quick price adjustment. These gaps reflect moments where the market sentiment strongly leans towards buying or selling yet lacks the opposite orders to maintain price stability.
The indicator sets the gap to the difference from the high of the first bar to the low of the third bar when price is moving up or from the low of the first bar to the high of the third bar when price is moving down.
CME GAPS (BTC only)
CME gaps refer to price discrepancies that can occur in charts for futures contracts traded on the Chicago Mercantile Exchange (CME). These gaps typically arise from the fact that many futures markets, including those on the CME, operate nearly 24 hours a day but may have significant price movements during periods when the market is closed.
CME gaps occur when there is a difference between the closing price of a futures contract on one trading day and the opening price on the following trading day. This difference can create a "gap" on the price chart.
Opening Gaps: These usually happen when the market opens significantly higher or lower than the previous day's close, often influenced by news, economic data releases, or other market events occurring during non-trading hours.
Gaps can result from reactions to major announcements or developments, such as earnings reports, geopolitical events, or changes in economic indicators, leading to rapid price movements.
The importance of CME Gaps in Trading is the potential for Filling Gaps: Many traders believe that prices often "fill" gaps, meaning that prices may return to the gap area to establish fair value.
This can create potential trading opportunities based on the expectation of gap filling. Gaps can act as significant support or resistance levels. Traders monitor these levels to identify potential reversal points in price action.
The way the gap is identified in this indicator is by checking if current open is higher than previous bar close when price is moving up or if current open is lower than previous day close when price is moving down.
EQUILIBRIUM
Equilibrium in finance and trading refers to a state where supply and demand in a market balance each other, resulting in stable prices. It is a key concept in various economic and trading contexts. Here’s a concise description:
Market Equilibrium occurs when the quantity of a good or service supplied equals the quantity demanded at a specific price level. At this point, there is no inherent pressure for the price to change, as buyers and sellers are in agreement.
Equilibrium Price is the price at which the market is in equilibrium. It reflects the point where the supply curve intersects the demand curve on a graph. At the equilibrium price, the market clears, meaning there are no surplus goods or shortages.
In this indicator the equilibrium level is calculated simply by finding the midpoint of the Daily, Weekly, and Montly candles respectively.
NOTES
1) Performance. The algorithms are quite resource intensive and the time it takes the indicator to calculate all the levels could be 5 seconds or more, depending on the number of bars in the chart and especially if Montly Volume Profile levels are selected (POC, VAH or VAL).
2) Levels displayed vs the selected chart timeframe. On a timeframe smaller than the daily TF - both Daily, Weekly, and Monthly levels will be displayed. On a timeframe bigger than the daily TF but smaller than the weekly TF - the Weekly and Monthly levels will be display but not the Daily levels. On a timeframe bigger than the weekly TF but smaller than the monthly TF - only the Monthly levels will be displayed. Not Daily and Weekly.
CREDITS
The core algorithm for calculating the POC levels is based on the indicator "Naked Intrabar POC" developed by rumpypumpydumpy (https:www.tradingview.com/u/rumpypumpydumpy/).
The "Naked intrabar POC" indicator calculates the POC on the current chart timeframe.
This indicator (Multiple Naked Levels) adds two new features:
1) It calculates the POC on three specific timeframes, the Daily, Weekly, and Monthly timeframes - not only the current chart timeframe.
2) It adds functionaly by calculating the VAL and VAH of the volume profile on the Daily, Weekly, Monthly timeframes .
Futures Settlement [NeoButane]Traders use settlement prices as both support/resistance and as a target for price to trend towards. The intention of this script is to provide possible entry and exit levels for swing and scalp trades by drawing horizontal lines of true settlement prices provided by TradingView.
The settlement price, which is calculated daily, is used to determine the profit/loss of a trader's futures position. Prior to the daily close, price settlement of futures contracts is performed by taking the average of its traded price during a specified period of time.
Usage
The settlement prices, shown as horizontal lines, serve as support or resistance for entry or exit. There are hundreds of ways to combine this with favorite indicators, or it can be used as levels for pure price action traders.
See how settlement price levels can be used in confluence with oscillators.
Configuration
Toggles to show each settlement. Reprint shows prior weeks or months after they've ended. Back-adjusted futures, which affect expired futures price history on continuous futures charts, should only be enabled on non-standard charts to match the user's chart settings.
What this script does
This script plots the daily, weekly, and monthly settlements for futures, including an average for the two most recent weekly or monthly settlements. The weekly settlement uses the last day of the week's daily settlement and the monthly settlement uses the last day of the month's daily settlement. For symbols that do not have settlement prices, which will be almost if not all symbols that are not futures, the settlement price instead becomes price at the last second before the daily/weekly/monthly close. In those cases, this script becomes a tool for automatically plotting daily/weekly/monthly closes.
See below for two different bitcoin charts. The chart on top is a non-futures chart and a futures chart is at the bottom. Note that CME bitcoin futures settle 4 hours (1500 CST) before bitcoin's daily close (UTC).
How this script works
TradingView has a built-in ability to display daily settlements instead of the actual daily close. This can be enabled in chart settings for futures on the daily timeframe and there is an argument for Pine Script to do so as well. Because settlement times are different for multiple products during the day, the script uses the settlement price from daily timeframe, which is guaranteed to be correct because TradingView is wonderful. I accidentally found the undocumented backadjustment and settlement_at_close when I was trying to use ticker.inherit() to create a symbol with its daily close time changed to another symbol's, which I still haven't figured out. TradingView has since added documentation for both of them, but there's still an ambiguous 'etc.' in the description of ticker.inherit() so maybe there's more secret arguments...
The script is able to be used on non-standard charts by using ticker.standard(), but back-adjustment will need to be changed by input to match chart settings.
References
Investopedia explanation of settlement price.
www.investopedia.com
Settlement prices for ES.
www.cmegroup.com
CME summary of settlement price.
www.cmegroup.com
How to enable settlement price as close for daily intervals in TradingView. This does not affect the use of this script.
www.tradingview.com
About back-adjustment for continuous futures charts in TradingView.
www.tradingview.com
OrderBlock Trend (CISD)OrderBlock Trend (CISD) Indicator
Overview:
The "OrderBlock Trend (CISD)" AKA: change in state of delivery by ICT inner circle trader this indicator is designed to help traders identify and visualize market trends based on higher timeframe candle behavior. This script leverages the concept of order blocks, which are price levels where significant buying or selling activity has occurred, to signal potential trend reversals or continuations. By analyzing bullish and bearish order blocks on a higher timeframe, the indicator provides visual cues and statistical insights into the market's current trend dynamics.
Key Features:
Higher Timeframe Analysis: The indicator uses a higher timeframe (e.g., Daily) to assess the trend direction based on the open and close prices of candles. This approach helps in identifying more significant and reliable trend changes, filtering out noise from lower timeframes.
Bullish and Bearish Order Blocks: The script detects the first bullish or bearish candle on the selected higher timeframe and uses these candles as reference points (order blocks) to determine the trend direction. A bullish trend is indicated when the current price is above the last bearish order block's open price, and a bearish trend is indicated when the price is below the last bullish order block's open price.
Visual Trend Indication: The indicator visually represents the trend using background colors and plot shapes:
A green background and a square shape above the bars indicate a bullish trend.
A red background and a square shape above the bars indicate a bearish trend.
Candle Count and Statistics: The script keeps track of the number of up and down candles during bullish and bearish trends, providing percentages of up and down candles in each trend. This data is displayed in a table, giving traders a quick overview of market sentiment during each trend phase.
User Customization: The higher timeframe can be adjusted according to the trader's preference, allowing flexibility in trend analysis based on different time horizons.
Concepts and Calculations:
The "OrderBlock Trend (CISD)" indicator is based on the concept of order blocks, a key area where institutional traders are believed to place large orders, creating significant support or resistance levels. By identifying these blocks on a higher timeframe, the indicator aims to highlight potential trend reversals or continuations. The use of higher timeframe data helps filter out minor fluctuations and focus on more meaningful price movements.
The candle count and percentage calculations provide additional context, allowing traders to understand the proportion of bullish or bearish candles within each trend. This information can be useful for assessing the strength and consistency of a trend.
How to Use:
Select the Higher Timeframe: Choose the higher timeframe (e.g., Daily) that best suits your trading strategy. The default setting is "D" (Daily), but it can be adjusted to other timeframes as needed.
Interpret the Trend Signals:
A green background indicates a bullish trend, while a red background indicates a bearish trend. The corresponding square shapes above the bars reinforce these signals.
Use the information on the proportion of up and down candles during each trend to gauge the trend's strength and consistency.
Trading Decisions: The indicator can be used in conjunction with other technical analysis tools and indicators to make informed trading decisions. It is particularly useful for identifying trend reversals and potential entry or exit points based on the behavior of higher timeframe order blocks.
Customization and Optimization: Experiment with different higher timeframes and settings to optimize the indicator for your specific trading style and preferences.
Conclusion:
The "OrderBlock Trend (CISD)" indicator offers a comprehensive approach to trend analysis, combining the power of higher timeframe order blocks with clear visual cues and statistical insights. By understanding the underlying concepts and utilizing the provided features, traders can enhance their trend detection and decision-making processes in the markets.
Disclaimer:
This indicator is intended for educational purposes and should be used in conjunction with other analysis methods. Always perform your own research and risk management before making trading decisions.
Some known bugs when you switch to lower timeframe while using daily timeframe data it didn't use the daily candle close to establish the trend change but your current time frame If some of you know how to fix it that would be great if you help me to I would try my best to fix this in the future :) credit to ChatGPT 4o
ADR (Log Scale) with MTF LabelsHere's a detailed presentation of the Average Daily Range (ADR) indicator, with a focus on its advantages compared to the classic ADR, its unique features, utility, and interpretation:
Advantages Compared to Classic ADR
1. Logarithmic Scale: Unlike the classic ADR, which uses a linear scale, this version uses a logarithmic scale for calculations. This approach provides a more accurate representation of relative price movements, especially for assets with large price ranges.
2. Multi-Timeframe Analysis: This enhanced ADR indicator allows traders to view daily, weekly, and monthly ADRs simultaneously. This multi-timeframe capability helps traders understand volatility trends over different periods, offering a more comprehensive market analysis.
3. Optional Smoothing: The inclusion of an optional smoothing feature (using Exponential Moving Average, EMA) helps reduce noise in the data. This makes the indicator more reliable by filtering out short-term fluctuations and highlighting the underlying volatility trend.
4. Information Display Labels: The indicator includes labels that display precise ADR values for each timeframe directly on the chart. This feature provides immediate, clear insights without requiring additional calculations or references.
Utility of the Indicator
1. Volatility Analysis: The ADR indicator is essential for assessing market volatility. By showing the average daily price range, it helps traders gauge how much an asset typically moves within a day, week, or month.
2. Risk Management: ADR levels can be used to set stop-loss points, improving risk management strategies. Knowing the average range helps traders avoid setting stops too close to the current price, which might otherwise be triggered by normal market fluctuations.
3. Setting Realistic Targets: By understanding the average daily range, traders can set more realistic profit targets. This helps in avoiding over-ambitious goals that are unlikely to be reached within the typical market movement.
4. Identifying Entry and Exit Points: The ADR can signal potential entry and exit points. For example, if the price approaches the upper or lower ADR boundary, it might indicate an overbought or oversold condition, respectively.
Interpretation and Examples
1. Increasing Volatility: If the ADR is increasing, it indicates rising market volatility. Traders might adjust their strategies accordingly, such as widening their stop-losses to accommodate larger price swings.
2. Range Breakout: If the price significantly exceeds the daily ADR, it may signal a strong trend or exceptional market movement. Traders can use this information to stay in the trade longer or to anticipate a potential reversal.
3. Mean Reversion: Prices often revert to the ADR mean. A trader might consider mean reversion trades when the price approaches the extremes of the ADR range, expecting it to move back towards the average.
4. Multi-Timeframe Comparison: If the daily ADR is higher than the weekly ADR, it may indicate unusually high short-term volatility. This can be a signal for traders to be cautious or to capitalize on the increased movement.
While the ADR indicator provides valuable insights into market volatility and can significantly enhance trading strategies, it is essential to remember that no indicator is foolproof. Market conditions can change rapidly, and past performance is not always indicative of future results. Traders should use the ADR indicator in conjunction with other tools and follow sound risk management practices to protect their capital.
Important Levels by Sandun Kolambage
### Pine Script Indicator: Important Levels by Sandun Kolambage
#### Description
Introducing our new pivot point and high/low indicator for TradingView! This indicator is designed to help traders identify key levels of support and resistance across different timeframes, from daily to yearly. By analyzing historical data and market trends, our indicator displays the most important pivot points and high/low levels, giving you a better understanding of market dynamics and potential trading opportunities.
Whether you're a day trader, swing trader, or long-term investor, our indicator can help you optimize your trading strategy and achieve your financial goals. Install our indicator on TradingView today and start taking advantage of these important levels!
#### Key Features
- **Daily, Weekly, Monthly, and Yearly Levels:** Automatically plots the open, high, low, and close prices for different timeframes to help traders identify significant levels.
- **Pivot Points:** Calculates and displays pivot points for weekly, monthly, and yearly timeframes, providing additional support and resistance levels.
- **Customizable Line Styles:** Offers options to customize the appearance of the lines (solid, dashed, or dotted) for better visualization.
- **Conditional Coloring:** Uses color coding to highlight the relationship between different timeframe closes, making it easy to spot important levels.
#### How It Works
1. **Daily, Weekly, Monthly, and Yearly Levels:**
- The indicator uses `request.security` to fetch and display open, high, low, and close prices for daily, weekly, monthly, and yearly timeframes.
- Lines are plotted at these key levels with colors indicating their relationship to closes of other timeframes.
2. **Pivot Points:**
- Pivot points are calculated using the formula \((High + Low + Close) / 3\).
- These pivot points are plotted on the chart and labeled clearly to indicate potential support and resistance areas.
3. **Customizable Line Styles:**
- Users can select from solid, dashed, or dotted lines to represent the key levels and pivot points for better clarity and personal preference.
4. **Conditional Coloring:**
- The indicator applies conditional coloring to the lines based on the comparison of current close prices across different timeframes. Yellow indicates lower closes, and red indicates higher closes, making it easy to identify important price levels quickly.
#### Usage Instructions
1. **Enable Key Levels:**
- Toggle the "Daily Weekly Monthly High/Low" option to display or hide the respective levels.
- Select your preferred line style (solid, dashed, dotted) for better visibility.
2. **Display Pivot Points:**
- Toggle the "Pivot" option to show or hide the weekly, monthly, and yearly pivot points on the chart.
3. **Interpret Color Coding:**
- Yellow lines indicate levels where the close price is lower compared to a specific timeframe close.
- Red lines indicate levels where the close price is higher compared to a specific timeframe close.
- Specific colors for yearly levels and pivots are used to distinguish them clearly on the chart.
By following these guidelines, traders can effectively use this indicator to identify critical price levels and make informed trading decisions.
Overlay-ChartOverlay-Chart Indicator
The Overlay-Chart Indicator is an advanced script designed for scalpers and day traders, providing comprehensive insights into daily, weekly, monthly, and previous period price levels. This indicator helps traders visualize critical price levels and make informed decisions based on historical and current data.
Key Features:
Drawing Future Lines with Labels:
The script uses the drawFutureLine function to plot future price levels with customizable labels. This helps traders anticipate and react to key price points.
Daily Levels:
Displays the open, low, high, close, and equilibrium (EQ) prices for the current day. This provides a quick reference for daily trading ranges and significant price points.
Weekly Levels:
Shows the open, low, high, close, and equilibrium prices for the current week, offering a broader view of market trends and key weekly price levels.
Monthly Levels:
Illustrates the open, low, high, close, and equilibrium prices for the current month, enabling traders to understand long-term trends and significant monthly price points.
Previous Day, Week, and Month Levels:
Historical data from previous periods (day, week, month) is displayed, allowing traders to compare past and present price levels to identify patterns and potential support/resistance levels.
Customizable Colors:
Traders can choose colors for daily, weekly, monthly, and previous day levels to enhance chart readability and personalization.
Flexible Display Options:
Users can select which price levels (Open, Low, High, Close, EQ) to display for each period (daily, weekly, monthly, previous day, week, month).
How It Works:
The script fetches historical and current price data using the request.security function. It then uses these data points to draw lines on the chart representing significant price levels. These lines are drawn into the future to help traders visualize where these levels will be in upcoming bars. Labels are added to these lines for easy identification.
How to Use:
Configure Inputs:
Enable or disable the display of daily, weekly, monthly, and previous period levels using the input options.
Customize colors for different levels to match your charting preferences.
Analyze Key Levels:
Observe the plotted lines and labels to understand critical price points for the current and past periods.
Use this information to identify potential entry and exit points, support and resistance levels, and overall market trends.
Future Planned Features:
The script includes several features that are currently commented out but planned for future updates:
Volume Weighted Average Price (VWAP):
Display VWAP for daily, weekly, and monthly periods to provide an average price based on volume.
Point of Control (POC):
Show the price level with the highest trading volume for daily, weekly, and monthly periods.
Value Area High (VAH) and Low (VAL):
Display the upper and lower boundaries of the value area where most trading activity occurs for daily, weekly, and monthly periods.
These enhancements will offer additional insights into volume distribution and market sentiment, further improving the utility of the Overlay-Chart Indicator for traders.
This script is specifically designed to cater to the needs of scalpers and day traders who require precise, visually intuitive data for their trading strategies. The planned features will further enhance its effectiveness, providing a comprehensive tool for market analysis.
[Suitable Hope] Crypto Upside Model 3.0The "Crypto Upside Model 3.0" indicator dynamically calculates the potential price of any cryptocurrency based on various percentages of Ethereum or Bitcoin's market capitalization.
By fetching and analyzing marketcap data from TradingView sources, it allows traders to visualize potential price targets if their chosen cryptocurrency reaches specific market dominance levels. This tool is designed for daily timeframe analysis and can be used to set informed price expectations and strategic investment goals, providing valuable insights for long-term investment planning.
Why using the Crypto Upside Model 3.0?
Strategic Planning: Helps traders and investors set realistic price targets and investment goals by visualizing potential market cap scenarios.
Informed Decision-Making: Provides a data-driven approach to understanding how a cryptocurrency might perform relative to major assets like Bitcoin and Ethereum.
Customizable Analysis: Allows users to choose different comparison assets (ETH or BTC) and visualize various market cap dominance percentages, offering tailored insights.
Daily Timeframe Focus: Ideal for swing traders and long-term investors who operate on a daily analysis timeframe, providing relevant and actionable data.
Bull Markets: Identify potential price targets if your cryptocurrency's market cap increases significantly.
Bear Markets: Assess how much value could be retained relative to major cryptocurrencies.
Strategic Entry/Exit Points: Use the visualized targets to plan entry or exit points in your trading strategy.
Comparative Advantage
Dynamic Adaptation: Unlike fixed indicators, this tool adapts to any active chart, making it versatile for multiple cryptocurrencies.
Market Cap Insights: Provides a unique perspective by linking price targets to market cap dominance, a critical factor in the crypto market.
User Instructions
Setup: Add the " Upside Model 3.0" indicator to your TradingView chart.
Configuration: Use the input settings to select the comparison cryptocurrency (ETH or BTC) and enable the desired market cap percentage plots.
Analysis: The indicator will display potential price targets based on the selected market cap percentages, providing a visual guide for setting price expectations.
Limitations
Marketcap Data Availability: The indicator relies on marketcap data from TradingView, which may not be available for all cryptocurrencies. If the data is unavailable, the indicator will not function for that asset. This tool is more likely to work with older, established cryptocurrencies, as marketcap data for newer cryptocurrencies may not yet be available.
Daily Timeframe Restriction: The indicator is designed to work exclusively on the daily timeframe, limiting its applicability for intraday trading.
Assumptions of Market Dynamics: The calculations assume a direct correlation between market dominance and price, which may not account for other market dynamics and external factors influencing prices.
Data Accuracy: The accuracy of the indicator depends on the reliability of the data provided by TradingView, which may sometimes experience delays or inaccuracies.
Currently available cryptocurrencies: Bitcoin, Ethereum, Solana, Binance Coin, Cardano, Ripple, Polkadot, Avalanche, Chainlink, Litecoin, Dogecoin, Terra, Uniswap, VeChain, Stellar, Internet Computer, Hedera, Filecoin, Monero, Aave, TRON, NEAR Protocol, Compound, Maker,... For all compatible cryptocurrencies, please consult CRYPTOCAP's documentation.
Final notes
Although various sources ask a payment or user data for similar kind of private indicators, this one is entirely free and open source. "Uncanny" isn't it? I hope this indicator will provide you value. Feel free to leave a message if you have any questions or constructive feedback.
Examples of how I use this indicator
When using ETH's historical price as a reference compared to Bitcoin's marketcap, we can notice that price generally has been held between the +-30% and 50% lines of BTC's marketcap. If history is repeating again, we can expect major resistances around the 50% looking ahead into the future. This for me would be a great area to potentially reduce my ETH spot position.
When using SOL's historical price action, we can notice that the 15% line of ETH's marketcap has been a top in the previous cycle. Today SOL (July 2024), is back at this level. Could this be a top again or could price break this 15% level and head perhaps towards 30% which currently sits around $260? Time will tell.
These are 2 simple example of how I interpret the data. I'm keen to hear what other findings with other pairs you can find.
Dynamic Support & Resistance Tracker with MTFDynamic Support & Resistance Tracker with Weekly, Monthly & Daily Levels
The Dynamic Support & Resistance Tracker is designed to help traders identify key support and resistance levels across multiple timeframes, enhancing market analysis and decision-making. This indicator calculates and plots support and resistance levels for daily, weekly, and monthly periods, along with extension lines that provide insights into potential price targets.
Key Features:
Multi-Timeframe Analysis:
Daily Levels: Identifies the high, low, and midpoint for each trading day. These levels help traders recognize important price points for short-term trading strategies.
Weekly Levels: Plots the high, low, and midpoint for each week. This feature is valuable for swing traders who need to understand broader market trends.
Monthly Levels: Displays the high, low, and midpoint for each month, which is essential for long-term investors.
Extension Lines:
Calculates extension lines beyond the standard support and resistance levels to help anticipate potential price targets and reversals. These extensions are based on the distance between the high/low and midpoint levels.
Real-Time Updates:
Automatically updates the levels based on the most recent market data, ensuring traders have the most current information for their analysis.
Clear Visuals:
The indicator provides clearly labeled and color-coded lines for easy identification of key levels, improving the visual clarity of market analysis.
How It Works:
Daily, Weekly, and Monthly Levels: The indicator calculates the high, low, and midpoint levels for daily, weekly, and monthly timeframes and plots them on the chart. These levels serve as potential areas of support and resistance where price action may react.
Extension Lines: The extension lines are calculated based on the distance between the high/low and midpoint levels, projecting potential areas where price may find support or resistance beyond the standard levels.
Automatic Updates: The indicator continuously updates the plotted levels based on the latest market data, providing real-time insights.
Benefits:
Improved Market Analysis: By providing a clear view of support and resistance levels across multiple timeframes, this indicator helps traders understand market trends and price movements more effectively.
Informed Trading Decisions: The detailed plotting of levels and extensions allows traders to make more informed decisions, enhancing their trading strategies.
Versatility: Suitable for various trading styles, including intraday trading, swing trading, and long-term investing.
Instructions for Use:
Analyze the Levels: Observe the plotted high, low, and mid-levels for daily, weekly, and monthly timeframes.
Plan Your Trades: Use the identified support and resistance levels to set your entry and exit points, stop-losses, and profit targets.
Monitor the Market: Stay updated with real-time adjustments of the levels, ensuring you always have the latest market information.
Note: This indicator is designed to enhance your trading analysis by providing clear and reliable support and resistance levels. However, it should be used as part of a comprehensive trading strategy and not as the sole basis for trading decisions.
RiskMetrics█ OVERVIEW
This library is a tool for Pine programmers that provides functions for calculating risk-adjusted performance metrics on periodic price returns. The calculations used by this library's functions closely mirror those the Broker Emulator uses to calculate strategy performance metrics (e.g., Sharpe and Sortino ratios) without depending on strategy-specific functionality.
█ CONCEPTS
Returns, risk, and volatility
The return on an investment is the relative gain or loss over a period, often expressed as a percentage. Investment returns can originate from several sources, including capital gains, dividends, and interest income. Many investors seek the highest returns possible in the quest for profit. However, prudent investing and trading entails evaluating such returns against the associated risks (i.e., the uncertainty of returns and the potential for financial losses) for a clearer perspective on overall performance and sustainability.
One way investors and analysts assess the risk of an investment is by analyzing its volatility , i.e., the statistical dispersion of historical returns. Investors often use volatility in risk estimation because it provides a quantifiable way to gauge the expected extent of fluctuation in returns. Elevated volatility implies heightened uncertainty in the market, which suggests higher expected risk. Conversely, low volatility implies relatively stable returns with relatively minimal fluctuations, thus suggesting lower expected risk. Several risk-adjusted performance metrics utilize volatility in their calculations for this reason.
Risk-free rate
The risk-free rate represents the rate of return on a hypothetical investment carrying no risk of financial loss. This theoretical rate provides a benchmark for comparing the returns on a risky investment and evaluating whether its excess returns justify the risks. If an investment's returns are at or below the theoretical risk-free rate or the risk premium is below a desired amount, it may suggest that the returns do not compensate for the extra risk, which might be a call to reassess the investment.
Since the risk-free rate is a theoretical concept, investors often utilize proxies for the rate in practice, such as Treasury bills and other government bonds. Conventionally, analysts consider such instruments "risk-free" for a domestic holder, as they are a form of government obligation with a low perceived likelihood of default.
The average yield on short-term Treasury bills, influenced by economic conditions, monetary policies, and inflation expectations, has historically hovered around 2-3% over the long term. This range also aligns with central banks' inflation targets. As such, one may interpret a value within this range as a minimum proxy for the risk-free rate, as it may correspond to the minimum rate required to maintain purchasing power over time.
The built-in Sharpe and Sortino ratios that strategies calculate and display in the Performance Summary tab use a default risk-free rate of 2%, and the metrics in this library's example code use the same default rate. Users can adjust this value to fit their analysis needs.
Risk-adjusted performance
Risk-adjusted performance metrics gauge the effectiveness of an investment by considering its returns relative to the perceived risk. They aim to provide a more well-rounded picture of performance by factoring in the level of risk taken to achieve returns. Investors can utilize such metrics to help determine whether the returns from an investment justify the risks and make informed decisions.
The two most commonly used risk-adjusted performance metrics are the Sharpe ratio and the Sortino ratio.
1. Sharpe ratio
The Sharpe ratio , developed by Nobel laureate William F. Sharpe, measures the performance of an investment compared to a theoretically risk-free asset, adjusted for the investment risk. The ratio uses the following formula:
Sharpe Ratio = (𝑅𝑎 − 𝑅𝑓) / 𝜎𝑎
Where:
• 𝑅𝑎 = Average return of the investment
• 𝑅𝑓 = Theoretical risk-free rate of return
• 𝜎𝑎 = Standard deviation of the investment's returns (volatility)
A higher Sharpe ratio indicates a more favorable risk-adjusted return, as it signifies that the investment produced higher excess returns per unit of increase in total perceived risk.
2. Sortino ratio
The Sortino ratio is a modified form of the Sharpe ratio that only considers downside volatility , i.e., the volatility of returns below the theoretical risk-free benchmark. Although it shares close similarities with the Sharpe ratio, it can produce very different values, especially when the returns do not have a symmetrical distribution, since it does not penalize upside and downside volatility equally. The ratio uses the following formula:
Sortino Ratio = (𝑅𝑎 − 𝑅𝑓) / 𝜎𝑑
Where:
• 𝑅𝑎 = Average return of the investment
• 𝑅𝑓 = Theoretical risk-free rate of return
• 𝜎𝑑 = Downside deviation (standard deviation of negative excess returns, or downside volatility)
The Sortino ratio offers an alternative perspective on an investment's return-generating efficiency since it does not consider upside volatility in its calculation. A higher Sortino ratio signifies that the investment produced higher excess returns per unit of increase in perceived downside risk.
█ CALCULATIONS
Return period detection
Calculating risk-adjusted performance metrics requires collecting returns across several periods of a given size. Analysts may use different period sizes based on the context and their preferences. However, two widely used standards are monthly or daily periods, depending on the available data and the investment's duration. The built-in ratios displayed in the Strategy Tester utilize returns from either monthly or daily periods in their calculations based on the following logic:
• Use monthly returns if the history of closed trades spans at least two months.
• Use daily returns if the trades span at least two days but less than two months.
• Do not calculate the ratios if the trade data spans fewer than two days.
This library's `detectPeriod()` function applies related logic to available chart data rather than trade data to determine which period is appropriate:
• It returns true if the chart's data spans at least two months, indicating that it's sufficient to use monthly periods.
• It returns false if the chart's data spans at least two days but not two months, suggesting the use of daily periods.
• It returns na if the length of the chart's data covers less than two days, signifying that the data is insufficient for meaningful ratio calculations.
It's important to note that programmers should only call `detectPeriod()` from a script's global scope or within the outermost scope of a function called from the global scope, as it requires the time value from the first bar to accurately measure the amount of time covered by the chart's data.
Collecting periodic returns
This library's `getPeriodicReturns()` function tracks price return data within monthly or daily periods and stores the periodic values in an array . It uses a `detectPeriod()` call as the condition to determine whether each element in the array represents the return over a monthly or daily period.
The `getPeriodicReturns()` function has two overloads. The first overload requires two arguments and outputs an array of monthly or daily returns for use in the `sharpe()` and `sortino()` methods. To calculate these returns:
1. The `percentChange` argument should be a series that represents percentage gains or losses. The values can be bar-to-bar return percentages on the chart timeframe or percentages requested from a higher timeframe.
2. The function compounds all non-na `percentChange` values within each monthly or daily period to calculate the period's total return percentage. When the `percentChange` represents returns from a higher timeframe, ensure the requested data includes gaps to avoid compounding redundant values.
3. After a period ends, the function queues the compounded return into the array , removing the oldest element from the array when its size exceeds the `maxPeriods` argument.
The resulting array represents the sequence of closed returns over up to `maxPeriods` months or days, depending on the available data.
The second overload of the function includes an additional `benchmark` parameter. Unlike the first overload, this version tracks and collects differences between the `percentChange` and the specified `benchmark` values. The resulting array represents the sequence of excess returns over up to `maxPeriods` months or days. Passing this array to the `sharpe()` and `sortino()` methods calculates generalized Information ratios , which represent the risk-adjustment performance of a sequence of returns compared to a risky benchmark instead of a risk-free rate. For consistency, ensure the non-na times of the `benchmark` values align with the times of the `percentChange` values.
Ratio methods
This library's `sharpe()` and `sortino()` methods respectively calculate the Sharpe and Sortino ratios based on an array of returns compared to a specified annual benchmark. Both methods adjust the annual benchmark based on the number of periods per year to suit the frequency of the returns:
• If the method call does not include a `periodsPerYear` argument, it uses `detectPeriod()` to determine whether the returns represent monthly or daily values based on the chart's history. If monthly, the method divides the `annualBenchmark` value by 12. If daily, it divides the value by 365.
• If the method call does specify a `periodsPerYear` argument, the argument's value supersedes the automatic calculation, facilitating custom benchmark adjustments, such as dividing by 252 when analyzing collected daily stock returns.
When the array passed to these methods represents a sequence of excess returns , such as the result from the second overload of `getPeriodicReturns()`, use an `annualBenchmark` value of 0 to avoid comparing those excess returns to a separate rate.
By default, these methods only calculate the ratios on the last available bar to minimize their resource usage. Users can override this behavior with the `forceCalc` parameter. When the value is true , the method calculates the ratio on each call if sufficient data is available, regardless of the bar index.
Look first. Then leap.
█ FUNCTIONS & METHODS
This library contains the following functions:
detectPeriod()
Determines whether the chart data has sufficient coverage to use monthly or daily returns
for risk metric calculations.
Returns: (bool) `true` if the period spans more than two months, `false` if it otherwise spans more
than two days, and `na` if the data is insufficient.
getPeriodicReturns(percentChange, maxPeriods)
(Overload 1 of 2) Tracks periodic return percentages and queues them into an array for ratio
calculations. The span of the chart's historical data determines whether the function uses
daily or monthly periods in its calculations. If the chart spans more than two months,
it uses "1M" periods. Otherwise, if the chart spans more than two days, it uses "1D"
periods. If the chart covers less than two days, it does not store changes.
Parameters:
percentChange (float) : (series float) The change percentage. The function compounds non-na values from each
chart bar within monthly or daily periods to calculate the periodic changes.
maxPeriods (simple int) : (simple int) The maximum number of periodic returns to store in the returned array.
Returns: (array) An array containing the overall percentage changes for each period, limited
to the maximum specified by `maxPeriods`.
getPeriodicReturns(percentChange, benchmark, maxPeriods)
(Overload 2 of 2) Tracks periodic excess return percentages and queues the values into an
array. The span of the chart's historical data determines whether the function uses
daily or monthly periods in its calculations. If the chart spans more than two months,
it uses "1M" periods. Otherwise, if the chart spans more than two days, it uses "1D"
periods. If the chart covers less than two days, it does not store changes.
Parameters:
percentChange (float) : (series float) The change percentage. The function compounds non-na values from each
chart bar within monthly or daily periods to calculate the periodic changes.
benchmark (float) : (series float) The benchmark percentage to compare against `percentChange` values.
The function compounds non-na values from each bar within monthly or
daily periods and subtracts the results from the compounded `percentChange` values to
calculate the excess returns. For consistency, ensure this series has a similar history
length to the `percentChange` with aligned non-na value times.
maxPeriods (simple int) : (simple int) The maximum number of periodic excess returns to store in the returned array.
Returns: (array) An array containing monthly or daily excess returns, limited
to the maximum specified by `maxPeriods`.
method sharpeRatio(returnsArray, annualBenchmark, forceCalc, periodsPerYear)
Calculates the Sharpe ratio for an array of periodic returns.
Callable as a method or a function.
Namespace types: array
Parameters:
returnsArray (array) : (array) An array of periodic return percentages, e.g., returns over monthly or
daily periods.
annualBenchmark (float) : (series float) The annual rate of return to compare against `returnsArray` values. When
`periodsPerYear` is `na`, the function divides this value by 12 to calculate a
monthly benchmark if the chart's data spans at least two months or 365 for a daily
benchmark if the data otherwise spans at least two days. If `periodsPerYear`
has a specified value, the function divides the rate by that value instead.
forceCalc (bool) : (series bool) If `true`, calculates the ratio on every call. Otherwise, ratio calculation
only occurs on the last available bar. Optional. The default is `false`.
periodsPerYear (simple int) : (simple int) If specified, divides the annual rate by this value instead of the value
determined by the time span of the chart's data.
Returns: (float) The Sharpe ratio, which estimates the excess return per unit of total volatility.
method sortinoRatio(returnsArray, annualBenchmark, forceCalc, periodsPerYear)
Calculates the Sortino ratio for an array of periodic returns.
Callable as a method or a function.
Namespace types: array
Parameters:
returnsArray (array) : (array) An array of periodic return percentages, e.g., returns over monthly or
daily periods.
annualBenchmark (float) : (series float) The annual rate of return to compare against `returnsArray` values. When
`periodsPerYear` is `na`, the function divides this value by 12 to calculate a
monthly benchmark if the chart's data spans at least two months or 365 for a daily
benchmark if the data otherwise spans at least two days. If `periodsPerYear`
has a specified value, the function divides the rate by that value instead.
forceCalc (bool) : (series bool) If `true`, calculates the ratio on every call. Otherwise, ratio calculation
only occurs on the last available bar. Optional. The default is `false`.
periodsPerYear (simple int) : (simple int) If specified, divides the annual rate by this value instead of the value
determined by the time span of the chart's data.
Returns: (float) The Sortino ratio, which estimates the excess return per unit of downside
volatility.
ICT IPDA Liquidity Matrix By AlgoCadosThe ICT IPDA Liquidity Matrix by AlgoCados is a sophisticated trading tool that integrates the principles of the Interbank Price Delivery Algorithm (IPDA), as taught by The Inner Circle Trader (ICT). This indicator is meticulously designed to support traders in identifying key institutional levels and liquidity zones, enhancing their trading strategies with data-driven insights. Suitable for both day traders and swing traders, the tool is optimized for high-frequency and positional trading, providing a robust framework for analyzing market dynamics across multiple time horizons.
# Key Features
Multi-Time Frame Analysis
High Time Frame (HTF) Levels : The indicator tracks critical trading levels over multiple days, specifically at 20, 40, and 60-day intervals. This functionality is essential for identifying long-term trends and significant support and resistance levels that aid in strategic decision-making for swing traders and positional traders.
Low Time Frame (LTF) Levels : It monitors price movements within 20, 40, and 60-hour intervals on lower time frames. This granularity provides a detailed view of intraday price actions, which is crucial for scalping and short-term trading strategies favored by day traders.
Daily Open Integration : The indicator includes the daily opening price, providing a crucial reference point that reflects the market's initial sentiment. This feature helps traders assess the market's direction and volatility, enabling them to make informed decisions based on the day's early movements, which is particularly useful for day trading strategies.
IPDA Reference Points : By leveraging IPDA's 20, 40, and 60-period lookbacks, the tool identifies Key Highs and Lows, which are used by IPDA as Draw On Liquidity. IPDA is an electronic and algorithmic system engineered for achieving price delivery efficiency, as taught by ICT. These reference points serve as benchmarks for understanding institutional trading behavior, allowing traders to align their strategies with the dominant market forces and recognize institutional key levels.
Dynamic Updates and Overlap Management : The indicator is updated daily at the beginning of a new daily candle with the latest market data, ensuring that traders operate with the most current information. It also features intelligent overlap management that prioritizes the most relevant levels based on the timeframe hierarchy, reducing visual clutter and enhancing chart readability.
Comprehensive Customization Options : Traders can tailor the indicator to their specific needs through an extensive input menu. This includes toggles for visibility, line styles, color selections, and label display preferences. These customization options ensure that the tool can adapt to various trading styles and preferences, enhancing user experience and analytical capabilities.
User-Friendly Interface : The tool is designed with a user-friendly interface that includes clear, concise labels for all significant levels. It supports various font families and sizes, making it easier to interpret and act upon the displayed data, ensuring that traders can focus on making informed trading decisions without being overwhelmed by unnecessary information.
# Usage Note
The indicator is segmented into two key functionalities:
LTF Displays : The Low Time Frame (LTF) settings are exclusive to timeframes up to 1 hour, providing detailed analysis for intraday traders. This is crucial for traders who need precise and timely data to make quick decisions within the trading day.
HTF Displays : The High Time Frame (HTF) settings apply to the daily timeframe and any shorter intervals, allowing for comprehensive analysis over extended periods. This is beneficial for swing traders looking to identify broader trends and market directions.
# Inputs and Configurations
BINANCE:BTCUSDT
Offset: Adjustable setting to shift displayed data horizontally for better visibility, allowing traders to view past levels and make informed decisions based on historical data.
Label Styles: Choose between compact or verbose label formats for different levels, offering flexibility in how much detail is displayed on the chart.
Daily Open Line: Customizable line style and color for the daily opening price, providing a clear visual reference for the start of the trading day.
HTF Levels: Configurable high and low lines for HTF with options for style and color customization, allowing traders to highlight significant levels in a way that suits their trading style.
LTF Levels: Similar customization options for LTF levels, ensuring flexibility in how data is presented, making it easier for traders to focus on the most relevant intraday levels.
Text Utils: Settings for font family, size, and text color, allowing for personalized display preferences and ensuring that the chart is both informative and aesthetically pleasing.
# Advanced Features
Overlap Management : The script intelligently handles overlapping levels, particularly where multiple timeframes intersect, by prioritizing the more significant levels and removing redundant ones. This ensures that the charts remain clear and focused on the most critical data points, allowing traders to concentrate on the most relevant market information.
Real-Time Updates : The indicator updates its calculations at the start of each new daily bar, incorporating the latest market data to provide timely and accurate trading signals. This real-time updating is crucial for traders who rely on up-to-date information to execute their strategies effectively and make informed trading decisions.
# Example Use Cases
Scalpers/Day traders: Can utilize the LTF features to make rapid decisions based on hourly market movements, identifying short-term trading opportunities with precision.
Swing Traders: Will benefit from the HTF analysis to identify broader trends and key levels that influence longer-term market movements, enabling them to capture significant market swings.
By providing a clear, detailed view of key market dynamics, the ICT IPDA Liquidity Matrix by AlgoCados empowers traders to make more informed and effective trading decisions, aligning with institutional trading methodologies and enhancing their market understanding.
# Usage Disclaimer
This tool is designed to assist in trading decisions, but it should be used in conjunction with other analysis methods and risk management strategies. Trading involves significant risk, and it is essential to understand the market conditions thoroughly before making trading decisions.
ATR Price Range Prediction V.2### ATR Price Range Prediction V.2
This script calculates the expected high and low prices for the current day based on the Average True Range (ATR) and displays the proportion of days where the daily range (high - low) is greater than or equal to the ATR. Additionally, the script provides an option to adjust the size of the text displayed in the top-right corner of the chart.
#### How It Works
1. **ATR Calculation**: The script calculates the ATR for a specified period (`atrPeriod`). ATR is a measure of volatility that represents the average range between the high and low prices over a specified number of periods.
2. **Expected High and Low Calculation**:
- **Expected High**: Calculated by adding the ATR value to the low price of the current day.
- **Expected Low**: Calculated by subtracting the ATR value from the high price of the current day.
3. **Proportion Calculation**: The script calculates the proportion of days where the daily range (high - low) is greater than or equal to the ATR value. This proportion is updated in real-time as new data comes in.
4. **Table Display**: Instead of displaying labels on each candle, the script shows the expected high, expected low, and the calculated proportion in a table located at the top-right corner of the chart. The size of the text in this table can be adjusted using the `Table Size` input.
5. **Color Coding**: The script changes the color of the bars to yellow if the daily range is greater than or equal to the ATR value, making it easy to identify these bars visually.
#### How to Use
- **ATR Period (`atrPeriod`)**: Adjust the period for the ATR calculation using the input parameter. The default value is 14.
- **Table Size (`tableSizeOption`)**: Choose the size of the text displayed in the table. Options include `tiny`, `small`, `normal`, `large`, and `huge`.
- **Expected High and Low**: Use the green and red lines to identify potential target prices or stop-loss levels for your trades. The green line represents the expected high, and the red line represents the expected low.
- **Proportion**: The table in the top-right corner of the chart shows the proportion of days where the daily range is greater than or equal to the ATR value. This can provide insight into the volatility of the asset.
- **Color Coding**: Yellow bars indicate days where the daily range is greater than or equal to the ATR value.
---
### ภาษาไทย
### ATR คาดการณ์ราคาสูงสุดและต่ำสุด พร้อมสัดส่วน
สคริปต์นี้คำนวณราคาสูงสุดและต่ำสุดที่คาดการณ์สำหรับวันปัจจุบันโดยอิงจากค่าเฉลี่ยช่วงที่แท้จริง (ATR) และแสดงสัดส่วนของวันที่ช่วงราคาต่อวัน (สูง - ต่ำ) มากกว่าหรือเท่ากับค่า ATR นอกจากนี้ยังมีตัวเลือกในการปรับขนาดข้อความที่แสดงในกล่องข้อความมุมขวาบนของกราฟ
#### วิธีการทำงาน
1. **การคำนวณ ATR**: สคริปต์คำนวณค่า ATR สำหรับช่วงเวลาที่กำหนด (`atrPeriod`) ATR เป็นมาตรวัดความผันผวนที่แสดงช่วงเฉลี่ยระหว่างราคาสูงสุดและต่ำสุดในช่วงเวลาที่กำหนด
2. **การคำนวณราคาสูงสุดและต่ำสุดที่คาดการณ์**:
- **ราคาสูงสุดที่คาดการณ์**: คำนวณโดยการบวกค่า ATR กับราคาต่ำสุดของวันปัจจุบัน
- **ราคาต่ำสุดที่คาดการณ์**: คำนวณโดยการลบค่า ATR จากราคาสูงสุดของวันปัจจุบัน
3. **การคำนวณสัดส่วน**: สคริปต์คำนวณสัดส่วนของวันที่ช่วงราคาต่อวัน (สูง - ต่ำ) มากกว่าหรือเท่ากับค่า ATR สัดส่วนนี้จะอัปเดตแบบเรียลไทม์เมื่อมีข้อมูลใหม่เข้ามา
4. **การแสดงผลในตาราง**: แทนที่จะแสดงป้ายกำกับบนแท่งเทียนแต่ละแท่ง สคริปต์จะแสดงราคาสูงสุดที่คาดการณ์ ราคาต่ำสุดที่คาดการณ์ และสัดส่วนที่คำนวณในตารางที่มุมขวาบนของกราฟ โดยสามารถปรับขนาดข้อความในตารางได้
5. **การใช้สี**: สคริปต์จะเปลี่ยนสีของแท่งเทียนเป็นสีเหลืองหากช่วงราคาต่อวันมากกว่าหรือเท่ากับค่า ATR ทำให้สามารถระบุแท่งเทียนเหล่านี้ได้ง่ายขึ้น
#### วิธีการใช้งาน
- **ATR Period (`atrPeriod`)**: ปรับช่วงเวลาสำหรับการคำนวณ ATR โดยใช้พารามิเตอร์การป้อนค่า ค่าเริ่มต้นคือ 14
- **Table Size (`tableSizeOption`)**: เลือกขนาดข้อความที่แสดงในตาราง ตัวเลือกได้แก่ `tiny`, `small`, `normal`, `large`, และ `huge`
- **ราคาสูงสุดและต่ำสุดที่คาดการณ์**: ใช้เส้นสีเขียวและสีแดงเพื่อระบุราคาที่เป็นเป้าหมายหรือระดับการหยุดขาดทุนสำหรับการซื้อขายของคุณ เส้นสีเขียวแสดงถึงราคาสูงสุดที่คาดการณ์และเส้นสีแดงแสดงถึงราคาต่ำสุดที่คาดการณ์
- **สัดส่วน**: ตารางที่มุมขวาบนของกราฟแสดงสัดส่วนของวันที่ช่วงราคาต่อวันมากกว่าหรือเท่ากับค่า ATR ซึ่งสามารถให้ข้อมูลเชิงลึกเกี่ยวกับความผันผวนของสินทรัพย์
- **การใช้สี**: แท่งเทียนสีเหลืองบ่งบอกถึงวันที่ช่วงราคาต่อวันมากกว่าหรือเท่ากับค่า ATR
_____
Cumulative Volume Delta LineThis script is a refined version of TradingView's Cumulative Volume Delta (CVD) indicator. It features a CVD line for lower time frames and automatically switches to a Simple Moving Average (SMA) line on daily time frames and higher. This functionality makes it easier to spot Volume Delta divergences on daily charts while maintaining utility on intraday time frames.
Key Features:
Line Chart and Oscillator Configuration: Unlike TradingView's standard CVD, this script can be configured as a line chart or an oscillator, enhancing flexibility and usability.
Line chart for easier divergence spotting: The line chart format is preferred for spotting divergences, providing a clearer visual representation compared to other formats.
Accurate Calculations: Many older community CVD scripts use approximate calculations that can be inaccurate. This script leverages TradingView's own calculations, which are the most accurate available without tick data feeds.
Intraday and Daily Adaptation: The Traditional CVD script is a per bar volume delta on Daily and higher timeframes and cumulative volume delta for intraday session timeframes which makes it very hard to spot divergences on higher timeframes. This script resolves that by using an SMA on daily time frames and higher.
Auto-Switching Feature: The script intelligently switches between the CVD line and the SMA line based on the active time frame. This feature can be toggled off if you prefer to use the CVD on all time frames or the SMA on all time frames.
Customizable Settings: Building on TradingView's CVD script, this version includes all the same settings in addition to the new auto-switch, SMA length etc.
About Volume Delta and Cumulative Volume Delta:
Volume Delta is the difference between the buying and selling volume within a specified period. It helps traders understand the net buying or selling pressure in the market. A positive volume delta indicates more buying activity, while a negative volume delta indicates more selling activity.
Cumulative Volume Delta (CVD) aggregates the volume delta over time to provide a running total. This cumulative approach helps traders see the overall buying and selling pressure trends, making it easier to identify potential reversals or continuations in the market trend.
Single Prints - BrightSingle Prints - Bright is a Pine Script indicator designed to identify and visualize significant price levels based on the concept of "single prints." Single prints are price levels where trading activity occurred but with little or no follow-up trading. This indicator plots these levels as lines on the chart, allowing traders to easily identify areas of potential support and resistance.
Features:
Customizable Line Distance: Adjust the distance between single print lines to suit your trading style and time frame.
Maximum Array Size: Set the maximum number of single print lines to be displayed on the chart.
Remove Gaps: Option to remove lines if the price gaps over them.
Multiple Time Frames: Choose to display single prints for daily, weekly, monthly, or yearly sessions.
Color Gradient: Lines are color-coded from red (oldest) to green (newest), providing a visual indication of their relative age.
Thicker, Lime-Colored Lines: Improved visibility with thicker lines and a more lime-like color scheme for easier identification on the chart.
How to Use:
Adding the Indicator:
Open TradingView and navigate to the chart where you want to apply the indicator.
Click on "Indicators" in the top menu.
Select "Pine Editor" and paste the provided Pine Script code into the editor.
Click "Add to Chart" to apply the indicator to your chart.
Configuring the Indicator:
Distance Between Lines (i_line_distance): Set the distance between single print lines. Adjust this value based on the volatility and time frame of the asset you are trading.
Maximum Array Size (i_max_array): Define the maximum number of single print lines to be displayed on the chart. This helps in managing the clutter on the chart.
Remove Gaps (i_remove_gaps): Enable or disable the option to remove lines if the price gaps over them.
Show Daily Single Prints (ShowDailySP): Enable or disable the display of daily single print lines.
Show Daily Extended Single Prints (ShowDailyExtendSP): Enable or disable the display of extended daily single print lines.
Show Weekly Single Prints (ShowWeeklySP): Enable or disable the display of weekly single print lines.
Show Monthly Single Prints (ShowMonthlySP): Enable or disable the display of monthly single print lines.
Show Yearly Single Prints (ShowYearlySP): Enable or disable the display of yearly single print lines.
Interpreting the Lines:
Color Gradient: The lines are color-coded to indicate their relative age. Red lines are the oldest, transitioning through orange and yellow to green, which are the newest. This color gradient helps in identifying how long a particular level has been significant.
Support and Resistance: Use the lines as potential support and resistance levels. Multiple lines close together indicate stronger levels of support or resistance.
Volatility Analysis: The number of lines within a gap can provide insights into market volatility. More lines indicate higher volatility and multiple potential reversal points within that range.
Trading Strategies:
Entry Points: Consider using the single print lines as entry points. For example, if the price approaches a support level with multiple lines, it may be a good buying opportunity.
Stop Loss and Take Profit: Use the single print lines to set stop-loss and take-profit levels. Placing stop-loss orders below multiple support lines can provide additional protection.
Trend Analysis: Analyze the overall trend and momentum in conjunction with the single print lines to make informed trading decisions. If the price is in an uptrend and approaching resistance lines, watch for potential breakouts or reversals.
chrono_utilsLibrary "chrono_utils"
Collection of objects and common functions that are related to datetime windows session days and time
ranges. The main purpose of this library is to handle time-related functionality and make it easy to reason about a
future bar checking if it will be part of a predefined session and/or inside a datetime window. All existing session
functionality I found in the documentation e.g. "not na(time(timeframe, session, timezone))" are not suitable for
strategy scripts, since the execution of the orders is delayed by one bar, due to the script execution happening at
the bar close. Moreover, a history operator with a negative value that looks forward is not allowed in any pinescript
expression. So, a prediction for the next bar using the bars_back argument of "time()"" and "time_close()" was
necessary. Thus, I created this library to overcome this small but very important limitation. In the meantime, I
added useful functionality to handle session-based behavior. An interesting utility that emerged from this
development is the data anomaly detection where a comparison between the prediction and the actual value is happening.
If those two values are different then a data inconsistency happened between the prediction bar and the actual bar
(probably due to a holiday, half session day, a timezone change etc..)
exTimezone(timezone)
exTimezone - Convert extended timezone to timezone string
Parameters:
timezone (simple string) : - The timezone or a special string
Returns: string representing the timezone
nameOfDay(day)
nameOfDay - Convert the day id into a short nameOfDay
Parameters:
day (int) : - The day id to convert
Returns: - The short name of the day
today()
today - Get the day id of this day
Returns: - The day id
nthDayAfter(day, n)
nthDayAfter - Get the day id of n days after the given day
Parameters:
day (int) : - The day id of the reference day
n (int) : - The number of days to go forward
Returns: - The day id of the day that is n days after the reference day
nextDayAfter(day)
nextDayAfter - Get the day id of next day after the given day
Parameters:
day (int) : - The day id of the reference day
Returns: - The day id of the next day after the reference day
nthDayBefore(day, n)
nthDayBefore - Get the day id of n days before the given day
Parameters:
day (int) : - The day id of the reference day
n (int) : - The number of days to go forward
Returns: - The day id of the day that is n days before the reference day
prevDayBefore(day)
prevDayBefore - Get the day id of previous day before the given day
Parameters:
day (int) : - The day id of the reference day
Returns: - The day id of the previous day before the reference day
tomorrow()
tomorrow - Get the day id of the next day
Returns: - The next day day id
normalize(num, min, max)
normalizeHour - Check if number is inthe range of
Parameters:
num (int)
min (int)
max (int)
Returns: - The normalized number
normalizeHour(hourInDay)
normalizeHour - Check if hour is valid and return a noralized hour range from
Parameters:
hourInDay (int)
Returns: - The normalized hour
normalizeMinute(minuteInHour)
normalizeMinute - Check if minute is valid and return a noralized minute from
Parameters:
minuteInHour (int)
Returns: - The normalized minute
monthInMilliseconds(mon)
monthInMilliseconds - Calculate the miliseconds in one bar of the timeframe
Parameters:
mon (int) : - The month of reference to get the miliseconds
Returns: - The number of milliseconds of the month
barInMilliseconds()
barInMilliseconds - Calculate the miliseconds in one bar of the timeframe
Returns: - The number of milliseconds in one bar
method to_string(this)
to_string - Formats the time window into a human-readable string
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object with the from and to datetimes
Returns: - The string of the time window
method to_string(this)
to_string - Formats the session days into a human-readable string with short day names
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
Returns: - The string of the session day short names
method to_string(this)
to_string - Formats the session time into a human-readable string
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
Returns: - The string of the session time
method to_string(this)
to_string - Formats the session time into a human-readable string
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object with the start and end time of the daily session
Returns: - The string of the session time
method to_string(this)
to_string - Formats the session into a human-readable string
Namespace types: Session
Parameters:
this (Session) : - The session object with the day and the time range selection
Returns: - The string of the session
method init(this, fromDateTime, toDateTime)
init - Initialize the time window object from boolean values of each session day
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object that will hold the from and to datetimes
fromDateTime (int) : - The starting datetime of the time window
toDateTime (int) : - The ending datetime of the time window
Returns: - The time window object
method init(this, refTimezone, chTimezone, fromDateTime, toDateTime)
init - Initialize the time window object from boolean values of each session day
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object that will hold the from and to datetimes
refTimezone (simple string) : - The timezone of reference of the 'from' and 'to' dates
chTimezone (simple string) : - The target timezone to convert the 'from' and 'to' dates
fromDateTime (int) : - The starting datetime of the time window
toDateTime (int) : - The ending datetime of the time window
Returns: - The time window object
method init(this, sun, mon, tue, wed, thu, fri, sat)
init - Initialize the session days object from boolean values of each session day
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object that will hold the day selection
sun (bool) : - Is Sunday a trading day?
mon (bool) : - Is Monday a trading day?
tue (bool) : - Is Tuesday a trading day?
wed (bool) : - Is Wednesday a trading day?
thu (bool) : - Is Thursday a trading day?
fri (bool) : - Is Friday a trading day?
sat (bool) : - Is Saturday a trading day?
Returns: - The session days object
method init(this, unixTime)
init - Initialize the object from the hour and minute of the session time in exchange timezone (syminfo.timezone)
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
unixTime (int) : - The unix time
Returns: - The session time object
method init(this, hourInDay, minuteInHour)
init - Initialize the object from the hour and minute of the session time in exchange timezone (syminfo.timezone)
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
hourInDay (int) : - The hour of the time
minuteInHour (int) : - The minute of the time
Returns: - The session time object
method init(this, hourInDay, minuteInHour, refTimezone)
init - Initialize the object from the hour and minute of the session time
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
hourInDay (int) : - The hour of the time
minuteInHour (int) : - The minute of the time
refTimezone (string) : - The timezone of reference of the 'hour' and 'minute'
Returns: - The session time object
method init(this, startTime, endTime)
init - Initialize the object from the start and end session time in exchange timezone (syminfo.timezone)
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object that will hold the start and end time of the daily session
startTime (SessionTime) : - The time the session begins
endTime (SessionTime) : - The time the session ends
Returns: - The session time range object
method init(this, startTimeHour, startTimeMinute, endTimeHour, endTimeMinute, refTimezone)
init - Initialize the object from the start and end session time
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object that will hold the start and end time of the daily session
startTimeHour (int) : - The time hour the session begins
startTimeMinute (int) : - The time minute the session begins
endTimeHour (int) : - The time hour the session ends
endTimeMinute (int) : - The time minute the session ends
refTimezone (string)
Returns: - The session time range object
method init(this, days, timeRanges)
init - Initialize the session object from session days and time range
Namespace types: Session
Parameters:
this (Session) : - The session object that will hold the day and the time range selection
days (SessionDays) : - The session days object that defines the days the session is happening
timeRanges (array) : - The array of all the session time ranges during a session day
Returns: - The session object
method init(this, days, timeRanges, names, colors)
init - Initialize the session object from session days and time range
Namespace types: SessionView
Parameters:
this (SessionView) : - The session view object that will hold the session, the names and the color selections
days (SessionDays) : - The session days object that defines the days the session is happening
timeRanges (array) : - The array of all the session time ranges during a session day
names (array) : - The array of the names of the sessions
colors (array) : - The array of the colors of the sessions
Returns: - The session object
method get_size_in_secs(this)
get_size_in_secs - Count the seconds from start to end in the given timeframe
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object with the from and to datetimes
Returns: - The number of seconds inside the time widow for the given timeframe
method get_size_in_secs(this)
get_size_in_secs - Calculate the seconds inside the session
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object with the start and end time of the daily session
Returns: - The number of seconds inside the session
method get_size_in_bars(this)
get_size_in_bars - Count the bars from start to end in the given timeframe
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object with the from and to datetimes
Returns: - The number of bars inside the time widow for the given timeframe
method get_size_in_bars(this)
get_size_in_bars - Calculate the bars inside the session
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object with the start and end time of the daily session
Returns: - The number of bars inside the session for the given timeframe
method is_bar_included(this, offset_forward)
is_bar_included - Check if the given bar is between the start and end dates of the window
Namespace types: DateTimeWindow
Parameters:
this (DateTimeWindow) : - The time window object with the from and to datetimes
offset_forward (simple int) : - The number of bars forward. Default is 1
Returns: - Whether the current bar is inside the datetime window
method is_bar_included(this, offset_forward)
is_bar_included - Check if the given bar is inside the session as defined by the input params (what "not na(time(timeframe.period, this.to_sess_string()) )" should return if you could write it
Namespace types: Session
Parameters:
this (Session) : - The session with the day and the time range selection
offset_forward (simple int) : - The bar forward to check if it is between the from and to datetimes. Default is 1
Returns: - Whether the current time is inside the session
method to_sess_string(this)
to_sess_string - Formats the session days into a session string with day ids
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object
Returns: - The string of the session day ids
method to_sess_string(this)
to_sess_string - Formats the session time into a session string
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
Returns: - The string of the session time
method to_sess_string(this)
to_sess_string - Formats the session time into a session string
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object with the start and end time of the daily session
Returns: - The string of the session time
method to_sess_string(this)
to_sess_string - Formats the session into a session string
Namespace types: Session
Parameters:
this (Session) : - The session object with the day and the time range selection
Returns: - The string of the session
method from_sess_string(this, sess)
from_sess_string - Initialize the session days object from the session string
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object that will hold the day selection
sess (string) : - The session string part that represents the days
Returns: - The session days object
method from_sess_string(this, sess)
from_sess_string - Initialize the session time object from the session string in exchange timezone (syminfo.timezone)
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object that will hold the hour and minute of the time
sess (string) : - The session string part that represents the time HHmm
Returns: - The session time object
method from_sess_string(this, sess, refTimezone)
from_sess_string - Initialize the session time object from the session string
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object that will hold the hour and minute of the time
sess (string) : - The session string part that represents the time HHmm
refTimezone (simple string) : - The timezone of reference of the 'hour' and 'minute'
Returns: - The session time object
method from_sess_string(this, sess)
from_sess_string - Initialize the session time range object from the session string in exchange timezone (syminfo.timezone)
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object that will hold the start and end time of the daily session
sess (string) : - The session string part that represents the time range HHmm-HHmm
Returns: - The session time range object
method from_sess_string(this, sess, refTimezone)
from_sess_string - Initialize the session time range object from the session string
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object that will hold the start and end time of the daily session
sess (string) : - The session string part that represents the time range HHmm-HHmm
refTimezone (simple string) : - The timezone of reference of the time ranges
Returns: - The session time range object
method from_sess_string(this, sess)
from_sess_string - Initialize the session object from the session string in exchange timezone (syminfo.timezone)
Namespace types: Session
Parameters:
this (Session) : - The session object that will hold the day and the time range selection
sess (string) : - The session string that represents the session HHmm-HHmm,HHmm-HHmm:ddddddd
Returns: - The session time range object
method from_sess_string(this, sess, refTimezone)
from_sess_string - Initialize the session object from the session string
Namespace types: Session
Parameters:
this (Session) : - The session object that will hold the day and the time range selection
sess (string) : - The session string that represents the session HHmm-HHmm,HHmm-HHmm:ddddddd
refTimezone (simple string) : - The timezone of reference of the time ranges
Returns: - The session time range object
method nth_day_after(this, day, n)
nth_day_after - The nth day after the given day that is a session day (true) in the object
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
day (int) : - The day id of the reference day
n (int) : - The number of days after
Returns: - The day id of the nth session day of the week after the given day
method nth_day_before(this, day, n)
nth_day_before - The nth day before the given day that is a session day (true) in the object
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
day (int) : - The day id of the reference day
n (int) : - The number of days after
Returns: - The day id of the nth session day of the week before the given day
method next_day(this)
next_day - The next day that is a session day (true) in the object
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
Returns: - The day id of the next session day of the week
method previous_day(this)
previous_day - The previous day that is session day (true) in the object
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
Returns: - The day id of the previous session day of the week
method get_sec_in_day(this)
get_sec_in_day - Count the seconds since the start of the day this session time represents
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
Returns: - The number of seconds passed from the start of the day until that session time
method get_ms_in_day(this)
get_ms_in_day - Count the milliseconds since the start of the day this session time represents
Namespace types: SessionTime
Parameters:
this (SessionTime) : - The session time object with the hour and minute of the time of the day
Returns: - The number of milliseconds passed from the start of the day until that session time
method is_day_included(this, day)
is_day_included - Check if the given day is inside the session days
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object with the day selection
day (int) : - The day to check if it is a trading day
Returns: - Whether the current day is included in the session days
DateTimeWindow
DateTimeWindow - Object that represents a datetime window with a beginning and an end
Fields:
fromDateTime (series int) : - The beginning of the datetime window
toDateTime (series int) : - The end of the datetime window
SessionDays
SessionDays - Object that represent the trading days of the week
Fields:
days (map) : - The map that contains all days of the week and their session flag
SessionTime
SessionTime - Object that represents the time (hour and minutes)
Fields:
hourInDay (series int) : - The hour of the day that ranges from 0 to 24
minuteInHour (series int) : - The minute of the hour that ranges from 0 to 59
minuteInDay (series int) : - The minute of the day that ranges from 0 to 1440. They will be calculated based on hourInDay and minuteInHour when method is called
SessionTimeRange
SessionTimeRange - Object that represents a range that extends from the start to the end time
Fields:
startTime (SessionTime) : - The beginning of the time range
endTime (SessionTime) : - The end of the time range
isOvernight (series bool) : - Whether or not this is an overnight time range
Session
Session - Object that represents a session
Fields:
days (SessionDays) : - The map of the trading days
timeRanges (array) : - The array with all time ranges of the session during the trading days
SessionView
SessionView - Object that visualize a session
Fields:
sess (Session) : - The Session object to be visualized
names (array) : - The names of the session time ranges
colors (array) : - The colors of the session time ranges
time_and_sessionA library that provides utilities for working with trading sessions and time-based conditions. Functions include session checks, date range checks, day-of-week matching, and session high/low calculations for daily, weekly, monthly, and yearly timeframes. This library streamlines time-related calculations and enhances time-based strategies and indicators.
Library "time_and_session"
Provides functions for checking time and session-based conditions and retrieving session-specific high and low values.
is_session(session, timeframe, timezone)
Checks if the current time is within the specified trading session
Parameters:
session (string) : The trading session, defined using input.session()
timeframe (string) : The timeframe to use, defaults to the current chart's timeframe
timezone (string) : The timezone to use, defaults to the symbol's timezone
Returns: A boolean indicating whether the current time is within the specified trading session
is_date_range(start_time, end_time)
Checks if the current time is within a specified date range
Parameters:
start_time (int) : The start time, defined using input.time()
end_time (int) : The end time, defined using input.time()
Returns: A boolean indicating whether the current time is within the specified date range
is_day_of_week(sunday, monday, tuesday, wednesday, thursday, friday, saturday)
Checks if the current day of the week matches any of the specified days
Parameters:
sunday (bool) : A boolean indicating whether to check for Sunday
monday (bool) : A boolean indicating whether to check for Monday
tuesday (bool) : A boolean indicating whether to check for Tuesday
wednesday (bool) : A boolean indicating whether to check for Wednesday
thursday (bool) : A boolean indicating whether to check for Thursday
friday (bool) : A boolean indicating whether to check for Friday
saturday (bool) : A boolean indicating whether to check for Saturday
Returns: A boolean indicating whether the current day of the week matches any of the specified days
daily_high(source)
Returns the highest value of the specified source during the current daily session
Parameters:
source (float) : The data series to evaluate, defaults to high
Returns: The highest value during the current daily session, or na if the timeframe is not suitable
daily_low(source)
Returns the lowest value of the specified source during the current daily session
Parameters:
source (float) : The data series to evaluate, defaults to low
Returns: The lowest value during the current daily session, or na if the timeframe is not suitable
regular_session_high(source, persist)
Returns the highest value of the specified source during the current regular trading session
Parameters:
source (float) : The data series to evaluate, defaults to high
persist (bool) : A boolean indicating whether to retain the last value outside of regular market hours, defaults to true
Returns: The highest value during the current regular trading session, or na if the timeframe is not suitable
regular_session_low(source, persist)
Returns the lowest value of the specified source during the current regular trading session
Parameters:
source (float) : The data series to evaluate, defaults to low
persist (bool) : A boolean indicating whether to retain the last value outside of regular market hours, defaults to true
Returns: The lowest value during the current regular trading session, or na if the timeframe is not suitable
premarket_session_high(source, persist)
Returns the highest value of the specified source during the current premarket trading session
Parameters:
source (float) : The data series to evaluate, defaults to high
persist (bool) : A boolean indicating whether to retain the last value outside of premarket hours, defaults to true
Returns: The highest value during the current premarket trading session, or na if the timeframe is not suitable
premarket_session_low(source, persist)
Returns the lowest value of the specified source during the current premarket trading session
Parameters:
source (float) : The data series to evaluate, defaults to low
persist (bool) : A boolean indicating whether to retain the last value outside of premarket hours, defaults to true
Returns: The lowest value during the current premarket trading session, or na if the timeframe is not suitable
postmarket_session_high(source, persist)
Returns the highest value of the specified source during the current postmarket trading session
Parameters:
source (float) : The data series to evaluate, defaults to high
persist (bool) : A boolean indicating whether to retain the last value outside of postmarket hours, defaults to true
Returns: The highest value during the current postmarket trading session, or na if the timeframe is not suitable
postmarket_session_low(source, persist)
Returns the lowest value of the specified source during the current postmarket trading session
Parameters:
source (float) : The data series to evaluate, defaults to low
persist (bool) : A boolean indicating whether to retain the last value outside of postmarket hours, defaults to true
Returns: The lowest value during the current postmarket trading session, or na if the timeframe is not suitable
weekly_high(source)
Returns the highest value of the specified source during the current weekly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to high
Returns: The highest value during the current weekly session, or na if the timeframe is not suitable
weekly_low(source)
Returns the lowest value of the specified source during the current weekly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to low
Returns: The lowest value during the current weekly session, or na if the timeframe is not suitable
monthly_high(source)
Returns the highest value of the specified source during the current monthly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to high
Returns: The highest value during the current monthly session, or na if the timeframe is not suitable
monthly_low(source)
Returns the lowest value of the specified source during the current monthly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to low
Returns: The lowest value during the current monthly session, or na if the timeframe is not suitable
yearly_high(source)
Returns the highest value of the specified source during the current yearly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to high
Returns: The highest value during the current yearly session, or na if the timeframe is not suitable
yearly_low(source)
Returns the lowest value of the specified source during the current yearly session. Can fail on lower timeframes.
Parameters:
source (float) : The data series to evaluate, defaults to low
Returns: The lowest value during the current yearly session, or na if the timeframe is not suitable
Optimal Leverage IndicatorThe goal of this indicator is to calculate and visualize the optimal leverage and average leverage for a given security based on its historical price data. The optimal leverage is determined by analyzing the relationship between the annualized return and annualized volatility of the security over a specified lookback period.
The methodology can be broken down into the following steps:
Data Input:
The script takes two user inputs: the lookback period and the number of annual trading days.
The lookback period determines the number of historical data points used in the calculations.
The number of annual trading days is used to annualize the return and volatility metrics.
Daily Returns Calculation:
The script retrieves the closing prices of the security on a daily timeframe.
It calculates the daily returns by comparing the current close price with the previous close price.
Mean Return and Volatility Calculation:
The script calculates the mean daily return by taking the simple moving average (SMA) of the daily returns over the specified lookback period.
It also calculates the volatility by taking the standard deviation of the daily returns over the same lookback period.
Annualized Return and Volatility Calculation:
The mean daily return is annualized by compounding it over the number of annual trading days.
The daily volatility is annualized by multiplying it by the square root of the number of annual trading days.
Optimal Leverage Calculation:
The optimal leverage is calculated using the formula: Optimal Leverage = Annualized Return / (Annualized Volatility)^2
This formula assumes that the optimal leverage is proportional to the ratio of the annualized return to the square of the annualized volatility. This is based in this paper: papers.ssrn.com
Average Leverage Calculation:
The script calculates the average leverage by taking the simple moving average (SMA) of the optimal leverage over the specified lookback period.
This provides a smoothed representation of the optimal leverage over time.
The script plots two lines on the chart:
The optimal leverage line (blue) represents the calculated optimal leverage values over time.
The average leverage line (green) represents the average of the optimal leverage values over the specified lookback period.
The main idea behind this methodology is to determine the optimal leverage based on the historical risk-return characteristics of the security. By analyzing the relationship between the annualized return and volatility, the script aims to identify the leverage level that maximizes the return relative to the risk.
The average leverage line provides a smoothed representation of the optimal leverage over time.
Danger Signals from The Trading MindwheelThe " Danger Signals " indicator, a collaborative creation from the minds at Amphibian Trading and MARA Wealth, serves as your vigilant lookout in the volatile world of stock trading. Drawing from the wisdom encapsulated in "The Trading Mindwheel" and the successful methodologies of legends like William O'Neil and Mark Minervini, this tool is engineered to safeguard your trading journey.
Core Features:
Real-Time Alerts: Identify critical danger signals as they emerge in the market. Whether it's a single day of heightened risk or a pattern forming, stay informed with specific danger signals and a tally of signals for comprehensive decision-making support. The indicator looks for over 30 different signals ranging from simple closing ranges to more complex signals like blow off action.
Tailored Insights with Portfolio Heat Integration: Pair with the "Portfolio Heat" indicator to customize danger signals based on your current positions, entry points, and stops. This personalized approach ensures that the insights are directly relevant to your trading strategy. Certain signals can have different meanings based on where your trade is at in its lifecycle. Blow off action at the beginning of a trend can be viewed as strength, while after an extended run could signal an opportunity to lock in profits.
Forward-Looking Analysis: Leverage the 'Potential Danger Signals' feature to assess future risks. Enter hypothetical price levels to understand potential market reactions before they unfold, enabling proactive trade management.
The indicator offers two different modes of 'Potential Danger Signals', Worst Case or Immediate. Worst Case allows the user to input any price and see what signals would fire based on price reaching that level, while the Immediate mode looks for potential Danger Signals that could happen on the next bar.
This is achieved by adding and subtracting the average daily range to the current bars close while also forecasting the next values of moving averages, vwaps, risk multiples and the relative strength line to see if a Danger Signal would trigger.
User Customization: Flexibility is at your fingertips with toggle options for each danger signal. Tailor the indicator to match your unique trading style and risk tolerance. No two traders are the same, that is why each signal is able to be turned on or off to match your trading personality.
Versatile Application: Ideal for growth stock traders, momentum swing traders, and adherents of the CANSLIM methodology. Whether you're a novice or a seasoned investor, this tool aligns with strategies influenced by trading giants.
Validation and Utility:
Inspired by the trade management principles of Michael Lamothe, the " Danger Signals " indicator is more than just a tool; it's a reflection of tested strategies that highlight the importance of risk management. Through rigorous validation, including the insights from "The Trading Mindwheel," this indicator helps traders navigate the complexities of the market with an informed, strategic approach.
Whether you're contemplating a new position or evaluating an existing one, the " Danger Signals " indicator is designed to provide the clarity needed to avoid potential pitfalls and capitalize on opportunities with confidence. Embrace a smarter way to trade, where awareness and preparation open the door to success.
Let's dive into each of the components of this indicator.
Volume: Volume refers to the number of shares or contracts traded in a security or an entire market during a given period. It is a measure of the total trading activity and liquidity, indicating the overall interest in a stock or market.
Price Action: the analysis of historical prices to inform trading decisions, without the use of technical indicators. It focuses on the movement of prices to identify patterns, trends, and potential reversal points in the market.
Relative Strength Line: The RS line is a popular tool used to compare the performance of a stock, typically calculated as the ratio of the stock's price to a benchmark index's price. It helps identify outperformers and underperformers relative to the market or a specific sector. The RS value is calculated by dividing the close price of the chosen stock by the close price of the comparative symbol (SPX by default).
Average True Range (ATR): ATR is a market volatility indicator used to show the average range prices swing over a specified period. It is calculated by taking the moving average of the true ranges of a stock for a specific period. The true range for a period is the greatest of the following three values:
The difference between the current high and the current low.
The absolute value of the current high minus the previous close.
The absolute value of the current low minus the previous close.
Average Daily Range (ADR): ADR is a measure used in trading to capture the average range between the high and low prices of an asset over a specified number of past trading days. Unlike the Average True Range (ATR), which accounts for gaps in the price from one day to the next, the Average Daily Range focuses solely on the trading range within each day and averages it out.
Anchored VWAP: AVWAP gives the average price of an asset, weighted by volume, starting from a specific anchor point. This provides traders with a dynamic average price considering both price and volume from a specific start point, offering insights into the market's direction and potential support or resistance levels.
Moving Averages: Moving Averages smooth out price data by creating a constantly updated average price over a specific period of time. It helps traders identify trends by flattening out the fluctuations in price data.
Stochastic: A stochastic oscillator is a momentum indicator used in technical analysis that compares a particular closing price of an asset to a range of its prices over a certain period of time. The theory behind the stochastic oscillator is that in a market trending upwards, prices will tend to close near their high, and in a market trending downwards, prices close near their low.
While each of these components offer unique insights into market behavior, providing sell signals under specific conditions, the power of combining these different signals lies in their ability to confirm each other's signals. This in turn reduces false positives and provides a more reliable basis for trading decisions
These signals can be recognized at any time, however the indicators power is in it's ability to take into account where a trade is in terms of your entry price and stop.
If a trade just started, it hasn’t earned much leeway. Kind of like a new employee that shows up late on the first day of work. It’s less forgivable than say the person who has been there for a while, has done well, is on time, and then one day comes in late.
Contextual Sensitivity:
For instance, a high volume sell-off coupled with a bearish price action pattern significantly strengthens the sell signal. When the price closes below an Anchored VWAP or a critical moving average in this context, it reaffirms the bearish sentiment, suggesting that the momentum is likely to continue downwards.
By considering the relative strength line (RS) alongside volume and price action, the indicator can differentiate between a normal retracement in a strong uptrend and a when a stock starts to become a laggard.
The integration of ATR and ADR provides a dynamic framework that adjusts to the market's volatility. A sudden increase in ATR or a character change detected through comparing short-term and long-term ADR can alert traders to emerging trends or reversals.
The "Danger Signals" indicator exemplifies the power of integrating diverse technical indicators to create a more sophisticated, responsive, and adaptable trading tool. This approach not only amplifies the individual strengths of each indicator but also mitigates their weaknesses.
Portfolio Heat Indicator can be found by clicking on the image below
Danger Signals Included
Price Closes Near Low - Daily Closing Range of 30% or Less
Price Closes Near Weekly Low - Weekly Closing Range of 30% or Less
Price Closes Near Daily Low on Heavy Volume - Daily Closing Range of 30% or Less on Heaviest Volume of the Last 5 Days
Price Closes Near Weekly Low on Heavy Volume - Weekly Closing Range of 30% or Less on Heaviest Volume of the Last 5 Weeks
Price Closes Below Moving Average - Price Closes Below One of 5 Selected Moving Averages
Price Closes Below Swing Low - Price Closes Below Most Recent Swing Low
Price Closes Below 1.5 ATR - Price Closes Below Trailing ATR Stop Based on Highest High of Last 10 Days
Price Closes Below AVWAP - Price Closes Below Selected Anchored VWAP (Anchors include: High of base, Low of base, Highest volume of base, Custom date)
Price Shows Aggressive Selling - Current Bars High is Greater Than Previous Day's High and Closes Near the Lows on Heaviest Volume of the Last 5 Days
Outside Reversal Bar - Price Makes a New High and Closes Near the Lows, Lower Than the Previous Bar's Low
Price Shows Signs of Stalling - Heavy Volume with a Close of Less than 1%
3 Consecutive Days of Lower Lows - 3 Days of Lower Lows
Close Lower than 3 Previous Lows - Close is Less than 3 Previous Lows
Character Change - ADR of Last Shorter Length is Larger than ADR of Longer Length
Fast Stochastic Crosses Below Slow Stochastic - Fast Stochastic Crosses Below Slow Stochastic
Fast & Slow Stochastic Curved Down - Both Stochastic Lines Close Lower than Previous Day for 2 Consecutive Days
Lower Lows & Lower Highs Intraday - Lower High and Lower Low on 30 Minute Timeframe
Moving Average Crossunder - Selected MA Crosses Below Other Selected MA
RS Starts Curving Down - Relative Strength Line Closes Lower than Previous Day for 2 Consecutive Days
RS Turns Negative Short Term - RS Closes Below RS of 7 Days Ago
RS Underperforms Price - Relative Strength Line Not at Highs, While Price Is
Moving Average Begins to Flatten Out - First Day MA Doesn't Close Higher
Price Moves Higher on Lighter Volume - Price Makes a New High on Light Volume and 15 Day Average Volume is Less than 50 Day Average
Price Hits % Target - Price Moves Set % Higher from Entry Price
Price Hits R Multiple - Price hits (Entry - Stop Multiplied by Setting) and Added to Entry
Price Hits Overhead Resistance - Price Crosses a Swing High from a Monthly Timeframe Chart from at Least 1 Year Ago
Price Hits Fib Level - Price Crosses a Fib Extension Drawn From Base High to Low
Price Hits a Psychological Level - Price Crosses a Multiple of 0 or 5
Heavy Volume After Significant Move - Above Average and Heaviest Volume of the Last 5 Days 35 Bars or More from Breakout
Moving Averages Begin to Slope Downward - Moving Averages Fall for 2 Consecutive Days
Blow Off Action - Highest Volume, Largest Spread, Multiple Gaps in a Row 35 Bars or More Post Breakout
Late Buying Frenzy - ANTS 35 Bars or More Post Breakout
Exhaustion Gap - Gap Up 5% or Higher with Price 125% or More Above 200sma
Periodic Activity Tracker [LuxAlgo]The Periodic Activity Tracker tool periodically tracks the cumulative buy and sell volume in a user-defined period and draws the corresponding matching bars and volume delta for each period.
Users can select a predefined aggregation period from the following options: Hourly, Daily, Weekly, and Monthly.
🔶 USAGE
This tool provides a simple and clear way of analyzing volumes for each aggregated period and is made up of the following elements:
Buy and sell volumes by period as red and green lines with color gradient area
Delta (difference) between buy & sell volume for each period
Buy & sell volume bars for each period
Separator between lines and bars, and period tags below each pair of bars for ease of reading
On the chart above we can see all the elements displayed, the volume level on the lines perfectly matches the volume level on the bars for each period.
In this case, the tool has the default settings so the anchor period is set to Daily and we can see how the period tag (each day of the week) is displayed below each pair of bars.
Users can disable the delta display and adjust the bar size.
🔹 Reading The Tool
In trading, assessing the strength of the bulls (buyers) and bears (sellers) is key to understanding the current trading environment. Which side, if any, has the upper hand? To answer this question, some traders look at volume in relation to price.
This tool provides you with a view of buy volume versus sell volume, allowing you to compare both sides of the market.
As with any volume tool, the key is to understand when the forces of the two groups are balanced or unbalanced.
As we can observe on the chart:
NOV '23: Buy volume greater than sell volume, both moving up close together, flat delta. We can see that the price is in range.
DEC '23: Buy volume bigger than Sell volume, both moving up but with a bigger difference, bigger delta than last month but still flat. We can see the price in the range above last month's range.
JAN '24: Buy and sell volume tied together, no delta whatsoever. We can see the price in range but testing above and below last month's range.
FEB '24: Buy volume explodes higher and sell volume cannot keep up, big growing delta. Price explodes higher above last month's range.
Traders need to understand that there is always an equal number of buyers and sellers in a liquid market, the quality here is how aggressive or passive they are. Who is 'attacking' and who is 'defending', who is using market orders to move prices, and who is using limit orders waiting to be filled?
This tool gives you the following information:
Lines: if the top line is green, the buyers are attacking, if it is red, the sellers are attacking.
Delta: represents the difference in their strength, if it is above 0 the buyers are stronger, if it is below 0 the sellers are stronger.
Bars: help you to see the difference in strength between buyers and sellers for each period at a glance.
🔹 Anchor Period
By default, the tool is set to Hourly. However, users can select from a number of predefined time periods.
Depending on the user's selection, the bars are displayed as follows:
Hourly : hours of the current day
Daily : days of the current week
Weekly : weeks of the current month
Monthly : months of the current year
On the chart above we can see the four periods displayed, starting at the top left and moving clockwise we have hourly, daily, weekly, and monthly.
🔶 DETAILS
🔹 Chart TimeFrame
The chart timeframe has a direct impact on the visualization of the tool, and the user should select a chart timeframe that is compatible with the Anchor period in the tool's settings panel.
For the chart timeframe to be compatible it must be less than the Anchor period parameter. If the user selects an incompatible chart timeframe, a warning message will be displayed.
As a rule of thumb, the smaller the chart timeframe, the more data the tool will collect, returning indications for longer-term price variations.
These are the recommended chart timeframes for each period:
Hourly : 5m charts or lower
Daily : 1H charts or lower
Weekly : 4H charts or lower
Monthly : 1D charts or lower
🔹 Warnings
This chart shows both types of warnings the user may receive
At the top, we can see the warning that is given when the 'Bar Width' parameter exceeds the allowed value.
At the bottom is the incompatible chart timeframe warning, which prompts the user to select a smaller chart timeframe or a larger "Anchor Period" parameter.
🔶 SETTINGS
🔹 Data Gathering
Anchor period: Time period representing each bar: hours of the day, days of the week, weeks of the month, and months of the year. The timeframe of the chart must be less than this parameter, otherwise a warning will be displayed.
🔹 Style
Bars width: Size of each bar, there is a maximum limit so a warning will be displayed if it is reached.
Volume color
Delta: Enable/Disable Delta Area Display