Support Resistance with Order BlocksIndicator Description
Professional Price Level Detection for Smart Trading. Master the Markets with Precision Support/Resistance and Order Block Analysis . It provides traders with clear visual cues for potential reversal and breakout areas, combining both retail and institutional trading concepts into one powerful tool.
The Support & Resistance with Order Blocks indicator is a versatile Pine Script tool designed to empower traders with clear, actionable insights into key market levels. By combining advanced pivot-based support and resistance (S/R) detection with order block (OB) filtering, this indicator delivers clean, high-probability zones for entries, exits, and reversals. With customizable display options (boxes or lines) and intuitive settings, it’s perfect for traders of all styles—whether you’re scalping, swing trading, or investing long-term. Overlay it on your TradingView chart and elevate your trading strategy today!
________________________________________
Key Features
✅ Dynamic Support/Resistance - Auto-adjusting levels based on price action
✅ Smart Order Block Detection - Identifies institutional buying/selling zones
✅ Dual Display Modes - Choose between Boxes or Clean Lines for different chart styles
✅ Customizable Sensitivity - Adjust detection parameters for different markets
✅ Broken Level Markers - Clearly shows when key levels are breached
✅ Timeframe-Adaptive - Automatically adjusts for daily/weekly charts
1. Dynamic Support & Resistance Detection
Identifies critical S/R zones using pivot high/low calculations with adjustable look back periods.
Visualizes active S/R zones with distinct colors and labels ("Support" or "Resistance" for boxes, lines for cleaner charts).
Marks broken S/R levels as "Br S" (broken support) or "Br R" (broken resistance) when historical display is enabled, aiding in breakout and reversal analysis.
2. Smart Order Block Identification
Detects bullish and bearish order blocks based on significant price movements (default: ±0.3% over 5 candles).
Highlights institutional buying/selling zones with customizable colors, displayed as boxes or lines.
Filters out overlapping OB zones to keep your chart clutter-free.
3. Dual Display Options
Boxes or Lines: Choose to display S/R and OB as boxes for detailed zones or lines for a minimalist view.
Line Width Customization: Adjust line widths for S/R and OB (1–5 pixels) for optimal visibility.
Color Customization: Tailor colors for active/broken S/R and bullish/bearish OB zones.
4. Advanced Overlap Filtering
Ensures S/R zones don’t overlap with OB zones or other S/R levels, providing only the most relevant levels.
Limits the number of active zones (default: 10) to maintain chart clarity.
5. Historical S/R Visualization
Optionally display broken S/R levels with distinct colors and labels ("Br S" or "Br R") to track historical price reactions.
Broken levels are dynamically updated and removed (or retained) based on user settings.
6. Timeframe Adaptability
Automatically adjusts pivot detection for daily/weekly timeframes (40-candle look back) versus shorter timeframes (20-candle look back).
Works seamlessly across all asset classes (stocks, forex, crypto, etc.) and timeframes.
________________________________________
How It Works
• Support & Resistance:
Uses ta.pivothigh and ta.pivotlow to detect significant price pivots, with a user-defined look back (default: 5 candles post-pivot).
Plots S/R as boxes (with labels "Support" or "Resistance") or lines, extending to the current bar for real-time relevance.
Broken S/R levels are marked with adjusted colors and labels ("S" or "R" for boxes, "Br S" or "Br R" for lines when historical display is enabled).
• Order Blocks:
Identifies OB based on strong price movements over 4 candles, plotted as boxes or lines at the candle’s midpoint.
Validates OB to prevent overlap, ensuring only significant zones are displayed.
Removes OB zones when price breaks through, keeping the chart focused on active levels.
• Customization:
Toggle S/R and OB visibility, adjust detection sensitivity, and set maximum active zones (4–50).
Fine-tune line widths and colors for a personalized chart experience.
________________________________________
Why Use This Indicator?
• Precision Trading: Pinpoint high-probability entry/exit zones with filtered S/R and OB levels.
• Clean Charts: Overlap filtering and zone limits reduce clutter, focusing on key levels.
• Versatile Display: Switch between boxes for detailed zones or lines for simplicity, with adjustable line widths.
• Institutional Edge: Leverage OB detection to align with institutional activity for smarter trades.
• User-Friendly: Intuitive settings and clear visuals make it accessible for beginners and pros alike.
________________________________________
Settings Overview________________________________________
⚙ Input Parameters
Settings Overview
Display Options:
Display Type: Choose "Boxes" or "Lines" for S/R and OB visualization.
S/R Line Width: Set line thickness for S/R lines (1–5 pixels, default: 2).
OB Line Width: Set line thickness for OB lines (1–5 pixels, default: 2).
Order Block Options:
Show Order Block: Enable/disable OB display.
Bull/Bear OB Colors: Customise border and fill colors for bullish and bearish OB zones.
Support/Resistance Options:
Show S/R: Toggle active S/R zones.
Show Historical S/R: Display broken S/R levels, marked as "Br S" or "Br R" for lines.
Detection Period: Set candle lookback for pivot detection (4–50, default: 5).
Max Active Zones: Limit active S/R and OB zones (4–50, default: 10).
Colors: Customise active and broken S/R colors for clear differentiation.
________________________________________
How to Use
1. Add to Chart: Apply the indicator to your TradingView chart.
2. Customize Settings:
o Select "Boxes" or "Lines" for your preferred display style.
o Adjust line widths, colors, and detection parameters to suit your trading style.
o Enable "Show Historical S/R" to track broken levels with "Br S" and "Br R" labels.
3. Analyze Levels:
o Use support zones (green) for buy entries and resistance zones (red) for sell entries.
o Monitor OB zones for institutional activity, signaling potential reversals or continuations.
o Watch for "Br S" or "Br R" labels to identify breakout opportunities.
4. Combine with Other Tools: Pair with trend indicators, volume analysis, or price action for a robust strategy.
5. Monitor Breakouts: Trade breakouts when price breaches S/R or OB zones, with historical labels providing context.
________________________________________
Example Use Cases
• Swing Trading: Use S/R and OB zones to identify entry/exit points, with historical broken levels for context.
• Breakout Trading: Trade price breaks through S/R or OB, using "Br S" and "Br R" labels to confirm reversals.
• Scalping: Adjust detection period for faster S/R and OB identification on lower timeframes.
________________________________________
• Performance: Optimized for all timeframes, with best results on 5M, 15M, 30M, 1H, 4H, or daily charts for swing trading.
• Compatibility: Works with any asset class and TradingView chart.
________________________________________
Get Started
Transform your trading with Support & Resistance with Order Blocks! Add it to your chart, customize it to your style, and trade with confidence. For questions or feedback, drop a comment on TradingView or message the author. Happy trading! 🚀
________________________________________
Disclaimer: This indicator is for educational and informational purposes only. Always conduct your own analysis and practice proper risk management before trading.
Cari skrip untuk "zone"
Super Arma Institucional PRO v6.3Super Arma Institucional PRO v6.3
Description
Super Arma Institucional PRO v6.3 is a multifunctional indicator designed for traders looking for a clear and objective analysis of the market, focusing on trends, key price levels and high liquidity zones. It combines three essential elements: moving averages (EMA 20, SMA 50, EMA 200), dynamic support and resistance, and volume-based liquidity zones. This integration offers an institutional view of the market, ideal for identifying strategic entry and exit points.
How it Works
Moving Averages:
EMA 20 (orange): Sensitive to short-term movements, ideal for capturing fast trends.
SMA 50 (blue): Represents the medium-term trend, smoothing out fluctuations.
EMA 200 (red): Indicates the long-term trend, used as a reference for the general market bias.
Support and Resistance: Calculated based on the highest and lowest prices over a defined period (default: 20 bars). These dynamic levels help identify zones where the price may encounter barriers or supports.
Liquidity Zones: Purple rectangles are drawn in areas of significantly above-average volume, indicating regions where large market participants (institutional) may be active. These zones are useful for anticipating price movements or order absorption.
Purpose
The indicator was developed to provide a clean and institutional view of the market, combining classic tools (moving averages and support/resistance) with modern liquidity analysis. It is ideal for traders operating swing trading or position trading strategies, allowing to identify:
Short, medium and long-term trends.
Key support and resistance levels to plan entries and exits.
High liquidity zones where institutional orders can influence the price.
Settings
Show EMA 20 (true): Enables/disables the 20-period EMA.
Show SMA 50 (true): Enables/disables the 50-period SMA.
Show EMA 200 (true): Enables/disables the 200-period EMA.
Support/Resistance Period (20): Sets the period for calculating support and resistance levels.
Liquidity Sensitivity (20): Period for calculating the average volume.
Minimum Liquidity Factor (1.5): Multiplier of the average volume to identify high liquidity zones.
How to Use
Moving Averages:
Crossovers between the EMA 20 and SMA 50 may indicate short/medium-term trend changes.
The EMA 200 serves as a reference for the long-term bias (above = bullish, below = bearish).
Support and Resistance: Use the red (resistance) and green (support) lines to identify reversal or consolidation zones.
Liquidity Zones: The purple rectangles highlight areas of high volume, where the price may react (reversal or breakout). Consider these zones to place orders or manage risks.
Adjust the parameters according to the asset and timeframe to optimize the analysis.
Notes
The chart should be configured only with this indicator to ensure clarity.
Use on timeframes such as 1 hour, 4 hours or daily for better visualization of liquidity zones and support/resistance levels.
Avoid adding other indicators to the chart to keep the script output easily identifiable.
The indicator is designed to be clean, without explicit buy/sell signals, following an institutional approach.
This indicator is perfect for traders who want a visually clear and powerful tool to trade based on trends, key levels and institutional behavior.
Dynamic Support and Resistance ### Indicator: Dynamic Support and Resistance
#### Overview:
The *Dynamic Support and Resistance* indicator is a powerful tool designed to help traders identify key price levels on a chart. It dynamically calculates support and resistance levels based on pivot points and the Average True Range (ATR). The indicator also highlights broken support and resistance zones, providing visual cues for potential trend reversals or continuations.
---
### Key Features:
1. *Dynamic Support and Resistance Levels*:
- The indicator identifies support and resistance levels using pivot highs and lows within a user-defined range.
- These levels are adjusted using the ATR to account for market volatility, making them more responsive to changing market conditions.
2. *Support and Resistance Zones*:
- The indicator draws boxes around the support and resistance levels, with customizable colors and widths.
- The width of the zones is determined by the ATR and a user-defined multiplier, allowing traders to adjust the sensitivity of the zones.
3. *Broken Zones*:
- When price breaks through a support or resistance zone, the zone is highlighted with a distinct color to indicate a potential shift in market sentiment.
- Traders can limit the number of broken zones displayed on the chart to avoid clutter.
4. *Customizable Inputs*:
- *Range Candle Count*: Defines the number of candles analyzed to determine pivot points. Increasing this value will result in fewer but more significant levels, while decreasing it will produce more levels that are sensitive to shorter-term price movements.
- *ATR Period*: Controls the sensitivity of the ATR calculation. A shorter period makes the ATR more responsive to recent price changes, while a longer period smooths it out.
- *Box Width Multiplier*: Adjusts the width of the support and resistance zones. A higher multiplier creates wider zones, which may be useful in more volatile markets.
- *Max Broken Zones*: Limits the number of broken zones displayed on the chart. This helps keep the chart clean and focused on the most recent breaks.
---
### How It Works:
1. *Pivot Points*:
- The indicator identifies pivot highs and lows within the specified range. These pivots serve as the basis for calculating support and resistance levels.
2. *ATR Adjustment*:
- The ATR is used to adjust the support and resistance levels, making them more dynamic and responsive to market volatility.
3. *Zone Creation*:
- Support and resistance zones are drawn as boxes around the pivot levels. The width of these zones is determined by the ATR and the box width multiplier.
4. *Zone Breaks*:
- When price breaks through a zone, the zone is highlighted with a distinct color, and the broken zone is added to an array. If the number of broken zones exceeds the user-defined limit, the oldest broken zone is removed from the chart.
---
### How to Use:
1. *Trend Identification*:
- Use the support and resistance levels to identify key price levels where the market may reverse or consolidate.
- Broken zones can signal potential trend reversals or continuations.
2. *Entry and Exit Points*:
- Traders can use the support and resistance zones as potential entry or exit points. For example, buying near support or selling near resistance.
- Broken zones can be used as confirmation for breakout strategies.
3. *Risk Management*:
- The width of the zones can help traders set stop-loss levels. For example, placing a stop-loss just outside a support or resistance zone.
4. *Customization*:
- Adjust the input parameters to suit your trading style and the specific market conditions. For example, increase the range candle count for longer-term analysis or decrease it for shorter-term trading.
---
### Who Should Use This Indicator?
- *Swing Traders*: Can use the indicator to identify key levels for potential reversals or breakouts.
- *Day Traders*: Can benefit from the dynamic levels and zones, especially in volatile markets.
- *Position Traders*: Can use the indicator to identify long-term support and resistance levels.
- *Breakout Traders*: Can use the broken zones to confirm breakouts and plan their trades accordingly.
---
### Input Parameters and Their Effects:
1. *Range Candle Count*:
- *Increase*: Produces fewer but more significant levels, suitable for longer-term analysis.
- *Decrease*: Produces more levels, sensitive to shorter-term price movements.
2. *ATR Period*:
- *Increase*: Smoothens the ATR, making the levels less sensitive to recent price changes.
- *Decrease*: Makes the ATR more responsive to recent price changes, resulting in more dynamic levels.
3. *Box Width Multiplier*:
- *Increase*: Creates wider zones, suitable for more volatile markets.
- *Decrease*: Creates narrower zones, suitable for less volatile markets.
4. *Max Broken Zones*:
- *Increase*: Displays more broken zones on the chart, providing more historical context.
- *Decrease*: Keeps the chart clean by displaying only the most recent broken zones.
---
### Conclusion:
The *Dynamic Support and Resistance* indicator is a versatile tool that can be adapted to various trading styles and market conditions. By dynamically adjusting to market volatility and highlighting key price levels, it provides traders with valuable insights into potential support and resistance areas. Whether you're a swing trader, day trader, or position trader, this indicator can help you make more informed trading decisions.
---
### Publishing on TradingView:
- *Title*: Dynamic Support and Resistance
- *Description*: A dynamic support and resistance indicator that uses pivot points and ATR to identify key price levels. Includes customizable support/resistance zones and highlights broken zones for breakout trading.
- *Tags*: support, resistance, ATR, pivot points, breakout, trading, indicator
- *Access*: Public or Invite-only, depending on your preference.
This indicator is ready to be published on TradingView, and the detailed description above will help users understand its functionality and how to use it effectively.
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.
Volume Flow Anatomy [Kodexius]Volume Flow Anatomy is a dynamic, multi-dimensional volume map that reconstructs how buy, sell, and “stealth” activity is distributed across price rather than just across time. Instead of relying on a static, session-based volume profile, it uses an exponentially decaying memory of recent bars to build a constantly evolving “anatomy” of the auction, where each price level carries an adaptive history of order flow.
The script separates buy vs. sell pressure, adds a third “Stealth Flow” dimension for low-volume price movement (ease of movement / divergence), and automatically derives POC, Value Area, imbalances, absorption zones, and classic profile shapes (D, P, b, B). This gives the trader a compact but highly information-dense map on the right side of the chart to read control (buyers vs. sellers), structure (balanced vs. trending vs. double distribution), and key reaction levels (support/resistance born from flow, not just wicks).
🔹 Features
🔸 Dynamic Lookback with Decay
- The script computes an effective lookback N from the Decay Factor and caps it with Max Lookback.
- Higher decay keeps more history; lower decay emphasizes the most recent flow.
- The profile continuously adapts as new bars are printed.
🔸 Price-Bucketed Flow Map
Each bucket accumulates:
- Sell Flow (sell pressure)
- Buy Flow (buy pressure)
- Stealth Flow (low-volume price movement)
- Box width at each bucket is proportional to the relative intensity of that component.
🔸 Stealth Flow (Low-Volume Price Movement)
- Measures close to close movement relative to volume, emphasizing price movement that occurs on comparatively low volume.
- Helps reveal hidden participation, inefficient moves, and areas that may be vulnerable to re-tests or reversions.
🔸 POC & 70% Value Area (VA)
- Identifies the Point of Control (price bucket with the highest total volume) over the effective lookback.
- Builds a 70% Value Area by expanding from POC towards the nearest high volume neighbors until 70% of the total volume is included.
- POC is drawn as a line over the analyzed range; VA is displayed as a shaded band in the profile area.
🔸 Market Profile Shape Detection
Splits the profile vertically into three zones (bottom / middle / top) and compares their volume distribution.
Classifies structure as:
- D-Shape (Balanced)
- P-Shape (Short Covering)
- b-Shape (Long Liquidation)
- B-Shape (Double Distribution)
Displays a shape label with color coded bias for quick auction context interpretation.
🔸 Imbalance Zones & Absorption
Imbalance: detects buckets where Buy Flow or Sell Flow exceeds the opposite side by at least Imbalance Ratio.
Absorption: flags zones with high volume but low price “ease”, where price is not moving much despite significant volume.
Extends these levels into horizontal zones, marking potential support/resistance and trap areas.
Bullish Imbalance Zone :
Bearish Imbalance Zone :
Absorption Zone :
🔸 Range Context & On-Chart Legend
Draws a Range Box covering the dynamically determined lookback (N bars), with a label displaying the effective bar count.
A bottom-right legend summarizes:
- Color keys for Buy / Sell / Stealth
- POC / VA status
- Bullish vs. Bearish dominance percentage
- Profile shape classification
- Imbalance and Absorption conventions
🔹 Calculations
1. Dynamic Lookback & Price Buckets
int N = math.min(int(4 / (1 - decayFactor) - 1), maxHistory)
float priceHigh = ta.highest(high, N)
float priceLow = ta.lowest(low, N)
float bucketSize = (priceHigh - priceLow) / bucketCount
The effective lookback N is derived from the Decay Factor, using the approximation 4 / (1 - decay) to capture roughly 99% of the decayed influence, then capped with maxHistory to control performance. Over that adaptive range, the script finds the highest and lowest prices and divides the band into bucketCount equal slices (bucketSize). Each slice is a price bucket that will accumulate volume-flow information.
2. Exponentially Decayed Volume Allocation
addValue(array profile, float weight, float minPrice, float maxPrice) =>
for j = 0 to bucketCount - 1
float bucketMin = priceLow + j * bucketSize
float bucketMax = bucketMin + bucketSize
float overlapMin = math.max(minPrice, bucketMin)
float overlapMax = math.min(maxPrice, bucketMax)
float overlapRange = overlapMax - overlapMin
if overlapRange > 0
profile.set(j, profile.get(j) * decayFactor + weight * overlapRange)
This function is the core engine of the indicator. For a given price span and intensity, it checks every bucket for overlap, distributes the weight proportionally to the overlapping range, and before adding new value, decays the existing bucket content by decayFactor. This results in an exponentially weighted profile: recent activity dominates, while older levels retain a gradually fading footprint.
3. POC and 70% Value Area
array totalProfile = array.new(bucketCount, 0)
for j = 0 to bucketCount - 1
float total = sellProfile.get(j) + buyProfile.get(j)
totalProfile.set(j, total)
if total > eaMax
eaMax := total
int pocIdx = 0
float pocVal = 0.0
for j = 0 to bucketCount - 1
if totalProfile.get(j) > pocVal
pocVal := totalProfile.get(j)
pocIdx := j
float totalSum = totalProfile.sum()
float targetSum = totalSum * 0.70
int vaLow = pocIdx
int vaHigh = pocIdx
float currentSum = pocVal
while currentSum < targetSum and (vaLow > 0 or vaHigh < bucketCount - 1)
float lowVal = vaLow > 0 ? totalProfile.get(vaLow - 1) : 0.0
float highVal = vaHigh < bucketCount - 1 ? totalProfile.get(vaHigh + 1) : 0.0
First, totalProfile is built as the sum of buy and sell flow per bucket, and eaMax (the maximum total) is tracked for later normalization. The POC bucket (pocIdx) is simply the index with the highest totalProfile value.
To compute the 70% Value Area, the algorithm starts at the POC bucket and expands outward, each step adding either the upper or lower neighbor depending on which has more volume. This continues until the cumulative volume reaches 70% of totalSum. The result is a volume-driven VA, not necessarily symmetric around POC, which more accurately represents where the market has truly traded.
4. Market Profile Shape Classification
float volTopThird = 0.0
float volMidThird = 0.0
float volBotThird = 0.0
int thirdIdx = int(bucketCount / 3)
for j = 0 to bucketCount - 1
float val = totalProfile.get(j)
if j < thirdIdx
volBotThird += val
else if j < thirdIdx * 2
volMidThird += val
else
volTopThird += val
float totalVolShape = totalProfile.sum()
string shapeStr = "D-Shape (Balanced)"
if (volTopThird > totalVolShape * 0.20) and (volBotThird > totalVolShape * 0.20) and (volMidThird < totalVolShape * 0.50)
shapeStr := "B-Shape (Double Dist)"
else
if pocIdx > bucketCount * 0.5 and volTopThird > volBotThird * 1.3
shapeStr := "P-Shape (Short Covering)"
else if pocIdx < bucketCount * 0.5 and volBotThird > volTopThird * 1.3
shapeStr := "b-Shape (Long Liquidation)"
else
shapeStr := "D-Shape (Balanced)"
The profile is split into bottom, middle, and top thirds. The script compares how much volume is concentrated in each and combines that with the relative location of POC. If both extremes are heavy and the middle light, it labels a B-Shape (double distribution). If the POC is high and the top dominates the bottom, it’s a P-Shape (short covering). If the POC is low and the bottom dominates, it’s a b-Shape (long liquidation). Otherwise, it defaults to a D-Shape (balanced). This provides a quick, at-a-glance assessment of auction structure.
5. Imbalances, Absorption & Zones
bool isBuyImb = showImb and sVal > 0 and (bVal / sVal >= imbRatio)
bool isSellImb = showImb and bVal > 0 and (sVal / bVal >= imbRatio)
float volRatio = eaMax > 0 ? tVal / eaMax : 0
float stRatio = esmRange > 0 ? (stVal - esmMin) / esmRange : 1.0
bool isAbsorp = showAbsorp and volRatio > 0.6 and stRatio < 0.25
if showImbZone
if isSellImb
zoneBoxes.push(box.new(bar_index - N + 1, bucketHi, bar_index + 1, bucketLo, ...))
if isBuyImb
zoneBoxes.push(box.new(bar_index - N + 1, bucketHi, bar_index + 1, bucketLo, ...))
if isAbsorp
zoneBoxes.push(box.new(bar_index - N + 1, bucketHi, bar_index + 1, bucketLo, ...))
Imbalances are identified where one side’s volume (buy or sell) exceeds the other by at least Imbalance Ratio. These buckets are marked as buy or sell imbalance zones, indicating aggressive participation from one side.
Absorption is detected by combining a high volume ratio (volRatio) with a low normalized stealth ratio (stRatio). High volume with limited price movement suggests that opposing orders are absorbing flow at that level. Both imbalance and absorption buckets are extended into horizontal zones from the start of the lookback to the current bar, visually emphasizing key support/resistance and liquidity areas.
6. Building Buy, Sell & Stealth Profiles
sellProfile := array.new(bucketCount, 0)
buyProfile := array.new(bucketCount, 0)
stealthProfile := array.new(bucketCount, 0)
Three arrays are used to store Sell Flow, Buy Flow, and Stealth Flow. Bars are processed from oldest to newest so that decay is applied in correct chronological order. For each bar, a volume density (volume / range) is calculated and distributed across the candle range. Bull candles feed buyProfile, bear candles feed sellProfile.
Stealth Flow computes the close-to-close move between consecutive bars, scaled by 1 / (1 + volume). Big moves on low volume produce high stealth values, which are then allocated across the move’s price span into stealthProfile. This yields a three-layer profile per price level: directional volume and stealthy price movement.
Simulated Liquidation Heatmap [QuantAlgo]🟢 Overview
This indicator visualizes where clusters of stop-loss orders and liquidation levels are likely located, displayed as a 'heatmap'. It's based on the concept of market structure liquidity: large groups of stop orders tend to gather around obvious technical levels (like swing highs and lows), and these pools of orders often attract price movement from institutional traders. The indicator uses a fractal-based algorithm to identify these high-probability liquidation zones and displays them as dynamic, color-coded boxes.
The key feature is the thermal color gradient, which indicates the freshness (age) and therefore the relative relevance of the liquidity zone. Hot colors (e.g., Red/Yellow) represent fresh clusters that have just formed, suggesting strong and immediate liquidity interest. Cold colors (e.g., Blue/Purple) represent aged or decaying clusters that are becoming less relevant over time. This visualization allows traders to anticipate potential liquidity sweeps (stop hunts) and understand areas of significant retail and institutional positioning.
🟢 Key Features
1. Liquidity Zone Heatmap
The core function is the identification of swing high and swing low price points using a user-defined Lookback period. These points are where retail traders are statistically most likely to place their stop-loss orders. The indicator simulates the clustering of these orders by drawing a zone (box) around the detected swing point, with the vertical size controlled by the Stop/Liquidation Zone Width (%) setting.
▶ Cluster Lookback: Defines the sensitivity of swing point detection. Lower values detect frequent, minor zones (scalping/intraday); higher values detect major, stronger swing points (swing trading).
▶ Zone Width (%): Sets the percentage range above and below the swing point where stops are simulated to cluster, accounting for slippage and typical stop placement spread.
▶ Liquidity Decay: Zones gradually fade in color intensity and are eventually removed after the user-defined Liquidity Decay Period (Bars), ensuring the heatmap only displays relevant, current liquidity areas.
▶ Round Number Filter: An optional filter that limits the display to liquidity zones occurring only at psychologically significant round numbers (e.g., $100, $1,500.00), which typically attract higher concentrations of orders.
2. Thermal Color Gradient
The heatmap's color is a direct function of the zone's age, providing a visual proxy for immediate relevance.
▶ Freshness: Newly created zones are displayed in the Hot Color (high relevance).
▶ Decay: As bars pass, the zone color transitions along the gradient toward the Cold Color and increased transparency (lower relevance), until it is removed entirely.
▶ Color Schemes: Multiple pre-configured and custom color schemes are available to optimize the visualization for different chart themes and color preferences.
3. Liquidity Heat Thermometer
An optional visual thermometer is displayed on the chart to provide an instant, overall assessment of the current liquidation heat level in the immediate vicinity of the price.
▶ Calculation: The thermometer calculates an aggregate heat score based on the age and proximity of all liquidity zones within a user-defined Zone Detection Range (%) of the current price.
▶ Visual Feedback: A marker (triangle) points to the corresponding level on the thermometer's color gradient (Hot to Cold). A high reading indicates price is close to fresh, dense stop clusters, suggesting high volatility or an imminent liquidity sweep is probable. A low reading indicates price is in a low-density or aged liquidity area.
▶ Customization: The thermometer's resolution, position, and text size are fully customizable for optimal chart placement and readability.
🟢 Practical Applications
▶ Anticipate Sweeps: Prioritize trading in the direction of Hot (fresh) liquidity zones. For example, a hot low-side zone suggests strong sell-side liquidity (stop-losses) is available for large buyers to sweep.
▶ Filter Noise: Use the Round Number Filter to focus only on the highest probability liquidation zones, which are often at clean, psychological price levels.
▶ Validate Entries: Combine the Heat Thermometer with price action analysis. A rising heat level indicates increasing proximity to a major stop cluster, signaling a potential turn or an aggressive market move to sweep those stops.
▶ Risk Management: Understand that price often acts dynamically around these zones. High heat levels imply high risk/reward setups; stops should be placed strategically beyond the defined Liquidation Zone Width.
▶ Multi-Timeframe Context: Higher timeframes (e.g., Daily, 4-Hour) often reveal more significant, major liquidity zones. Use this indicator on lower timeframes (e.g., 5-min, 15-min) for execution, but prioritize zones that align with higher-timeframe structures.
Fibonacci Retrace + 50 EMA Hariss 369This indicator combines 3 concepts:
Fibonacci retracement zones
50 EMA trend filter
Price interaction with specific Fib zones to generate Buy/Sell signals
Let’s break everything down in simple language.
1. Fibonacci Retracement Logic
The script finds:
Most recent swing high
Most recent swing low
Using these two points, it draws Fibonacci levels:
Fibonacci Levels Used
Level Meaning Calculation
0% Swing Low recentLow
38.2% Light retracement high - (range × 0.382)
50% Mid retracement high - (range × 0.50)
61.8% Deep retracement high - (range × 0.618)
100% Swing High recentHigh
🔍 Why only these levels?
Because trading signals are generated based ONLY on:38.2%, 50%,61.8%
These 3 levels define the golden retracement zones.
2. Trend Filter — 50 EMA
A powerful rule:
Trend Up (bullish)
➡️ Price > 50 EMA
Trend Down (bearish)
➡️ Price < 50 EMA
This prevents signals against the main trend.
3. BUY Conditions (Retracement + EMA)
A BUY signal appears when:
Price is above the 50 EMA (trend is up)
Price retraces into the BUY ZONE:
🔵 BUY ZONE = between 50% and 38.2% Fibonacci i.e.,close >= Fib50 AND close <= Fib38.2
This means:
Market is trending up
Price corrected to a healthy retracement level
Buyers are stepping back in
📘 Why this zone?
This is a moderate retracement (not too shallow, not too deep).
Smart money often enters at 38.2%–50% in a strong trend.
📘 BUY Signal Appears With:
Green “BUY” label
Green arrow below the candle
4. SELL Conditions (Retracement + EMA)
A SELL signal appears when:
Price is below the 50 EMA (trend is down)
Price retraces upward into the SELL ZONE:
🔴 SELL ZONE = between 50% and 61.8% Fibonacci i.e.,close <= Fib50 AND close >= Fib61.8
This means:
Market is trending down
Price made a pullback
Sellers regain control in the golden zone
📘 Why this zone?
50–61.8 retracement is the ideal bearish pullback level.
📘 SELL Signal Appears With:
Red “SELL” label
Red arrow above the candle
5. STOP-LOSS (SL) RULES
For BUY trades,
Place SL below 61.8% level.SL = Fib 61.8%
OR
more safe:SL = swing low (Fib 0%)
For SELL trades
Place SL above 38.2% level.SL = Fib 38.2%
OR conservative:
SL = swing high (Fib 100%)
6. TAKE-PROFIT (TP) RULES
Based on common Fibonacci extensions.
BUY Trade TP Options
TP Level Meaning
TP1 Return to 38.2% Quick scalping target
TP2 Return to swing high Full trend target
TP3 Breakout above swing high Trend continuation
Practical suggestion:
TP1 = 1× risk
TP2 = 2× risk
TP3 = trailing stop
SELL Trade TP Options
TP Level Meaning
TP1 Return to 61.8% Moderate bounce
TP2 Return to swing low Trend target
TP3 Break below swing low Trend continuation
7. Recommended Trading Plan (Simple)
BUY PLAN
Price > 50 EMA (uptrend)
Enter at BUY signal in 38.2–50% zone
SL at 61.8%
TP at swing high or structure break
SELL PLAN
Price < 50 EMA (downtrend)
Enter at SELL signal in 50–61.8% zone
SL above 38.2%
TP at swing low
🟩 Summary (Very Easy to Remember)
🔵 BUY
Trend: above 50 EMA
Zone: between 50% and 38.2%
SL: below 61.8%
TP: swing high
🔴 SELL
Trend: below 50 EMA
Zone: between 50% and 61.8%
SL: above 38.2%
TP: swing low
Naveen Prabhu with EMA//@version=6
indicator('Naveen Prabhu with EMA', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
a = input(2, title = 'Key Vaule. \'This changes the sensitivity\'')
c = input(5, title = 'ATR Period')
h = input(false, title = 'Signals from Heikin Ashi Candles')
BULLISH_LEG = 1
BEARISH_LEG = 0
BULLISH = +1
BEARISH = -1
GREEN = #089981
RED = #F23645
BLUE = #2157f3
GRAY = #878b94
MONO_BULLISH = #b2b5be
MONO_BEARISH = #5d606b
HISTORICAL = 'Historical'
PRESENT = 'Present'
COLORED = 'Colored'
MONOCHROME = 'Monochrome'
ALL = 'All'
BOS = 'BOS'
CHOCH = 'CHoCH'
TINY = size.tiny
SMALL = size.small
NORMAL = size.normal
ATR = 'Atr'
RANGE = 'Cumulative Mean Range'
CLOSE = 'Close'
HIGHLOW = 'High/Low'
SOLID = '⎯⎯⎯'
DASHED = '----'
DOTTED = '····'
SMART_GROUP = 'Smart Money Concepts'
INTERNAL_GROUP = 'Real Time Internal Structure'
SWING_GROUP = 'Real Time Swing Structure'
BLOCKS_GROUP = 'Order Blocks'
EQUAL_GROUP = 'EQH/EQL'
GAPS_GROUP = 'Fair Value Gaps'
LEVELS_GROUP = 'Highs & Lows MTF'
ZONES_GROUP = 'Premium & Discount Zones'
modeTooltip = 'Allows to display historical Structure or only the recent ones'
styleTooltip = 'Indicator color theme'
showTrendTooltip = 'Display additional candles with a color reflecting the current trend detected by structure'
showInternalsTooltip = 'Display internal market structure'
internalFilterConfluenceTooltip = 'Filter non significant internal structure breakouts'
showStructureTooltip = 'Display swing market Structure'
showSwingsTooltip = 'Display swing point as labels on the chart'
showHighLowSwingsTooltip = 'Highlight most recent strong and weak high/low points on the chart'
showInternalOrderBlocksTooltip = 'Display internal order blocks on the chart\n\nNumber of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart\n\nNumber of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks \n\nIt is recommended to use the cumulative mean range method when a low amount of data is available'
orderBlockMitigationTooltip = 'Select what values to use for order block mitigation'
showEqualHighsLowsTooltip = 'Display equal highs and equal lows on the chart'
equalHighsLowsLengthTooltip = 'Number of bars used to confirm equal highs and equal lows'
equalHighsLowsThresholdTooltip = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results'
showFairValueGapsTooltip = 'Display fair values gaps on the chart'
fairValueGapsThresholdTooltip = 'Filter out non significant fair value gaps'
fairValueGapsTimeframeTooltip = 'Fair value gaps timeframe'
fairValueGapsExtendTooltip = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
showPremiumDiscountZonesTooltip = 'Display premium, discount, and equilibrium zones on chart'
modeInput = input.string( HISTORICAL, 'Mode', group = SMART_GROUP, tooltip = modeTooltip, options = )
styleInput = input.string( COLORED, 'Style', group = SMART_GROUP, tooltip = styleTooltip,options = )
showTrendInput = input( false, 'Color Candles', group = SMART_GROUP, tooltip = showTrendTooltip)
showInternalsInput = input( false, 'Show Internal Structure', group = INTERNAL_GROUP, tooltip = showInternalsTooltip)
showInternalBullInput = input.string( ALL, 'Bullish Structure', group = INTERNAL_GROUP, inline = 'ibull', options = )
internalBullColorInput = input( GREEN, '', group = INTERNAL_GROUP, inline = 'ibull')
showInternalBearInput = input.string( ALL, 'Bearish Structure' , group = INTERNAL_GROUP, inline = 'ibear', options = )
internalBearColorInput = input( RED, '', group = INTERNAL_GROUP, inline = 'ibear')
internalFilterConfluenceInput = input( false, 'Confluence Filter', group = INTERNAL_GROUP, tooltip = internalFilterConfluenceTooltip)
internalStructureSize = input.string( TINY, 'Internal Label Size', group = INTERNAL_GROUP, options = )
showStructureInput = input( false, 'Show Swing Structure', group = SWING_GROUP, tooltip = showStructureTooltip)
showSwingBullInput = input.string( ALL, 'Bullish Structure', group = SWING_GROUP, inline = 'bull', options = )
swingBullColorInput = input( GREEN, '', group = SWING_GROUP, inline = 'bull')
showSwingBearInput = input.string( ALL, 'Bearish Structure', group = SWING_GROUP, inline = 'bear', options = )
swingBearColorInput = input( RED, '', group = SWING_GROUP, inline = 'bear')
swingStructureSize = input.string( SMALL, 'Swing Label Size', group = SWING_GROUP, options = )
showSwingsInput = input( false, 'Show Swings Points', group = SWING_GROUP, tooltip = showSwingsTooltip,inline = 'swings')
swingsLengthInput = input.int( 50, '', group = SWING_GROUP, minval = 10, inline = 'swings')
showHighLowSwingsInput = input( false, 'Show Strong/Weak High/Low',group = SWING_GROUP, tooltip = showHighLowSwingsTooltip)
showInternalOrderBlocksInput = input( true, 'Internal Order Blocks' , group = BLOCKS_GROUP, tooltip = showInternalOrderBlocksTooltip, inline = 'iob')
internalOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'iob')
showSwingOrderBlocksInput = input( true, 'Swing Order Blocks', group = BLOCKS_GROUP, tooltip = showSwingOrderBlocksTooltip, inline = 'ob')
swingOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'ob')
orderBlockFilterInput = input.string( 'Atr', 'Order Block Filter', group = BLOCKS_GROUP, tooltip = orderBlockFilterTooltip, options = )
orderBlockMitigationInput = input.string( HIGHLOW, 'Order Block Mitigation', group = BLOCKS_GROUP, tooltip = orderBlockMitigationTooltip, options = )
internalBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Internal Bullish OB', group = BLOCKS_GROUP)
internalBearishOrderBlockColor = input.color(color.new(#f77c80, 80), 'Internal Bearish OB', group = BLOCKS_GROUP)
swingBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#b22833, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( false, 'Equal High/Low', group = EQUAL_GROUP, tooltip = showEqualHighsLowsTooltip)
equalHighsLowsLengthInput = input.int( 3, 'Bars Confirmation', group = EQUAL_GROUP, tooltip = equalHighsLowsLengthTooltip, minval = 1)
equalHighsLowsThresholdInput = input.float( 0.1, 'Threshold', group = EQUAL_GROUP, tooltip = equalHighsLowsThresholdTooltip, minval = 0, maxval = 0.5, step = 0.1)
equalHighsLowsSizeInput = input.string( TINY, 'Label Size', group = EQUAL_GROUP, options = )
showFairValueGapsInput = input( false, 'Fair Value Gaps', group = GAPS_GROUP, tooltip = showFairValueGapsTooltip)
fairValueGapsThresholdInput = input( true, 'Auto Threshold', group = GAPS_GROUP, tooltip = fairValueGapsThresholdTooltip)
fairValueGapsTimeframeInput = input.timeframe('', 'Timeframe', group = GAPS_GROUP, tooltip = fairValueGapsTimeframeTooltip)
fairValueGapsBullColorInput = input.color(color.new(#00ff68, 70), 'Bullish FVG' , group = GAPS_GROUP)
fairValueGapsBearColorInput = input.color(color.new(#ff0008, 70), 'Bearish FVG' , group = GAPS_GROUP)
fairValueGapsExtendInput = input.int( 1, 'Extend FVG', group = GAPS_GROUP, tooltip = fairValueGapsExtendTooltip, minval = 0)
showDailyLevelsInput = input( false, 'Daily', group = LEVELS_GROUP, inline = 'daily')
dailyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'daily', options = )
dailyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'daily')
showWeeklyLevelsInput = input( false, 'Weekly', group = LEVELS_GROUP, inline = 'weekly')
weeklyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'weekly', options = )
weeklyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'weekly')
showMonthlyLevelsInput = input( false, 'Monthly', group = LEVELS_GROUP, inline = 'monthly')
monthlyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'monthly', options = )
monthlyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'monthly')
showPremiumDiscountZonesInput = input( false, 'Premium/Discount Zones', group = ZONES_GROUP , tooltip = showPremiumDiscountZonesTooltip)
premiumZoneColorInput = input.color( RED, 'Premium Zone', group = ZONES_GROUP)
equilibriumZoneColorInput = input.color( GRAY, 'Equilibrium Zone', group = ZONES_GROUP)
discountZoneColorInput = input.color( GREEN, 'Discount Zone', group = ZONES_GROUP)
type alerts
bool internalBullishBOS = false
bool internalBearishBOS = false
bool internalBullishCHoCH = false
bool internalBearishCHoCH = false
bool swingBullishBOS = false
bool swingBearishBOS = false
bool swingBullishCHoCH = false
bool swingBearishCHoCH = false
bool internalBullishOrderBlock = false
bool internalBearishOrderBlock = false
bool swingBullishOrderBlock = false
bool swingBearishOrderBlock = false
bool equalHighs = false
bool equalLows = false
bool bullishFairValueGap = false
bool bearishFairValueGap = false
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
type trend
int bias
type equalDisplay
line l_ine = na
label l_abel = na
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
type orderBlock
float barHigh
float barLow
int barTime
int bias
// @variable current swing pivot high
var pivot swingHigh = pivot.new(na,na,false)
// @variable current swing pivot low
var pivot swingLow = pivot.new(na,na,false)
// @variable current internal pivot high
var pivot internalHigh = pivot.new(na,na,false)
// @variable current internal pivot low
var pivot internalLow = pivot.new(na,na,false)
// @variable current equal high pivot
var pivot equalHigh = pivot.new(na,na,false)
// @variable current equal low pivot
var pivot equalLow = pivot.new(na,na,false)
// @variable swing trend bias
var trend swingTrend = trend.new(0)
// @variable internal trend bias
var trend internalTrend = trend.new(0)
// @variable equal high display
var equalDisplay equalHighDisplay = equalDisplay.new()
// @variable equal low display
var equalDisplay equalLowDisplay = equalDisplay.new()
// @variable storage for fairValueGap UDTs
var array fairValueGaps = array.new()
// @variable storage for parsed highs
var array parsedHighs = array.new()
// @variable storage for parsed lows
var array parsedLows = array.new()
// @variable storage for raw highs
var array highs = array.new()
// @variable storage for raw lows
var array lows = array.new()
// @variable storage for bar time values
var array times = array.new()
// @variable last trailing swing high and low
var trailingExtremes trailing = trailingExtremes.new()
// @variable storage for orderBlock UDTs (swing order blocks)
var array swingOrderBlocks = array.new()
// @variable storage for orderBlock UDTs (internal order blocks)
var array internalOrderBlocks = array.new()
// @variable storage for swing order blocks boxes
var array swingOrderBlocksBoxes = array.new()
// @variable storage for internal order blocks boxes
var array internalOrderBlocksBoxes = array.new()
// @variable color for swing bullish structures
var swingBullishColor = styleInput == MONOCHROME ? MONO_BULLISH : swingBullColorInput
// @variable color for swing bearish structures
var swingBearishColor = styleInput == MONOCHROME ? MONO_BEARISH : swingBearColorInput
// @variable color for bullish fair value gaps
var fairValueGapBullishColor = styleInput == MONOCHROME ? color.new(MONO_BULLISH,70) : fairValueGapsBullColorInput
// @variable color for bearish fair value gaps
var fairValueGapBearishColor = styleInput == MONOCHROME ? color.new(MONO_BEARISH,70) : fairValueGapsBearColorInput
// @variable color for premium zone
var premiumZoneColor = styleInput == MONOCHROME ? MONO_BEARISH : premiumZoneColorInput
// @variable color for discount zone
var discountZoneColor = styleInput == MONOCHROME ? MONO_BULLISH : discountZoneColorInput
// @variable bar index on current script iteration
varip int currentBarIndex = bar_index
// @variable bar index on last script iteration
varip int lastBarIndex = bar_index
// @variable alerts in current bar
alerts currentAlerts = alerts.new()
// @variable time at start of chart
var initialTime = time
// we create the needed boxes for displaying order blocks at the first execution
if barstate.isfirst
if showSwingOrderBlocksInput
for index = 1 to swingOrderBlocksSizeInput
swingOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
if showInternalOrderBlocksInput
for index = 1 to internalOrderBlocksSizeInput
internalOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
// @variable source to use in bearish order blocks mitigation
bearishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : high
// @variable source to use in bullish order blocks mitigation
bullishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : low
// @variable default volatility measure
atrMeasure = ta.atr(200)
// @variable parsed volatility measure by user settings
volatilityMeasure = orderBlockFilterInput == ATR ? atrMeasure : ta.cum(ta.tr)/bar_index
// @variable true if current bar is a high volatility bar
highVolatilityBar = (high - low) >= (2 * volatilityMeasure)
// @variable parsed high
parsedHigh = highVolatilityBar ? low : high
// @variable parsed low
parsedLow = highVolatilityBar ? high : low
// we store current values into the arrays at each bar
parsedHighs.push(parsedHigh)
parsedLows.push(parsedLow)
highs.push(high)
lows.push(low)
times.push(time)
leg(int size) =>
var leg = 0
newLegHigh = high > ta.highest( size)
newLegLow = low < ta.lowest( size)
if newLegHigh
leg := BEARISH_LEG
else if newLegLow
leg := BULLISH_LEG
leg
startOfNewLeg(int leg) => ta.change(leg) != 0
startOfBearishLeg(int leg) => ta.change(leg) == -1
startOfBullishLeg(int leg) => ta.change(leg) == +1
drawLabel(int labelTime, float labelPrice, string tag, color labelColor, string labelStyle) =>
var label l_abel = na
if modeInput == PRESENT
l_abel.delete()
l_abel := label.new(chart.point.new(labelTime,na,labelPrice),tag,xloc.bar_time,color=color(na),textcolor=labelColor,style = labelStyle,size = size.small)
drawEqualHighLow(pivot p_ivot, float level, int size, bool equalHigh) =>
equalDisplay e_qualDisplay = equalHigh ? equalHighDisplay : equalLowDisplay
string tag = 'EQL'
color equalColor = swingBullishColor
string labelStyle = label.style_label_up
if equalHigh
tag := 'EQH'
equalColor := swingBearishColor
labelStyle := label.style_label_down
if modeInput == PRESENT
line.delete( e_qualDisplay.l_ine)
label.delete( e_qualDisplay.l_abel)
e_qualDisplay.l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time ,na,level), xloc = xloc.bar_time, color = equalColor, style = line.style_dotted)
labelPosition = math.round(0.5*(p_ivot.barIndex + bar_index - size))
e_qualDisplay.l_abel := label.new(chart.point.new(na,labelPosition,level), tag, xloc.bar_index, color = color(na), textcolor = equalColor, style = labelStyle, size = equalHighsLowsSizeInput)
getCurrentStructure(int size,bool equalHighLow = false, bool internal = false) =>
currentLeg = leg(size)
newPivot = startOfNewLeg(currentLeg)
pivotLow = startOfBullishLeg(currentLeg)
pivotHigh = startOfBearishLeg(currentLeg)
if newPivot
if pivotLow
pivot p_ivot = equalHighLow ? equalLow : internal ? internalLow : swingLow
if equalHighLow and math.abs(p_ivot.currentLevel - low ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot, low , size, false)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := low
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.bottom := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastBottomTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel < p_ivot.lastLevel ? 'LL' : 'HL', swingBullishColor, label.style_label_up)
else
pivot p_ivot = equalHighLow ? equalHigh : internal ? internalHigh : swingHigh
if equalHighLow and math.abs(p_ivot.currentLevel - high ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot,high ,size,true)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := high
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.top := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastTopTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel > p_ivot.lastLevel ? 'HH' : 'LH', swingBearishColor, label.style_label_down)
drawStructure(pivot p_ivot, string tag, color structureColor, string lineStyle, string labelStyle, string labelSize) =>
var line l_ine = line.new(na,na,na,na,xloc = xloc.bar_time)
var label l_abel = label.new(na,na)
if modeInput == PRESENT
l_ine.delete()
l_abel.delete()
l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time,na,p_ivot.currentLevel), xloc.bar_time, color=structureColor, style=lineStyle)
l_abel := label.new(chart.point.new(na,math.round(0.5*(p_ivot.barIndex+bar_index)),p_ivot.currentLevel), tag, xloc.bar_index, color=color(na), textcolor=structureColor, style=labelStyle, size = labelSize)
deleteOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
for in orderBlocks
bool crossedOderBlock = false
if bearishOrderBlockMitigationSource > eachOrderBlock.barHigh and eachOrderBlock.bias == BEARISH
crossedOderBlock := true
if internal
currentAlerts.internalBearishOrderBlock := true
else
currentAlerts.swingBearishOrderBlock := true
else if bullishOrderBlockMitigationSource < eachOrderBlock.barLow and eachOrderBlock.bias == BULLISH
crossedOderBlock := true
if internal
currentAlerts.internalBullishOrderBlock := true
else
currentAlerts.swingBullishOrderBlock := true
if crossedOderBlock
orderBlocks.remove(index)
storeOrdeBlock(pivot p_ivot,bool internal = false,int bias) =>
if (not internal and showSwingOrderBlocksInput) or (internal and showInternalOrderBlocksInput)
array a_rray = na
int parsedIndex = na
if bias == BEARISH
a_rray := parsedHighs.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.max())
else
a_rray := parsedLows.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.min())
orderBlock o_rderBlock = orderBlock.new(parsedHighs.get(parsedIndex), parsedLows.get(parsedIndex), times.get(parsedIndex),bias)
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
if orderBlocks.size() >= 100
orderBlocks.pop()
orderBlocks.unshift(o_rderBlock)
drawOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
orderBlocksSize = orderBlocks.size()
if orderBlocksSize > 0
maxOrderBlocks = internal ? internalOrderBlocksSizeInput : swingOrderBlocksSizeInput
array parsedOrdeBlocks = orderBlocks.slice(0, math.min(maxOrderBlocks,orderBlocksSize))
array b_oxes = internal ? internalOrderBlocksBoxes : swingOrderBlocksBoxes
for in parsedOrdeBlocks
orderBlockColor = styleInput == MONOCHROME ? (eachOrderBlock.bias == BEARISH ? color.new(MONO_BEARISH,80) : color.new(MONO_BULLISH,80)) : internal ? (eachOrderBlock.bias == BEARISH ? internalBearishOrderBlockColor : internalBullishOrderBlockColor) : (eachOrderBlock.bias == BEARISH ? swingBearishOrderBlockColor : swingBullishOrderBlockColor)
box b_ox = b_oxes.get(index)
b_ox.set_top_left_point( chart.point.new(eachOrderBlock.barTime,na,eachOrderBlock.barHigh))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,eachOrderBlock.barLow))
b_ox.set_border_color( internal ? na : orderBlockColor)
b_ox.set_bgcolor( orderBlockColor)
displayStructure(bool internal = false) =>
var bullishBar = true
var bearishBar = true
if internalFilterConfluenceInput
bullishBar := high - math.max(close, open) > math.min(close, open - low)
bearishBar := high - math.max(close, open) < math.min(close, open - low)
pivot p_ivot = internal ? internalHigh : swingHigh
trend t_rend = internal ? internalTrend : swingTrend
lineStyle = internal ? line.style_dashed : line.style_solid
labelSize = internal ? internalStructureSize : swingStructureSize
extraCondition = internal ? internalHigh.currentLevel != swingHigh.currentLevel and bullishBar : true
bullishColor = styleInput == MONOCHROME ? MONO_BULLISH : internal ? internalBullColorInput : swingBullColorInput
if ta.crossover(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BEARISH ? CHOCH : BOS
if internal
currentAlerts.internalBullishCHoCH := tag == CHOCH
currentAlerts.internalBullishBOS := tag == BOS
else
currentAlerts.swingBullishCHoCH := tag == CHOCH
currentAlerts.swingBullishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BULLISH
displayCondition = internal ? showInternalsInput and (showInternalBullInput == ALL or (showInternalBullInput == BOS and tag != CHOCH) or (showInternalBullInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBullInput == ALL or (showSwingBullInput == BOS and tag != CHOCH) or (showSwingBullInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bullishColor,lineStyle,label.style_label_down,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BULLISH)
p_ivot := internal ? internalLow : swingLow
extraCondition := internal ? internalLow.currentLevel != swingLow.currentLevel and bearishBar : true
bearishColor = styleInput == MONOCHROME ? MONO_BEARISH : internal ? internalBearColorInput : swingBearColorInput
if ta.crossunder(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BULLISH ? CHOCH : BOS
if internal
currentAlerts.internalBearishCHoCH := tag == CHOCH
currentAlerts.internalBearishBOS := tag == BOS
else
currentAlerts.swingBearishCHoCH := tag == CHOCH
currentAlerts.swingBearishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BEARISH
displayCondition = internal ? showInternalsInput and (showInternalBearInput == ALL or (showInternalBearInput == BOS and tag != CHOCH) or (showInternalBearInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBearInput == ALL or (showSwingBearInput == BOS and tag != CHOCH) or (showSwingBearInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bearishColor,lineStyle,label.style_label_up,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BEARISH)
fairValueGapBox(leftTime,rightTime,topPrice,bottomPrice,boxColor) => box.new(chart.point.new(leftTime,na,topPrice),chart.point.new(rightTime + fairValueGapsExtendInput * (time-time ),na,bottomPrice), xloc=xloc.bar_time, border_color = boxColor, bgcolor = boxColor)
deleteFairValueGaps() =>
for in fairValueGaps
if (low < eachFairValueGap.bottom and eachFairValueGap.bias == BULLISH) or (high > eachFairValueGap.top and eachFairValueGap.bias == BEARISH)
eachFairValueGap.topBox.delete()
eachFairValueGap.bottomBox.delete()
fairValueGaps.remove(index)
// @function draw fair value gaps
// @returns fairValueGap ID
drawFairValueGaps() =>
= request.security(syminfo.tickerid, fairValueGapsTimeframeInput, [close , open , time , high , low , time , high , low ],lookahead = barmerge.lookahead_on)
barDeltaPercent = (lastClose - lastOpen) / (lastOpen * 100)
newTimeframe = timeframe.change(fairValueGapsTimeframeInput)
threshold = fairValueGapsThresholdInput ? ta.cum(math.abs(newTimeframe ? barDeltaPercent : 0)) / bar_index * 2 : 0
bullishFairValueGap = currentLow > last2High and lastClose > last2High and barDeltaPercent > threshold and newTimeframe
bearishFairValueGap = currentHigh < last2Low and lastClose < last2Low and -barDeltaPercent > threshold and newTimeframe
if bullishFairValueGap
currentAlerts.bullishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentLow,last2High,BULLISH,fairValueGapBox(lastTime,currentTime,currentLow,math.avg(currentLow,last2High),fairValueGapBullishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentLow,last2High),last2High,fairValueGapBullishColor)))
if bearishFairValueGap
currentAlerts.bearishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentHigh,last2Low,BEARISH,fairValueGapBox(lastTime,currentTime,currentHigh,math.avg(currentHigh,last2Low),fairValueGapBearishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentHigh,last2Low),last2Low,fairValueGapBearishColor)))
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
drawLevels(string timeframe, bool sameTimeframe, string style, color levelColor) =>
= request.security(syminfo.tickerid, timeframe, [high , low , time , time],lookahead = barmerge.lookahead_on)
float parsedTop = sameTimeframe ? high : topLevel
float parsedBottom = sameTimeframe ? low : bottomLevel
int parsedLeftTime = sameTimeframe ? time : leftTime
int parsedRightTime = sameTimeframe ? time : rightTime
int parsedTopTime = time
int parsedBottomTime = time
if not sameTimeframe
int leftIndex = times.binary_search_rightmost(parsedLeftTime)
int rightIndex = times.binary_search_rightmost(parsedRightTime)
array timeArray = times.slice(leftIndex,rightIndex)
array topArray = highs.slice(leftIndex,rightIndex)
array bottomArray = lows.slice(leftIndex,rightIndex)
parsedTopTime := timeArray.size() > 0 ? timeArray.get(topArray.indexof(topArray.max())) : initialTime
parsedBottomTime := timeArray.size() > 0 ? timeArray.get(bottomArray.indexof(bottomArray.min())) : initialTime
var line topLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var line bottomLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var label topLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}H',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
var label bottomLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}L',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
topLine.set_first_point( chart.point.new(parsedTopTime,na,parsedTop))
topLine.set_second_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
topLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
bottomLine.set_first_point( chart.point.new(parsedBottomTime,na,parsedBottom))
bottomLine.set_second_point(chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
bottomLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
updateTrailingExtremes() =>
trailing.top := math.max(high,trailing.top)
trailing.lastTopTime := trailing.top == high ? time : trailing.lastTopTime
trailing.bottom := math.min(low,trailing.bottom)
trailing.lastBottomTime := trailing.bottom == low ? time : trailing.lastBottomTime
drawHighLowSwings() =>
var line topLine = line.new(na, na, na, na, color = swingBearishColor, xloc = xloc.bar_time)
var line bottomLine = line.new(na, na, na, na, color = swingBullishColor, xloc = xloc.bar_time)
var label topLabel = label.new(na, na, color=color(na), textcolor = swingBearishColor, xloc = xloc.bar_time, style = label.style_label_down, size = size.tiny)
var label bottomLabel = label.new(na, na, color=color(na), textcolor = swingBullishColor, xloc = xloc.bar_time, style = label.style_label_up, size = size.tiny)
rightTimeBar = last_bar_time + 20 * (time - time )
topLine.set_first_point( chart.point.new(trailing.lastTopTime, na, trailing.top))
topLine.set_second_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_text( swingTrend.bias == BEARISH ? 'Strong High' : 'Weak High')
bottomLine.set_first_point( chart.point.new(trailing.lastBottomTime, na, trailing.bottom))
bottomLine.set_second_point(chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_point( chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_text( swingTrend.bias == BULLISH ? 'Strong Low' : 'Weak Low')
drawZone(float labelLevel, int labelIndex, float top, float bottom, string tag, color zoneColor, string style) =>
var label l_abel = label.new(na,na,text = tag, color=color(na),textcolor = zoneColor, style = style, size = size.small)
var box b_ox = box.new(na,na,na,na,bgcolor = color.new(zoneColor,80),border_color = color(na), xloc = xloc.bar_time)
b_ox.set_top_left_point( chart.point.new(trailing.barTime,na,top))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,bottom))
l_abel.set_point( chart.point.new(na,labelIndex,labelLevel))
// @function draw premium/discount zones
// @returns void
drawPremiumDiscountZones() =>
drawZone(trailing.top, math.round(0.5*(trailing.barIndex + last_bar_index)), trailing.top, 0.95*trailing.top + 0.05*trailing.bottom, 'Premium', premiumZoneColor, label.style_label_down)
equilibriumLevel = math.avg(trailing.top, trailing.bottom)
drawZone(equilibriumLevel, last_bar_index, 0.525*trailing.top + 0.475*trailing.bottom, 0.525*trailing.bottom + 0.475*trailing.top, 'Equilibrium', equilibriumZoneColorInput, label.style_label_left)
drawZone(trailing.bottom, math.round(0.5*(trailing.barIndex + last_bar_index)), 0.95*trailing.bottom + 0.05*trailing.top, trailing.bottom, 'Discount', discountZoneColor, label.style_label_up)
parsedOpen = showTrendInput ? open : na
candleColor = internalTrend.bias == BULLISH ? swingBullishColor : swingBearishColor
plotcandle(parsedOpen,high,low,close,color = candleColor, wickcolor = candleColor, bordercolor = candleColor)
if showHighLowSwingsInput or showPremiumDiscountZonesInput
updateTrailingExtremes()
if showHighLowSwingsInput
drawHighLowSwings()
if showPremiumDiscountZonesInput
drawPremiumDiscountZones()
if showFairValueGapsInput
deleteFairValueGaps()
getCurrentStructure(swingsLengthInput,false)
getCurrentStructure(5,false,true)
if showEqualHighsLowsInput
getCurrentStructure(equalHighsLowsLengthInput,true)
if showInternalsInput or showInternalOrderBlocksInput or showTrendInput
displayStructure(true)
if showStructureInput or showSwingOrderBlocksInput or showHighLowSwingsInput
displayStructure()
if showInternalOrderBlocksInput
deleteOrderBlocks(true)
if showSwingOrderBlocksInput
deleteOrderBlocks()
if showFairValueGapsInput
drawFairValueGaps()
if barstate.islastconfirmedhistory or barstate.islast
if showInternalOrderBlocksInput
drawOrderBlocks(true)
if showSwingOrderBlocksInput
drawOrderBlocks()
lastBarIndex := currentBarIndex
currentBarIndex := bar_index
newBar = currentBarIndex != lastBarIndex
if barstate.islastconfirmedhistory or (barstate.isrealtime and newBar)
if showDailyLevelsInput and not higherTimeframe('D')
drawLevels('D',timeframe.isdaily,dailyLevelsStyleInput,dailyLevelsColorInput)
if showWeeklyLevelsInput and not higherTimeframe('W')
drawLevels('W',timeframe.isweekly,weeklyLevelsStyleInput,weeklyLevelsColorInput)
if showMonthlyLevelsInput and not higherTimeframe('M')
drawLevels('M',timeframe.ismonthly,monthlyLevelsStyleInput,monthlyLevelsColorInput)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop , 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? math.min(nz(xATRTrailingStop ), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? math.max(nz(xATRTrailingStop ), src - nLoss) : iff_2
pos = 0
iff_3 = src > nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? -1 : nz(pos , 0)
pos := src < nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
//---------------------------------------------------------------------------------------------------------------------}
//ALERTS
//---------------------------------------------------------------------------------------------------------------------{
alertcondition(currentAlerts.internalBullishBOS, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.internalBullishCHoCH, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.internalBearishBOS, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(currentAlerts.internalBearishCHoCH, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
alertcondition(currentAlerts.swingBullishBOS, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.swingBullishCHoCH, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.swingBearishBOS, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(currentAlerts.swingBearishCHoCH, 'Bearish CHoCH', 'Bearish CHoCH formed')
alertcondition(currentAlerts.internalBullishOrderBlock, 'Bullish Internal OB Breakout', 'Price broke bullish internal OB')
alertcondition(currentAlerts.internalBearishOrderBlock, 'Bearish Internal OB Breakout', 'Price broke bearish internal OB')
alertcondition(currentAlerts.swingBullishOrderBlock, 'Bullish Swing OB Breakout', 'Price broke bullish swing OB')
alertcondition(currentAlerts.swingBearishOrderBlock, 'Bearish Swing OB Breakout', 'Price broke bearish swing OB')
alertcondition(currentAlerts.equalHighs, 'Equal Highs', 'Equal highs detected')
alertcondition(currentAlerts.equalLows, 'Equal Lows', 'Equal lows detected')
alertcondition(currentAlerts.bullishFairValueGap, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(currentAlerts.bearishFairValueGap, 'Bearish FVG', 'Bearish FVG formed')
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')
plotshape(buy, title = 'Buy', text = 'Buy', style = shape.labelup, location = location.belowbar, color = color.new(color.green, 0), textcolor = color.new(color.white, 0), size = size.tiny)
plotshape(sell, title = 'Sell', text = 'Sell', style = shape.labeldown, location = location.abovebar, color = color.new(color.red, 0), textcolor = color.new(color.white, 0), size = size.tiny)
//--------------------------------------------------------------------------------------
// EMA ADDITIONS (Editable)
//--------------------------------------------------------------------------------------
ema5Len = input.int(5, "5 EMA Length", minval = 1)
ema9Len = input.int(9, "9 EMA Length", minval = 1)
ema5 = ta.ema(src, ema5Len)
ema9 = ta.ema(src, ema9Len)
plot(ema5, "EMA 5", color = color.red, linewidth = 2)
plot(ema9, "EMA 9", color = color.blue, linewidth = 2)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
PRO Scalper(EN)
## What it is
**PRO Scalper** is an intraday price–action and liquidity map that helps you see where the market is likely to move **now**, not just where it has been.
It combines five building blocks that professional scalpers often watch together:
1. **Session Volume-Weighted Average Price (VWAP)** — the intraday “fair value” anchor.
2. **Opening Range** — the first minutes of the session that set the day’s balance.
3. **Trend filter** — higher-timeframe bias using **Exponential Moving Averages (EMA)** and optional **Average Directional Index (ADX)** strength.
4. **Two independent Supply/Demand zone engines** — zones are drawn from confirmed swing pivots, with midlines and **touch counters**.
5. **Order-flow style visuals**:
* **Delta bubbles** (green/red circles) show where buying or selling pressure was unusually strong, using a safe **delta proxy** (no external feeds).
* **Liquidity densities** (subtle rectangular bands) highlight clusters of large activity that often act as magnets or barriers and disappear when “eaten” by strong moves.
This mix gives you a **complete intraday picture**: the mean (VWAP), the day’s initial balance (Opening Range), the higher-timeframe push (trend filter), the nearby fuel or brakes (zones), and the live pressure points (bubbles and densities).
---
## Why these components
* **VWAP** tracks where the bulk of traded value sits. Price tends to rotate around it or accelerate away from it — a perfect compass for scalps.
* **Opening Range** frames the early auction. Many intraday breaks, fades and retests start at its boundaries.
* **EMA bias + ADX strength** separates trending conditions from chop, so you can keep only the zones that agree with the bigger push.
* **Pivot-based zones (two pairs at once)** are simple, objective and fast. Midlines help with confirmations; touch counters quantify how many times the zone was tested.
* **Bubbles and densities** add the “effort” layer: where the push appeared and where liquidity is concentrated. You see **where** a move is likely to continue or fail.
Together they reduce ambiguity: **context + level + effort** — all on one screen.
---
## How it works (plain language)
* **VWAP** resets each day and is calculated as the cumulative sum of typical price multiplied by volume divided by total volume.
* **Opening Range** is either automatic (a multiple of your chart timeframe) or a manual number of minutes. While it is forming, the highest high and lowest low are captured and plotted as the range.
* **Trend filter**
* **EMA Fast** and **EMA Slow** define directional bias.
* **ADX (optional)** adds “trend strength”: only when the Average Directional Index is above the chosen threshold do we treat the move as strong. You can source this from a higher timeframe.
* **Zones**
* There are **two independent pairs** of pivots at the same time (for example 10-left 10-right and 5-left 5-right).
* Each detected pivot creates a **Supply** (from a swing high) or **Demand** (from a swing low) box. Box depth = **zone depth × Average True Range** for adaptive sizing; the boxes **extend forward**.
* Midline (optional dashed line inside the box) is the “balance” of the zone.
* **“Only in trend”** mode can hide boxes that go against the higher-timeframe bias.
* The **touch counter** increases when price revisits the box. Labels show the pair name and the number of touches.
* **Bubbles**
* A safe **delta proxy** measures bar pressure (for example, range-weighted close vs open).
* A **quantile filter** shows only unusually large pressure: choose lookback and percentile, and the script draws a circle sized by intensity (green = bullish pressure, red = bearish).
* **Densities**
* The script marks heavy activity clusters as **subtle bands** around price (depth = fraction of Average True Range).
* If price **breaks** a density with volume above its moving average, the band **disappears** (“eaten”), which often precedes continuation.
---
## How to use — practical playbooks
> Recommended chart: crypto or index futures, one to five minutes. Use **one hour** or **fifteen minutes** for the higher-timeframe bias.
### 1) Trend pullback scalp (continuation)
1. Enable **Only in trend** zones.
2. In an uptrend: wait for a pullback into a **Demand** zone that overlaps with VWAP or sits just below the Opening Range midpoint.
3. Look for **green bubbles** near the zone’s bottom or a fresh **density** under price.
4. Enter on a candle closing **back above the zone midline**.
5. Stop-loss: below the bottom of the zone or a small multiple of Average True Range.
6. Targets: previous swing high, Opening Range high, fixed risk multiples, or VWAP.
Mirror the logic for downtrends using Supply zones, red bubbles and densities above price.
### 2) Reversion with liquidity sweep (fade)
1. Bias neutral or countertrend allowed.
2. Price **wicks through** a zone boundary (or an Opening Range line) and **closes back inside** the zone.
3. The bubble color often flips (absorption).
4. Enter toward the **inside** of the zone; stop beyond the sweep wick; first target = zone midline, second = opposite side of the zone or VWAP.
### 3) Opening Range break and retest
1. Wait for the Opening Range to complete.
2. A break with a large bubble suggests intent.
3. Look for a **retest** into a nearby zone aligned with VWAP.
4. Trade continuation toward the next zone or the session extremes.
### 4) Density “eaten” continuation
1. When a density band **disappears** on high volume, it often means the resting liquidity was consumed.
2. Trade in the direction of the break, toward the nearest opposing zone.
---
## Settings — quick guide
**Core**
* *ATR Length* — used for zone and density depths.
* *Show VWAP / Show Opening Range*.
* *Opening Range*: Auto (multiple of timeframe minutes) or Manual minutes.
**Trend Filter**
* *Mode*: Off, EMA only, or EMA with ADX strength.
* *Use higher timeframe* and its value.
* *EMA Fast / EMA Slow*, *ADX Length*, *ADX threshold*.
* *Plot EMA filter* to display the moving averages.
**Zones (two pairs)**
* *Pivot A Left / Right* and *Pivot B Left / Right*.
* *Zone depth × ATR*, *Extend bars*.
* *Show zone midline*, *Only in trend zones*.
* Labels automatically show the touch counters.
**Bubbles**
* *Show Bubbles*.
* *Quantile lookback* and *Quantile percent* (higher percent = stricter filter, fewer bubbles).
**Densities**
* *Metric*: absolute delta proxy or raw volume.
* *Quantile lookback / percent*.
* *Depth × ATR*, *Extend bars*, *Merge distance* (in ATR),
* *Break condition*: volume moving average length and multiplier,
* *Midline for densities* (optional dashed line).
---
## Tips and risk management
* This script **does not use external order-flow feeds**. Delta is a **proxy** suitable for TradingView; tune quantiles per symbol and timeframe.
* Do not trade every bubble. Combine **context (trend + VWAP + Opening Range)** with **level (zone)** and **effort (bubble/density)**.
* Set stop-losses beyond the zone or at a fraction of Average True Range. Predefine risk per trade.
* Backtest your rules with a strategy script before using real funds.
* Markets differ. Parameters that work on Bitcoin may not transfer to low-liquidity altcoins or stocks.
* Nothing here is financial advice. Scalping is high-risk; slippage and over-trading can quickly damage your account.
---
## What makes PRO Scalper unique
* Two **independent** zone engines run in parallel, so you can see both **larger structure** and **fine intraday levels** at the same time.
* Clean **“only in trend” rendering** — zones and midlines against the bias can be hidden, reducing clutter and hesitation.
* **Touch counters** convert “feel” into numbers.
* **Self-contained order-flow visuals** (bubbles and densities) that require no extra data sources.
* Careful defaults: subtle colors for densities, clearer zones, and responsive auto Opening Range.
---
(RU)
## Что это такое
**PRO Scalper** — это индикатор для внутридневной торговли, который показывает **контекст и ликвидность прямо сейчас**.
Он объединяет пять модулей, которыми профессиональные скальперы пользуются вместе:
1. **VWAP** — средневзвешенная по объему цена за сессию, «справедливая стоимость» дня.
2. **Opening Range** — первая часть сессии, задающая баланс дня.
3. **Фильтр тренда** — направление старшего таймфрейма по **экспоненциальным средним** и при желании по силе тренда **Average Directional Index**.
4. **Две независимые системы зон спроса/предложения** — зоны строятся от подтвержденных экстремумов (пивотов), имеют **среднюю линию** и **счетчик касаний**.
5. **Визуализация «ордер-флоу»**:
* **Пузыри дельты** (зеленые/красные круги) — места повышенного покупательного/продажного давления, рассчитанные через безопасный **прокси-дельты**.
* **Плотности ликвидности** (ненавязчивые прямоугольные ленты) — скопления объема, которые нередко притягивают цену или удерживают ее и исчезают, когда «разъедаются» сильным движением.
Итог — **полная картинка момента**: среднее (VWAP), баланс дня (Opening Range), старшая сила (фильтр тренда), ближайшие уровни топлива/тормозов (зоны), текущие точки усилия (пузыри и плотности).
---
## Почему именно эти элементы
* **VWAP** показывает, где сосредоточена стоимость; цена либо вращается вокруг него, либо быстро уходит — идеальный ориентир скальпера.
* **Opening Range** фиксирует ранний аукцион — от его границ часто начинаются пробои, возвраты и ретесты.
* **EMA + ADX** отделяют тренд от «пилы», позволяя оставлять на графике только зоны по направлению старшего таймфрейма.
* **Зоны от пивотов** просты, объективны и быстры; средняя линия помогает подтверждать разворот, счетчик касаний переводит субъективность в цифры.
* **Пузыри и плотности** добавляют слой «усилия»: где именно возник толчок и где сконцентрирована ликвидность.
Комбинация **контекста + уровня + усилия** уменьшает двусмысленность и ускоряет принятие решения.
---
## Как это работает (простыми словами)
* **VWAP** каждый день стартует заново: сумма «типичной цены × объем» делится на суммарный объем.
* **Opening Range** — автоматический (кратный минутам вашего таймфрейма) или вручную заданный период; пока он формируется, фиксируются максимум и минимум.
* **Фильтр тренда**
* Две экспоненциальные средние задают направление.
* **ADX** (по желанию) добавляет «силу». Источник можно взять со старшего таймфрейма.
* **Зоны**
* Одновременно работает **две пары** пивотов (например 10-лево 10-право и 5-лево 5-право).
* От пивота строится зона **предложения** (от максимума) или **спроса** (от минимума). Глубина зоны = **коэффициент × Average True Range**; зона тянется вперед.
* Внутри рисуется **средняя линия** (по желанию).
* Режим **«только по тренду»** скрывает зоны против старшего направления.
* **Счетчик касаний** увеличивается, когда цена снова входит в зону; подпись показывает пару и количество касаний.
* **Пузыри**
* Используется безопасный **прокси-дельты** — измерение «напряжения» внутри свечи.
* Через **квантильный фильтр** выводятся только необычно сильные места: настраиваются окно и процент квантиля; размер кружка — сила, цвет: зеленый покупатели, красный продавцы.
* **Плотности**
* Крупные активности отмечаются **ненавязчивыми прямоугольниками** (глубина — доля Average True Range).
* Если плотность **пробивается** объемом выше среднего, она **исчезает** — часто это предвещает продолжение.
---
## Как пользоваться — практические схемы
> Рекомендация: крипто или фьючерсы, таймфрейм 1–5 минут. Для старшего фильтра удобно взять **1 час** или **15 минут**.
### 1) Скальп на откат по тренду
1. Включите **«только по тренду»**.
2. В восходящем тренде дождитесь отката в **зону спроса**, желательно рядом с **VWAP** или серединой **Opening Range**.
3. Подтверждение — **зеленые пузыри** у нижней границы зоны или свежая **плотность** под ценой.
4. Вход после закрытия свечи **выше средней линии** зоны.
5. Стоп-лосс: за нижнюю границу зоны или небольшой множитель Average True Range.
6. Цели: предыдущий максимум, верх Opening Range, фиксированные R-множители, либо VWAP.
Для нисходящего тренда зеркально: зоны предложения, красные пузыри и плотности над ценой.
### 2) Контрдвижение с «выбиванием ликвидности»
1. Нейтральный или контртрендовый режим.
2. Цена **выносит хвостом** границу зоны (или линию Opening Range) и **закрывается обратно внутри**.
3. Цвет пузыря часто меняется (поглощение).
4. Вход внутрь зоны; стоп — за хвост выбивания; цели: средняя линия, противоположная граница зоны или VWAP.
### 3) Пробой Opening Range + ретест
1. Дождитесь завершения диапазона.
2. Сильный пробой с крупным пузырем — признак намерения.
3. Ищите **ретест** в зоне по тренду рядом с линией диапазона и VWAP.
4. Торгуйте продолжение к следующей зоне.
### 4) Продолжение после «съеденной» плотности
1. Когда прямоугольник плотности **исчезает** на повышенном объеме, это значит, что ликвидность поглощена.
2. Торгуйте в сторону пробоя к ближайшей противоположной зоне.
---
## Настройки — краткая шпаргалка
**Core**
— Длина Average True Range (для размеров зон и плотностей).
— Включение VWAP и Opening Range.
— Длина Opening Range: автоматическая (кратная минутам ТФ) или ручная.
**Trend Filter**
— Режим: выкл., только средние, либо средние + ADX.
— Источник со старшего таймфрейма и его значение.
— Длины средних, длина ADX и порог силы.
— Показать/скрыть линий средних.
**Zones (две пары одновременно)**
— Пара A: лев/прав; Пара B: лев/прав.
— Глубина зоны × Average True Range, продление по барам.
— Средняя линия, режим **«только по тренду»**.
— Подписи со счетчиком касаний.
**Bubbles**
— Вкл./выкл., окно поиска и процент квантиля (чем выше процент — тем реже пузыри).
**Densities**
— Метрика: абсолютная прокси-дельты или чистый объем.
— Окно/квантиль, глубина × Average True Range, продление,
— Порог объединения (в Average True Range),
— Условие «разъедания» по объему,
— Средняя линия плотности (по желанию).
---
## Советы и риски
* Индикатор **не использует внешние потоки ордер-флоу**. Дельта — **прокси**, подходящая для TradingView; подбирайте квантили под инструмент и таймфрейм.
* Не торгуйте каждый пузырь. Склейте **контекст (тренд + VWAP + Opening Range)** с **уровнем (зона)** и **усилием (пузырь/плотность)**.
* Стоп-лосс — за границей зоны или по Average True Range. Риск на сделку задавайте заранее.
* Перед реальными деньгами протестируйте правила в стратегии.
* Разные рынки ведут себя по-разному; настройки из Биткоина могут не подойти малоликвидным альткоинам или акциям.
* Это не инвестиционная рекомендация. Скальпинг — высокий риск; проскальзывание и переизбыток сделок быстро наносят ущерб капиталу.
---
## Чем уникален PRO Scalper
* Две **одновременные** системы зон показывают и **крупную структуру**, и **точные локальные уровни**.
* Режим **«только по тренду»** чистит экран от лишних уровней и ускоряет решение.
* **Счетчики касаний** дают количественную опору.
* **Самодостаточные визуализации усилия** (пузыри и плотности) — без сторонних источников данных.
* Аккуратная цветовая схема: плотности — мягко, зоны — ясно; Opening Range — адаптивный.
Пусть он станет вашей «картой местности» для быстрых и дисциплинированных решений внутри дня.
RXTrend█ OVERVIEW
The "RXTrend" indicator is a technical analysis tool based on a unique approach to trend identification using RSI values from overbought and oversold zones. Designed for traders seeking a precise tool to identify key market levels and trend direction, the indicator offers flexible settings, dynamic trend lines, candlestick coloring, and buy/sell signals, supported by alerts for key events.
█ CONCEPTS
"RXTrend" leverages the Relative Strength Index (RSI) to identify overbought and oversold zones, which are often significant areas on the chart due to potentially higher volume, increased volatility, or acting as pivot points. To address this, I created an indicator that uses RSI values from these zones, mapping them to price levels to determine the trend. Additionally, for a clearer market picture, boxes are added to highlight overbought and oversold zones on the chart, and candlestick coloring is based on the direction of the RSI moving average. This provides further confirmation of the trend direction and identifies potential correction or reversal points. The indicator is universal and works across all markets (stocks, forex, cryptocurrencies) and timeframes.
█ FEATURES
- RSI Calculation: Calculates RSI based on the closing price over a specified period, with a default length of 14.
- Trend Line: A smoothed trend line based on mapping RSI values from overbought (for downtrends) or oversold (for uptrends) zones to price levels. RSI values are transformed into prices using the price range from a selected period (default: 50 bars) and then smoothed to form the trend line. The line changes color based on the trend direction (blue for uptrend, orange for downtrend).
- Candlestick Coloring: Option to color candles based on the direction of the RSI moving average (RSI MA). Candle colors align with the trend and box colors (blue for uptrend, orange for downtrend, gray for neutral).
- Overbought and Oversold Zones: Identifies overbought (RSI > OB) and oversold (RSI < OS) levels, drawing dynamic boxes on the price chart to reflect these zones. Boxes update in real-time, adjusting to new highs and lows.
- Buy and Sell Signals: Generates buy signals (blue "Buy" labels) when the price crosses above the smoothed oversold line and sell signals (orange "Sell" labels) when the price crosses below the smoothed overbought line.
- Shadow Fill: Option to fill the space between the trend line and price (HL2) with adjustable transparency, aiding visual trend assessment.
Alerts: Built-in alerts for:
- Buy and sell signals.
- Appearance of new overbought/oversold boxes.
- RSI MA direction change (candle color change to uptrend or downtrend).
Customization: Allows adjustment of RSI length, overbought/oversold levels, smoothing period, colors, box and label transparency, and the option to keep boxes after RSI returns to normal.
█ HOW TO USE
Add to Chart: Apply the indicator to your TradingView chart via the Pine Editor or Indicators menu.
Configure Settings:
RSI Settings:
- RSI Length: Sets the RSI calculation period (default: 14).
- Overbought Level (OB): Sets the overbought threshold (default: 70).
- Oversold Level (OS): Sets the oversold threshold (default: 30).
Price Settings:
- Price Range Lookback: Defines the period for calculating the price range (default: 50).
Candle Coloring:
- Color Candles: Enables/disables candle coloring based on RSI MA direction.
- RSI MA Length: Sets the RSI moving average period (default: 21).
Smoothing Settings:
- Smoothing Length: Degree of trend line smoothing (default: 5).
Colors:
- Trend Colors: Customize colors for uptrend (default: blue), downtrend (default: orange), and shadow fill.
Box Settings:
- Box Transparency: Adjusts box transparency (0-100).
- Box Colors: Sets colors for overbought (orange) and oversold (blue) zones.
- Keep Boxes: Determines if boxes remain after RSI returns to normal.
Signals:
- Show Buy/Sell Signals: Enables/disables signal label display.
- Label Transparency: Adjusts signal label transparency.
Interpreting Signals:
- Trend Line: Shows market direction (blue for uptrend, orange for downtrend).
- Buy Signals: Blue "Buy" label appears when the price crosses above the smoothed oversold line, signaling a potential uptrend.
- Sell Signals: Orange "Sell" label appears when the price crosses below the smoothed overbought line, signaling a potential downtrend.
- Overbought/Oversold Boxes: Orange boxes indicate overbought zones (RSI > OB), blue boxes indicate oversold zones (RSI < OS). Boxes expand dynamically in real-time.
- Candlestick Coloring: Candle colors align with the trend and box colors, reflecting RSI MA direction.
- Alerts: Set up alerts in TradingView for buy/sell signals, new overbought/oversold boxes, or RSI MA direction changes.
- Combining with Other Tools: Use the indicator alongside support/resistance levels, Fair Value Gaps (FVG), or other indicators to confirm signals.
█ APPLICATIONS
The "RXTrend" indicator is designed to identify key market zones and trend direction, making it useful for trend-following and reversal strategies. It enables:
- Trend Confirmation: Candlestick coloring and the trend line help assess the dominant market direction, supporting entry or exit decisions. The trend line can act as a significant support/resistance level, and a price bounce from it may provide a good entry point, especially when confirmed by Fibonacci levels. Additionally, the appearance of overbought/oversold boxes combined with a change in candle color (RSI MA direction) may indicate an impending correction. This allows analysis of potential market overextension and correction endings, enabling multiple entries within a trend.
- Overbought and Oversold Zone Identification: Boxes highlight potential reversal or correction points, especially when combined with support/resistance levels or FVG.
- Signal-Based Strategies: Buy and sell signals can be used as entry points in a trend or as warnings of potential reversals.
█ NOTES
- The indicator is universal and works across all markets and timeframes due to its RSI-based and price-mapping logic.
- Adjust settings (e.g., RSI length, OB/OS levels, smoothing) to suit your trading style and timeframe.
- Use in conjunction with other technical analysis tools to enhance signal accuracy.
T-Virus Sentiment [hapharmonic]🧬 T-Virus Sentiment: Visualize the Market's DNA
Remember the iconic T-Virus vial from the first Resident Evil? That powerful, swirling helix of potential has always fascinated me. It sparked an idea: what if we could visualize the market's underlying health in a similar way? What if we could capture the "genetic code" of market sentiment and contain it within a dynamic, 3D indicator? This project is the result of that idea, brought to life with Pine Script.
The indicator's main goal is to measure the strength and direction of market sentiment by analyzing the "genetic code" of price action through a variety of trusted indicators. The result is displayed as a liquid level within a DNA helix, a bubble density representing buying pressure, and a T-Virus mascot that reflects the overall mood.
🧐 Core Concept: How It Works
The primary output of the indicator is the "Active %" gauge you see on the right side of the vial. This percentage represents the overall sentiment score, calculated as an average from 7 different technical analysis tools. Each tool is analyzed on every bar and assigned a score from 1 (strong bearish pressure) to 5 (strong bullish potential).
In this indicator, we re-imagine market dynamics through the lens of a viral outbreak. A strong bear market is like a virus taking hold, pulling all technical signals down into a state of weakness. Conversely, a powerful bull market is like an antiviral serum ; positive signals rise and spread toward the top of the vial, indicating that the system is being injected with strength.
This is not just another line on a chart. It's a comprehensive sentiment dashboard designed to give an immediate, at-a-glance understanding of the confluence between 7 classic technical indicators. The incredible 3D model of the vial itself was inspired by a design concept found here .
⚛️ The 4 Core Elements of T-Virus Sentiment
These four elements work in harmony to give a complete, multi-faceted picture of market sentiment. Each component tells a different part of the story.
The Virus Mascot: An instant emotional cue. This character provides the quickest possible read on the overall market mood, combining sentiment with volume pressure.
The Antiviral Serum Level: The main quantitative output. This is the liquid level in the DNA helix and the percentage gauge on the right, representing the average sentiment score from all 7 indicators.
Buy Pressure & Bubble Density: This visualizes volume flow. The density of bubbles represents the intensity of accumulation (buying) versus distribution (selling). It's the "power" behind the move.
The Signal Distribution: This shows the confluence (or dispersion) of sentiment. Are all signals bullish and clustered at the top, or are they scattered, indicating a conflicted market? The position of the indicator labels is crucial, as each is assigned to one of five distinct zones:
Base Bottom: The market is at its weakest. Signals here suggest strong bearish control and distribution.
Lower Zone: The market is still bearish, but signals may be showing early signs of accumulation or bottoming.
Neutral Core (Center): A state of balance or sideways consolidation. The market is waiting for a new direction.
Upper Zone: Bullish momentum is becoming clear. Signals are strengthening and showing bullish control.
Top Cap: The market is "heating up" with strong bullish sentiment, potentially nearing overbought conditions.
🐂🐻 The Virus Mascot: The At-a-Glance Indicator
This character acts as a shortcut to confirm market health. It combines the sentiment score with volume, preventing false confidence in a low-volume rally.
Its state is determined by a dual-check: the overall "Antiviral Serum Level" and the "Buy Pressure" must both be above 50%.
Green & Smiling: The 'all clear' signal. This means that not only is the overall technical sentiment bullish, but it's also being supported by real buying pressure. This is a sign of a healthy bull market.
Red & Angry: A warning sign. This appears if either the sentiment is weak, or a bullish sentiment is not being confirmed by buying volume. The latter could indicate a potential "bull trap" or an exhaustive move.
This mascot can be disabled from the settings page under "Virus Mascot Styling" if a cleaner look is preferred.
🫧 Bubble Density: Gauging Buy vs. Sell Pressure
The bubbles visualize the battle between buyers and sellers. There are two modes to control how this is calculated:
Mode 1: Visible Range (The 'Big Picture' View)
This default mode is best for getting a broad, contextual understanding of the current session. It dynamically analyzes the volume of every single candlestick currently visible on the screen to calculate the buy/sell pressure ratio. It answers the question: "Over the entire period I'm looking at, who is in control?" As you zoom in or out, the calculation adapts.
Mode 2: Custom Lookback (The 'Precision' View)
This mode is for traders who need to analyze short-term pressure. You can define a fixed number of recent bars to analyze, which is perfect for scalping or understanding the volume dynamics leading into a key level. It answers the question: "What is happening right now ?" In the example above, a lookback of 2 focuses only on the most recent action, clearly showing intense, immediate selling pressure (few bubbles) and a corresponding drop in the sentiment score to 29%.
ℹ️ Interactive Tooltips: Dive Deeper
We believe in transparency, not 'black box' indicators. This feature transforms the indicator from a visual aid into an active learning tool.
Simply hover the mouse over any indicator label (like EMA, OBV, etc.) to get a detailed tooltip. It will explain the specific data points and thresholds that signal met to be placed in its current zone. This helps build trust in the signals and allows users to fine-tune the indicator settings to better match their own trading style.
🎯 The Scoring Logic Breakdown
The "Antiviral Serum Level" gauge is the average score from 7 technical analysis tools. Each is graded on a 5-point scale (1=Strong Bearish to 5=Strong Bullish). Here’s a detailed, transparent look at how each "gene" is evaluated:
Relative Strength Index (RSI)
Measures momentum and overbought/oversold conditions.
Group 1 (Strong Bearish): RSI > 80 (Extreme Overbought)
Group 2 (Bearish): 70 < RSI ≤ 80 (Overbought)
Group 3 (Neutral): 30 ≤ RSI ≤ 70
Group 4 (Bullish): 20 ≤ RSI < 30 (Oversold)
Group 5 (Strong Bullish): RSI < 20 (Extreme Oversold)
Exponential Moving Averages (EMA)
Evaluates the trend's strength and structure based on the alignment of multiple EMAs (9, 21, 50, 100, 200, 250).
Group 1 (Strong Bearish): A perfect bearish sequence (9 < 21 < 50 < ...)
Group 2 (Bearish Transition): Early signs of a potential reversal (e.g., 9 > 21 but still below 50)
Group 3 (Neutral / Mixed): MAs are intertwined or showing a partial bullish sequence.
Group 4 (Bullish): A strong bullish sequence is forming (e.g., 9 > 21 > 50 > 100)
Group 5 (Strong Bullish): A perfect bullish sequence (9 > 21 > 50 > 100 > 200 > 250)
Moving Average Convergence Divergence (MACD)
Analyzes the relationship between two moving averages to gauge momentum.
Group 1 (Strong Bearish): MACD & Histogram are negative and momentum is falling.
Group 2 (Weakening Bearish): MACD is negative but the histogram is rising or positive.
Group 3 (Neutral / Crossover): A crossover event is occurring near the zero line.
Group 4 (Bullish): MACD & Histogram are positive.
Group 5 (Strong Bullish): MACD & Histogram are positive, rising strongly, and accelerating.
Average Directional Index (ADX)
Measures trend strength, not direction. The score is based on both ADX value and the dominance of DI+ vs DI-.
Group 1 (Bearish / No Trend): ADX < 20 and DI- is dominant.
Group 2 (Developing Bearish Trend): 20 ≤ ADX < 25 and DI- is dominant.
Group 3 (Neutral / Indecision): Trend is weak or DI+ and DI- are nearly equal.
Group 4 (Developing Bullish Trend): 25 ≤ ADX ≤ 40 and DI+ is dominant.
Group 5 (Strong Bullish Trend): ADX > 40 and DI+ is dominant.
Ichimoku Cloud (IKH)
A comprehensive indicator that defines support/resistance, momentum, and trend direction.
Group 1 (Strong Bearish): Price is below the Kumo, Tenkan < Kijun, and Chikou is below price.
Group 2 (Bearish): Price is inside or below the Kumo, with mixed secondary signals.
Group 3 (Neutral / Ranging): Price is inside the Kumo, often with a Tenkan/Kijun cross.
Group 4 (Bullish): Price is above the Kumo with strong primary signals.
Group 5 (Strong Bullish): All signals are aligned bullishly: price above Kumo, bullish Tenkan/Kijun cross, bullish future Kumo, and Chikou above price.
Bollinger Bands (BB)
Measures volatility and relative price levels.
Group 1 (Strong Bearish): Price is below the lower band.
Group 2 (Bearish Territory): Price is between the lower band and the basis line.
Group 3 (Neutral): Price is hovering around the basis line.
Group 4 (Bullish Territory): Price is between the basis line and the upper band.
Group 5 (Strong Bullish): Price is above the upper band.
On-Balance Volume (OBV)
Uses volume flow to predict price changes. The score is based on OBV's trend and its position relative to its moving average.
Group 1 (Strong Bearish): OBV is below its MA and falling.
Group 2 (Weakening Bearish): OBV is below its MA but showing signs of rising.
Group 3 (Neutral): OBV is very close to its MA.
Group 4 (Bullish): OBV is above its MA and rising.
Group 5 (Strong Bullish): OBV is above its MA, rising strongly, and showing signs of a volume spike.
🧭 How to Use the T-Virus Sentiment Indicator
IMPORTANT: This indicator is a sentiment dashboard , not a direct buy/sell signal generator. Its strength lies in showing confluence and providing a quick, holistic view of the market's technical health.
Confirmation Tool: Use the "Active %" gauge to confirm a trade setup from your primary strategy. For example, if you see a bullish chart pattern, a high and rising sentiment score can add confidence to your trade.
Momentum & Trend Gauge: A consistently high score (e.g., > 75%) suggests strong, established bullish momentum. A consistently low score (< 25%) suggests strong bearish control. A score hovering around 50% often indicates a ranging or indecisive market.
Divergence & Warning System: Pay attention to divergences. If the price is making new highs but the sentiment score is failing to follow or is actively decreasing, it could be an early warning sign that the underlying momentum is weakening.
⚙️ Settings & Customization
The indicator is highly customizable to fit any trading style.
Position & Anchor: Control where the vial appears on the chart.
Styling (Vial, Helix, etc.): Nearly every visual element can be color-customized.
Signals: This is where the real power is. All underlying indicator parameters (RSI length, MACD settings, etc.) can be fine-tuned to match a personal strategy. The text labels can also be disabled if the chart feels cluttered.
Enjoy visualizing the market's DNA with the T-Virus Sentiment indicator
Advanced ICT Theory - A-ICT📊 Advanced ICT Theory (A-ICT): The Institutional Manipulation Detector
Are you tired of being the liquidity? Stop chasing shadows and start tracking the architects of price movement.
This is not another lagging indicator. This is a complete framework for viewing the market through the lens of institutional traders. Advanced ICT Theory (A-ICT) is an all-in-one, military-grade analysis engine designed to decode the complex language of "Smart Money." It automates the core tenets of Inner Circle Trader (ICT) methodology, moving beyond simple patterns to build a dynamic, real-time narrative of market manipulation, liquidity engineering, and institutional order flow.
AIT provides a living blueprint of the market, identifying high-probability zones, tracking structural shifts, and scoring the quality of setups with a sophisticated, multi-factor algorithm. This is your X-ray into the market's true intentions.
🔬 THE CORE ENGINE: DECODING THE THEORY & FORMULAS
A-ICT is built upon a sophisticated, multi-layered logic system that interprets price action as a story of cause and effect. It does not guess; it confirms. Here is the foundational theory that drives the engine:
1. Market Structure: The Blueprint of Trend
The script first establishes a deep understanding of the market's skeleton through multi-level pivot analysis. It uses ta.pivothigh and ta.pivotlow to identify significant swing points.
Internal Structure (iBOS): Minor swings that show the short-term order flow. A break of internal structure is the first whisper of a potential shift.
External Structure (eBOS): Major swing points that define the primary trend. A confirmed break of external structure is a powerful statement of trend continuation. AIT validates this with optional Volume Confirmation (volume > volumeSMA * 1.2) and Candle Confirmation to ensure the break is driven by institutional force, not just a random spike.
Change of Character (CHoCH): This is the earthquake. A CHoCH occurs when a confirmed eBOS happens against the prevailing trend (e.g., a bearish eBOS in a clear uptrend). A-ICT flags this immediately, as it is the strongest signal that the primary trend is under threat of reversal.
2. Liquidity Engineering: The Fuel of the Market
Institutions don't buy into strength; they buy into weakness. They need liquidity. A-ICT maps these liquidity pools with forensic precision:
Buyside & Sellside Liquidity (BSL/SSL): Using ta.highest and ta.lowest, AIT identifies recent highs and lows where clusters of stop-loss orders (liquidity) are resting. These are institutional targets.
Liquidity Sweeps: This is the "manipulation" part of the detector. AIT has a specific formula to detect a sweep: high > bsl and close < bsl . This signifies that institutions pushed price just high enough to trigger buy-stops before aggressively selling—a classic "stop hunt." This event dramatically increases the quality score of subsequent patterns.
3. The Element Lifecycle: From Potential to Power
This is the revolutionary heart of A-ICT. Zones are not static; they have a lifecycle. AIT tracks this with its dynamic classification engine.
Phase 1: PENDING (Yellow): The script identifies a potential zone of interest based on a specific candle formation (a "displacement"). It is marked as "Pending" because its true nature is unknown. It is a question.
Phase 2: CLASSIFICATION: After the zone is created, AIT watches what happens next. The zone's identity is defined by its actions:
ORDER BLOCK (Blue): The highest-grade element. A zone is classified as an Order Block if it directly causes a Break of Structure (BOS) . This is the footprint of institutions entering the market with enough force to validate the new trend direction.
TRAP ZONE (Orange): A zone is classified as a Trap Zone if it is directly involved in a Liquidity Sweep . This indicates the zone was used to engineer liquidity, setting a "trap" for retail traders before a reversal.
REVERSAL / S&R ZONE (Green): If a zone is not powerful enough to cause a BOS or a major sweep, but still serves as a pivot point, it's classified as a general support/resistance or reversal zone.
4. Market Inefficiencies: Gaps in the Matrix
Fair Value Gaps (FVG): AIT detects FVGs—a 3-bar pattern indicating an imbalance—with a strict formula: low > high (for a bullish FVG) and gapSize > atr14 * 0.5. This ensures only significant, volatile gaps are shown. An FVG co-located with an Order Block is a high-confluence setup.
5. Premium & Discount: The Law of Value
Institutions buy at wholesale (Discount) and sell at retail (Premium). AIT uses a pdLookback to define the current dealing range and divides it into three zones: Premium (sell zone), Discount (buy zone), and Equilibrium. An element's quality score is massively boosted if it aligns with this principle (e.g., a bullish Order Block in a Discount zone).
⚙️ THE CONTROL PANEL: A COMPLETE GUIDE TO THE INPUTS MENU
Every setting is a lever, allowing you to tune the AIT engine to your exact specifications. Master these to unlock the script's full potential.
🎯 A-ICT Detection Engine
Min Displacement Candles: Controls the sensitivity of element detection. How it works: It defines the number of subsequent candles that must be "inside" a large parent candle. Best practice: Use 2-3 for a balanced view on most timeframes. A higher number (4-5) will find only major, more significant zones, ideal for swing trading. A lower number (1) is highly sensitive, suitable for scalping.
Mitigation Method: Defines when a zone is considered "used up" or mitigated. How it works: Cross triggers as soon as price touches the zone's boundary. Close requires a candle to fully close beyond it. Best practice: Cross is more responsive for fast-moving markets. Close is more conservative and helps filter out fake-outs caused by wicks, making it safer for confirmations.
Min Element Size (ATR): A crucial noise filter. How it works: It requires a detected zone to be at least this multiple of the Average True Range (ATR). Best practice: Keep this around 0.5. If you see too many tiny, irrelevant zones, increase this value to 0.8 or 1.0. If you feel the script is missing smaller but valid zones, decrease it to 0.3.
Age Threshold & Pending Timeout: These manage visual clutter. How they work: Age Threshold removes old, mitigated elements after a set number of bars. Pending Timeout removes a "Pending" element if it isn't classified within a certain window. Best practice: The default settings are optimized. If your chart feels cluttered, reduce the Age Threshold. If pending zones disappear too quickly, increase the Pending Timeout.
Min Quality Threshold: Your primary visual filter. How it works: It hides all elements (boxes, lines, labels) that do not meet this minimum quality score (0-100). Best practice: Start with the default 30. To see only A- or B-grade setups, increase this to 60 or 70 for an exceptionally clean, high-probability view.
🏗️ Market Structure
Lookbacks (Internal, External, Major): These define the sensitivity of the trend analysis. How they work: They set the number of bars to the left and right for pivot detection. Best practice: Use smaller values for Internal (e.g., 3) to see minor structure and larger values for External (e.g., 10-15) to map the main trend. For a macro, long-term view, increase the Major Swing Lookback.
Require Volume/Candle Confirmation: Toggles for quality control on BOS/CHoCH signals. Best practice: It is highly recommended to keep these enabled. Disabling them will result in more structure signals, but many will be false alarms. They are your filter against market noise.
... (Continue this detailed breakdown for every single input group: Display Configuration, Zones Style, Levels Appearance, Colors, Dashboards, MTF, Liquidity, Premium/Discount, Sessions, and IPDA).
📊 THE INTELLIGENCE DASHBOARDS: YOUR COMMAND CENTER
The dashboards synthesize all the complex analysis into a simple, actionable intelligence briefing.
Main Dashboard (Bottom Right)
ICT Metrics & Breakdown: This is your statistical overview. Total Elements shows how much structure the script is tracking. High Quality instantly tells you if there are any A/B grade setups nearby. Unmitigated vs. Mitigated shows the balance of fresh opportunities versus resolved price action. The breakdown by Order Blocks, Trap Zones, etc., gives you a quick read on the market's recent character.
Structure & Market Context: This is your core bias. Order Flow tells you the current script-determined trend. Last BOS shows you the most recent structural event. CHoCH Active is a critical warning. HTF Bias shows if you are aligned with the higher timeframe—the checkmark (✓) for alignment is one of the most important confluence factors.
Smart Money Flow: A volume-based sentiment gauge. Net Flow shows the raw buying vs. selling pressure, while the Bias provides an interpretation (e.g., "STRONG BULLISH FLOW").
Key Guide (Large Dashboard only): A built-in legend so you never have to guess. It defines every pattern, structure type, and special level visually.
📖 Narrative Dashboard (Bottom Left)
This is the "story" of the market, updated in real-time. It's designed to build your trading thesis.
Recent Elements Table: A live list of the most recent, high-quality setups. It displays the Type , its Narrative Role (e.g., "Bullish OB caused BOS"), its raw Quality percentage, and its final Trade Score grade. This is your at-a-glance opportunity scanner.
Market Narrative Section: This is the soul of A-ICT. It combines all data points into a human-readable story:
📍 Current Phase: Tells you if you are in a high-volatility Killzone or a consolidation phase like the Asian Range.
🎯 Bias & Alignment: Your primary direction, with a clear indicator of HTF alignment or conflict.
🔗 Events: A causal sequence of recent events, like "💧 Sell-side liquidity swept →
📊 Bullish BOS → 🎯 Active Order Block".
🎯 Next Expectation: The script's logical conclusion. It provides a specific, forward-looking hypothesis, such as "📉 Pullback expected to bullish OB at 1.2345 before continuation up."
🎨 READING THE BATTLEFIELD: A VISUAL INTERPRETATION GUIDE
Every color and line is a piece of information. Learn to read them together to see the full picture.
The Core Zones (Boxes):
Blue Box (Order Block): Highest probability zone for trend continuation. Look for entries here.
Orange Box (Trap Zone): A manipulation footprint. Expect a potential reversal after price interacts with this zone.
Green Box (Reversal/S&R): A standard pivot area. A good reference point but requires more confluence.
Purple Box (FVG): A market imbalance. Acts as a magnet for price. An FVG inside an Order Block is an A+ confluence.
The Structural Lines:
Green/Red Line (eBOS): Confirms the trend direction. A break above the green line is bullish; a break below the red line is bearish.
Thick Orange Line (CHoCH): WARNING. The previous trend is now in question. The market character has changed.
Blue/Red Lines (BSL/SSL): Liquidity targets. Expect price to gravitate towards these lines. A dotted line with a checkmark (✓) means the liquidity has been "swept" or "purged."
How to Synthesize: The magic is in the confluence. A perfect setup might look like this: Price sweeps below a red SSL line , enters a green Discount Zone during the NY Killzone , and forms a blue Order Block which then causes a green eBOS . This sequence, visible at a glance, is the story of a high-probability long setup.
🔧 THE ARCHITECT'S VISION: THE DEVELOPMENT JOURNEY
A-ICT was forged from the frustration of using lagging indicators in a market that is forward-looking. Traditional tools are reactive; they tell you what happened. The vision for A-ICT was to create a proactive engine that could anticipate institutional behavior by understanding their objectives: liquidity and efficiency. The development process was centered on creating a "lifecycle" for price patterns—the idea that a zone's true meaning is only revealed by its consequence. This led to the post-breakout classification system and the narrative-building engine. It's designed not just to show you patterns, but to tell you their story.
⚠️ RISK DISCLAIMER & BEST PRACTICES
Advanced ICT Theory (A-ICT) is a professional-grade analytical tool and does not provide financial advice or direct buy/sell signals. Its analysis is based on historical price action and probabilities. All forms of trading involve substantial risk. Past performance is not indicative of future results. Always use this tool as part of a comprehensive trading plan that includes your own analysis and a robust risk management strategy. Do not trade based on this indicator alone.
観の目つよく、見の目よわく
"Kan no me tsuyoku, ken no me yowaku"
— Miyamoto Musashi, The Book of Five Rings
English: "Perceive that which cannot be seen with the eye."
— Dskyz, Trade with insight. Trade with anticipation.
Support and Resistance Power Channel [ChartPrime]The Support and Resistance Power Channel indicator helps traders visualize key support and resistance zones, along with buy and sell power within those zones. By identifying the highest and lowest prices within a defined range, this indicator provides insight into potential price reversals and market strength. It calculates the strength of buy and sell pressure within the zones and includes additional features like midline values and delayed signals to reduce false breakouts.
⯁ KEY FEATURES AND HOW TO USE
⯌ Support and Resistance Zones :
This indicator identifies dynamic support (lower zone) and resistance (upper zone) levels, allowing traders to easily visualize key price levels. These zones are customizable with settings for the length of the channel and how far the zones extend into the future. The zones can be used to predict areas of potential price reversal or consolidation.
⯌ Buy and Sell Power :
Within the upper resistance zone, the indicator calculates Sell Power based on the number of bearish candles, while the lower support zone calculates Buy Power based on bullish candles. This feature helps traders understand the strength of buying or selling activity within each zone.
Example of buy and sell power tracking:
⯌ Highest, Lowest, and Mid Price Levels :
The indicator marks the highest and lowest price levels within the channel with an "X," and displays these values at the end of the channel. Additionally, the midline (average of the high and low) is plotted with a dotted line, showing a key area that the price often retests during trends.
⯌ Delayed Signal Markers :
To prevent false breakouts, the indicator includes a 2-bar delay for signals. These signals are plotted when the price crosses above or below the resistance or support zones, confirming potential reversals or breakouts. Arrows or diamonds are used to mark these signals on the chart.
Example of delayed breakout signals on the chart:
⯌ Extend Zones into the Future :
In the settings, traders can extend the support and resistance zones further into the future, allowing for ongoing analysis even after the initial levels have been identified. This feature can help with forward-looking trade planning.
⯁ USER INPUTS
Length : Defines the number of bars used to calculate the support and resistance zones.
Extend : Sets how far the support and resistance zones should be extended into the future.
Top and Bottom Colors : Allows customization of the colors for the support and resistance zones.
⯁ CONCLUSION
The Support and Resistance Power Channel indicator provides a powerful and visually intuitive way to track key market levels, buy and sell pressure, and potential reversals. With its real-time zone plotting and the calculation of power within each zone, it offers traders essential insights for making more informed trading decisions.
Liqudation HeatMap [BigBeluga]🔵 OVERVIEW
An advanced liquidity visualization tool that plots horizontal heat zones to highlight where potential liquidations and volume clusters are most likely hiding beneath price action.
Liqudation HeatMap scans historical price movements for local highs and lows with elevated volume or candle range. It then draws dynamic heatmap boxes—shaded from lime (low interest) to yellow (high interest)—revealing potential zones of trapped positions or stop clusters. A vertical scale on the right shows you the relative strength of volume behind each level, from 0 to the highest detected.
🔵 CONCEPTS
Maps areas of potential liquidity using volume or candle range (if volume is unavailable).
Identifies swing highs/lows (pivots) and extends heatmap boxes outward from these levels. Colors each zone based on the relative strength of volume concentration.
Fades or removes zones once price crosses their midpoints, simulating the idea of liquidity being “consumed.”
Displays a live vertical scale that shows the volume range for quick reference.
🔵 FEATURES
Dynamic Heatmap Zones:
Draws few boxes above and after pivot highs and below pivot lows, each shaded based on volume concentration.
Smart Coloring System:
Uses a gradient from lime (low) to yellow (high) to visually distinguish between weak and strong liquidity zones.
Adaptive ATR Widths:
Automatically adjusts zone thickness based on volatility (ATR), scaling intelligently across timeframes.
Liquidity Consumption Logic:
Zones are stope extending once price interacts with them—mimicking the behavior of real liquidation sweeps.
Volume Scale Legend:
A real-time scale is plotted on the right side, showing the min-max range of volume used for heat calculations.
🔵 HOW TO USE
Look for thick yellow zones to identify areas of concentrated stop losses or liquidation triggers.
Use these levels to anticipate mean reversion points or high-volatility zones.
Combine with your trend or structure tools to trade into or fade these liquidity pools.
On lower timeframes, use this tool to confirm entries around sweeps or deviations.
Use the right-side scale to compare relative zone strength instantly.
🔵 CONCLUSION
Liqudation HeatMap is a powerful visualization tool that uncovers where liquidity likely resides on the chart. By highlighting hidden traps and reactive levels in real-time, it gives traders a significant edge when it comes to spotting stop hunts, mean reversions, and areas of institutional interest. Whether you’re scalping or swing trading, this heatmap provides unmatched context on the market’s hidden intent.
Nef33 Forex & Crypto Trading Signals PRO
1. Understanding the Indicator's Context
The indicator generates signals based on confluence (trend, volume, key zones, etc.), but it does not include predefined SL or TP levels. To establish them, we must:
Use dynamic or static support/resistance levels already present in the script.
Incorporate volatility (such as ATR) to adjust the levels based on market conditions.
Define a risk/reward ratio (e.g., 1:2).
2. Options for Determining SL and TP
Below, I provide several ideas based on the tools available in the script:
Stop Loss (SL)
The SL should protect you from adverse movements. You can base it on:
ATR (Volatility): Use the smoothed ATR (atr_smooth) multiplied by a factor (e.g., 1.5 or 2) to set a dynamic SL.
Buy: SL = Entry Price - (atr_smooth * atr_mult).
Sell: SL = Entry Price + (atr_smooth * atr_mult).
Key Zones: Place the SL below a support (for buys) or above a resistance (for sells), using Order Blocks, Fair Value Gaps, or Liquidity Zones.
Buy: SL below the nearest ob_lows or fvg_lows.
Sell: SL above the nearest ob_highs or fvg_highs.
VWAP: Use the daily VWAP (vwap_day) as a critical level.
Buy: SL below vwap_day.
Sell: SL above vwap_day.
Take Profit (TP)
The TP should maximize profits. You can base it on:
Risk/Reward Ratio: Multiply the SL distance by a factor (e.g., 2 or 3).
Buy: TP = Entry Price + (SL Distance * 2).
Sell: TP = Entry Price - (SL Distance * 2).
Key Zones: Target the next resistance (for buys) or support (for sells).
Buy: TP at the next ob_highs, fvg_highs, or liq_zone_high.
Sell: TP at the next ob_lows, fvg_lows, or liq_zone_low.
Ichimoku: Use the cloud levels (Senkou Span A/B) as targets.
Buy: TP at senkou_span_a or senkou_span_b (whichever is higher).
Sell: TP at senkou_span_a or senkou_span_b (whichever is lower).
3. Practical Implementation
Since the script does not automatically draw SL/TP, you can:
Calculate them manually: Observe the chart and use the levels mentioned.
Modify the code: Add SL/TP as labels (label.new) at the moment of the signal.
Here’s an example of how to modify the code to display SL and TP based on ATR with a 1:2 risk/reward ratio:
Modified Code (Signals Section)
Find the lines where the signals (trade_buy and trade_sell) are generated and add the following:
pinescript
// Calculate SL and TP based on ATR
atr_sl_mult = 1.5 // Multiplier for SL
atr_tp_mult = 3.0 // Multiplier for TP (1:2 ratio)
sl_distance = atr_smooth * atr_sl_mult
tp_distance = atr_smooth * atr_tp_mult
if trade_buy
entry_price = close
sl_price = entry_price - sl_distance
tp_price = entry_price + tp_distance
label.new(bar_index, low, "Buy: " + str.tostring(math.round(bull_conditions, 1)), color=color.green, textcolor=color.white, style=label.style_label_up, size=size.tiny)
label.new(bar_index, sl_price, "SL: " + str.tostring(math.round(sl_price, 2)), color=color.red, textcolor=color.white, style=label.style_label_down, size=size.tiny)
label.new(bar_index, tp_price, "TP: " + str.tostring(math.round(tp_price, 2)), color=color.blue, textcolor=color.white, style=label.style_label_up, size=size.tiny)
if trade_sell
entry_price = close
sl_price = entry_price + sl_distance
tp_price = entry_price - tp_distance
label.new(bar_index, high, "Sell: " + str.tostring(math.round(bear_conditions, 1)), color=color.red, textcolor=color.white, style=label.style_label_down, size=size.tiny)
label.new(bar_index, sl_price, "SL: " + str.tostring(math.round(sl_price, 2)), color=color.red, textcolor=color.white, style=label.style_label_up, size=size.tiny)
label.new(bar_index, tp_price, "TP: " + str.tostring(math.round(tp_price, 2)), color=color.blue, textcolor=color.white, style=label.style_label_down, size=size.tiny)
Code Explanation
SL: Calculated by subtracting/adding sl_distance to the entry price (close) depending on whether it’s a buy or sell.
TP: Calculated with a double distance (tp_distance) for a 1:2 risk/reward ratio.
Visualization: Labels are added to the chart to display SL (red) and TP (blue).
4. Practical Strategy Without Modifying the Code
If you don’t want to modify the script, follow these steps manually:
Entry: Take the trade_buy or trade_sell signal.
SL: Check the smoothed ATR (atr_smooth) on the chart or calculate a fixed level (e.g., 1.5 times the ATR). Also, review nearby key zones (OB, FVG, VWAP).
TP: Define a target based on the next key zone or multiply the SL distance by 2 or 3.
Example:
Buy at 100, ATR = 2.
SL = 100 - (2 * 1.5) = 97.
TP = 100 + (2 * 3) = 106.
5. Recommendations
Test in Demo: Apply this logic in a demo account to adjust the multipliers (atr_sl_mult, atr_tp_mult) based on the market (forex or crypto).
Combine with Zones: If the ATR-based SL is too wide, use the nearest OB or FVG as a reference.
Risk/Reward Ratio: Adjust the TP based on your tolerance (1:1, 1:2, 1:3)
Order Block plusIndicator Description: “Order Block Plus”
This indicator is designed for traders who aim to identify the strength and position of supply and demand zones on the chart and receive key signals for entry or exit. Below is a detailed explanation of its functionality:
Features and Applications:
1. Identifying Supply and Demand Zones:
• Supply (Resistance) and Demand (Support) zones are visually displayed on the chart.
• Each zone is marked with a specific color (Yellow for supply, Blue for demand) for easy identification.
2. Breakout and Reversal Signals:
• The indicator detects Breakout and Reversal patterns and highlights them with alerts.
• Example: Detecting price breaking above or below key levels.
3. Candlestick Pattern Support:
• Identifies powerful patterns such as Bullish Engulf, Bearish Engulf, Three White Soldiers, and Three Black Crows.
4. Displaying Zone Strength:
• The indicator shows the strength of supply and demand zones using text displayed inside each zone.
5. Alerts:
• Provides alerts for zone breakouts, breakdowns, and new zone formations.
• Example: Alerts for breaking a demand or supply zone.
How to Use:
1. Adding to the Chart:
• The indicator can be applied to any time frame and is suitable for Forex, stocks, or cryptocurrency charts.
2. Identifying Trading Opportunities:
• Demand zones indicate strong support levels where prices are likely to rise.
• Supply zones indicate resistance levels where prices are likely to fall.
3. Examining Zone Strength:
• The strength of each zone is displayed with text inside the zone.
Indicator Settings:
• Zone Colors:
• The default colors for supply and demand zones are yellow and blue, but they can be customized.
• Alerts:
• Configurable alerts for breakouts or reversals.
Advantages:
• Automatic detection of key price levels.
• Accurate and timely alerts for trades.
• Customizable for professional traders.
Note: This indicator is designed for technical analysis and should be used alongside a suitable trading strategy.
ICT Power Of Three | Flux Charts💎 GENERAL OVERVIEW
Introducing our new ICT Power Of Three Indicator! This indicator is built around the ICT's "Power Of Three" strategy. This strategy makes use of these 3 key smart money concepts : Accumulation, Manipulation and Distribution. Each step is explained in detail within this write-up. For more information about the process, check the "HOW DOES IT WORK" section.
Features of the new ICT Power Of Three Indicator :
Implementation of ICT's Power Of Three Strategy
Different Algorithm Modes
Customizable Execution Settings
Customizable Backtesting Dashboard
Alerts for Buy, Sell, TP & SL Signals
📌 HOW DOES IT WORK ?
The "Power Of Three" comes from these three keywords "Accumulation, Manipulation and Distribution". Here is a brief explanation of each keyword :
Accumulation -> Accumulation phase is when the smart money accumulate their positions in a fixed range. This phase indicates price stability, generally meaning that the price constantly switches between up & down trend between a low and a high pivot point. When the indicator detects an accumulation zone, the Power Of Three strategy begins.
Manipulation -> When the smart money needs to increase their position sizes, they need retail traders' positions for liquidity. So, they manipulate the market into the opposite direction of their intended direction. This will result in retail traders opening positions the way that the smart money intended them to do, creating liquidity. After this step, the real move that the smart money intended begins.
Distribution -> This is when the real intention of the smart money comes into action. With the new liquidity thanks to the manipulation phase, the smart money add their positions towards the opposite direction of the retail mindset. The purpose of this indicator is to detect the accumulation and manipulation phases, and help the trader move towards the same direction as the smart money for their trades.
Detection Methods Of The Indicator :
Accumulation -> The indicator detects accumulation zones as explained step-by-step :
1. Draw two lines from the lowest point and the highest point of the latest X bars.
2. If the (high line - low line) is lower than Average True Range (ATR) * accumulationConstant
3. After the condition is validated, an accumulation zone is detected. The accumulation zone will be invalidated and manipulation phase will begin when the range is broken.
Manipulation -> If the accumulation range is broken, check if the current bar closes / wicks above the (high line + ATR * manipulationConstant) or below the (low line - ATR * manipulationConstant). If the condition is met, the indicator detects a manipulation zone.
Distribution -> The purpose of this indicator is to try to foresee the distribution zone, so instead of a detection, after the manipulation zone is detected the indicator automatically create a "shadow" distribution zone towards the opposite direction of the freshly detected manipulation zone. This shadow distribution zone comes with a take-profit and stop-loss layout, customizable by the trader in the settings.
The X bars, accumulationConstant and manipulationConstant are subject to change with the "Algorithm Mode" setting. Read the "Settings" section for more information.
This indicator follows these steps and inform you step by step by plotting them in your chart.
🚩UNIQUENESS
This indicator is an all-in-one suite for the ICT's Power Of Three concept. It's capable of plotting the strategy, giving signals, a backtesting dashboard and alerts feature. Different and customizable algorithm modes will help the trader fine-tune the indicator for the asset they are currently trading. The backtesting dashboard allows you to see how your settings perform in the current ticker. You can also set up alerts to get informed when the strategy is executable for different tickers.
⚙️SETTINGS
1. General Configuration
Algorithm Mode -> The indicator offers 3 different detection algorithm modes according to your needs. Here is the explanation of each mode.
a) Small Manipulation
This mode has the default bar length for the accumulation detection, but a lower manipulation constant, meaning that slighter imbalances in the price action can be detected as manipulation. This setting can be useful on tickers that have lower liquidity, thus can be manipulated easier.
b) Big Manipulation
This mode has the default bar length for the accumulation detection, but a higher manipulation constant, meaning that heavier imbalances on the price action are required in order to detect manipulation zones. This setting can be useful on tickers that have higher liquidity, thus can be manipulated harder.
c) Short Accumulation
This mode has a ~70% lower bar length requirement for accumulation zone detection, and the default manipulation constant. This setting can be useful on tickers that are highly volatile and do not enter accumulation phases too often.
Breakout Method -> If "Close" is selected, bar close price will be taken into calculation when Accumulation & Manipulation zone invalidation. If "Wick" is selected, a wick will be enough to validate the corresponding zone.
2. TP / SL
TP / SL Method -> If "Fixed" is selected, you can adjust the TP / SL ratios from the settings below. If "Dynamic" is selected, the TP / SL zones will be auto-determined by the algorithm.
Risk -> The risk you're willing to take if "Dynamic" TP / SL Method is selected. Higher risk usually means a better winrate at the cost of losing more if the strategy fails. This setting is has a crucial effect on the performance of the indicator, as different tickers may have different volatility so the indicator may have increased performance when this setting is correctly adjusted.
3. Visuals
Show Zones -> Enables / Disables rendering of Accumulation (yellow) and Manipulation (red) zones.
Best Support And Resistance Indicator V1 [ForexBee]This Indicator Identifies and draws the support and resistance Zones On the Chart
🔶Overview
The support and resistance indicator is a technical indicator that will plot the support zone and resistance zone on the candlestick chart. It determines the price touches to find the strong support resistance zones.
The support and resistance indicator is the most basic technical analysis in trading. Instead of drawing zones manually, this indicator can save you time by plotting zones automatically.
🔶Working
There are specific characteristics of a valid support and resistance zone. Price always bounces upward from the support zone while it bounces downward from the resistance zone. On the other hand, when a breakout of the support or resistance zone happens, the price trends toward the breakout.
🔶Valid support zone
When the price touches a zone two to three times and bounces in a bullish direction, it is a good support zone.
The main point is that you should always find the bounces in clear price swings. The touches or bounces of the price must not be in the form of a choppy market. Price always moves in the form of swings or waves.
🔶Valid resistance zone
When the price touches a zone two to three times with a bounce in a bearish direction, then a valid resistance zone forms.
Here the price bounces must be in the form of swings or waves. You must avoid a choppy market.
So the support and resistance zone indicator finds these parameters on the chart and draws only valid zones.
🔶Settings of indicator
There are two inputs available in the indicator.
Number of bars for swing
The number of bars for the swing bars represents the size of the swing for a valid support or resistance touch. This parameter helps to filter the ranging price. the default value is 10.
Number of Tests for valid support and resistance
In this indicator, the number of pivots represents the support or resistance touches. so if you select the number 3, the indicator will only draw a zone with three touches.
🔶Features
There are the following features that this indicator identifies automatically, so you don’t need to do manual work.
Identify the valid support and resistance zones
Add the confluence of swings or waves during zone identification
Choppy market filter
We are also adding the feature of a candlestick pattern at the zone, which will be added in the next update.
MACD Momentum Structure & Volume Profile Sniper [MTF]**Description and Methodology**
This script offers a unique approach to Market Structure by moving away from traditional fractal-based highs and lows (which can be noisy). Instead, it utilizes **MACD Momentum Swings** to identify significant structural points, combined with an automated Fixed Range Volume Profile to pinpoint high-probability entry zones.
**1. Why MACD Structure? (The Core Concept)**
Traditional "ZigZag" or Fractal indicators rely solely on price action, often leading to fake-outs during low-volume consolidation.
* This script defines a "Swing High" only when the MACD Histogram crosses below zero (Momentum shifts Bearish).
* This script defines a "Swing Low" only when MACD crosses above zero (Momentum shifts Bullish).
By linking structure to momentum, we filter out weak price movements and focus on the true "heartbeat" of the trend.
**2. The "Mashup" Synergy: Structure + Volume + Logic**
This is not a random combination of indicators. Each component serves a specific step in the trading execution sequence:
* **Step 1 (Structure):** The script identifies a Change of Character (CHoCH) based on the MACD peaks described above.
* **Step 2 (Liquidity/Value):** When a CHoCH occurs, the script *automatically* draws a **Fixed Range Volume Profile (FRVP)** specifically covering the impulse leg that caused the break. This reveals the "Point of Control" (POC)—the hidden price level where the most volume occurred during the move.
* **Step 3 (The Sniper Entry):** The script creates a "Zone" around that POC. It then waits for Price to retrace into this zone.
* **Step 4 (Confirmation):** Once the zone is touched, the script monitors a lower timeframe (User selectable, default M1) for a fresh MACD crossover to trigger the final entry signal.
**Features**
* **Multi-Timeframe Dashboard:** Monitor the MACD Trend direction across 4 different timeframes simultaneously.
* **Dynamic Trendlines:** Automatically connects confirmed MACD peaks to visualize trend integrity.
* **Fibo Time Zones:** Projects potential future pivot points based on the duration of the previous swing.
* **Alert System:** Integrated alerts for Zone Touches and "Sniper" entries (Zone Touch + LTF Momentum Confirmation).
**How to Use**
1. **Identify Trend:** Look for the CHoCH labels. Green indicates a shift to Bullish, Red to Bearish.
2. **Wait for Pullback:** Do not chase the break. Wait for price to return to the Yellow POC Zone generated by the Volume Profile.
3. **Entry Trigger:** Watch for the "BUY" or "SELL" marks. These appear only when price hits the zone AND the lower-timeframe momentum aligns with the trade direction.
**Settings & Inputs**
* **Global MACD:** Adjust the sensitivity of the swing detection (Default 12, 26, 9).
* **Sniper Entry:** Select the timeframe used for the final confirmation (e.g., use M1 confirmation for an H1 chart structure).
* **VP Settings:** Customize how the Volume Profile looks on the chart.
*Disclaimer: This script is intended for educational purposes and market analysis. It does not provide financial advice.*
Equal Highs/Lows Multi-Pivot [Julio]Equal Highs/Lows Multi-Pivot
Description
A sophisticated multi-timeframe pivot analysis tool that detects and highlights equal highs and equal lows across four different pivot lengths simultaneously. This indicator identifies price levels where the market creates identical extremes, a powerful signal of institutional support/resistance and potential reversal or breakout zones.
How It Works
Four Independent Pivot Streams
Pivot 1 (Intraday - 2 bars): Ultra-fast level detection for scalpers
Pivot 2 (Session - 4 bars): Short-term swing levels
Pivot 3 (Daily - 6 bars): Medium-term structural levels
Pivot 4 (Weekly - 9 bars): Long-term institutional levels
Equal High (EQH) Detection
Compares consecutive swing highs and draws a line when two highs are nearly identical within a defined threshold. The indicator uses ATR-based confluence to determine "equality," filtering out noise while catching true market structure.
Equal Low (EQL) Detection
Same logic applied to swing lows, identifying support zones where price repeatedly fails to break below previous lows.
Key Features
Four Simultaneous Timeframes: Analyze intraday, session, daily, and weekly structures all on one chart
ATR-Based Confluence Threshold: Automatically adjusts sensitivity based on current volatility (no fake signals)
Color-Coded Levels: Each pivot length has distinct colors for instant visual identification
Highs: Red, Orange, Yellow, Fuchsia
Lows: Green, Blue, Aqua, Purple
Confirmation Mode: Optional setting to wait for full pivot confirmation before marking levels
Customizable Alert Zones: Toggle individual pivot lengths on/off to reduce clutter
Smart Label Positioning: Labels auto-center between the two equal pivots for clarity
Ideal For
Swing traders tracking support/resistance across multiple timeframes
Scalpers identifying micro-structure for quick entries and exits
Market structure analysts studying institutional price action patterns
Multi-timeframe traders needing confluence from intraday to weekly levels
Anyone trading 1-minute to 4-hour charts
Trading Applications
Identify strong support/resistance zones: Equal levels = confirmed institutional levels
Confirm trend reversals: Multiple equal lows = strong accumulation zone; multiple equal highs = distribution
Plan entries with precision: Enter near equal levels for higher probability setups
Detect liquidity concentration: Where price repeatedly tests the same level
Multi-timeframe confluence: Look for equal levels across multiple pivot lengths for ultra-strong zones
How to Use
Identify the equal levels: Color-coded lines instantly show where price creates matching extremes
Check for confluence: Strong setups occur where multiple pivot lengths align
Wait for price action: Watch for breakouts through equal levels or reversals at these zones
Enter with structure: Use equal levels as entry/exit triggers combined with your trading methodology
Manage with confidence: These levels mark institutional decision points
Customization Options
Adjust pivot lengths to match your preferred timeframe structure
Set ATR threshold sensitivity (lower = stricter equality, higher = more signals)
Toggle confirmation mode for additional filter
Enable/disable individual pivot streams to reduce visual clutter
Customize colors to match your chart theme
Default Settings Optimized For
NASDAQ futures and liquid forex pairs
Intraday and swing trading (1-minute to 4-hour charts)
Smart Money / ICT trading methodologies
Volatility-adjusted confluence detection
The 'Qualified' POI Scorer [PhenLabs]📊 The “Qualified” POI Scorer (Q-POI)
Version: PineScript™ v6
📌 Description
The “Qualified” POI Scorer helps intermediate traders overcome "analysis paralysis" by filtering Smart Money Concepts (SMC) structures based on their probability. Instead of flooding your chart with every possible Order Block, this script assigns a proprietary “Quality Score” (0-100) to each zone. It analyzes the strength of the displacement, the presence of imbalances (FVG), and liquidity mechanics to determine which zones are worth your attention. It is designed to clean up your charts and enforce discipline by visually fading out low-quality setups.
🚀 Points of Innovation
Dynamic “Glass UI” Transparency that automatically fades weak zones based on their score.
Proprietary Scoring Algorithm (0-100) based on three distinct institutional factors.
Visual Icon System that prints analytical context (💧— 🚀/🐌—🧱) directly on the chart.
Automated Mitigation Tracking that changes the visual state of zones after they are tested.
Displacement Velocity calculation using ATR to verify institutional intent.
🔧 Core Components
Liquidity Sweep Engine: Detects if a pivot point grabbed liquidity from the previous X bars before reversing.
FVG Validator: Checks if the move away from the zone created a valid Fair Value Gap.
Momentum Scorer: Calculates the size of the displacement candle relative to the Average True Range (ATR).
🔥 Key Features
Quality Filtering: Automatically hides or dims zones that score below 50 (user configurable).
State Management: Zones turn grey when mitigated and delete themselves when invalidated.
Visual Scorecard: Displays the exact numeric score on the zone for quick decision-making.
Time-Decay Logic: Keeps the chart clean by managing the lifespan of old zones.
🎨 Visualization
High Score Zones (80-100): Display as bright, semi-solid boxes indicating high probability.
Medium Score Zones (50-79): Display as translucent “glass” boxes.
Low Score Zones (<50): Display as faint “ghost” boxes or are completely hidden.
Rocket Icon (🚀): Indicates high momentum displacement.
Snail Icon (🐌): Indicates low momentum displacement.
Drop Icon (💧): Indicates the zone swept liquidity.
Brick Icon (🧱): Indicates the zone is supported by an FVG.
📖 Usage Guidelines
Swing Structure Length (Default: 5): Controls the sensitivity of the pivot detection; lower numbers create more zones, higher numbers find major swing points.
ATR Length (Default: 14): Determines the lookback period for calculating relative momentum.
Minimum Quality Score (Default: 50): The threshold for which zones are considered “valid” enough to be fully visible.
Bullish/Bearish Colors: Fully customizable colors that adapt their own transparency based on the score.
Show Weak Zones (Default: False): Toggles the visibility of zones that failed the quality check.
✅ Best Use Cases
Filtering noise during high-volatility sessions by focusing only on Score 80+ zones.
Confirming trend continuation entries by looking for the Rocket (🚀) momentum icon.
Avoiding “stale” zones by ignoring any box that has turned grey (Mitigated).
⚠️ Limitations
The indicator is reactive to closed candles and cannot predict news-driven spikes.
Scoring is based on technical structure and does not account for fundamental drivers.
In extremely choppy markets, the ATR filter may produce lower scores due to lack of displacement.
💡 What Makes This Unique
It transforms subjective SMC analysis into an objective, quantifiable score.
The visual hierarchy allows traders to assess chart quality in milliseconds without reading data.
It integrates three separate SMC concepts (Liquidity, Imbalance, Structure) into a single tool.
🔬 How It Works
Step 1: The script identifies a Swing High or Low based on your length input.
Step 2: It looks backward to see if that swing swept liquidity, and looks forward to check for an FVG and displacement.
Step 3: It calculates a weighted score (30pts for Sweep, 30pts for FVG, 40pts for Momentum).
Step 4: It draws the zone with a transparency level designated by the score and appends the relevant icons.
💡 Note:
For the best results, use this indicator on the timeframe you execute trades on (e.g., 15m or 1h). Do not use it to find entries on the 1m chart if your analysis is based on the 4h chart.
Dynamic Fair-Value Ribbon Pro @darshakssc1. What This Indicator Is (In Simple Terms)
The Dynamic Fair-Value Ribbon Pro is a visual tool that helps you see how price behaves around a statistically derived “fair-value zone”:
A colored ribbon/cloud marks a central “fair” area.
Areas above the ribbon are labeled as “Unfair High Zone”.
Areas below the ribbon are labeled as “Unfair Low Zone”.
A small state panel tells you where price currently sits relative to this ribbon.
All calculations are based only on historical price, volume, and volatility.
It does not predict future price, does not give buy/sell signals, and is not financial advice.
2. Adding the Indicator
Open a chart on TradingView.
Click on Indicators .
Search for “Dynamic Fair-Value Ribbon Pro” .
Click to add it to your chart.
You will see:
A cloud/ribbon around price.
Colored bars when price is outside the ribbon.
A panel in the top right describing the current state.
3. Core Concept: Fair vs Unfair Zones (Analytical Only)
The indicator tries to answer a descriptive question:
“Where is price trading relative to a historically derived central area?”
It does this by:
Calculating a central value (“fair mid”).
Building a band around that mid.
Coloring the chart depending on whether price is inside or outside that band.
It is not claiming that:
Price “must” return to the band.
Price is “overvalued” or “undervalued”.
Any state is good or bad.
It is simply a visual classification tool .
4. Engine Modes — How the Ribbon Is Calculated
Under “Fair-Value Engine” you can choose:
4.1 Mode 1: Range
Looks back over a chosen number of bars (default: 100).
Finds the highest high and lowest low in that window.
Defines a central “slice” of that range as the fair-value ribbon :
Range Mode: Lower Percent → bottom boundary of the slice (e.g., 30%).
Range Mode: Upper Percent → top boundary of the slice (e.g., 70%).
Effect:
The ribbon represents a middle portion of the historical range .
Above the ribbon = “Unfair High Zone” (analytical label only).
Below the ribbon = “Unfair Low Zone”.
This is purely statistical — it does not mean price is wrong or will revert.
4.2 Mode 2: VWAP + Stdev
In this mode, the central value is based on VWAP :
VWAP (Volume-Weighted Average Price) is used as the midline.
A standard deviation envelope is built around VWAP:
VWAP Mode: Stdev Multiplier controls how wide that envelope is.
Effect:
The ribbon shows where price is trading relative to a volume-weighted average .
Again, areas above and below are just described as “unfair” zones in a visual, analytical sense , not a predictive one.
5. ATR Adaptive Width — Making the Ribbon React to Volatility
Under “ATR Adaptive Width” :
Use ATR Adaptive Width:
On: the band width scales with volatility.
Off: band width stays fixed based on Range or VWAP settings.
ATR Length: how many bars to use for ATR.
Reference ATR (% of price): a reference level for normal volatility.
Min Width Scale / Max Width Scale: clamps the scaling so that the band doesn’t get too narrow or too wide.
What this does (analytically):
When volatility (ATR) is higher than the reference, the band can become wider .
When volatility is lower , the band can become narrower .
This is a mathematical rescaling only and does not imply any optimal levels or performance.
6. Visual Elements — What You See on the Chart
6.1 Fair-Value Ribbon (Cloud)
The cloud between Fair Ribbon Low and Fair Ribbon High is the fair zone .
Color can be changed via “Fair Ribbon Color” .
6.2 Midline
If “Show Center Line” is enabled:
A line runs through the middle of the ribbon.
In Range mode, this is the average of the upper and lower band.
In VWAP mode, it’s essentially the VWAP-based mid.
This line is for visual reference only and makes no claims about support, resistance, or reversion.
6.3 Bar Colors
Unfair High Zone: bars are colored with Unfair High Bar Color.
Unfair Low Zone: bars are colored with Unfair Low Bar Color.
Inside the ribbon:
If “Fade Bars Inside Fair Zone” is ON, bars may be more faded/neutral.
These colors are simply classification highlights ; they do not tell you what to do.
6.4 State Panel (Top Right)
If “Show State Panel” is enabled, you’ll see a small box that displays:
Current engine:
Range or VWAP+Stdev.
Current price state:
Inside Ribbon (Fair Zone)
Above Ribbon (Unfair High Zone)
Below Ribbon (Unfair Low Zone)
This is a quick summary of where price sits relative to the computed ribbon.
7. Typical Ways to Use It (Informational Only)
The indicator can help you visually:
See when price is spending time inside a historically defined central zone.
Notice when price is frequently trading outside that zone.
Compare different timeframes (e.g., 5m vs 1h vs 4h) to see how the fair zone shifts.
Experiment with:
Range length (shorter vs longer lookback).
VWAP vs Range mode.
ATR adaptation on/off.
Important:
Any interpretation of these visuals is entirely up to the user.
The script does not tell you to buy, sell, hold, or do anything specific.
8. Limitations and Important Notes
All calculations use past data only (price, volume, volatility).
The ribbon does not guarantee:
that price will revert,
that zones will hold,
or that any outcome will occur.
There are no built-in signals such as “long/short” or automatic entries/exits.
The script is best used as a supporting, visual layer alongside other tools or methods you choose.
9. Disclaimer
This indicator is:
Strictly informational and educational.
Not a trading system or strategy.
Not financial advice or a recommendation.
Not guaranteed to be accurate, complete, or suitable for any specific purpose.
Users should always perform their own research and due diligence.
Past behavior of any visual pattern or zone does not guarantee future behavior.
chanlun缠论 - 笔与中枢Overview
The Chanlun (缠论) Strokes & Central Zones indicator is an advanced technical analysis tool based on Chinese Chan Theory (Chanlun Theory). It automatically identifies market structure through "strokes" (笔) and "central hubs" (中枢), providing traders with a systematic framework for understanding price movements, trend structure, and potential reversal zones.
Theoretical Foundation
Chan Theory is a sophisticated price action methodology that breaks down market movements into hierarchical structures:
Local Extremes: Swing highs and lows identified through lookback periods
Strokes (笔): Valid price movements between opposite extremes that meet specific criteria
Central Hubs (中枢): Consolidation zones formed by overlapping strokes, representing key support/resistance areas
Key Components
1. Local Extreme Detection
Identifies swing highs and lows using a configurable lookback period (default: 5 bars)
Only considers extremes within the specified calculation range
Forms the foundation for stroke construction
2. Stroke (笔) Identification
The indicator applies a multi-stage filtering process to identify valid strokes:
Stage 1 - Extreme Consolidation:
Merges consecutive extremes of the same type (high or low)
Keeps only the most extreme value (highest high or lowest low)
Stage 2 - Stroke Validation:
Ensures minimum bar gap between strokes (default: 4 bars)
Alternative validation: 2+ bars with >1% price change
Eliminates noise and insignificant price movements
Color Coding:
White Lines: Regular up/down strokes
Yellow Lines: Strokes that form part of a central hub
Customizable width and colors for different stroke types
3. Central Hub (中枢) Formation
A central hub forms when at least 3 consecutive strokes have overlapping price ranges:
Formation Rules:
Stroke 1:
Stroke 2:
Stroke 3:
Hub Upper = MIN(High1, High2, High3)
Hub Lower = MAX(Low1, Low2, Low3)
Valid if: Hub Upper > Hub Lower
Hub Extension:
Subsequent strokes that overlap with the hub extend it
Hub ends when a stroke no longer overlaps
Creates rectangular zones on the chart
Visual Representation:
Green rectangular boxes: Mark the time and price range of each central hub
Dashed extension lines: Show the latest hub boundaries extending to the right
Price labels on axis: Display exact hub upper and lower boundary values
4. Extreme Point Markers (Optional)
Red markers for tops (▼)
Green markers for bottoms (▲)
Marks every validated stroke extreme point
Useful for detailed structure analysis
5. Information Table (Optional)
Displays real-time statistics:
Symbol name
Current timeframe
Lookback period setting
Minimum gap setting
Total stroke count
Parameter Settings
Performance Settings
Max Bars to Calculate (3600): Limits historical calculation to improve performance
Local Extreme Lookback Period (5): Bars used to identify swing highs/lows
Min Gap Bars (4): Minimum bars required between valid strokes
Display Settings
Show Strokes: Toggle stroke line visibility
Show Central Hub: Toggle hub box visibility
Show Hub Extension Lines: Toggle dashed boundary lines
Show Extreme Point Marks: Toggle top/bottom markers
Show Info Table: Toggle statistics table
Color Settings
Full customization of:
Up/down stroke colors and widths
Hub stroke colors and widths
Hub border and background colors
Extension line colors
Trading Applications
Trend Structure Analysis
Uptrend: Series of higher highs and higher lows connected by strokes
Downtrend: Series of lower highs and lower lows connected by strokes
Consolidation: Formation of central hubs indicating range-bound movement
Support and Resistance Identification
Central Hub Zones: Act as strong support/resistance areas
Hub Upper Boundary: Resistance level in consolidation, support after breakout
Hub Lower Boundary: Support level in consolidation, resistance after breakdown
Price tends to react at these levels due to market structure memory
Breakout Trading
Bullish Breakout: Price closes above hub upper boundary
Previous resistance becomes support
Entry on retest of upper boundary
Stop loss below hub zone
Bearish Breakdown: Price closes below hub lower boundary
Previous support becomes resistance
Entry on retest of lower boundary
Stop loss above hub zone
Reversal Detection
Hub Formation After Trend: Signals potential trend exhaustion
Multiple Hub Levels: Create probability zones for reversals
Stroke Count: Excessive strokes within hub suggest weakening momentum
Position Management
Use hub boundaries for stop loss placement
Scale out positions at hub edges
Re-enter on retests of broken hub levels
Interpretation Guide
Strong Trending Market
Long, clear strokes with minimal overlap
Few or no central hubs forming
Strokes consistently in same direction
Wide spacing between extremes
Consolidating Market
Multiple central hubs forming
Short, overlapping strokes
Yellow hub strokes dominate the chart
Narrow price range
Trend Transition
Hub formation after extended trend
Stroke direction changes frequently
Hub boundaries being tested repeatedly
Potential reversal zone
Advanced Usage Techniques
Multi-Timeframe Analysis
Higher Timeframe: Identify major hub zones for overall market structure
Lower Timeframe: Find precise entry points within larger structure
Alignment: Trade when lower timeframe strokes align with higher timeframe hub breaks
Hub Quality Assessment
Wide Hubs: Strong consolidation, higher probability support/resistance
Narrow Hubs: Weak consolidation, may break easily
Extended Hubs: More strokes = stronger zone
Isolated Hubs: Single hub = potential pivot point
Stroke Analysis
Stroke Length: Longer strokes = stronger momentum
Stroke Speed: Fewer bars per stroke = explosive moves
Stroke Clustering: Many short strokes = indecision
Best Practices
Parameter Optimization
Adjust lookback period based on timeframe and volatility
Lower periods (3-4): More strokes, more noise, faster signals
Higher periods (7-10): Fewer strokes, cleaner structure, slower signals
Confirmation Strategy
Don't trade on strokes alone
Combine with volume analysis
Use candlestick patterns at hub boundaries
Wait for breakout confirmation
Risk Management
Always place stops outside hub zones
Use hub width to size positions (wider hub = smaller position)
Exit if price re-enters broken hub from wrong direction
Avoid Common Pitfalls
Don't trade within central hubs (range-bound, unpredictable)
Don't ignore higher timeframe hub structures
Don't chase strokes after they've extended far from hub
Don't trust single-stroke hubs (need 3+ strokes for validity)
Performance Considerations
Max Bars Limit: Set to 3600 to balance detail with performance
Safe Distance Calculation: Only draws objects within 2000 bars of current price
Object Cleanup: Automatically removes old drawing objects to prevent memory issues
Efficient Arrays: Uses indexed arrays for fast lookup and processing
Ideal Market Conditions
Best Performance:
Liquid markets with clear structure (major forex pairs, indices, large-cap stocks)
Trending markets with periodic consolidations
Medium to high volatility for clear stroke formation
Less Effective:
Extremely choppy, directionless markets
Very low timeframes (< 5 minutes) with excessive noise
Illiquid instruments with erratic price action
Integration with Other Indicators
Complementary Tools:
Volume Profile: Confirm hub significance with volume nodes
Moving Averages: Use for trend bias within stroke structure
RSI/MACD: Momentum confirmation at hub boundaries
Fibonacci Retracements: Hub levels often align with Fib levels
Advantages
✓ Objective Structure: Removes subjectivity from market structure analysis
✓ Visual Clarity: Color-coded strokes and clear hub zones
✓ Multi-Timeframe Applicable: Works on all timeframes from minutes to months
✓ Complete Framework: Provides entry, exit, and risk management levels
✓ Theoretical Foundation: Based on proven Chan Theory methodology
✓ Customizable: Extensive parameter and visual customization options
Limitations
⚠ Learning Curve: Requires understanding of Chan Theory principles
⚠ Lag Factor: Strokes confirm after price movements complete
⚠ Parameter Sensitivity: Different settings produce significantly different results
⚠ Choppy Market Struggles: Can generate excessive hubs in range-bound conditions
⚠ Computation Intensive: May slow down on lower-end systems with max bars setting
Optimization Tips
Timeframe Selection
Scalping: 5-15 minute charts, lookback period 3-4
Day Trading: 15-60 minute charts, lookback period 4-5
Swing Trading: 4-hour to daily charts, lookback period 5-7
Position Trading: Daily to weekly charts, lookback period 7-10
Volatility Adjustment
High volatility: Increase minimum gap bars to reduce noise
Low volatility: Decrease lookback period to capture smaller moves
Visual Optimization
Use contrasting colors for different market conditions
Adjust line widths based on chart resolution
Toggle markers off for cleaner appearance once familiar with structure
Quick Start Guide
For Beginners:
Start with default settings (5 lookback, 4 min gap)
Enable "Show Info Table" to track stroke count
Focus on identifying clear hub formations
Practice waiting for price to break hub boundaries before trading
For Advanced Users:
Optimize lookback and gap parameters for your instrument
Use hub strokes (yellow) to identify key consolidation zones
Combine with multiple timeframes for confirmation
Develop entry rules based on hub breakout/retest patterns
This indicator provides a complete structural framework for understanding market behavior through the lens of Chan Theory, offering traders a systematic approach to identifying high-probability trading opportunities.






















