Simple Moving Average CrossThe script uses 3 simple moving averages that you can define (SMA Top, SMA Mid, SMA Long).
Once the SMA Top is above the SMA Mid and the SMA Mid is above the SMA Top a long position is entered.
Once the SMA Top is below the SMA Mid and the SMA Mid is below the SMA Top a short position is entered.
You may define how long before these positions are entered by adjusting the bars in the Inputs section.
A setting of 0 will enter a position as soon as the conditions are met,
whereas a setting of 5 will wait 5 bars after the conditions are met before entering the positions.
스크립트에서 "top"에 대해 찾기
Attrition Scalper v1.0A weird indicator to catch tops/bottoms and scalp with the signals. You should buy/sell with the signals but you should also analyze the chart manually before jumping straight into the trade. One of the most important thing is the middle VIDYA line. It is a very strong support/resistance and if you've taken a long/short from top/bottom, you might want to target there to exit as the indicator will not give you a sell signal there probably.
You should also after trying the indicator for a bit. Make a proper SL/TP strategy for it.
By default the indicator will only load with charts up to 30 minute frame. If you want to load on higher timeframe charts you have to increase the Timeframe to Lookback and the Timeframe options in it's settings.
I really recommend lower timeframes though, the default settings with 5 minute chart is most likely the best.
Each of the lines you see are pretty strong support/resistance and pivot points . So if you've taken an entry for a quick scalp you should most likely start partially closing the position on each line.
I wouldn't really recommend a tight stop as we're most likely entering at or near the bottom and the price really can't stay that overextended unless it's a major/flash dump, at that point no indicator is safe anyways. So finding the sweet spot is up to you.
If more lines are on top of each other, be careful of that spot too as it's a great confluence of support/resistance . For example if the top VIDYA line is near the upper purple 4.236 line. That is a major resistance and if price is above it, it will almost certainly test it back or fall back inside the channel.
Another strategy is to not use the buy/sell signals but use the channel/lines yourself on higher timeframe for swing trading or just putting orders at the other extreme ends/lines in the channel to catch a nice entry in flash/major dumps/pumps.
Price will most likely retrace to the middle VIDYA line after touching or overextending from the top VIDYA and upper purple 4.236 line. Same also applies for the opposite side too. Any close above/below the VIDYA might mean continuation but that's better seen and confirmed on much higher timeframes, not 5 minutes probably.
Special thanks to: www.tradingview.com i got inspired from some of his indicators and even used some snippets of code which he allowed me to do.
In the near future i'm thinking of implementing new logic with Weis Waves and few other indicators to increase the signal count as i think it's currently very low. But overtrading might be bad anyways.
Study RSI3M3 from Walter J. BressertDear Trader,
Walter Bressert started with cycle trading and published is findings in different books.
In one off his documents "Timing is everything, The Cycle Trading Pattern" he's using a very simple oscillator.
This oscillator called RSI3M3.
The RSI3M3 is a 3-bar RSI smoothed with a 3-bar moving average.
Oscillator/Cycle Combinations that Identify Trading Cycle Tops and Bottoms.
Trading cycles show distinct tops and bottoms that are frequently accompanied by overbought and oversold levels of an oscillator that is derived from price activity.
This oscillator shows the ebb and flow of market energy, or the buying and selling power as it tops and bottoms.
Although not based on time, it quite frequently identifies cycle tops and bottoms with accuracy of 80-90% depending on the market and time frame.
With this kind of accuracy the oscillator can be used to identify high probability trading situations at tops and bottoms of cycles.
Even better, the oscillator can be used to generate mechanical buy and sell signals that take much of the judgment and stress out of trading.
In combination with other indicator, like the MACD, this could be a powerfull tool to make youre strategy more accurate.
Happy trading,
ADutchTourist
MAFIA CANDLESMafia Candles is a Exhaustion bar count and candle count indicator, Using the Leledc Candles and 1-3 counting candle play gives you a pretty good idea where a so called "top" will be or a so called "bottom" will be!
In this example, getting the transparent round circles ( either lime or red ) would mean that the move will be a good size move!
EXAMPLE=1 You see a down trend and then the Mafia Candles Flashes a Green Dot on the forming new red candle. This is where in theory you might want to consider going long on the market!
EXAMPLE=2 If you see a RED $ symbol, after a uptrend, this means in theory, there might be room for a short play or room for a small pullback in the price!
THE CIRCLES(RED OR LIME COLORED) ARE INDICATING BIGGER MOVES!
THE $ SYMBOLS (RED OR LIME COLORED) ARE INDICATING SMALLER PULLBACKS OR SMALLER PUMPS IN PRICE!
RED IS CONSIDERED TO BE A SELL!
LIME COLOR IS CONSIDERED TO BE A BUY!
AS MUCH IS BASED OF THE 1-3 CANDLE COUNT AND THE LEDLEC CANDLE DEVIATION STRATEGY, LET ME EXPLAIN THE THEORY ON BOTH THE 1-3 CANDLE COUNT AND THE LELEDC STRATEGY I COMBINE TO BRING YOU THIS ADDITION OF THE INDICATOR....
LELEDC THEORY USAGE...
An Exhaustion Bar is a bar which signals
the exhaustion of the trend in the current direction. In other words an
exhaustion bar is “A bar of last seller” in case of a downtrend and “A bar of
last buyer”in case of an uptrend.
Having said that when a party cannot take the price further in their direction,naturally the other party comes in , takes charge and reverses the direction of the trend.
TO EASIER UNDERSTAND I GIVE YOU A EASY EXAMPLE OF WHAT AN LELEDC EXHAUSTION BAR IS...
1. A wide range bar ( a bar with
long body!!!).
2. A long wick at the bottom of
the bar and no or negligible wick at the top of the bar in case of “Bear exhaustion bar” and
a long wick at the top and no or
negligible wick at the bottom of the bar in case of
“Bull exhuation bar”!!!
3. Extreme volume and.....
4. Bar forming at a key support or resistance
area including a Round Number (RN) and Big Round Number ( BRN ).THE PSYCHOLOGY BEHIND THIS!!!
Now let's assume that we have a group
of people,say 100 people who decides to go for a casual running. After running for few KM's few of
them will say “I am exhausted. I cannot run further”. They will quit running.
After running further, another bunch of runners will say “I am exhausted. I can’t run
further” and they also will quit running.
This goes on and on and then there will be a stage where only few will be left in the running. Now a stage will come where the last person left in the running will say “I
am exhausted” and he stops running. That means no one is left now in the
running.This means all are exhausted in the running.
The same way an exhaustion bar works and if we can figure out that
exhaustion bar with all the tools available on hand, we will be in a big trade
for sure!!.The reason is an exhaustion bar is formed at exact tops and bottoms most of the times.In forex with wide variety of pairs available at the counter ,one can trade this technique to make lifetime gains.
NOW LET ME EXPLAIN THE 1-3 CANDLE CORRECTION COUNT THEORY WHICH IS USED TO GET THE SUM UP SIGNALS FROM THIS INDICATOR FROM ITS INPUT LEVELS!!!
1-3 CANDLES....
The 1-3 Candlestick pattern is basically like sequential, aka a candle counting system!
1-3 CANDLE COUNT means you count the number of bullish=green candles or the bearish=red candles!
3 BULL/GREEN CANDLES in a row, each closing its close higher than the previous one before it is the 1-3 candle top count idea!
lets say you get 3 red bear candles, each candle after the first closes its body below the previous red candle before it, then you see 3 red candles with each closing lower bodies lower than the previous candle, THATS A POSSIBLE SIGN OF BEARISH EXHAUSTION, AND YOU MIGHT HAVE SOME BULLS STEP IN TO TAKE THE PRICE UP AFTER THE IMMEDIATE DOWNFALL OF THOSE 3 RED CANDLES!!
PLEASE IF ANYONE HAS QUESTIONS OR NEEDS ANY FURTHER EXPLANATION, DONT HESISITATE TO MESSAGE ME! CHALRES KNIGHT IS THE ORIGINAL AUTHOR OF THE 1-3 CANDLE COUNT AND THE LELEDC EXHAUSTION BAR INDICATOR ON METE-TRADER! R.IP CHARLES F KNIGHT!!! WE LOVE YOU AND MISS YOU BROTHER!
CHARLES KNIGHT PASSED DOWN ALL OF HIS INDICATORS AND SCRIPTS IN ORIGINAL CODE TO MYSELF WHEN HE PASSED AWAY AND I WILL CONTINUE TO HONOR HIS MEMORY BY ENHANCING HIS ORIGINAL SOURCE CODED SCRIPTS TO ENHANCE THE LIFE FOR ALL TRADERS!
CHARLIE LOVED WHEN I WOULD PUT MY OWN SWING ON HIS INDICATORS! HE TAUGHT ME EVERYTHING I KNOW AND I KNOW ONE DAY I WILL SEE HIM AGAIN!
TRADE IN PARADISE CHARLIE!!!
THE BEST TRADER IN THE WORLD!!!
Dual SuperTrend, Ichimoku and DMI Color Weighted by DGTThis study interprets SuperTrend with Ichimoku Cloud, one of the popular technical analysis indicator, and interprets Directional Movement (DMI), which is another quite valuable technical analysis indicator.
Then combines the interpreted SuperTrend with interpreted Directional Movement (DMI) and Volume Based Colored Bars indicator created by Kıvaç ÖZBİLGİÇ (permission has been granted from the author)
Here are details of the concept applied
1- SuperTrend Line colored based on Ichimoku Cloud
Definition
The Ichimoku Cloud, developed by Goichi Hosoda and published in the late 1960s, is a collection of technical indicators that give it a unique capacity to show support and resistance levels, momentum and trend direction
What Does the Ichimoku Cloud Tells?
The overall trend is up when price is above the cloud, known as Kumo Cloud, down when price is below the Kumo Cloud, and trendless or transitioning when price is in the Kumo Cloud
When Senkou Span A (Leading Span A) is rising and above Senkou Span B (Leading Span B), this helps confirm the uptrend and space between the lines is typically colored green. When Senkou Span A is falling and below Senkou Span B, this helps confirm the downtrend. The space between the lines is typically colored red
Traders often use the Kumo Cloud as an area of support and resistance depending on the relative location of the price. The Kumo Cloud provides support/resistance levels that can be projected into the future. This sets the Ichimoku Cloud apart from many other technical indicators that only provide support and resistance levels for the current date and time
Crossovers, also known as TK Cross among Ichimoku Cloud traders, are another way the indicator can be used. Watch for the Tenkan-Sen Line, or Conversion Line, to move above the Kijun-Sen Line, or Base Line, especially when price is above the Kumo cloud. This can be a powerful buy signal. One option is to hold the trade until the Tenkan-Sen drops back below the Kijun-Sen Line. Any of the other lines could be used as exit points as well.
With this study:
Allow Traders to use the Ichimoku Cloud in conjunction with other technical indicators to maximize their risk-adjusted returns
The Ichimoku Cloud can make a chart look busy with all the lines. To Remedy this a different approach is applied in this study showing the Price and the Kumo Cloud relation as well as TK Crosses displayed. The SuperTrend Indicator is chosen to display Ichimoku Indicator, where the SuperTrend is another trend following indicator.
How it works:
SuperTrend Line is colored as:
Green when the Price is above the Kumo Cloud
Red when the Price is below the Kumo Cloud
Black when the Price is within the Kumo Cloud
And Finally Blue when the Kumo Cloud Is not ready to be drawn or not Kumo Cloud available
Additionally intensity of the colors used in all cases above are defined by values of Tenkan-Sen and Kijun-Sen Line, which allows us to detect TK Crosses
2- Plots Colored Directional Movement Line
Definition
Directional Movement (DMI) (created by J. Welles Wilder ) is actually a collection of three separate indicators combined into one. Directional Movement consists of the Average Directional Index (ADX) , Plus Directional Indicator (+D I) and Minus Directional Indicator (-D I) . ADX's purposes is to define whether or not there is a trend present. It does not take direction into account at all. The other two indicators (+DI and -DI) are used to compliment the ADX. They serve the purpose of determining trend direction. By combining all three, a technical analyst has a way of determining and measuring a trend's strength as well as its direction.
This study combines all three lines in a single colored shapes series plotted on the top of the price chart indicating the trend strength with different colors and its direction with triangle up and down shapes.
What to look for
Trend Strength : Analyzing trend strength is the most basic use for the DMI. Wilder believed that a DMI reading above 25 indicated a strong trend, while a reading below 20 indicated a weak or non-existent trend
Crosses : DI Crossovers are the significant trading signal generated by the DMI
With this study
A Strong Trend is assumed when ADX >= 25
Bullish Trend is defined as (+D I > -DI ) and (ADX >= 25), which is plotted as green triangle up shape on top of the price chart
Bearish Trend is defined as (+D I < -DI ) and (ADX >= 25), which is plotted as red triangle down shape on top of the price chart
Week Trend is assumed when 17< ADX < 25, which is plotted as black triangles up or down shape, depending on +DI-DI values, on top of the price chart
Non-Existent Trend is assumed when ADX < 17, which is plotted as yellow triangles up or down shape, depending on +DI-DI values, on top of the price chart
Additionally intensity of the colors used in all cases above are defined by comparing ADX’s current value with its previous value
3- Volume Based Colored Bars indicator created by Kıvaç ÖZBİLGİÇ
Volume Based Colored Bars colors the bars into volume weighted signals increasing the visibility of the Volume changes. Intensity of the colors of the bars varies according to average value of the volume for given length of bars (default value set to 30 bars)
Disclaimer: 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
Colored Directional Movement and Bollinger Band's Cloud by DGTThis study combines Bollinger Bands, one of the most popular technical analysis indicators on the market, and Directional Movement (DMI), which is another quite valuable technical analysis indicator.
Bollinger Bands used in conjunction with Directional Movement (DMI) may help getting a better understanding of the ever changing landscape of the market and perform more advanced technical analysis
Here are details of the concept applied
1- Plots Bollinger Band’s (BB) Cloud colored based on Bollinger Band Width (BBW) Indicator’s value
Definition
Bollinger Bands (created by John Bollinger ) are a way to measure volatility . As volatility increases, the wider the bands become and similarly as volatility decreases, the gap between bands narrows
Bollinger Bands, in widely used approach, consist of a band of three lines. Likewise common usage In this study a band of five lines is implemented
The line in the middle is a Simple Moving Average (SMA) set to a period of 20 bars (the most popular usage). The SMA then serves as a base for the Upper and Lower Bands. The Upper and Lower Bands are used as a way to measure volatility by observing the relationship between the Bands and price. the Upper and Lower Bands in this study are set to two and three standard deviations (widely used form is only two standard deviations) away from the SMA (The Middle Line), hence there are two Upper Bands and two Lower Bands. The background between two Upper Bands is filled with a green color and the background between two Lower Bands is filled with a red color. In this we have obtained Bollinger Band’s (BB) Clouds (Upper Cloud and Lower Cloud)
Additionally the intensity of the color of the background is calculated with Bollinger Bands Width ( BBW ), which is a technical analysis indicator derived from the standard Bollinger Bands indicator. Bollinger Bands Width, quantitatively measures the width between the Upper and Lower Bands. In this study the intensity of the color of the background is increased if BBW value is greater than %25
What to look for
Price Actions : Prices are almost always within the bands especially at this study the bands of three standard deviations away from the SMA. Price touching or breaking the BB Clouds could be considered as buying or selling opportunity. However this is not always the case, there are exceptions such as Walking the Bands. “Walking the Bands” can occur in either a strong uptrend or a strong downtrend. During a strong trend, there may be repeated instances of price touching or breaking through the BB Clouds. Each time that this occurs, it is not a signal, it is a result of the overall strength of the move. In this study in order to get a better understanding of the trend and add ability to perform some advanced technical analysis Directional Movement Indicator (DMI) is added to be used in conjunction with Bollinger Bands.
Cycling Between Expansion and Contraction : One of the most well-known theories in regards to Bollinger Bands is that volatility typically fluctuates between periods of expansion (Bands Widening : surge in volatility and price breaks through the BB Cloud) and contraction (Bands Narrowing : low volatility and price is moving relatively sideways). Using Bollinger Bands in conjunction with Bollinger Bands Width may help identifying beginning of a new directional trend which can result in some nice buying or selling signals. Of course the trader should always use caution
2- Plots Colored Directional Movement Line
Definition
Directional Movement (DMI) (created by J. Welles Wilder ) is actually a collection of three separate indicators combined into one. Directional Movement consists of the Average Directional Index (ADX) , Plus Directional Indicator (+D I) and Minus Directional Indicator (-D I) . ADX's purposes is to define whether or not there is a trend present. It does not take direction into account at all. The other two indicators (+DI and -DI) are used to compliment the ADX. They serve the purpose of determining trend direction. By combining all three, a technical analyst has a way of determining and measuring a trend's strength as well as its direction.
This study combines all three lines in a single colored shapes series plotted on the top of the price chart indicating the trend strength with different colors and its direction with triangle up and down shapes.
What to look for
Trend Strength : Analyzing trend strength is the most basic use for the DMI. Wilder believed that a DMI reading above 25 indicated a strong trend, while a reading below 20 indicated a weak or non-existent trend
Crosses : DI Crossovers are the significant trading signal generated by the DMI
With this study
A Strong Trend is assumed when ADX >= 25
Bullish Trend is defined as (+D I > -DI ) and (ADX >= 25), which is plotted as green triangle up shape on top of the price chart
Bearish Trend is defined as (+D I < -DI ) and (ADX >= 25), which is plotted as red triangle down shape on top of the price chart
Week Trend is assumed when 17< ADX < 25, which is plotted as black triangles up or down shape, depending on +DI-DI values, on top of the price chart
Non-Existent Trend is assumed when ADX < 17, which is plotted as yellow triangles up or down shape, depending on +DI-DI values, on top of the price chart
Additionally intensity of the colors used in all cases above are defined by comparing ADX’s current value with its previous value
Summary of the Study:
Even more simplified and visually enhanced DMI drawing comparing to its classical usage (may require a bit practice to get used to it)
As said previously, to get a better understanding of the trend and add ability to perform some advanced technical analysis Directional Movement Indicator (DMI) is used in conjunction with Bollinger Bands.
PS: Analysis and tests are performed with high volatile Cryptocurrency Market
Source of References : definitions provided herein are gathered from TradingView’s knowledgebase/library
Disclaimer: 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
Bar's Body Extreme with AlertBar's Body Extreme with Alert measure volatility of bar's body and caculate extreme level in specified periods or custom level with alert. Detail options below:
1. Default Extreme Level
* Default level is the +/- highest volatility of bar's body in 100 periods
* Periods of bar to calculate default extreme adjustable
2. Custom Extreme
* Default Extreme Top auto disable if Custom Extreme Top >0
* Default Extreme Bottom auto disable if Custom Extreme Bottom <0
3. Alert
* Extreme alert: body's volatility > Extreme top level or body's volatility < Extreme bottom level
* Extreme Top Alert: body's volatility > Extreme top level
* Extreme Bottom Alert: body's volatility < Extreme bottom level
Point and Figure (PnF) ChartThis is live and non-repainting Point and Figure Charting tool. The tool has it’s own P&F engine and not using integrated function of Trading View.
Point and Figure method is over 150 years old. It consist of columns that represent filtered price movements. Time is not a factor on P&F chart but as you can see with this script P&F chart created on time chart.
P&F chart provide several advantages, some of them are filtering insignificant price movements and noise, focusing on important price movements and making support/resistance levels much easier to identify.
If you are new to Point & Figure Chart then you better get some information about it before using this tool. There are very good web sites and books. Please PM me if you need help about resources.
Options in the Script
Box size is one of the most important part of Point and Figure Charting. Chart price movement sensitivity is determined by the Point and Figure scale. Large box sizes see little movement across a specific price region, small box sizes see greater price movement on P&F chart. There are four different box scaling with this tool: Traditional, Percentage, Dynamic (ATR), or User-Defined
4 different methods for Box size can be used in this tool.
User Defined: The box size is set by user. A larger box size will result in more filtered price movements and fewer reversals. A smaller box size will result in less filtered price movements and more reversals.
ATR: Box size is dynamically calculated by using ATR, default period is 20.
Percentage: uses box sizes that are a fixed percentage of the stock's price. If percentage is 1 and stock’s price is $100 then box size will be $1
Traditional: uses a predefined table of price ranges to determine what the box size should be.
Price Range Box Size
Under 0.25 0.0625
0.25 to 1.00 0.125
1.00 to 5.00 0.25
5.00 to 20.00 0.50
20.00 to 100 1.0
100 to 200 2.0
200 to 500 4.0
500 to 1000 5.0
1000 to 25000 50.0
25000 and up 500.0
Default value is “ATR”, you may use one of these scaling method that suits your trading strategy.
If ATR or Percentage is chosen then there is rounding algorithm according to mintick value of the security. For example if mintick value is 0.001 and box size (ATR/Percentage) is 0.00124 then box size becomes 0.001.
And also while using dynamic box size (ATR or Percentage), box size changes only when closing price changed.
Reversal : It is the number of boxes required to change from a column of Xs to a column of Os or from a column of Os to a column of Xs. Default value is 3 (most used). For example if you choose reversal = 2 then you get the chart similar to Renko chart.
Source: Closing price or High-Low prices can be chosen as data source for P&F charting.
Chart Style: There are 3 options for chart style: “Candle”, “Area” or “Don’t show”.
As Area:
As Candle:
X/O Column Style: it can show all columns from opening price or only last Xs/Os.
Color Theme: different themes exist => Green/Red, Yellow/Blue, White/Yellow, Orange/Blue, Lime/Red, Blue/Red
Show Breakouts is the option to show Breakouts
This tool detects & shows following Breakouts:
Triple Top/Bottom,
Triple Top Ascending,
Triple Bottom Descending,
Simple Buy/Sell (Double Top/Bottom),
Simple Buy With Rising Bottom,
Simple Sell With Declining Top
Catapult bullish/bearish
Show Horizontal Count Targets: Finds the congestion or consolidation pattern and if there is breakout then it calculates the Target by using Horizontal Count method (based on the width of congestion pattern). It shows how many column exist on congestion area. There is no guarantee that prices will reach the target.
Show Vertical Count Targets: When Triple Top/Bottom Breakouts occured the script calculates the target by using Vertical Count Method (based on the length of the column). There is no guarantee that prices will reach the target.
For both methods there is auto target cancellation if price goes below congestion bottom or above congestion top.
trend is calculated by EMA of closing price of the P&F
Whipsaw protection:
Last options are “Show info panel” and Labeling Offset. Script shows current box size, reversal, and recommanded minimum and maximum box size. And also it shows the price level to reverse the column (Xs <-> Os) and the price level to add at least 1 more box to column. This is the option to put these labels 10, 20, 30, 50 or 100 bars away from the last bar. Labeling content and color change according to X/O column.
do not hesitate to comment.
ZigZag Volume Profile [Honestcowboy]The ZigZag Volume Profile Indicator is a combination of 2 very popular trading indicators, the volume profile and zigzag indicator. Instead of using predetermined sessions like traditional volume profile analysis. This indicator expands on zigzag indicators "legs" and draws a volume profile inside each zigzag leg.
What is a Volume Profile?
"Technical analysis tool showing trading volume at specific price levels, creating a horizontal histogram on the side of a chart to reveal areas of high buying/selling interest, unlike traditional volume bars showing volume over time. Key elements include the Point of Control (POC) for most traded price, the Value Area (VAH/VAL), identifying crucial support/resistance, and analyzing profile shapes (like D, B, P) to understand market balance and potential price targets, used by professionals to spot liquidity and market structure."
Key Differences
Does not have a value area but distinguishes each column in relation to the biggest column in percentage terms.
Does not take sessions into account instead using zigzag legs
🟦 CALCULATION
The zigzag volume profile first builds a standard zigzag indicator to find structure in the market. Using pivot points and a minimum % price move threshhold.
Then once it knows the zigzags it will use each leg as a time window to calculate a volume profile inside.
🔹Coloring each column:
The script will find the biggest column in the Profile and use that as a reference for all other columns. It will then decide for each column individually how big it is in % compared to the biggest column. It will use that percentage to decide which color to give it, top 20% will be red, top 40% purple, top 60% blue, top 80% green and all the rest yellow. The user is able to adjust these numbers for further customisation.
🟦 USAGE
The idea behind this indicator is, if you look at markets as different legs (moves) going in a zigzag pattern you might want to look deeper inside your previous moves and see where the actual liquidity/volume was during that move. The hypothesis here is you build trade ideas based on zigzags but then use the volume profiles.
Since volume and market structure are very well known concepts to discretionary traders I'm hoping this indicator might give some different perspective on this relation and help people create a trading approach based on it. Here's some quick cherry picked examples, just as a proof of concept:
🟦 SETTINGS
🔹ZIGZAG SETTINGS
Price Deviotion % : This is the minimum price move in % term from last pivot price needs to move to form a new pivot for the zigzag.
Pivot Legs (Left/Right): The amount of bars a high or a low needs to be higher/lower than to the left and right of the bar. 10 By default to create medium term zigzag
🔹Volume Profile
Profile Rows: The amount of rows in Y axis the zigzag is going to be sliced into to create the volume profile. Higher number is more detailed volume profile but also uses more box objects which is maxed at 500. 25 by default
Profiles to Display: The amount of volume profiles the indicator will draw back in time. Higher number means more history but also longer loading time. 20 by default
🔹Visual Settings
This part is pretty self explanatory and you have can manually select the colors used to create the volume profile. Refer back the the explanation about the "🔹coloring each column" section.
TJR asia session sweep//@version=5
strategy("TJR asia session sweep", "TJR Asia Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Input settings
show_asian = input.bool(true, "Show Asian Session", group="Visual Settings")
show_london = input.bool(true, "Show London Session", group="Visual Settings")
show_swing_points = input.bool(true, "Show Asian Swing Points", group="Visual Settings")
show_market_structure = input.bool(true, "Show Market Structure", group="Visual Settings")
show_bos = input.bool(true, "Show Break of Structure", group="Visual Settings")
// Session Time Settings
asian_start_hour_input = input.int(22, "Asian Session Start Hour", minval=0, maxval=23, group="Session Times")
asian_end_hour_input = input.int(3, "Asian Session End Hour", minval=0, maxval=23, group="Session Times")
london_start_hour_input = input.int(3, "London Session Start Hour", minval=0, maxval=23, group="Session Times")
london_end_hour_input = input.int(8, "London Session End Hour", minval=0, maxval=23, group="Session Times")
session_timezone = input.string("America/New_York", "Session Timezone", options= , group="Session Times")
// Risk Management Settings
use_atr_sl = input.bool(false, "Use ATR Multiplier for Stop Loss", group="Risk Management")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="Risk Management")
atr_multiplier = input.float(2.0, "ATR Multiplier for Stop Loss", minval=0.5, maxval=10.0, group="Risk Management")
force_london_close = input.bool(true, "Force Close at London Session End", group="Risk Management")
cutoff_minutes = input.int(60, "Minutes Before Session End to Stop New Trades", minval=0, maxval=300, group="Risk Management")
// Position Sizing Settings
position_sizing_method = input.string("USD Risk", "Position Sizing Method", options= , group="Position Sizing")
usd_risk_per_trade = input.float(100.0, "USD Risk Per Trade", minval=1.0, maxval=10000.0, group="Position Sizing")
fixed_contracts = input.float(1.0, "Fixed Number of Contracts", minval=0.01, maxval=1000.0, step=0.01, group="Position Sizing")
// Color settings
asian_color = input.color(color.red, "Asian Session Color")
london_color = input.color(color.blue, "London Session Color")
swing_high_color = input.color(color.orange, "Swing High Color")
swing_low_color = input.color(color.lime, "Swing Low Color")
bullish_structure_color = input.color(color.green, "Bullish Structure Color")
bearish_structure_color = input.color(color.red, "Bearish Structure Color")
bos_color = input.color(color.orange, "Break of Structure Color")
// Line settings
line_width = input.int(2, "Line Width", minval=1, maxval=5)
// ATR calculation for stop loss
atr = ta.atr(atr_length)
// Position size calculation function
calculate_position_size(entry_price, stop_loss_price) =>
var float position_size = na
if position_sizing_method == "Fixed Contracts"
position_size := fixed_contracts
else // USD Risk method
stop_distance = math.abs(entry_price - stop_loss_price)
if stop_distance > 0
// Calculate position size based on USD risk per trade
// For forex: position_size = risk_amount / (stop_distance * point_value)
// For most forex pairs, point value = 1 (since we're dealing with price differences directly)
position_size := usd_risk_per_trade / stop_distance
else
position_size := fixed_contracts // Fallback to fixed contracts if stop distance is 0
position_size
// Session time definitions (using input variables)
asian_start_hour = asian_start_hour_input
asian_end_hour = asian_end_hour_input
london_start_hour = london_start_hour_input
london_end_hour = london_end_hour_input
// Get current hour using selected timezone
current_hour = hour(time, session_timezone)
// Previous hour for transition detection
prev_hour = hour(time , session_timezone)
// Session transition detection
asian_start = current_hour == asian_start_hour and prev_hour != asian_start_hour
asian_end = current_hour == asian_end_hour and prev_hour != asian_end_hour
london_start = current_hour == london_start_hour and prev_hour != london_start_hour
london_end = current_hour == london_end_hour and prev_hour != london_end_hour
// Session activity detection
asian_active = (current_hour >= asian_start_hour) or (current_hour < asian_end_hour)
london_active = (current_hour >= london_start_hour) and (current_hour < london_end_hour)
// Session boxes - keep previous sessions visible
var box asian_session_box = na
var box london_session_box = na
// Create Asian session box
if show_asian and asian_start
// Create new box at session start (previous box remains visible)
asian_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=asian_color, bgcolor=color.new(asian_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate session highs and lows for consistency
asian_session_length = asian_active and not na(asian_session_box) ? bar_index - box.get_left(asian_session_box) + 1 : 1
current_asian_high = ta.highest(high, asian_session_length)
current_asian_low = ta.lowest(low, asian_session_length)
// Update Asian session box continuously during session
if show_asian and asian_active and not na(asian_session_box)
box.set_right(asian_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(asian_session_box, current_asian_high)
box.set_bottom(asian_session_box, current_asian_low)
// Create London session box
if show_london and london_start
// Create new box at session start (previous box remains visible)
london_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=london_color, bgcolor=color.new(london_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate London session highs and lows for consistency
london_session_length = london_active and not na(london_session_box) ? bar_index - box.get_left(london_session_box) + 1 : 1
current_london_high = ta.highest(high, london_session_length)
current_london_low = ta.lowest(low, london_session_length)
// Update London session box continuously during session
if show_london and london_active and not na(london_session_box)
box.set_right(london_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(london_session_box, current_london_high)
box.set_bottom(london_session_box, current_london_low)
// Asian Session Swing Points Detection
var float asian_session_high = na
var float asian_session_low = na
var int asian_high_bar = na
var int asian_low_bar = na
// Asian Session Absolute High/Low for TP levels
var float asian_absolute_high = na
var float asian_absolute_low = na
var line asian_high_line = na
var line asian_low_line = na
var label asian_high_label = na
var label asian_low_label = na
var bool high_broken = false
var bool low_broken = false
// London Session High/Low tracking for stop loss
var float london_session_high = na
var float london_session_low = na
// Market structure tracking variables
var string breakout_direction = na // "bullish" or "bearish"
var float last_hh_level = na // Last Higher High level
var float last_hl_level = na // Last Higher Low level
var float last_ll_level = na // Last Lower Low level
var float last_lh_level = na // Last Lower High level
var int structure_count = 0
var string last_structure_type = na // "HH", "HL", "LL", "LH"
// Legacy variables for compatibility
var float last_swing_high = na
var float last_swing_low = na
var int last_high_bar = na
var int last_low_bar = na
// Market structure state tracking
var float pending_high = na
var float pending_low = na
var int pending_high_bar = na
var int pending_low_bar = na
var bool waiting_for_confirmation = false
// Break of Structure tracking variables
var float most_recent_hl = na
var float most_recent_lh = na
var int most_recent_hl_bar = na
var int most_recent_lh_bar = na
var bool bos_detected = false
// Trading variables
var bool trade_taken = false
// Trade visualization boxes (based on Casper strategy approach)
var box current_profit_box = na
var box current_sl_box = na
// Update swing points during Asian session
if asian_active and show_swing_points
// Always track absolute high/low for both TP levels and breakout detection
if na(asian_absolute_high) or high > asian_absolute_high
asian_absolute_high := high
if na(asian_absolute_low) or low < asian_absolute_low
asian_absolute_low := low
// Use absolute high/low for breakout levels (simplified logic)
if na(asian_session_high) or high > asian_session_high
asian_session_high := high
asian_high_bar := bar_index
if na(asian_session_low) or low < asian_session_low
asian_session_low := low
asian_low_bar := bar_index
// Track London session high/low for stop loss levels
if london_active
if na(london_session_high) or high > london_session_high
london_session_high := high
if na(london_session_low) or low < london_session_low
london_session_low := low
// Draw initial lines when Asian session ends
if asian_end and show_swing_points
if not na(asian_session_high) and not na(asian_high_bar)
// Draw extending line for high
asian_high_line := line.new(asian_high_bar, asian_session_high, bar_index + 200, asian_session_high,
color=swing_high_color, width=2, style=line.style_dashed, extend=extend.right)
asian_high_label := label.new(bar_index + 5, asian_session_high, "Asian High: " + str.tostring(asian_session_high, "#.####"), style=label.style_label_left, color=swing_high_color, textcolor=color.white, size=size.small)
if not na(asian_session_low) and not na(asian_low_bar)
// Draw extending line for low
asian_low_line := line.new(asian_low_bar, asian_session_low, bar_index + 200, asian_session_low,
color=swing_low_color, width=2, style=line.style_dashed, extend=extend.right)
asian_low_label := label.new(bar_index + 5, asian_session_low, "Asian Low: " + str.tostring(asian_session_low, "#.####"), style=label.style_label_left, color=swing_low_color, textcolor=color.white, size=size.small)
// Reset break flags for new session
high_broken := false
low_broken := false
// Check for breakouts during London session
if london_active and show_swing_points and not na(asian_session_high) and not na(asian_session_low)
// Check if Asian high is broken
if not high_broken and not low_broken and high > asian_session_high
high_broken := true
// Update high line to end at break point
if not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
// Remove the low line (first break wins)
if not na(asian_low_line)
line.delete(asian_low_line)
if not na(asian_low_label)
label.delete(asian_low_label)
// Add break marker
label.new(bar_index, asian_session_high * 1.001, "HIGH BREAK!",
style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bullish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_high_bar := bar_index
structure_count := 0
// Check if Asian low is broken
if not low_broken and not high_broken and low < asian_session_low
low_broken := true
// Update low line to end at break point
if not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Remove the high line (first break wins)
if not na(asian_high_line)
line.delete(asian_high_line)
if not na(asian_high_label)
label.delete(asian_high_label)
// Add break marker
label.new(bar_index, asian_session_low * 0.999, "LOW BREAK!",
style=label.style_label_up, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bearish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_low_bar := bar_index
structure_count := 0
// Stop extending lines when London session ends (if not already broken)
if london_end and show_swing_points
if not high_broken and not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
if not low_broken and not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Force close all trades at London session end (if enabled)
if london_end and force_london_close
if strategy.position_size != 0
// Extend boxes immediately before session close to prevent timing issues
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
strategy.close_all(comment="London Close")
trade_taken := false // Reset trade flag for next session
// Market structure detection after breakout (only during London session and before first BoS)
if show_market_structure and not na(breakout_direction) and london_active and not bos_detected
// Bullish structure tracking (HH, HL alternating)
if breakout_direction == "bullish"
// Check for Higher High pattern: Bullish candle followed by bearish candle
pattern_high = math.max(high , high)
prev_hh = na(last_hh_level) ? last_swing_high : last_hh_level
// HH Detection: Only if we expect HH next (no last structure or last was HL)
if (na(last_structure_type) or last_structure_type == "HL") and close > open and close < open and pattern_high > prev_hh and close > prev_hh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_hh = true
if is_too_close and structure_count > 0 and pattern_high <= last_hh_level
should_create_hh := false
if should_create_hh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "HH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hh_level := pattern_high
last_swing_high := pattern_high
last_high_bar := bar_index
last_structure_type := "HH"
// HL Detection: Only if we expect HL next (last was HH)
pattern_low = math.min(low , low)
prev_hl = na(last_hl_level) ? last_swing_low : last_hl_level
if last_structure_type == "HH" and close < open and close > open and pattern_low > prev_hl and close > prev_hl
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_hl = true
if is_too_close and pattern_low <= last_hl_level
should_create_hl := false
if should_create_hl
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "HL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hl_level := pattern_low
most_recent_hl := pattern_low // Update most recent HL for BoS detection
most_recent_hl_bar := bar_index - 1 // Store HL bar position
last_low_bar := bar_index
last_structure_type := "HL"
// Bearish structure tracking (LL, LH alternating)
if breakout_direction == "bearish"
// Check for Lower Low pattern: Bearish candle followed by bullish candle
pattern_low = math.min(low , low)
prev_ll = na(last_ll_level) ? last_swing_low : last_ll_level
// LL Detection: Only if we expect LL next (no last structure or last was LH)
if (na(last_structure_type) or last_structure_type == "LH") and close < open and close > open and pattern_low < prev_ll and close < prev_ll
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_ll = true
if is_too_close and structure_count > 0 and pattern_low >= last_ll_level
should_create_ll := false
if should_create_ll
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "LL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_ll_level := pattern_low
last_swing_low := pattern_low
last_low_bar := bar_index
last_structure_type := "LL"
// LH Detection: Only if we expect LH next (last was LL)
pattern_high = math.max(high , high)
prev_lh = na(last_lh_level) ? last_swing_high : last_lh_level
if last_structure_type == "LL" and close > open and close < open and pattern_high < prev_lh and close < prev_lh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_lh = true
if is_too_close and pattern_high >= last_lh_level
should_create_lh := false
if should_create_lh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "LH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_lh_level := pattern_high
most_recent_lh := pattern_high // Update most recent LH for BoS detection
most_recent_lh_bar := bar_index - 1 // Store LH bar position
last_high_bar := bar_index
last_structure_type := "LH"
// Check if we're within the cutoff period before London session end
current_minute = minute(time, session_timezone)
london_end_time_minutes = london_end_hour * 60 // Convert London end hour to minutes
current_time_minutes = current_hour * 60 + current_minute // Current time in minutes
// Calculate minutes remaining in London session
london_session_minutes_remaining = london_end_time_minutes - current_time_minutes
// Handle day rollover case (e.g., if london_end is 8:00 (480 min) and current is 23:30 (1410 min))
if london_session_minutes_remaining < 0
london_session_minutes_remaining := london_session_minutes_remaining + (24 * 60) // Add 24 hours in minutes
// Only allow trades if more than cutoff_minutes remaining in London session
allow_new_trades = london_session_minutes_remaining > cutoff_minutes
// Break of Structure (BoS) Detection and Trading Logic - Only first BoS per London session and outside cutoff period
if show_bos and london_active and show_market_structure and not bos_detected and not trade_taken and allow_new_trades
// Bullish BoS: Price closes below the most recent HL (after bullish breakout) - SELL SIGNAL
if breakout_direction == "bullish" and not na(most_recent_hl) and not na(most_recent_hl_bar)
// Check minimum distance requirement (at least 4 candles between BoS and HL)
if close < most_recent_hl and (bar_index - most_recent_hl_bar) >= 4
// Draw dotted line from HL position to BoS point
line.new(most_recent_hl_bar, most_recent_hl, bar_index, most_recent_hl,
color=bos_color, width=2, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_hl_bar + bar_index) / 2)
// Draw BoS label below the line for HL break
label.new(center_bar, most_recent_hl - (most_recent_hl * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// SELL ENTRY
if not na(london_session_high) and not na(asian_absolute_low)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close + (atr * atr_multiplier) : london_session_high
take_profit_level = asian_absolute_low
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("SELL", strategy.short, qty=position_size, comment="BoS Sell")
strategy.exit("SELL EXIT", "SELL", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=take_profit_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=stop_loss_level,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Bearish BoS: Price closes above the most recent LH (after bearish breakout) - BUY SIGNAL
if breakout_direction == "bearish" and not na(most_recent_lh) and not na(most_recent_lh_bar)
// Check minimum distance requirement (at least 4 candles between BoS and LH)
if close > most_recent_lh and (bar_index - most_recent_lh_bar) >= 4
// Draw dotted line from LH position to BoS point
line.new(most_recent_lh_bar, most_recent_lh, bar_index, most_recent_lh,
color=bos_color, width=1, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_lh_bar + bar_index) / 2)
// Draw BoS label above the line for LH break
label.new(center_bar, most_recent_lh + (most_recent_lh * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// BUY ENTRY
if not na(london_session_low) and not na(asian_absolute_high)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close - (atr * atr_multiplier) : london_session_low
take_profit_level = asian_absolute_high
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("BUY", strategy.long, qty=position_size, comment="BoS Buy")
strategy.exit("BUY EXIT", "BUY", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=take_profit_level,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=stop_loss_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Position close detection for extending boxes (based on Casper strategy)
if barstate.isconfirmed and strategy.position_size == 0 and strategy.position_size != 0
// Extend trade visualization boxes to exact exit point when position closes
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
// Backup safety check - extend boxes if position is closed but boxes still active
if not na(current_profit_box) and strategy.position_size == 0
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na
if not na(current_sl_box) and strategy.position_size == 0
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na
// Reset everything when new Asian session starts
if asian_start and show_swing_points
asian_session_high := na
asian_session_low := na
asian_high_bar := na
asian_low_bar := na
// Reset absolute levels
asian_absolute_high := na
asian_absolute_low := na
asian_high_line := na
asian_low_line := na
asian_high_label := na
asian_low_label := na
high_broken := false
low_broken := false
// Reset London session levels
london_session_high := na
london_session_low := na
// Reset market structure tracking
breakout_direction := na
last_hh_level := na
last_hl_level := na
last_ll_level := na
last_lh_level := na
last_swing_high := na
last_swing_low := na
last_high_bar := na
last_low_bar := na
structure_count := 0
last_structure_type := na
pending_high := na
pending_low := na
pending_high_bar := na
pending_low_bar := na
waiting_for_confirmation := false
// Reset BoS tracking
most_recent_hl := na
most_recent_lh := na
most_recent_hl_bar := na
most_recent_lh_bar := na
bos_detected := false
// Reset trading
trade_taken := false
// Reset current trade boxes
current_profit_box := na
current_sl_box := na
// Debug info (optional)
show_debug = input.bool(false, "Show Debug Info")
if show_debug
var table debug_table = table.new(position.top_right, 2, 3, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Current Hour:", text_color=color.black)
table.cell(debug_table, 1, 0, str.tostring(current_hour), text_color=color.black)
table.cell(debug_table, 0, 1, "Asian Active:", text_color=color.black)
table.cell(debug_table, 1, 1, str.tostring((current_hour >= asian_start_hour) or (current_hour < asian_end_hour)), text_color=color.black)
table.cell(debug_table, 0, 2, "London Active:", text_color=color.black)
table.cell(debug_table, 1, 2, str.tostring((current_hour >= london_start_hour) and (current_hour < london_end_hour)), text_color=color.black)
BarCoreLibrary "BarCore"
BarCore is a foundational library for technical analysis, providing essential functions for evaluating the structural properties of candlesticks and inter-bar relationships.
It prioritizes ratio-based metrics (0.0 to 1.0) over absolute prices, making it asset-agnostic and ideal for robust pattern recognition, momentum analysis, and volume-weighted pressure evaluation.
Key modules:
- Structure & Range: High-precision bar and body metrics with relative positioning.
- Wick Dynamics: Absolute and relative wick analysis for identifying price rejection.
- Inter-bar Logic: Containment, coverage, and quantitative price overlap (Ratio-based).
- Gap Intelligence: Real body and price gaps with customizable significance thresholds.
- Flow & Pressure: Volume-weighted buying/selling pressure and Money Flow metrics.
isBuyingBar()
Checks if the bar is a bullish (up) bar, where close is greater than open.
Returns: bool True if the bar closed higher than it opened.
isSellingBar()
Checks if the bar is a bearish (down) bar, where close is less than open.
Returns: bool True if the bar closed lower than it opened.
barMidpoint()
Calculates the absolute midpoint of the bar's total range (High + Low) / 2.
Returns: float The midpoint price of the bar.
barRange()
Calculates the absolute size of the bar's total range (High to Low).
Returns: float The absolute difference between high and low.
barRangeMidpoint()
Calculates half of the bar's total range size.
Returns: float Half the bar's range size.
realBodyHigh()
Returns the higher price between the open and close.
Returns: float The top of the real body.
realBodyLow()
Returns the lower price between the open and close.
Returns: float The bottom of the real body.
realBodyMidpoint()
Calculates the absolute midpoint of the bar's real body.
Returns: float The midpoint price of the real body.
realBodyRange()
Calculates the absolute size of the bar's real body.
Returns: float The absolute difference between open and close.
realBodyRangeMidpoint()
Calculates half of the bar's real body size.
Returns: float Half the real body size.
upperWickRange()
Calculates the absolute size of the upper wick.
Returns: float The range from high to the real body high.
lowerWickRange()
Calculates the absolute size of the lower wick.
Returns: float The range from the real body low to low.
openRatio()
Returns the location of the open price relative to the bar's total range (0.0 at low to 1.0 at high).
Returns: float The ratio of the distance from low to open, divided by the total range.
closeRatio()
Returns the location of the close price relative to the bar's total range (0.0 at low to 1.0 at high).
Returns: float The ratio of the distance from low to close, divided by the total range.
realBodyRatio()
Calculates the ratio of the real body size to the total bar range.
Returns: float The real body size divided by the bar range. Returns 0 if barRange is 0.
upperWickRatio()
Calculates the ratio of the upper wick size to the total bar range.
Returns: float The upper wick size divided by the bar range. Returns 0 if barRange is 0.
lowerWickRatio()
Calculates the ratio of the lower wick size to the total bar range.
Returns: float The lower wick size divided by the bar range. Returns 0 if barRange is 0.
upperWickToBodyRatio()
Calculates the ratio of the upper wick size to the real body size.
Returns: float The upper wick size divided by the real body size. Returns 0 if realBodyRange is 0.
lowerWickToBodyRatio()
Calculates the ratio of the lower wick size to the real body size.
Returns: float The lower wick size divided by the real body size. Returns 0 if realBodyRange is 0.
totalWickRatio()
Calculates the ratio of the total wick range (Upper Wick + Lower Wick) to the total bar range.
Returns: float The total wick range expressed as a ratio of the bar's total range. Returns 0 if barRange is 0.
isBodyExpansion()
Checks if the current bar's real body range is larger than the previous bar's real body range (body expansion).
Returns: bool True if realBodyRange() > realBodyRange() .
isBodyContraction()
Checks if the current bar's real body range is smaller than the previous bar's real body range (body contraction).
Returns: bool True if realBodyRange() < realBodyRange() .
isWithinPrevBar(inclusive)
Checks if the current bar's range is entirely within the previous bar's range.
Parameters:
inclusive (bool) : If true, allows equality (<=, >=). Default is false.
Returns: bool True if High < High AND Low > Low .
isCoveringPrevBar(inclusive)
Checks if the current bar's range fully covers the entire previous bar's range.
Parameters:
inclusive (bool) : If true, allows equality (<=, >=). Default is false.
Returns: bool True if High > High AND Low < Low .
isWithinPrevBody(inclusive)
Checks if the current bar's real body is entirely inside the previous bar's real body.
Parameters:
inclusive (bool) : If true, allows equality (<=, >=). Default is false.
Returns: bool True if the current body is contained inside the previous body.
isCoveringPrevBody(inclusive)
Checks if the current bar's real body fully covers the previous bar's real body.
Parameters:
inclusive (bool) : If true, allows equality (<=, >=). Default is false.
Returns: bool True if the current body fully covers the previous body.
isOpenWithinPrevBody(inclusive)
Checks if the current bar's open price falls within the real body range of the previous bar.
Parameters:
inclusive (bool) : If true, includes the boundary prices. Default is false.
Returns: bool True if the open price is between the previous bar's real body high and real body low.
isCloseWithinPrevBody(inclusive)
Checks if the current bar's close price falls within the real body range of the previous bar.
Parameters:
inclusive (bool) : If true, includes the boundary prices. Default is false.
Returns: bool True if the close price is between the previous bar's real body high and real body low.
isPrevOpenWithinBody(inclusive)
Checks if the previous bar's open price falls within the current bar's real body range.
Parameters:
inclusive (bool) : If true, includes the boundary prices. Default is false.
Returns: bool True if open is between the current bar's real body high and real body low.
isPrevCloseWithinBody(inclusive)
Checks if the previous bar's closing price falls within the current bar's real body range.
Parameters:
inclusive (bool) : If true, includes the boundary prices. Default is false.
Returns: bool True if close is between the current bar's real body high and real body low.
isOverlappingPrevBar()
Checks if there is any price overlap between the current bar's range and the previous bar's range.
Returns: bool True if the current bar's range has any intersection with the previous bar's range.
bodyOverlapRatio()
Calculates the percentage of the current real body that overlaps with the previous real body.
Returns: float The overlap ratio (0.0 to 1.0). 1.0 means the current body is entirely within the previous body's price range.
isCompletePriceGapUp()
Checks for a complete price gap up where the current bar's low is strictly above the previous bar's high, meaning there is zero price overlap between the two bars.
Returns: bool True if the current low is greater than the previous high.
isCompletePriceGapDown()
Checks for a complete price gap down where the current bar's high is strictly below the previous bar's low, meaning there is zero price overlap between the two bars.
Returns: bool True if the current high is less than the previous low.
isRealBodyGapUp()
Checks for a gap between the current and previous real bodies.
Returns: bool True if the current body is completely above the previous body.
isRealBodyGapDown()
Checks for a gap between the current and previous real bodies.
Returns: bool True if the current body is completely below the previous body.
gapRatio()
Calculates the percentage difference between the current open and the previous close, expressed as a decimal ratio.
Returns: float The gap ratio (positive for gap up, negative for gap down). Returns 0 if the previous close is 0.
gapPercentage()
Calculates the percentage difference between the current open and the previous close.
Returns: float The gap percentage (positive for gap up, negative for gap down). Returns 0 if previous close is 0.
isGapUp()
Checks for a basic gap up, where the current bar's open is strictly higher than the previous bar's close. This is the minimum condition for a gap up.
Returns: bool True if the current open is greater than the previous close (i.e., gapRatio is positive).
isGapDown()
Checks for a basic gap down, where the current bar's open is strictly lower than the previous bar's close. This is the minimum condition for a gap down.
Returns: bool True if the current open is less than the previous close (i.e., gapRatio is negative).
isSignificantGapUp(minRatio)
Checks if the current bar opened significantly higher than the previous close, as defined by a minimum percentage ratio.
Parameters:
minRatio (float) : The minimum required gap percentage ratio. Default is 0.03 (3%).
Returns: bool True if the gap ratio (open vs. previous close) is greater than or equal to the minimum ratio.
isSignificantGapDown(minRatio)
Checks if the current bar opened significantly lower than the previous close, as defined by a minimum percentage ratio.
Parameters:
minRatio (float) : The minimum required gap percentage ratio. Default is 0.03 (3%).
Returns: bool True if the absolute value of the gap ratio (open vs. previous close) is greater than or equal to the minimum ratio.
trueRangeComponentHigh()
Calculates the absolute distance from the current bar's High to the previous bar's Close, representing one of the components of the True Range.
Returns: float The absolute difference: |High - Close |.
trueRangeComponentLow()
Calculates the absolute distance from the current bar's Low to the previous bar's Close, representing one of the components of the True Range.
Returns: float The absolute difference: |Low - Close |.
isUpperWickDominant(minRatio)
Checks if the upper wick is significantly long relative to the total range.
Parameters:
minRatio (float) : Minimum ratio of the wick to the total bar range. Default is 0.7 (70%).
Returns: bool True if the upper wick dominates the bar's range.
isUpperWickNegligible(maxRatio)
Checks if the upper wick is very small relative to the total range.
Parameters:
maxRatio (float) : Maximum ratio of the wick to the total bar range. Default is 0.05 (5%).
Returns: bool True if the upper wick is negligible.
isLowerWickDominant(minRatio)
Checks if the lower wick is significantly long relative to the total range.
Parameters:
minRatio (float) : Minimum ratio of the wick to the total bar range. Default is 0.7 (70%).
Returns: bool True if the lower wick dominates the bar's range.
isLowerWickNegligible(maxRatio)
Checks if the lower wick is very small relative to the total range.
Parameters:
maxRatio (float) : Maximum ratio of the wick to the total bar range. Default is 0.05 (5%).
Returns: bool True if the lower wick is negligible.
isSymmetric(maxTolerance)
Checks if the upper and lower wicks are roughly equal in length.
Parameters:
maxTolerance (float) : Maximum allowable percentage difference between the two wicks. Default is 0.15 (15%).
Returns: bool True if wicks are symmetric within the tolerance level.
isMarubozuBody(minRatio)
Candle with a very large body relative to the total range (minimal wicks).
Parameters:
minRatio (float) : Minimum body size ratio. Default is 0.9 (90%).
Returns: bool True if the bar has minimal wicks (Marubozu body).
isLargeBody(minRatio)
Candle with a large body relative to the total range.
Parameters:
minRatio (float) : Minimum body size ratio. Default is 0.6 (60%).
Returns: bool True if the bar has a large body.
isSmallBody(maxRatio)
Candle with a small body relative to the total range.
Parameters:
maxRatio (float) : Maximum body size ratio. Default is 0.4 (40%).
Returns: bool True if the bar has small body.
isDojiBody(maxRatio)
Candle with a very small body relative to the total range (indecision).
Parameters:
maxRatio (float) : Maximum body size ratio. Default is 0.1 (10%).
Returns: bool True if the bar has a very small body.
isLowerWickExtended(minRatio)
Checks if the lower wick is significantly extended relative to the real body size.
Parameters:
minRatio (float) : Minimum required ratio of the lower wick length to the real body size. Default is 2.0 (Lower wick must be at least twice the body's size).
Returns: bool True if the lower wick's length is at least `minRatio` times the size of the real body.
isUpperWickExtended(minRatio)
Checks if the upper wick is significantly extended relative to the real body size.
Parameters:
minRatio (float) : Minimum required ratio of the upper wick length to the real body size. Default is 2.0 (Upper wick must be at least twice the body's size).
Returns: bool True if the upper wick's length is at least `minRatio` times the size of the real body.
isStrongBuyingBar(minCloseRatio, maxOpenRatio)
Checks for a bar with strong bullish momentum (open near low, close near high), indicating high conviction.
Parameters:
minCloseRatio (float) : Minimum required ratio for the close location (relative to range, e.g., 0.7 means close must be in the top 30%). Default is 0.7 (70%).
maxOpenRatio (float) : Maximum allowed ratio for the open location (relative to range, e.g., 0.3 means open must be in the bottom 30%). Default is 0.3 (30%).
Returns: bool True if the bar is bullish, opened in the low extreme, and closed in the high extreme.
isStrongSellingBar(maxCloseRatio, minOpenRatio)
Checks for a bar with strong bearish momentum (open near high, close near low), indicating high conviction.
Parameters:
maxCloseRatio (float) : Maximum allowed ratio for the close location (relative to range, e.g., 0.3 means close must be in the bottom 30%). Default is 0.3 (30%).
minOpenRatio (float) : Minimum required ratio for the open location (relative to range, e.g., 0.7 means open must be in the top 30%). Default is 0.7 (70%).
Returns: bool True if the bar is bearish, opened in the high extreme, and closed in the low extreme.
isWeakBuyingBar(maxCloseRatio, maxBodyRatio)
Identifies a bar that is technically bullish but shows significant weakness, characterized by a failure to close near the high and a small body size.
Parameters:
maxCloseRatio (float) : Maximum allowed ratio for the close location relative to the range (e.g., 0.6 means the close must be in the bottom 60% of the bar's range). Default is 0.6 (60%).
maxBodyRatio (float) : Maximum allowed ratio for the real body size relative to the bar's range (e.g., 0.4 means the body is small). Default is 0.4 (40%).
Returns: bool True if the bar is bullish, but its close is weak and its body is small.
isWeakSellingBar(minCloseRatio, maxBodyRatio)
Identifies a bar that is technically bearish but shows significant weakness, characterized by a failure to close near the low and a small body size.
Parameters:
minCloseRatio (float) : Minimum required ratio for the close location relative to the range (e.g., 0.4 means the close must be in the top 60% of the bar's range). Default is 0.4 (40%).
maxBodyRatio (float) : Maximum allowed ratio for the real body size relative to the bar's range (e.g., 0.4 means the body is small). Default is 0.4 (40%).
Returns: bool True if the bar is bearish, but its close is weak and its body is small.
balanceOfPower()
Measures the net pressure of buyers vs. sellers within the bar, normalized to the bar's range.
Returns: float A value between -1.0 (strong selling) and +1.0 (strong buying), representing the strength and direction of the close relative to the open.
buyingPressure()
Measures the net buying volume pressure based on the close location and volume.
Returns: float A numerical value representing the volume weighted buying pressure.
sellingPressure()
Measures the net selling volume pressure based on the close location and volume.
Returns: float A numerical value representing the volume weighted selling pressure.
moneyFlowMultiplier()
Calculates the Money Flow Multiplier (MFM), which is the price component of Money Flow and CMF.
Returns: float A normalized value from -1.0 (strong selling) to +1.0 (strong buying), representing the net directional pressure.
moneyFlowVolume()
Calculates the Money Flow Volume (MFV), which is the Money Flow Multiplier weighted by the bar's volume.
Returns: float A numerical value representing the volume-weighted money flow. Positive = buying dominance; negative = selling dominance.
isAccumulationBar()
Checks for basic accumulation on the current bar, requiring both positive Money Flow Volume and a buying bar (closing higher than opening).
Returns: bool True if the bar exhibits buying dominance through its internal range location and is a buying bar.
isDistributionBar()
Checks for basic distribution on the current bar, requiring both negative Money Flow Volume and a selling bar (closing lower than opening).
Returns: bool True if the bar exhibits selling dominance through its internal range location and is a selling bar.
Daily Floor PivotsDaily Floor Pivots with Comprehensive Statistical Analysis
Overview
This indicator combines traditional floor pivot levels with golden zone analysis and comprehensive statistical insights derived from 15 years of historical NQ futures data. While the pivot levels and golden zones can be applied to any instrument, the statistical tables are specifically calibrated for NQ/MNQ futures based on analysis of 2,482 NY Regular Trading Hours (RTH) sessions from 2010-2025.
What Makes This Indicator Original
Unlike standard pivot indicators that merely plot levels, this tool provides:
Enhanced Golden Zone Analysis: Calculates not only the main golden zone (0.5-0.618 retracement of previous day's range) but also golden zones between each pivot pair (PP-R1, R1-R2, R2-R3, PP-S1, S1-S2, S2-S3)
Data-Driven Statistical Tables: Two comprehensive tables displaying real statistics from 2,482 trading days of NQ analysis, including:
Probability-based touch rates and continuation patterns
Context-aware statistics based on opening position
Gap analysis and behavioral patterns
First touch dynamics and time-to-reach averages
Granular Customization: Every visual element and statistical section can be independently toggled, allowing traders to focus on what matters most to their strategy
How It Works
Pivot Calculation Methodology
The indicator uses the standard floor pivot formula based on the previous day's price action:
Pivot Point (PP) = (Previous High + Previous Low + Previous Close) / 3
Resistance Levels: R1, R2, R3 calculated from PP and previous range
Support Levels: S1, S2, S3 calculated from PP and previous range
Golden Zone Calculations
Main Golden Zone: The 0.5 to 0.618 Fibonacci retracement of the previous day's range, representing a key reversal and continuation area.
Inter-Pivot Golden Zones: For each adjacent pivot pair, golden zones are calculated as:
Resistance pairs (PP→R1, R1→R2, R2→R3): 0.5-0.618 range from the lower pivot
Support pairs (PP→S1, S1→S2, S2→S3): 0.382-0.5 range from the upper pivot
These zones represent high-probability areas where price tends to react when moving between pivot levels.
Statistical Analysis Source
All statistics displayed in the tables are derived from external Python analysis of 15 years of 1-minute NQ futures data (2010-2025), specifically analyzing NY RTH sessions (9:30 AM - 4:00 PM EST). The analysis tracked:
2,482 complete trading days
Intraday pivot touches and closes
Opening position context
Gap behavior relative to previous day
Time-of-day patterns
Sequential pivot interactions
IMPORTANT: While the pivot levels and golden zones are universally applicable mathematical calculations that work on any instrument, the statistical percentages shown in the tables are specific to NQ/MNQ behavior only. Do not assume these statistics transfer to other instruments.
Configuration Guide
Basic Settings
Number of Periods Back (1-20, default: 3)
Controls how many historical pivot periods are displayed on the chart
Setting to 1 shows only current day's pivots
Higher values show more historical context
Labels Position (Left/Right)
Choose whether pivot labels appear on the left or right side of each level line
Line Width (1-5, default: 2)
Adjust the thickness of all pivot and golden zone lines
Golden Zone Customization
Show Daily Golden Zone (0.5-0.618)
Toggle the main golden zone on/off
When enabled, displays a shaded box between the 0.5 and 0.618 retracement levels
Line Color / Fill Color
Customize the appearance of the main golden zone
Fill color determines the shaded box transparency
Show Labels / Show Prices
Control whether "0.5" and "0.618" labels appear
Control whether price values are displayed on labels
Inter-Pivot Golden Zones
Six toggle options allow you to show/hide individual golden zones:
PP to R1 / PP to S1: Most frequently touched (60.8% / 50.9%)
R1 to R2 / S1 to S2: Moderately touched (25.2% / 24.0%)
R2 to R3 / S2 to S3: Rarely touched (9.4% / 10.5%)
Line Color / Fill Color: Customize appearance of all inter-pivot zones
Show Labels / Show Prices: Control labeling for inter-pivot zones
Usage Tip: Disable outer zones (R2-R3, S2-S3) on lower volatility days to reduce chart clutter.
Pivot Display
Show Support/Resistance Levels: Master toggle for all pivot lines
Show SR Labels / Show SR Prices: Control labeling on pivot levels
Individual level toggles and colors:
PP (Pivot Point): The central reference point
R1/S1: Primary resistance/support (38.9% / 35.4% touch rate)
R2/S2: Secondary levels (15.6% / 16.1% touch rate)
R3/S3: Extended levels (5.1% / 7.3% touch rate)
Color Customization: Each level's color can be independently set
Overall Statistics Table
Show Overall Statistics Table: Master toggle
Table Size: tiny/small/normal/large/huge/auto
Table Position: Top Left/Top Right/Bottom Left/Bottom Right
Section Toggles (enable/disable individual sections):
Current Session Info
Touch & Close Rates
Continue & Reject Rates
First Touch Statistics
Golden Zone Statistics
Daily Close Distribution
Highest/Lowest Levels Reached
Context Statistics Table
Show Context Statistics Table: Master toggle
Table Size: tiny/small/normal/large/huge/auto
Table Position: Top Left/Top Right/Bottom Left/Bottom Right
Section Toggles:
Current Opening Zone
Opening Zone Statistics
Previous Day Gap Context
Understanding the Statistical Tables
TABLE 1: OVERALL STATISTICS
This table presents universal statistics from 2,482 days of NQ analysis.
Current Session Info
Displays real-time context for the active session:
Open: Where the current RTH session opened relative to pivots (e.g., "GZ_TO_R1" means opened between the PP-R1 golden zone and R1)
Now: Current price position relative to pivots
Direction: Bull (close > open), Bear (close < open), or Flat
How to use: This section helps you quickly understand where price opened and where it currently is, providing immediate context for the day's action.
Touch & Close Rates
Shows probability that each pivot level will be reached during RTH:
Touch %: Percentage of days where price touched this level at any point
Example: R1 touched 38.9% of days, PP touched 57.5% of days
Close %: Percentage of days where price closed beyond this level
Example: R1 close beyond happened 39.8% of days
How to interpret:
Higher touch rates indicate more reliable levels for intraday targeting
The difference between touch and close rates shows rejection frequency
PP has the highest touch rate (57.5%), making it the most magnetic level
Outer levels (R3/S3) have low touch rates (5.1%/7.3%), indicating rare extension days
Continue & Reject Rates
When a level is touched, these statistics show what happens next:
Continue %: Probability price continues through the level
Example: When PP is touched, price continues 88.1% of the time
Reject %: Probability price rejects from the level and reverses
Example: When R1 is touched, price rejects 50.9% of the time
How to interpret:
PP shows highest continuation (88.1%), confirming it's a poor reversal level
Support levels (S1/S2/S3) show strong rejection rates (62.5%/60.7%/56.1%), making them better reversal candidates
Continuation rates above 80% suggest the level is better as a target than an entry
First Touch Statistics
Analyzes which pivot is typically touched first during RTH:
1st Touch %: Probability this level is the first pivot encountered
PP is first touched 37.1% of days (most common)
R1 is first touched 26.0% of days
S1 is first touched 10.9% of days
1st→Continue: If this level is touched first, probability of continuation
S1-S3 show 95.6%-100% continuation when touched first
This means when price reaches support first, it usually continues lower
Avg Time: Minutes after 9:30 AM EST before first touch
PP: 1h 6m average
S3: 19m average (when bearish)
R3: 3h 19m average (when bullish)
How to interpret:
Opening away from PP means higher probability of reaching extremes (R2/R3 or S2/S3)
When support is touched first (within first 2 hours), expect continuation lower
Late-day first touches (after 2 PM) often indicate strong trending days
Multi-Touch: Shows how often levels are tested multiple times (92.8%-95.0% across all levels)
Golden Zone Statistics
Main GZ: 58.5% touch rate for the 0.5-0.618 zone
Inter-Pivot zones:
PP-R1: 60.8% (highest probability)
PP-S1: 50.9%
R1-R2: 25.2%
S1-S2: 24.0%
R2-R3: 9.4%
S2-S3: 10.5%
How to interpret:
Main GZ is touched more often than any individual resistance level
PP-R1 and PP-S1 golden zones are high-probability mean reversion areas
Outer golden zones (R2-R3, S2-S3) are only relevant on high volatility days
Daily Close Distribution
Shows where RTH sessions typically close:
Above/Below PP: 58.5% close above, 41.5% below (slight bullish bias)
Above R1: 24.5% of days
Below S1: 18.7% of days
In GZ: Only 6.3% close in the golden zone (typically transits through it)
How to interpret:
Most days (58.5%) have bullish bias (close above PP)
Less than 25% of days are strong trending days (beyond R1/S1)
Golden zone is an action area, not a resting area
Highest/Lowest Levels Reached
Distribution of the most extreme level reached:
High Resist: R1 (26.0%), R2 (10.8%), R3 (5.1%)
Low Support: S1 (35.4%), S2 (1.9%), S3 (0.6%)
How to interpret:
Most days don't reach beyond R1 or S1
R3/S3 are rare events (5.1%/0.6%), indicating major trending days
S1 is reached as lowest level more often than R1 as highest, suggesting downside is more frequently tested
TABLE 2: CONTEXT STATISTICS
This table provides conditional statistics based on how the session opened.
Current Opening Zone
Displays which of 13 possible zones the RTH session opened in:
ABOVE_R3, R2_TO_R3, R1_TO_R2, GZ_TO_R1, IN_GZ, PP_TO_GZ, AT_PP, GZ_TO_PP, S1_TO_GZ, S2_TO_S1, S3_TO_S2, BELOW_S3
How to use: This immediately tells you the market structure and what type of day to expect.
Opening Zone Statistics
Detailed statistics for the current opening zone (only shows for 6 major zones):
For each zone, you see:
Occurs: How often this opening scenario happens
GZ_TO_R1: 38.4% (most common)
AT_PP: 12.8%
S1_TO_GZ: 24.2%
R1_TO_R2: 9.4%
S2_TO_S1: 6.3%
IN_GZ: 3.8%
Bull/Bear %: Close direction probability
Example: GZ_TO_R1 is perfectly balanced (50.0% bull / 49.6% bear)
R1_TO_R2 is bullish (58.1% bull / 41.0% bear)
Levels Hit: Probability of reaching each pivot level from this opening
Helps identify high-probability targets
Example: From GZ_TO_R1, PP is hit 52.9%, R1 is hit 49.0%, S1 is hit 21.6%
How to interpret:
GZ_TO_R1 (most common): Balanced day, watch PP and GZ for direction clues
AT_PP: Slight bullish bias (56.9%), high chance of touching both PP (92.8%) and GZ (90.3%)
R1_TO_R2: Bullish bias (58.1%), expect continuation to R2 (58.1% chance)
S2_TO_S1: Bullish reversal setup (59.9%), very high chance of S1 touch (82.8%)
IN_GZ: Rare opening (3.8%), bullish bias, virtually guaranteed GZ touch (100%)
Previous Day Gap Context
Shows current gap scenario and typical behavior:
Three scenarios:
GAP UP: Opened Above Yesterday's High (20.5% of days)
R1 Touch: 65.9% (high probability)
R2 Touch: 42.1%
S1 Touch: 15.0% (low probability)
Bias: Bullish continuation
GAP DOWN: Opened Below Yesterday's Low (11.3% of days)
S1 Touch: 71.5% (high probability)
S2 Touch: 55.2%
R1 Touch: 12.1% (low probability)
Bias: Bearish continuation
NO GAP: Opened Within Yesterday's Range (68.2% of days)
PP Touch: 69.5%
GZ Touch: 71.7%
R1 Touch: 35.2%
Bias: Balanced (watch for direction at PP/GZ)
How to interpret:
Gap days (up or down) tend to continue in the gap direction
When gapping, fade trades are low probability (15.0% and 12.1%)
Most days (68.2%) open within previous range, making PP and GZ critical decision zones
The "bias" line provides clear directional guidance for trade selection
Practical Application Examples
Example 1: Standard Day Setup
Scenario: RTH opens at 20,450
PP: 20,400
GZ: 20,390-20,395
R1: 20,425
Previous day high: 20,460
What the tables tell you:
Opening Zone: "GZ_TO_R1" (38.4% occurrence)
Gap Context: "NO GAP" (68.2% occurrence)
Expected behavior: Balanced (50/50 bull/bear)
High probability: PP touch (52.9%), GZ touch (56.8%)
Moderate probability: R1 touch (49.0%), S1 touch (21.6%)
Trade plan:
Wait for price to reach PP (52.9% chance) or GZ (56.8% chance)
Look for directional confirmation at these levels
First target R1 if bullish, S1 if bearish
Avoid assuming direction without confirmation (perfectly balanced opening)
Example 2: Gap Up Day
Scenario: RTH opens at 20,510
Previous day high: 20,460
R1: 20,425
R2: 20,475
What the tables tell you:
Gap Context: "GAP UP" (20.5% occurrence)
R1 touch: 65.9% probability
R2 touch: 42.1% probability
S1 touch: Only 15.0% probability
Bias: Bullish continuation
Trade plan:
Favor long setups
Target R1 first (65.9% chance), then R2 (42.1%)
If R1 breaks, R2 becomes likely target
Shorting is low probability (only 15.0% reach S1)
Example 3: Opening in Golden Zone
Scenario: RTH opens at 20,393
PP: 20,400
GZ: 20,390-20,395
What the tables tell you:
Opening Zone: "IN_GZ" (rare, only 3.8% occurrence)
Bullish bias: 58.1%
GZ touch: 100% (guaranteed - already there)
PP touch: 75.3%
R1 touch: 41.9%
Trade plan:
Expect price to test PP (75.3% chance)
Slight bullish bias suggests long setups better than shorts
Watch how price reacts at PP - likely to continue to R1 (41.9%)
This is an uncommon opening, suggesting potential for larger moves
Best Practices
Match Your Instrument: Remember, statistics are NQ-specific. If trading other instruments, use the levels but disregard the statistical percentages.
Combine with Price Action: Use the statistics for probability context, not as standalone signals. Always confirm with price action, volume, and your trading methodology.
Adapt Table Display: Don't display all sections all the time. Toggle based on your trading phase:
Pre-market: Focus on "Gap Context" to understand the setup
Market open: Watch "Opening Zone Statistics" for directional bias
Intraday: Monitor "Current Session Info" for position tracking
Understand Context: A 60% touch rate doesn't mean guaranteed—it means 40% of days don't touch. Use these probabilities to size positions and manage expectations.
Inter-Pivot Golden Zones: These are most useful when price is already in motion toward a level. For example, if price breaks above PP heading to R1, the PP-R1 golden zone (60.8% touch rate) becomes a high-probability pullback area.
Time Awareness: The "Avg Time" statistics help you understand urgency. If it's 10:30 AM and S1 hasn't been touched (average is 55 minutes), the window for bearish moves is closing.
Technical Notes
Time Zone: All times referenced are NY/EST
Session Definition: RTH is 9:30 AM - 4:00 PM EST
Calculation Period: Pivots update daily based on previous 24-hour period (18:00 previous day to 17:00 current day)
Data Source: Statistics derived from 12 years of NQ 1-minute futures data (2013-2025)
Sample Size: 2,482 complete RTH trading sessions
Disclaimer
This indicator provides statistical probabilities based on historical NQ futures data. Past performance does not guarantee future results. The statistical tables are educational tools and should not be the sole basis for trading decisions. Always:
Use proper risk management
Combine with your own analysis
Understand that probabilities are not certainties
Remember that statistics are instrument-specific (NQ/MNQ only)
Credits
Statistical analysis performed using Python analysis of 12 years of historical NQ futures data. All pivot and golden zone calculations use standard mathematical formulas applicable to any instrument.
BUY Sell Signal (Kewme)//@version=6
indicator("EMA Cross RR Box (1:4 TP Green / SL Red)", overlay=true, max_lines_count=500, max_boxes_count=500)
// ===== INPUTS =====
emaFastLen = input.int(9, "Fast EMA")
emaSlowLen = input.int(15, "Slow EMA")
atrLen = input.int(14, "ATR Length")
slMult = input.float(1.0, "SL ATR Multiplier")
rr = input.float(4.0, "Risk Reward (1:4)") // 🔥 1:4 RR
// ===== EMA =====
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
plot(emaFast, color=color.green, title="EMA Fast")
plot(emaSlow, color=color.red, title="EMA Slow")
// ===== ATR =====
atr = ta.atr(atrLen)
// ===== EMA CROSS =====
buySignal = ta.crossover(emaFast, emaSlow)
sellSignal = ta.crossunder(emaFast, emaSlow)
// ===== VARIABLES =====
var box tpBox = na
var box slBox = na
var line tpLine = na
var line slLine = na
// ===== BUY =====
if buySignal
if not na(tpBox)
box.delete(tpBox)
if not na(slBox)
box.delete(slBox)
if not na(tpLine)
line.delete(tpLine)
if not na(slLine)
line.delete(slLine)
entry = close
sl = entry - atr * slMult
tp = entry + atr * slMult * rr // ✅ 1:4 TP
// TP ZONE (GREEN)
tpBox := box.new(
left=bar_index,
top=tp,
right=bar_index + 20,
bottom=entry,
bgcolor=color.new(color.green, 80),
border_color=color.green
)
// SL ZONE (RED)
slBox := box.new(
left=bar_index,
top=entry,
right=bar_index + 20,
bottom=sl,
bgcolor=color.new(color.red, 80),
border_color=color.red
)
tpLine := line.new(bar_index, tp, bar_index + 20, tp, color=color.green, width=2)
slLine := line.new(bar_index, sl, bar_index + 20, sl, color=color.red, width=2)
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white)
// ===== SELL =====
if sellSignal
if not na(tpBox)
box.delete(tpBox)
if not na(slBox)
box.delete(slBox)
if not na(tpLine)
line.delete(tpLine)
if not na(slLine)
line.delete(slLine)
entry = close
sl = entry + atr * slMult
tp = entry - atr * slMult * rr // ✅ 1:4 TP
// TP ZONE (GREEN)
tpBox := box.new(
left=bar_index,
top=entry,
right=bar_index + 20,
bottom=tp,
bgcolor=color.new(color.green, 80),
border_color=color.green
)
// SL ZONE (RED)
slBox := box.new(
left=bar_index,
top=sl,
right=bar_index + 20,
bottom=entry,
bgcolor=color.new(color.red, 80),
border_color=color.red
)
tpLine := line.new(bar_index, tp, bar_index + 20, tp, color=color.green, width=2)
slLine := line.new(bar_index, sl, bar_index + 20, sl, color=color.red, width=2)
label.new(bar_index, high, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white)
FxInside// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © yyy_trade
//@version=6
indicator("FxInside", overlay = true, max_lines_count = 500)
lineColor = input.color(color.new(color.blue, 12), "FxLineColor")
type vaild_struct
float high
float low
int time
type fx
string dir
chart.point point
var array valid_arr = array.new()
var fx lastFx = na
var float motherHigh = na
var float motherLow = na
isInsideBar = high <= high and low >= low
if isInsideBar and na(motherHigh)
motherHigh := high
motherLow := low
isExtendedInsideBar = not na(motherHigh) and high <= motherHigh and low >= motherLow
body_color = input.color(color.new(color.orange, 0), "实体颜色")
wick_color = input.color(color.new(color.orange, 0), "影线颜色")
border_color = input.color(color.new(color.orange, 0), "边框颜色")
plotcandle(open, high, low, close, color=isExtendedInsideBar ? body_color : na, wickcolor=isExtendedInsideBar ? wick_color : na, bordercolor =isExtendedInsideBar ? border_color : na ,editable=false)
if not na(motherHigh) and (high > motherHigh or low < motherLow)
motherHigh := na
motherLow := na
// 以下为分型折线逻辑,如不需要可删除
process_fx(last_fx, now_fx) =>
if not na(last_fx)
line.new(last_fx.point, now_fx.point, color=lineColor, xloc=xloc.bar_time)
now_fx
if not isExtendedInsideBar
array.push(valid_arr, vaild_struct.new(high, low, time))
if array.size(valid_arr) > 17
array.shift(valid_arr)
len = array.size(valid_arr)
if len > 3
k_ago = array.get(valid_arr, len - 2)
k_now = array.get(valid_arr, len - 1)
if k_ago.high > k_now.high
for i = 3 to len
last_k = array.get(valid_arr, len - i)
if last_k.high < k_ago.high
if last_k.low < k_ago.low
lastFx := process_fx(lastFx, fx.new("TOP", chart.point.from_time(k_ago.time, k_ago.high)))
break
else
if not na(lastFx)
if lastFx.dir == "TOP"
lastFx := process_fx(lastFx, fx.new("BOT", chart.point.from_time(last_k.time, last_k.low)))
lastFx := process_fx(lastFx, fx.new("TOP", chart.point.from_time(k_ago.time, k_ago.high)))
break
else if last_k.high > k_ago.high
break
// 底分型判定
if k_ago.low < k_now.low
for i = 3 to len
last_k = array.get(valid_arr, len - i)
if last_k.low > k_ago.low
if last_k.high > k_ago.high
lastFx := process_fx(lastFx, fx.new("BOT", chart.point.from_time(k_ago.time, k_ago.low)))
break
else
if not na(lastFx)
if lastFx.dir == "BOT"
lastFx := process_fx(lastFx, fx.new("TOP", chart.point.from_time(last_k.time, last_k.high)))
lastFx := process_fx(lastFx, fx.new("BOT", chart.point.from_time(k_ago.time, k_ago.low)))
break
else if last_k.low < k_ago.low
break
len = input.int(20, minval=1, title="Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500, display = display.data_window)
out = ta.ema(src, len)
plot(out, title="EMA", color=color.blue, offset=offset)
// Smoothing MA inputs
GRP = "Smoothing"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected. Determines the distance between the SMA and the bands."
maTypeInput = input.string("None", "Type", options = , group = GRP, display = display.data_window)
maLengthInput = input.int(14, "Length", group = GRP, display = display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval = 0.001, maxval = 50, step = 0.5, tooltip = TT_BB, group = GRP, display = display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"
// Smoothing MA Calculation
ma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// Smoothing MA plots
smoothingMA = enableMA ? ma(out, maLengthInput, maTypeInput) : na
smoothingStDev = isBB ? ta.stdev(out, maLengthInput) * bbMultInput : na
plot(smoothingMA, "EMA-based MA", color=color.yellow, display = enableMA ? display.all : display.none, editable = enableMA)
bbUpperBand = plot(smoothingMA + smoothingStDev, title = "Upper Bollinger Band", color=color.green, display = isBB ? display.all : display.none, editable = isBB)
bbLowerBand = plot(smoothingMA - smoothingStDev, title = "Lower Bollinger Band", color=color.green, display = isBB ? display.all : display.none, editable = isBB)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill", display = isBB ? display.all : display.none, editable = isBB)
VMDivergencesTH Volume Momentum Divergences - How It Works
🎯 Overview
This indicator detects divergences between price action and a custom momentum oscillator. Divergences occur when price moves one direction while momentum moves the opposite direction — often signaling potential reversals or trend continuations.
⚙️ The Hidden Oscillator Engine
The oscillator runs in the background (not plotted on chart) and combines two components:
Component 1: Momentum (MACD-style)
Momentum = Fast EMA(12) - Slow EMA(26)
Measures the difference between a fast and slow exponential moving average. Positive = bullish momentum, Negative = bearish momentum.
Component 2: Bollinger Band Distance
Distance = (Price - BB Middle) / Standard Deviation
Measures how far price has strayed from its "normal" range. Values > 2 = overbought territory, Values < -2 = oversold territory.
Hybrid Blend
Final Oscillator = (Normalized Momentum × Blend) + (Band Distance × (1 - Blend))
The Momentum Blend setting (default 1.0) controls the mix:
1.0 = Pure momentum (like MACD)
0.0 = Pure band distance (like Bollinger %B)
0.5 = Equal blend of both
🔍 Pivot Detection
The indicator identifies swing highs and swing lows on both:
Price (using high and low)
Oscillator (using the hybrid oscillator value)
How Pivots Are Found
text
Swing High = A bar where the high is higher than X bars on BOTH sides
Swing Low = A bar where the low is lower than X bars on BOTH sides
The Swing Strength setting (default 5) controls how many bars on each side are required:
Lower values (2-3) = More pivots, more signals, more noise
Higher values (7-10) = Fewer pivots, fewer signals, higher quality
🔀 Divergence Types Explained
1. 🟢 Regular Bullish Divergence (Reversal Signal)
Price: Lower Low ↘ (making new lows)
Oscillator: Higher Low ↗ (momentum improving)
Meaning: Price is falling but momentum is building. The selling pressure is weakening — potential bottom forming.
Visual: Green triangle below bar + solid line connecting lows
2. 🔴 Regular Bearish Divergence (Reversal Signal)
text
Price: Higher High ↗ (making new highs)
Oscillator: Lower High ↘ (momentum fading)
Meaning: Price is rising but momentum is declining. The buying pressure is weakening — potential top forming.
Visual: Red triangle above bar + solid line connecting highs
3. 🟡 Hidden Bullish Divergence (Continuation Signal)
text
Price: Higher Low ↗ (holding above previous low)
Oscillator: Lower Low ↘ (momentum dipped)
Meaning: In an uptrend, price made a higher low but oscillator made a lower low. The oscillator "reset" while price held strong — trend likely to continue UP.
Visual: Green diamond below bar + dashed line
4. 🟠 Hidden Bearish Divergence (Continuation Signal)
text
Price: Lower High ↘ (staying below previous high)
Oscillator: Higher High ↗ (momentum bounced)
Meaning: In a downtrend, price made a lower high but oscillator made a higher high. The oscillator bounced but price couldn't — trend likely to continue DOWN.
Visual: Red diamond above bar + dashed line
5. 🔵 Double Bottom with Divergence (Strong Support)
text
Price: Two lows at SIMILAR levels (within ATR tolerance)
Oscillator: Second low HIGHER than first
Meaning: Price tested the same support twice, but momentum was stronger on the second test — buyers defending that level aggressively.
Visual: Cyan circle below bar + dotted line
6. 🟣 Double Top with Divergence (Strong Resistance)
text
Price: Two highs at SIMILAR levels (within ATR tolerance)
Oscillator: Second high LOWER than first
Meaning: Price tested the same resistance twice, but momentum was weaker on the second test — sellers defending that level.
Visual: Purple circle above bar + dotted line
✅ Validation Filters
Not every pivot pair creates a signal. The indicator applies filters:
Filter Purpose
Min Pivot Distance (default 5) Pivots must be at least 5 bars apart — prevents micro-divergences
Max Pivot Distance (default 50) Pivots must be within 50 bars — prevents stale/irrelevant divergences
DTB Tolerance (default 0.3 × ATR) For double top/bottom, price levels must be within 30% of ATR
📊 Visual Elements
Element Description
Markers Shapes above/below candles when divergence triggers
Lines Connect the two pivot points involved in the divergence
Labels Text tags showing divergence type (REG, HID, DBL)
Glow Effect Thicker semi-transparent line behind main line
Background Flash Brief color flash on signal bar
Status Panel Real-time table showing oscillator value and active signals
🧠 Trading Logic Summary
┌──────────────────────────────────────────────────────────┐
│ DIVERGENCE CHEAT SHEET │
├──────────────────────────────────────────────────────────┤
│ REGULAR BULLISH │ Price ↘ Osc ↗ │ Look for LONGS │
│ REGULAR BEARISH │ Price ↗ Osc ↘ │ Look for SHORTS │
│ HIDDEN BULLISH │ Price ↗ Osc ↘ │ Add to LONGS │
│ HIDDEN BEARISH │ Price ↘ Osc ↗ │ Add to SHORTS │
│ DOUBLE BOTTOM │ Same low, Osc ↗ │ Strong SUPPORT │
│ DOUBLE TOP │ Same high, Osc ↘ │ Strong RESISTANCE │
└──────────────────────────────────────────────────────────┘
BTC - Cycle Integrity Index (CII) BTC - Cycle Integrity Index (CII) | RM
Are we following a calendar or a capital flow? Is the Halving still the heartbeat of Bitcoin, or has the institutional "Engine" taken over?
The most polarized debate in the digital asset space today centers on a single question: Is the 4-year Halving Cycle dead? While some market participants wait for a pre-ordained calendar countdown, the reality of 2026 suggests that visual guesswork is no longer sufficient. As institutional gravity takes hold, we cannot rely on the simple "Clock" of the past. Instead, we must audit the Integrity of the present.
The Cycle Integrity Index (CII) was engineered to move beyond simple price action and provide a clinical answer to the market's biggest mystery: "Is this trend supported by structural substance, or is it merely speculative foam?" By aggregating eight diverse Pillars into a single 0-100% score, this model uses Gaussian Distributions and Sigmoid Normalization to distinguish between professional accumulation and retail-driven chaos. We aren't guessing where we are in a cycle; we are measuring the internal health of the asset's engine in real-time.
Why these 8 Pillars?
The CII does not rely on a single indicator because the "New Era" of Bitcoin is multi-dimensional. To capture the full picture, I selected eight specific pillars that cover the three layers of market truth:
• The Capital Layer: Global Liquidity (M2) and ETF Flows (Wall Street Absorption).
• The Network Layer: Mining Difficulty and Security Backbone expansion.
• The Sentiment Layer: Long-Term Holder conviction, Valuation Heat (MVRV), and Corporate Adoption (MSTR). While alternatives like the Pi Cycle or RSI exist, they are often "one-dimensional." The CII is a synthesis—a modular engine where every part validates the others.
How the Calculation Works
The CII is a sophisticated model for Bitcoin. It aggregates 8 diverse pillars into a single 0-100% score in the following way:
• Mathematical Normalization: We don't just use raw prices. We use Gaussian Distributions to find "Institutional DNA" in drawdowns and Sigmoid (S-Curve) functions to score volatility and valuation.
• Dynamic Weighting: The index is modular. If a data source (like a specific on-chain metric) is toggled off, the engine automatically redistributes the weight among the active sensors so the final integrity score is always balanced to 100%.
• Multi-Source Integration: The script pulls from Global Liquidity (M2), ETF flows, Corporate Treasury premiums (MSTR), and Network Difficulty to create a truly "Full-Stack" view of the asset.
The 8 Pillars of Integrity
Pillar 1: Drawdown DNA The "Identity Crisis" Filter
• Concept: Audits the depth of corrections to distinguish between "Institutional Floors" and "Retail Panics."
• Logic: Historically, retail crashes reached -80%, while institutions view -20% to -25% as primary value entries.
• Implementation: Uses a Gaussian (Normal) Distribution centered at -25%. Scores of 10/10 are awarded for holding institutional targets; scores decay as drawdowns accelerate toward legacy "crash" levels.
Basis: DNA Drawdown
Pillar 2: Volatility Regime The "Smoothness" Audit
• Concept: Measures the "vibration" of the trend. High-integrity moves are characterized by "smooth" price action.
• Logic: Erratic volatility signals speculative bubbles; consistent "volatility clusters" indicate professional trend-following.
• Implementation: Calculates a Z-Score of the 14-day ATR against a 100-day benchmark. This is passed through a Sigmoid function to penalize "chaotic" price shocks while rewarding stability.
Basis: RVPM
Pillar 3: Liquidity Sync (Global M2) The Macro Heartbeat
• Concept: Audits whether price growth is fueled by monetary expansion or internal speculative leverage.
• Logic: True cycle integrity requires a positive correlation between Central Bank balance sheets and price action.
• Implementation: Aggregates a custom Global Liquidity Proxy (Fed, RRP, TGA, PBoC, ECB, BoJ). It measures the Pearson Correlation between BTC and M2 with a standardized 80-day transmission lag.
Basis: Liquisync
Pillar 4: ETF Absorption (Wall Street Entry) The "Cost Basis" Defense
• Concept: Tracks the aggregate institutional cost-basis since the January 2024 Spot ETF launch.
• Logic: Integrity is high when the "Wall Street Floor" is defended; it fails when the aggregate position is underwater.
• Implementation: A Cumulative VWAP engine tracking the "Big 3" (IBIT, FBTC, BITB). Scoring decays based on the percentage distance the price drifts below this institutional average entry.
Basis: Institutional Cost Corridor
Note: Turning this to OFF will significantly expand the timeframe of the indicator on the chart (otherwise it will just start in 2024)
Pillar 5: LTH Dormancy (Conviction) The HODL Floor Audit
• Concept: Monitors the conviction of Long-Term Holders (LTH) to identify supply-side constraints.
• Logic: Sustainable cycles require stable or increasing 1Y+ dormant supply; rapid "thawing" signals distribution.
• Implementation: Uses Min-Max Normalization on the Active 1Y Supply over a 252-day window. A score of 10/10 indicates peak annual holding conviction.
Basis: RHODL Proxy & VDD Multiple
Pillar 6: Valuation Intensity The MVRV Heat Map
• Concept: Measures market "overheat" by comparing Market Value to Realized Value.
• Logic: High integrity trends rise steadily; vertical spikes in MVRV indicate "speculative foam" and bubble risk.
• Implementation: Performs a Relative Rank Analysis of the MVRV Ratio over a 730-day window, passed through a high-steepness Sigmoid curve to identify extreme valuation anomalies.
Pillar 7: Miner Stress The Security Backbone
• Concept: Tracks Mining Difficulty to ensure network infrastructure is expanding alongside price.
• Logic: Difficulty expansion signals health; drops in difficulty (Miner Stress) signal capitulation and sell-side pressure.
• Implementation: Monitors the 30-day Rate of Change (ROC) of Global Mining Difficulty. Maintains a 10/10 score during expansion; decays rapidly during network contraction.
Pillar 8: Corporate Adoption The MSTR NAV Proxy
• Concept: Audits the MicroStrategy (MSTR) premium as a barometer for institutional demand.
• Logic: A high premium indicates a willingness to pay a "convenience fee" for BTC exposure; a collapsing premium signals waning appetite.
• Implementation: Calculates the Adjusted Enterprise Value (Market Cap + Debt - Cash) relative to the Net Asset Value (NAV) of its BTC holdings.
Note1: Debt and share parameters are user-adjustable to maintain accuracy as corporate balance sheets evolve.
Note2: I just included this because I was curious about the mNAV calculation I saw in other scripts, where the printed value often does not match exactly the propagated value from the MSTR page itself. Hence, for my live calculation, we calculate the Adjusted Enterprise Value to find the "Market NAV" (mNAV). Unlike simpler scripts that only look at Market Cap vs. Bitcoin holdings, our engine accounts for the Capital Structure . We explicitly factor in the corporate debt (approx. $8.24B long-term + $7.95B convertible notes) and subtract the cash reserves (approx. $2.18B) to find the true cost Wall Street is paying for the underlying Bitcoin. Since this will ran "old" very quickly, I recommend to update in the code by yourself from time to time, or just de-select this parameter.
Interpretation Guide
• Score 100% (The Perfect Storm): This represents a state of "Maximum Integrity." All 8 pillars are in perfect institutional alignment—liquidity is surging, conviction is at yearly highs, and price action is perfectly smooth. This is the hallmark of a healthy, structural parabolic run.
• 75% - 100% (High Integrity): Robust trend. Price is supported by structural demand and macro tailwinds.
• 35% - 75% (Equilibrium): Transition zone. The market is digesting gains or waiting for a new liquidity pulse.
• 0% - 35% (Fragile): Speculative foam. Structural support has failed.
• Score 0% (The Ghost Trend): Absolute structural failure. All pillars (liquidity, miners, LTH, ETFs) have broken down. Note: Due to the robust nature of the Bitcoin network, the index naturally floors around 20-30% during deep bear markets, as specific pillars (like Miner Security) rarely drop to zero.
To provide a complete experience, I have included the Cycle Triad —a visualization layer consisting of the Halving, Ideal Peak, and Ideal Low. It is important to understand the role of this feature:
• Benchmark Only (Not Calculated): The Triad is based purely on historical evidence from previous Bitcoin epochs. While the Halving is fixed anyway, the "Ideal Peak" or "Ideal Low" are not calculated or computed by the 8 pillars. These are user-adjustable temporal anchors drawn on the chart to provide a static map of the "Legacy 4-Year Cycle."
• The Temporal Audit: The power of the CII lies in comparing the Engine (the 8 Pillars) against the Clock (the Triad) . By overlaying historical time-windows on top of our integrity math, we can see if the "New Era" is currently ahead of, behind, or perfectly in sync with the past.
• The "Peak Divergence" Logic: Based on the specific models selected for this ECU—specifically Volatility Decay and Valuation Heat —traders will notice that a cycle peak often coincides with a low integrity score (Red Zone) . While the index measures structural health, a low score is a byproduct of a market that has become "too hot to handle."
• Regime Detection: Although the primary goal is to audit the "New Era," the CII is highly effective at detecting overheated regimes. When the score drops toward the 25–35% range, the structural floor is giving way to speculative foam—making it a dual-purpose tool for both cycle analysis and risk management.
Dashboard Calibration & Settings
Cycle Triad Calibration
• Ideal Peak/Trough Window: Defines the historical "Average Days" from a Halving to the cycle top and bottom. This sets the vertical anchors for the Halving, Peak, and Low labels.
• Show Cycle Triad: A master toggle to enable or disable the temporal lines and labels on your dashboard.
The CII Master ECU is fully modular. You can toggle individual pillars ON/OFF to focus on specific market dimensions, and calibrate the sensitivity of each sensor to match your strategic bias.
• P1: Drawdown DNA Lookback (Weeks): Defines the window for the "Rolling High." Inst. Target (%): The specific percentage drawdown you define as "Institutional Support" (e.g., -25%).
• P2: Volatility Regime Benchmark (Days): The historical window used to define "Normal" vs. "Abnormal" volatility.
• P3: Liquidity Sync Corr. Window (Bars): The lookback for the Pearson Correlation calculation. Transmission Lag (Bars): The delay (standard 80 days) for Central Bank M2 to hit price.
• P4: ETF Absorption FBTC Ticker: The data source for the ETF volume audit (Default: CBOE:FBTC).
• P5: LTH Dormancy LTH Source: The ticker for 1Y+ Active Supply (Default: GLASSNODE:BTC_ACTIVE1Y). Norm. Window: The lookback (252 days) used to rank current conviction.
• P6: Valuation Intensity MVRV Source: The ticker for the MVRV Ratio (Default: INTOTHEBLOCK:BTC_MVRV). Relative Window: The lookback (730 days) to calculate the valuation rank.
• P7: Miner Stress Mining Diff: The data source for Global Mining Difficulty (Default: QUANDL:BCHAIN/DIFF).
• P8: Corporate Adoption Shares (M) & BTC (K): The balance sheet parameters for MicroStrategy (MSTR). Update these as the company executes new purchases to maintain mNAV accuracy.
Operational Usage This index is best used on the Daily (D) (recommended - description for inputs optimized for this time-window) or Weekly (W) timeframes. While the code is optimized to fetch daily data regardless of your chart setting, the structural "Integrity" of a cycle is a macro phenomenon and should be viewed with a medium-to-long-term lens.
The Verdict: Is the 4-Year Cycle Still Alive?
Based on the data provided by the CII Master ECU, the answer remains a nuanced "Work in Progress." The evidence presents a fascinating conflict between legacy patterns and the new institutional regime:
• The Case for the Cycle: Historically, a local "Peak" in price corresponds with a "Local Low" in our integrity indicator (Red Zone). We observed this exact phenomenon in October 2025. When viewed through the lens of the "Ideal Peak" anchor, this alignment suggests that the 4-year temporal rhythm is still exerts a massive influence on market behavior.
• The Case for the New Era: While the timing of the October 2025 peak followed the legacy script, the intensity did not. Previous cycle tops produced far more aggressive and persistent "Red Zone" clusters. The relative brevity of the integrity breakdown suggests that the "Institutional Era" provides a much higher floor than the retail-driven bubbles of 2017 and 2021.
• The Institutional Floor: Our data shows that while "Tops" still resemble the 4-year cycle, the "Lows" now reflect a regime of constant institutional absorption. This suggests that the brutal 80% drawdowns of the past may be replaced by the "Institutional DNA" of Pillar 1.
Final Outlook: As we move through 2026, the ultimate test lies in the Q3/Q4 window. While classical theory demands a "Cycle Low" during this period, the CII will be our primary auditor. We cannot definitively say the cycle is dead, but we can say it has evolved. We will not know if the 4-year low will manifest until the model either flags a total structural breakdown or confirms that the institutional "Floor" has permanently shifted the rhythm of the asset.
Tags: Bitcoin, Institutional, Macro, On-chain, Liquidity, MSTR, ETF, Cycle
Note to Moderators: This script is a "Master Index" that aggregates several quantitative models I have previously published on this platform (including DNA Drawdown, RVPM, and Liquisync). I am the original author of the logic and source code referenced in the "Basis" sections of the description.
4H Previous Candle + FibonacciIndicator Description: 4H Previous Candle + Fibonacci
This Pine Script (v5) indicator is a technical analysis tool designed for traders using the
TradingView platform. It allows for the visualization of key levels from the previous 4-
hour candle directly on any lower time frame.
1. Primary Objective
The indicator aims to provide a Higher Time Frame (HTF) perspective automatically.
By plotting the high, low, and Fibonacci retracement levels of the last closed 4H
candle, it helps identify institutional support and resistance zones without the need to
constantly switch time frames.
2. Key Features
Feature Description
Automatic 4H Levels
Automatically plots horizontal lines for the High and Low of the
previous 4H candle.
Dynamic Adaptation
Line colors and styles adapt based on whether the candle was
bullish (green) or bearish (red).
Fibonacci
Retracements
Calculates and displays customizable Fibonacci levels (e.g., 23.6%,
38.2%, 50%, 61.8%, 78.6%).
Dashboard (HUD)
A summary table in the top-right corner displays exact values and
the candle type.
3. Technical Functionality
Data Retrieval (Multi-Timeframe)
The script uses the request.security function to extract data from the 4-hour time
frame (“240”). Using the index ensures the indicator is based on a closed candle,
eliminating any risk of “repainting” (levels changing during formation).
Fibonacci Calculation Logic
The calculation of Fibonacci levels is intelligent and directional:
Bullish Candle: The retracement is calculated from bottom to top (0% is at the
bottom).
Bearish Candle: The retracement is calculated from top to bottom (0% is at the
top).
4. Configuration Parameters
Users can customize the indicator via the settings menu:
Visual Settings: Toggle lines, adjust thickness, price labels, and decimal
precision.
Fibonacci Settings: Enable levels, choose colors, line thickness, and enter
custom retracement percentages.
5. Trading Use Cases
Bounce Zones: The 50% and 61.8% levels of the previous 4H candle are often
considered “Premium” or “Discount” zones where price tends to react.
Confluence: Use these levels alongside other indicators (RSI, moving averages)
to confirm entry points.
Risk Management: Place Stop Losses just beyond the previous 4H High or Low.
Document generated for the analysis of the “4H Previous Candle + Fibonacci” Pine
Script.
Candle 2 Closure [LuxAlgo]The Candle 2 Closure tool detects a specific reversal pattern on the chart spanning four bars. The first bar trades into a key price level. The second bar trades outside the first bar's range, but closes inside, indicating a reversal. The third bar closes outside the second bar's range, in the direction of the reversal, creating a price expansion. The fourth bar is a continuation of prices in that same direction.
This tool features key levels, equilibrium zones, and real-time alarms upon confirmation of the second and third candles of the pattern.
This specific part of the more complete Fractal model by TTrades was requested by a lot of you. We are happy to bring it to you and wish you a merry Christmas!
🔶 USAGE
This pattern is a TTrades concept: a reversal setup that is very easy to understand. It occurs when the current bar trades outside of the previous bar's range, but closes inside it. In other words, traders try to push prices outside of the previous bar's range, but fail. This is considered a reversal, meaning that traders encountered opposing forces that overwhelmed them. Thus, the expectation is that prices will trade in the new direction, changing the market bias from bullish to bearish, or vice versa.
Let's look at the example in the chart, where the four candles of this setup are marked. Note that we have selected a perfect setup, where all conditions are met.
Candle 1: This bar traded into a key price area at the top of the range, spanning several months.
Candle 2: This bar traded outside the range of Candle 1, but failed to close outside. This is the reversal.
Candle 3: The wick of this bar formed at or below the equilibrium zone of Candle 2, and it closed outside the range of Candle 2. This is the expansion.
Candle 4: At this point, the setup is complete, and the expectation for this candle is that it will trade in the same direction. The top of the candle is at or below the equilibrium zone of Candle 3. This is the continuation.
In a strong setup, the top or bottom of the next bar will form inside the equilibrium zone defined by the highlighted areas on candles 2 and 3.
This is a perfect bearish setup, featuring all elements. Not all setups will be like this, but when this setup occurs, it is important for traders to be aware of it.
The tool is highly customizable from the settings panel and features real-time alerts at candle 2 and 3 confirmations.
Now, let's take a broader view of the same chart. We have disabled the display of candle 2 and filtered the setups with a length of 50.
As we can see, most of the last 17 setups found on the EUR/USD daily chart lead to multi-day or multi-month price movements.
🔹 Filtering Reversals
The tool features a reversals filter that is disabled by default. This filter allows us to filter out minor reversals and display only those that are important.
Traders can adjust the length parameter to display reversals only at the top or bottom of the last N specified bars. We can see some examples in the chart.
🔹 Wick Threshold
From the settings panel, traders can fine-tune the equilibrium zone for candle 2.
If the wick exceeds the threshold expressed as a percentage of the total bar range, the equilibrium zone will be calculated based only on the wick. In all other cases, the full bar range will be used.
🔶 SETTINGS
Candle 2 (Reversal): Enable or disable Candle 2 reversals.
Candle 3 (Expansion): Enable or disable Candle 3 expansions.
Reversals Filter: Filter reversals as the highest or lowest of the last N bars.
Wick Threshold %: Filter wicks as percentage of total bar range.
🔹 Style
Bullish Color: Select bullish color.
Bearish Color: Select bearish color.
Transparency: Select the transparency level. 0 is solid and 100 is fully transparent.
Levels: Enable or disable the horizontal levels.
Candle 2 Zone: Enable or disable the Candle 2 equilibrium zones.
Candle 3 Zone: Enable or disable the Candle 3 equilibrium zones.
🔹 Alerts
Candle 2 Alerts: Enable or disable Candle 2 alerts.
Candle 3 Alerts: Enable or disable Candle 3 alerts.
BulletProof Long Wick Reversal Markers with LinesThis custom Pine Script indicator for TradingView identifies and marks potential reversal points on your chart based on long wick candles at swing highs (tops) and lows (bottoms). It focuses on candles where the wick is significantly longer than the body (e.g., shooting stars or hammers) and where the subsequent price reversal exceeds a minimum percentage move. Markers appear as colored circles (green for tops, red for bottoms), with horizontal lines extending from each marker to the current bar for easy reference as support/resistance levels.Key Features and InterpretationMarkers (Dots): Green circles at tops: Indicate a potential bearish reversal where price was pushed down after a long upper wick candle.
Red circles at bottoms: Indicate a potential bullish reversal where price was pushed up after a long lower wick candle.
These only appear if the wick-to-body ratio meets the threshold (default 2.0) and the reversal move is at least the minimum percentage (default 1%).
Lines: Horizontal lines extend from each marker to the current bar (updating in real-time). Use these as dynamic levels—e.g., a green top line might act as resistance, while a red bottom line could be support. Lines do not extend into the future blank space on the chart.
Time Filtering: By default, only markers from the last 7 days are shown to reduce clutter. Set to 0 to display all historical ones.
Best Used On: 1-hour charts as per your request, but it works on any timeframe. It's ideal for spotting reversals in trending markets or confirming entries/exits with other indicators.
Amihud Illiquidity Ratio [MarkitTick]💡This indicator implements the Amihud Illiquidity Ratio, a financial metric designed to measure the price impact of trading volume. It assesses the relationship between absolute price returns and the volume required to generate that return, providing traders with insight into the "stress" levels of the market liquidity.
Concept and Originality
Standard volume indicators often look at volume in isolation. This script differentiates itself by contextualizing volume against price movement. It answers the question: "How much did the price move per unit of volume?" Furthermore, unlike static indicators, this implementation utilizes dynamic percentile zones (Linear Interpolation) to adapt to the changing volatility profile of the specific asset you are viewing.
Methodology
The calculation proceeds in three distinct steps:
1. Daily Return: The script calculates the absolute percentage change of the closing price relative to the previous close.
2. Raw Ratio: The absolute return is divided by the volume. I have introduced a standard scaling factor (1,000,000) to the calculation. This resolves the issue of the values being astronomically small (displayed as roughly 0) without altering the fundamental logic of the Amihud ratio (Absolute Return / Volume).
- High Ratio: Indicates that price is moving significantly on low volume (Illiquid/Thin Order Book).
- Low Ratio: Indicates that price requires massive volume to move (Liquid/Deep Order Book).
3. Dynamic Regimes: The script calculates the 75th and 25th percentiles of the ratio over a lookback period. This creates adaptive bands that define "High Stress" and "Liquid" zones relative to recent history.
How to Use
Traders can use this tool to identify market fragility:
- High Stress Zone (Red Background): When the indicator crosses above the 75th percentile, the market is in a High Illiquidity Regime. Price is slipping easily. This is often observed during panic selling or volatile tops where the order book is thin.
- Liquid Zone (Green Background): When the indicator drops below the 25th percentile, the market is in a Liquid Regime. The market is absorbing volume well, which is often characteristic of stable trends or accumulation phases.
- Dashboard: A visual table on the chart displays the current Amihud Ratio and the active Market Regime (High Stress, Normal, or Liquid).
Inputs
- Calculation Period: The lookback length for the average illiquidity (Default: 20).
- Smoothing Period: The length of the additional moving average to smooth out noise (Default: 5).
- Show Quant Dashboard: Toggles the visibility of the on-screen information table.
● How to read this chart
• Spike in Illiquidity (Red Zones)
Price is moving on "thin air." Expect high volatility or potential reversals.
• Low Illiquidity (Green/Stable Zones)
The market is deep and liquid. Trends here are more sustainable and reliable.
• Divergence
Watch for price making new highs while liquidity is drying up—a classic sign of an exhausted trend.
Example:
● Chart Overview
The chart displays the Amihud Illiquidity indicator applied to a Gold (XAUUSD) 4-hour timeframe.
Top Pane: Price action with manual text annotations highlighting market reversals relative to liquidity zones.
Bottom Pane: The specific technical indicator defined in the logic. It features a Blue Line (Raw Illiquidity), a Red Line (Signal/Smoothed), and dynamic background coloring (Red and Green vertical strips).
● Deep Visual Analysis
• High Stress Regime (Red Zones)
Visual Event: In the bottom pane, the background periodically shifts to a translucent red.
Technical Logic: This event is triggered when the amihudAvg (the smoothed illiquidity ratio) exceeds the 75th percentile ( hZone ) of the lookback period.
Forensic Interpretation: The logic calculates the absolute price change relative to volume. A spike into the red zone indicates that price is moving significantly on relatively lower volume (high price impact). Visually, the chart shows these red zones aligning with local price peaks (volatility expansion), leading to the bearish reversal marked by the red box in the top pane.
• Liquid Regime (Green Zones)
Visual Event: The background shifts to a translucent green in the bottom pane.
Technical Logic: This triggers when the amihudAvg falls below the 25th percentile ( lZone ).
Forensic Interpretation: This state represents a period where large volumes are absorbed with minimal price impact (efficiency). On the chart, this green zone corresponds to the consolidation trough (green box, top pane), validating the annotated accumulation phase before the bullish breakout.
• Indicator Lines
Blue Line: This is the illiquidityRaw value. It represents the raw daily return divided by volume.
Red Line: This is the smoothedVal , a Simple Moving Average (SMA) of the raw data, used to filter out noise and define the trend of liquidity stress.
● Anomalies & Critical Data
• The Reversal Pivot
The transition from the "High Stress" (Red) background to the "Liquid" (Green) background serves as a visual proxy for market regime change. The chart shows that as the Red zones dissipate (volatility contraction), the market enters a Green zone (efficient liquidity), which acted as the precursor to the sustained upward trend on the right side of the chart.
● About Yakov Amihud
Yakov Amihud is a leading researcher in market liquidity and asset pricing.
• Brief Background
Professor of Finance, affiliated with New York University (NYU).
Specializes in market microstructure, liquidity, and quantitative finance.
His work has had a major impact on both academic research and practical investment models.
● The Amihud (2002) Paper
In 2002, he published his influential paper: “Illiquidity and Stock Returns: Cross-Section and Time-Series Effects” .
• Key Contributions
Introduced the Amihud Illiquidity Measure, a simple yet powerful proxy for market liquidity.
Demonstrated that less liquid stocks tend to earn higher expected returns as compensation for liquidity risk.
The measure became one of the most widely used liquidity metrics in finance research.
● Why It Matters in Practice
Used in quantitative trading models.
Applied in portfolio construction and risk management.
Helpful as a liquidity filter to avoid assets with excessive price impact.
In short: Yakov Amihud established a practical and robust link between liquidity and returns, making his 2002 work a cornerstone in modern financial economics.
Disclaimer: All provided scripts and indicators are strictly for educational exploration and must not be interpreted as financial advice or a recommendation to execute trades. I expressly disclaim all liability for any financial losses or damages that may result, directly or indirectly, from the reliance on or application of these tools. Market participation carries inherent risk where past performance never guarantees future returns, leaving all investment decisions and due diligence solely at your own discretion.
AI-based Price action confluence dashboard# **AI-Based Price Action Confluence Dashboard - Publication Guide**
Here's a comprehensive introduction guide for your TradingView indicator publication:
***
## **📊 TITLE**
**AI-Based Price Action Confluence Dashboard**
***
## **🎯 SHORT DESCRIPTION** (For the summary field)
A sophisticated real-time confluence scoring system that analyzes multiple price action signals across 15-minute timeframes, providing traders with an AI-weighted scoring mechanism (0-6 scale) to identify high-probability trade setups through visual signal panels and intelligent path detection.
***
## **📝 FULL DESCRIPTION**
### **Overview**
The AI-Based Price Action Confluence Dashboard is an advanced technical indicator designed to eliminate guesswork in intraday trading by systematically scoring and displaying multiple price action signals in real-time. Unlike traditional single-indicator approaches, this dashboard employs a confluence methodology that combines multiple independent signals to provide stronger trade confirmations and reduce false signals.
This indicator is specifically optimized for **1-minute chart analysis** while monitoring **15-minute price structure**, making it ideal for day traders and scalpers who need precise entry timing with larger timeframe context.
***
### **🔑 Key Features**
**✅ Real-Time AI Confluence Scoring**
- Dynamic scoring system (0-6 points) for both bullish and bearish setups
- Visual meter display shows signal strength at a glance
- Color-coded backgrounds indicate confluence levels (strong, moderate, mixed)
**✅ Multi-Signal Analysis**
The dashboard tracks 6 distinct signal types:
1. **FTFC (First to Finish Close)** - Base & Bonus signals
2. **Long/Short Grab** - Liquidity sweep patterns (Path A)
3. **High/Low Hold** - Extended momentum confirmation (+2 bonus)
4. **2-Up/2-Down** - Clean breakout patterns (Path B)
5. **Breakaway** - First candle gap strategies
**✅ Intelligent Path Detection**
- Mutually exclusive path logic prevents signal conflicts
- Automatically identifies whether price is following a "sweep path" or "clean path"
- Unavailable paths are clearly marked with gray indicators
**✅ Visual Signal Panels**
- 🟢 Green Light = Bullish signal ACTIVE
- 🔴 Red Light = Bearish signal ACTIVE
- 🟡 Yellow Light = Signal BUILDING (conditions partially met)
- ⚪ White Light = Signal OFF
- ▪️ Gray Square = Path UNAVAILABLE (mutually exclusive)
**✅ Comprehensive Alert System**
- 10 different alert conditions covering all major signals
- Strong confluence alerts (5+ points)
- Individual signal completion alerts
- Customizable alert messages
***
### **📐 How It Works**
#### **The Confluence Methodology**
This indicator implements a sophisticated confluence trading approach where multiple independent price action signals are combined to identify high-probability setups. Each signal type contributes points to either the bullish or bearish score, with a maximum of 6 points per direction.
**Scoring Breakdown:**
**BULLISH SIGNALS:**
- FTFC Base (15m close > previous 15m close) = +1
- FTFC Bonus (price clears 15th candle high) = +1
- **PATH A (Sweep):** Long Grab = +1, High Hold Bonus = +2
- **PATH B (Clean):** 2-Up = +1, 2-Up Bonus = +1
- Breakaway (gap above first candle) = +1
**BEARISH SIGNALS:**
- FTFC Base (15m close < previous 15m close) = +1
- FTFC Bonus (price clears 15th candle low) = +1
- **PATH A (Sweep):** Short Grab = +1, Low Hold Bonus = +2
- **PATH B (Clean):** 2-Down = +1, 2-Down Bonus = +1
- Breakaway (gap below first candle) = +1
#### **Path Detection Logic**
The indicator automatically determines which path the market is following:
**PATH A: SWEEP PATH**
- Activated when previous 15m low (bull) or high (bear) is breached
- Indicates liquidity grab before reversal
- Includes powerful +2 bonus for "Hold" confirmations
- Mutually exclusive with Path B
**PATH B: CLEAN PATH**
- Activated when previous 15m low (bull) or high (bear) holds
- Indicates strong directional momentum without sweep
- Cleaner price action but smaller point potential
- Mutually exclusive with Path A
This mutual exclusivity prevents double-counting and ensures signal accuracy.
***
### **🎨 How to Use**
#### **Installation**
1. Add indicator to your 1-minute chart
2. The dashboard appears as a table overlay (default: top right)
3. No additional indicators required - this is a complete system
#### **Reading the Dashboard**
**Top Section - Confluence Meter:**
- Shows current bull/bear scores with visual dot meters
- Background color changes based on confluence strength:
- **Bright Green/Red** = 5+ points (strong directional bias)
- **Medium Green/Red** = 3+ points (moderate bias)
- **Orange** = 3+ points both sides (conflicting signals)
- **Gray** = Low confluence (choppy conditions)
**Signal Panels Section:**
- Each row shows a signal type with bull/bear lights side-by-side
- Active signals (🟢🔴) contribute to the total score
- Building signals (🟡) indicate potential setups forming
- Unavailable paths (▪️) show which exclusive path is blocked
#### **Trading Strategy**
**High-Probability Long Entries:**
- Bull score ≥ 5 AND bear score ≤ 1
- Multiple green lights active in signal panels
- PATH A or PATH B showing full completion
- Consider entry on pullback to key 15m level
**High-Probability Short Entries:**
- Bear score ≥ 5 AND bull score ≤ 1
- Multiple red lights active in signal panels
- PATH A or PATH B showing full completion
- Consider entry on rally to key 15m level
**Avoid Trading When:**
- Both scores are 3+ (conflicting signals)
- No path is showing active/building status
- Score is below 3 on both sides (low confluence)
#### **Risk Management**
- Use 15m swing high/low for stop placement
- Target opposing 15m level or previous session extremes
- Scale out at partial targets when confluence decreases
- Best results when combined with proper position sizing
***
### **⚙️ Customization**
**Dashboard Settings:**
- **Table Location:** Top Left, Top Right, Bottom Left, Bottom Right
- **Text Size:** Tiny, Small, Normal, Large
**Color Scheme:**
- **Bullish Color:** Customize green for bull signals (default: #00cc66)
- **Bearish Color:** Customize red for bear signals (default: #ff4444)
- **Building Color:** Customize yellow for forming signals (default: #ffaa00)
- **Inactive Color:** Customize gray for off signals (default: #555555)
- **Unavailable Color:** Customize dark gray for blocked paths (default: #333333)
All colors can be adjusted to match your chart theme or visual preferences.
***
### **🎯 Best Practices**
1. **Use on 1-minute charts only** - The indicator is calibrated for this timeframe
2. **Trade during liquid sessions** - Best results during NY/London overlap
3. **Wait for 3+ confluence** - Minimum threshold for trade consideration
4. **Watch path transitions** - Signal strength changes when paths flip
5. **Use alerts strategically** - Set alerts for 5+ confluence to catch strong setups
6. **Combine with volume** - High volume confirms signal validity
7. **Respect 15m structure** - Don't fight the larger timeframe bias
***
### **⚠️ Important Notes**
- This indicator is designed for **intraday trading only**
- Requires active monitoring during trading sessions
- Works best on liquid instruments (major forex pairs, indices, large-cap stocks)
- Not suitable for swing trading or position trading
- Past performance does not guarantee future results
- Always use proper risk management and position sizing
***
### **🏷️ Category**
**Oscillators** or **Volatility** (choose based on TradingView categories)
***
### **🏷️ Suggested Tags**
- confluence
- price action
- day trading
- scalping
- intraday
- signals
- dashboard
- multi-timeframe
- 1-minute
- 15-minute
***
### **📜 Disclaimer**
This indicator is a tool for technical analysis and should not be used as the sole basis for trading decisions. All trading involves risk, and you should never risk more than you can afford to lose. The developer assumes no responsibility for trading losses incurred through the use of this indicator. Always practice proper risk management and consider your own risk tolerance before trading.
2 Dip/Tepe + Destek/Direnç + Tek Sinyal Stratejisi⭐ A Brief Summary of What the Strategy Does
🎯 1) Market analysis is being released (bottom-top analysis)
It automatically finds pivot bottoms and pivot tops on the strategic chart. Then:
If the bottoms are rising (HL – High Low): the trend is upward
If the tops are falling (LH – Lower High): the trend is downward
it interprets this.
🎯 2) Support and resistance lines are formed
Last pivot top = resistance line
Last pivot bottom = support line
These lines are automatically drawn on the chart.
🎯 3) Breakout is expected according to the trend structure
For LONG:
The last two bottoms will be rising bottoms
The price will rise above the last resistance line
This gives a single LONG signal.
For SHORT:
The last two peaks will be falling peaks
The price will fall below the support line
This gives a single SHORT signal.
Kinetic EMA & Volume with State EngineKinetic EMA & Volume with State Engine (EMVOL)
1. Introduction & Concept
The EMVOL indicator converts a dense family of EMA signals and volume flows into a compact “state engine”. Instead of looking at individual EMA lines or simple crossovers, the script treats each EMA as part of a kinetic vector field and classifies the market into interpretable states:
- Trend direction and strength (from a grid of prime‑period EMAs).
- Volume regime (expansion, contraction, climax, dry‑up).
- Order‑flow bias via delta (buy versus sell volume).
- A combined scenario label that summarises how these three layers interact.
The goal is educational: to help traders see that moving averages and volume become more meaningful when observed as a structure, not as isolated lines. EMVOL is therefore designed as a real‑time teaching tool, not as an automatic signal generator.
2. Volume Settings
Group: “Volume Settings”
A. Calculation Method
- Geometry (Source File) – Default mode.
Buy and sell volume are estimated from each candle’s geometry: the close is compared to the high/low range and the bar’s total volume is split proportionally between buyers and sellers. This approximation works on any TradingView plan and does not require lower‑timeframe data.
- Intrabar (Precise) – Reconstructs buy/sell volume using a lower timeframe via requestUpAndDownVolume(). The script asks TradingView for historical intrabar data (e.g., 15‑second bars) and builds buy/sell volume and delta from that stream. This mode can produce a more accurate view of order flow, but coverage is limited by your account’s history limits and the symbol’s available lower‑timeframe data.
B. Intrabar Resolution (If Precise)
- Intrabar Resolution (If Precise) – Selected only when the calculation method is “Intrabar (Precise)”. It defines which lower timeframe (for example 15S, 30S, 1m) is used to compute up/down volume. Smaller intrabar timeframes may give smoother and more granular deltas, but require more historical depth from the platform.
When “Intrabar (Precise)” is active, the dashboard’s extended section shows the resolution and the number of bars for which precise volume has been successfully retrieved, in the format:
- Mode: Intrabar (15S) – where N is the count of bars with valid high‑resolution volume data.
In Geometry mode this counter simply reflects the processed bars in the current session.
3. Kinetic Vector Settings
Group: “Kinetic Vector”
A. Vector Window
- Vector Window – Controls the temporal smoothing applied to the aggregated vectors (trend, volume, delta, etc.). Internally, each bar’s vector value is averaged with a simple moving window of this length.
- Shorter windows make the state engine more reactive and sensitive to local swings.
- Longer windows make the states more stable and better suited to higher‑timeframe structure.
B. Max Prime Period
- Max Prime Period – Sets the largest prime number used in the EMA grid. The engine builds a family of EMAs on prime lengths (2, 3, 5, 7, …) up to this limit and converts their slopes into angles.
- A higher limit increases the number of long‑horizon EMAs in the grid and makes the vectors sensitive to broader structure.
- A lower limit focuses the analysis on short- and medium‑term behaviour.
C. Price Source
- Price Source – The price series from which the kinetic EMA grid is built (e.g., Close, HLC3, OHLC4). Changing the source modifies the context that the state engine is reading but does not change the core logic.
4. State Engine Settings
Group: “State Engine Settings”
These inputs define how the continuous vectors are translated into discrete states.
A. Trend Thresholds
- Strong Trend Threshold – Value above which the trend vector is treated as “extreme bullish” and below which it is “extreme bearish”.
- Weak Trend Threshold – Inner boundary between neutral and directional conditions.
Roughly:
- |trend| < weak → Neutral trend state.
- weak < |trend| ≤ strong → Bullish/Bearish.
- |trend| > strong → Extreme Bullish/Extreme Bearish.
B. Volume Thresholds
- Volume Climax Threshold – Upper bound at which volume is considered “climax” (unusually expanded participation).
- Volume Expansion Threshold – Boundary for normal expansion versus contraction.
Conceptually:
- Volume above “expansion” indicates increasing activity.
- Volume near or above “climax” marks extreme participation.
- Negative values below the symmetric thresholds map to contraction and extreme dry‑up (liquidity vacuum) states.
C. Delta Thresholds
- Strong Delta Threshold – Cut‑off for extreme buying or selling dominance in delta.
- Weak Delta Threshold – Threshold for mild buy/sell bias versus neutral order flow.
Combined with the sign of the delta vector, these thresholds classify order flow as:
- Extreme Buy, Buy‑Dominant, Neutral, Sell‑Dominant, Extreme Sell.
D. State Hysteresis Bars
- State Hysteresis Bars – Minimum number of bars for which a new state must persist before the engine commits to the change. This prevents the dashboard from flickering during fast spikes and emphasises persistent market behaviour.
- Smaller values switch states quickly; larger values demand more confirmation.
5. Visual Interface
Group: “Visual Interface”
A. Ribbon Base Color
- Ribbon Base Color – Base hue for the multi‑layer EMA ribbon drawn around price. The script plots a dense grid of hidden EMAs and fills the gaps between them to form a semi‑transparent band. Narrow, overlapping bands hint at compression; wider separation hints at dispersion across EMA horizons.
B. Show Dashboard
- Show Dashboard – Toggles the on‑chart table which summarises the current state engine output. Disable this if you only want to keep the EMA ribbon and volume‑based structure on the price chart.
C. Color Theme
- Color Theme – Switch between a dark and light style for the dashboard background and text colours so that the table matches your chart theme.
D. Table Position
- Table Position – Places the dashboard at any corner or edge of the chart (Top / Middle / Bottom × Left / Centre / Right).
E. Table Size
- Table Size – Changes the dashboard’s text size (Tiny, Small, Normal, Large). Use a larger size on high‑resolution screens or when streaming.
F. Show Extended Info
- Show Extended Info – Adds diagnostic rows under the main state summary:
- Mode / Primes / Vector – Shows the current calculation mode (Geometry / Intrabar), the selected intrabar resolution and coverage in bars ( ), how many prime periods are active, and the vector window.
- Values – Displays the current aggregated vectors:
- P: price vector
- V: volume vector
- B: buy‑volume vector
- S: sell‑volume vector
- D: delta vector
Values are bounded between ‑1 and +1.
- Volume Stats – Prints the last bar’s raw buy volume, sell volume and delta as formatted numbers.
- Footer – A final row with the symbol and current time: #SYMBOL | HH:MM.
These extended rows are meant for inspecting how the engine is behaving under the hood while you scroll the chart and compare different assets or timeframes.
6. Language Settings
Group: “Language Settings”
- Select Language – Switches the entire dashboard between English and Turkish.
The underlying calculations and scenario logic are identical; only the labels, titles and comments in the table are translated.
7. Dashboard Structure & Reading Guide
The table summarises the current situation in a few rows:
1. System Header – Shows the script name and the active calculation method (“Geometry” or “Intrabar”).
2. Scenario Title – High‑level description of the current combined scenario (e.g., “Trending Buy Confirmed”, “Sideways Balanced”, “Bull Trap”, “Blow‑Off Top”). The background colour is derived from the scenario family (trending, compression, exhaustion, anomaly, etc.).
3. Bias / Trend Line – States the dominant trend bias derived from the trend vector (Extreme Bullish, Bullish, Neutral, Bearish, Extreme Bearish).
4. Signal / Consideration Line – A short sentence giving qualitative guidance about the current state (for example: continuation risk, exhaustion risk, trap‑like behaviour, or compression). This is deliberately phrased as a consideration, not as a direct trading signal.
5. Trend / Volume / Delta Rows – Three separate rows explain, in plain language, how the trend, volume regime and delta are classified at this bar.
6. Extended Info (optional) – Mode / primes / vector settings, current vector values, and last‑bar volume statistics, as described above.
Together, these rows are meant to be read as a narrative of what price, volume and order‑flow are doing, not as mechanical instructions.
8. State Taxonomy
The state engine organizes market behaviour in three stages.
8.1 Trend States (from the Price Vector)
- Extreme Bullish Trend – The prime‑grid price vector is strongly upward; most EMAs are aligned to the upside.
- Bullish Trend – Upward bias is present, but less extreme.
- Neutral Trend – EMAs are mixed or flat; price is effectively sideways relative to the grid.
- Bearish Trend – Downward bias, with the EMA grid sloping down.
- Extreme Bearish Trend – Strong downside alignment across the grid.
8.2 Volume Regime States (from the Volume Vector)
- Volume Climax (Buy‑Side) – Strong positive volume vector; participation is unusually high in the current direction.
- Volume Expansion – Activity above normal but below the climax threshold.
- Neutral Volume – No major expansion or contraction versus recent history.
- Volume Contraction – Activity is drying up compared with the past.
- Extreme Dry‑Up / Liquidity Vacuum – Very low participation; the market is thin and prone to slippage.
8.3 Delta Behaviour States (from the Delta Vector)
- Extreme Buy Delta – Buying pressure dominates strongly.
- Buy‑Dominant Delta – Buy volume exceeds sell volume, but not at an extreme.
- Neutral Delta – Buy and sell flows are roughly balanced.
- Sell‑Dominant Delta – Selling pressure dominates.
- Extreme Sell Delta – Aggressive, one‑sided selling.
8.4 Combined Scenario State s
EMVOL uses the three base states above to generate a single scenario label. These scenarios are designed to be read as context, not as entry or exit signals.
Trending Scenarios
1. Trending Buy Confirmed
- Bullish or extreme bullish trend, supported by expanding or climax volume and buy‑side delta.
- Educational idea: a healthy uptrend where both participation and order flow agree with the direction.
2. Trending Buy – Weak Volume
- Bullish trend, but volume is neutral, contracting or in dry‑up while delta is still buy‑side.
- Educational idea: price is advancing, yet participation is thinning; trend continuation becomes more fragile.
3. Trending Sell Confirmed
- Bearish or extreme bearish trend, with expanding or climax volume and sell‑side delta.
- Educational idea: strong downtrend with both volume and order‑flow confirmation.
4. Trending Sell – Weak Volume
- Bearish trend, but volume is neutral, contracting or very low while delta remains sell‑side.
- Educational idea: downside continues but with limited participation; vulnerable to short‑covering.
Sideways / Range Scenarios
5. Sideways Balanced
- Neutral trend, neutral delta, neutral volume.
- Classic range environment; low directional edge, suitable for observation and context rather than trend trading.
6. Sideways with Buy Pressure
- Neutral trend, but buy‑side delta is dominant or extreme.
- Range with latent accumulation: price may still appear sideways, but buyers are quietly more active.
7. Sideways with Sell Pressure
- Neutral trend with dominant or extreme sell‑side delta.
- Distribution‑like environment where price chops while sellers are gradually more aggressive.
Exhaustion & Volume Extremes
8. Exhaustion – Buy Risk
- Extreme bullish trend, volume climax and strong buy‑side delta.
- Educational idea: very strong up‑move where both participation and delta are already stretched; risk of exhaustion or blow‑off.
9. Exhaustion – Sell Risk
- Extreme bearish trend, volume dry‑up and strong sell‑side delta.
- Suggests one‑sided selling into increasingly thin liquidity.
10. Volume Climax (Buy)
- Neutral trend, neutral delta, but volume at climax levels.
- Often associated with a “big event” bar where participation spikes without a clear directional commitment.
11. Volume Climax (Sell / Dry‑Up)
- Neutral trend and neutral delta, while the volume vector indicates an extreme dry‑up.
- Highlights a stand‑still episode: very limited interest from both sides, increasing the sensitivity to future impulses.
Divergences
12. Divergence – Bullish Context
- Bullish or extreme bullish trend, but delta has faded back to neutral.
- Price trend continues while order‑flow conviction softens; can precede pauses or complex corrections.
13. Divergence – Bearish Context
- Bearish or extreme bearish trend with a neutral delta.
- Downtrend persists, but selling pressure no longer dominates as clearly.
Consolidation & Compression
14. Consolidation
- Default state when no specific pattern dominates and the market is broadly balanced.
- Educational use: treat this as a “no strong edge” label; focus on structure rather than direction.
15. Breakout Imminent
- Neutral trend with contracting volume.
- Compression phase where energy is building up; often precedes transitions into trending or shock scenarios.
Traps & Hidden Divergences
16. Bull Trap
- Bullish trend, with neutral or contracting volume and sell‑side delta.
- Price appears strong, but order‑flow shifts against it; often seen near fake breakouts or failing rallies.
17. Bear Trap
- Bearish trend, neutral or contracting volume, but buy‑side delta.
- Downtrend “looks” intact, while buyers become more aggressive underneath the surface.
18. Hidden Bullish Divergence
- Bullish trend, contracting volume, but strong buy‑side delta.
- Educational idea: price dips or slows while aggressive buyers step in, often inside an ongoing uptrend.
19. Hidden Bearish Divergence
- Bearish trend, volume expansion and strong sell‑side delta.
- Reinforced downside pressure even if price is temporarily retracing.
Reversal & Transition Patterns
20. Reversal to Bearish
- Neutral trend, volume climax and strong sell‑side delta.
- Suggests that heavy selling appears at the top of a move, turning a previously neutral or rising context into potential downside.
21. Reversal to Bullish
- Neutral trend, extreme volume dry‑up and strong buy‑side delta.
- Often associated with selling exhaustion where buyers start to take control.
22. Indecision Spike
- Neutral trend with extreme volume (climax or dry‑up) but neutral delta.
- Crowd participation changes sharply while order‑flow remains undecided; treat as an informational spike rather than a direction.
Extended Compression & Acceleration
23. Coiling Phase
- Neutral trend, contracting volume, and delta that is neutral or only mildly one‑sided.
- Extended compression where price, volume and delta all contract into a tightly coiled range, often preceding a strong move.
24. Bullish Acceleration
- Bullish trend with volume expansion and strong buy‑side delta.
- Uptrend not only continues but gains kinetic strength; educationally, this illustrates how trend, volume and delta align in the strongest phases of a move.
25. Bearish Acceleration
- Bearish trend with volume expansion and strong sell‑side delta.
- Mirror image of Bullish Acceleration on the downside.
Trend Exhaustion & Climax Reversal
26. Bull Exhaustion
- Bullish or extreme bullish trend, with contraction or dry‑up in volume and buy‑side or neutral delta.
- The move has already travelled far; participation fades while price is still elevated.
27. Bear Exhaustion
- Bearish or extreme bearish trend, with volume climax or contraction and sell‑side or neutral delta.
- Down‑move may be approaching a point where additional selling pressure has diminishing impact.
28. Blow‑Off Top
- Extreme bullish trend, volume climax and extreme buy delta all at once.
- Classic blow‑off behaviour: price, volume and order‑flow are simultaneously stretched in the same direction.
29. Selling Climax Reversal
- Extreme bearish trend with extreme volume dry‑up and extreme sell‑side delta.
- Marks a very aggressive capitulation phase that can precede major rebounds.
Advanced VSA / Anomaly Scenarios
30. Absorption
- Typically neutral trend with expanding or climax volume and extreme delta (either buy or sell).
- Educational focus: large participants are aggressively absorbing liquidity from the opposite side, while price remains relatively contained.
31. Distribution
- Scenario where volume remains elevated while directional conviction weakens and the trend slows.
- Represents potential “selling into strength” or “buying into weakness”, depending on the active side.
32. Liquidity Vacuum
- Combination of thin liquidity (extreme dry‑up) with a directional trend or strong delta.
- Highlights environments where even small orders can move price disproportionately.
33. Anomaly / Shock Event
- Triggered when the vector z‑scores detect rare combinations of price, volume and delta behaviour that deviate from their own historical distribution.
- Intended as a warning label for unusual events rather than a specific tradeable pattern.
9. Educational Usage Notes
- EMVOL does not produce mechanical “buy” or “sell” commands. Instead, it classes each bar into an interpretable state so that traders can study how trends, volume and order‑flow interact over time.
- A common exercise is to overlay your usual EMA crossovers, support/resistance or price patterns and observe which EMVOL scenarios appear around entries, exits, traps and climaxes.
- Because the vectors are normalized (bounded between ‑1 and +1) and then discretized, the same conceptual states can be compared across different symbols and timeframes.
10. Disclaimer & Educational Purpose
This indicator is provided strictly as an educational and analytical tool. Its purpose is to help visualise how price, volume and order‑flow interact; it is not designed to function as a stand‑alone trading system.
Please note:
1. No Automated Strategy – The script does not implement a complete trading strategy. Scenario labels and dashboard messages are descriptive and should not be followed as unconditional entry or exit signals.
2. No Financial Advice – All information produced by this indicator is general market analysis. It must not be interpreted as investment, financial or trading advice, or as a recommendation to buy or sell any instrument.
3. Risk Warning – Trading and investing involve substantial risk, including the risk of loss. Always perform your own analysis, use appropriate position sizing and risk management, and consult a qualified professional if needed. You are solely responsible for any decisions made using this tool.
4. Data Precision & Platform Limits – The “Intrabar (Precise)” mode depends on the availability of high‑resolution historical data at the chosen intrabar timeframe. If your TradingView plan or the symbol’s history does not provide sufficient depth, this mode may only partially cover the visible chart. In such cases, consider switching to “Geometry (Source File)” for a fully populated view.






















