Indicator

Indicator

Venor Trend Pulse V2Short Description
A professional trend confirmation indicator designed to filter market noise, validate momentum, and identify higher-quality trading opportunities across multiple markets and timeframes.
Full Description
Venor Trend Pulse
Venor Trend Pulse is a proprietary trend confirmation indicator developed to help traders identify higher-quality market opportunities while filtering out unnecessary market noise.
Rather than reacting to every price fluctuation, the indicator evaluates multiple aspects of market behavior, including trend structure, volatility, and momentum confirmation, before generating a trading signal. By requiring several conditions to align, Venor Trend Pulse aims to reduce low-quality entries that commonly occur during ranging or indecisive markets.
The internal calculation is proprietary and intentionally remains undisclosed. However, the overall methodology is based on combining trend confirmation with adaptive market filtering to improve signal quality while maintaining timely market responsiveness.
Key Features
Trend confirmation using multiple analytical factors
Adaptive filtering to reduce market noise
Momentum validation before signal generation
Designed for discretionary trading and market analysis
Compatible with cryptocurrencies, Forex, indices, and other liquid markets
Suitable for multiple timeframes
Recommended Usage
Venor Trend Pulse is intended to be used as a confirmation tool rather than a complete trading system.
For best results, it can be combined with:
Market Structure Analysis
Support & Resistance
Volume Analysis
Risk Management
Position Sizing
Like any technical analysis tool, signals should always be evaluated within the broader market context.
Interface Translation
Chinese English
多頭 Bullish
空頭 Bearish
買進 Buy
賣出 Sell
趨勢確認 Trend Confirmation
強勢 Strong Trend
弱勢 Weak Trend
Disclaimer
This indicator is provided for educational and analytical purposes only. It does not constitute financial advice or guarantee future performance. Trading financial markets involves substantial risk. Always perform your own analysis and apply appropriate risk management before making trading decisions. Indicator

ATK/DEF Imbalance Power Liquidity Analysis EngineATK/DEF Imbalance Power Liq Analysis Engine is a market behavior analysis framework designed to evaluate swing high and swing low through the relationship between balance fl and imbalance powr.
Unlike traditional high and low point identification methods that mainly focus on pric location or histor turning areas, this indicator focuses on analyzing the internal strength characteristics behind pric movements by measuring the interaction between balanced conditions and directional imbalance.
The core concept of this framework is based on evaluating how pric behavior develops when bu and se pressure become balanced or imbalanced. By stu the intensity, deviation, and persistenc of these conditions, the indicator provides additional analytical information about the quality and behavioral characteristics of detec swing structures.
The engine combines several analytical components to evaluate high and low point behavior:
1. Balance and Imbalance Flo Analysis
The Balance Flo modu evaluates the relationship between positive and negative pric pressure using candle structure and pric movement characteristics.
This component measures the degree of directional imbalance and identifies whether market activity is showing stronger one-sided pressure or a more balanced condition.
The objecti is not to classify market direction, but to evaluate the internal strength distribution around pric struc.
2. Imbalance Power Measurement
The Imbalance Power modu measures the intensity of pressure differences between opposing forc.
By analyzing the magnitu of imbalance, the framework evaluates whether a swing high or swing low develod under strong pressure conditions or weaker participation conditions.
This provides a quantitative reference for comparing different structur points based on their internal behavioral characteristics.
3. Flo Strength Behavior Analysis
The Flo Behavior component studie changes in balance strength over time.
It evaluates whether flo conditions are increasing, decreasing, stabilizing, or shifting between different states.
This allows users to observe how pressure behavior changes around histor swing areas without relying only on pric leve.
4. Market Weight Capacity Evaluation
The Market Weight modu compares current imbalance strength against recent histor conditions.
This measurement provides context regarding the relative intensity of current flo behavior and helps distingu stronger and weaker activity environments.
5. Multi-Timeframe Imbalance Relationship
The framework evaluates short, medium, and longer fl conditions to display the relationship between different imbalance states.
This component provides additional context regarding whether different calculation periods show similar or conflicting pressure characteristics.
6. Swing High and Swing Low Behavioral Analysis
The indicator integrates imbalance and balance measurements directly with detected swing high and swing low structures.
Each structural point can display related flo information, including:
• Balance flo condition
• Imbalance strength level
• Flo behavior status
• Pressure change characteristics
• Structural activity reference
This approach focuses on stud the effectiveness and behavioral quality of high and low points rather than simply marking histor pric extremes.
Key Features:
• Balance and imbalance flo evaluation
• Swing high and swing low behavior analysis
• Candle-based pressure measurement
• Imbalance strength classification
• Flo behavior monitoring
• Market weight comparison
• Multi-period imbalance relationship analysis
• Structural point information display
• Analytical dashboard with calcu measurements
• Quantitative evaluation of pric behavior characteristics
ATK/DEF Imbalance Power Liq Analysis Engine is designed as a technical analysis rese tool for stu the relationship between pric structures, internal pressure distribution, and changing market behavior.
The displayed values represent calcu analytical measurements derived from histor price data. The framework is intended to provide additional context for stud market structure and liquidity behavior rather than providing tra instructions or directional decisions.
Indicator

8020 System Indicator=============================================================================
8020 SYSTEM INDICATOR FOR TRADINGVIEW — USER GUIDE
=============================================================================
Strategy by Okala. This indicator is a chart companion for the 80/20 trading strategy, Okala's
framework for trading NQ (Nasdaq) futures around price levels ending in 80
and 20. All trading concepts described below are Okala's; the indicator
simply automates spotting and tracking them on the chart.
Nothing in this guide or the indicator is financial advice. It marks
patterns; the trading decisions remain yours.
-----------------------------------------------------------------------------
1. WHAT THE INDICATOR DOES
-----------------------------------------------------------------------------
The indicator draws the core 8020 read on a single chart:
80/20 LEVELS
Horizontal lines at every price ending in 20 or 80 (for example 23,480
and 23,520). In the 8020 framework these act as liquidity magnets:
prices where both institutional and retail orders cluster, producing
reversals, breakouts and stop runs. The indicator draws the nearest
levels above and below the current price and moves them with the market.
40-POINT ZONE BANDS
A translucent band from each 80-ending level up to the next 20-ending
level, straddling every round hundred (for example 23,480 to 23,520).
This is the zone the levels frame, shown as one shaded region.
REPAIRS ("R")
A repair is a candle with no wick on one side of its body. In Okala's
teaching this signals imbalance: aggressive one-sided orders left
unfinished business, and the market tends to return later to "repair"
the move by filling that missing liquidity.
- A bullish candle with no lower wick creates a bullish repair at its
low (a magnet below).
- A bearish candle with no upper wick creates a bearish repair at its
high (a magnet above).
The indicator draws a line from each repair, extending right until
price returns and taps it. Repairs are used both as confluence for
entries and as profit targets. Okala's guidance: recent, aggressive
repairs have the strongest pull; stale ones fade in relevance — the AGE
column in the stats table (see section 4) helps you judge this.
FORK ("F")
A reversal pattern after a sharp capitulation move: three consecutive
candles print wicks at similar prices, with the centre wick extending
furthest and small bodies on the outer two candles.
- A bullish fork: 1st candle closes bearish, the 2nd (centre) candle's
low dives deepest, the 3rd closes bullish to confirm the reversal.
- A bearish fork is the mirror image using the highs.
The indicator draws a line at the centre candle's wick extreme — the
key level of the pattern — extending right until price returns and
taps it. Detection fires when the 3rd candle confirms, and the line is
anchored back at the centre candle where the level actually formed.
CROSS SECTIONS ("XS")
A continuation pattern built from two strong candles in the same
direction where the close of the first meets the open of the second at
the same price — no gap and no overlap between the bodies. That
junction forms a precise level. The playbook: mark the level, wait for
price to pull back to it, and enter in the original trend direction.
The indicator draws a line at the junction, extending right until the
retest happens.
GAPS
Two consecutive candles whose bodies do not overlap, leaving a void
between them (up or down). A translucent box marks the gap and extends
right until price trades back into it — another form of unfinished
liquidity that price is drawn to fill.
A+ WINDOWS
Shaded background over the two sessions the strategy is traded in:
09:30-11:00 ET (morning) and 15:00-16:00 ET (afternoon). The period in
between (11:00-15:00 ET) is the dead zone and is deliberately left
unshaded. Daylight-saving changes are handled automatically.
CONFLUENCE ("+")
Any repair, fork or cross section that forms within a set distance of
an 80/20 level is recoloured (magenta by default) and its label gains a
"+" (for example "R+" or "F+"). Level-plus-pattern confluence is the
heart of the strategy, so these markers deserve the most attention.
STATS TABLE
An on-chart panel with a legend and a live list of every level that
has not yet been tapped. Covered fully in section 4.
Note: of the three core setups, the h Pattern is not yet detected by
this version of the indicator; the sub-levels taught in the full course
(33, 46, 66, 93) are also not drawn.
-----------------------------------------------------------------------------
2. GETTING STARTED
-----------------------------------------------------------------------------
CHART TIMEFRAMES
The system uses a 200-second chart for entries and a 10-minute chart for
bias. PulseWire only offers second-based intervals on Premium plans and
above; per Okala's own guidance, if your platform does not support
200-second candles, use 3-minute candles instead — the setups work the
same way. The 10-minute chart is read separately for direction; this
indicator draws the entry-timeframe picture.
The detection logic runs on any symbol and timeframe, but the level
spacing (80/20 within each hundred) and the default thresholds are tuned
for NQ and MNQ. Tick size is detected automatically (0.25 on NQ/MNQ) and
can be overridden in settings.
NO REPAINTING
All patterns are detected on confirmed (closed) candles only. A marker
will never appear mid-candle and then vanish; what you see in a replay is
what you would have seen live.
-----------------------------------------------------------------------------
3. SETTINGS, GROUP BY GROUP
-----------------------------------------------------------------------------
A note on transparency: PulseWire uses transparency rather than opacity,
so 0 means solid and 100 means invisible.
80/20 LEVELS
Show levels ............... master toggle for the horizontal lines
Dashed lines .............. dashed (on) or solid (off) level lines
Price labels .............. print the price next to each level
40-pt zone bands .......... toggle the shaded bands around each hundred
Levels each side .......... how many levels to draw above and below the
current price (default 10 each side)
Line width / transparency . visual styling for the level lines
Zone band transparency .... how faint the bands are (default 90, subtle)
Line / zone band colour ... colours for lines and bands
REPAIRS
Show repairs .............. toggle repair detection
"R" labels ................ toggle the R text label (line still draws)
Max wick (ticks) .......... how large a wick may be and still count as
"no wick". Default 0 = strictly wickless;
set to 1-2 to allow a tick or two of wick.
CROSS SECTIONS
Show cross sections ....... toggle detection
"XS" labels ............... toggle the XS text label
Body / range ratio ........ how much of each candle must be body for it
to count as a strong directional candle
(default 0.6 = 60 percent)
Junction tolerance (ticks). how closely close-1 must meet open-2
(default 2 ticks)
Min body (ticks) .......... minimum size of each momentum candle
(default 40 ticks = 10 NQ points)
FORK
Show fork ................. toggle fork detection
"F" labels ................ toggle the F text label (line still draws)
Outer-wick similarity ..... how close the 1st and 3rd candles' wicks
must sit to count as "similar prices"
(default 3 ticks)
Min center-wick depth ..... how far the center candle's wick must
extend beyond BOTH outer wicks for the
pattern to count (default 4 ticks = 1 pt)
Max outer body / range .... how small-bodied the outer candles must be:
the body may take up at most this fraction
of the candle's range (default 0.5). Lower
values demand more indecision-like outers.
MARKER STYLE (REPAIRS + CROSS SECTIONS + FORK)
Line width ................ thickness of the marker lines
Lookback (bars) ........... markers older than this are removed
(default 1000 bars; 0 disables the limit)
Bullish / bearish colour .. cyan and pink by default. These also colour
the labels and the stats-table rows. If you
use a light chart background, darken these.
CONFLUENCE
Highlight confluence ...... toggle the recolour-and-"+" behaviour
Distance to level (ticks) . how near an 80/20 level a marker must be to
count as confluent (default 8 ticks = 2 pts)
Colour .................... confluence colour (magenta by default)
GAPS
Show gaps ................. toggle gap boxes
Min gap size (ticks) ...... smallest body gap that registers
(default 4 ticks = 1 point)
Box transparency / colour . styling for the gap boxes
A+ WINDOWS
Shade A+ windows .......... toggle the session shading
Transparency / colour ..... styling for the shading
STATS TABLE
Show table ................ toggle the panel
Position .................. which corner or edge of the chart it sits in
Text size ................. Tiny, Small, Normal or Large
Max untapped rows ......... how many untapped levels to list (1-30).
The header always shows the true total even
when the list is capped.
GENERAL
Tick size (0 = auto) ...... leave at 0 to use the symbol's own tick
size; override only if needed.
-----------------------------------------------------------------------------
4. THE STATS TABLE
-----------------------------------------------------------------------------
The table has a white body with black text; section headers are inverted
(black with white text). Everything is set in a monospaced font. It
updates live on the last bar.
LEGEND (top section)
R repair (no-wick candle)
F fork (three-candle reversal)
XS cross section (junction of two momentum candles)
# coloured square: body gap
+ confluence with an 80/20 level
UP / DOWN arrows: bullish (cyan) and bearish (pink) marker direction
UNTAPPED (bottom section)
This is a live watch-list of every level the market has not yet returned
to — the levels that still have pull. The count in the header is the
total number outstanding. Rows are listed newest first, in three columns:
TYPE ... what the level is (R, F, XS or GAP), with a "+" if it sits in
confluence with an 80/20 level, and an arrow for direction.
An up arrow means price would come DOWN to tap it (a magnet
below); a down arrow means price would come UP to tap it.
PRICE .. the exact level, or for gaps the full price range of the void.
AGE .... how many bars have passed since the level was created. Recency
matters in this system — fresh repairs pull hardest — so a
young age is generally more interesting than an old one. For
forks, age is counted from the centre candle, where the level
actually formed.
The moment price taps a level, its line stops extending on the chart and
its row leaves the table, so the table always reflects what is still open.
-----------------------------------------------------------------------------
5. READING THE CHART: THE INTENDED WORKFLOW
-----------------------------------------------------------------------------
The indicator is built to support a daily routine, rather than
replace it:
1. Pre-market, note where the 80/20 levels and fresh repairs sit; the
untapped table gives you this list at a glance.
2. Set bias from the 10-minute chart (a separate chart or layout).
3. Trade only inside the shaded A+ windows and avoid the dead zone.
4. Wait for a setup at a marked location — a fork reversal at
exhaustion, a cross section pullback or a reaction at a repair —
with the highest priority on "+" (confluent) markers near 80/20
levels.
5. Manage risk per the playbook: a 10-15 point stop at structure (size
down if wider), a 15-point standard target (1.0-1.5R), and a strict
cap of one to three trades per day. Repairs above or below often
serve as the natural targets.
The indicator marks locations and keeps score of what remains untapped;
the discipline — windows, bias, risk and trade count — is on you.
-----------------------------------------------------------------------------
6. ALERTS
-----------------------------------------------------------------------------
There is an "Alerts" group in the settings with seven toggles: new repair, new fork, new cross section, new gap (off by default — they can be noisy), level tapped / gap filled, "+"-only mode (restricts new-marker alerts to confluent ones, which pairs nicely with the strategy's A+-setups-only discipline), and A+ window opens (off by default). Messages are compact and self-describing
-----------------------------------------------------------------------------
7. TECHNICAL NOTES AND LIMITS
-----------------------------------------------------------------------------
- PulseWire caps every indicator at 500 lines, 500 boxes and 500
labels. The script reserves headroom for the level lines and bands,
caps markers at 400 and gaps at 450, and when a cap is reached evicts
the oldest FILLED marker first, so open (untapped) levels are never
dropped in favour of dead ones.
- The Lookback setting removes markers older than the given number of
bars regardless of fill state, keeping the chart focused on recent
structure.
- Levels and zone bands are redrawn around the latest price on every
update, so they follow the market automatically.
- Fill checks use the candle's full range: a wick touching a level
counts as a tap.
- Detection is on-close only, which means a pattern is marked one candle
after it completes forming — the trade-off for signals that never
repaint. For the fork this means the marker appears when the 3rd
(confirming) candle closes, two candles after the centre candle that
set the level; the line is drawn back to that centre candle.
Credit once more to Okala for the strategy and all of the concepts this indicator visualises. Indicator

SMC - BOS/CHoCH & FVG & Fib OTE & OB# Smart Money Concepts – Market Structure, Order Blocks, Liquidity & Fibonacci
## Overview
This indicator is a comprehensive Smart Money Concepts trading tool designed to help traders analyze market structure, institutional price behavior, liquidity movements, Order Blocks, Breaker Blocks, Fair Value Gaps, and Fibonacci-based reaction zones within a single charting system.
Instead of generating signals from a single technical condition, the indicator evaluates multiple price-action components together. Its main objective is to identify areas where market structure, institutional zones, liquidity, and Fibonacci retracement levels create a higher-quality trading scenario.
The indicator can be used for market analysis, trade planning, confirmation, risk management, and PulseWire alert automation.
---
## Core Features
### Market Structure Analysis
The indicator automatically identifies important structural developments in price, including:
* Bullish market structure
* Bearish market structure
* Break of Structure — BOS
* Change of Character — CHoCH
* Market Structure Shift — MSS
* Swing highs and swing lows
* Structural continuation and reversal scenarios
* Bullish and bearish trend transitions
Market structure is used as the foundation of the indicator. Long and short scenarios are evaluated according to the current structural direction rather than relying only on isolated support or resistance levels.
A bullish scenario generally becomes more relevant after price breaks an important swing high or confirms a bullish structural shift.
A bearish scenario generally becomes more relevant after price breaks an important swing low or confirms a bearish structural shift.
---
## Order Blocks
The indicator detects potential bullish and bearish Order Blocks created before meaningful impulsive price movements.
### Bullish Order Block
A Bullish Order Block represents a potential institutional demand area formed before a strong bullish expansion.
When price returns to this zone, the indicator evaluates whether the area is still valid and whether additional confirmation conditions are present.
### Bearish Order Block
A Bearish Order Block represents a potential institutional supply area formed before a strong bearish expansion.
When price revisits the zone, the indicator checks the current market structure, zone validity, price reaction, and other confirmation factors.
Order Blocks can be used for:
* Potential entry areas
* Pullback and retest analysis
* Support and resistance identification
* Trade invalidation placement
* Liquidity-based reversal scenarios
* Premium and discount zone confirmation
Not every Order Block should automatically be considered a trade entry. The indicator is designed to combine the Order Block with structural and Fibonacci-based confirmation.
---
## Breaker Blocks
When a previously valid Order Block fails and price breaks through it, the zone may later function as a Breaker Block.
A failed bullish Order Block may become a bearish resistance area.
A failed bearish Order Block may become a bullish support area.
Breaker Blocks can be especially useful when analyzing:
* Market structure reversals
* Failed institutional zones
* Retests after structural breaks
* Continuation setups following liquidity sweeps
* Support-to-resistance and resistance-to-support transitions
The indicator tracks these interactions to help traders distinguish between valid Order Blocks, invalidated zones, and possible Breaker Block opportunities.
---
## Fibonacci Retracement and OTE Zones
The Fibonacci module is integrated into the market structure and Order Block system.
The indicator focuses particularly on the retracement area between:
* 0.618 Fibonacci level
* 0.786 Fibonacci level
This region is commonly referred to as the Optimal Trade Entry, or OTE, zone within Smart Money Concepts methodology.
For bullish scenarios, the Fibonacci retracement is measured across the relevant bullish price leg. The indicator then evaluates whether price retraces into the discount area and interacts with a Bullish Order Block, Breaker Block, Fair Value Gap, or liquidity zone.
For bearish scenarios, the Fibonacci retracement is measured across the relevant bearish price leg. The indicator evaluates whether price returns to the premium area and interacts with a Bearish Order Block, Breaker Block, Fair Value Gap, or liquidity zone.
The strongest setups generally occur when multiple elements overlap within the same area.
Examples of bullish confluence include:
* Bullish market structure
* Sell-side liquidity sweep
* Bullish Order Block
* Bullish Fair Value Gap
* Fibonacci 0.618–0.786 retracement
* Discount pricing
* Bullish price-action confirmation
Examples of bearish confluence include:
* Bearish market structure
* Buy-side liquidity sweep
* Bearish Order Block
* Bearish Fair Value Gap
* Fibonacci 0.618–0.786 retracement
* Premium pricing
* Bearish price-action confirmation
---
## Premium and Discount Areas
The Fibonacci range also helps divide the current dealing range into premium and discount areas.
### Discount Area
The discount area represents the lower portion of the selected price range. Bullish opportunities are generally more favorable when price returns to this area while the broader market structure remains bullish.
### Premium Area
The premium area represents the upper portion of the selected price range. Bearish opportunities are generally more favorable when price returns to this area while the broader market structure remains bearish.
This approach helps prevent traders from entering long positions at excessively high prices or short positions at excessively low prices.
---
## Fair Value Gaps and Imbalances
The indicator can identify price imbalances created during strong impulsive movements.
These imbalances are commonly referred to as Fair Value Gaps, or FVGs.
A Fair Value Gap may represent an area where price moved too quickly to allow balanced trading between buyers and sellers. Price may later return to partially or completely rebalance this area.
Fair Value Gaps can be used as:
* Potential retracement targets
* Entry confirmation areas
* Continuation zones
* Support or resistance regions
* Additional confluence inside an Order Block
* Potential targets after a structural breakout
The importance of a Fair Value Gap increases when it overlaps with an Order Block, Breaker Block, liquidity zone, or Fibonacci OTE region.
---
## Liquidity Analysis
Liquidity is one of the central components of Smart Money Concepts.
The indicator helps traders monitor important areas where stop orders and pending orders may be concentrated, including:
* Buy-side liquidity
* Sell-side liquidity
* Equal highs
* Equal lows
* Previous swing highs
* Previous swing lows
* Local liquidity pools
* External range liquidity
* Internal range liquidity
A move above a previous high may represent a buy-side liquidity sweep.
A move below a previous low may represent a sell-side liquidity sweep.
However, a liquidity sweep alone is not treated as a complete signal. The indicator evaluates the sweep together with market structure, institutional zones, Fibonacci positioning, and price reaction.
---
## Bullish Setup Logic
A potential bullish setup may be identified when several of the following conditions align:
1. Sell-side liquidity is taken or swept.
2. Price creates a bullish Change of Character or Market Structure Shift.
3. A bullish Break of Structure confirms the new direction.
4. Price retraces toward a valid Bullish Order Block, Breaker Block, or Fair Value Gap.
5. The retracement enters the Fibonacci 0.618–0.786 OTE region.
6. Price is located within the discount area of the relevant dealing range.
7. The institutional zone remains valid.
8. Bullish price action confirms buyer reaction.
9. The predefined invalidation conditions are not triggered.
10. The complete rule-based setup is confirmed.
When the required conditions are satisfied, the indicator can generate a potential long signal and corresponding alert.
---
## Bearish Setup Logic
A potential bearish setup may be identified when several of the following conditions align:
1. Buy-side liquidity is taken or swept.
2. Price creates a bearish Change of Character or Market Structure Shift.
3. A bearish Break of Structure confirms the new direction.
4. Price retraces toward a valid Bearish Order Block, Breaker Block, or Fair Value Gap.
5. The retracement enters the Fibonacci 0.618–0.786 OTE region.
6. Price is located within the premium area of the relevant dealing range.
7. The institutional zone remains valid.
8. Bearish price action confirms seller reaction.
9. The predefined invalidation conditions are not triggered.
10. The complete rule-based setup is confirmed.
When the required conditions are satisfied, the indicator can generate a potential short signal and corresponding alert.
---
## Rule-Based Signal Validation
The indicator does not consider every Order Block touch or Fibonacci retracement to be a valid trade setup.
Signals are filtered through a rule-based validation process that may include:
* Current market structure
* Direction of the most recent structural break
* Order Block validity
* Breaker Block status
* Fibonacci retracement position
* Premium or discount location
* Liquidity sweep confirmation
* Fair Value Gap interaction
* Price-action confirmation
* Setup invalidation conditions
* Signal repetition controls
This filtering process is intended to reduce low-quality signals and prevent unnecessary entries during unclear or conflicting market conditions.
---
## Entry Confirmation
Depending on the selected settings and trading style, traders may use the indicator in two different ways.
### Aggressive Entry
An aggressive entry may be considered when price first touches a qualified Order Block, Breaker Block, Fair Value Gap, or OTE zone.
This approach may provide a better entry price but generally involves a higher risk of invalidation.
### Confirmed Entry
A confirmed entry requires an additional price-action reaction after price reaches the relevant zone.
Confirmation may include:
* Bullish or bearish rejection
* Engulfing candle formation
* Lower-timeframe structural shift
* Reclaim of an Order Block
* Break and retest
* Strong displacement away from the zone
Confirmed entries may occur later, but they can provide additional evidence that the expected reaction has started.
---
## Risk and Invalidation Logic
Every Smart Money Concepts setup requires a clearly defined invalidation point.
For bullish scenarios, invalidation may occur when:
* Price closes below the relevant Bullish Order Block
* The protected swing low is broken
* Bullish market structure fails
* The selected Fibonacci range becomes invalid
* Price creates a confirmed bearish structural shift
For bearish scenarios, invalidation may occur when:
* Price closes above the relevant Bearish Order Block
* The protected swing high is broken
* Bearish market structure fails
* The selected Fibonacci range becomes invalid
* Price creates a confirmed bullish structural shift
Potential stop-loss areas can be evaluated beyond the relevant swing point, institutional zone, or structural invalidation level.
Potential profit targets can be planned around:
* Previous swing highs or lows
* Opposing liquidity pools
* Equal highs or equal lows
* Untested Order Blocks
* Fair Value Gaps
* External range liquidity
* Fibonacci extension levels
* 1.272 Fibonacci extension
* 1.618 Fibonacci extension
Risk management remains the responsibility of the trader. A valid technical setup does not guarantee a profitable outcome.
---
## Alerts
The indicator includes alert functionality for important market events and potential trading scenarios.
Depending on the enabled settings, alerts may be created for:
* Potential long setups
* Potential short setups
* Bullish Order Block interaction
* Bearish Order Block interaction
* Bullish Breaker Block interaction
* Bearish Breaker Block interaction
* Order Block invalidation
* Market structure breaks
* Bullish or bearish CHoCH
* Fibonacci OTE zone interaction
* Liquidity sweeps
* Confirmed entry conditions
PulseWire alerts can be used for manual notifications or connected to an external automation system through webhooks.
Before using webhook-based execution, traders should carefully test alert frequency, symbol formatting, timeframe behavior, and execution conditions.
---
## Recommended Workflow
A structured top-down analysis process may improve the effectiveness of the indicator.
### Step 1 — Determine the Higher-Timeframe Direction
Start by analyzing the broader market structure.
Identify whether the market is:
* Bullish
* Bearish
* Consolidating
* Transitioning between structures
### Step 2 — Mark Important Liquidity
Locate previous highs, previous lows, equal highs, equal lows, and other obvious liquidity pools.
### Step 3 — Wait for Liquidity to Be Taken
Observe whether price sweeps an important liquidity level before creating a structural shift.
### Step 4 — Confirm Market Structure
Wait for a BOS, CHoCH, or MSS that supports the expected direction.
### Step 5 — Identify the Institutional Zone
Locate the relevant Order Block, Breaker Block, or Fair Value Gap associated with the structural movement.
### Step 6 — Evaluate the Fibonacci Retracement
Check whether the institutional zone overlaps with the 0.618–0.786 Fibonacci OTE region.
### Step 7 — Wait for Price Reaction
Avoid entering only because price reached a zone. Observe whether price produces a meaningful reaction or lower-timeframe confirmation.
### Step 8 — Define Invalidation and Targets
Determine the invalidation point before entering the trade. Potential targets may be placed near opposing liquidity or Fibonacci extension levels.
---
## Timeframes and Markets
The indicator can be applied to different financial markets, including:
* Cryptocurrencies
* Forex
* Stocks
* Indices
* Futures
* Commodities
It can also be used across multiple chart timeframes.
Higher timeframes generally provide more significant market structure and institutional zones, while lower timeframes may provide more frequent but noisier setups.
For intraday trading, traders may combine a higher-timeframe directional bias with lower-timeframe entry confirmation.
For example:
* Higher timeframe for market direction
* Intermediate timeframe for Order Blocks and Fibonacci zones
* Lower timeframe for confirmation and execution
The ideal timeframe combination depends on the traded market, volatility, trading session, and individual risk profile.
---
## Chart Customization
The visual modules can be adjusted according to the trader’s preferred chart layout.
Available display options may include:
* Market structure labels
* BOS and CHoCH labels
* Bullish and bearish Order Blocks
* Breaker Blocks
* Fair Value Gaps
* Liquidity levels
* Fibonacci retracement levels
* OTE zones
* Premium and discount areas
* Long and short signals
* Invalidation levels
* Potential target levels
Disabling unnecessary modules can create a cleaner chart and make it easier to focus on the most relevant information.
---
## Important Notes
This indicator is designed as a market analysis and decision-support tool. It should not be used as a standalone guarantee of future price direction.
Smart Money Concepts involve interpretation. Market structure, Order Blocks, liquidity, and Fibonacci levels may behave differently depending on volatility, timeframe, market conditions, and the selected settings.
Before using the indicator in live trading:
* Test it on historical data.
* Use PulseWire Replay Mode.
* Test different symbols and timeframes.
* Evaluate alert behavior.
* Apply appropriate position sizing.
* Define risk before entering a trade.
* Avoid risking capital that you cannot afford to lose.
No indicator can eliminate risk, false signals, slippage, volatility, or unexpected market movements.
---
## Disclaimer
This indicator is provided for educational and informational purposes only. It does not constitute financial, investment, trading, or professional advice.
Past performance does not guarantee future results. All trading decisions, entries, exits, position sizes, stop-loss levels, and risk-management actions remain the sole responsibility of the user.
The developer is not responsible for any direct or indirect financial losses resulting from the use of this indicator.
Indicator

Primitive Charts - ExtremesSession structure, drawn where it happens.
Extremes tracks the high and low of the sessions you define — up to six time windows plus the previous day — and draws them as levels that behave the way session liquidity behaves: they form, they stand, and they stop the moment they are taken.
Primitive Charts starts from one conviction: a chart you spend hundreds of hours in front of shouldn't look the way someone else decided. So Extremes is built to be shaped like it's yours — because it is.
TIME ON EVERY LEVEL
Chart labels usually name a level; sometimes they price it. Extremes clocks it.
Every session extreme carries its formation time — Asia High @ 20:51 is not just where the session high sits, but the minute it printed. When a level is raided, the label swaps to the raid time — London High (09:42) — the moment it was taken. Two timestamps per level, resolved to the minute by a lower-timeframe precision feed, on any chart timeframe. Where a level formed and when it was taken is the whole story of session liquidity; Extremes keeps both on the chart.
THE RAID READ, YOUR WAY
A standing level projects forward. The first trade through it after its session closes is a raid — and what a taken level looks like is your call:
- Stop — the line ends on the raid bar: a clean record of where it was taken (default).
- Restyle — raided levels switch to their own style, width, and color (or keep each session's color), with the label showing raid time, formation time, price, or nothing.
- Extend through — raided levels keep projecting, for reading what price does after the take.
- Remove — taken levels leave the chart, so only standing liquidity remains.
WHAT IT DRAWS
- Session highs and lows for six configurable windows — Asia, London, and NY AM out of the box; Lunch, NY PM, and Power Hour ready to switch on — each with its own name and color.
- A standalone Previous Day row: the prior trading day's high, low, and midpoint (18:00–16:59 ET), with your choice of wording (Prev Day / PDH–PDL / Previous Day).
- Session midpoints — each range's equilibrium, pre-configured so a single switch turns it on. The label is yours (EQ, Equilibrium, Mid, 50% — whatever you call it), with the session name and price inline or on hover; anchor it trailing the chart or pinned at the session open with an optional open-line marker; on mitigation, freeze it in place or remove it once reached. Style, width, and color follow the session — or your own pick.
- Session boxes with separate forming / closed transparency.
ALERTS — FOUR FACTUAL EVENTS
Session open · Session closed · Midpoint mitigated · Raided. Messages are logs, not opinions:
Primitive Charts · London open (03:00 ET)
Primitive Charts · London closed
High @15342.50 (03:07 ET) / Low @15310.25 (05:42 ET)
Primitive Charts · London EQ mitigated (07:15 ET)
Primitive Charts · London High raided @15342.50 (10:47 ET)
1 of 2 session highs now taken — Asia still standing
The raid alert can carry that standing-liquidity map — how many session extremes on that side are now taken, and which still stand — and, if you want it, the level's formation time beside its raid time.
MAKE IT YOURS
Two traders running Extremes can end up with charts that look nothing alike. The whole surface is configurable:
- Sessions — name, window, and color per slot; or paste a single pcr-1 roster code to define the entire session set in one string, then override names or times per axis. Rosters are plain text: save them, share them, keep one per instrument.
- Labels — session-name prefix on or off; the wording as a preset (High / Low · H / L · Buy-side / Sell-side) or your own text per session; price and time inline or one hover away; the session name itself movable into the hover; letter case — as written, ALL CAPS, or lowercase.
- Placement — label positions (right side, outside or inside, at the extreme), line offset, line styles and widths, label sizes and fonts.
- Reading room — overlap resolution keeps coincident labels to one (or merges their names); extension scope (most recent session or all); Show today only; separate display and alert time-windows.
HONEST LIMITS
- Alerts fire on chart timeframes of 30 minutes and below, for the current window of each session.
- The session grid is ET (America/New_York), built and tuned for intraday futures sessions. It runs on other symbols with that context in mind.
- No signals, no predictions, no performance claims. It draws what happened, precisely.
Open source under the Mozilla Public License 2.0.
Indicator

Indicator

Indicator

Indicator

Penny stocks Pro Execution (15m & 1H HTF)🚀 Penny Stock Pro Execution (15m & 1H HTF Confluence)
📌 Overview
Penny stocks and low-float momentum plays rarely follow classic macro trends. Instead, they operate on violent spikes followed by rapid decay. Traditional trend-following strategies fail on these assets because by the time a higher timeframe trend is "confirmed," the move is already over and smart money is dumping into late buyers.
Penny Stock Pro Execution is purpose-built for intraday momentum execution (ideal on 5m to 15m charts while pulling non-repainting multi-timeframe data from 15m and 1H). It pinpoints precision entries at the exact micro-inflection point right as volume pours in, then equips you with automatic ATR risk structures to lock in profits before the spike dies.
⚡ The Penny Stock Dilemma: "Spike & Die" Dynamics
Unlike large-cap stocks that trend smoothly, penny stocks are driven by short squeezes, news catalysts, and liquidity grabs. They follow a distinct lifecycle:
* Accumulation / Compression: Low-volume consolidation near dynamic support.
* The Liquidity Spike: A sudden burst of volume causing an explosive move across 1–3 candles.
* The Distribution Decay: High-volume rejection, micro-structure break, and rapid dump back to baseline.
This script solves two crucial problems when trading these patterns:
* Prevents Chasing Top-of-Spike Moves: Uses strict HTF Extension Filters to block long signals when price is already stretched too far above the baseline.
* Captures Early Inflections: Combines Volume-Backed Pinbar Rejections and Micro Market Structure Shifts (MSS/CHoCH) on the lower timeframe to fire entries before the main move unfolds.
🔑 Key Features & Logic Breakdown
1. Non-Repainting Multi-Timeframe HUD (15m & 1H)
* Tracks higher timeframe EMA alignment, RSI momentum, ADX strength, and the last 6 candles using barmerge.gaps_on and lookahead_off to guarantee zero repainting.
2. Multi-Factor Confluence Scoring (1–6 Scale)
Signals are evaluated through a 6-point checklist. A setup must achieve a minimum confluence score of 4/6 to trigger an entry:
* HTF Trend Stack Alignment (1H alignment)
* HTF Mean-Reversion / Pullback Check (Ensures you aren't buying the absolute peak)
* 15m Trend Support
* 1H RSI Safety Gate (Filters out exhausted setups)
* Relative Volume Spike (\eg 1.2\times average volume)
* 5m RSI In-Zone Check
3. Dynamic Micro-Structure Trigger Logic
The script looks for one of two localized entry triggers:
* Volume-Backed Pinbar Rejections: Identifies high-wick candle rejections (\ge 40\% total range and 2\times body size) occurring at recent 8-candle extremes.
* Micro Market Structure Shifts (MSS): Confirms structural break of recent swing highs/lows on close basis.
4. Automated Risk Management Projection
Upon signal execution, the indicator dynamically projects horizontal level markers directly on the chart:
* Entry Line (White)
* Stop Loss (SL): ATR-based dynamic risk placement (Default: 1.5\times \text{ATR})
* Take Profit 1 & 2 (TP1 / TP2): 1.0\times and 2.0\times \text{ATR} targets to secure gains before the inevitable decay.
🛠️ How to Trade This Script
│
▼
───► 🚀 ENTRY SIGNAL FIRED (Score >= 4)
│
├──────► Take Profit 1 (1.0x ATR) ──► Scale out 50% & set SL to Entry
│
└──────► Take Profit 2 (2.0x ATR) ──► Fully exit before "Die" phase
* Chart Setup: Apply script to a 5-minute chart (or 3-minute for fast momentum plays).
* Wait for Signal: Look for a green LONG or red SHORT triangle supported by a score label on the TP2 line.
* Execution Rules:
* TP1 (1.0\times \text{ATR}): Sell 50% of position immediately. Move Stop Loss to breakeven.
* TP2 (2.0\times \text{ATR}): Clear out the remaining position. Do not hold penny stocks hoping for a overnight hold unless HTF is breaking out with unprecedented volume.
⚙️ Recommended Inputs
* Medium Timeframe: 15
* Higher Timeframe: 60 (1H)
* HTF Extension Threshold: 1.5% (Adjust higher for extreme low-float runners)
* Relative Vol Multiplier: 1.2x - 1.5x
Disclaimer: Penny stocks carry high volatility and slippage risk. This script is designed for momentum scalping and active intraday risk management. Always trade with strict stop losses. Indicator

Indicator

Indicator

Combined Breaker Blocks with Imbalance Filter//@version=6
indicator("Combined Breaker Blocks with Imbalance Filter", shorttitle = "Combined Breakers + Imbalance", overlay = true, behind_chart = false, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500, max_bars_back = 5000)
import PulseWire/ta/12
// ============================================================================
// BỘ LỌC IMBALANCE (FVG)
// ============================================================================
grp_imb = "Bộ Lọc Imbalance (FVG)"
useImbalanceFilter = input.bool(true, title = "Chỉ giữ OB có Imbalance (FVG)", group = grp_imb, tooltip = "Lọc bỏ những vùng OB/Breaker không có khoảng trống giá Imbalance xung quanh.")
// Hàm kiểm tra Imbalance
f_has_imbalance_bull() =>
// Bullish Imbalance (FVG Tăng): Giá cao nhất cây 2 thanh trước thấp hơn giá thấp nhất cây hiện tại
(high < low) or (high < low ) or (high < low)
f_has_imbalance_bear() =>
// Bearish Imbalance (FVG Giảm): Giá thấp nhất cây 2 thanh trước cao hơn giá cao nhất cây hiện tại
(low > high) or (low > high ) or (low > high)
// ============================================================================
// SECTION 1: ALGOALPHA BREAKER BLOCKS
// ============================================================================
// --- Inputs (AlgoAlpha) ---
preventOverlap = input.bool(true, title = "Prevent Overlap", group = "AlgoAlpha - Calculation", tooltip = "When enabled, new orderblocks will not be created if their price range overlaps any existing active orderblock.")
zLen = input.int(100, title = "Z-Score Window (bars)", minval = 1, group = "AlgoAlpha - Calculation", tooltip = "Lookback window used to normalize the impulse distance into a z-score.")
maxAge = input.int(500, title = "Max Box Age (bars)", minval = 1, group = "AlgoAlpha - Calculation", tooltip = "Maximum lifetime (in bars) of an orderblock that has not been mitigated.")
bullCol = input.color(#00ffbb, title = "Bullish Colour", group = "AlgoAlpha - Appearance", tooltip = "Color used for bullish breaker zones and bullish signals.")
bearCol = input.color(#ff1100, title = "Bearish Colour", group = "AlgoAlpha - Appearance", tooltip = "Color used for bearish breaker zones and bearish signals.")
// --- Calculations (AlgoAlpha) ---
var updist = 0.0
var downdist = 0.0
updist := close > open ? nz(updist ) + (close - open) : 0.0
downdist := close < open ? nz(downdist ) + (open - close) : 0.0
upMean = ta.sma(updist, zLen)
upStdev = ta.stdev(updist, zLen)
dnMean = ta.sma(downdist, zLen)
dnStdev = ta.stdev(downdist, zLen)
zUp = (updist - upMean) / (upStdev == 0.0 ? na : upStdev)
zDn = (downdist - dnMean) / (dnStdev == 0.0 ? na : dnStdev)
// Bổ sung lọc Imbalance cho tín hiệu AlgoAlpha
bullish = ta.crossover(zUp, 4) and nz(zUp ) != 0 and (not useImbalanceFilter or f_has_imbalance_bull())
bearish = ta.crossunder(-zDn, -4) and nz((-zDn) ) != 0 and (not useImbalanceFilter or f_has_imbalance_bear())
var box bullBoxes = array.new()
var box bearBoxes = array.new()
var int bullStarts = array.new_int()
var int bearStarts = array.new_int()
var line bullMidLines = array.new()
var line bearMidLines = array.new()
var box breakerBullBoxes = array.new()
var box breakerBearBoxes = array.new()
var int breakerBullStarts = array.new_int()
var int breakerBearStarts = array.new_int()
var line breakerBullMidLines = array.new()
var line breakerBearMidLines = array.new()
breakerBullPlot = float(na)
breakerBearPlot = float(na)
rejectBullPlot = float(na)
rejectBearPlot = float(na)
f_can_create(float tNew, float bNew) =>
bool ok = true
if bullBoxes.size() > 0
for j = 0 to array.size(bullBoxes) - 1
exB = array.get(bullBoxes, j)
float exTop = box.get_top(exB)
float exBot = box.get_bottom(exB)
if (tNew > exBot) and (bNew < exTop)
ok := false
break
if ok and bearBoxes.size() > 0
for j = 0 to array.size(bearBoxes) - 1
exS = array.get(bearBoxes, j)
float exTop2 = box.get_top(exS)
float exBot2 = box.get_bottom(exS)
if (tNew > exBot2) and (bNew < exTop2)
ok := false
break
if ok and breakerBullBoxes.size() > 0
for j = 0 to array.size(breakerBullBoxes) - 1
exB = array.get(breakerBullBoxes, j)
float exTop = box.get_top(exB)
float exBot = box.get_bottom(exB)
if (tNew > exBot) and (bNew < exTop)
ok := false
break
if ok and breakerBearBoxes.size() > 0
for j = 0 to array.size(breakerBearBoxes) - 1
exS = array.get(breakerBearBoxes, j)
float exTop2 = box.get_top(exS)
float exBot2 = box.get_bottom(exS)
if (tNew > exBot2) and (bNew < exTop2)
ok := false
break
ok
f_can_create_breaker(float tNew, float bNew) =>
f_can_create(tNew, bNew)
lastDownIdx = ta.valuewhen(close < open, bar_index, 0)
lastDownHigh = ta.valuewhen(close < open, high, 0)
lastDownLow = ta.valuewhen(close < open, low, 0)
breakerBullPlot := na
breakerBearPlot := na
rejectBullPlot := na
rejectBearPlot := na
if bullish and not na(lastDownIdx) and not na(lastDownHigh) and not na(lastDownLow)
if not preventOverlap or f_can_create(lastDownHigh, lastDownLow)
float midYB = (lastDownHigh + lastDownLow) / 2.0
bx = box.new(lastDownIdx, lastDownHigh, lastDownIdx + 1, lastDownLow, border_color = color.new(color.gray, 40), bgcolor = color.new(color.gray, 85))
ln = line.new(x1 = lastDownIdx, y1 = midYB, x2 = lastDownIdx + 1, y2 = midYB, xloc = xloc.bar_index, extend = extend.none, color = color.new(color.gray, 40), style = line.style_dashed, width = 1)
array.unshift(bullBoxes, bx)
array.unshift(bullStarts, lastDownIdx)
array.unshift(bullMidLines, ln)
lastUpIdx = ta.valuewhen(close > open, bar_index, 0)
lastUpHigh = ta.valuewhen(close > open, high, 0)
lastUpLow = ta.valuewhen(close > open, low, 0)
if bearish and not na(lastUpIdx) and not na(lastUpHigh) and not na(lastUpLow)
if not preventOverlap or f_can_create(lastUpHigh, lastUpLow)
float midYS = (lastUpHigh + lastUpLow) / 2.0
bx2 = box.new(lastUpIdx, lastUpHigh, lastUpIdx + 1, lastUpLow, border_color = color.new(color.gray, 40), bgcolor = color.new(color.gray, 85))
ln2 = line.new(x1 = lastUpIdx, y1 = midYS, x2 = lastUpIdx + 1, y2 = midYS, xloc = xloc.bar_index, extend = extend.none, color = color.new(color.gray, 40), style = line.style_dashed, width = 1)
array.unshift(bearBoxes, bx2)
array.unshift(bearStarts, lastUpIdx)
array.unshift(bearMidLines, ln2)
if bullBoxes.size() > 0
for i = array.size(bullBoxes) - 1 to 0
if array.size(bullBoxes) <= i or array.size(bullStarts) <= i
continue
b = array.get(bullBoxes, i)
box.set_right(b, bar_index)
if array.size(bullMidLines) > i
ln = array.get(bullMidLines, i)
float topB = box.get_top(b)
float botB = box.get_bottom(b)
float midY = (topB + botB) / 2.0
int leftX = box.get_left(b)
line.set_x1(ln, leftX)
line.set_x2(ln, bar_index)
line.set_y1(ln, midY)
line.set_y2(ln, midY)
float topB = box.get_top(b)
float botB = box.get_bottom(b)
bool mitigatedB = close < botB and close < botB
int startB = array.get(bullStarts, i)
bool expiredB = (bar_index - startB) >= maxAge
if mitigatedB or expiredB
bool makeBreaker = mitigatedB
array.remove(bullBoxes, i)
array.remove(bullStarts, i)
if array.size(bullMidLines) > i
array.remove(bullMidLines, i)
if makeBreaker and (not preventOverlap or f_can_create_breaker(topB, botB))
float midYB = (topB + botB) / 2.0
int leftX = bar_index
bxBr = box.new(leftX, topB, leftX + 1, botB, border_color = color.new(bearCol, 40), bgcolor = color.new(bearCol, 85))
lnBr = line.new(x1 = leftX, y1 = midYB, x2 = leftX + 1, y2 = midYB, xloc = xloc.bar_index, extend = extend.none, color = color.new(bearCol, 40), style = line.style_dashed, width = 1)
array.unshift(breakerBearBoxes, bxBr)
array.unshift(breakerBearStarts, leftX)
array.unshift(breakerBearMidLines, lnBr)
breakerBearPlot := topB
if bearBoxes.size() > 0
for i = array.size(bearBoxes) - 1 to 0
if array.size(bearBoxes) <= i or array.size(bearStarts) <= i
continue
b = array.get(bearBoxes, i)
box.set_right(b, bar_index)
if array.size(bearMidLines) > i
ln = array.get(bearMidLines, i)
float topS = box.get_top(b)
float botS = box.get_bottom(b)
float midY = (topS + botS) / 2.0
int leftX = box.get_left(b)
line.set_x1(ln, leftX)
line.set_x2(ln, bar_index)
line.set_y1(ln, midY)
line.set_y2(ln, midY)
float topS = box.get_top(b)
float botS = box.get_bottom(b)
bool mitigatedS = close > topS and close > topS
int startS = array.get(bearStarts, i)
bool expiredS = (bar_index - startS) >= maxAge
if mitigatedS or expiredS
bool makeBreaker = mitigatedS
array.remove(bearBoxes, i)
array.remove(bearStarts, i)
if array.size(bearMidLines) > i
array.remove(bearMidLines, i)
if makeBreaker and (not preventOverlap or f_can_create_breaker(topS, botS))
float midYS = (topS + botS) / 2.0
int leftX = bar_index
bxBr = box.new(leftX, topS, leftX + 1, botS, border_color = color.new(bullCol, 40), bgcolor = color.new(bullCol, 85))
lnBr = line.new(x1 = leftX, y1 = midYS, x2 = leftX + 1, y2 = midYS, xloc = xloc.bar_index, extend = extend.none, color = color.new(bullCol, 40), style = line.style_dashed, width = 1)
array.unshift(breakerBullBoxes, bxBr)
array.unshift(breakerBullStarts, leftX)
array.unshift(breakerBullMidLines, lnBr)
breakerBullPlot := botS
if breakerBullBoxes.size() > 0
for i = array.size(breakerBullBoxes) - 1 to 0
if array.size(breakerBullBoxes) <= i or array.size(breakerBullStarts) <= i
continue
b = array.get(breakerBullBoxes, i)
box.set_right(b, bar_index)
if array.size(breakerBullMidLines) > i
ln = array.get(breakerBullMidLines, i)
float topB = box.get_top(b)
float botB = box.get_bottom(b)
float midY = (topB + botB) / 2.0
int leftX = box.get_left(b)
line.set_x1(ln, leftX)
line.set_x2(ln, bar_index)
line.set_y1(ln, midY)
line.set_y2(ln, midY)
float topB = box.get_top(b)
float botB = box.get_bottom(b)
bool mitigatedB = close < botB and close < botB
int startB = array.get(breakerBullStarts, i)
bool expiredB = (bar_index - startB) >= maxAge
if not mitigatedB and not expiredB and high > botB and low < topB and close > topB
float pad = math.max(math.abs(topB - botB) * 0.1, syminfo.mintick * 2)
rejectBullPlot := botB - pad
if mitigatedB or expiredB
array.remove(breakerBullBoxes, i)
array.remove(breakerBullStarts, i)
if array.size(breakerBullMidLines) > i
array.remove(breakerBullMidLines, i)
if breakerBearBoxes.size() > 0
for i = array.size(breakerBearBoxes) - 1 to 0
if array.size(breakerBearBoxes) <= i or array.size(breakerBearStarts) <= i
continue
b = array.get(breakerBearBoxes, i)
box.set_right(b, bar_index)
if array.size(breakerBearMidLines) > i
ln = array.get(breakerBearMidLines, i)
float topS = box.get_top(b)
float botS = box.get_bottom(b)
float midY = (topS + botS) / 2.0
int leftX = box.get_left(b)
line.set_x1(ln, leftX)
line.set_x2(ln, bar_index)
line.set_y1(ln, midY)
line.set_y2(ln, midY)
float topS = box.get_top(b)
float botS = box.get_bottom(b)
bool mitigatedS = close > topS and close > topS
int startS = array.get(breakerBearStarts, i)
bool expiredS = (bar_index - startS) >= maxAge
if not mitigatedS and not expiredS and high > botS and low < topS and close < botS
float pad = math.max(math.abs(topS - botS) * 0.1, syminfo.mintick * 2)
rejectBearPlot := topS + pad
if mitigatedS or expiredS
array.remove(breakerBearBoxes, i)
array.remove(breakerBearStarts, i)
if array.size(breakerBearMidLines) > i
array.remove(breakerBearMidLines, i)
// --- Plots (AlgoAlpha) ---
breakerBullFormed = not na(breakerBullPlot)
breakerBearFormed = not na(breakerBearPlot)
rejectBull = not na(rejectBullPlot)
rejectBear = not na(rejectBearPlot)
plotshape(breakerBullPlot, "Bullish Breaker ", shape.labelup, location.absolute, bullCol, size = size.tiny, text = "▲", textcolor = chart.fg_color)
plotshape(breakerBearPlot, "Bearish Breaker ", shape.labeldown, location.absolute, bearCol, size = size.tiny, text = "▼", textcolor = chart.fg_color)
plotchar(rejectBullPlot, title = "Bullish Rejection ", char = "▲", location = location.absolute, color = bullCol, size = size.tiny)
plotchar(rejectBearPlot, title = "Bearish Rejection ", char = "▼", location = location.absolute, color = bearCol, size = size.tiny)
// ============================================================================
// SECTION 2: VOLUMIZED BREAKER BLOCKS
// ============================================================================
const bool DEBUG = false
const int maxBoxesCount = 500
const float overlapThresholdPercentage = 0
const int maxDistanceToLastBar = 1750
const int maxOrderBlocks = 60
var bool initRun = true
// --- Inputs (Flux Charts) ---
showInvalidated = input.bool(true, "Show Historic Zones", group = "Flux Charts - Configuration", display = display.none)
OBsEnabled = true
breakBlockVolumetricInfo = input.bool(false, "Volumetric Info", group = "Flux Charts - Configuration", inline="EV", display = display.none)
obEndMethod = input.string("Close", "Order Block Invalidation", options = , group = "Flux Charts - Configuration", display = display.none)
bbEndMethod = input.string("Close", "Breaker Block Invalidation", options = , group = "Flux Charts - Configuration", display = display.none)
combineOBs = DEBUG ? input.bool(true, "Combine Zones", group = "Flux Charts - Configuration", display = display.none) : true
maxATRMult = DEBUG ? input.float(3.5,"Max Atr Multiplier", group = "Flux Charts - Configuration") : 3.5
swingLength = input.int(10, 'Swing Length', minval = 3, tooltip="Swing length is used when finding breaker block formations.", group = "Flux Charts - Configuration", display = display.none)
zoneCount = input.string("Low", 'Zone Count', options = , tooltip = "Number of Breaker Block Zones to be rendered.", group = "Flux Charts - Configuration", display = display.none)
bullishBreakerBlockColor = input(color.new(#2962ff, 75), "Bullish Breaker", inline = 'breakerColor', group = 'Flux Charts - Configuration', display = display.none)
bearishBreakerBlockColor = input(color.new(#ffeb3b, 75), "Bearish Breaker", inline = 'breakerColor', group = 'Flux Charts - Configuration', display = display.none)
bullishBreakerBlocks = zoneCount == "Low" ? 3 : zoneCount == "Medium" ? 5 : 10
bearishBreakerBlocks = zoneCount == "Low" ? 3 : zoneCount == "Medium" ? 5 : 10
bullishOrderBlocks = zoneCount == "Low" ? 15 : zoneCount == "Medium" ? 30 : 60
bearishOrderBlocks = zoneCount == "Low" ? 15 : zoneCount == "Medium" ? 30 : 60
BBsEnabled = true
timeframe1Enabled = true
timeframe1 = ""
breakersFull = DEBUG ? input.bool(true, "Breakers Full", group = "Flux Charts - Style", display = display.none) : true
textColor = input.color(#ffffff80, "Text Color", group = "Flux Charts - Style")
combinedText = DEBUG ? input.bool(false, "Combined Text", group = "Flux Charts - Style", inline = "CombinedColor") : false
atr = ta.atr(10)
// --- Types (Flux Charts) ---
type orderBlockInfo
float top
float bottom
float obVolume
string obType
int startTime
float bbVolume
float obLowVolume
float obHighVolume
bool breaker
int breakTime
string timeframeStr
bool disabled = false
string combinedTimeframesStr = na
bool combined = false
type orderBlock
orderBlockInfo info
bool isRendered = false
box orderBox = na
box breakerBox = na
line orderBoxLineTop = na
line orderBoxLineBottom = na
line breakerBoxLineTop = na
line breakerBoxLineBottom = na
box orderBoxText = na
box orderBoxPositive = na
box orderBoxNegative = na
line orderSeperator = na
line orderTextSeperator = na
createOrderBlock(orderBlockInfo orderBlockInfoF) =>
orderBlock newOrderBlock = orderBlock.new(orderBlockInfoF)
newOrderBlock
safeDeleteOrderBlock(orderBlock orderBlockF) =>
orderBlockF.isRendered := false
box.delete(orderBlockF.orderBox)
box.delete(orderBlockF.breakerBox)
box.delete(orderBlockF.orderBoxText)
box.delete(orderBlockF.orderBoxPositive)
box.delete(orderBlockF.orderBoxNegative)
line.delete(orderBlockF.orderBoxLineTop)
line.delete(orderBlockF.orderBoxLineBottom)
line.delete(orderBlockF.breakerBoxLineTop)
line.delete(orderBlockF.breakerBoxLineBottom)
line.delete(orderBlockF.orderSeperator)
line.delete(orderBlockF.orderTextSeperator)
type timeframeInfo
int index = na
string timeframeStr = na
bool isEnabled = false
orderBlockInfo bullishOrderBlocksList = na
orderBlockInfo bearishOrderBlocksList = na
newTimeframeInfo(index, timeframeStr, isEnabled) =>
newTFInfo = timeframeInfo.new()
newTFInfo.index := index
newTFInfo.isEnabled := isEnabled
newTFInfo.timeframeStr := timeframeStr
newTFInfo
type obSwing
int x = na
float y = na
float swingVolume = na
bool crossed = false
var timeframeInfo timeframeInfos = array.from(newTimeframeInfo(1, timeframe1, timeframe1Enabled))
var bullishOrderBlocksList = array.new(0)
var bearishOrderBlocksList = array.new(0)
var allOrderBlocksList = array.new(0)
// --- Helper Functions (Flux Charts) ---
renderOrderBlock(orderBlock ob) =>
orderBlockInfo info = ob.info
ob.isRendered := true
breakerBlockColor = ob.info.obType == "Bull" ? bearishBreakerBlockColor : bullishBreakerBlockColor
if info.breaker and BBsEnabled
startTime = (OBsEnabled and not breakersFull) ? info.breakTime : info.startTime
ob.breakerBox := box.new(startTime, info.top, time + 1, info.bottom, na, bgcolor = breakerBlockColor, extend = extend.none, xloc = xloc.bar_time, text_color = textColor, text_size = size.normal)
BBText = (na(ob.info.combinedTimeframesStr) ? (ob.info.timeframeStr == "" ? timeframe.period : ob.info.timeframeStr) : ob.info.combinedTimeframesStr) + " BB"
box.set_text(ob.breakerBox, (breakBlockVolumetricInfo ? str.tostring(ob.info.bbVolume, format.volume) + " " : "") + (combinedText and ob.info.combined ? " " : "") + BBText)
ob.breakerBoxLineTop := line.new(startTime, info.top, time + 1, info.top, xloc.bar_time, extend.none, color.new(breakerBlockColor, 0), line.style_dashed)
ob.breakerBoxLineBottom := line.new(startTime, info.bottom, time + 1, info.bottom, xloc.bar_time, extend.none, color.new(breakerBlockColor, 0), line.style_dashed)
findOBSwings(len) =>
var swingType = 0
var obSwing top = obSwing.new(na, na)
var obSwing bottom = obSwing.new(na, na)
upper = ta.highest(len)
lower = ta.lowest(len)
swingType := high > upper ? 0 : low < lower ? 1 : swingType
if swingType == 0 and swingType != 0
top := obSwing.new(bar_index , high , volume )
if swingType == 1 and swingType != 1
bottom := obSwing.new(bar_index , low , volume )
findOrderBlocks() =>
if bar_index > last_bar_index - maxDistanceToLastBar
= findOBSwings(swingLength)
useBody = false
max = useBody ? math.max(close, open) : high
min = useBody ? math.min(close, open) : low
// Bullish Order Block (có bổ sung kiểm tra Imbalance)
if bullishOrderBlocksList.size() > 0
for i = bullishOrderBlocksList.size() - 1 to 0
currentOB = bullishOrderBlocksList.get(i)
if not currentOB.breaker
if ((obEndMethod == "Wick" ? low : close) < currentOB.bottom)
currentOB.breaker := true
currentOB.breakTime := time
currentOB.bbVolume := volume
else
if (bbEndMethod == "Wick" ? high : close) > currentOB.top
bullishOrderBlocksList.remove(i)
if close > top.y and not top.crossed and (not useImbalanceFilter or f_has_imbalance_bull())
top.crossed := true
boxBtm = max
boxTop = min
boxLoc = time
for i = 1 to (bar_index - top.x) - 1
boxBtm := math.min(min , boxBtm)
boxTop := boxBtm == min ? max : boxTop
boxLoc := boxBtm == min ? time : boxLoc
newOrderBlockInfo = orderBlockInfo.new(boxTop, boxBtm, volume + volume + volume , "Bull", boxLoc)
newOrderBlockInfo.obLowVolume := volume
newOrderBlockInfo.obHighVolume := volume + volume
obSize = math.abs(newOrderBlockInfo.top - newOrderBlockInfo.bottom)
if obSize <= atr * maxATRMult
bullishOrderBlocksList.unshift(newOrderBlockInfo)
if bullishOrderBlocksList.size() > maxOrderBlocks
bullishOrderBlocksList.pop()
// Bearish Order Block (có bổ sung kiểm tra Imbalance)
if bearishOrderBlocksList.size() > 0
for i = bearishOrderBlocksList.size() - 1 to 0
currentOB = bearishOrderBlocksList.get(i)
if not currentOB.breaker
if (obEndMethod == "Wick" ? high : close) > currentOB.top
currentOB.breaker := true
currentOB.breakTime := time
currentOB.bbVolume := volume
else
if (bbEndMethod == "Wick" ? low : close) < currentOB.bottom
bearishOrderBlocksList.remove(i)
if close < btm.y and not btm.crossed and (not useImbalanceFilter or f_has_imbalance_bear())
btm.crossed := true
boxBtm = min
boxTop = max
boxLoc = time
for i = 1 to (bar_index - btm.x) - 1
boxTop := math.max(max , boxTop)
boxBtm := boxTop == max ? min : boxBtm
boxLoc := boxTop == max ? time : boxLoc
newOrderBlockInfo = orderBlockInfo.new(boxTop, boxBtm, volume + volume + volume , "Bear", boxLoc)
newOrderBlockInfo.obLowVolume := volume + volume
newOrderBlockInfo.obHighVolume := volume
obSize = math.abs(newOrderBlockInfo.top - newOrderBlockInfo.bottom)
if obSize <= atr * maxATRMult
bearishOrderBlocksList.unshift(newOrderBlockInfo)
if bearishOrderBlocksList.size() > maxOrderBlocks
bearishOrderBlocksList.pop()
true
areaOfOB(orderBlockInfo OBInfoF) =>
float XA1 = OBInfoF.startTime
float XA2 = na(OBInfoF.breakTime) ? time + 1 : OBInfoF.breakTime
float YA1 = OBInfoF.top
float YA2 = OBInfoF.bottom
float edge1 = math.sqrt((XA2 - XA1) * (XA2 - XA1) + (YA2 - YA2) * (YA2 - YA2))
float edge2 = math.sqrt((XA2 - XA2) * (XA2 - XA2) + (YA2 - YA1) * (YA2 - YA1))
edge1 * edge2
doOBsTouch(orderBlockInfo OBInfo1, orderBlockInfo OBInfo2) =>
float XA1 = OBInfo1.startTime
float XA2 = na(OBInfo1.breakTime) ? time + 1 : OBInfo1.breakTime
float YA1 = OBInfo1.top
float YA2 = OBInfo1.bottom
float XB1 = OBInfo2.startTime
float XB2 = na(OBInfo2.breakTime) ? time + 1 : OBInfo2.breakTime
float YB1 = OBInfo2.top
float YB2 = OBInfo2.bottom
float intersectionArea = math.max(0, math.min(XA2, XB2) - math.max(XA1, XB1)) * math.max(0, math.min(YA1, YB1) - math.max(YA2, YB2))
float unionArea = areaOfOB(OBInfo1) + areaOfOB(OBInfo2) - intersectionArea
float overlapPercentage = (intersectionArea / unionArea) * 100.0
overlapPercentage > overlapThresholdPercentage
isOBValid(orderBlockInfo OBInfo) =>
not OBInfo.disabled
combineOBsFunc() =>
if allOrderBlocksList.size() > 0
lastCombinations = 999
while lastCombinations > 0
lastCombinations := 0
for i = 0 to allOrderBlocksList.size() - 1
curOB1 = allOrderBlocksList.get(i)
for j = 0 to allOrderBlocksList.size() - 1
curOB2 = allOrderBlocksList.get(j)
if i == j or not isOBValid(curOB1.info) or not isOBValid(curOB2.info) or curOB1.info.obType != curOB2.info.obType
continue
if doOBsTouch(curOB1.info, curOB2.info)
curOB1.info.disabled := true
curOB2.info.disabled := true
orderBlock newOB = createOrderBlock(orderBlockInfo.new(math.max(curOB1.info.top, curOB2.info.top), math.min(curOB1.info.bottom, curOB2.info.bottom), curOB1.info.obVolume + curOB2.info.obVolume, curOB1.info.obType))
newOB.info.startTime := math.min(curOB1.info.startTime, curOB2.info.startTime)
newOB.info.breakTime := math.max(nz(curOB1.info.breakTime), nz(curOB2.info.breakTime))
newOB.info.breakTime := newOB.info.breakTime == 0 ? na : newOB.info.breakTime
newOB.info.timeframeStr := curOB1.info.timeframeStr
newOB.info.obVolume := curOB1.info.obVolume + curOB2.info.obVolume
newOB.info.obLowVolume := curOB1.info.obLowVolume + curOB2.info.obLowVolume
newOB.info.obHighVolume := curOB1.info.obHighVolume + curOB2.info.obHighVolume
newOB.info.bbVolume := nz(curOB1.info.bbVolume, 0) + nz(curOB2.info.bbVolume, 0)
newOB.info.breaker := curOB1.info.breaker or curOB2.info.breaker
newOB.info.combined := true
allOrderBlocksList.unshift(newOB)
lastCombinations += 1
reqSeq(timeframeStr) =>
request.security(syminfo.tickerid, timeframeStr, )
getTFData(timeframeInfo timeframeInfoF, timeframeStr) =>
if timeframeInfoF.isEnabled
reqSeq(timeframeStr)
else
handleTimeframeInfo(timeframeInfo timeframeInfoF, bullishOrderBlocksListF, bearishOrderBlocksListF) =>
if timeframeInfoF.isEnabled
timeframeInfoF.bullishOrderBlocksList := bullishOrderBlocksListF
timeframeInfoF.bearishOrderBlocksList := bearishOrderBlocksListF
arrHasOB(orderBlock arr, orderBlock obF) =>
hasOB = false
if arr.size() > 0
for i = 0 to arr.size() - 1
orderBlock ob1 = arr.get(i)
if isOBValid(ob1.info) and isOBValid(obF.info) and (ob1.info.breaker == obF.info.breaker) and doOBsTouch(ob1.info, obF.info)
hasOB := true
break
hasOB
bool newBullishBBTick = false
bool newBearishBBTick = false
handleOrderBlocksFinal() =>
newBullishOBAlert = false
newBearishOBAlert = false
newBullishBBAlert = false
newBearishBBAlert = false
alertTimeOB = ""
alertTimeBB = ""
orderBlock orderBlocksToAdd = array.new(0)
for i = 0 to timeframeInfos.size() - 1
curTimeframe = timeframeInfos.get(i)
if not curTimeframe.isEnabled
continue
if not na(curTimeframe.bullishOrderBlocksList)
if curTimeframe.bullishOrderBlocksList.size() > 0
for j = 0 to math.min(curTimeframe.bullishOrderBlocksList.size() - 1, bullishOrderBlocks - 1)
orderBlockInfoF = curTimeframe.bullishOrderBlocksList.get(j)
orderBlockInfoF.timeframeStr := curTimeframe.timeframeStr
orderBlocksToAdd.unshift(createOrderBlock(orderBlockInfo.copy(orderBlockInfoF)))
if not na(curTimeframe.bearishOrderBlocksList)
if curTimeframe.bearishOrderBlocksList.size() > 0
for j = 0 to math.min(curTimeframe.bearishOrderBlocksList.size() - 1, bearishOrderBlocks - 1)
orderBlockInfoF = curTimeframe.bearishOrderBlocksList.get(j)
orderBlockInfoF.timeframeStr := curTimeframe.timeframeStr
orderBlocksToAdd.unshift(createOrderBlock(orderBlockInfo.copy(orderBlockInfoF)))
if orderBlocksToAdd.size() > 0
for i = 0 to orderBlocksToAdd.size() - 1
obToTest = orderBlocksToAdd.get(i)
if obToTest.info.breaker == false
if not arrHasOB(allOrderBlocksList, obToTest)
alertTimeOB := obToTest.info.timeframeStr
if obToTest.info.obType == "Bull"
newBullishOBAlert := true
else
newBearishOBAlert := true
else
if not arrHasOB(allOrderBlocksList, obToTest)
alertTimeBB := obToTest.info.timeframeStr
if obToTest.info.obType == "Bull"
newBearishBBAlert := true
else
newBullishBBAlert := true
if allOrderBlocksList.size() > 0
for i = 0 to allOrderBlocksList.size() - 1
safeDeleteOrderBlock(allOrderBlocksList.get(i))
allOrderBlocksList.clear()
if orderBlocksToAdd.size() > 0
for i = 0 to orderBlocksToAdd.size() - 1
allOrderBlocksList.unshift(orderBlocksToAdd.get(i))
if combineOBs
combineOBsFunc()
if allOrderBlocksList.size() > 0
for i = 0 to allOrderBlocksList.size() - 1
curOB = allOrderBlocksList.get(i)
if isOBValid(curOB.info)
renderOrderBlock(curOB)
findOrderBlocks()
= getTFData(timeframeInfos.get(0), timeframe1)
if barstate.isconfirmed and (bar_index > last_bar_index - maxDistanceToLastBar)
handleTimeframeInfo(timeframeInfos.get(0), bullishOrderBlocksListTimeframe1, bearishOrderBlocksListTimeframe1)
= handleOrderBlocksFinal()
if newBullishBBAlert
newBullishBBTick := true
if newBearishBBAlert
newBearishBBTick := true
// --- Alerts (Flux Charts) ---
alertcondition((newBullishBBTick or newBearishBBTick) and not initRun, "Breaker Block Formation ", "A new Breaker Block has formed.")
alertcondition(newBullishBBTick and not initRun, "Bullish Breaker Block Formation ", "A new Bullish Breaker Block has formed.")
alertcondition(newBearishBBTick and not initRun, "Bearish Breaker Block Formation ", "A new Bearish Breaker Block has formed.")
if barstate.isconfirmed
initRun := false Indicator

Indicator

Fair Value Gaps Standalone [Rivasjr]English
Fair Value Gaps Standalone is a Pine Script® v6 indicator designed to identify and display bullish and bearish Fair Value Gaps directly on the chart.
A Fair Value Gap is a three-candle price imbalance that appears when part of the price range between the first and third candles is not traded. These areas can help traders visualize zones where price moved with displacement and where future interaction may occur.
Main features
Detects bullish and bearish Fair Value Gaps.
Displays each imbalance as a two-part shaded zone.
Supports the chart timeframe or a user-selected detection timeframe.
Includes an automatic threshold to filter less significant imbalances.
Allows users to control the horizontal extension of each FVG.
Can automatically remove fully mitigated Fair Value Gaps.
Provides independent colors for bullish and bearish zones.
How the indicator works
A bullish Fair Value Gap is identified when the low of the third candle remains above the high of the first candle and the displacement conditions are satisfied.
A bearish Fair Value Gap is identified when the high of the third candle remains below the low of the first candle and the displacement conditions are satisfied.
Each detected imbalance is divided at its midpoint and displayed using two boxes. Both boxes belong to the same Fair Value Gap and are removed together when full mitigation is enabled and price completely crosses the corresponding invalidation boundary.
Settings translation
Fair Value Gaps: Shows or hides detected Fair Value Gaps.
Auto Threshold: Automatically filters less significant gaps.
Intervalo de tiempo / Timeframe: Selects the timeframe used for FVG detection. Selecting “Chart” uses the current chart timeframe.
Bullish FVG: Sets the color of bullish Fair Value Gaps.
Bearish FVG: Sets the color of bearish Fair Value Gaps.
Extend FVG: Sets the number of additional bars used to extend each zone.
Eliminar FVG mitigados / Delete mitigated FVGs: Removes a zone after price completely crosses its mitigation boundary.
Important information
This indicator identifies price imbalances only. It does not generate entries, exits, profit targets, stop-loss levels, or trading recommendations. Fair Value Gaps should be evaluated together with market structure, liquidity, volume, trend, session context, and appropriate risk management.
Historical and real-time behavior can differ while a higher-timeframe candle is still developing. Users should understand the selected detection timeframe before using the indicator in their analysis.
Credits
Original Fair Value Gap concept and logic: © LuxAlgo.
Standalone Pine Script® v6 adaptation, structural organization, configurable visualization, mitigation management, timeframe selection, and user-interface implementation: © Rivasjr.
This work is distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
────────────────────────────────────
Español
Fair Value Gaps Standalone es un indicador desarrollado en Pine Script® v6 para identificar y mostrar Fair Value Gaps alcistas y bajistas directamente sobre el gráfico.
Un Fair Value Gap es un desequilibrio de precio formado por una estructura de tres velas, en la cual una parte del rango comprendido entre la primera y la tercera vela no fue negociada. Estas zonas permiten visualizar áreas donde el precio se desplazó con fuerza y donde podría producirse una interacción posterior.
Funciones principales
Detecta Fair Value Gaps alcistas y bajistas.
Representa cada desequilibrio mediante una zona dividida en dos secciones.
Permite utilizar el intervalo del gráfico o un intervalo de detección diferente.
Incluye un umbral automático para filtrar desequilibrios menos significativos.
Permite controlar la extensión horizontal de las zonas.
Puede eliminar automáticamente los FVG completamente mitigados.
Ofrece colores independientes para zonas alcistas y bajistas.
Funcionamiento
Un Fair Value Gap alcista se identifica cuando el mínimo de la tercera vela permanece por encima del máximo de la primera vela y se cumplen las condiciones de desplazamiento.
Un Fair Value Gap bajista se identifica cuando el máximo de la tercera vela permanece por debajo del mínimo de la primera vela y se cumplen las condiciones de desplazamiento.
Cada desequilibrio se divide en su punto medio y se representa mediante dos cajas. Ambas cajas forman parte del mismo Fair Value Gap y se eliminan conjuntamente cuando está activada la eliminación de zonas mitigadas y el precio atraviesa completamente su límite correspondiente.
Información importante
Este indicador identifica desequilibrios de precio. No proporciona entradas, salidas, objetivos, niveles de stop-loss ni recomendaciones de inversión. Los Fair Value Gaps deben analizarse junto con la estructura del mercado, liquidez, volumen, tendencia, contexto de sesión y una gestión de riesgo adecuada.
El comportamiento histórico y en tiempo real puede variar mientras una vela de temporalidad superior continúa en formación.
Indicator

Price Reaction ZonesPrice Reaction Zones identifies price levels created when a confirmed candle changes direction from bearish to bullish or from bullish to bearish.
Each level is drawn from the opening price of the candle that confirms the color change. Active levels remain solid. A level becomes dashed only when a later candle opens on one side of the level and closes on the opposite side. Wick-only touches do not invalidate the level.
Users can select the calculation timeframe, trading-day lookback, maximum number of levels, line extension, colors, width, and whether broken levels remain visible.
Optional reference levels include the previous day, week, and month highs and lows. These are calculated from the regular New York trading session between 9:30 AM and 4:00 PM.
This indicator is designed to highlight areas where price may react, reject, consolidate, or change direction. It is intended as a market-context tool and should not be used as a standalone entry or exit signal.
Indicator

TQQQ 5-Minute RSI EMA Scalping SystemOVERVIEW
This indicator is designed specifically for TQQQ on the 5-minute chart. It combines RSI, EMA trend confirmation, long-term trend filtering, and regime-aware trade management to identify potential long entries while reducing whipsaw trades.
Unlike a basic EMA crossover indicator, this system uses an RSI arming process. RSI first prepares — or "arms" — a possible trade during a pullback, and the indicator then waits for additional bullish confirmation before generating a BUY signal.
ENTRY LOGIC
A BUY requires several conditions to align:
- RSI crosses below the configurable ARM level
- The 3 EMA becomes bullish relative to the 13 EMA
- Price is above the long-term Trend SMA
- The optional BUY Slope SMA condition is satisfied
- RSI is below the configurable maximum BUY RSI
The indicator can remember bullish EMA alignment while price is still below the Trend SMA. This means the 3 EMA does not need to make a new crossover after price moves above the Trend SMA.
OPENING RSI LOGIC
The indicator includes optional opening-session ARM protection.
- When enabled, an opening RSI reading already at or below the ARM threshold can place the system into a BLOCKED state.
- The system then waits for RSI to cross back above the ARM threshold before permitting a new ARM.
- An existing ARM can optionally be preserved through an oversold market open.
EXIT LOGIC
The indicator supports several exit conditions:
- Standard EMA-based SELL signals
- Regime-aware entry-price protection
- Gap-up RSI TAKE PROFIT signals
While the bullish regime remains intact, the indicator can ignore ordinary bearish 3/13 EMA signals and instead protect the trade using a configurable exit level based on the entry price.
- The default regime exit is breakeven, but the user may configure the exit above or below the entry price.
- Normal EMA exits and regime-protection exits use the same SELL alert.
- TAKE PROFIT remains a separate alert.
RE-ENTRY LOGIC
After a SELL, the indicator can monitor for a re-entry opportunity without requiring a new RSI ARM.
A re-entry may require:
- Bullish 3/13 EMA alignment
- Price above the Trend SMA
- BUY Slope SMA confirmation
- RSI below the configurable re-entry limit
The number of bullish EMA confirmation candles can also be adjusted.
MAIN FEATURES
- Designed specifically for TQQQ
- Restricted to the 5-minute chart
- RSI ARM state machine
- Opening RSI BLOCKED state
- Configurable RSI ARM threshold
- Configurable maximum BUY RSI
- 3 EMA and 13 EMA confirmation
- Configurable long-term Trend SMA
- Configurable BUY Slope SMA
- Adjustable minimum BUY Slope SMA rise
- Regime-aware entry-price protection
- Configurable exit offset above or below entry
- Re-entry monitoring after SELL signals
- Separate TAKE PROFIT alerts
- Combined normal and regime-protection SELL alert
- Individual label and plot controls
- Configurable colors and visual settings
DEFAULT CONFIGURATION
The default settings are intended for use with TQQQ on a 5-minute chart, but the primary calculations, thresholds, confirmation requirements, plots, labels, and alert conditions are all configurable.
ALERTS
The indicator provides separate PulseWire alert conditions for:
- BUY
- SELL
- TAKE PROFIT
The SELL alert includes both standard EMA exits and regime-protection exits.
IMPORTANT NOTES
- This is an indicator, not an automated trading strategy.
- It displays signals and provides alert conditions, but it does not place trades or calculate backtest performance.
- Signals are based on completed candles to reduce intrabar changes and false triggers.
DISCLAIMER
This indicator is provided for educational and analytical purposes only and does not constitute financial advice. No indicator can guarantee profitable results. Always perform your Indicator

Indicator

Indicator

ICT Sessions//@version=6
indicator("ICT交易时段", overlay=true)
// ==================== 设置 ====================
tz = input.string("America/New_York", "时区", options= )
showAsia = input.bool(true, "显示亚洲盘")
showLondon = input.bool(true, "显示伦敦盘")
showNY = input.bool(true, "显示纽约盘")
showOverlap = input.bool(true, "显示重合时段")
// 重点:加上 :23456 (只周一到周五)
asiaS = input.session("1900-0400:23456", "亚洲盘时间")
londonS = input.session("0200-1200:23456", "伦敦盘时间")
nyS = input.session("0800-1700:23456", "纽约盘时间")
asiaColor = input.color(color.new(#F5E6C8, 78), "亚洲颜色")
londonColor = input.color(color.new(#C8E6C9, 78), "伦敦颜色")
nyColor = input.color(color.new(#E1BEE7, 78), "纽约颜色")
overlapColor = input.color(color.new(#9C27B0, 65), "伦敦-纽约重合颜色")
asiaLonColor = input.color(color.new(#80CBC4, 70), "亚洲-伦敦重合颜色")
// ==================== 核心逻辑 ====================
isAsia = not na(time(timeframe.period, asiaS, tz))
isLondon = not na(time(timeframe.period, londonS, tz))
isNY = not na(time(timeframe.period, nyS, tz))
isLondonNY = isLondon and isNY
isAsiaLon = isAsia and isLondon
// ==================== 背景绘制 ====================
bgcolor(showOverlap and isLondonNY ? overlapColor : na)
bgcolor(showOverlap and isAsiaLon ? asiaLonColor : na)
bgcolor(showAsia and isAsia and not isAsiaLon and not isLondonNY ? asiaColor : na)
bgcolor(showLondon and isLondon and not isAsiaLon and not isLondonNY ? londonColor : na)
bgcolor(showNY and isNY and not isLondonNY ? nyColor : na) Indicator

ICT Sessions//@version=6
indicator("ICT交易时段(含重合)精简版", overlay=true, max_bars_back=500)
// ==================== 设置 ====================
tz = input.string("America/New_York", "时区(推荐纽约)", options= )
showAsia = input.bool(true, "显示亚洲盘")
showLondon = input.bool(true, "显示伦敦盘")
showNY = input.bool(true, "显示纽约盘")
showOverlap = input.bool(true, "显示重要重合")
// 时段时间
asiaS = input.session("1900-0400", "亚洲盘时间")
londonS = input.session("0200-1200", "伦敦盘时间")
nyS = input.session("0800-1700", "纽约盘时间")
// 颜色
asiaColor = input.color(color.new(#F5E6C8, 78), "亚洲颜色")
londonColor = input.color(color.new(#C8E6C9, 78), "伦敦颜色")
nyColor = input.color(color.new(#E1BEE7, 78), "纽约颜色")
overlapColor = input.color(color.new(#9C27B0, 65), "伦敦-纽约重合颜色")
// ==================== 核心逻辑 ====================
isWeekday = dayofweek != dayofweek.saturday and dayofweek != dayofweek.sunday
isAsia = isWeekday and not na(time(timeframe.period, asiaS, tz))
isLondon = isWeekday and not na(time(timeframe.period, londonS, tz))
isNY = isWeekday and not na(time(timeframe.period, nyS, tz))
isLondonNY = isLondon and isNY
isAsiaLon = isAsia and isLondon
// ==================== 背景绘制 ====================
bgcolor(showAsia and isAsia and not isAsiaLon and not isLondonNY ? asiaColor : na)
bgcolor(showLondon and isLondon and not isAsiaLon and not isLondonNY ? londonColor : na)
bgcolor(showNY and isNY and not isLondonNY ? nyColor : na)
// 重合(重点)
bgcolor(showOverlap and isAsiaLon ? color.new(#80CBC4, 70) : na)
bgcolor(showOverlap and isLondonNY ? overlapColor : na) Indicator

TRADION Multi Trend EngineTRADION Multi Trend Engine
TRADION Multi Trend Engine is a multi-layer trend-following indicator designed to measure the overall market direction and trend strength by combining multiple trend analysis methods into a single consensus-based system.
The indicator evaluates Classic Trend Structure, Linear Regression, Logarithmic Trend, SuperTrend, and Hull Moving Average simultaneously. Each enabled method contributes bullish or bearish signals, which are combined into an overall trend consensus.
Trend Analysis Methods
Classic Trend
Analyzes price structure using confirmed pivot highs and pivot lows.
Higher lows indicate a bullish trend.
Lower highs indicate a bearish trend.
Confirmed structures are displayed as dynamic trend lines on the chart.
Linear Regression
Calculates the linear price trend over the selected period.
In addition to the regression line, the indicator plots upper and lower deviation bands based on the standard deviation.
Price above a rising regression line indicates a bullish trend.
Price below a falling regression line indicates a bearish trend.
Logarithmic Trend
Evaluates price movements using a logarithmic scale, providing a more balanced trend analysis, especially for long-term charts or assets with significant percentage price changes.
SuperTrend
Uses ATR-based volatility calculations to determine the primary market trend.
Green SuperTrend: Bullish trend
Red SuperTrend: Bearish trend
Hull Trend
Uses the Hull Moving Average to identify market direction with reduced lag.
Rising Hull MA with price above the average indicates a bullish trend.
Falling Hull MA with price below the average indicates a bearish trend.
Consensus Scoring System
Each enabled trend method independently contributes either a bullish or bearish score.
The indicator calculates an overall consensus and classifies the market into one of the following conditions:
STRONG BUY – Bullish consensus of 80% or higher
BUY – Bullish consensus between 60% and 79%
READY BUY – Bullish consensus between 50% and 59%
STRONG SELL – Bearish consensus of 80% or higher
SELL – Bearish consensus between 60% and 79%
READY SELL – Bearish consensus between 50% and 59%
WAIT – No clear directional consensus
The dashboard located in the upper-right corner displays the Bull Score, Bear Score, and the current status of every active trend method.
Buy & Sell Signals
The BUY and SELL labels are generated when both the Linear Regression and Logarithmic Trend confirm the same directional breakout.
BUY Signal
Generated when price moves above both the Linear Regression line and the Logarithmic Trend line for the first time.
SELL Signal
Generated when price moves below both the Linear Regression line and the Logarithmic Trend line for the first time.
Signals are generated only on the initial breakout. As long as price remains within the same trend region, no additional labels are created.
Dashboard
The built-in dashboard displays:
Overall Trend Status
Bull Score
Bear Score
Classic Trend Direction
Linear Regression Direction
Logarithmic Trend Direction
SuperTrend Direction
Hull Trend Direction
The dashboard supports a compact mobile mode, and both text and background colors can be customized.
Alert Conditions
The indicator includes the following alert conditions:
TRADION Strong Buy
TRADION Strong Sell
TRADION Buy
TRADION Sell
To reduce temporary intrabar signals, it is recommended to configure PulseWire alerts using the "Once Per Bar Close" option.
Recommended Usage
TRADION Multi Trend Engine is designed as a trend confirmation and market analysis tool, rather than a standalone automated trading system.
For better decision-making, signals should be combined with:
Support and Resistance
Volume Analysis
Market Structure
Momentum Analysis
Proper Risk Management
Lower timeframes may produce more market noise and a higher number of signals, while medium and higher timeframes generally provide more reliable trend identification.
Technical Note
The Classic Trend module is based on confirmed pivot highs and lows. Since pivot confirmation requires future bars, trend lines are plotted only after the selected pivot sensitivity has been confirmed.
Disclaimer
This indicator is intended for technical analysis and educational purposes only. It does not provide financial or investment advice and should not be interpreted as a recommendation to buy or sell any financial instrument.
Past performance does not guarantee future results. Always conduct your own analysis and apply appropriate risk management, position sizing, and stop-loss strategies before making trading decisions.
Indicator
