FVG Breakaway/3rd Candle (Arjo) [MK]Simple script to identify FVGs (Fair Value Gaps) on the current chart timeframe. The script differs from other FVG indicators on the Tradingview platform by using Arjos 3rd candle rule to identify which gaps are 'Breakway Gaps' and which Gaps are likely to be returned to.
NOTE: As with all 'trading rules' this theory is not 100% accurate.
default settings:
Breakaway Gaps = YELLOW
Gaps that price may return to = GREEN
Mitigated Gaps = 100% TRANSPARENT
What is a FVG:
A FVG is a price area defined by a 3 candle pattern. For a bullish FVG, the low of the 3rd candle must be higher than the high of the 1st candle. This then leaves an area that is drawn as in the example below:
A bearish FVG is defined by the high of the 3rd candle being lower than the low of the 1st candle, as shown in the example below:
FVGs can act like magnets where price will either retrace to or reach for, therefore they can be used as entry points and also for take profit target levels.
If for example, a trader would like to use an FVG for an entry, it would be useful to know which FVGs are more likely for price to re-enter and which FVG will be left un-touched. FVGs that are likely to be left un-touched by price are called 'Breakaway Gaps'.
How do we define a 'Breakaway Gap':
First we identify FVGs using the rules stated above, then we look to see where the 3rd candle closed in relation to the 2nd candle. For a bullish 'Breakaway Gap' we want to see the 3rd candle close above the high of the 2nd candle. An example of a bullish Breakaway Gap is shown in the example below:
A bearish 'Breakaway Gap' is defined by the close of the 3rd candle being lower than the low of the 2nd candle. An example is shown below:
How do we define an FVG that price may return to:
Any gap that does not meet the above rules for a 'Breakway Gap' is therefore considered an FVG that price may return to. So for a bullish FVG that price may return to we would look to see if the close of the 3rd candle is above the high of the 2nd candle. If it is not above the high of the 2nd candle then it more likely that price will retrace into the FVG before continuing higher. An example is shown below:
A bearish gap that price may return to is defined by the close of the 3rd candle not being lower than the low of the 2nd candle. An example is shown below:
The indicator is based on the teachings of 'Arjo'. Note: breakaway gaps will only remain 'breakaway' until a liquidity level is reached. Breakaways therefore do not remain 'breakaway' forever. Users of the indicators must fully comprehend this theory before using the indicator with live markets.
Users of the script should be fully aware of this concept and also have conducted thorough backtesting using a large data set before using this indicator with live accounts.
在腳本中搜尋"fair value gap"
lib_fvgLibrary "lib_fvg"
further expansion of my object oriented library toolkit. This lib detects Fair Value Gaps and returns them as objects.
Drawing them is a separate step so the lib can be used with securities. It also allows for usage of current/close price to detect fill/invalidation of a gap and to adjust the fill level dynamically. FVGs can be detected while forming and extended indefinitely while they're unfilled.
method draw(this)
Namespace types: FVG
Parameters:
this (FVG)
method draw(fvgs)
Namespace types: FVG
Parameters:
fvgs (FVG )
is_fvg(mode, precondition, filter_insignificant, filter_insignificant_atr_factor, live)
Parameters:
mode (int) : switch for detection 1 for bullish FVGs, -1 for bearish FVGs
precondition (bool) : allows for other confluences to block/enable detection
filter_insignificant (bool) : allows to ignore small gaps
filter_insignificant_atr_factor (float) : allows to adjust how small (compared to a 50 period ATR)
live (bool) : allows to detect FVGs while the third bar is forming -> will cause repainting
Returns: a tuple of (bar_index of gap bar, gap top, gap bottom)
create_fvg(mode, idx, top, btm, filled_at_pc, config)
Parameters:
mode (int) : switch for detection 1 for bullish FVGs, -1 for bearish FVGs
idx (int) : the bar_index of the FVG gap bar
top (float) : the top level of the FVG
btm (float) : the bottom level of the FVG
filled_at_pc (float) : the ratio (0-1) that the fill source needs to retrace into the gap to consider it filled/invalidated/ready for removal
config (FVGConfig) : the plot configuration/styles for the FVG
Returns: a new FVG object if there was a new FVG, else na
detect_fvg(mode, filled_at_pc, precondition, filter_insignificant, filter_insignificant_atr_factor, live, config)
Parameters:
mode (int) : switch for detection 1 for bullish FVGs, -1 for bearish FVGs
filled_at_pc (float)
precondition (bool) : allows for other confluences to block/enable detection
filter_insignificant (bool) : allows to ignore small gaps
filter_insignificant_atr_factor (float) : allows to adjust how small (compared to a 50 period ATR)
live (bool) : allows to detect FVGs while the third bar is forming -> will cause repainting
config (FVGConfig)
Returns: a new FVG object if there was a new FVG, else na
method update(this, fill_src)
Namespace types: FVG
Parameters:
this (FVG)
fill_src (float) : allows for usage of different fill source series, e.g. high for bearish FVGs, low vor bullish FVGs or close for both
method update(all, fill_src)
Namespace types: FVG
Parameters:
all (FVG )
fill_src (float)
method remove_filled(unfilled_fvgs)
Namespace types: FVG
Parameters:
unfilled_fvgs (FVG )
method delete(this)
Namespace types: FVG
Parameters:
this (FVG)
method delete_filled_fvgs_buffered(filled_fvgs, max_keep)
Namespace types: FVG
Parameters:
filled_fvgs (FVG )
max_keep (int) : the number of filled, latest FVGs to retain on the chart.
FVGConfig
Fields:
box_args (|robbatt/lib_plot_objects/36;BoxArgs|#OBJ)
line_args (|robbatt/lib_plot_objects/36;LineArgs|#OBJ)
box_show (series__bool)
line_show (series__bool)
keep_filled (series__bool)
extend (series__bool)
FVG
Fields:
config (|FVGConfig|#OBJ)
startbar (series__integer)
mode (series__integer)
top (series__float)
btm (series__float)
center (series__float)
size (series__float)
fill_size (series__float)
fill_lvl_target (series__float)
fill_lvl_current (series__float)
fillbar (series__integer)
filled (series__bool)
_fvg_box (|robbatt/lib_plot_objects/36;Box|#OBJ)
_fill_line (|robbatt/lib_plot_objects/36;Line|#OBJ)
Gaps + Imbalances + Wicks (MTF) - By LeviathanThis script will identify and draw price gaps, wicks and imbalances with customizable fill conditions, multi-timeframe function, zone size filtering, volume comparison, lookback filtering, as well as highly customizable appearance and settings.
I’ve made this indicator to combine the three similar but different elements that occur in price movements and serve as significant zones of interest or way of PA interpretation in various different strategies.
Imbalances (or Fair Value Gap/FVG/Inefficiency/whatever)
- The Imbalance “pattern” consists of 3 candles (1- candle before the sharp move, 2 - sharp move candle and 3- candle after the sharp move). When price makes a move downwards, the imbalance zone is defined as the area between the low of 1 and the high of 3 When price makes a move upwards, the imbalance zone is defined as the area between the high of 1 and the low of 3.
Gaps
A price gap is an area on a chart where no trading activity has taken place. A gap up means that the low of the current candle is higher than the high of the previous candle and a gap down means that the high of the current candle is lower than the low of the previous candle.
Wicks (or shadows/tails/whatever)
Wicks are used to indicate where the price has fluctuated relative to the opening and closing price of the candle. An upper wick is the zone between candle high and candle close/open (whichever is higher) and a lower wick is the zone between candle’s low and candle’s close/open (whichever is lower).
Settings Overview
“Zone Type” - This input lets you decide which zones should the script plot and on which timeframe. You should always pick a timeframe higher than your chat’s.
“Middle Line, Top Line, Bottom Line” - Show or hide the Middle Line (horizontal level in the middle of each zone), Show or hide Top Line (horizontal level at the top of the zone), Show or hide Bottom Line (horizontal level at the bottom of the zone)
“UP/DOWN Zones" - This input lets you show/hide UP Zones or DOWN Zones an pick their color, border color and label color.
”Fill Condition” - If turned ON, the zones will end drawing when your prefered Fill Condition is met (Full Filll = price mitigates the whole zone, Half Fill = zone is at least halfway mitigated and Touch = zone is touched by price). If turned OFF, the zones will only be plotted for the amount of bars defined it “Zone Length”.
”Lookback (D)” - This input lets you limit the amount of zones plotted on the chart by choosing how many days back in time should the script go to find and plot zones. For example, input 1 will only show you the zones of the past day, input 7 will only show you the zones of the past week.
”Hide Filled Zones” - If turned ON, the zones that have been filled will be removed from the chart.
”Show Boxes” - Show or hide the boxes that represent the zones. This is useful for those who want the zones to be visualized by just lines.
“Filter Type” - this input lets you create a filter that will make the script only show zones that are larger than ATR or larger than a certain percentage. You can choose the ATR Length and the multiplier (higher multiplier → larger zone required), as well as the Percentage (%) and its multiplier (higher percentage → larger zone required). If you choose “None”, the zones of all sizes will be plotted.
”Zone Labels” - this part of the settings lets you: show/hide labels, decide on the size of the labels and their positions, choose a custom name for each zone, choose the data that the labels present (Type of the zone/Timeframe/ Volume ).
”Other settings” - ‘Stop/Delete zone after X number of candles’ will force stop/delete the zone if it’s plotted for more than prefered number of bars. ‘Line Style’ lets you choose the style and the color of the lines, ‘Zone Length’ defines the length of the zone if Fill Condition is “None”.
More settings, modifications and improvements coming in future updates. This script is a bit old so I will clean up and optimize the code once I have more time.
FVG Highlighter v5 – corps+mèchesndicator Description: “FVG15 – 2 Trades/Day (Asia + US)”
By Jack, optimized for Steven & Lauryne
📖 Overview
This strategy automates detection and execution of trades based on 15-minute Fair Value Gaps (FVG), only during two daily “kill-zones,” and limits you to two trades per day to control risk and preserve discipline.
🔍 Key Features
FVG Detection (15m)
Bullish and bearish gaps identified anywhere, any time.
Marked on the origin candle with ▲ (bullish) or ▼ (bearish).
Kill-Zones (UTC / Paris UTC+2)
Asia Session: 03:00–06:00 Paris (01:00–04:00 UTC)
US Session: 15:30–17:00 Paris (13:30–15:00 UTC)
Background shading highlights active session.
Automated Position Management
Max 2 trades/day: stops trading after one winner at RR 2 or two losers.
Limit entry at 50% of the gap, SL behind the “candle 1” extreme, TP at RR = 2.
Position size auto-calculated to risk a fixed dollar amount (riskDollars).
Daily Counters
tradesToday and lossesToday reset on a new day.
Signal lockout after two consecutive losses to prevent overtrading.
Customizable Inputs
Fixed Risk $: amount risked per trade.
Risk/Reward: TP/SL ratio (1.5–3).
FVG Look-back: number of candles used to define the gap (default 1).
📐 Input Parameters
Parameter Type Default Description
riskDollars Float 100 Fixed dollar amount risked per trade
RR Float 2.0 Reward/Risk ratio (min 1.5, max 3)
fvgLength Integer 1 Look-back candles for FVG calculation
default_qty_* Strategy 1% Position size as % of equity
calc_on_every_tick Bool true Recalculate strategy on every tick
🚀 Quick Start
Open a 15m chart (e.g., MGC1! for Micro-Gold).
Paste the Pine v6 script into TradingView’s Pine Editor.
Ensure the chart’s timezone is set to UTC.
Adjust riskDollars, RR, or fvgLength to suit your profile.
Add to chart and view backtest results in the Strategy Tester.
📝 Notes for Steven, Lauryne & Jack
Steven: Monitor gap sizes on thinly-traded markets; tweak fvgLength as needed.
Lauryne: Use alongside manual SMT/ICT confirmations for extra filter power.
Jack: Integrate into your pre-session routine and log each trade to sharpen discipline.
Changelog
v6: Full port to Pine v6; fixed session detection and daily counters.
v5→v6: Renamed to strategy.closed_trades, simplified inKill, updated to current Pine standards.
Enjoy trading—and please share your feedback with the community!
Immediate Rebalance ICT [TradingFinder] No Imbalances - MTF Gaps🔵 Introduction
The concept of "Immediate Rebalance" in technical analysis is a powerful and advanced strategy within the ICT (Inner Circle Trader) framework, widely used to identify key market levels.
Unlike the "Fair Value Gap," which leaves a price gap requiring a retracement for a fill, an Immediate Rebalance fills the gap immediately, representing an instant balance that strengthens the prevailing market trend. This structure allows traders to quickly spot critical price zones, capitalizing on strong trend continuations without the need for price retracement.
The "Immediate Rebalance ICT" indicator leverages this concept, providing traders with automated identification of critical supply and demand zones, order blocks, liquidity voids, and key buy-side and sell-side liquidity levels.
Through features like crucial liquidity points and immediate rebalancing areas, this tool enables traders to perform precise real-time market analysis and seize profitable opportunities.
🔵 How to Use
The Immediate Rebalance indicator assists traders in identifying reliable trading signals by detecting and analyzing Immediate Rebalance zones. By focusing on supply and demand areas, the indicator pinpoints optimal entry and exit positions.
Here’s how to use the indicator in both bearish (Supply Immediate Rebalance) and bullish (Demand Immediate Rebalance) structures :
🟣 Bullish Structure (Demand Immediate Rebalance)
In a bullish scenario, the indicator detects a Demand Immediate Rebalance formed by two consecutive bullish candles with overlapping wicks. This structure signifies an immediate demand zone, where price instantly balances within the zone, reducing the likelihood of a revisit and indicating potential upside momentum.
Zone Identification : Look for two consecutive bullish candles with overlapping wicks, forming a demand zone. This structure, due to its rapid balance, usually does not require a revisit and supports further upward movement.
Entry and Exit Levels : If price revisits this zone, percentage markers, particularly 50% and 75%, act as supportive levels, creating ideal entry points for long positions.
Example : In the second image, an example of a Demand Immediate Rebalance is shown, where overlapping bullish candle shadows indicate immediate balance, supporting the continuation of the bullish trend.
🟣 Bearish Structure (Supply Immediate Rebalance)
In a bearish setup, the indicator identifies a Supply Immediate Rebalance when two consecutive bearish candles with overlapping wicks appear. This formation signals an immediate supply zone, suggesting a high probability of trend continuation to the downside, with minimal expectation for price to retrace back to this area.
Zone Identificatio n: Look for two consecutive bearish candles with overlapping shadows. This structure forms a supply area where price is expected to continue its downtrend without revisiting the zone.
Entry and Exit Level s: Should price revisit this zone, percentage-based levels (e.g., 50% and 75%) serve as potential resistance points, optimizing entry for short positions, especially if the downtrend is expected to persist.
Example : The attached chart illustrates a Supply Immediate Rebalance, where overlapping candle shadows define this area, reassuring traders of a continued downward trend with a low likelihood of price returning to this zone.
🔵 Settings
ImmR Filter : This filter allows users to adjust the detection of Immediate Rebalance zones in four modes, from "Very Aggressive" to "Very Defensive," based on zone width. The chosen mode controls the sensitivity of Immediate Rebalance detection, allowing users to fine-tune the indicator to their trading style.
Multi Time Frame : Enabling this option allows users to set the indicator to a specific timeframe (1 minute, 5 minutes, 15 minutes, 30 minutes, 1 hour, 4 hours, daily, weekly, or monthly), broadening the perspective for identifying Immediate Rebalance zones across multiple timeframes.
🔵 Conclusion
The Immediate Rebalance indicator, based on rapid balancing zones within supply and demand areas, serves as a powerful tool for market analysis and improving trade decision-making.
By accurately identifying zones where price achieves instant balance without gaps, the indicator highlights areas likely to support strong trend continuations, exempt from common retracements.
The indicator’s use of percentage levels enables traders to pinpoint optimal entry and exit points more effectively, with levels like 50% and 75% acting as support within demand zones and resistance within supply zones. This empowers traders to ride strong trends without the worry of abrupt reversals.
Overall, the Immediate Rebalance is a reliable tool for both professional and beginner traders seeking precise methods to recognize supply and demand zones, capitalizing on consistent trends.
By choosing appropriate settings and focusing on the zones highlighted by this indicator, traders can enter trades with greater confidence and improve their risk management.
Three Bar Gap (Simple Price Action - with 1 line plot)This script is tailored towards experienced traders who prefer to view raw price charts during live execution. It searches for a three-bar pattern of what is colloquially called "fair value gap", or "imbalance" and uses a single line to plot the results. The goal is to display price in a way that is as simple as possible so that chart readers who don't prefer to add indicators on their screen will still find this indicator as an acceptable option to consider for.
From a code perspective, this script explores a new PineScript feature called UDT (user-defined types). This is an incredible update because it brings developers one step close to having the ability to create abstract data types.
█ What is price action?
Experienced traders will tell you that the chart that they use for live execution is raw, clean, and uses no indicators. They say they execute on price action, so what exactly is price action?
There is no formal definition to it, but one can agree that it implies the process of analyzing price without considering the fundamentals, without needing to know what the news was about, and without needing to know any of the Greeks (except for the desire to “seek alpha” Ha.haa...). This is not to say that price action traders are executing in their own vacuums without the need to know what is happening around the world. Surely fundamentals and financial models can be used beforehand for developing a bias for what is being traded, but it’s price-first at the moment of execution. That said, Factor (A) is Price.
Factor (B) is time-perception, it’s how the trader reads the tape. How the trader perceives price to change with respect to time is valuable information. Interpretation of "time" will be elaborated in the next section that talks about candlestick patterns detected by this script.
Putting this together, price action means the analysis of price movement by only considering (A) price, and (B) time, to predict which direction the market will move. A speculative trader is timing the market with the expectation to make a quick in-and-out profit; she/she is using price action. On the other hand, a long term investor holding a diversified portfolio with a strategy based on modern portfolio theory combined with fundamental analysis (at this point candlesticks are irrelevant) but has one additional criteria of, say, can only go Long on a stock when it has closed Green on Daily; he/she is also considered to be executing on price action.
█ Candlestick patterns
This script calculates the displacement of highs and lows over three consecutive bars.
A) Down move = When High of the recent confirmed bar is lower than the Low of the previous-previous candle
B) Up move = When Low of the recent confirmed bar is higher than the High of the previous-previous candle
(Note that its the confirmed bar that is being talked about, so it does not repaint)
An ATR filter will be applied to reduce the number of lines generated as many times they might just be associated with minor price changes.
Interpretations:
When price moves quickly across three bars, it can be thought that it has gapped. Although the candle in the middle appears to be solid, it’s not from a conceptual perspective. This is because time itself is arbitrary; timeframes don’t necessarily have to be fixed intervals. Take stocks with regular trading hours for example, if price makes a breakaway gap and you bundle the after-hours and pre-market sessions together as one candle, never minding that intervals should be fixed, then you will see the exact three-bar-gap patterns. Similar happens during intraday sessions on lower timeframes, if you zoom-in closer, you’ll see that ticks within the middle candle are sparsely dispersed. This is why it's called a gap.
█ Parameters with fixed inputs & assumptions used:
ATR is used for filtering out minor movements that will likely be deemed as irrelevant by trader for the purpose of live execution. The following inputs are required:
A) ATR lookback period
B) Multiplier
The product of ATR(len=A) and B produces a threshold for minimum distance that price must gap by. Initially, it was proposed to be only based on one ATR, but often an ATR is too wide and using it will filter out too many lines. Because of this observation, a multiplier (Parameter B) has been introduced to allow users to apply fractional ATR as a threshold.
█ Applications:
For trend followers: Follow the direction of the gap. Entering above recent high/low points above/below the first impulse with a stop-limit order is a viable tactic.
For contrarians fading a trend: The mid-point is a good point of reference for predicting potential areas of support/resistance.
Price SandwichFor the script in question
This script acts as an indicator that a potential short term or long term trend reversal is coming. Note that not every candle can be used as an indication and the smaller ones tend to have little to no effect, however they can be used alongside orderblocks or future support/resistance areas.
The best timeframes I've found these to be useable are on the 1m, 2m, or second charts.
You may use this as an added confluence that a trend is ending either short term or long term.
You may also decide to use this with other indicators to build further confluence.
Note that this is just something I've noticed personally most likely does not apply to all trend reversals.
Some ideas on how to use it:
If you extend a rectangle out from the block itself, you can often find the next high or low overlaps with said rectangle.
They may also overlap with a fair value gap that could make that gap have more potential.
Hope this is of use and can help with that added confluence or early warning signal of a potential reversal. This should not be used alone and it's recommended to not use this as a surefire indication of whether to take a trade.//Krindler
Script Breakdown
//@version=5 // this makes the script v5 friendly
indicator("Price Sandwich", overlay=true) //makes this script an indicator, overlay=true to make it a part of the main chart
// User input for the highlight color
userColor = input(color.green, title="Highlight Color") //This allows you to choose what color you want the candle to be in the settings
//Function to check the custom candle pattern based on whether the candle is being englulfed by both preceding and latter candle.
isCustomPattern() => //let's me look for a custom candle pattern
high > high and high < high and low < low and low > low
//this checks the candle before and the candle after to check that the candle in the middle doesn't escape the range of the candle before, or the candle afters highs and lows thus making it a sandwiched candle.
//high > high and high < high and low < low and low > low basically says: candle 1 high must be greater than candle 2 high and candle 2 high must be less than candle 3 high and candle 1 low must be less than candle 2 low and candle 2 low must be greater than candle 3 low. Thus making sure that candle 2 is within the range of candle's 1 and 3 and doesn't have a high or low that is either above or below candle 1 and 3. 'and' is the operator to make sure that all of these values must be true in order for that candle to meet the criteria of getting colored.
// Apply bar color to Sandwiched candle if candle is found.
barcolor(isCustomPattern() ? userColor : na, offset=-1) //this targets the findings from isCustomPattern() and uses the user color chosen in settings and colors the middle bar by using offset=-1, otherwise it would color candle 3, so offset goes back 1 candle to color the middle candle.
If this script is already in circulation, please let me know and i'll remove it immediately. I checked but couldn't find one that did it.
FVG w/ Fibs [QuantVue]The "FVG w/ Fibs" indicator is a trading tool designed to identify and visualize Fair Value Gaps (FVGs) while overlaying two Fibonacci retracement levels.
• Bullish FVG: Occurs when the low of the current bar is higher than the high of two bars ago, and the previous close is higher than the high of two bars ago.
• Bearish FVG: Occurs when the high of the current bar is lower than the low of two bars ago, and the previous close is lower than the low of two bars ago.
The indicator filters these gaps based on user-defined criteria such as the minimum percentage size of the gap.
Once identified, these FVGs are highlighted on the chart using customizable boxes and the 50% and 61.8% (default settings) Fibonacci retracement levels are calculated and drawn based on the size of the identified FVG.
• Dynamically updates and extends the boxes as the price evolves.
• Alerts / visual changes for FVGs that get filled.
• User option for fills by Wicks or Close
• User-customizable settings for box colors, styles, and Fibonacci level appearances
Give this indicator a BOOST and COMMENT your thoughts!
We hope you enjoy.
Cheers!
FvgPanel█ OVERVIEW
This library provides functionalities for creating and managing a display panel within a Pine Script™ indicator. Its primary purpose is to offer a structured way to present Fair Value Gap (FVG) information, specifically the nearest bullish and bearish FVG levels across different timeframes (Current, MTF, HTF), directly on the chart. The library handles the table's structure, header initialization, and dynamic cell content updates.
█ CONCEPTS
The core of this library revolves around presenting summarized FVG data in a clear, tabular format. Key concepts include:
FVG Data Aggregation and Display
The panel is designed to show at-a-glance information about the closest active FVG mitigation levels. It doesn't calculate these FVGs itself but relies on the main script to provide this data. The panel is structured with columns for timeframes (TF), Bullish FVGs, and Bearish FVGs, and rows for "Current" (LTF), "MTF" (Medium Timeframe), and "HTF" (High Timeframe).
The `panelData` User-Defined Type (UDT)
To facilitate the transfer of information to be displayed, the library defines a UDT named `panelData`. This structure is central to the library's operation and is designed to hold all necessary values for populating the panel's data cells for each relevant FVG. Its fields include:
Price levels for the nearest bullish and bearish FVGs for LTF, MTF, and HTF (e.g., `nearestBullMitLvl`, `nearestMtfBearMitLvl`).
Boolean flags to indicate if these FVGs are classified as "Large Volume" (LV) (e.g., `isNearestBullLV`, `isNearestMtfBearLV`).
Color information for the background and text of each data cell, allowing for conditional styling based on the FVG's status or proximity (e.g., `ltfBullBgColor`, `mtfBearTextColor`).
The design of `panelData` allows the main script to prepare all display-related data and styling cues in one object, which is then passed to the `updatePanel` function for rendering. This separation of data preparation and display logic keeps the library focused on its presentation task.
Visual Cues and Formatting
Price Formatting: Price levels are formatted to match the instrument's minimum tick size using an internal `formatPrice` helper function, ensuring consistent and accurate display.
Large FVG Icon: If an FVG is marked as a "Large Volume" FVG in the `panelData` object, a user-specified icon (e.g., an emoji) is prepended to its price level in the panel, providing an immediate visual distinction.
Conditional Styling: The background and text colors for each FVG level displayed in the panel can be individually controlled via the `panelData` object, enabling the main script to implement custom styling rules (e.g., highlighting the overall nearest FVG across all timeframes).
Handling Missing Data: If no FVG data is available for a particular cell (i.e., the corresponding level in `panelData` is `na`), the panel displays "---" and uses a specified background color for "Not Available" cells.
█ CALCULATIONS AND USE
Using the `FvgPanel` typically involves a two-stage process: initialization and dynamic updates.
Step 1: Panel Creation
First, an instance of the panel table is created once, usually during the script's initial setup. This is done using the `createPanel` function.
Call `createPanel()` with parameters defining its position on the chart, border color, border width, header background color, header text color, and header text size.
This function initializes the table with three columns ("TF", "Bull FVG", "Bear FVG") and three data rows labeled "Current", "MTF", and "HTF", plus a header row.
Store the returned `table` object in a `var` variable to persist it across bars.
// Example:
var table infoPanel = na
if barstate.isfirst
infoPanel := panel.createPanel(
position.top_right,
color.gray,
1,
color.new(color.gray, 50),
color.white,
size.small
)
Step 2: Panel Updates
On each bar, or whenever the FVG data changes (typically on `barstate.islast` or `barstate.isrealtime` for efficiency), the panel's content needs to be refreshed. This is done using the `updatePanel` function.
Populate an instance of the `panelData` UDT with the latest FVG information. This includes setting the nearest bullish/bearish mitigation levels for LTF, MTF, and HTF, their LV status, and their desired background and text colors.
Call `updatePanel()`, passing the persistent `table` object (from Step 1), the populated `panelData` object, the icon string for LV FVGs, the default text color for FVG levels, the background color for "N/A" cells, and the general text size for the data cells.
The `updatePanel` function will then clear previous data and fill the table cells with the new values and styles provided in the `panelData` object.
// Example (inside a conditional block like 'if barstate.islast'):
var panelData fvgDisplayData = panelData.new()
// ... (logic to populate fvgDisplayData fields) ...
// fvgDisplayData.nearestBullMitLvl = ...
// fvgDisplayData.ltfBullBgColor = ...
// ... etc.
if not na(infoPanel)
panel.updatePanel(
infoPanel,
fvgDisplayData,
"🔥", // LV FVG Icon
color.white,
color.new(color.gray, 70), // NA Cell Color
size.small
)
This workflow ensures that the panel is drawn only once and its cells are efficiently updated as new data becomes available.
█ NOTES
Data Source: This library is solely responsible for the visual presentation of FVG data in a table. It does not perform any FVG detection or calculation. The calling script must compute or retrieve the FVG levels, LV status, and desired styling to populate the `panelData` object.
Styling Responsibility: While `updatePanel` applies colors passed via the `panelData` object, the logic for *determining* those colors (e.g., highlighting the closest FVG to the current price) resides in the calling script.
Performance: The library uses `table.cell()` to update individual cells, which is generally more efficient than deleting and recreating the table on each update. However, the frequency of `updatePanel` calls should be managed by the main script (e.g., using `barstate.islast` or `barstate.isrealtime`) to avoid excessive processing on historical bars.
`series float` Handling: The price level fields within the `panelData` UDT (e.g., `nearestBullMitLvl`) can accept `series float` values, as these are typically derived from price data. The internal `formatPrice` function correctly handles `series float` for display.
Dependencies: The `FvgPanel` itself is self-contained and does not import other user libraries. It uses standard Pine Script™ table and string functionalities.
█ EXPORTED TYPES
panelData
Represents the data structure for populating the FVG information panel.
Fields:
nearestBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point (bottom for bull) on the LTF.
isNearestBullLV (series bool) : True if the nearest bullish FVG on the LTF is a Large Volume FVG.
ltfBullBgColor (series color) : Background color for the LTF bullish FVG cell in the panel.
ltfBullTextColor (series color) : Text color for the LTF bullish FVG cell in the panel.
nearestBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point (top for bear) on the LTF.
isNearestBearLV (series bool) : True if the nearest bearish FVG on the LTF is a Large Volume FVG.
ltfBearBgColor (series color) : Background color for the LTF bearish FVG cell in the panel.
ltfBearTextColor (series color) : Text color for the LTF bearish FVG cell in the panel.
nearestMtfBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point on the MTF.
isNearestMtfBullLV (series bool) : True if the nearest bullish FVG on the MTF is a Large Volume FVG.
mtfBullBgColor (series color) : Background color for the MTF bullish FVG cell.
mtfBullTextColor (series color) : Text color for the MTF bullish FVG cell.
nearestMtfBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point on the MTF.
isNearestMtfBearLV (series bool) : True if the nearest bearish FVG on the MTF is a Large Volume FVG.
mtfBearBgColor (series color) : Background color for the MTF bearish FVG cell.
mtfBearTextColor (series color) : Text color for the MTF bearish FVG cell.
nearestHtfBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point on the HTF.
isNearestHtfBullLV (series bool) : True if the nearest bullish FVG on the HTF is a Large Volume FVG.
htfBullBgColor (series color) : Background color for the HTF bullish FVG cell.
htfBullTextColor (series color) : Text color for the HTF bullish FVG cell.
nearestHtfBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point on the HTF.
isNearestHtfBearLV (series bool) : True if the nearest bearish FVG on the HTF is a Large Volume FVG.
htfBearBgColor (series color) : Background color for the HTF bearish FVG cell.
htfBearTextColor (series color) : Text color for the HTF bearish FVG cell.
█ EXPORTED FUNCTIONS
createPanel(position, borderColor, borderWidth, headerBgColor, headerTextColor, headerTextSize)
Creates and initializes the FVG information panel (table). Sets up the header rows and timeframe labels.
Parameters:
position (simple string) : The position of the panel on the chart (e.g., position.top_right). Uses position.* constants.
borderColor (simple color) : The color of the panel's border.
borderWidth (simple int) : The width of the panel's border.
headerBgColor (simple color) : The background color for the header cells.
headerTextColor (simple color) : The text color for the header cells.
headerTextSize (simple string) : The text size for the header cells (e.g., size.small). Uses size.* constants.
Returns: The newly created table object representing the panel.
updatePanel(panelTable, data, lvIcon, defaultTextColor, naCellColor, textSize)
Updates the content of the FVG information panel with the latest FVG data.
Parameters:
panelTable (table) : The table object representing the panel to be updated.
data (panelData) : An object containing the FVG data to display.
lvIcon (simple string) : The icon (e.g., emoji) to display next to Large Volume FVGs.
defaultTextColor (simple color) : The default text color for FVG levels if not highlighted.
naCellColor (simple color) : The background color for cells where no FVG data is available ("---").
textSize (simple string) : The text size for the FVG level data (e.g., size.small).
Returns: _void
ICT Concepts: MML, Order Blocks, FVG, OTECore ICT Trading Concepts
These strategies are designed to identify high-probability trading opportunities by analyzing institutional order flow and market psychology.
1. Market Maker Liquidity (MML) / Liquidity Pools
Idea: Institutional traders ("market makers") place orders around key price levels where retail traders’ stop losses cluster (e.g., above swing highs or below swing lows).
Application: Look for "liquidity grabs" where price briefly spikes to these levels before reversing.
Example: If price breaks a recent high but reverses sharply, it may indicate a liquidity grab to trigger retail stops before a trend reversal.
2. Order Blocks (OB)
Idea: Institutional orders are often concentrated in specific price zones ("order blocks") where large buy/sell decisions occurred.
Application: Identify bullish order blocks (strong buying zones) or bearish order blocks (strong selling zones) on higher timeframes (e.g., 1H/4H charts).
Example: A bullish order block forms after a strong rally; price often retests this zone later as support.
3. Fair Value Gap (FVG)
Idea: A price imbalance occurs when candles gap without overlapping, creating an area of "unfair" price that the market often revisits.
Application: Trade the retracement to fill the FVG. A bullish FVG acts as support, and a bearish FVG acts as resistance.
Example: Three consecutive candles create a gap; price later returns to fill this gap, offering a entry point.
4. Time-Based Analysis (NY Session, London Kill Zones)
Idea: Institutional activity peaks during specific times (e.g., 7 AM – 11 AM New York time).
Application: Focus on trades during high-liquidity periods when banks and hedge funds are active.
Example: The "London Kill Zone" (2 AM – 5 AM EST) often sees volatility due to European market openings.
5. Optimal Trade Entry (OTE)
Idea: A retracement level (similar to Fibonacci retracement) where institutions re-enter trends after a pullback.
Application: Look for 62–79% retracements in a trend to align with institutional accumulation/distribution zones.
Example: In an uptrend, price retraces 70% before resuming upward—enter long here.
6. Stop Hunts
Idea: Institutions manipulate price to trigger retail stop losses before reversing direction.
Application: Avoid placing stops at obvious levels (e.g., above/below recent swings). Instead, use wider stops or wait for confirmation.
Dabel MS + FVGThis script is designed to assist traders by identifying market structures, imbalances, and potential trade opportunities using Break of Structure (BOS) and Market Structure Shifts (MSS). It visually highlights imbalances in price action, key pivots, and market structure changes, providing actionable information for making trading decisions.
Key features:
Imbalances Detection: Highlights bullish and bearish price gaps (Fair Value Gaps) using colored boxes. Users can choose the line style (solid, dashed, or dotted) for imbalance midlines.
Market Structure Analysis: Tracks pivot highs and lows to identify BOS and MSS in two separate market structures with adjustable pivot strengths.
Customizable Visualization: Allows users to choose line styles, colors, and display options for both imbalances and market structures.
Alerts: Alerts traders when BOS or MSS occur, helping to monitor the market effectively.
Trading Strategy
Imbalance Trading:
Imbalances (gaps) represent areas where supply or demand was left unfilled. These gaps often act as magnet zones where the price revisits to fill.
Bullish Imbalance: Look for buying opportunities when price enters a green imbalance zone.
Bearish Imbalance: Look for selling opportunities when price enters a red imbalance zone.
Use the midline of the imbalance box as a key reference point for potential reversals.
Break of Structure (BOS) and Market Structure Shift (MSS):
BOS: Indicates a continuation of the existing trend. For example:
Bullish BOS: Look for continuation in the uptrend after a high is broken.
Bearish BOS: Look for continuation in the downtrend after a low is broken.
MSS: Suggests a potential reversal in market structure. For example:
Bullish MSS: Indicates a possible shift from a bearish to bullish market.
Bearish MSS: Indicates a potential shift from a bullish to bearish market.
Multiple Market Structures:
This script provide two sets of market structures, allowing traders to compare short-term and long-term trends.
Adjust the pivot strength to suit your trading style (lower for intraday trading, higher for swing or positional trading).
Entry and Exit:
Entry: Look for entries near imbalances or after confirmed BOS/MSS in line with the overall trend.
Exit: Place stop-loss below/above recent pivots and take profit at nearby support/resistance or imbalance zones.
For New Traders
Focus on Basics: Understand what BOS and MSS mean and how they signal trend direction or reversals.
Use Alerts: Rely on the script's alert system to catch important moments without staring at charts all day.
Start Small: Test this strategy on a demo account before using it live. You can understand it more with practice.
Multi-Timeframe FVG [TFO]The goal of this indicator is to find Fair Value Gaps (FVGs) that overlap on multiple timeframes. FVGs are already meant to be “sensitive” areas where one might expect price to react from, therefore FVGs that overlap on multiple timeframes could provide even more confluence that there may be a reaction in said area (with proper context).
Mitigation Type allows users to select how FVGs should be mitigated, either by wick or by completely closing through the area.
The displacement option helps to filter out smaller FVGs by looking for areas where price ran rather quickly (causing displacement). This is done by comparing the candle that made the FVG to a fractional ATR value, so that one may fine-tune how much “larger” the candle range needs to be, relative to recent price action.
The timeframe alignment option allows users to select how many timeframes must be converging in order to draw FVGs. For instance, with all timeframes selected, a timeframe alignment value of 2 would require that there be overlapping FVGs on 2 or more timeframes. A value of 3 would require that there be overlapping FVGs on all 3 timeframes in order for them to be drawn.
SCE Price Action SuiteThis is an indicator designed to use past market data to mark key price action levels as well as provide a different kind of insight. There are 8 different features in the script that users can turn on and off. This description will go in depth on all 8 with chart examples.
#1 Absorption Zones
I defined Absorption Zones as follows.
//----------------------------------------------
//---------------Absorption---------------------
//----------------------------------------------
box absorptionBox = na
absorptionBar = ta.highest(bodySize, absorptionLkb)
bsab = ta.barssince(bool(ta.change(absorptionBar)))
if bsab == 0 and upBar and showAbsorption
absorptionBox := box.new(left = bar_index - 1, top = close, right = bar_index + az_strcuture, bottom = open, border_color = color.rgb(0, 80, 75), border_width = boxLineSize, bgcolor = color.rgb(0, 80, 75))
absorptionBox
else if bsab == 0 and downBar and showAbsorption
absorptionBox := box.new(left = bar_index - 1, top = close, right = bar_index + az_strcuture, bottom = open, border_color = color.rgb(105, 15, 15), border_width = boxLineSize, bgcolor = color.rgb(105, 15, 15))
absorptionBox
What this means is that absorption bars are defined as the bars with the largest bodies over a selected lookback period. Those large bodies represent areas where price may react. I was inspired by the concept of a Fair Value Gap for this concept. In that body price may enter to be a point of support or resistance, market participants get “absorbed” in the area so price can continue in whichever direction.
#2 Candle Wick Theory/Strategy
I defined Candle Wick Theory/Strategy as follows.
//----------------------------------------------
//---------------Candle Wick--------------------
//----------------------------------------------
highWick = upBar ? high - close : downBar ? high - open : na
lowWick = upBar ? open - low : downBar ? close - low : na
upWick = upBar ? close + highWick : downBar ? open + highWick : na
downWick = upBar ? open - lowWick : downBar ? close - lowWick : na
downDelivery = upBar and downBar and high > upWick and highWick > lowWick and totalSize > totalSize and barstate.isconfirmed and session.ismarket
upDelivery = downBar and upBar and low < downWick and highWick < lowWick and totalSize > totalSize and barstate.isconfirmed and session.ismarket
line lG = na
line lE = na
line lR = na
bodyMidpoint = math.abs(body) / 2
upWickMidpoint = math.abs(upWickSize) / 2
downWickkMidpoint = math.abs(downWickSize) / 2
if upDelivery and showCdTheory
cpE = chart.point.new(time, bar_index - 1, downWickkMidpoint)
cpE2 = chart.point.new(time, bar_index + bl, downWickkMidpoint)
cpG = chart.point.new(time, bar_index + bl, downWickkMidpoint * (1 + tp))
cpR = chart.point.new(time, bar_index + bl, downWickkMidpoint * (1 - sl))
cpG1 = chart.point.new(time, bar_index - 1, downWickkMidpoint * (1 + tp))
cpR1 = chart.point.new(time, bar_index - 1, downWickkMidpoint * (1 - sl))
lG := line.new(cpG1, cpG, xloc.bar_index, extend.none, color.green, line.style_solid, 1)
lE := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.white, line.style_solid, 1)
lR := line.new(cpR1, cpR, xloc.bar_index, extend.none, color.red, line.style_solid, 1)
lR
else if downDelivery and showCdTheory
cpE = chart.point.new(time, bar_index - 1, upWickMidpoint)
cpE2 = chart.point.new(time, bar_index + bl, upWickMidpoint)
cpG = chart.point.new(time, bar_index + bl, upWickMidpoint * (1 - tp))
cpR = chart.point.new(time, bar_index + bl, upWickMidpoint * (1 + sl))
cpG1 = chart.point.new(time, bar_index - 1, upWickMidpoint * (1 - tp))
cpR1 = chart.point.new(time, bar_index - 1, upWickMidpoint * (1 + sl))
lG := line.new(cpG1, cpG, xloc.bar_index, extend.none, color.green, line.style_solid, 1)
lE := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.white, line.style_solid, 1)
lR := line.new(cpR1, cpR, xloc.bar_index, extend.none, color.red, line.style_solid, 1)
lR
First I get the size of the wicks for the top and bottoms of the candles. This depends on if the bar is red or green. If the bar is green the wick is the high minus the close, if red the high minus the open, and so on. Next, the script defines the upper and lower bounds of the wicks for further comparison. If the candle is green, it's the open price minus the bottom wick. If the candle is red, it's the close price minus the bottom wick, and so on. Next we have the condition for when this strategy is present.
Down delivery:
Occurs when the previous candle is green, the current candle is red, and:
The high of the current candle is above the upper wick of the previous candle.
The size of the current candle's top wick is greater than its bottom wick.
The total size of the previous candle is greater than the total size of the current candle.
The current bar is confirmed (barstate.isconfirmed).
The session is during market hours (session.ismarket).
Up delivery:
Occurs when the previous candle is red, the current candle is green, and:
The low of the current candle is below the lower wick of the previous candle.
The size of the current candle's bottom wick is greater than its top wick.
The total size of the previous candle is greater than the total size of the current candle.
The current bar is confirmed.
The session is during market hours
Then risk is plotted from the percentage that users can input from an ideal entry spot.
#3 Candle Size Theory
I defined Candle Size Theory as follows.
//----------------------------------------------
//---------------Candle displacement------------
//----------------------------------------------
line lECD = na
notableDown = bodySize > bodySize * candle_size_sensitivity and downBar and session.ismarket and barstate.isconfirmed
notableUp = bodySize > bodySize * candle_size_sensitivity and upBar and session.ismarket and barstate.isconfirmed
if notableUp and showCdSizeTheory
cpE = chart.point.new(time, bar_index - 1, close)
cpE2 = chart.point.new(time, bar_index + bl_strcuture, close)
lECD := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.rgb(0, 80, 75), line.style_solid, 3)
lECD
else if notableDown and showCdSizeTheory
cpE = chart.point.new(time, bar_index - 1, close)
cpE2 = chart.point.new(time, bar_index + bl_strcuture, close)
lECD := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.rgb(105, 15, 15), line.style_solid, 3)
lECD
This plots candles that are “notable” or out of the ordinary. Candles that are larger than the last by a value users get to specify. These candles' highs or lows, if they are green or red, act as levels for support or resistance.
#4 Candle Structure Theory
I defined Candle Structure Theory as follows.
//----------------------------------------------
//---------------Structure----------------------
//----------------------------------------------
breakDownStructure = low < low and low < low and high > high and upBar and downBar and upBar and downBar and session.ismarket and barstate.isconfirmed
breakUpStructure = low > low and low > low and high < high and downBar and upBar and downBar and upBar and session.ismarket and barstate.isconfirmed
if breakUpStructure and showStructureTheory
cpE = chart.point.new(time, bar_index - 1, close)
cpE2 = chart.point.new(time, bar_index + bl_strcuture, close)
lE := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.teal, line.style_solid, 3)
lE
else if breakDownStructure and showStructureTheory
cpE = chart.point.new(time, bar_index - 1, open)
cpE2 = chart.point.new(time, bar_index + bl_strcuture, open)
lE := line.new(cpE, cpE2, xloc.bar_index, extend.none, color.red, line.style_solid, 3)
lE
It is a series of candles to create a notable event. 2 lower lows in a row, a lower high, then green bar, red bar, green bar is a structure for a breakdown. 2 higher lows in a row, a higher high, red bar, green bar, red bar for a break up.
#5 Candle Swing Structure Theory
I defined Candle Swing Structure Theory as follows.
//----------------------------------------------
//---------------Swing Structure----------------
//----------------------------------------------
line htb = na
line ltb = na
if totalSize * swing_struct_sense < totalSize and upBar and downBar and high > high and showSwingSturcture and session.ismarket and barstate.isconfirmed
cpS = chart.point.new(time, bar_index - 1, high)
cpE = chart.point.new(time, bar_index + bl_strcuture, high)
htb := line.new(cpS, cpE, xloc.bar_index, color = color.red, style = line.style_dashed)
htb
else if totalSize * swing_struct_sense < totalSize and downBar and upBar and low > low and showSwingSturcture and session.ismarket and barstate.isconfirmed
cpS = chart.point.new(time, bar_index - 1, low)
cpE = chart.point.new(time, bar_index + bl_strcuture, low)
ltb := line.new(cpS, cpE, xloc.bar_index, color = color.teal, style = line.style_dashed)
ltb
A bearish swing structure is defined as the last candle’s total size, times a scalar that the user can input, is less than the current candles. Like a size imbalance. The last bar must be green and this one red. The last high should also be less than this high. For a bullish swing structure the same size imbalance must be present, but we need a red bar then a green bar, and the last low higher than the current low.
#6 Fractal Boxes
I define the Fractal Boxes as follows
//----------------------------------------------
//---------------Fractal Boxes------------------
//----------------------------------------------
box b = na
int indexx = na
if bar_index % (n * 2) == 0 and session.ismarket and showBoxes
b := box.new(left = bar_index, top = topBox, right = bar_index + n, bottom = bottomBox, border_color = color.rgb(105, 15, 15), border_width = boxLineSize, bgcolor = na)
indexx := bar_index + 1
indexx
The idea of this strategy is that the market is fractal. It is considered impossible to be able to tell apart two different time frames from just the chart. So inside the chart there are many many breakouts and breakdowns happening as price bounces around. The boxes are there to give you the view from your timeframe if the market is in a range from a time frame that would be higher than it. Like if we are inside what a larger time frame candle’s range. If we break out or down from this, we might be able to trade it. Users can specify a lookback period and the box is that period’s, as an interval, high and low. I say as an interval because it is plotted every n * 2 bars. So we get a box, price moves, then a new box.
#7 Potential Move Width
I define the Potential Move Width as follows
//----------------------------------------------
//---------------Move width---------------------
//----------------------------------------------
velocity = V(n)
line lC = na
line l = na
line l2 = na
line l3 = na
line l4 = na
line l5 = na
line l6 = na
line l7 = na
line l8 = na
line lGFractal = na
line lRFractal = na
cp2 = chart.point.new(time, bar_index + n, close + velocity)
cp3 = chart.point.new(time, bar_index + n, close - velocity)
cp4 = chart.point.new(time, bar_index + n, close + velocity * 5)
cp5 = chart.point.new(time, bar_index + n, close - velocity * 5)
cp6 = chart.point.new(time, bar_index + n, close + velocity * 10)
cp7 = chart.point.new(time, bar_index + n, close - velocity * 10)
cp8 = chart.point.new(time, bar_index + n, close + velocity * 15)
cp9 = chart.point.new(time, bar_index + n, close - velocity * 15)
cpG = chart.point.new(time, bar_index + n, close + R)
cpR = chart.point.new(time, bar_index + n, close - R)
if ((bar_index + n) * 2 - bar_index) % n == 0 and session.ismarket and barstate.isconfirmed and showPredictionWidtn
cp = chart.point.new(time, bar_index, close)
cpG1 = chart.point.new(time, bar_index, close + R)
cpR1 = chart.point.new(time, bar_index, close - R)
l := line.new(cp, cp2, xloc.bar_index, extend.none, color.aqua, line.style_solid, 1)
l2 := line.new(cp, cp3, xloc.bar_index, extend.none, color.aqua, line.style_solid, 1)
l3 := line.new(cp, cp4, xloc.bar_index, extend.none, color.red, line.style_solid, 1)
l4 := line.new(cp, cp5, xloc.bar_index, extend.none, color.red, line.style_solid, 1)
l5 := line.new(cp, cp6, xloc.bar_index, extend.none, color.teal, line.style_solid, 1)
l6 := line.new(cp, cp7, xloc.bar_index, extend.none, color.teal, line.style_solid, 1)
l7 := line.new(cp, cp8, xloc.bar_index, extend.none, color.blue, line.style_solid, 1)
l8 := line.new(cp, cp9, xloc.bar_index, extend.none, color.blue, line.style_solid, 1)
l8
By using the past n bar’s velocity, or directional speed, every n * 2 bars. I can use it to scale the close value and get an estimate for how wide the next moves might be.
#8 Linear regression
//----------------------------------------------
//---------------Linear Regression--------------
//----------------------------------------------
lr = showLR ? ta.linreg(close, n, 0) : na
plot(lr, 'Linear Regression', color.blue)
I used TradingView’s built in linear regression to not reinvent the wheel. This is present to see past market strength of weakness from a different perspective.
User input
Users can control a lot about this script. For the strategy based plots you can enter what you want the risk to be in percentages. So the default 0.01 is 1%. You can also control how far forward the line goes.
Look back at where it is needed as well as line width for the Fractal Boxes are controllable. Also users can check on and off what they would like to see on the charts.
No indicator is 100% reliable, do not follow this one blindly. I encourage traders to make their own decisions and not trade solely based on technical indicators. I encourage constructive criticism in the comments below. Thank you.
SMC Structures and FVGThe SMC Structures and FVG indicator allows the user to easily identify trend continuations (Break Of Structure) or trend changes (CHange Of CHaracter) on any time frame. In addition, it display all FVG areas, whether they are bullish, bearish, or even mitigated.
Fair Value Gap :
The FVG process shows every bullish, bearish or even mitigated FVG liquidity area. When a FVG is fully mitigated it will directly be removed of the chart.
There is an history of FVG to show. By selecting specific number of FVG to show in the chart, the user can focus its analysis on lasts liquidity area.
Here's the rules for FVG color :
Green when it's a bullish FVG and has not been mitigated
Red when it's a bearish FVG and has not been mitigated
Gray when the bullish / bearish FVG has been mitigated
Removed when the FVG has been fully mitigated
Structures analysis:
The Structure process show BOS in grey lines and CHoCH in yellow lines. It shows to the user the lasts price action pattern.
The blue lines are the high value and the low value of the current structure.
Bullish FVG Tap Signal (Simplified)Your script for detecting and marking bullish Fair Value Gaps (FVGs) and coloring candles on taps is simple and mostly correct, but I see a couple of points to clarify and possibly improve:
What your script does:
Detects a bullish FVG if low > high (the middle candle’s low is above the high of the candle 3 bars ago).
When the FVG forms, it stores the gap boundaries (bullFvgTop and bullFvgBottom) and the bar index of the formation.
Then it checks if a candle taps the gap bottom (price drops to or below bullFvgBottom but closes above it) after the FVG formed.
If so, it colors that candle lime.
FVG (Nephew sam remake)Hello i am making my own FVG script inspired by Nephew Sam as his fvg code is not open source. My goal is to replicate his Script and then add in alerts and more functions. Thus, i spent few days trying to code. There is bugs such as lower time frame not showing higher time frame FVG.
This script automatically detects and visualizes Fair Value Gaps (FVGs) — imbalances between demand and supply — across multiple timeframes (15-minute, 1-hour, and 4-hour).
15m chart shows:
15m FVGs (green/red boxes)
1H FVGs (lime/maroon)
4H FVGs (faded green/red with borders) (Bugged For now i only see 1H appearing)
1H chart shows:
1H FVGs
4H FVGs
4H chart shows:
4H FVGs only
There is the function to auto close FVG when a future candle fully disrespected it.
You're welcome to:
🔧 Customize the appearance: adjust box colors, transparency, border style
🧪 Add alerts: e.g., when price enters or fills a gap
📅 Expand to Daily/Weekly: just copy the logic and plug in "D" or "W" as new layers
📈 Build confluence logic: combine this with order blocks, liquidity zones, or ICT concepts
🧠 Experiment with entry signals: e.g., candle confirmation on return to FVG
🚀 Improve performance: if you find a lighter way to track gaps, feel free to optimize!
Inversion GapsAn inverted fair value gap (FVG) occurs when candles start closing below a bullish FVG or above a bearish FVG and in this case, support FVGs become resistances and vice versa. This is a smart money concept introduced by ICT. While we a number of have indicators for FVGs, we don't have any for inversion FVGs. This indicator is just for that - it shows FVGs only after they're inverted.
The meat of it comes from being able to plot HTF inverted FVGs in LTF. In the above BTC chart, you can see M15 inverted FVGs plotted on M1 chart and you can see price respecting them. Mitigations can also be shown as lines (as you can see in the chart).
You can also setup alerts for formation and mitigation of such inversion FVGs.
ZEN 🍵ZEN TEMPLE Indicator (w/ Moving Averages & FVGs)
The ZEN TEMPLE indicator is a hybrid market structure and price action tool designed for traders seeking clarity and confluence in volatile markets. It combines trend-following logic with liquidity and imbalance detection to support intraday and swing trading strategies.
✅ Features:
ZEN TEMPLE Core Logic
A proprietary framework that identifies key zones of equilibrium and directional bias. These zones serve as potential reversal or continuation points, similar to supply/demand areas, but filtered by volatility and trend strength.
Moving Averages (MAs)
Dual or triple moving averages (EMA/SMA) are used to determine trend direction and momentum. Crossovers or dynamic support/resistance from MAs aid in decision-making.
Example: 20 EMA (fast), 50 EMA (medium), 200 SMA (macro trend)
Fair Value Gaps (FVGs)
Automatically detects imbalances in price action—gaps formed when price moves too quickly, leaving behind untraded zones.
Bullish FVG: potential long re-entry zones
Bearish FVG: potential short re-entry zones
FVGs are highlighted and optionally filtered by trend direction or recent swing highs/lows.
🎯 Use Cases:
Identify trend direction and momentum shifts using MAs.
Enter or exit trades at FVG levels aligned with the ZEN TEMPLE bias.
Use the ZEN zones for anticipating high-probability reaction areas in price.
🔧 Customization:
Toggle visibility of MAs, FVGs, or ZEN zones.
Adjustable length and type for each MA.
FVG sensitivity and highlight duration can be configured.
UT Bot + Cooldown + Visual FVGSynopsis – UT Bot + Cooldown + Visual FVG
This TradingView script combines:
✅ UT Bot Reversal Signals
Based on ATR and volatility logic
BUY when trend flips from bearish to bullish
SELL when trend flips from bullish to bearish
✅ Cooldown Filter
Limits signals to 1 per X bars (default 30)
Prevents overtrading during choppy price action
✅ Optional FVG Markers (Fair Value Gaps)
Visually shows bullish or bearish imbalances (3-bar gaps)
Does not affect signal generation — only for confluence
🔍 Ideal for traders who want clean, time-filtered signals with visual price-action context. Suitable for futures, crypto, or forex on intraday charts.
US30 Smart Money 5M/4H Strategy🧠 How It Works
✅ 1. 4H Trend Bias Detection
Uses the 4-hour chart (internally) to determine if the market is in an uptrend or downtrend.
Background turns green for bullish trend, red for bearish trend.
This helps filter trades — only take longs during uptrend, shorts during downtrend.
✅ 2. Liquidity Sweeps (Stop Hunts) on 5M
Highlights candles that break previous highs/lows and then reverse (typical of institutional stop raids).
Draws a shaded red box above sweep-high candles and green box under sweep-lows.
These indicate key reversal zones.
✅ 3. Order Block Zones
Detects bullish/bearish engulfing patterns after liquidity sweeps.
Draws a supply or demand zone box extending forward.
These zones show where institutions likely placed large orders.
✅ 4. FVG Midpoint from 30-Min Chart
Detects Fair Value Gaps (imbalances) on the 30-minute chart.
Plots a line at the midpoint of the gap (EQ level), which is often revisited for entries or rejections.
✅ 5. Buy/Sell Signals (Non-Repainting)
Buy = 4H uptrend + 5M liquidity sweep low + bullish engulfing candle.
Sell = 4H downtrend + 5M liquidity sweep high + bearish engulfing.
Prints green “BUY” or red “SELL” label on the chart — these do not repaint.
📈 How to Use It
Wait for trend bias — only take trades in the direction of the 4H trend.
Watch for liquidity sweep boxes — these hint a stop hunt just occurred.
Look for a signal label (BUY/SELL) — confirms entry criteria.
Use FVG EQ lines & Order Block zones as confluence or targets.
Take trades after NY open (9:30 AM EST) for best momentum.
SMC Liquidity & Order Blocks🔹 1. Moving Averages for Trend Confirmation
Uses Exponential Moving Averages (EMA) to determine trend direction.
9-period EMA (blue) and 15-period EMA (red) are plotted.
🔹 2. Liquidity Zones (Swing Highs & Lows)
Identifies liquidity zones where price is likely to react.
Buy-Side Liquidity: Highest high over 20 periods (Green line).
Sell-Side Liquidity: Lowest low over 20 periods (Red line).
🔹 3. Order Block Detection
Detects bullish and bearish order blocks (key price zones of institutional activity).
Bullish Order Block (OB): Formed when the highest close over 5 bars exceeds the highest high.
Bearish Order Block (OB): Formed when the lowest close over 5 bars is lower than the lowest low.
Plotted using green (up-triangle) for bullish OB and red (down-triangle) for bearish OB.
🔹 4. Fair Value Gaps (FVG)
Detects price inefficiencies (gaps between candles).
FVG Up: When a candle's high is lower than a candle two bars ahead.
FVG Down: When a candle's low is higher than a candle two bars ahead.
Plotted using blue circles (FVG Up) and orange circles (FVG Down).
FVG Channel [LuxAlgo]The FVG Channel indicator displays a channel constructed from the averages of unmitigated historical fair value gaps (FVG), allowing to identify trends and potential reversals in the market.
Users can control the amount of FVGs to consider for the calculation of the channels, as well as their degree of smoothness through user settings.
🔶 USAGE
The FVG Channel is constructed by averaging together recent unmitigated Bullish FVGs (contributing to the creation of the upper bands), and Bearish unmitigated FVGs (contributing to the creation of the lower bands) within a lookback determined by the user. A higher lookback will return longer-term indications from the indicator.
The channel includes 5 bands, with one upper and one lower outer extremities, as well as an inner series of values determined using the Fibonacci ratios (respectively 0.786, 0.5, 0.236) from the channel's outer extremities.
An uptrend can be identified by price holding above the inner upper band (obtained from the 0.786 ratio), this band can also provide occasional support when the price retraces to it while in an uptrend.
Breaking below the inner upper band with an unwillingness to reach above again is a clear sign of hesitation in the market and can be indicative of an upcoming consolidation or reversal.
This can directly be applied to downtrends as well, below are examples displaying both scenarios.
Uptrend Example:
Downtrend Example:
🔹 Breakout Levels
When the price mitigates all FVGs in a single direction except for 1, the indicator will display a "Breakout Level". This is the level that price will need to cross in order for all FVGs in that direction to be mitigated, because of this they can also be aptly called "Last Stand Levels".
These levels can be considered as potential support and resistance levels, however, should always be monitored for breakouts since a substantial push above or below these points would indicate strong momentum.
🔹 Signals
The indicator includes Bullish and Bearish Signals, these signals fire when all FVGs for a single direction have been mitigated and an engulfing candle occurs in the opposite direction. These are reversal signals and should be used alongside other indicators to appropriately manage risk.
Note: When all FVGs in a single direction have been mitigated, the candles will change colors accordingly.
🔶 DETAILS
The script uses a typical identification method for FVGs. Once identified, the script collects and stores the mitigation levels of the respective bullish and bearish FVGs:
For Bullish FVGs this is the bottom of the FVG.
For Bearish FVGs this is the top of the FVG.
The data is managed to only consider a specific amount of FVG mitigation levels, determined by the set "Unmitigated FVG Lookback". If an FVG is mitigated, it frees up a spot in the memory for a new FVG, however, if the memory is full, the oldest will be deleted.
The averages displayed (Channel Upper and Lower) are created from 2 calculation steps, the first step involves taking the raw average of the FVG mitigation levels, and the second step applies a simple moving average (SMA) smoothing of the precedent obtained averages.
Note: To view the mitigation levels average obtained in the first step, the "Smoothing Length" can be set to 1.
🔶 SETTINGS
Unmitigated FVG Lookback: Sets the maximum number of Unmitigated FVG mitigation levels that the script will use to calculate the channel.
Smoothing Length: Sets the smoothing length for the channel to reduce noise from the raw data.
Mark FVGsMark FVGs is marking FVG (stands for Fair Value Gap, other name is Imbalance or IMB) on your chart so that you can instantly detect them
It supports:
- marking bullish and bearish partly filled or unfilled FVGs of the current timeframe
- marking bullish and bearish already filled FVGs of the current timeframe
- marking bullish and bearish FVGs of the any 4 timeframes on your current timeframe
technically it re-builds them on the last bar or as soon as new realtime bar is updated. it looks with 1k bars back to find the nearest specific number of FGVs
Adjustments:
- changing the maximum number of FVGs to display.
- changing the color of FVG area
- displaying already filled FVG of the current time frame
- changing the mode of displaying area it can either extended or fixed width
- displaying labels of other time frame FVGs