Ensemble Alerts█ OVERVIEW
This indicator creates highly customizable alert conditions and messages by combining several technical conditions into groups , which users can specify directly from the "Settings/Inputs" tab. It offers a flexible framework for building and testing complex alert conditions without requiring code modifications for each adjustment.
█ CONCEPTS
Ensemble analysis
Ensemble analysis is a form of data analysis that combines several "weaker" models to produce a potentially more robust model. In a trading context, one of the most prevalent forms of ensemble analysis is the aggregation (grouping) of several indicators to derive market insights and reinforce trading decisions. With this analysis, traders typically inspect multiple indicators, signaling trade actions when specific conditions or groups of conditions align.
Simplifying ensemble creation
Combining indicators into one or more ensembles can be challenging, especially for users without programming knowledge. It usually involves writing custom scripts to aggregate the indicators and trigger trading alerts based on the confluence of specific conditions. Making such scripts customizable via inputs poses an additional challenge, as it often involves complicated input menus and conditional logic.
This indicator addresses these challenges by providing a simple, flexible input menu where users can easily define alert criteria by listing groups of conditions from various technical indicators in simple text boxes . With this script, you can create complex alert conditions intuitively from the "Settings/Inputs" tab without ever writing or modifying a single line of code. This framework makes advanced alert setups more accessible to non-coders. Additionally, it can help Pine programmers save time and effort when testing various condition combinations.
█ FEATURES
Configurable alert direction
The "Direction" dropdown at the top of the "Settings/Inputs" tab specifies the allowed direction for the alert conditions. There are four possible options:
• Up only : The indicator only evaluates upward conditions.
• Down only : The indicator only evaluates downward conditions.
• Up and down (default): The indicator evaluates upward and downward conditions, creating alert triggers for both.
• Alternating : The indicator prevents alert triggers for consecutive conditions in the same direction. An upward condition must be the first occurrence after a downward condition to trigger an alert, and vice versa for downward conditions.
Flexible condition groups
This script features six text inputs where users can define distinct condition groups (ensembles) for their alerts. An alert trigger occurs if all the conditions in at least one group occur.
Each input accepts a comma-separated list of numbers with optional spaces (e.g., "1, 4, 8"). Each listed number, from 1 to 35, corresponds to a specific individual condition. Below are the conditions that the numbers represent:
1 — RSI above/below threshold
2 — RSI below/above threshold
3 — Stoch above/below threshold
4 — Stoch below/above threshold
5 — Stoch K over/under D
6 — Stoch K under/over D
7 — AO above/below threshold
8 — AO below/above threshold
9 — AO rising/falling
10 — AO falling/rising
11 — Supertrend up/down
12 — Supertrend down/up
13 — Close above/below MA
14 — Close below/above MA
15 — Close above/below open
16 — Close below/above open
17 — Close increase/decrease
18 — Close decrease/increase
19 — Close near Donchian top/bottom (Close > (Mid + HH) / 2)
20 — Close near Donchian bottom/top (Close < (Mid + LL) / 2)
21 — New Donchian high/low
22 — New Donchian low/high
23 — Rising volume
24 — Falling volume
25 — Volume above average (Volume > SMA(Volume, 20))
26 — Volume below average (Volume < SMA(Volume, 20))
27 — High body to range ratio (Abs(Close - Open) / (High - Low) > 0.5)
28 — Low body to range ratio (Abs(Close - Open) / (High - Low) < 0.5)
29 — High relative volatility (ATR(7) > ATR(40))
30 — Low relative volatility (ATR(7) < ATR(40))
31 — External condition 1
32 — External condition 2
33 — External condition 3
34 — External condition 4
35 — External condition 5
These constituent conditions fall into three distinct categories:
• Directional pairs : The numbers 1-22 correspond to pairs of opposing upward and downward conditions. For example, if one of the inputs includes "1" in the comma-separated list, that group uses the "RSI above/below threshold" condition pair. In this case, the RSI must be above a high threshold for the group to trigger an upward alert, and the RSI must be below a defined low threshold to trigger a downward alert.
• Non-directional filters : The numbers 23-30 correspond to conditions that do not represent directional information. These conditions act as filters for both upward and downward alerts. Traders often use non-directional conditions to refine trending or mean reversion signals. For instance, if one of the input lists includes "30", that group uses the "Low relative volatility" condition. The group can trigger an upward or downward alert only if the 7-period Average True Range (ATR) is below the 40-period ATR.
• External conditions : The numbers 31-35 correspond to external conditions based on the plots from other indicators on the chart. To set these conditions, use the source inputs in the "External conditions" section near the bottom of the "Settings/Inputs" tab. The external value can represent an upward, downward, or non-directional condition based on the following logic:
▫ Any value above 0 represents an upward condition.
▫ Any value below 0 represents a downward condition.
▫ If the checkbox next to the source input is selected, the condition becomes non-directional . Any group that uses the condition can trigger upward or downward alerts only if the source value is not 0.
To learn more about using plotted values from other indicators, see this article in our Help Center and the Source input section of our Pine Script™ User Manual.
Group markers
Each comma-separated list represents a distinct group , where all the listed conditions must occur to trigger an alert. This script assigns preset markers (names) to each condition group to make the active ensembles easily identifiable in the generated alert messages and labels. The markers assigned to each group use the format "M", where "M" is short for "Marker" and "x" is the group number. The titles of the inputs at the top of the "Settings/Inputs" tab show these markers for convenience.
For upward conditions, the labels and alert messages show group markers with upward triangles (e.g., "M1▲"). For downward conditions, they show markers with downward triangles (e.g., "M1▼").
NOTE: By default, this script populates the "M1" field with a pre-configured list for a mean reversion group ("2,18,24,28"). The other fields are empty. If any "M*" input does not contain a value, the indicator ignores it in the alert calculations.
Custom alert messages
By default, the indicator's alert message text contains the activated markers and their direction as a comma-separated list. Users can override this message for upward or downward alerts with the two text fields at the bottom of the "Settings/Inputs" tab. When the fields are not empty , the alerts use that text instead of the default marker list.
NOTE: This script generates alert triggers, not the alerts themselves. To set up an alert based on this script's conditions, open the "Create Alert" dialog box, then select the "Ensemble Alerts" and "Any alert() function call" options in the "Condition" tabs. See the Alerts FAQ in our Pine Script™ User Manual for more information.
Condition visualization
This script offers organized visualizations of its conditions, allowing users to inspect the behaviors of each condition alongside the specified groups. The key visual features include:
1) Conditional plots
• The indicator plots the history of each individual condition, excluding the external conditions, as circles at different levels. Opposite conditions appear at positive and negative levels with the same absolute value. The plots for each condition show values only on the bars where they occur.
• Each condition's plot is color-coded based on its type. Aqua and orange plots represent opposing directional conditions, and purple plots represent non-directional conditions. The titles of the plots also contain the condition numbers to which they apply.
• The plots in the separate pane can be turned on or off with the "Show plots in pane" checkbox near the top of the "Settings/Inputs" tab. This input only toggles the color-coded circles, which reduces the graphical load. If you deactivate these visuals, you can still inspect each condition from the script's status line and the Data Window.
• As a bonus, the indicator includes "Up alert" and "Down alert" plots in the Data Window, representing the combined upward and downward ensemble alert conditions. These plots are also usable in additional indicator-on-indicator calculations.
2) Dynamic labels
• The indicator draws a label on the main chart pane displaying the activated group markers (e.g., "M1▲") each time an alert condition occurs.
• The labels for upward alerts appear below chart bars. The labels for downward alerts appear above the bars.
NOTE: This indicator can display up to 500 labels because that is the maximum allowed for a single Pine script.
3) Background highlighting
• The indicator can highlight the main chart's background on bars where upward or downward condition groups activate. Use the "Highlight background" inputs in the "Settings/Inputs" tab to enable these highlights and customize their colors.
• Unlike the dynamic labels, these background highlights are available for all chart bars, irrespective of the number of condition occurrences.
█ NOTES
• This script uses Pine Script™ v6, the latest version of TradingView's programming language. See the Release notes and Migration guide to learn what's new in v6 and how to convert your scripts to this version.
• This script imports our new Alerts library, which features functions that provide high-level simplicity for working with complex compound conditions and alerts. We used the library's `compoundAlertMessage()` function in this indicator. It evaluates items from "bool" arrays in groups specified by an array of strings containing comma-separated index lists , returning a tuple of "string" values containing the marker of each activated group.
• The script imports the latest version of the ta library to calculate several technical indicators not included in the built-in `ta.*` namespace, including Double Exponential Moving Average (DEMA), Triple Exponential Moving Average (TEMA), Fractal Adaptive Moving Average (FRAMA), Tilson T3, Awesome Oscillator (AO), Full Stochastic (%K and %D), SuperTrend, and Donchian Channels.
• The script uses the `force_overlay` parameter in the label.new() and bgcolor() calls to display the drawings and background colors in the main chart pane.
• The plots and hlines use the available `display.*` constants to determine whether the visuals appear in the separate pane.
Look first. Then leap.
Cari dalam skrip untuk "豪24配债"
Sessions ny vizScript Purpose
This indicator draws a colored background during the New York trading session. It's useful for traders who want to have a visual overview of when the American (NY) trading session is active.
Main Features
NY Session Visualization - draws a gray bar in the background of the chart during NY trading hours (15:00-19:00 CET)
Customization - allows users to:
Set custom session time range
Adjust background color and transparency
Limit display to only the last 24 hours
Input Parameters
sessionRange - session time range (default 15:00-19:00 CET)
sessionColour - background color (default gray with 90% transparency)
onlyLast24Hours - toggle for showing only the last 24 hours (default false)
Technical Details
Script is written in Pine Script version 5
Uses UNIX timestamp for time period calculations
Runs as an overlay indicator (overlay=true), meaning it displays directly on the price chart
Uses the bgcolor() function for background rendering
Contains logic to check if current time is within defined session
Usage
This indicator is useful for:
Monitoring active NY trading session hours
Planning trades during the most liquid hours of the US market
Visual orientation in the chart during different trading sessions
Bitcoin Cycle Master [InvestorUnknown]The "Bitcoin Cycle Master" indicator is designed for in-depth, long-term analysis of Bitcoin's price cycles, using several key metrics to track market behavior and forecast potential price tops and bottoms. The indicator integrates multiple moving averages and on-chain metrics, offering a comprehensive view of Bitcoin’s historical and projected performance. Each of its components plays a crucial role in identifying critical cycle points:
Top Cap: This is a multiple of the Average Cap, which is calculated as the cumulative sum of Bitcoin’s price (price has a longer history than Market Cap) divided by its age in days. Top Cap serves as an upper boundary for speculative price peaks, multiplied by a factor of 35.
Time_dif() =>
date = ta.valuewhen(bar_index == 0, time, 0)
sec_r = math.floor(date / 1000)
min_r = math.floor(sec_r / 60)
h_r = math.floor(min_r / 60)
d_r = math.floor(h_r / 24)
// Launch of BTC
start = timestamp(2009, 1, 3, 00, 00)
sec_rb = math.floor(start / 1000)
min_rb = math.floor(sec_rb / 60)
h_rb = math.floor(min_rb / 60)
d_rb = math.floor(h_rb / 24)
difference = d_r - d_rb
AverageCap() =>
ta.cum(btc_price) / (Time_dif() + btc_age)
TopCap() =>
// To calculate Top Cap, it is first necessary to calculate Average Cap, which is the cumulative sum of Market Cap divided by the age of the market in days.
// This creates a constant time-based moving average of market cap.
// Once Average cap is calculated, those values are multiplied by 35. The result is Top Cap.
// For AverageCap the BTC price was used instead of the MC because it has more history
// (the result should have minimal if any deviation since MC would have to be divided by Supply)
AverageCap() * 35
Delta Top: Defined as the difference between the Realized Cap and the Average Cap, this metric is further multiplied by a factor of 7. Delta Top provides a historically reliable signal for Bitcoin market cycle tops.
DeltaTop() =>
// Delta Cap = Realized Cap - Average Cap
// Average Cap is explained in the Top Cap section above.
// Once Delta Cap is calculated, its values over time are then multiplied by 7. The result is Delta Top.
(RealizedPrice() - AverageCap()) * 7
Terminal Price: Derived from Coin Days Destroyed, Terminal Price normalizes Bitcoin’s historical price behavior by its finite supply (21 million bitcoins), offering an adjusted price forecast as all bitcoins approach being mined. The original formula for Terminal Price didn’t produce expected results, hence the calculation was adjusted slightly.
CVDD() =>
// CVDD stands for Cumulative Value Coin Days Destroyed.
// Coin Days Destroyed is a term used for bitcoin to identify a value of sorts to UTXO’s (unspent transaction outputs). They can be thought of as coins moving between wallets.
(MCR - TV) / 21000000
TerminalPrice() =>
// Theory:
// Before Terminal price is calculated, it is first necessary to calculate Transferred Price.
// Transferred price takes the sum of > Coin Days Destroyed and divides it by the existing supply of bitcoin and the time it has been in circulation.
// The value of Transferred Price is then multiplied by 21. Remember that there can only ever be 21 million bitcoin mined.
// This creates a 'terminal' value as the supply is all mined, a kind of reverse supply adjustment.
// Instead of heavily weighting later behavior, it normalizes historical behavior to today. By normalizing by 21, a terminal value is created
// Unfortunately the theoretical calculation didn't produce results it should, in pinescript.
// Therefore the calculation was slightly adjusted/improvised
TransferredPrice = CVDD() / (Supply * math.log(btc_age))
tp = TransferredPrice * 210000000 * 3
Realized Price: Calculated as the Market Cap Realized divided by the current supply of Bitcoin, this metric shows the average value of Bitcoin based on the price at which coins last moved, giving a market consensus price for long-term holders.
CVDD (Cumulative Value Coin Days Destroyed): This on-chain metric analyzes Bitcoin’s UTXOs (unspent transaction outputs) and the velocity of coins moving between wallets. It highlights key market dynamics during prolonged accumulation or distribution phases.
Balanced Price: The Balanced Price is the difference between the Realized Price and the Terminal Price, adjusted by Bitcoin's supply constraints. This metric provides a useful signal for identifying oversold market conditions during bear markets.
BalancedPrice() =>
// It is calculated by subtracting Transferred Price from Realized Price
RealizedPrice() - (TerminalPrice() / (21 * 3))
Each component can be toggled individually, allowing users to focus on specific aspects of Bitcoin’s price cycle and derive meaningful insights from its long-term behavior. The combination of these models provides a well-rounded view of both speculative peaks and long-term value trends.
Important consideration:
Top Cap did historically provide reliable signals for cycle peaks, however it may not be a relevant indication of peaks in the future.
Daily Moving Average for Intraday TimeframesThis indicator provides a dynamic tool for visualizing the Daily Moving Average (DMA) on intraday timeframes.
It allows you to analyze how the price behaves in relation to the daily moving average in timeframes from 1 minute up to 1 day.
KEY FEATURES
DMA on Intraday timeframes only : This indicator is designed to work exclusively on intraday charts with timeframes between 1 minute and 1 day. It will not function on tick, second-based, or daily-and-above charts.
Color-Coded Zones for Trend Identification :
Green Zone: The price is above a rising DMA, signaling a bullish momentum.
Red Zone: The price is below a falling DMA, signaling a bearish momentum.
Yellow Zone: Signaling uncertainty or mixed conditions, where either the price is above a falling DMA or below a rising/flat DMA.
Configurable DMA Period : You can adjust the number of days over which the DMA is calculated (default is 5 days). This can be customized based on your trading strategy or market preferences.
24/7 Market Option : For assets that trade continuously (e.g., cryptocurrencies), activate the "Is trading 24/7?" setting to ensure accurate calculations.
WHAT IS THE DMA AND WHY USE IT INTRADAY?
The Daily Moving Average is a Simple Moving Average indicator used to smooth out price fluctuations over a specified period (in days) and reveal the underlying trend.
Typically, a SMA takes price value for the current timeframe and reveal the trend for this timeframe. It gives you the average price for the last N candles for the given timeframe.
But what makes the Intraday DMA interesting is that it shows the underlying trend of the Daily timeframe on a chart set on a shorter timeframe . This helps to align intraday trades with broader market movements.
HOW IS THE DMA CALCULATED?
If we are to build a N-day Daily Moving Average using a Simple Moving Average, we need to take the amount of candles A needed in that timeframe to account for a period of a day and multiply it by the number of days N of the desired DMA.
So for instance, let say we want to compute the 5-Day DMA on the 10 minute timeframe :
In the 10 minute timeframe there are 39 candles in a day in the regular session.
We would take the 39 candles per day and then multiply that by 5 days. 39 x 5 = 195.
So a 5-day moving average is represented by a simple moving average with a period of 195 when looking at a 10 minute timeframe.
So for each period, to create a 5-day DMA, you would have to set the period of your simple moving average like so :
- 195 minutes = 10 period
- 130 minutes = 15 period
- 65 minutes = 30 period
- 30 minutes = 65 period
- 15 minutes = 130 period
- 10 minutes = 195 period
- 5 minutes = 390 period
and so on.
This indicator attempts to do this calculation for you on any intraday timeframe and whatever the period you want to use is for your DMA. You can create a 10-day moving average, a 30-day moving average, etc.
Digital Clock with Market Status and AlertsDigital Clock with Market Status and Alerts - 日本語解説は下記
Overview:
The Digital Clock with Market Status and Alerts indicator is designed to display the current time in various global time zones while also providing the status of major financial markets such as Tokyo, London, and New York. This indicator helps traders monitor the open and close times of different markets and alerts them when a market opens. Customizable options are provided for table positioning, background, text colors, and font size.
Key Features:
Real-Time Digital Clock: The indicator shows the current time in your selected time zone (Asia/Tokyo, America/New_York, Europe/London, Australia/Sydney). The time updates in real-time and includes hours, minutes, and seconds, providing a convenient and accurate way to monitor time across different trading sessions.
Global Market Status: Displays the open or closed status of major financial markets.
・Tokyo Market: Open from 9:00 AM to 3:00 PM (JST).
・London Market: Open from 16:00 to 24:00 during summer time and from 17:00 to 1:00 during winter time (JST).
・New York Market: Open from 21:00 to 5:00 during summer time and from 22:00 to 6:00 during winter time (JST).
Customizable Display:
・Background Color: The indicator allows you to set the background color for the clock display, while the leftmost empty cell can be independently customized with its own background color for table alignment.
・Clock and Market Status Colors: Separate color options are available for the clock text, market status during open, and market status during closed periods.
・Text Size: You can adjust the size of the text (small, normal, large) to fit your preferences.
・Table Position: You can position the digital clock and market status table in different locations on the chart: top left, top center, top right, bottom left, bottom center, and bottom right.
Alerts for Market Opening: The indicator will trigger alerts when a market (Tokyo, London, or New York) opens, notifying traders in real-time. This can help ensure that you don't miss any important market openings.
How to Use:
Setup:
Apply the Indicator: Add the Digital Clock with Market Status and Alerts indicator to your chart. Customize the time zone, text size, background colors, and table position based on your preferences.
Monitor Market Status: Watch the market status displayed for Tokyo, London, and New York to keep track of market openings and closings in real-time.
Receive Alerts: The indicator provides built-in alerts for market openings, helping you stay informed when a key market opens for trading.
Time Monitoring:
・Real-Time Clock: The current time is displayed with hours, minutes, and seconds for accurate tracking. The clock updates every second and reflects the selected time zone.
・Global Time Zones: Choose your desired time zone (Tokyo, New York, London, Sydney) to monitor the time most relevant to your trading strategy.
Market Status:
・Tokyo Market: The status will display "Tokyo OPEN" when the Tokyo market is active, and "Tokyo CLOSED" when it is outside of trading hours.
・London Market: Similarly, the indicator will show "London OPEN" or "London CLOSED" depending on whether the London market is currently active.
・New York Market: The New York market status follows the same structure, showing "NY OPEN" or "NY CLOSED."
Customization:
・Table Positioning: Easily move the table to the desired location on the chart to avoid overlap with other chart elements. The leftmost empty cell helps with alignment.
・Text and Background Color: Adjust the text and background colors to suit your personal preferences. You can also set independent colors for open and closed market statuses to easily distinguish between them.
Cautions and Disclaimer:
・Indicator Modifications: This indicator may be updated without prior notice, which could change or remove certain features.
・Trade Responsibility: This indicator is a tool to assist your trading, but responsibility for all trades remains with you. No guarantee of profit or success is implied, and losses can occur. Use it alongside your own analysis and strategy.
Digital Clock with Market Status and Alerts - 解説と使い方
概要:
Digital Clock with Market Status and Alerts インジケーターは、さまざまな世界のタイムゾーンで現在の時刻を表示し、東京、ロンドン、ニューヨークなどの主要な金融市場のステータスを提供します。このインジケーターにより、複数の市場のオープンおよびクローズ時間をリアルタイムで監視でき、市場がオープンする際にアラートを受け取ることができます。テーブルの位置、背景色、テキストカラー、フォントサイズなどのカスタマイズが可能です。
主な機能:
リアルタイムデジタル時計: 選択したタイムゾーン(東京、ニューヨーク、ロンドン、シドニー)の現在時刻を表示します。リアルタイムで更新され、時間、分、秒を正確に表示します。
世界の市場ステータス: 主要な金融市場のオープン/クローズ状況を表示します。
・東京市場: 午前9時~午後3時(日本時間)。
・ロンドン市場: 夏時間では16時~24時、冬時間では17時~1時(日本時間)。
・ニューヨーク市場: 夏時間では21時~5時、冬時間では22時~6時(日本時間)。
カスタマイズ可能な表示設定:
・背景色: 時計表示の背景色を設定できます。また、テーブルの左側に空白のセルを配置し、独立した背景色を設定することでテーブルの配置調整が可能です。
・時計と市場ステータスの色: 時計テキスト、オープン市場、クローズ市場の色を個別に設定できます。
・テキストサイズ: 小、標準、大から選択し、テキストサイズをカスタマイズ可能です。
・テーブル位置: デジタル時計と市場ステータスのテーブルをチャートのさまざまな場所(左上、中央上、右上、左下、中央下、右下)に配置できます。
市場オープン時のアラート: 市場(東京、ロンドン、ニューヨーク)がオープンするときにアラートを発し、リアルタイムで通知されます。これにより、重要な市場のオープン時間を逃さないようサポートします。
使い方:
セットアップ:
インジケーターを適用: チャートに「Digital Clock with Market Status and Alerts」インジケーターを追加し、タイムゾーン、テキストサイズ、背景色、テーブル位置を好みに応じてカスタマイズします。
市場ステータスを確認: 東京、ロンドン、ニューヨークの市場ステータスをリアルタイムで表示し、オープン/クローズ時間を把握できます。
アラートを受け取る: 市場オープン時のアラート機能により、重要な市場のオープンを見逃さないように通知が届きます。
時間管理:
・リアルタイム時計: 現在の時刻が秒単位で表示され、選択したタイムゾーンに基づいて正確に追跡できます。
・グローバルタイムゾーン: 東京、ニューヨーク、ロンドン、シドニーなど、トレードに関連するタイムゾーンを選択して監視できます。
市場ステータス:
・東京市場: 東京市場が開いていると「Tokyo OPEN」と表示され、閉じている場合は「Tokyo CLOSED」と表示されます。
・ロンドン市場: 同様に、「London OPEN」または「London CLOSED」が表示され、ロンドン市場のステータスを確認できます。
・ニューヨーク市場: ニューヨーク市場も「NY OPEN」または「NY CLOSED」で現在の状況が表示されます。
カスタマイズ:
・テーブル位置の調整: テーブルの位置を簡単に調整し、チャート上の他の要素と重ならないように配置できます。左側の空白セルで位置調整が可能です。
・テキストと背景色のカスタマイズ: テキストと背景の色を自分の好みに合わせて調整できます。また、オープン時とクローズ時の市場ステータスを区別するため、独立した色設定が可能です。
注意事項と免責事項:
・インジケーターの変更: このインジケーターは、予告なく変更や機能の削除が行われる場合があります。
・トレード責任: このインジケーターはトレードをサポートするツールであり、トレードに関する全責任はご自身にあります。利益を保証するものではなく、損失が発生する可能性があります。自分の分析や戦略と組み合わせて使用してください。
KillZones + ACD Fisher [TradingFinder] Sessions + Reversal Level🔵 Introduction
🟣 ACD Method
"The Logical Trader" opens with a thorough exploration of the ACD Methodology, which focuses on pinpointing particular price levels associated with the opening range.
This approach enables traders to establish reference points for their trades, using "A" and "C" points as entry markers. Additionally, the book covers the concept of the "Pivot Range" and how integrating it with the ACD method can help maximize position size while minimizing risk.
🟣 Session
The forex market is operational 24 hours a day, five days a week, closing only on Saturdays and Sundays. Typically, traders prefer to concentrate on one specific forex trading session rather than attempting to trade around the clock.
Trading sessions are defined time periods when a particular financial market is active, allowing for the execution of trades.
The most crucial trading sessions within the 24-hour cycle are the Asia, London, and New York sessions, as these are when substantial money flows and liquidity enter the market.
🟣 Kill Zone
Traders in financial markets earn profits by capitalizing on the difference between their buy/sell prices and the prevailing market prices.
Traders vary in their trading timelines.Some traders engage in daily or even hourly trading, necessitating activity during periods with optimal trading volumes and notable price movements.
Kill zones refer to parts of a session characterized by higher trading volumes and increased price volatility compared to the rest of the session.
🔵 How to Use
🟣 Session Times
The "Asia Session" comprises two parts: "Sydney" and "Tokyo." This session begins at 23:00 and ends at 06:00 UTC. The "Asia KillZone" starts at 23:00 and ends at 03:55 UTC.
The "London Session" includes "Frankfurt" and "London," starting at 07:00 and ending at 14:25 UTC. The "London KillZone" runs from 07:00 to 09:55 UTC.
The "New York" session starts at 14:30 and ends at 19:25 UTC, with the "New York am KillZone" beginning at 14:30 and ending at 22:55 UTC.
🟣 ACD Methodology
The ACD strategy is versatile, applicable to various markets such as stocks, commodities, and forex, providing clear buy and sell signals to set price targets and stop losses.
This strategy operates on the premise that the opening range of trades holds statistical significance daily, suggesting that initial market movements impact the market's behavior throughout the day.
Known as a breakout strategy, the ACD method thrives in volatile or strongly trending markets like crude oil and stocks.
Some key rules for employing the ACD strategy include :
Utilize points A and C as critical reference points, continually monitoring these during trades as they act as entry and exit markers.
Analyze daily and multi-day pivot ranges to understand market trends. Prices above the pivots indicate an upward trend, while prices below signal a downward trend.
In forex trading, the ACD strategy can be implemented using the ACD indicator, a technical tool that gauges the market's supply and demand balance. By evaluating trading volume and price, this indicator assists traders in identifying trend strength and optimal entry and exit points.
To effectively use the ACD indicator, consider the following :
Identifying robust trends: The ACD indicator can help pinpoint strong, consistent market trends.
Determining entry and exit points: ACD generates buy and sell signals to optimize trade timing.
Bullish Setup :
When the "A up" line is breached, it’s wise to wait briefly to confirm it’s not a "Fake Breakout" and that the price stabilizes above this line.
Upon entering the trade, the most effective stop loss is positioned below the "A down" line. It's advisable to backtest this to ensure the best outcomes. The recommended reward-to-risk ratio for this strategy is 1, which should also be verified through backtesting.
Bearish Setup :
When the "A down" line is breached, it’s prudent to wait briefly to ensure it’s not a "Fake Breakout" and that the price stabilizes below this line.
Upon entering the trade, the most effective stop loss is positioned above the "A up" line. Backtesting is recommended to confirm the best results. The recommended reward-to-risk ratio for this strategy is 1, which should also be validated through backtesting.
Advantages of Combining Kill Zone and ACD Method in Market Analysis :
Precise Trade Timing : Integrating the Kill Zone strategy with the ACD Method enhances precision in trade entries and exits. The ACD Method identifies key points for trading, while the Kill Zone focuses on high-activity periods, together ensuring optimal timing for trades.
Better Trend Identification : The ACD Method’s pivot ranges help spot market trends, and when combined with the Kill Zone’s emphasis on periods of significant price movement, traders can more effectively identify and follow strong market trends.
Maximized Profits and Minimized Risks : The ACD Method's structured approach to setting price targets and stop losses, coupled with the Kill Zone's high-volume trading periods, helps maximize profit potential while reducing risk.
Robust Risk Management : Combining these methods provides a comprehensive risk management strategy, strategically placing stop losses and protecting capital during volatile periods.
Versatility Across Markets : Both methods are applicable to various markets, including stocks, commodities, and forex, offering flexibility and adaptability in different trading environments.
Enhanced Confidence : Using the combined insights of the Kill Zone and ACD Method, traders gain confidence in their decision-making process, reducing emotional trading and improving consistency.
By merging the Kill Zone’s focus on trading volumes and the ACD Method’s structured breakout strategy, traders benefit from a synergistic approach that enhances precision, trend identification, and risk management across multiple markets.
Volatility and Volume by Hour EXT(Extended republication, use this instead of the old one)
The goal of this indicator is to show a “characteristic” of the instrument, regarding the price change and trading volume. You can see how the instrument “behaved” throughout the day in the lookback period. I've found this useful for timing in day trading.
The indicator creates a table on the chart to display various statistics for each hour of the day.
Important: ONLY SHOWS THE TABLE IF THE CHART’S TIMEFRAME IS 1H!
Explanation of the columns:
1. Volatility Percentage (Volat): This column shows the volatility of the price as a percentage. For example, a value of "15%" means the price movement was 15% of the total daily price movement within the hour.
2. Hourly Point Change (PointCh): This column shows the change in price points for each hour in the lookback period. For example, a value of "5" means the price has increased by 5 points in the hour, while "-3" means it has decreased by 3 points.
3. Hourly Point Change Percentage (PrCh% (LeverageX)): This column shows the percentage change in price points for each hour, adjusted with leverage multiplier. Displayed green (+) or red (-) accordingly. For example, a value of "10%" with a leverage of 2X means the price has effectively changed by 5% due to the leverage.
4. Trading Volume Percentage (TrVol): This column shows the percentage of the daily total volume that was traded in a specific hour. For example, a value of "10%" would mean that 10% of the day's total trading volume occurred in that hour.
5. Added New! - Relevancy Check: The indicator checks the last 24 candle. If the direction of the price movement was the same in the last 24 hour as the statistical direction in that hour, the background of the relevant hour in the second column goes green.
For example: if today at 9 o'clock the price went lower, so as at 9 o'clock in the loopback period, the instrument "behaves" according to statistics . So the statistics is probably more relevant for today. The more green background row the more relevancy.
Settings:
1. Lookback period: The lookback period is the number of previous bars from which data is taken to perform calculations. In this script, it's used in a loop that iterates over a certain number of past bars to calculate the statistics. TIP: Select a period the contains a trend in one direction, because an upward and a downward trend compensate the price movement in opposite directions.
2. Timezone: This is a string input that represents the user's timezone. The default value is "UTC+2". Adjust it to your timezone in order to view the hours properly.
3. Leverage: The default value is 10(!). This input is used to adjust the hourly point change percentage. For FOREX traders (for example) the statistics can show the leveraged percentage of price change. Set that according the leverage you trade the instrument with.
Use at your own risk, provided “as is” basis!
Hope you find it useful! Cheers!
Rolling VWAPThe Rolling VWAP indicator is a powerful technical analysis tool designed to help traders identify significant price levels and potential reversal points. This indicator combines a rolling volume-weighted average price (VWAP) with multiple standard deviation bands to provide a dynamic view of price volatility and market trends.
Key Features:
Rolling VWAP Calculation: The indicator calculates the VWAP using the high, low, and close prices (HLC3) over a user-defined rolling period. This VWAP is then plotted on the chart, providing a reliable benchmark for average price levels over a specified timeframe.
Adjustable Timeframes: Users can select from multiple timeframes (1 hour, 4 hours, 1 day, 3 days, 1 week) to calculate the RVWAP, allowing flexibility to analyze market trends over different periods.
Multiple Standard Deviation Bands: The indicator includes up to five adjustable standard deviation bands, each with customizable multipliers. These bands are plotted around the RVWAP to indicate potential support and resistance levels, helping traders identify areas of high and low volatility.
Customizable Display Settings: Users can toggle the visibility of each band and adjust their colors and transparency, making it easy to tailor the indicator to their specific analysis needs.
How to Use:
Selecting the VWAP Timeframe: Choose the desired timeframe for VWAP calculation from the options provided (1 hour, 4 hours, 1 day, 3 days, 1 week). This allows you to analyze price action over different periods and identify significant trends.
Adjusting Band Multipliers: Customize the multipliers for each standard deviation band to suit your trading strategy. By default, the indicator includes bands with multipliers of 2.0, 2.5, 3.0, 3.5, and 4.0. Adjust these values based on your preferred levels of price deviation.
Interpreting the Bands: The standard deviation bands provide key insights into market volatility. Inner Bands (e.g., 2.0 StdDev) indicate areas of normal price fluctuation. Price movement within these bands is generally considered stable. Outer Bands (e.g., 3.5 or 4.0 StdDev) highlight extreme price deviations. Price reaching these bands may signal overbought or oversold conditions, potentially leading to reversals.
Combining with Other Indicators: Enhance your analysis by using this indicator in conjunction with other technical tools such as moving averages, RSI, or MACD. This helps confirm signals and improve trading decisions.
Best Practices:
Trend Identification: Use the Rolling VWAP to identify the prevailing market trend. A rising VWAP indicates an uptrend, while a falling VWAP suggests a downtrend.
Support and Resistance Levels: The standard deviation bands act as dynamic support and resistance levels. Monitor price action around these bands for potential entry and exit points.
Volatility Analysis: Wider bands indicate higher market volatility, while narrower bands suggest lower volatility. Adjust your trading strategy accordingly based on the observed volatility levels.
24/7 Trading Instruments: This indicator is particularly useful for instruments that trade 24/7 and do not have defined sessions, such as cryptocurrencies. Unlike a session-anchored VWAP, the rolling VWAP provides a continuous measure of average price levels, making it ideal for analyzing markets that operate around the clock.
By integrating the Rolling VWAP indicator into your trading routine, you can gain a deeper understanding of price dynamics and make more informed trading decisions. Whether you are a day trader, swing trader, or long-term investor, this indicator provides valuable insights to help you navigate the markets with confidence.
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
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
Tops & Bottoms - Day of Week Report█ OVERVIEW
The indicator tracks when the weekly tops and bottoms occur and reports the statistics by the days of the week.
█ CONCEPTS
Not all the days of the week are equal, and the market dynamic can follow through or shift over the trading week. Tops and bottoms are vital when entering a trade, as they will decide if you are catching the train or being straight offside. They are equally crucial when exiting a position, as they will determine if you are closing at the optimal price or seeing your unrealized profits vanish.
This indicator is before all for educational purposes. It aims to make the knowledge available to all traders, facilitate understanding of the various markets, and ultimately get to know your trading pairs by heart (and saving a lot of your time backtesting!).
USDJPY tops and bottoms percentages on any given week.
USDJPY tops and bottoms percentages on up weeks versus down weeks.
█ FEATURES
Custom interval
By default, the indicator uses the weekly interval defined by the symbol (e.g., Monday to Sunday). This option allows you to specify your custom interval.
Weekly interval type filter
Analyze the weekly interval on any weeks, up weeks, or down weeks.
Configurable time range filter
Select the period to report from.
█ NOTES
Trading session
The indicator analyzes the days of the week from the daily chart. The daily trading sessions are defined by the symbol (e.g., 17:00 - 17:00 on EURUSD).
Extended/electronic trading session
The indicator can include the extended hours when activated on the chart, using the 24-hour or 1440-minute timeframe.
█ HOW TO USE
Plot the indicator and navigate on the 1-day or 24-hour timeframe.
Cast ForwardThis indicator will not forecast price action. It will not predict price movement nor will it in any way predict the outcome of any trade you may take. This is not a signal for buying or selling. You must do your own back testing and analysis for trading.
Time and price are the two most important components of market data. Where was price at what time? To help visualize this question I created this indicator. It allows for the previous session data to be overlayed onto the chart offset forward 24 hours. What this means is that you have the high, (high/low)/2, and low of each candle plotted on top of your chart for the time frame of the current chart, but offset so that the data from the current candle has the data from the corresponding candle 24 hours prior lined up on the x-axis.
SMA Logic: I used the SMA (Simple Moving Average) function with a length of 1 to plot the data points without any smoothing to give the true values of the data.
For Intraday Charting
For Electronic Trading Hours:
In order to line up the data correctly, for intraday charts, I used the current chart timeframe and divided it into 1380 (number of minutes in the 23 hour futures market trading day) to set the data offset. Using the same math logic, this indicator also gives the correct correlated data on the 30 second time frame. If the chart time frame that is currently being used does not allow for correct data correlation (not a factor of 1380) it will not plot the data.
For Regular Trading Hours:
In order to line up the data correctly, for intraday charts, I used the current chart timeframe and divided it into 405 (number of minutes in the 6 hour 45 minutes New York regular session trading day, including the 15 minute settlement time) to set the data offset. This indicator also gives the correct correlated data on the 30 second time frame. If the chart time frame that is currently being used does not allow for correct data correlation (not a factor of 405) it will not plot the data.
For the Daily Chart:
This indicator plots a visualization of the 20-40-60 day IPDA data range; (The IPDA data range helps traders identify liquidity, price gaps, and equilibrium points in the market, providing insights for optimal trade entries and market structure shifts). It does this using the same SMA logic as the intraday plot. What this means is it offsets the historical data of the daily chart 20, 40, or 60 bars forward. You can plot any combination of the three on the chart at one time, but these will not show on the intraday chart. This allows for visualization of where the market will possibly seek liquidity, seek to rebalance, or seek equilibrium in the future.
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 and see if it is part of a predefined user session and/or inside a datetime window. All existing session
functions I found in the documentation e.g. "not na(time(timeframe, session, timezone))" are not suitable for
strategies, since the execution of the orders is delayed by one bar due to the execution happening at the bar close.
So a prediction for the next bar is necessary. Moreover, a history operator with a negative value is not allowed e.g.
`not na(time(timeframe, session, timezone) )` expression is not valid. 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 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
happens between the prediction bar and the actual bar (probably due to a holiday or half session day 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 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 objectfrom_chart
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 user session object from session days and time range
Namespace types: UserSession
Parameters:
this (UserSession) : - The user-defined 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 (SessionTimeRange ) : - The array of all the session time ranges during a session day
Returns: - The user session object
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 user session into a human-readable string
Namespace types: UserSession
Parameters:
this (UserSession) : - The user-defined session object with the day and the time range selection
Returns: - The string of the user session
method to_string(this)
to_string - Formats the bar into a human-readable string
Namespace types: Bar
Parameters:
this (Bar) : - The bar object with the open and close times
Returns: - The string of the bar times
method to_string(this)
to_string - Formats the chart session into a human-readable string
Namespace types: ChartSession
Parameters:
this (ChartSession) : - The chart session object that contains the days and the time range shown in the chart
Returns: - The string of the chart session
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 from_chart(this)
from_chart - Initialize the session days object from the chart
Namespace types: SessionDays
Parameters:
this (SessionDays) : - The session days object that will hold the day selection
Returns: - The user session object
method from_chart(this)
from_chart - Initialize the session time range object from the chart
Namespace types: SessionTimeRange
Parameters:
this (SessionTimeRange) : - The session time range object that will hold the start and end time of the daily session
Returns: - The session time range object
method from_chart(this)
from_chart - Initialize the session object from the chart
Namespace types: ChartSession
Parameters:
this (ChartSession) : - The chart session object that will hold the days and the time range shown in the chart
Returns: - The chart session object
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 user session into a session string
Namespace types: UserSession
Parameters:
this (UserSession) : - The user-defined session object with the day and the time range selection
Returns: - The string of the user session
method to_sess_string(this)
to_sess_string - Formats the chart session into a session string
Namespace types: ChartSession
Parameters:
this (ChartSession) : - The chart session object that contains the days and the time range shown in the chart
Returns: - The string of the chart 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 user session object from the session string in exchange timezone (syminfo.timezone)
Namespace types: UserSession
Parameters:
this (UserSession) : - The user-defined session object that will hold the day and the time range selection
sess (string) : - The session string that represents the user session HHmm-HHmm,HHmm-HHmm:ddddddd
Returns: - The session time range object
method from_sess_string(this, sess, refTimezone)
from_sess_string - Initialize the user session object from the session string
Namespace types: UserSession
Parameters:
this (UserSession) : - The user-defined session object that will hold the day and the time range selection
sess (string) : - The session string that represents the user 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 eq(this, other)
eq - Compare two bars
Namespace types: Bar
Parameters:
this (Bar) : - The bar object with the open and close times
other (Bar) : - The bar object to compare with
Returns: - Whether this bar is equal to the other one
method get_open_time(this)
get_open_time - The open time object
Namespace types: Bar
Parameters:
this (Bar) : - The bar object with the open and close times
Returns: - The open time object
method get_close_time(this)
get_close_time - The close time object
Namespace types: Bar
Parameters:
this (Bar) : - The bar object with the open and close times
Returns: - The close time object
method get_time_range(this)
get_time_range - Get the time range of the bar
Namespace types: Bar
Parameters:
this (Bar) : - The bar object with the open and close times
Returns: - The time range that the bar is in
getBarNow()
getBarNow - Get the current bar object with time and time_close timestamps
Returns: - The current bar
getFixedBarNow()
getFixedBarNow - Get the current bar with fixed width defined by the timeframe. Note: There are case like SPX 15min timeframe where the last session bar is only 10min. This will return a bar of 15 minutes
Returns: - The current bar
method is_in_window(this, win)
is_in_window - Check if the given bar is between the start and end dates of the window
Namespace types: Bar
Parameters:
this (Bar) : - The bar to check if it is between the from and to datetimes of the window
win (DateTimeWindow) : - The time window object with the from and to datetimes
Returns: - Whether the current bar is inside the datetime window
method is_in_timerange(this, rng)
is_in_timerange - Check if the given bar is inside the session time range
Namespace types: Bar
Parameters:
this (Bar) : - The bar to check if it is between the from and to datetimes
rng (SessionTimeRange) : - The session time range object with the start and end time of the daily session
Returns: - Whether the bar is inside the session time range and if this part of the next trading day
method is_in_days(this, days)
is_in_days - Check if the given bar is inside the session days
Namespace types: Bar
Parameters:
this (Bar) : - The bar to check if its day is a trading day
days (SessionDays) : - The session days object with the day selection
Returns: - Whether the current bar day is inside the session
method is_in_session(this, sess)
is_in_session - 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: Bar
Parameters:
this (Bar) : - The bar to check if it is between the from and to datetimes
sess (UserSession) : - The user-defined session object with the day and the time range selection
Returns: - Whether the current time is inside the session
method next_bar(this, offsetBars)
next_bar - Predicts the next bars open and close time based on the charts session
Namespace types: ChartSession
Parameters:
this (ChartSession) : - The chart session object that contains the days and the time range shown in the chart
offsetBars (simple int) : - The number of bars forward
Returns: - Whether the current time is inside the session
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
UserSession
UserSession - Object that represents a user-defined session
Fields:
days (SessionDays) : - The map of the user-defined trading days
timeRanges (SessionTimeRange ) : - The array with all time ranges of the user-defined session during the trading days
Bar
Bar - Object that represents the bars' open and close times
Fields:
openUnixTime (series int) : - The open time of the bar
closeUnixTime (series int) : - The close time of the bar
chartDayOfWeek (series int)
ChartSession
ChartSession - Object that represents the default session that is shown in the chart
Fields:
days (SessionDays) : - A map with the trading days shown in the chart
timeRange (SessionTimeRange) : - The time range of the session during a trading day
isFinalized (series bool)
Scoopy StacksWaffle Around Multiple
(Open, High, Low, Close) Stacks On
Pre/Post Market & (Daily, Weekly,
Monthly, Yearly) Sessions With
Meticulous Columns, Rows, Tooltips,
Colors, Custom Ideas, and Alerts.
Sessions Use Two Step Incremental Values
Default Value: (1) Shows Two Previous
(O, H, L, C); Increasing Value Swaps
Sessions With Next Two Stacks.
⬛️ KEY WORDS:
🟢 Crossover | 🔴 Crossunder
📗 High | 📕 Low
📔 Open | 📓 Close
🥇 First Idea | 🥈 Second Idea
🥉 Third Idea | 🎖️ Fourth Idea
🟥 ALERTS:
Default Option: (Per Bar)
Alerts Once Conditions Are Met
(Bar Close) Alerts When Bar Closes
Default Option: (Reg)
Alerts During Regular Market
Trading Hours, (0930-1600)
(Ext) Alerts During Extended
Market Hours, (1600-0930)
(24/7) Alerts All Day
Optional Preferences:
Regular Alerts - Stocks
Extended Alerts - Futures
24/7 Alerts - Crypto
🟧 STACKS:
Default Value: (1)
Incremental Stack Value, Increasing Value
Swaps Sessions With the Next Two Stacks
(✓) Swap Stacks?
Pre/Post Market High/Lows,
1-2 Day High/Lows, 1-2 Week High/Lows,
1-2 Month High/Lows, 1-2 Year High/Lows
( ) Swap Stacks?
Pre/Post Market Open/Close,
1-2 Day Open/Close, 1-2 Week Open/Close,
1-2 Month Open/Close, 1-2 Year Open/Close
🟨 EXAMPLES:
Default Stack:
🟢 | 📗 Pre Market High (PRE) | 4600.00
🔴 | 📕 Post Market Low (POST) | 420.00
Optional: (Open)
🟢 | 📔 Post Market Open (POST) | 4400.00
Optional: (Close)
🔴 | 📓 Pre Market Close (PRE) | 430.00
Default Stack Value: (1)
🔴 | 📗 1 Day High (1DH) | 460.00
Next Stack Value: (3)
🟢 | 📕 4 Day Low (4DL) | 420.00
Optional: (Open)
🔴 | 📔 2 Day Open (2DO) | 440.00
Optional: (Close)
🟢 | 📓 3 Day Close (3DC) | 430.00
Default Stack Value: (5)
🟢 | 📗 5 Week High (5WH) | 460.00
Next Stack Value: (7)
🔴 | 📕 8 Week Low (8WL) | 420.00
Optional: (Open)
🔴 | 📔 7 Week Open (7WO) | 4400.00
Optional: (Close)
🟢 | 📓 6 Week Close (6WC) | 430.00
Default Stack Value: (9)
🔴 | 📗 9 Month High (9MH) | 460.00
Next Stack Value: (11)
🟢 | 📕 12 Month Low (12ML) | 420.00
Optional: (Open)
🟢 | 📔 11 Month Open (11MO) | 4400.00
Optional: (Close)
🔴 | 📓 10 Month Close (10MC) | 430.00
Default Stack Value: (13)
🟢 | 📗 13 Year High (13YH) | 460.00
Next Stack Value: (15)
🟢 | 📕 16 Year Low (16YL) | 420.00
Optional: (Open)
🔴 | 📔 15 Year Open (15YO) | 4400.00
Optional: (Close)
🔴 | 📓 14 Year Close (14YC) | 430.00
🟩 TABLES:
Default Value: (1)
Moves Table Up, Down, Left, or Right
Based on Second Default Value
First Default Value: (Top Right)
Sets Table Placement, Middle Center
Allows Table To Move In All Directions
Second Default Value: (Default)
Fixed Table Position, Switching Values
Moves Direction of the Table
🟦 IDEAS:
(✓) Show Ideas?
Shows Four Ideas With Custom Texts
and Values; Ideas Are Based Around
Post-It Note Reminders with Alerts
Suggestions For Text Ideas:
Take Profit, Stop Loss, Trim, Hold,
Long, Short, Bounce Spot, Retest,
Chop, Support, Resistance, Buy, Sell
🟪 EXAMPLES:
Default Value: (5)
Shows the Custom Table Value For
Sorted Table Positions and Alerts
Default Text: (🥇)
Shown On First Table Cell and
Message Appearing On Alerts
Alert Shows: 🟢 | 🥇 | 5.00
Default Value: (10)
Shows the Custom Table Value For
Sorted Table Positions and Alerts
Default Text: (🥈)
Shown On Second Table Cell and
Message Appearing On Alerts
Alert Shows: 🔴 | 🥈 | 10.00
Default Value: (50)
Shows the Custom Table Value For
Sorted Table Positions and Alerts
Default Text: (🥉)
Shown On Third Table Cell and
Message Appearing On Alerts
Alert Shows: 🟢 | 🥉 | 50.00
Default Value: (100)
Shows the Custom Table Value For
Sorted Table Positions and Alerts
Default Text: (🎖️)
Shown On Fourth Table Cell and
Message Appearing On Alerts
Alert Shows: 🔴 | 🎖️ | 100.00
⬛️ REFERENCES:
Pre-market Highs & Lows on regular
trading hours (RTH) chart
By Twingall
Previous Day Week Highs & Lows
By Sbtnc
Screener for 40+ instruments
By QuantNomad
Daily Weekly Monthly Yearly Opens
By Meliksah55
Ribbit RangesBounce Around Multiple
(Open, High, Low, Close) Ranges
On Pre/Post Market & (Daily, Weekly,
Monthly, Yearly) Sessions With
Meticulous Lines, Labels, Tooltips,
Colors, Custom Ideas, and Alerts.
Sessions Use Two Step Incremental Values
Default Value: (1) Shows Two Previous
(O, H, L, C); Increasing Value Swaps
Sessions With Next Two Ranges.
⬛️ KEY WORDS:
🟢 Crossover | 🔴 Crossunder
📗 High | 📕 Low
📔 Open | 📓 Close
🥇 First Idea | 🥈 Second Idea
🥉 Third Idea | 🎖️ Fourth Idea
🟥 ALERTS:
Default Option: (Per Bar)
Alerts Once Conditions Are Met
(Bar Close) Alerts When Bar Closes
Default Option: (Reg)
Alerts During Regular Market
Trading Hours, (0930-1600)
(Ext) Alerts During Extended
Market Hours, (1600-0930)
(24/7) Alerts All Day
Optional Preferences:
Regular Alerts - Stocks
Extended Alerts - Futures
24/7 Alerts - Crypto
🟧 RANGES:
Default Value: (1)
Incremental Range Value, Increasing Value
Swaps Sessions With the Next Two Ranges
(✓) Swap Ranges?
Pre/Post Market High/Lows,
1-2 Day High/Lows, 1-2 Week High/Lows,
1-2 Month High/Lows, 1-2 Year High/Lows
( ) Swap Ranges?
Pre/Post Market Open/Close,
1-2 Day Open/Close, 1-2 Week Open/Close,
1-2 Month Open/Close, 1-2 Year Open/Close
🟨 EXAMPLES:
Default Range:
🟢 | 📗 Pre Market High (PRE) | 4600.00
🔴 | 📕 Post Market Low (POST) | 420.00
Optional: (Open)
🟢 | 📔 Post Market Open (POST) | 4400.00
Optional: (Close)
🔴 | 📓 Pre Market Close (PRE) | 430.00
Default Range Value: (1)
🔴 | 📗 1 Day High (1DH) | 460.00
Next Range Value: (3)
🟢 | 📕 4 Day Low (4DL) | 420.00
Optional: (Open)
🔴 | 📔 2 Day Open (2DO) | 440.00
Optional: (Close)
🟢 | 📓 3 Day Close (3DC) | 430.00
Default Range Value: (5)
🟢 | 📗 5 Week High (5WH) | 460.00
Next Range Value: (7)
🔴 | 📕 8 Week Low (8WL) | 420.00
Optional: (Open)
🔴 | 📔 7 Week Open (7WO) | 4400.00
Optional: (Close)
🟢 | 📓 6 Week Close (6WC) | 430.00
Default Range Value: (9)
🔴 | 📗 9 Month High (9MH) | 460.00
Next Range Value: (11)
🟢 | 📕 12 Month Low (12ML) | 420.00
Optional: (Open)
🟢 | 📔 11 Month Open (11MO) | 4400.00
Optional: (Close)
🔴 | 📓 10 Month Close (10MC) | 430.00
Default Range Value: (13)
🟢 | 📗 13 Year High (13YH) | 460.00
Next Range Value: (15)
🟢 | 📕 16 Year Low (16YL) | 420.00
Optional: (Open)
🔴 | 📔 15 Year Open (15YO) | 4400.00
Optional: (Close)
🔴 | 📓 14 Year Close (14YC) | 430.00
🟩 COLORS:
(✓) Swap Colors?
Text Color Is Shown Using
Background Color
( ) Swap Colors?
Background Color Is Shown
Using Text Color
🟦 IDEAS:
(✓) Show Ideas?
Plots Four Ideas With Custom Lines
and Labels; Ideas Are Based Around
Post-It Note Reminders with Alerts
Suggestions For Text Ideas:
Take Profit, Stop Loss, Trim, Hold,
Long, Short, Bounce Spot, Retest,
Chop, Support, Resistance, Buy, Sell
🟪 EXAMPLES:
Default Value: (5)
Shows the Custom Value For
Lines, Labels, and Alerts
Default Text: (🥇)
Shown On First Label and
Message Appearing On Alerts
Alert Shows: 🟢 | 🥇 | 5.00
Default Value: (10)
Shows the Custom Value For
Lines, Labels, and Alerts
Default Text: (🥈)
Shown On Second Label and
Message Appearing On Alerts
Alert Shows: 🔴 | 🥈 | 10.00
Default Value: (50)
Shows the Custom Value For
Lines, Labels, and Alerts
Default Text: (🥉)
Shown On Third Label and
Message Appearing On Alerts
Alert Shows: 🟢 | 🥉 | 50.00
Default Value: (100)
Shows the Custom Value For
Lines, Labels, and Alerts
Default Text: (🎖️)
Shown On Fourth Label and
Message Appearing On Alerts
Alert Shows: 🔴 | 🎖️ | 100.00
⬛️ REFERENCES:
Pre-market Highs & Lows on regular
trading hours (RTH) chart
By Twingall
Previous Day Week Highs & Lows
By Sbtnc
Screener for 40+ instruments
By QuantNomad
Daily Weekly Monthly Yearly Opens
By Meliksah55
VIX HeatmapVIX HeatMap
Instructions:
- To be used with the S&P500 index (ES, SPX, SPY, any S&P ETF) as that's the input from where the CBOE calculates and measures the VIX. Can also be used with the Dow Jones, Nasdaq, & Nasdaq100.
Description:
- Expected Implied Volatility regime simplified & visualized. Know if we are in a high, medium, or low volatility regime, instantly.
- Ranges from Hot to Cold: The hotter the heat-map, the higher the implied volatility and fear & vice versa.
- The VIX HeatMap, color-maps important VIX levels (7 in this case) in measuring volatility for day trading & swing trading.
Using the VIX HeatMap:
- A LOW level volatility environment: Represented by "cooler" colors (Blue & White) depicts that the level of volatility and fear is low. Percentage moves on the index level are going to be tame and less volatile more often than not. Low fear = low perceived risk.
- A MEDIUM level volatility environment: Represented by "warmer" colors (Green & Yellow) depicts that the markets are transitioning from a calmer period or from a more fearful period. Market volatility here will be higher and provide more volatile swings in price.
- A HIGH level volatility environment: Represented by "hotter" colors (Orange, Red, & Purple) depicts that the markets are very fearful at the moment and will have big swings in both directions. Historically, extreme VIX levels tend to coincide with bottoms but are in no way predictive of the exact timing as the volatile moves can continue for an extended period of time.
- Transitioning between the 7 VIX Zones: Each and every one of these specific VIX zone levels is important.
1. Extreme low: <16
2. Low: 16 to 20
3. Normal: 20 to 24
4. Medium: 24 to 28
5. Med-High: 28 to 32
6. High: 32 to 36
7. Extreme high: >36
- These VIX levels in particular measure volatility changes that have a major impact on switching between smaller time frames and measuring depths of a sell move and vice versa. Each level also behaves as its own support & resistance level in terms of taking a bit of effort to switch regimes, and aids in identifying and measuring the potential depth of pullbacks in bull markets and bounces in bear markets to reveal reversal points.
- Examples of VIX level supports depicted on the chart marked with arrows. From left to right:
1. March 10th: Markets jumped 2 volatility levels in 2 days. The fluctuations from blue to yellow to green where a sign that price action would reverse from the selloff.
2. March 28th: As soon as we move from green to the blue VIX level (<20), markets began to rally and only ended when the volatility level moved sub VIX 16 (white).
3. May 4th & 24th: Next we see the 2 dips where volatility levels went from blue to green (VIX > 20), marked bottoms and reversed higher.
4. June 1st: We see a change in VIX regime yet again into lower VIX level and markets rocket higher.
Knowing the current VIX regime is a very important tool and aid in trading, now easily visualized.
Expected VolatilityExpected Volatility
Hello and welcome to my first indicator! I'm publishing this indicator as free to use and modify because I think it's a great place to learn and I hope I can teach you something.
There are some terms which you need to understand before I begin explaining this indicator and what it does for you:
Daily Settlement - The price at which a market closes when the trading day closes (RTH or Regular Trading Hours close)
Standard Deviation - A measure in statistics that declares how far away a data point is from the mean when compared with all the data points before it to an extent
Now for the history behind this indicator:
Rule of 16. This goes back to the VIX, or S&P 500 volatility index. The idea behind the volatility index is to determine what magnitude of movement could be expected from the market the following day based on recent movement. The rule of 16 is an easier way to refer to the square root of the number of trading days in a year. There are 252 trading days in a year and the square root of 252 is approximately 15.87. We estimate it to be 16 because it's easier to talk about when it's easier to say and therefore easier to remember.
The relevance of this rule is that when the VIX is at 16, we can expect a market movement of 1% or so unless some special circumstances overrule this estimate. To get the expected market movement, we take 16 and divide by 16 and get 1, or 1%. If the VIX is trading at 24, we get 24/16 or 1.5 which is 1.5% movement. This indicator seeks to simplify the math and lay it out in a visual way to show the highest probability of range the market is expected to trade.
Thanks for taking the time to read my description, I hope you like my indicator.
Special thanks to my trading friends and coaches for helping me complete this indicator.
Take Session High/Low Alert [MsF]Japanese below / 日本語説明は英文の後にあります。
-------------------------
This indicator that displays High/Low lines for each session. The Key Levels of each session can be visually recognized, which is useful for PD Array analysis. You can display the last 3 days. Based on trinity by ICT.
The biggest feature is that the color shape of the line changes when reaching High/Low. Of course, you can also set alerts.
Unreached High/Low lines can be extended to the right. hides all timeframes over 1 hour. (alert is alive)
You can choose 4 sessions. If you only want to use 3 sessions, you can do that by setting the same session time for 2 of the 4 session settings.
About Parameter Settings
Session Time: Please set it to be a 24-hour cycle. You can also specify the time zone. The default is NY time.
Basis/Other color: The first time specified in "Session Time" in this indicator's parameter is the "Basis color". "Other color" is a line other than that.
Enable Time Lines: You can turn on/off the display of vertical lines.
High/Low color: High/Low line setting that has not been reached.
Taken color: High/Low line setting that has already been reached.
Extend Lines: Allows unreached High/Low lines to be extended to the right in the chart.
-------------------------
セッションごとのHigh/Lowをライン表示するインジケーターです。
過去約3日分を表示することができます。
最大の特徴はHigh/Low到達時にラインの色形が変わることです。もちろんアラート設定も可能です。
未到達のHigh/Lowラインは右側に延長することができます。
チャート表示がビジーとなる為、1時間を超える時間足ではすべて非表示とする仕様です。(アラートは生きてます)
セッションは4つ指定できます。
もしセッションを3つのみ使用したい場合は、4つのセッション設定の内2つに同じセッション時間を設定することで実現可能です。
■パラメータ設定
Session Time:24時間周期となるように設定してください。またタイムゾーンが指定できます。デフォルトはNY timeです。
Basis/Other color:パラメータの"Session Time"にて一番最初に指定した時間が基準=Basisとなります。Otherはそれ以外のラインとなります。
Enable Time Lines:垂直ラインの表示ON/OFFが可能です。
High/Low color:未到達のHigh/Lowライン設定となります。
Taken color:到達済みのHigh/Lowライン設定となります。
Extend Lines:未到達のHigh/Lowラインを右に延長できます。
Trading ChannelTrading Channel aims to be a canvas on which to develop any strategy that the user feels comfortable with.
The greatest utility of the script lies in the fact that it plots a channel over the price action, as a support and resistance pivot, within which the price action develops.
It is a script of maximum simplicity in concept and development, but at the same time presents robust support to the price action and a quick visual aid complementary to any indicators that the user works with, feels comfortable with, and uses as a basis for their strategies.
The script includes the following features (most of them disabled by default, available for potential use without the need to add additional indicators):
Fast SMA
Medium SMA
Slow SMA (disabled)
Fast EMA (disabled)
Medium EMA (disabled)
Slow EMA (disabled)
Pivot
Pivot SMA
P Multiplier
Set of resistance and support pivots according to the studies of John L. Person (R3, R2, R1, S1, S2, S3 and midpoints) (disabled by default)
Channel for the current time period in use
Channels for extended time periods (disabled by default)
Various trend, momentum, and overbought/oversold indicating labels (note that the calculations for their representation are based on SMA's even though EMA's are visualized).
SMA's/EMA's
Both are available as both are used as basic indicators for different types of strategies. The default selection of SMA's in this case is based on the fact that the script development is largely based on the studies shared by John L. Person in the area of pivots and by Bill Williams in the area of fractals. Note also that for that same reason the various trend, momentum, and overbought/oversold indicating labels are calculated based on them.
Set of resistance and support pivots
They are included as a consultation tool especially for the higher time periods. They can be used to mark the most interesting supports/resistances and not lose sight of them while operating in lower time periods. Marking monthly, weekly, and daily pivots can be very useful. Additionally, marking S1 and R2 for bullish trends, S1 and R1 for ranges, and S2 and R1 for bearish trends can provide an even more precise framework to work on.
P Multiplier
It is set by default at 4, and is the basis for being able to consider during the use of a specific time frame, the price action with respect to higher time frames. It is the multiplier used for the generation of channels for extended time periods.
Channel for the current time period in use
It is a channel formed by the maximum and minimum closing of the last 21 periods. This value is modifiable and its adjustment depends on the asset under study. 24/7 markets show good results with this adjustment (in the case of BTC really good).
This channel represents a pivot in the form of a yellow middle line, with its support and resistance extremes on the upper green and lower red lines. The same green and red lines, referenced this time to the maximum, are added and serve as possible stop-loss marks.
Channels for extended time periods
Enabling the maximum and minimum channels for extended periods can provide a better idea of the price situation (it is recommended to disable the channel in use and enable the upper one for consultation, it provides a better vision).
Identifying labels:
Following a summary explanation for possible long entries, the same but opposite should be considered for possible short entries:
Small green arrow under candle: indicates possible upward trend (pivot above pivot SMA)
Large green arrow under candle: indicates upward trend (pivot above pivot SMA and above fast SMA)
Green triangle over candle: indicates channel breakout, possible upward momentum (represented as a fractal as its concept is the same)
Green/red arrows at the bottom of the chart: intended to confirm the validity of a signal (should doubt green indications with red lower arrow and vice versa)
Green/red dots at the bottom of the chart: red represents areas of strong resistance and green signals of strong support (with red dots, proceed with caution despite green signals, and vice versa)
Comments
It is emphasized that the basic and most useful functionality of this script is to provide a reliable base on which to develop any strategy, as a framework for working.
If the identifying labels are used, it should be taken into account that the earliest will always be the most reliable and valuable, but their confirmation will always depend on the user's strategy.
Its use in conjunction with the "Pivot Position for Trading Channel" indicator can serve as a base for the development of different strategies, by providing indication of the relative position of the price within the channel.
This script is just a consultation tool with didactic goals, it should not be used as an investment recommendation and the information provided should not be relied upon as such.
------------------------
Trading Channel pretende ser un lienzo sobre el que desarrollar cualquiera que sea la estrategia con la que el usuario se sienta más cómodo.
La mayor utilidad del script radica en que se traza sobre la acción del precio un canal, a modo de pivotes de soporte y resistencia, dentro del cual se desarrolla la acción del precio.
Se trata de un script de máxima sencillez en concepto y desarrollo, pero que a la vez presenta un soporte robusto a la acción del precio y una ayuda rápida visual complementaria a cualquieras que sean los indicadores con los que el usuario trabaje, se sienta más cómodo y utilice como base de sus estrategias.
El script incluye las siguientes funcionalidades (la mayoría desactivadas por defecto, disponibles para su potencial uso sin necesidad de añadir indicadores adicionales):
- SMA rápida
- SMA media
- SMA lenta (desactivada)
- EMA rápida (desactivada)
- EMA media (desactivada)
- EMA lenta (desactivada)
- Pivote
- SMA de pivote
- Multiplicador de P
- Conjunto de pivotes resistencia y soporte de acuerdo a los estudios de John L. Person (R3, R2, R1, S1, S2, S3 y puntos medios) (desactivados por defecto)
- Canal para el periodo temporal en uso
- Canales para periodos temporales extendidos (desactivados por defecto)
- Diversas etiquetas indicativas de cambios de tendencia, de impulso y de sobrecompra y sobreventa (nótese que los cálculos para su representación están basados en SMA's aunque se visualicen EMA's).
SMA's/EMA's
Ambas disponibles pues tanto unas como otras son utilizadas como indicadores básicos para diferentes tipos de estrategias. La selección de SMA's por defecto en este caso se basa en que las bases para desarrollo del script son en gran medida los estudios compartidos por John L. Person en el área de pivotes y de Bill Williams en el área de los fractales. Nótese también que por esa misma razón las diversas etiquetas indicativas de cambios de tendencia, impulso y sobrecompra/sobreventa se calculan en base a ellas.
Conjunto de pivotes resistencia y soporte
Se incluyen como herramienta de consulta sobre todo para los periodos temporales más altos. Pueden utilizarse para marcar los soportes/resistencias de más interés y no perderlos de vista mientras se opera en periodos de tiempo más bajos. De acuerdo a los estudios de John L. Person, marcarse los pivotes mensuales, semanales y diarios puede resultar de mucha utilidad. Adicionalmente, marcar S1 y R2 para tendencias alcistas, S1 y R1 para rangos, y S2 y R1 para tendencias bajistas puede proporcionar un marco aún más preciso sobre el que trabajar.
Multiplicador de p
Está fijado por defecto en 4, y es la base para poder considerar durante el uso de una franja temporal concreta, la acción del precio respecto a franjas temporales superiores. Es el multiplicador utilizado para la generación de los canales para periodos temporales extendidos.
Canal para el periodo temporal en uso
Se trata de un canal conformado por los cierres máximos y mínimos de los últimos 21 periodos. Este valor es modificable y su ajuste depende del activo en estudio. Mercados 24/7 muestran buenos resultados con este ajuste (en el caso de BTC realmente buenos).
Este canal representa en cierta manera un pivote en forma de línea intermedia amarilla, con sus extremos de soporte y resistencia en las líneas verdes superior y roja inferior. Se añaden las mismas líneas verdes y rojas, referenciadas esta vez a los máximos, que sirven como posibles marcas de stop-loss.
Canales para periodos temporales extendidos
Habilitar los máximos y mínimos de canales de periodos extendidos puede proporcionar una mejor idea de la situación del precio (se recomienda deshabilitar el canal en uso y habilitar el superior para consulta, proporciona una mejor visión).
Etiquetas identificativas:
A continuación explicación resumida para posibles entradas en largo, lo mismo pero de modo opuesto debería considerarse para posibles entradas en corto:
Flecha verde pequeña bajo vela: indica inicio de tendencia en alza (pivote por encima de SMA de pivote y ambos por encima de SMA rápida)
Flecha verde grande bajo vela: indica tendencia en alza (pivote por encima de SMA de pivote y ambos por encima de SMA rápida y media)
Triángulo verde sobre vela: indica rotura de canal, posible impulso al alza (representado a modo de fractal pues su concepto es el mismo)
Flechas verdes/rojas a pie de gráfico: pretenden confirmar la validez de una señal (debería dudarse de las indicaciones verdes con flecha inferior roja y viceversa)
Puntos verdes/rojos a pie de gráfico: los rojos representan áreas de fuerte resistencia y los verdes de fuerte soporte (con puntos rojos, proceder con cautela pese a señales verdes, y viceversa)
Comentarios
Se insiste en que la funcionalidad básica y de mayor utilidad de este script es proporcionar una base confiable sobre la que desarrollar cualquier estrategia, a modo de marco de trabajo.
Si se hace uso de las etiquetas identificativas, debe tenerse en cuenta que las más prematuras siempre serán las más confiables y valiosas, pero que su confirmación siempre dependerá de la estrategia por parte del usuario.
Su uso en conjunción al indicador "Pivot Position for Trading Channel" puede servir de base para el desarrollo de diferentes estrategias, al proporcionar indicación de la posición relativa del precio dentro del canal.
Este script es solo una herramienta de consulta con objetivos didácticos, no debe ser utilizado como recomendación de inversión y no se debe confiar en ella como tal.
dmn's ICT ToolkitThis is my quality of life indicator for forex trading using the methods and concepts of ICT.
The idea is to automate marking up important price levels and times of the day instead of doing it manually every day.
Killzones
Marks the most volatile times of the day on the chart, during which the intraday high/low usually takes place.
Particularly impactful when there's news released during these times.
London Open (02:00-05:00 EST)
New York Open (08:30-11:00 EST)
London Close (10:00-11:30 EST)
True Day delineation
Vertical line at the start of the "true day" (00:00 EST), start of the algorithmic trading day and aids in visualizing the intraday direction.
New York midnight price level
Noteworthy price level at the start of the "true day".
This price level is referenced by the interbank trading algorithms during the day. Buy below it on bullish days, sell above it on bearish days.
Daily open price level
Reference level for optimal trade entries. Buy below it on bullish days, sell above it on bearish days.
Central Banks Dealers Range (CBDR) (14:00-20:00 EST) &
Central Banks Dealers Flout (CBDF) (15:00-24:00 EST) &
Asian Range (AR) (20:00-24:00 EST)
The standard deviation lines available are used to make predictions for short-term future highs/lows when the CBDR and AR are smaller than 40 pips.
Trade them by looking for 5/15min key levels that converge with the projection levels.
X days Average Daily Range (ADR)
Default to 5 days back, gives an idea of how much movement to expect intraday when the ADR high/low is converging with CBDR/CBDF/AR standard deviations.
Current Daily Range (CDR)
Used for comparison against the ADR to help determine if there's enough intraday range left to enter a trade.
Dynamically changes color based on percentage of the ADR. Green below 50% of ADR, orange between 50 and 100%, red when CDR exceeds ADR.
All of the above are used in conjunction with each other and higher timeframe levels of importance to find entries and target.
Note: Preferably use New York's time zone for your charts.
Day Trading Booster by DGTTiming when day trading can be everything
In Stock markets typically more volatility (or price activity) occurs at market opening and closings
When it comes to Forex (foreign exchange market), the world’s most traded market, unlike other financial markets, there is no centralized marketplace, currencies trade over the counter in whatever market is open at that time, where time becomes of more importance and key to get better trading opportunities. There are four major forex trading sessions, which are Sydney , Tokyo , London and New York sessions
Forex market is traded 24 hours a day, 5 days a week across by banks, institutions and individual traders worldwide, but that doesn’t mean it’s always active the entire day. It may be very difficult time trying to make money when the market doesn’t move at all. The busiest times with highest trading volume occurs during the overlap of the London and New York trading sessions, because U.S. dollar (USD) and the Euro (EUR) are the two most popular currencies traded. Typically most of the trading activity for a specific currency pair will occur when the trading sessions of the individual currencies overlap. For example, Australian Dollar (AUD) and Japanese Yen (JPY) will experience a higher trading volume when both Sydney and Tokyo sessions are open
There is one influence that impacts Forex matkets and should not be forgotten : the release of the significant news and reports. When a major announcement is made regarding economic data, currency can lose or gain value within a matter of seconds
Cryptocurrency markets on the other hand remain open 24/7, even during public holidays
Until 2021, the Asian impact was so significant in Cryptocurrency markets but recent reasearch reports shows that those patterns have changed and the correlation with the U.S. trading hours is becoming a clear evolving trend.
Unlike any other market Crypto doesn’t rest on weekends, there’s a drop-off in participation and yet algorithmic trading bots and market makers (or liquidity providers) can create a high volume of activity. Never trust the weekend’ is a good thing to remind yourself
One more factor that needs to be taken into accout is Blockchain transaction fees, which are responsive to network congestion and can change dramatically from one hour to the next
In general, Cryptocurrency markets are highly volatile, which means that the price of a coin can change dramatically over a short time period in either direction
The Bottom Line
The more traders trading, the higher the trading volume, and the more active the market. The more active the market, the higher the liquidity (availability of counterparties at any given time to exit or enter a trade), hence the tighter the spreads (the difference between ask and bid price) and the less slippage (the difference between the expected fill price and the actual fill price) - in a nutshell, yield to many good trading opportunities and better order execution (a process of filling the requested buy or sell order)
The best time to trade is when the market is the most active and therefore has the largest trading volume, trading all day long will not only deplete a trader's reserves quickly, but it can burn out even the most persistent trader. Knowing when the markets are more active will give traders peace of mind, that opportunities are not slipping away when they take their eyes off the markets or need to get a few hours of sleep
What does the Day Trading Booster do?
Day Trading Booster is designed ;
- to assist in determining market peak times, the times where better trading opportunities may arise
- to assist in determining the probable trading opportunities
- to help traders create their own strategies. An example strategy of when to trade or not is presented below
For Forex markets specifically includes
- Opening channel of Asian session, Europien session or both
- Opening price, opening range (5m or 15m) and day (session) range of the major trading center sessions, including Frankfurt
- A tabular view of the major forex markets oppening/closing hours, with a countdown timer
- A graphical presentation of typically traded volume and various forext markets oppening/clossing events (not only the major markets but many other around the world)
For All type of markets Day Trading Booster plots
- Day (Session) Open, 5m, 15m or 1h Opening Range
- Day (Session) Referance Levels, based on Average True Range (ATR) or Previous Day (Session) Range (PH - PL)
- Week and Month Open
Day Trading Booster also includes some of the day trader's preffered indicaotrs, such as ;
- VWAP - A custom interpretaion of VWAP is presented here with Auto, Interactive and Manual anchoring options.
- Pivot High/Low detection - Another custom interpretation of Pivot Points High Low indicator.
- A Moving Average with option to choose among SMA, EMA, WMA and HMA
An example strategy - Channel Bearkout Strategy
When day trading a trader usually monitors/analyzes lower timeframe charts and from time to time may loose insight of what really happens on the market from higher time porspective. Do not to forget to look at the larger time frame (than the one chosen to trade with) which gives the bigger picture of market price movements and thus helps to clearly define the trend
Disclaimer : Trading success is all about following your trading strategy and the indicators should fit within your trading strategy, and not to be traded upon solely
The script is for informational and educational purposes only. Use of the script does not constitutes professional and/or financial advice. You alone the sole responsibility of evaluating the script output and risks associated with the use of the script. In exchange for using the script, you agree not to hold dgtrd TradingView user liable for any possible claim for damages arising from any decision you make based on use of the script
lower_tf█ OVERVIEW
This library is a Pine programmer’s tool containing functions to help those who use the request.security_lower_tf() function. Its `ltf()` function helps translate user inputs into a lower timeframe string usable with request.security_lower_tf() . Another function, `ltfStats()`, accumulates statistics on processed chart bars and intrabars.
█ CONCEPTS
Chart bars
Chart bars , as referred to in our publications, are bars that occur at the current chart timeframe, as opposed to those that occur at a timeframe that is higher or lower than that of the chart view.
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 intrabars at the LTF of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This framework exemplifies how authors can determine which LTF to use by examining the chart's timeframe. The LTF determines how many intrabars are examined for each chart bar; the lower the timeframe, the more intrabars are analyzed.
Intrabar precision
The precision of calculations increases with the number of intrabars analyzed for each chart bar. As there is a 100K limit to the number of intrabars that can be analyzed by a script, a trade-off occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
█ `ltf()`
This function returns a timeframe string usable with request.security_lower_tf() . It calculates the returned timeframe by taking into account a user selection between eight different calculation modes and the chart's timeframe. You send it the user's selection, along with the text corresponding to the eight choices from which the user has chosen, and the function returns a corresponding LTF string.
Because the function processes strings and doesn't require recalculation on each bar, using var to declare the variable to which its result is assigned will execute the function only once on bar zero and speed up your script:
var string ltfString = ltf(ltfModeInput, LTF1, LTF2, LTF3, LTF4, LTF5, LTF6, LTF7, LTF8)
The eight choices users can select from are of two types: the first four allow a selection from the desired amount of chart bars to be covered, the last four are choices of a fixed number of intrabars to be analyzed per chart bar. Our example code shows how to structure your input call and then make the call to `ltf()`. By changing the text associated with the `LTF1` to `LTF8` constants, you can tailor it to your preferences while preserving the functionality of `ltf()` because you will be sending those string constants as the function's arguments so it can determine the user's selection. The association between each `LTFx` constant and its calculation mode is fixed, so the order of the arguments is important when you call `ltf()`.
These are the first four modes and the `LTFx` constants corresponding to each:
Covering most chart bars (least precise) — LTF1
Covers all chart bars. This is accomplished by dividing the current timeframe in seconds by 4 and converting that number back to a string in timeframe.period format using secondsToTfString() . Due to the fact that, on premium subscriptions, the typical historical bar count is between 20-25k bars, dividing the timeframe by 4 ensures the highest level of intrabar precision possible while achieving complete coverage for the entire dataset with the maximum allowed 100K intrabars.
Covering some chart bars (less precise) — LTF2
Covering less chart bars (more precise) — LTF3
These levels offer a stepped LTF in relation to the chart timeframe with slightly more, or slightly less precision. The stepped lower timeframe tiers are calculated from the chart timeframe as follows:
Chart Timeframe Lower Timeframe
Less Precise More Precise
< 1hr 1min 1min
< 1D 15min 1min
< 1W 2hr 30min
> 1W 1D 60min
Covering the least chart bars (most precise) — LTF4
Analyzes the maximum quantity of intrabars possible by using the 1min LTF, which also allows the least amount of chart bars to be covered.
The last four modes allow the user to specify a fixed number of intrabars to analyze per chart bar. Users can choose from 12, 24, 50 or 100 intrabars, respectively corresponding to the `LTF5`, `LTF6`, `LTF7` and `LTF8` constants. The value is a target; the function will do its best to come up with a LTF producing the required number of intrabars. Because of considerations such as the length of a ticker's session, rounding of the LTF to the closest allowable timeframe, or the lowest allowable timeframe of 1min intrabars, it is often impossible for the function to find a LTF producing the exact number of intrabars. Requesting 100 intrabars on a 60min chart, for example, can only produce 60 1min intrabars. Higher chart timeframes, tickers with high liquidity or 24x7 markets will produce optimal results.
█ `ltfStats()`
`ltfStats()` returns statistics that will be useful to programmers using intrabar inspection. By analyzing the arrays returned by request.security_lower_tf() in can determine:
• intrabarsInChartBar : The number of intrabars analyzed for each chart bar.
• chartBarsCovered : The number of chart bars where intrabar information is available.
• avgIntrabars : The average number of intrabars analyzed per chart bar. Events like holidays, market activity, or reduced hours sessions can cause the number of intrabars to vary, bar to bar.
The function must be called on each bar to produce reliable results.
█ DEMONSTRATION CODE
Our example code shows how to provide users with an input from which they can select a LTF calculation mode. If you use this library's functions, feel free to reuse our input setup code, including the tooltip providing users with explanations on how it works for them.
We make a simple call to request.security_lower_tf() to fetch the close values of intrabars, but we do not use those values. We simply send the returned array to `ltfStats()` and then plot in the indicator's pane the number of intrabars examined on each bar and its average. We also display an information box showing the user's selection of the LTF calculation mode, the resulting LTF calculated by `ltf()` and some statistics.
█ NOTES
• As in several of our recent publications, this script uses secondsToTfString() to produce a timeframe string in timeframe.period format from a timeframe expressed in seconds.
• The script utilizes display.data_window and display.status_line to restrict the display of certain plots.
These new built-ins allow coders to fine-tune where a script’s plot values are displayed.
• We implement a new recommended best practice for tables which works faster and reduces memory consumption.
Using this new method, tables are declared only once with var , as usual. Then, on bar zero only, we use table.cell() calls to populate the table.
Finally, table.set_*() functions are used to update attributes of table cells on the last bar of the dataset.
This greatly reduces the resources required to render tables. We encourage all Pine Script™ programmers to do the same.
Look first. Then leap.
█ FUNCTIONS
The library contains the following functions:
ltf(userSelection, choice1, choice2, choice3, choice4, choice5, choice6, choice7, choice8)
Selects a LTF from the chart's TF, depending on the `userSelection` input string.
Parameters:
userSelection : (simple string) User-selected input string which must be one of the `choicex` arguments.
choice1 : (simple string) Input selection corresponding to "Least precise, covering most chart bars".
choice2 : (simple string) Input selection corresponding to "Less precise, covering some chart bars".
choice3 : (simple string) Input selection corresponding to "More precise, covering less chart bars".
choice4 : (simple string) Input selection corresponding to "Most precise, 1min intrabars".
choice5 : (simple string) Input selection corresponding to "~12 intrabars per chart bar".
choice6 : (simple string) Input selection corresponding to "~24 intrabars per chart bar".
choice7 : (simple string) Input selection corresponding to "~50 intrabars per chart bar".
choice8 : (simple string) Input selection corresponding to "~100 intrabars per chart bar".
Returns: (simple string) A timeframe string to be used with `request.security_lower_tf()`.
ltfStats()
Returns statistics about analyzed intrabars and chart bars covered by calls to `request.security_lower_tf()`.
Parameters:
intrabarValues : (float [ ]) The ID of a float array containing values fetched by a call to `request.security_lower_tf()`.
Returns: A 3-element tuple: [ (series int) intrabarsInChartBar, (series int) chartBarsCovered, (series float) avgIntrabars ].
Jurik Composite Fractal Behavior (CFB) on EMA [Loxx]Jurik Composite Fractal Behavior (CFB) on EMA is an exponential moving average with adaptive price trend duration inputs. This purpose of this indicator is to introduce the formulas for the calculation Composite Fractal Behavior. As you can see from the chart above, price reacts wildly to shifts in volatility--smoothing out substantially while riding a volatility wave and cutting sharp corners when volatility drops. Notice the chop zone on BTC around August 2021, this was a time of extremely low relative volatility.
This indicator uses three previous indicators from my public scripts. These are:
JCFBaux Volatility
Jurik Filter
Jurik Volty
The CFB is also related to the following indicator
Jurik Velocity ("smoother moment")
Now let's dive in...
What is Composite Fractal Behavior (CFB)?
All around you mechanisms adjust themselves to their environment. From simple thermostats that react to air temperature to computer chips in modern cars that respond to changes in engine temperature, r.p.m.'s, torque, and throttle position. It was only a matter of time before fast desktop computers applied the mathematics of self-adjustment to systems that trade the financial markets.
Unlike basic systems with fixed formulas, an adaptive system adjusts its own equations. For example, start with a basic channel breakout system that uses the highest closing price of the last N bars as a threshold for detecting breakouts on the up side. An adaptive and improved version of this system would adjust N according to market conditions, such as momentum, price volatility or acceleration.
Since many systems are based directly or indirectly on cycles, another useful measure of market condition is the periodic length of a price chart's dominant cycle, (DC), that cycle with the greatest influence on price action.
The utility of this new DC measure was noted by author Murray Ruggiero in the January '96 issue of Futures Magazine. In it. Mr. Ruggiero used it to adaptive adjust the value of N in a channel breakout system. He then simulated trading 15 years of D-Mark futures in order to compare its performance to a similar system that had a fixed optimal value of N. The adaptive version produced 20% more profit!
This DC index utilized the popular MESA algorithm (a formulation by John Ehlers adapted from Burg's maximum entropy algorithm, MEM). Unfortunately, the DC approach is problematic when the market has no real dominant cycle momentum, because the mathematics will produce a value whether or not one actually exists! Therefore, we developed a proprietary indicator that does not presuppose the presence of market cycles. It's called CFB (Composite Fractal Behavior) and it works well whether or not the market is cyclic.
CFB examines price action for a particular fractal pattern, categorizes them by size, and then outputs a composite fractal size index. This index is smooth, timely and accurate
Essentially, CFB reveals the length of the market's trending action time frame. Long trending activity produces a large CFB index and short choppy action produces a small index value. Investors have found many applications for CFB which involve scaling other existing technical indicators adaptively, on a bar-to-bar basis.
What is Jurik Volty used in the Juirk Filter?
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is the Jurik Moving Average?
Have you noticed how moving averages add some lag (delay) to your signals? ... especially when price gaps up or down in a big move, and you are waiting for your moving average to catch up? Wait no more! JMA eliminates this problem forever and gives you the best of both worlds: low lag and smooth lines.
Ideally, you would like a filtered signal to be both smooth and lag-free. Lag causes delays in your trades, and increasing lag in your indicators typically result in lower profits. In other words, late comers get what's left on the table after the feast has already begun.
Modifications and improvements
1. Jurik's original calculation for CFB only allowed for depth lengths of 24, 48, 96, and 192. For theoretical purposes, this indicator allows for up to 20 different depth inputs to sample volatility. These depth lengths are
2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536
Including these additional length inputs is arguable useless, but they are are included for completeness of the algorithm.
2. The result of the CFB calculation is forced to be an integer greater than or equal to 1.
3. The result of the CFB calculation is double filtered using an advanced, (and adaptive itself) filtering algorithm called the Jurik Filter. This filter and accompanying internal algorithm are discussed above.