RTH Opening Range with ExtensionsTool that maps the opening range, opening range mid and extensions. Defaults are 5min OR with 1x extensions. You can customize to 1min, 5min, 15min or 30min opening ranges. Nothing complicated and certainly vibe coded with the help of Claude AI.
Indikatoren und Strategien
Direction via Zone Break [by rukich]🟠 OVERVIEW
The indicator shows the direction of movement and zones: SSL, BSL, FVG.
Zones serve as support/resistance and as validation/invalidation of a movement reversal.
🟠 COMPONENTS
The direction of movement is built based on a three-candle swing high (BSL) and swing low (SSL) pattern. If swing high (BSL) and swing low (SSL) are formed, and then an internal swing high/low is formed (depending on the direction of movement), then in case the initial movement continues — for example, in an upward movement — the new swing low (SSL) will be the minimum before the update, i.e., the internal low, while the swing high (BSL) will be formed according to the three-candle pattern.
A change of direction is considered when a candle closes beyond the key swing high/low (BSL/SSL), depending on the direction of movement. For example, in an upward movement, a break occurs when a candle closes beyond the swing low (SSL). After that, the swing high (BSL) will be the nearest fractal (swing high), and the swing low (SSL) will be formed according to the three-candle pattern.
All the above logic also applies to downward movements.
Within each movement, there can be FVG zones, which can act as support/resistance or indicate weakness in the movement direction.
Note: if the movement is upward, only bullish FVG+ will be displayed; if the movement is downward, only bearish FVG- will be displayed.
Weakness of movement direction.
For example, consider an upward impulse with the nearest FVG+ zone. If the price closes beyond the lower boundary of the zone, it will be considered invalidated (inv. FVG-), which in turn indicates weakness in the movement direction and a possible local short, which may subsequently lead to a break of the entire movement.
🟠 HOW TO USE
There are only two visual settings in the configuration:
Show previous SSL/BSL – enables/disables the display of all previous SSL/BSL zones
Show Bullish/Bearish trend – enables/disables background shading between SSL and BSL for visual understanding of the movement direction
On the chart, the following are displayed:
Labels with current SSL/BSL
FVG+- / inv. FVG+- zones, for trading in the movement direction
In case the nearest FVG is invalidated, a label will appear with the text: Weak bullish/bearish & local short/long (this is not a signal, but only indicates the probability of a potential move based on the weakness of the nearest zone)
🟠 CONCLUSION
The indicator helps determine the current movement with zones for trading in the direction, and also indicates movement weakness through invalidation of the nearest zones.
Jon Secret SauceJon Secret Sauce — Advanced Trend + Momentum Entry Signals
A premium trade-timing engine that combines MA trend confirmation, volatility filters, RSI momentum, and smart volume validation to identify high-probability long & short entries on your preferred timeframe.
Includes auto-managed exits (TP / SL / technical breakdown), professional visuals, and alert notifications so you catch the move and protect profits — without overcrowding your chart.
Quantum Ribbon Lite📊 WHAT IS IT?
Quantum Ribbon Lite is a trend trading indicator built on a 5-layer exponential moving average ribbon system. It analyzes price momentum, volume, and ribbon alignment to generate entry signals with pre-calculated stop loss and take profit levels.
The indicator is designed for traders who want a straightforward approach to trend trading without managing complex configurations.
🔧 HOW IT WORKS
The Ribbon System
The indicator uses 5 pairs of EMAs (10 moving averages total) that create colored "clouds" on your chart:
Blue/Teal ribbons indicate bullish alignment
Red/Pink ribbons indicate bearish alignment
Mixed colors indicate neutral or transitional periods
The ribbon spacing automatically adjusts from a fast EMA (21) to a slow EMA (60), creating layers that show trend strength and direction.
Signal Generation
Signals appear when multiple conditions align:
For LONG signals:
Fast EMAs are above slow EMAs
Price momentum is positive and strong (> 0.5 ATR)
Volume is above average (> 1.1x average)
Ribbon confirms bullish state
Minimum confidence threshold met (filters weak setups)
For SHORT signals:
Fast EMAs are below slow EMAs
Price momentum is negative and strong
Volume is above average
Ribbon confirms bearish state
Minimum confidence threshold met
📈 VISUAL COMPONENTS
Entry Signals
Green "BUY" label = Long entry signal at candle close
Red "SELL" label = Short entry signal at candle close
Signals only trigger on confirmed candle closes (no repainting).
Risk Management Lines
Three lines appear when you have an active position:
White dotted line = Entry price
Red dotted line = Stop loss level
Green dotted line = Take profit target
Performance Dashboard
The stats table shows:
Current position status (In Long/Short or Waiting for signal)
Entry, stop, and target prices when in a trade
Win/loss record
Win rate percentage with color coding
⚙️ SETTINGS
1. Signal Sensitivity (1-10)
Controls the minimum time between signals (cooldown period):
1 = 2 bars between signals (most frequent)
5 = 10 bars between signals (balanced)
10 = 20 bars between signals (most selective)
Lower values generate more signals, higher values filter for better setups.
2. Stop Loss Distance
Determines how stops are calculated using ATR (Average True Range):
Tight = 1.5x ATR from entry
Normal = 2.0x ATR from entry
Wide = 2.5x ATR from entry
ATR adapts to market volatility, so stops are tighter in calm markets and wider in volatile markets.
3. Take Profit Target
Sets your risk-to-reward ratio:
1.5R = Target is 1.5 times your risk
2R = Target is 2 times your risk
3R = Target is 3 times your risk
Example: With a $100 stop distance and 2R setting, your take profit will be $200 away from entry.
4. Show Stats Table
Toggle to show/hide the performance dashboard in the top-right corner.
5. Show Risk Lines
Toggle to show/hide the entry/stop/target lines on the chart.
📋 HOW TO USE
Step 1: Apply to Chart
Add the indicator to your preferred instrument and timeframe (daily recommended).
Step 2: Wait for Signal
A BUY or SELL label will appear on the chart when conditions align.
Step 3: Enter Position
Enter at the close of the signal candle in the indicated direction.
Step 4: Set Risk Parameters Use the displayed lines:
Red line = Your stop loss
Green line = Your take profit
Step 5: Hold Position
Wait for the position to hit either the stop or target. No new signals will appear while you're in a position.
Step 6: Review Results
Check the stats table to track your win rate and adjust settings if needed.
🎯 RISK MANAGEMENT
Stop Loss Calculation
Stops are based on ATR (Average True Range) which measures recent price volatility:
In quiet markets: Stops are placed closer to entry
In volatile markets: Stops are placed further away
This adaptive approach helps prevent stop-hunting while maintaining appropriate risk levels.
Take Profit Calculation
Targets are calculated as a multiple of your stop distance:
If stop is 50 points away and you use 2R, target is 100 points away
Maintains consistent risk-reward ratios across all trades
Required Win Rates To break even after fees:
1.5R requires ~40% win rate
2R requires ~34% win rate
3R requires ~25% win rate
📊 RECOMMENDED USAGE
Timeframes:
Daily charts show strongest performance in testing
4H and 1H timeframes work but may have lower win rates
Lower timeframes generate more signals but reduced quality
Markets:
Works on all instruments: Stocks, Forex, Crypto, Futures, Indices
Best suited for trending markets
May generate false signals in tight ranges or choppy conditions
Hybrid -WinCAlgo/// 🇬🇧
Hybrid - WinCAlgo is a weighted composite oscillator designed to provide a more robust and reliable signal than the standard Relative Strength Index (RSI). It integrates four different momentum and volume metrics—RSI, Money Flow Index (MFI), Scaled CCI, and VWAP-RSI—into a single 0-100 oscillator.
This powerful tool aims to filter market noise and enhance the detection of trend reversals by confirming momentum with trading volume and volume-weighted average price action.
⚪ What is this Indicator?
The Hybrid Oscillator combines:
* RSI (40% Weight): Measures fundamental price momentum.
* VWAP-RSI (40% Weight): Measures the momentum of the Volume Weighted Average Price (VWAP), providing strong volume confirmation for trend strength.
* MFI (10% Weight): Measures money flow volume, confirming momentum with liquidity.
* Scaled CCI (10% Weight): Tracks market extremes and potential trend shifts, scaled to fit the 0-100 range.
⚪ Key Features
* Composite Strength: Blends four different market factors for a multi-dimensional view of momentum.
* Volume Integration: High weights on VWAP-RSI and MFI ensure that momentum signals are backed by trading volume.
* Advanced Divergence: The robust formula significantly enhances the detection of Bullish and Bearish Divergences, often providing an earlier signal than traditional oscillators.
* Customizable: Adjustable Lookback Length (N) and Individual Component Weights allow users to fine-tune the oscillator for specific assets or timeframes.
* Visual Clarity: Uses 40/60 bands for earlier Overbought/Oversold indications, with a gradient-styled background for intuitive visual interpretation.
⚪ Usage
Use Hybrid – WinCAlgo as your primary momentum confirmation tool:
* Divergence Signals: Trust the indicator when it fails to confirm new price highs/lows; this signals imminent trend exhaustion and reversal.
* Accumulation/Distribution: Look for the oscillator to rise/fall while the price is ranging at a bottom/top; this confirms hidden buying or selling (accumulation).
* Overbought/Oversold: Use the 60 band as the trigger for potential selling/shorting signals, and the 40 band for potential buying/longing signals.
* Noise Filter: Combine with a higher timeframe chart (e.g., 4H or Daily) to filter out gürültü (noise) and focus only on significant momentum shifts.
---
India VIX Tray - DynamicIndia VIX Table
Shows INDIAVIX value as a tray in Chart with Dynamic colour change according to Low Volatility, Moderate Volatility, High Volatility.
Force Pulse█ OVERVIEW
Force Pulse is a fast-reacting oscillator that measures the internal strength of market sides by analyzing the aggregated dominance of bulls and bears based on candle size.
The indicator normalizes this difference into a 0–100 range, generates signals (OB/OS, midline cross, MA midline cross), and detects divergences between price and the oscillator.
It also offers advanced visualization, signal markers, and alerts, making it a versatile tool suitable for many trading styles.
█ CONCEPTS
Force Pulse was designed as a universal tool that can be applied to various trading strategies depending on its settings:
- increasing the period lengths and smoothing transforms it into a momentum/trend indicator, revealing a stable dominance of one market side.
- Lowering these parameters turns it into a peak/low detector, ideal for contrarian and mean-reversion strategies.
The oscillator analyzes the relationship between the sum of bullish and bearish candles over a selected period, based on:
- candle body size, or
- average candle body size (AVG Body).
Depending on the selected mode, OB/OS levels should be adjusted, as value dynamics differ between modes.
The output is normalized to 0–100, where:
> 50 – bullish dominance,
< 50 – bearish dominance.
The additional MA line is derived from smoothed oscillator values and serves as a signal line for midline crosses and as a trend filter.
The indicator also detects divergences (HL/LL) between price and the oscillator.
█ FEATURES
Bull & Bear Strength:
- Calculations are based on Body or AVG Body – mode selection requires adjusting OB/OS levels.
- Bullish and bearish candle values are summed separately.
- All results are normalized to the 0–100 scale.
Force Pulse Oscillator:
- The main line reflects the current dominance of either market side.
Dynamic colors:
- Green – above 50,
- Red – below 50.
Signal MA:
- SMA based on oscillator values functions as a signal line.
- Helps detect momentum shifts and generates signals via midline crosses.
- Can serve as a trend confirmation filter.
Overbought / Oversold:
- Configurable OB/OS levels, also for the MA line.
- Dynamic OB/OS line colors: when the MA line exceeds the defined threshold (e.g., MA > maOverbought or MA < maOversold), OB/OS lines change color (red/green).
- This often signals a potential reversal or correction and may act as additional confirmation for oscillator-generated signals.
Divergences:
- Detection based on swing pivots:
- Bullish: price LL, oscillator HL
- Bearish: price HH, oscillator LH
- Displayed as “Bull” / “Bear” labels.
Signals:
Supports multiple signal types:
- Overbought/Oversold Cross
- Midline Cross
- MA Midline Cross (based on the signal MA line)
- Signals appear as triangles above/below the oscillator.
Visualization:
- Gradient options for lines and levels.
- Full customization of colors, transparency, and line thickness.
Alerts available for:
- Divergences
- OB/OS crossings
- Midline crossings
- MA midline crossings
█ HOW TO USE
Add the indicator to your TradingView chart → Indicators → search “Force Pulse”
Parameter Configuration
Calculation Settings:
- Calculation Period (lookback) – defines the strength calculation window.
Force Mode (Body / AVG Body):
- Body – faster response, higher sensitivity.
- AVG Body – more stable output; adjust band levels and periods to your strategy.
- EMA Smoothing (smoothLen) – reduces oscillator noise.
- MA Length – length of the signal line (SMA).
Threshold Levels:
- Set Overbought/Oversold levels for both the oscillator and the MA line.
- Adjust levels depending on Body / AVG Body mode.
Divergence Detection:
- Enable/disable divergence detection.
- PivotLength affects both delay and signal quality.
- Signal Settings: Choose one or multiple signal types.
- Style & Colors: Full control over color schemes, gradients, and transparency.
Signal Interpretation
BUY:
- Oscillator leaves oversold (OS crossover).
- Midline cross upward.
- MA crosses the midline from below.
- Bullish divergence.
SELL:
- Oscillator leaves overbought (drops below OB).
- Midline cross downward.
- MA crosses the midline from above.
- Bearish divergence.
Trend / Momentum:
-Longer periods and stronger smoothing → stable directional signals.
-MA as a trend filter: e.g., signal line above the midline (50) and MA pointing upward indicates continuation of a bullish impulse.
Contrarian / Mean Reversion:
- Short periods → rapid detection of peaks and troughs; ideal for contrarian signals and pullback entries.
█ APPLICATIONS
- Trend Trading: Using midline and MA midline crosses to determine direction.
- Reversal Trading: OB/OS levels and divergences help identify reversals.
- Scalping & Intraday: Short settings + signal line above the midline with bullish MA → shows short-term impulse and continuation.
- Swing Trading: Longer MA and higher lookback provide a stable view of market-side dominance.
- Momentum Analysis: Force Pulse highlights the strength of the wave before price movement occurs.
█ NOTES
- In strong trends, the oscillator may stay in extreme zones for a long time — this reflects dominance, not necessarily a reversal signal.
- Divergences are more reliable on higher timeframes.
- OB/OS levels should be tailored to Body/AVG Body mode and the instrument.
- Best results come from combining the indicator with other tools (S/R, market structure, volume).
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.
Price Action Concepts [RUDYINDICATOR]/// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) creativecommons.org
// © RUDYBANK INDICATOR - formerly know as RUDY INDICATOR
//@version=5
indicator("Price Action Concepts ", shorttitle = "RUDYINDICATOR-V1
- Price Action RUDYINDICATOR ", overlay = true, max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500, max_bars_back = 500, max_polylines_count = 100)
//-----------------------------------------------------------------------------{
//Boolean set
//-----------------------------------------------------------------------------{
s_BOS = 0
s_CHoCH = 1
i_BOS = 2
i_CHoCH = 3
i_pp_CHoCH = 4
green_candle = 5
red_candle = 6
s_CHoCHP = 7
i_CHoCHP = 8
boolean =
array.from(
false
, false
, false
, false
, false
, false
, false
, false
, false
)
//-----------------------------------------------------------------------------{
// User inputs
//-----------------------------------------------------------------------------{
show_swing_ms = input.string ("All" , "Swing        " , inline = "1", group = "MARKET STRUCTURE" , options = )
show_internal_ms = input.string ("All" , "Internal     " , inline = "2", group = "MARKET STRUCTURE" , options = )
internal_r_lookback = input.int (5 , "" , inline = "2", group = "MARKET STRUCTURE" , minval = 2)
swing_r_lookback = input.int (50 , "" , inline = "1", group = "MARKET STRUCTURE" , minval = 2)
ms_mode = input.string ("Manual" , "Market Structure Mode" , inline = "a", group = "MARKET STRUCTURE" , tooltip = " Use selected lenght Use automatic lenght" ,options = )
show_mtf_str = input.bool (true , "MTF Scanner" , inline = "9", group = "MARKET STRUCTURE" , tooltip = "Display Multi-Timeframe Market Structure Trend Directions. Green = Bullish. Red = Bearish")
show_eql = input.bool (false , "Show EQH/EQL" , inline = "6", group = "MARKET STRUCTURE")
plotcandle_bool = input.bool (false , "Plotcandle" , inline = "3", group = "MARKET STRUCTURE" , tooltip = "Displays a cleaner colored candlestick chart in place of the default candles. (requires hiding the current ticker candles)")
barcolor_bool = input.bool (false , "Bar Color" , inline = "4", group = "MARKET STRUCTURE" , tooltip = "Color the candle bodies according to market strucutre trend")
i_ms_up_BOS = input.color (#089981 , "" , inline = "2", group = "MARKET STRUCTURE")
i_ms_dn_BOS = input.color (#f23645 , "" , inline = "2", group = "MARKET STRUCTURE")
s_ms_up_BOS = input.color (#089981 , "" , inline = "1", group = "MARKET STRUCTURE")
s_ms_dn_BOS = input.color (#f23645 , "" , inline = "1", group = "MARKET STRUCTURE")
lvl_daily = input.bool (false , "Day   " , inline = "1", group = "HIGHS & LOWS MTF")
lvl_weekly = input.bool (false , "Week " , inline = "2", group = "HIGHS & LOWS MTF")
lvl_monthly = input.bool (false , "Month" , inline = "3", group = "HIGHS & LOWS MTF")
lvl_yearly = input.bool (false , "Year  " , inline = "4", group = "HIGHS & LOWS MTF")
css_d = input.color (color.blue , "" , inline = "1", group = "HIGHS & LOWS MTF")
css_w = input.color (color.blue , "" , inline = "2", group = "HIGHS & LOWS MTF")
css_m = input.color (color.blue , "" , inline = "3", group = "HIGHS & LOWS MTF")
css_y = input.color (color.blue , "" , inline = "4", group = "HIGHS & LOWS MTF")
s_d = input.string ('⎯⎯⎯' , '' , inline = '1', group = 'HIGHS & LOWS MTF' , options = )
s_w = input.string ('⎯⎯⎯' , '' , inline = '2', group = 'HIGHS & LOWS MTF' , options = )
s_m = input.string ('⎯⎯⎯' , '' , inline = '3', group = 'HIGHS & LOWS MTF' , options = )
s_y = input.string ('⎯⎯⎯' , '' , inline = '4', group = 'HIGHS & LOWS MTF' , options = )
ob_show = input.bool (true , "Show Last    " , inline = "1", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Display volumetric order blocks on the chart Ammount of volumetric order blocks to show")
ob_num = input.int (5 , "" , inline = "1", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Orderblocks number", minval = 1, maxval = 10)
ob_metrics_show = input.bool (true , "Internal Buy/Sell Activity" , inline = "2", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Display volume metrics that have formed the orderblock")
css_metric_up = input.color (color.new(#089981, 50) , "         " , inline = "2", group = "VOLUMETRIC ORDER BLOCKS")
css_metric_dn = input.color (color.new(#f23645 , 50) , "" , inline = "2", group = "VOLUMETRIC ORDER BLOCKS")
ob_swings = input.bool (false , "Swing Order Blocks" , inline = "a", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Display swing volumetric order blocks")
css_swing_up = input.color (color.new(color.gray , 90) , "                 " , inline = "a", group = "VOLUMETRIC ORDER BLOCKS")
css_swing_dn = input.color (color.new(color.silver, 90) , "" , inline = "a", group = "VOLUMETRIC ORDER BLOCKS")
ob_filter = input.string ("None" , "Filtering             " , inline = "d", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Filter out volumetric order blocks by BOS/CHoCH/CHoCH+", options = )
ob_mitigation = input.string ("Absolute" , "Mitigation           " , inline = "4", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Trigger to remove volumetric order blocks", options = )
ob_pos = input.string ("Precise" , "Positioning          " , inline = "k", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Position of the Order Block Cover the whole candle Cover half candle Adjust to volatility Same as Accurate but more precise", options = )
use_grayscale = input.bool (false , "Grayscale" , inline = "6", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Use gray as basic order blocks color")
use_show_metric = input.bool (true , "Show Metrics" , inline = "7", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Show volume associated with the orderblock and his relevance")
use_middle_line = input.bool (true , "Show Middle-Line" , inline = "8", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Show mid-line order blocks")
use_overlap = input.bool (true , "Hide Overlap" , inline = "9", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = "Hide overlapping order blocks")
use_overlap_method = input.string ("Previous" , "Overlap Method    " , inline = "Z", group = "VOLUMETRIC ORDER BLOCKS" , tooltip = " Preserve the most recent volumetric order blocks Preserve the previous volumetric order blocks", options = )
ob_bull_css = input.color (color.new(#089981 , 90) , "" , inline = "1", group = "VOLUMETRIC ORDER BLOCKS")
ob_bear_css = input.color (color.new(#f23645 , 90) , "" , inline = "1", group = "VOLUMETRIC ORDER BLOCKS")
show_acc_dist_zone = input.bool (false , "" , inline = "1", group = "Accumulation And Distribution")
zone_mode = input.string ("Fast" , "" , inline = "1", group = "Accumulation And Distribution" , tooltip = " Find small zone pattern formation Find bigger zone pattern formation" ,options = )
acc_css = input.color (color.new(#089981 , 60) , "" , inline = "1", group = "Accumulation And Distribution")
dist_css = input.color (color.new(#f23645 , 60) , "" , inline = "1", group = "Accumulation And Distribution")
show_lbl = input.bool (false , "Show swing point" , inline = "1", group = "High and Low" , tooltip = "Display swing point")
show_mtb = input.bool (false , "Show High/Low/Equilibrium" , inline = "2", group = "High and Low" , tooltip = "Display Strong/Weak High And Low and Equilibrium")
toplvl = input.color (color.red , "Premium Zone   " , inline = "3", group = "High and Low")
midlvl = input.color (color.gray , "Equilibrium Zone" , inline = "4", group = "High and Low")
btmlvl = input.color (#089981 , "Discount Zone    " , inline = "5", group = "High and Low")
fvg_enable = input.bool (false , "        " , inline = "1", group = "FAIR VALUE GAP" , tooltip = "Display fair value gap")
what_fvg = input.string ("FVG" , "" , inline = "1", group = "FAIR VALUE GAP" , tooltip = "Display fair value gap", options = )
fvg_num = input.int (5 , "Show Last  " , inline = "1a", group = "FAIR VALUE GAP" , tooltip = "Number of fvg to show")
fvg_upcss = input.color (color.new(#089981, 80) , "" , inline = "1", group = "FAIR VALUE GAP")
fvg_dncss = input.color (color.new(color.red , 80) , "" , inline = "1", group = "FAIR VALUE GAP")
fvg_extend = input.int (10 , "Extend FVG" , inline = "2", group = "FAIR VALUE GAP" , tooltip = "Extend the display of the FVG.")
fvg_src = input.string ("Close" , "Mitigation  " , inline = "3", group = "FAIR VALUE GAP" , tooltip = " Use the close of the body as trigger Use the extreme point of the body as trigger", options = )
fvg_tf = input.timeframe ("" , "Timeframe " , inline = "4", group = "FAIR VALUE GAP" , tooltip = "Timeframe of the fair value gap")
t = color.t (ob_bull_css)
invcol = color.new (color.white , 100)
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - UDT }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
type bar
float o = open
float c = close
float h = high
float l = low
float v = volume
int n = bar_index
int t = time
type Zphl
line top
line bottom
label top_label
label bottom_label
bool stopcross
bool sbottomcross
bool itopcross
bool ibottomcross
string txtup
string txtdn
float topy
float bottomy
float topx
float bottomx
float tup
float tdn
int tupx
int tdnx
float itopy
float itopx
float ibottomy
float ibottomx
float uV
float dV
type FVG
box box
line ln
bool bull
float top
float btm
int left
int right
type ms
float p
int n
float l
type msDraw
int n
float p
color css
string txt
bool bull
type obC
float top
float btm
int left
float avg
float dV
float cV
int wM
int blVP
int brVP
int dir
float h
float l
int n
type obD
box ob
box eOB
box blB
box brB
line mL
type zone
chart.point points
float p
int c
int t
type hqlzone
box pbx
box ebx
box lbx
label plb
label elb
label lbl
type ehl
float pt
int t
float pb
int b
type pattern
string found = "None"
bool isfound = false
int period = 0
bool bull = false
type alerts
bool chochswing = false
bool chochplusswing = false
bool swingbos = false
bool chochplus = false
bool choch = false
bool bos = false
bool equal = false
bool ob = false
bool swingob = false
bool zone = false
bool fvg = false
bool obtouch = false
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - General Setup }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
bar b = bar.new()
var pattern p = pattern.new()
alerts blalert = alerts.new()
alerts bralert = alerts.new()
if p.isfound
p.period += 1
if p.period == 50
p.period := 0
p.found := "None"
p.isfound := false
p.bull := na
switch
b.c > b.o => boolean.set(green_candle, true)
b.c < b.o => boolean.set(red_candle , true)
f_zscore(src, lookback) =>
(src - ta.sma(src, lookback)) / ta.stdev(src, lookback)
var int iLen = internal_r_lookback
var int sLen = swing_r_lookback
vv = f_zscore(((close - close ) / close ) * 100,iLen)
if ms_mode == "Dynamic"
switch
vv >= 1.5 or vv <= -1.5 => iLen := 10
vv >= 1.6 or vv <= -1.6 => iLen := 9
vv >= 1.7 or vv <= -1.7 => iLen := 8
vv >= 1.8 or vv <= -1.8 => iLen := 7
vv >= 1.9 or vv <= -1.9 => iLen := 6
vv >= 2.0 or vv <= -2.0 => iLen := 5
=> iLen
var msline = array.new(0)
iH = ta.pivothigh(high, iLen, iLen)
sH = ta.pivothigh(high, sLen, sLen)
iL = ta.pivotlow (low , iLen, iLen)
sL = ta.pivotlow (low , sLen, sLen)
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - ARRAYS }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
hl () =>
= request.security(syminfo.tickerid , 'D' , hl() , lookahead = barmerge.lookahead_on)
= request.security(syminfo.tickerid , 'W' , hl() , lookahead = barmerge.lookahead_on)
= request.security(syminfo.tickerid , 'M' , hl() , lookahead = barmerge.lookahead_on)
= request.security(syminfo.tickerid , '12M', hl() , lookahead = barmerge.lookahead_on)
lstyle(style) =>
out = switch style
'⎯⎯⎯' => line.style_solid
'----' => line.style_dashed
'····' => line.style_dotted
mtfphl(h, l ,tf ,css, pdhl_style) =>
var line hl = line.new(
na
, na
, na
, na
, xloc = xloc.bar_time
, color = css
, style = lstyle(pdhl_style)
)
var line ll = line.new(
na
, na
, na
, na
, xloc = xloc.bar_time
, color = css
, style = lstyle(pdhl_style)
)
var label lbl = label.new(
na
, na
, xloc = xloc.bar_time
, text = str.format('P{0}L', tf)
, color = invcol
, textcolor = css
, size = size.small
, style = label.style_label_left
)
var label hlb = label.new(
na
, na
, xloc = xloc.bar_time
, text = str.format('P{0}H', tf)
, color = invcol
, textcolor = css
, size = size.small
, style = label.style_label_left
)
hy = ta.valuewhen(h != h , h , 1)
hx = ta.valuewhen(h == high , time , 1)
ly = ta.valuewhen(l != l , l , 1)
lx = ta.valuewhen(l == low , time , 1)
if barstate.islast
extension = time + (time - time ) * 50
line.set_xy1(hl , hx , hy)
line.set_xy2(hl , extension , hy)
label.set_xy(hlb, extension , hy)
line.set_xy1(ll , lx , ly)
line.set_xy2(ll , extension , ly)
label.set_xy(lbl, extension , ly)
if lvl_daily
mtfphl(pdh , pdl , 'D' , css_d, s_d)
if lvl_weekly
mtfphl(pwh , pwl , 'W' , css_w, s_w)
if lvl_monthly
mtfphl(pmh , pml, 'M' , css_m, s_m)
if lvl_yearly
mtfphl(pyh , pyl , '12M', css_y, s_y)
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - Market Structure }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
method darkcss(color css, float factor, bool bull) =>
blue = color.b(css) * (1 - factor)
red = color.r(css) * (1 - factor)
green = color.g(css) * (1 - factor)
color.rgb(red, green, blue, 0)
method f_line(msDraw d, size, style) =>
var line id = na
var label lbl = na
id := line.new(
d.n
, d.p
, b.n
, d.p
, color = d.css
, width = 1
, style = style
)
if msline.size() >= 250
line.delete(msline.shift())
msline.push(id)
lbl := label.new(
int(math.avg(d.n, b.n))
, d.p
, d.txt
, color = invcol
, textcolor = d.css
, style = d.bull ? label.style_label_down : label.style_label_up
, size = size
, text_font_family = font.family_monospace
)
structure(bool mtf) =>
msDraw drw = na
bool isdrw = false
bool isdrwS = false
var color css = na
var color icss = na
var int itrend = 0
var int trend = 0
bool bull_ob = false
bool bear_ob = false
bool s_bull_ob = false
bool s_bear_ob = false
n = bar_index
var ms up = ms.new(
array.new()
, array.new< int >()
, array.new()
)
var ms dn = ms.new(
array.new()
, array.new< int >()
, array.new()
)
var ms sup = ms.new(
array.new()
, array.new< int >()
, array.new()
)
var ms sdn = ms.new(
array.new()
, array.new< int >()
, array.new()
)
switch show_swing_ms
"All" => boolean.set(s_BOS , true ), boolean.set(s_CHoCH, true ) , boolean.set(s_CHoCHP, true )
"CHoCH" => boolean.set(s_BOS , false), boolean.set(s_CHoCH, true ) , boolean.set(s_CHoCHP, false )
"CHoCH+" => boolean.set(s_BOS , false), boolean.set(s_CHoCH, false) , boolean.set(s_CHoCHP, true )
"BOS" => boolean.set(s_BOS , true ), boolean.set(s_CHoCH, false) , boolean.set(s_CHoCHP, false )
"None" => boolean.set(s_BOS , false), boolean.set(s_CHoCH, false) , boolean.set(s_CHoCHP, false )
=> na
switch show_internal_ms
"All" => boolean.set(i_BOS, true ), boolean.set(i_CHoCH, true ), boolean.set(i_CHoCHP, true )
"CHoCH" => boolean.set(i_BOS, false), boolean.set(i_CHoCH, true ), boolean.set(i_CHoCHP, false)
"CHoCH+" => boolean.set(i_BOS, false), boolean.set(i_CHoCH, false ), boolean.set(i_CHoCHP, true )
"BOS" => boolean.set(i_BOS, true ), boolean.set(i_CHoCH, false ), boolean.set(i_CHoCHP, false)
"None" => boolean.set(i_BOS, false), boolean.set(i_CHoCH, false ), boolean.set(i_CHoCHP, false)
=> na
switch
iH =>
up.p.unshift(b.h )
up.l.unshift(b.h )
up.n.unshift(n )
iL =>
dn.p.unshift(b.l )
dn.l.unshift(b.l )
dn.n.unshift(n )
sL =>
sdn.p.unshift(b.l )
sdn.l.unshift(b.l )
sdn.n.unshift(n )
sH =>
sup.p.unshift(b.h )
sup.l.unshift(b.h )
sup.n.unshift(n )
// INTERNAL BULLISH STRUCTURE
if up.p.size() > 0 and dn.l.size() > 1
if ta.crossover(b.c, up.p.first())
bool CHoCH = na
string txt = na
if itrend < 0
CHoCH := true
switch
not CHoCH =>
txt := "BOS"
css := i_ms_up_BOS
blalert.bos := true
if boolean.get(i_BOS) and mtf == false and na(drw)
isdrw := true
drw := msDraw.new(
up.n.first()
, up.p.first()
, i_ms_up_BOS
, txt
, true
)
CHoCH =>
dn.l.first() > dn.l.get(1) ? blalert.chochplus : blalert.choch
txt := dn.l.first() > dn.l.get(1) ? "CHoCH+" : "CHoCH"
css := i_ms_up_BOS.darkcss(0.25, true)
if (dn.l.first() > dn.l.get(1) ? boolean.get(i_CHoCHP) : boolean.get(i_CHoCH)) and mtf == false and na(drw)
isdrw := true
drw := msDraw.new(
up.n.first()
, up.p.first()
, i_ms_up_BOS.darkcss(0.25, true)
, txt
, true
)
if mtf == false
switch
ob_filter == "None" => bull_ob := true
ob_filter == "BOS" and txt == "BOS" => bull_ob := true
ob_filter == "CHoCH" and txt == "CHoCH" => bull_ob := true
ob_filter == "CHoCH+" and txt == "CHoCH+" => bull_ob := true
itrend := 1
up.n.clear()
up.p.clear()
// INTERNAL BEARISH STRUCTURE
if dn.p.size() > 0 and up.l.size() > 1
if ta.crossunder(b.c, dn.p.first())
bool CHoCH = na
string txt = na
if itrend > 0
CHoCH := true
switch
not CHoCH =>
bralert.bos := true
txt := "BOS"
css := i_ms_dn_BOS
if boolean.get(i_BOS) and mtf == false and na(drw)
isdrw := true
drw := msDraw.new(
dn.n.first()
, dn.p.first()
, i_ms_dn_BOS
, txt
, false
)
CHoCH =>
if up.l.first() < up.l.get(1)
bralert.chochplus := true
else
bralert.choch := true
txt := up.l.first() < up.l.get(1) ? "CHoCH+" : "CHoCH"
css := i_ms_dn_BOS.darkcss(0.25, false)
if (up.l.first() < up.l.get(1) ? boolean.get(i_CHoCHP) : boolean.get(i_CHoCH)) and mtf == false and na(drw)
isdrw := true
drw := msDraw.new(
dn.n.first()
, dn.p.first()
, i_ms_dn_BOS.darkcss(0.25, false)
, txt
, false
)
if mtf == false
switch
ob_filter == "None" => bear_ob := true
ob_filter == "BOS" and txt == "BOS" => bear_ob := true
ob_filter == "CHoCH" and txt == "CHoCH" => bear_ob := true
ob_filter == "CHoCH+" and txt == "CHoCH+" => bear_ob := true
itrend := -1
dn.n.clear()
dn.p.clear()
// SWING BULLISH STRUCTURE
if sup.p.size() > 0 and sdn.l.size() > 1
if ta.crossover(b.c, sup.p.first())
bool CHoCH = na
string txt = na
if trend < 0
CHoCH := true
switch
not CHoCH =>
blalert.swingbos := true
txt := "BOS"
icss := s_ms_up_BOS
if boolean.get(s_BOS) and mtf == false and na(drw)
isdrwS := true
drw := msDraw.new(
sup.n.first()
, sup.p.first()
, s_ms_up_BOS
, txt
, true
)
CHoCH =>
if sdn.l.first() > sdn.l.get(1)
blalert.chochplusswing := true
else
blalert.chochswing := true
txt := sdn.l.first() > sdn.l.get(1) ? "CHoCH+" : "CHoCH"
icss := s_ms_up_BOS.darkcss(0.25, true)
if (sdn.l.first() > sdn.l.get(1) ? boolean.get(s_CHoCHP) : boolean.get(s_CHoCH)) and mtf == false and na(drw)
isdrwS := true
drw := msDraw.new(
sup.n.first()
, sup.p.first()
, s_ms_up_BOS.darkcss(0.25, true)
, txt
, true
)
if mtf == false
switch
ob_filter == "None" => s_bull_ob := true
ob_filter == "BOS" and txt == "BOS" => s_bull_ob := true
ob_filter == "CHoCH" and txt == "CHoCH" => s_bull_ob := true
ob_filter == "CHoCH+" and txt == "CHoCH+" => s_bull_ob := true
trend := 1
sup.n.clear()
sup.p.clear()
// SWING BEARISH STRUCTURE
if sdn.p.size() > 0 and sup.l.size() > 1
if ta.crossunder(b.c, sdn.p.first())
bool CHoCH = na
string txt = na
if trend > 0
CHoCH := true
switch
not CHoCH =>
bralert.swingbos := true
txt := "BOS"
icss := s_ms_dn_BOS
if boolean.get(s_BOS) and mtf == false and na(drw)
isdrwS := true
drw := msDraw.new(
sdn.n.first()
, sdn.p.first()
, s_ms_dn_BOS
, txt
, false
)
CHoCH =>
if sup.l.first() < sup.l.get(1)
bralert.chochplusswing := true
else
bralert.chochswing := true
txt := sup.l.first() < sup.l.get(1) ? "CHoCH+" : "CHoCH"
icss := s_ms_dn_BOS.darkcss(0.25, false)
if (sup.l.first() < sup.l.get(1) ? boolean.get(s_CHoCHP) : boolean.get(s_CHoCH)) and mtf == false and na(drw)
isdrwS := true
drw := msDraw.new(
sdn.n.first()
, sdn.p.first()
, s_ms_dn_BOS.darkcss(0.25, false)
, txt
, false
)
if mtf == false
switch
ob_filter == "None" => s_bear_ob := true
ob_filter == "BOS" and txt == "BOS" => s_bear_ob := true
ob_filter == "CHoCH" and txt == "CHoCH" => s_bear_ob := true
ob_filter == "CHoCH+" and txt == "CHoCH+" => s_bear_ob := true
trend := -1
sdn.n.clear()
sdn.p.clear()
= structure(false)
if isdrw
f_line(drw, size.small, line.style_dashed)
if isdrwS
f_line(drw, size.small, line.style_solid)
= request.security("", "15" , structure(true))
= request.security("", "60" , structure(true))
= request.security("", "240" , structure(true))
= request.security("", "1440" , structure(true))
if show_mtf_str
var tab = table.new(position = position.top_right, columns = 10, rows = 10, bgcolor = na, frame_color = color.rgb(54, 58, 69, 0), frame_width = 1, border_color = color.rgb(54, 58, 69, 100), border_width = 1)
table.cell(tab, 0, 1, text = "15" , text_color = color.silver, text_halign = text.align_center, text_size = size.normal, bgcolor = chart.bg_color, text_font_family = font.family_monospace, width = 2)
table.cell(tab, 0, 2, text = "1H" , text_color = color.silver, text_halign = text.align_center, text_size = size.normal, bgcolor = chart.bg_color, text_font_family = font.family_monospace, width = 2)
table.cell(tab, 0, 3, text = "4H" , text_color = color.silver, text_halign = text.align_center, text_size = size.normal, bgcolor = chart.bg_color, text_font_family = font.family_monospace, width = 2)
table.cell(tab, 0, 4, text = "1D" , text_color = color.silver, text_halign = text.align_center, text_size = size.normal, bgcolor = chart.bg_color, text_font_family = font.family_monospace, width = 2)
table.cell(tab, 1, 1, text = itrend15 == 1 ? "BULLISH" : itrend15 == -1 ? "BEARISH" : na , text_halign = text.align_center, text_size = size.normal, text_color = itrend15 == 1 ? i_ms_up_BOS.darkcss(-0.25, true) : itrend15 == -1 ? i_ms_dn_BOS.darkcss(0.25, false) : color.gray, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.cell(tab, 1, 2, text = itrend1H == 1 ? "BULLISH" : itrend1H == -1 ? "BEARISH" : na , text_halign = text.align_center, text_size = size.normal, text_color = itrend1H == 1 ? i_ms_up_BOS.darkcss(-0.25, true) : itrend1H == -1 ? i_ms_dn_BOS.darkcss(0.25, false) : color.gray, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.cell(tab, 1, 3, text = itrend4H == 1 ? "BULLISH" : itrend4H == -1 ? "BEARISH" : na , text_halign = text.align_center, text_size = size.normal, text_color = itrend4H == 1 ? i_ms_up_BOS.darkcss(-0.25, true) : itrend4H == -1 ? i_ms_dn_BOS.darkcss(0.25, false) : color.gray, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.cell(tab, 1, 4, text = itrend1D == 1 ? "BULLISH" : itrend1D == -1 ? "BEARISH" : na , text_halign = text.align_center, text_size = size.normal, text_color = itrend1D == 1 ? i_ms_up_BOS.darkcss(-0.25, true) : itrend1D == -1 ? i_ms_dn_BOS.darkcss(0.25, false) : color.gray, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.cell(tab, 0, 5, text = "Detected Pattern", text_halign = text.align_center, text_size = size.normal, text_color = color.silver, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.cell(tab, 0, 6, text = p.found, text_halign = text.align_center, text_size = size.normal, text_color = na(p.bull) ? color.white : p.bull ? i_ms_up_BOS.darkcss(-0.25, true) : p.bull == false ? i_ms_dn_BOS.darkcss(0.25, false) : na, bgcolor = chart.bg_color, text_font_family = font.family_monospace)
table.merge_cells(tab, 0, 5, 1, 5)
table.merge_cells(tab, 0, 6, 1, 6)
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - Strong/Weak High/Low And Equilibrium }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
var phl = Zphl.new(
na
, na
, label.new(na , na , color = invcol , textcolor = i_ms_dn_BOS , style = label.style_label_down , size = size.tiny , text = "")
, label.new(na , na , color = invcol , textcolor = i_ms_up_BOS , style = label.style_label_up , size = size.tiny , text = "")
, true
, true
, true
, true
, ""
, ""
, 0
, 0
, 0
, 0
, high
, low
, 0
, 0
, 0
, 0
, 0
, 0
, na
, na
)
zhl(len)=>
upper = ta.highest(len)
lower = ta.lowest(len)
var float out = 0
out := b.h > upper ? 0 : b.l < lower ? 1 : out
top = out == 0 and out != 0 ? b.h : 0
btm = out == 1 and out != 1 ? b.l : 0
= zhl(sLen)
= zhl(iLen)
upphl(trend) =>
var label lbl = label.new(
na
, na
, color = invcol
, textcolor = toplvl
, style = label.style_label_down
, size = size.small
)
if top
phl.stopcross := true
phl.txtup := top > phl.topy ? "HH" : "HL"
if show_lbl
topl = label.new(
b.n - swing_r_lookback
, top
, phl.txtup
, color = invcol
, textcolor = toplvl
, style = label.style_label_down
, size = size.small
)
line.delete(phl.top )
phl.top := line.new(
b.n - sLen
, top
, b.n
, top
, color = toplvl)
phl.topy := top
phl.topx := b.n - sLen
phl.tup := top
phl.tupx := b.n - sLen
if itop
phl.itopcross := true
phl.itopy := itop
phl.itopx := b.n - iLen
phl.tup := math.max(high, phl.tup)
phl.tupx := phl.tup == high ? b.n : phl.tupx
phl.uV := phl.tup != phl.tup ? b.v : phl.uV
if barstate.islast
line.set_xy1(
phl.top
, phl.tupx
, phl.tup
)
line.set_xy2(
phl.top
, b.n + 50
, phl.tup
)
label.set_x(
lbl
, b.n + 50
)
label.set_y(
lbl
, phl.tup
)
dist = math.abs(phl.uV / (phl.uV + phl.dV)) * 100
label.set_text (lbl, trend < 0
? "Strong High | " + str.tostring(phl.uV, format.volume) + " (" + str.tostring(math.round(dist,0)) + "%)"
: "Weak High | " + str.tostring(phl.uV, format.volume) + " (" + str.tostring(math.round(dist,0)) + "%)")
dnphl(trend) =>
var label lbl = label.new(
na
, na
, color = invcol
, textcolor = btmlvl
, style = label.style_label_up
, size = size.small
)
if btm
phl.sbottomcross := true
phl.txtdn := btm > phl.bottomy ? "LH" : "LL"
if show_lbl
btml = label.new(
b.n - swing_r_lookback
, btm, phl.txtdn
, color = invcol
, textcolor = btmlvl
, style = label.style_label_up
, size = size.small
)
line.delete(phl.bottom )
phl.bottom := line.new(
b.n - sLen
, btm
, b.n
, btm
, color = btmlvl
)
phl.bottomy := btm
phl.bottomx := b.n - sLen
phl.tdn := btm
phl.tdnx := b.n - sLen
if ibtm
phl.ibottomcross := true
phl.ibottomy := ibtm
phl.ibottomx := b.n - iLen
phl.tdn := math.min(low, phl.tdn)
phl.tdnx := phl.tdn == low ? b.n : phl.tdnx
phl.dV := phl.tdn != phl.tdn ? b.v : phl.dV
if barstate.islast
line.set_xy1(
phl.bottom
, phl.tdnx
, phl.tdn
)
line.set_xy2(
phl.bottom
, b.n + 50
, phl.tdn
)
label.set_x(
lbl
, b.n + 50
)
label.set_y(
lbl
, phl.tdn
)
dist = math.abs(phl.dV / (phl.uV + phl.dV)) * 100
label.set_text (lbl, trend > 0
? "Strong Low | " + str.tostring(phl.dV, format.volume) + " (" + str.tostring(math.round(dist,0)) + "%)"
: "Weak Low | " + str.tostring(phl.uV, format.volume) + " (" + str.tostring(math.round(dist,0)) + "%)")
midphl() =>
avg = math.avg(phl.bottom.get_y2(), phl.top.get_y2())
var line l = line.new(
y1 = avg
, y2 = avg
, x1 = b.n - sLen
, x2 = b.n + 50
, color = midlvl
, style = line.style_solid
)
var label lbl = label.new(
x = b.n + 50
, y = avg
, text = "Equilibrium"
, style = label.style_label_left
, color = invcol
, textcolor = midlvl
, size = size.small
)
if barstate.islast
more = (phl.bottom.get_x1() + phl.bottom.get_x2()) > (phl.top.get_x1() + phl.top.get_x2()) ? phl.top.get_x1() : phl.bottom.get_x1()
line.set_xy1(l , more , avg)
line.set_xy2(l , b.n + 50, avg)
label.set_x (lbl , b.n + 50 )
label.set_y (lbl , avg )
dist = math.abs((l.get_y2() - close) / close) * 100
label.set_text (lbl, "Equilibrium (" + str.tostring(math.round(dist,0)) + "%)")
hqlzone() =>
if barstate.islast
var hqlzone dZone = hqlzone.new(
box.new(
na
, na
, na
, na
, bgcolor = color.new(toplvl, 70)
, border_color = na
)
, box.new(
na
, na
, na
, na
, bgcolor = color.new(midlvl, 70)
, border_color = na
)
, box.new(
na
, na
, na
, na
, bgcolor = color.new(btmlvl, 70)
, border_color = na
)
, label.new(na, na, text = "Premium" , color = invcol, textcolor = toplvl, style = label.style_label_down, size = size.small)
, label.new(na, na, text = "Equilibrium", color = invcol, textcolor = midlvl, style = label.style_label_left, size = size.small)
, label.new(na, na, text = "Discount" , color = invcol, textcolor = btmlvl, style = label.style_label_up , size = size.small)
)
dZone.pbx.set_lefttop(int(math.max(phl.topx, phl.bottomx)) , phl.tup)
dZone.pbx.set_rightbottom(b.n + 50 , 0.95 * phl.tup + 0.05 * phl.tdn)
dZone.ebx.set_lefttop(int(math.max(phl.topx, phl.bottomx)), 0.525 * phl.tup + 0.475 * phl.tdn)
dZone.ebx.set_rightbottom(b.n + 50 , 0.525 * phl.tdn + 0.475 * phl.tup)
dZone.lbx.set_lefttop(int(math.max(phl.topx, phl.bottomx)), 0.95 * phl.tdn + 0.05 * phl.tup)
dZone.lbx.set_rightbottom(b.n + 50 , phl.tdn)
dZone.plb.set_xy( int(math.avg(math.max(phl.topx, phl.bottomx), int(b.n + 50))) , phl.tup)
dZone.elb.set_xy( int(b.n + 50) , math.avg(phl.tup, phl.tdn))
dZone.lbl.set_xy( int(math.avg(math.max(phl.topx, phl.bottomx), int(b.n + 50))) , phl.tdn)
if show_mtb
upphl (trend)
dnphl (trend)
hqlzone()
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - Volumetric Order Block }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
method eB(box b, bool ext, color css, bool swing) =>
b.unshift(
box.new(
na
, na
, na
, na
, xloc = xloc.bar_time
, text_font_family = font.family_monospace
, extend = ext ? extend.right : extend.none
, border_color = swing ? color.new(css, 0) : color.new(color.white,100)
, bgcolor = css
, border_width = 1
)
)
method eL(line l, bool ext, bool solid, color css) =>
l.unshift(
line.new(
na
, na
, na
, na
, width = 1
, color = css
, xloc = xloc.bar_time
, extend = ext ? extend.right : extend.none
, style = solid ? line.style_solid : line.style_dashed
)
)
method drawVOB(bool cdn, bool bull, color css, int loc, bool swing) =>
= request.security(
syminfo.tickerid
, ""
,
, lookahead = barmerge.lookahead_off
)
var obC obj = obC.new(
array.new()
, array.new()
, array.new< int >()
, array.new()
, array.new()
, array.new()
, array.new< int >()
, array.new< int >()
, array.new< int >()
, array.new< int >()
, array.new()
, array.new()
, array.new< int >()
)
var obD draw = obD.new(
array.new()
, array.new()
, array.new()
, array.new()
, array.new()
)
if barstate.isfirst
for i = 0 to ob_num - 1
draw.mL .eL(false, false, use_grayscale ? color.new(color.gray, 0) : color.new(css,0))
draw.ob .eB(false, use_grayscale ? color.new(color.gray, 90) : css, swing)
draw.blB.eB(false, css_metric_up , swing)
draw.brB.eB(false, css_metric_dn , swing)
draw.eOB.eB(true , use_grayscale ? color.new(color.gray, 90) : css, swing)
float pos = ob_pos == "Full"
? (bull ? high : low)
: ob_pos == "Middle"
? ohlc4
: ob_pos == "Accurate"
? hl2
: hl2
if cdn
obj.h.clear()
obj.l.clear()
obj.n.clear()
for i = 0 to math.abs((loc - b.n)) - 1
obj.h.push(hH )
obj.l.push(lL )
obj.n.push(b.t )
// obj.h.reverse()
// obj.l.reverse()
int iU = obj.l.indexof(obj.l.min()) + 1
int iD = obj.h.indexof(obj.h.max()) + 1
obj.dir.unshift(
bull
? (b.c > b.o ? 1 : -1)
: (b.c > b.o ? 1 : -1)
)
obj.top.unshift(
bull
? pos
: obj.h.max()
)
obj.btm.unshift(
bull
? obj.l.min()
: pos
)
obj.left.unshift(
bull
? obj.n.get(obj.l.indexof(obj.l.min()))
: obj.n.get(obj.h.indexof(obj.h.max()))
)
obj.avg.unshift(
math.avg(obj.top.first(), obj.btm.first())
)
obj.cV.unshift(
bull
? b.v
: b.v
)
if ob_pos == "Precise"
switch bull
true =>
if obj.avg.get(0) < (b.c < b.o ? b.c : b.o ) and obj.top.get(0) > hlcc4
obj.top.set(0, obj.avg.get(0))
obj.avg.set(0, math.avg(obj.top.first(), obj.btm.first()))
false =>
if obj.avg.get(0) > (b.c < b.o ? b.o : b.c ) and obj.btm.get(0) < hlcc4
obj.btm.set(0, obj.avg.get(0))
obj.avg.set(0, math.avg(obj.top.first(), obj.btm.first()))
obj.blVP.unshift ( 0 )
obj.brVP.unshift ( 0 )
obj.wM .unshift ( 1 )
if use_overlap
int rmP = use_overlap_method == "Recent" ? 1 : 0
if obj.avg.size() > 1
if bull
? obj.btm.first() < obj.top.get(1)
: obj.top.first() > obj.btm.get(1)
obj.wM .remove(rmP)
obj.cV .remove(rmP)
obj.dir .remove(rmP)
obj.top .remove(rmP)
obj.avg .remove(rmP)
obj.btm .remove(rmP)
obj.left .remove(rmP)
obj.blVP .remove(rmP)
obj.brVP .remove(rmP)
if barstate.isconfirmed
for x = 0 to ob_num - 1
tg = switch ob_mitigation
"Middle" => obj.avg
"Absolute" => bull ? obj.btm : obj.top
for in tg
if (bull ? cC < pt : cC > pt)
obj.wM .remove(idx)
obj.cV .remove(idx)
obj.dir .remove(idx)
obj.top .remove(idx)
obj.avg .remove(idx)
obj.btm .remove(idx)
obj.left .remove(idx)
obj.blVP .remove(idx)
obj.brVP .remove(idx)
if barstate.islast
if obj.avg.size() > 0
// Alert
if bull
? ta.crossunder(low , obj.top.get(0))
: ta.crossover (high, obj.btm.get(0))
switch bull
true => blalert.obtouch := true
false => bralert.obtouch := true
float tV = 0
obj.dV.clear()
seq = math.min(ob_num - 1, obj.avg.size() - 1)
for j = 0 to seq
tV += obj.cV.get(j)
if j == seq
for y = 0 to seq
obj.dV.unshift(
math.floor(
(obj.cV.get(y) / tV) * 100)
)
obj.dV.reverse()
for i = 0 to math.min(ob_num - 1, obj.avg.size() - 1)
dmL = draw.mL .get(i)
dOB = draw.ob .get(i)
dblB = draw.blB.get(i)
dbrB = draw.brB.get(i)
deOB = draw.eOB.get(i)
dOB.set_lefttop (obj.left .get(i) , obj.top.get(i))
deOB.set_lefttop (b.t , obj.top.get(i))
dOB.set_rightbottom (b.t , obj.btm.get(i))
deOB.set_rightbottom(b.t + (b.t - b.t ) * 100 , obj.btm.get(i))
if use_middle_line
dmL.set_xy1(obj.left.get(i), obj.avg.get(i))
dmL.set_xy2(b.t , obj.avg.get(i))
if ob_metrics_show
dblB.set_lefttop (obj.left.get(i), obj.top.get(i))
dbrB.set_lefttop (obj.left.get(i), obj.avg.get(i))
dblB.set_rightbottom(obj.left.get(i), obj.avg.get(i))
dbrB.set_rightbottom(obj.left.get(i), obj.btm.get(i))
rpBL = dblB.get_right()
rpBR = dbrB.get_right()
dbrB.set_right(rpBR + (b.t - b.t ) * obj.brVP.get(i))
dblB.set_right(rpBL + (b.t - b.t ) * obj.blVP.get(i))
if use_show_metric
txt = switch
obj.cV.get(i) >= 1000000000 => str.tostring(math.round(obj.cV.get(i) / 1000000000,3)) + "B"
obj.cV.get(i) >= 1000000 => str.tostring(math.round(obj.cV.get(i) / 1000000,3)) + "M"
obj.cV.get(i) >= 1000 => str.tostring(math.round(obj.cV.get(i) / 1000,3)) + "K"
obj.cV.get(i) < 1000 => str.tostring(math.round(obj.cV.get(i)))
deOB.set_text(
str.tostring(
txt + " (" + str.tostring(obj.dV.get(i)) + "%)")
)
deOB.set_text_size (size.auto)
deOB.set_text_halign(text.align_left)
deOB.set_text_color (use_grayscale ? color.silver : color.new(css, 0))
if ob_metrics_show and barstate.isconfirmed
if obj.wM.size() > 0
for i = 0 to obj.avg.size() - 1
switch obj.dir.get(i)
1 =>
switch obj.wM.get(i)
1 => obj.blVP.set(i, obj.blVP.get(i) + 1), obj.wM.set(i, 2)
2 => obj.blVP.set(i, obj.blVP.get(i) + 1), obj.wM.set(i, 3)
3 => obj.brVP.set(i, obj.brVP.get(i) + 1), obj.wM.set(i, 1)
-1 =>
switch obj.wM.get(i)
1 => obj.brVP.set(i, obj.brVP.get(i) + 1), obj.wM.set(i, 2)
2 => obj.brVP.set(i, obj.brVP.get(i) + 1), obj.wM.set(i, 3)
3 => obj.blVP.set(i, obj.blVP.get(i) + 1), obj.wM.set(i, 1)
var hN = array.new(1, b.n)
var lN = array.new(1, b.n)
var hS = array.new(1, b.n)
var lS = array.new(1, b.n)
if iH
hN.pop()
hN.unshift(int(b.n ))
if iL
lN.pop()
lN.unshift(int(b.n ))
if sH
hS.pop()
hS.unshift(int(b.n ))
if sL
lS.pop()
lS.unshift(int(b.n ))
if ob_show
bull_ob.drawVOB(true , ob_bull_css, hN.first(), false)
bear_ob.drawVOB(false, ob_bear_css, lN.first(), false)
if ob_swings
s_bull_ob.drawVOB(true , css_swing_up, hS.first(), true)
s_bear_ob.drawVOB(false, css_swing_dn, lS.first(), true)
if bull_ob
blalert.ob := true
if bear_ob
bralert.ob := true
if s_bull_ob
blalert.swingob := true
if s_bear_ob
blalert.swingob := true
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - End }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{ - FVG | VI | OG }
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
//{----------------------------------------------------------------------------------------------------------------------------------------------}
ghl() => request.security(syminfo.tickerid, fvg_tf, [high , low , close , open ])
tfG() => request.security(syminfo.tickerid, fvg_tf, )
cG(bool bull) =>
= ghl()
= tfG()
var FVG draw = FVG.new(
array.new()
, array.new()
)
var FVG cords = array.new()
float pup = na
float pdn = na
bool cdn = na
int pos = 2
cc = timeframe.change(fvg_tf)
if barstate.isfirst
for i = 0 to fvg_num - 1
draw.box.unshift(box.new (na, na, na, na, border_color = color.new(color.white, 100), xloc = xloc.bar_time))
draw.ln.unshift (line.new(na, na, na, na, xloc = xloc.bar_time, width = 1, style = line.style_solid))
switch what_fvg
"FVG" =>
pup := bull ? gl : l
pdn := bull ? h : gh
cdn := bull ? gl > h and cc : gh < l and cc
pos := 2
"VI" =>
pup := bull
? (gc > go
? go
: gc)
: (gc > go
? go
: gc )
pdn := bull
? (gc > go
? gc
: go )
: (gc > go
? gc
: go)
cdn := bull
? go > gc and gh >
RSI Analytic Volume Matrix [RAVM] Overview
RSI Analytic Volume Matrix is an overlay indicator that turns classic RSI into a multi-layered market-reading engine. Instead of treating RSI 30 and 70 as simple buy/sell lines, RAVM combines RSI geometry (angle and acceleration), statistical volume analysis, and a 5×5 VSA-inspired matrix to describe what is really happening inside each candle.
The script is designed as an educational and analytical tool. It does not generate trading signals. Instead, it helps you read the market context, understand where the pressure is coming from (buyers vs. sellers), and see how price, momentum, and volume interact in real time.
Concept & Philosophy
RAVM is built around a hierarchical logic and a few core ideas:
• Hierarchical State Machine: First, RSI defines a context (where we are in the 0–100 range). Then the geometric engine evaluates the angle-of-turn of RSI using a Z-Score. Only after a meaningful geometric event is detected does the system promote a bar to a potential setup (warning vs. confirmed).
• Geometric Primacy: The angle and acceleration of RSI (RSI geometry) are more important than the raw RSI level itself. RAVM uses a geometric veto: if the geometric trigger is not confirmed, the confidence score is capped below 50%, even if volume looks interesting.
• RSI Beyond 30 and 70: Being above 70 or below 30 is not treated as an automatic overbought/oversold signal. RAVM treats those zones as contextual factors that contribute only a partial portion of the final score, alongside geometry, total volume expansion, buy/sell balance, and delta power.
• Volume Decomposition: Volume is decomposed into total, buy-side, sell-side, and delta components. Each of these is normalized with a Z-Score over a shared statistical window, so RSI geometry and volume live in the same statistical context.
• Educational Scoring Pipeline: RAVM builds a 0–100 "Quantum Score" for each detected setup. The score expresses how strong the story is across four dimensions: geometry (RSI angle-of-turn), total volume expansion, which side is driving that volume (buyers vs. sellers), and the power of delta. The score is designed for learning and weighting, not for mechanical trade entries.
• VSA Matrix Engine: A 5×5 matrix combines momentum states and volume dynamics. Each cell corresponds to an interpreted VSA-style scenario (Absorption, Distribution, No Demand, Stopping Volume, Strong Reversal, etc.), shown both as text and as a heatmap dashboard on the chart.
How RAVM Works
1. RSI Context & Geometry
RAVM starts with a classic RSI, but it does not stop at simple level checks. It computes the velocity and acceleration of RSI and normalizes them via a Z-Score to produce an Angle-of-Turn metric (Z-AoT). This Z-AoT is then mapped into a 0–1 intensity value called MSI (Momentum Shift Intensity).
The script monitors both classic RSI zones (around 30 and 70) and geometric triggers. Entering the lower or upper zone is treated as a contextual event only. A setup becomes "confirmed" when a significant geometric turn is detected (based on Z-AoT thresholds). Otherwise, the bar is at most a warning.
2. Volume & Statistical Engine
The volume engine can work in two modes: a geometric approximation (based on candle structure) or a more precise intrabar mode using up/down volume requests. In both cases, RAVM builds a volume packet consisting of:
• Total volume
• Buy-side volume
• Sell-side volume
• Delta (buy – sell)
Each of these series is normalized using a Z-Score over the same statistical window that is used for RSI geometry. This allows RAVM to answer questions such as: Is total volume exceptional on this bar? Is the expansion mostly coming from buyers or from sellers? Is delta unusually strong or weak compared to recent history?
3. Scoring System (Quantum Score)
For each bar where a setup is active, RAVM computes a 0–100 score intended as an educational confidence measure. The scoring pipeline follows this sequence:
A. RSI Geometry (MSI): Measures the strength of the RSI angle-of-turn via Z-AoT. This has geometric primacy over simple level checks.
B. RSI Zone Context: Being below 30 or above 70 contributes only a partial bonus to the score, reflecting the idea that these zones are context, not automatic signals. Mildly supportive zones (e.g., RSI below 50 for bullish contexts) can also contribute with lower weight.
C. Total Volume Expansion: A normalized Volume Power term expresses how exceptional the total volume is relative to its recent distribution. If there is no meaningful volume expansion, the score remains modest even if RSI geometry looks interesting.
D. Which Side Is Driving the Volume: RAVM then checks whether the expansion is primarily on the buy side or the sell side, using Z-Score statistics for buy and sell volume separately. This stage does not yet rely on delta as a power metric; it simply answers the question: "Is this expansion mostly driven by buyers, sellers, or both?"
E. Delta as Final Power: Only at the final stage does the script bring in delta and its Z-Score as a measure of how one-sided the pressure really is. A strong negative delta during a bullish context, for example, can highlight absorption, while a strong positive delta against a bearish context can highlight distribution or a buying climax.
If a setup is not geometrically confirmed (for example, a simple entry into RSI 30/70 without a strong geometric turn), RAVM caps the final score below 50%. This "Geometric Veto" enforces the idea that RSI geometry must confirm before a scenario can be considered high-confidence.
4. Overlay UI & Smart Labels
RAVM is an overlay indicator: all information is drawn directly on the price chart, not in a separate pane. When a setup is active, a smart label is attached to the bar, together with a vertical connector line. Each label shows:
• Direction of the setup (bullish or bearish)
• Trigger type (classic OS/OB vs. geometric/hidden)
• Status (warning vs. confirmed)
• Quantum Score as a percentage
Confirmed setups use stronger colors and solid connectors, while warnings use softer colors and dotted connectors. The script also manages label placement to avoid overlap, keeping the chart clean and readable.
In addition to labels, a dashboard table is drawn on the chart. It displays the currently active matrix scenario, the dominant bias, a short textual interpretation, the full 5×5 heatmap, and summary metrics such as RSI, MSI, and Volume Power.
RSI Is Not Just 30 and 70
One of the central design decisions in RAVM is to treat RSI 30 and 70 as context, not as fixed buy/sell buttons. Many traders mechanically assume that RSI below 30 means "buy" and RSI above 70 means "sell". RAVM explicitly rejects this simplification.
Instead, the script asks a series of deeper questions: How sharp is the angle-of-turn of RSI right now? Is total volume expanding or contracting? Is that expansion dominated by buyers or sellers? Is delta confirming the move, or is there a hidden absorption or distribution taking place?
In the scoring logic, being in a lower or upper RSI zone contributes only part of the final score. Geometry, volume expansion, the buy/sell split, and delta power all have to align before a high-confidence scenario emerges. This makes RAVM much closer to a structured market-reading tool than a classic overbought/oversold indicator.
Matrix User Manual – Reading the 5×5 Grid
The heart of RAVM is its 5×5 matrix, where the vertical axis represents momentum states (M1–M5) and the horizontal axis represents volume dynamics (V1–V5). Each cell in this grid corresponds to a VSA-style scenario. The dashboard highlights the currently active cell and prints a textual description so you can read the story at a glance.
1. Confirmation Scenarios
These scenarios occur when momentum direction and volume expansion are aligned:
• Bullish Confirmation / Strong Reversal: Momentum is shifting strongly upward (often from a depressed RSI context), and expanded volume is driven mainly by buyers. Often seen as a strong bullish reversal or continuation signal from a VSA perspective.
• Bearish Confirmation / Strong Drop: Momentum is turning decisively downward, and expanded volume is driven mainly by sellers. This maps to strong bearish continuation or sharp reversal patterns.
2. Absorption & Stopping Volume
• Absorption: Total volume expands, but the dominant flow is opposite to the recent price move or the geometric bias. For example, heavy selling volume while the geometric context is bullish. This can indicate smart money quietly absorbing orders from the crowd.
• Stopping Volume: Exceptionally high volume appears near the end of an extended move, while momentum begins to decelerate. Price may still print new extremes, but the effort vs. result relationship signals potential exhaustion and the possibility of a turn.
3. Distribution & Buying Climax
• Distribution: Heavy buying volume appears within a bearish or topping context. Rather than healthy accumulation, this often represents larger players offloading inventory to late buyers. The matrix will typically flag this as a bearish-leaning scenario despite strong upside prints.
• Buying Climax: A surge of buy-side volume near the end of a strong uptrend, with momentum starting to weaken. From a VSA point of view, this is often the last push where retail aggressively buys what smart money is selling.
4. No Demand & No Supply
• No Demand: Price attempts to rise but does so on low, non-expansive volume. The market is not interested in following the move, and the lack of participation often precedes weakness or sideways action.
• No Supply: Price tries to push lower on thin volume. Selling pressure is limited, and the lack of supply can precede stabilization or recovery if buyers step back in.
5. Trend Exhaustion
• Uptrend Exhaustion: Momentum remains nominally bullish, but the quality of volume deteriorates (e.g., more effort, less net result). The matrix marks this as an uptrend losing internal strength, often after a series of aggressive moves.
• Downtrend Exhaustion: Similar logic in the opposite direction: strong prior downtrend, but increasingly inefficient downside progress relative to the volume invested. This can precede accumulation or a relief rally.
6. Effort vs. Result Scenarios
• Bullish Effort, Little Result: Buyers invest notable volume, but price progress is limited. This may reveal hidden selling into strength or a lack of follow-through from the broader market.
• Bearish Effort, Little Result: Sellers push volume, but price does not decline proportionally. This can indicate absorption of selling pressure and potential underlying demand.
7. Neutral, Churn & Thin Markets
• Neutral / Thin Market: Momentum and volume both remain muted. RAVM marks these as neutral cells where aggressive decision-making is usually less attractive and observing the broader structure is more important.
• High Volume Churn / Volatility: Both sides are active with high volume but limited directional progress. This can correspond to battle zones, local ranges, or high volatility rotations where the main message is conflict rather than clear trend.
Inputs & Options
RAVM includes several input groups to adapt the tool to your preferences:
• Localization: Multiple language options for all labels and dashboard text (e.g., English, Farsi, Turkish, Russian).
• RSI Core Settings: RSI length, source, and upper/lower contextual zones (typically around 30 and 70).
• Geometric Engine: Z-AoT sigma thresholds, confirmation ratios, and normalization window multiplier. These control how sensitive the script is to RSI angle-of-turn events.
• Volume Engine: Choice between geometric approximation and intrabar up/down volume, Z-Score thresholds for volume expansion, and related parameters.
• Visual Interface: Toggles for smart labels, dashboard table, font sizes, dashboard position, and color themes for bullish, bearish, and warning states.
Disclaimer
RSI Analytic Volume Matrix is provided for educational and research purposes only. It does not constitute financial advice and is not a signal generator. Any trading decisions you make based on this tool, or any other, are entirely your own responsibility. Always consider your own risk management rules and conduct your own analysis.
SuperTrend Oscillator MTF█ OVERVIEW
SuperTrend Oscillator MTF is a multi-timeframe version of the classic SuperTrend converted into an oscillator. Instead of drawing the SuperTrend line on the price chart, it displays the distance of the close from the SuperTrend line simultaneously for the current timeframe and two additional timeframes. This allows you to instantly see the trend direction and strength across three selected timeframes in a single window.
█ CONCEPT
The classic SuperTrend value is subtracted from price and normalized so that trend direction can be directly compared across different timeframes without switching charts.
- Value above zero = price below SuperTrend line → bearish trend
- Value below zero = price above SuperTrend line → bullish trend
- The further away from zero, the stronger the trend.
█ FEATURES
- Three SuperTrend Oscillator lines: current TF, TF1 and TF2
- Automatic detection of 3-timeframe agreement
- BUY and SELL labels that appear only when all three timeframes turn in the same direction at the same moment
- Circle signals on every zero-line cross of the current timeframe
- Configurable soft gradient fill (can be disabled)
- Zero line changes color (green/red/gray) depending on 3-TF agreement
- Fully customizable colors for each timeframe
- Built-in alerts for all signal types
█ HOW TO USE
Add the indicator to the chart → set two additional timeframes and adjust ATR Period and Factor to suit your trading style.
Main settings:
- ATR Period → default 10
- Factor → default 3.0 (higher = fewer signals)
- TF 1 and TF 2 → any timeframes (e.g. 1H+4H, 4H+D, D+W, etc.)
- Enable gradient → turn fill on/off
- Show BUY/SELL labels (3 TF agreement) → enable/disable the strongest signals
Interpretation:
Two types of signals:
- Green/red circles → current timeframe changes trend direction (faster signal)
- BUY/SELL labels → all three timeframes simultaneously switch to the same direction (strongest confluence)
- Additionally, the zero line turns green or red when all three trends are aligned.
█ APPLICATIONS
Perfect for:
- Trend-following with multi-timeframe confirmation
- Filtering false breakouts on lower timeframes
- Scalping & day trading (use fast circle signals)
- Swing & position trading (wait for full 3-TF agreement)
Best combined with:
- Support/resistance levels and supply/demand zones – enter long after a confirmed breakout and retest of a key level (e.g. Change of Character, Break of Structure, Order Block, 0.618–0.786 Fibonacci) only when the oscillator shows 3-TF agreement or at least a bullish circle. Hold the trade to the next significant resistance/supply zone.
- Volume and Volume Profile – confirm move strength with rising volume and high-volume nodes at the breakout level. Declining volume while moving away from zero may signal trend exhaustion.
- Classic oscillators (RSI, Stochastic, MACD) – use primarily for spotting divergences and overbought/oversold conditions. One of the safest exits is when a regular or hidden divergence appears on RSI/Stochastic in an extreme zone, even if SuperTrend Oscillator MTF still shows alignment.
█ NOTES
- Works on all markets and all timeframes
- BUY/SELL labels (3-TF agreement) are the cleanest and strongest signals
- Circle signals are faster but more prone to noise
- Higher ATR Period = fewer signals, higher quality
LiqVision Institutional Suite v6.2 – Hybrid ModeLiqVision Institutional Suite v6.2 — Hybrid Mode (Lightning Edition)
Een ultra-geoptimaliseerde Smart Money-indicator gebaseerd op institutionele principes: Liquidity, Market Structure, Order Blocks, FVG’s en Model 1/2 setups.
Dit script combineert meerdere professionele SMC-concepten in één engine:
🔷 Functionaliteiten
1. Liquidity Engine
Automatische detectie van EQH, EQL en Liquidity Sweeps
Dynamische lijnprojectie met smart cleanup
Slimme sweep-detectie voor high-probability entries
2. Market Structure Engine
BOS & CHOCH detectie
Trend continuatie- en reversalsignalen
Swing-based pivot logic
3. Order Block Engine
Automatische OB-detectie met displacement filtering
Bullish & Bearish macro Order Blocks
HTF glow overlay (nieuw in v6.2)
4. FVG Engine
Major Fair Value Gap detection
Up/Down imbalance visual engine
HTF-based color restoration (v6.2 fix)
5. Model 1 & Model 2 Signal Engine
Trend continuation entries (Model 1)
Reversal setups gebaseerd op HTF liquidity & displacement (Model 2)
Auto-tapping logic geïntegreerd met OB/FVG
6. Hybrid Mode Rendering
Slimme shading afhankelijk van timeframe:
LTF → Hide OB/FVG
MTF → White overlays
HTF → Premium glow visuals
🔷 Alerts
Volledige alert-ondersteuning voor:
Model 1 Buy/Sell
Model 2 Buy/Sell
Liquidity Sweep
BOS Up/Down
CHOCH Up/Down
OB Tap
FVG Tap
Any alert() function call
Geschikt voor Telegram, Discord, bots en externe signal pipelines.
🔷 Gebruik
Voeg de indicator toe
Kies timeframe (1m–4h aanbevolen)
Activeer alerts via “Any alert() function call”
Volg Model 1/2 entries voor optimaal resultaat
⚡ DISCLAIMER
Dit script is uitsluitend bedoeld voor educatieve doeleinden. Geen financieel advies. Resultaten uit het verleden geven geen garantie voor de toekomst.
Helix Protocol 7HELIX PROTOCOL 7
Overview
Helix Protocol 7 is an advanced trend-adaptive signal engine that dynamically adjusts its buy/sell thresholds based on real-time market regime detection. Unlike static indicators that use fixed overbought/oversold levels, Helix 7 recognizes that optimal entry and exit points shift dramatically depending on whether the market is trending strongly, ranging, or reversing.
The indicator fuses multiple analytical frameworks—momentum oscillators, trend strength metrics, volatility analysis, volume confirmation, and price structure—into a unified signal system that adapts to changing market conditions in real-time.
Core Philosophy
"Don't fight the trend—adapt to it."
In a strong uptrend, you want to buy dips early (before extreme oversold) and let winners run longer
In a downtrend, you want to sell bounces quickly and only buy true capitulation
In a neutral/ranging market, standard overbought/oversold levels apply
Helix Protocol 7 automatically detects which regime you're in and applies the appropriate thresholds.
Key Features
🔄 Trend-Adaptive Signal Thresholds
The indicator classifies markets into four states and adjusts Fisher Transform and RSI thresholds accordingly:
Trend StateDetection CriteriaBUY TriggersSELL TriggersSTRONG UPTRENDADX rising, ADX > 25, +DI > -DIFisher < 1.0, RSI < 50Fisher > 2.5, RSI > 70STRONG DOWNTRENDADX rising, ADX > 25, -DI > +DIFisher < -2.5, RSI < 25Fisher > 1.5, RSI > 60WEAK DOWNTRENDADX falling, -DI > +DIFisher < -2.5, RSI < 25Fisher > 1.5, RSI > 60NEUTRALDefault fallbackFisher < -2.0, RSI < 30Fisher > 2.0, RSI > 65
📊 Dynamic Envelope Bands
Adaptive bands that expand and contract based on:
ATR (Average True Range) - Base volatility measure
ADX (Trend Strength) - Bands widen in strong trends
Chaikin Oscillator - Volume-weighted band adjustment
🎯 Multi-Trigger Signal System
Signals can fire from multiple sources:
Trend-Based Signals - Fisher + RSI thresholds met for current regime
Band Touch Signals - Price touches upper/lower band (support/resistance)
EXTREME Signals - Price penetrates band by significant amount (bypasses cooldown)
⚡ Extreme Move Detection
When price makes an explosive move that penetrates the band by more than 30% of ATR (configurable), the signal fires with EXTREME priority and bypasses the normal cooldown period. This ensures you never miss major reversal opportunities.
📈 GXS Scoring System
A proprietary multi-factor scoring system (-1.0 to +1.0) that weighs:
Trend Strength (30%) - ADX direction and magnitude
Momentum (25%) - RSI, MACD, Stochastic, CCI, ROC consensus
Volume (20%) - OBV trend and volume surge detection
Price Structure (15%) - Band position and volatility percentile
Price Action (10%) - Bullish/bearish candle ratio
🔀 RSI Divergence Detection
Automatically detects and displays:
Regular Bullish Divergence - Price lower low + RSI higher low (reversal up)
Regular Bearish Divergence - Price higher high + RSI lower high (reversal down)
Hidden Bullish Divergence - Trend continuation signal (uptrend)
Hidden Bearish Divergence - Trend continuation signal (downtrend)
📉 BBWP Volatility Meter
Bollinger Band Width Percentile measures current volatility relative to historical norms:
LOW (< 30%) - Volatility compression, breakout imminent
MEDIUM (30-70%) - Normal market conditions
HIGH (> 70%) - Extended volatility, potential exhaustion
Visual Components
Money Line
A dynamic centerline (Linear Regression or Weighted EMA) colored by slope:
🟢 Green - Rising (bullish momentum)
🔴 Red - Falling (bearish momentum)
🟡 Yellow - Flat (consolidation)
Envelope Cloud
Shaded region between upper and lower bands, colored by Money Line slope direction for instant trend visualization.
Signal Labels
Clear entry/exit labels showing:
Price level
Trigger type (UPTREND DIP, CAPITULATION, BAND TOUCH, EXTREME, etc.)
Color coding (Green=Buy, Red=Sell, Lime=Extreme Buy, Fuchsia=Extreme Sell)
ADX Trend Bar
Bottom indicator showing trend state:
🟢 Lime - Strong Uptrend
🔴 Red - Downtrend
🟠 Orange - Weak/Transitional (ADX 15-24)
⚪ White - Ranging (ADX < 15)
🔵 Blue - Strong trend, neutral direction
Info Panel
Real-time dashboard displaying:
Current trend state
GXS Score
Active divergences
Volatility level (BBWP)
ADX value and direction
DI Spread
Fisher Transform value
RSI value
Context-sensitive BUY/SELL thresholds for current regime
Alert System
JSON Webhook Alerts (Bot-Ready)
json{
"action": "BUY",
"symbol": "BTC/USDT",
"price": "93500.00",
"trigger": "EXTREME",
"rsi": "28.5",
"fisher": "-2.31",
"adx": "32.4",
"trend_state": "STRONG DOWN"
}
Available Alert Conditions
Buy Signal / Sell Signal
Lower Band Touch / Upper Band Touch
EXTREME Lower Band / EXTREME Upper Band
Strong Uptrend Started
Downtrend Started
Neutral Trend Started
Trend State Change
Recommended Settings
Scalping (1m-5m)
Signal Cooldown: 3-5 bars
Extreme Penetration: 0.2 (more sensitive)
ADX Length: 10-12
Swing Trading (15m-4H)
Signal Cooldown: 5-8 bars
Extreme Penetration: 0.3 (default)
ADX Length: 14 (default)
Position Trading (Daily+)
Signal Cooldown: 8-12 bars
Extreme Penetration: 0.4-0.5 (less sensitive)
ADX Length: 14-20
Input Parameters
Core Settings
Money Line Type (Linear Regression / Weighted EMA)
Money Line Length
RSI Period
Fisher Period
Dynamic Bands
ATR Period & Multiplier
Adaptive Bands toggle
Chaikin Weight
Extreme Band Penetration threshold
Trend Detection
ADX Length & Slope Lookback
Strong Trend ADX Threshold
DI Spread for Neutral detection
Signal Thresholds (by Trend State)
Fully customizable Fisher/RSI/ADX levels for each regime
Separate BUY and SELL parameters
Display Options
Toggle bands, cloud, labels, panels
Cooldown period
Debug panel for troubleshooting
Best Practices
Confirm with price action - Signals are high-probability setups, not guarantees
Respect the trend state - The panel shows current thresholds for a reason
Watch for EXTREME signals - These indicate significant reversals
Use divergences as confluence - Especially powerful at band touches
Monitor volatility - Low BBWP often precedes big moves
Version: 7.0
Author: ralis24
Sai Scalper ProSai Scalper Pro – Feature Summary
Trend Engine
- ATR-based trailing stop with Fibonacci levels (61.8%, 78.6%, 88.6%)
- Auto trend detection with swing point tracking
Scalping Detection (0-10 Score)
- Analyzes 7 factors: ATR compression, ADX, Volume, Range, Consolidation, RSI, BB Squeeze
- Smart state machine with hysteresis to prevent false signals
- Adjustable sensitivity & stability settings
Cloud Modes (7 Options)
- Full Zone, Entry Zone, Premium/Discount, Fib Bands, Upper/Middle/Lower Band
Pro Dashboard
- Real-time scalp score with visual meter
- Entry quality rating & zone display
- Suggested TP/SL based on ATR
- Session detection (Sydney/Tokyo/London/NY) with overlap alerts
- 3 styles (Minimal/Pro/Full) × 4 sizes × 9 positions
Alerts
- Scalp ready, Prime conditions (8+), Optimal entry zone
- Direction-specific (Long/Short bias)
Combines trend-following Fibonacci analysis with intelligent ranging detection for optimal scalping opportunities.
Apex Trend & Liquidity Master with TP/SLThe Apex Trend & Liquidity Master is a systematic trading framework that identifies trend direction and key structural price levels for entry and exit decisions. The system uses a volatility-adaptive trend detection mechanism built on Hull Moving Averages with ATR-based bands to filter consolidation periods and isolate directional moves.
The liquidity detection engine identifies potential reversal zones by marking swing highs and lows that meet statistical significance thresholds. These zones represent areas where institutional order flow previously caused price rejection. Zones remain active until price closes through them, indicating mitigation of the level.
This implementation is an enhanced derivative of the original system with fully automated risk management. Stop losses are calculated using ATR multiples with entry candle wick protection as a minimum threshold, while take profits maintain a fixed 3:1 risk-reward ratio. An additional exit mechanism closes profitable positions when price reaches opposing supply or demand zones, providing early profit-taking at probable reversal points before full target completion.
Entry signals generate only on trend changes when volume exceeds average levels, reducing false breakouts in ranging conditions. The system includes complete position tracking with three distinct exit types: take profit hits, stop loss hits, and profitable zone contact exits. All calculations use confirmed historical data with no forward-looking bias, though supply/demand zone identification operates with a confirmation lag inherent to pivot point detection.
Combined Suite - Mxwll + UT Bot + Hull + FVG + OB + FiboCombined Suite - Mxwll + UT Bot + Hull + FVG + OB + Fibo
Helix Protocol 7 v2Helix Protocol 7 - Cascade Protection Update
Overview
This update adds Cascade Protection to Helix Protocol 7, a dual-layer defense system designed to prevent capital destruction during violent market crashes and cascading liquidation events. Mean reversion strategies are vulnerable to "catching falling knives" - buying repeatedly into a crash that keeps crashing. These protections intelligently pause buying during extreme volatility while preserving the ability to capture true bottom entries.
New Features
🛡️ Protection 1: BBWP Volatility Freeze
What it does: Monitors Bollinger Band Width Percentile (BBWP) to detect extreme volatility spikes. When BBWP exceeds the threshold (default 92%), ALL buy signals are frozen until volatility subsides.
Why it matters: During cascading liquidations (like BTC dropping from $92K to $84K in hours), BBWP spikes to extreme levels. These are precisely the moments when mean reversion buys are most dangerous. The freeze prevents buying during the chaos, then automatically unlocks when BBWP drops - allowing you to catch the actual bottom rather than averaging into a falling knife.
Settings:
BBWP Length: 7 (matches The_Caretaker's indicator)
BBWP Lookback: 100 (matches The_Caretaker's indicator)
BBWP Freeze Level: 92% (adjustable)
🛡️ Protection 2: Consecutive Buy Counter
What it does: Tracks how many buy signals have fired without an intervening sell. After reaching the maximum (default 3), additional buys are blocked until a sell signal fires and resets the counter.
Why it matters: Even after BBWP drops, a bounce might fail and continue lower. The counter ensures you can't infinitely average down into a position. It caps your exposure at 3 entries, preserving capital for better opportunities.
Settings:
Max Consecutive Buys: 3 (adjustable)
How The Protections Work Together
Buy Condition Triggered
↓
BBWP ≤ 92%? ──NO──→ ❌ BUY BLOCKED (Volatility Freeze)
↓ YES
Counter < 3? ──NO──→ ❌ BUY BLOCKED (Max Buys Reached)
↓ YES
✅ BUY SIGNAL FIRES
Counter increments (1/3 → 2/3 → 3/3)
Sell Signal Fires
↓
Counter resets to 0/3
Key Design Decision: BBWP freeze is absolute - even "EXTREME" band penetration signals cannot bypass it. This prevents the false confidence of "it's so oversold, it MUST bounce" during true market panics.
Sells are never affected by cascade protection. You always want the ability to exit positions and lock in profits during volatile rallies.
Panel Display
Two new rows in the info panel show real-time protection status:
RowExampleMeaningBBWP 87.3%OK (green)Buys allowedBBWP 94.2%FROZEN (red)Buys blockedBuy Counter2/3 (green)2 buys fired, 1 remainingBuy Counter3/3 (red)Max reached, buys blocked
Buy signal labels now display the counter: BUY: $86,360.43 CAPITULATION
New Alerts
⚠️ BBWP Freeze Activated: "CASCADE PROTECTION: BBWP hit 94.2% - Buys FROZEN"
⚠️ Max Buys Reached: "CASCADE PROTECTION: Max 3 consecutive buys reached - Buys FROZEN"
✅ BBWP Unlocked: "CASCADE PROTECTION: BBWP dropped to 88.1% - Buys UNLOCKED"
Alert JSON now includes consec_buys and bbwp fields for bot logging.
Real-World Performance
November 30 - December 1, 2025 BTC Cascade ($92K → $84K):
Without ProtectionWith Protection8+ buys during crash0 buys during crashAveraged down from $92KWaited for BBWP to dropDeep unrealized loss3 buys near $85-87K bottomCapital depletedCapital preserved
The protection blocked all panic buys during the BBWP >92% spike, then allowed exactly 3 well-timed entries after volatility subsided - capturing the actual bottom instead of the falling knife.
Configuration Recommendations
Market ConditionBBWP FreezeMax BuysStandard (default)92%3Conservative88%2Aggressive95%4
Lower BBWP threshold = More protection, may miss some entries
Higher Max Buys = More averaging allowed, higher risk
Compatibility
Bot Integration: No changes required. Protection logic executes before alerts fire.
Existing Alerts: Must delete and recreate alerts after updating indicator.
The_Caretaker's BBWP: Settings matched to ensure visual consistency between indicators.
Credits
BBWP concept and implementation inspired by The_Caretaker's Bollinger Band Width Percentile indicator. Cascade protection logic developed through analysis of November 2025 BTC market crashes.
Sima-Smart Money Concepts + RSI CandlestickThis indicator displays the RSI in a candlestick format and marks its support and resistance levels, as well as oversold and overbought zones based on Smart Money concepts.
In fact, this indicator is a combination of a candlestick-style RSI and a Smart Money indicator.
Impulse Trend Suite (LITE) — V1.4+ Plu🚀 Impulse Trend Suite (LITE) — v1.4+
Smart trend visualization with precise flip arrows. A lightweight, momentum-filtered trend tool designed to stay clean, avoid repeated signals, and keep you focused only on real market direction.
FULL PRO VERSION --> fxsharerobots.com
✨ What’s New in v1.4+
Minor upgrades mostly visual
Added Blue fill between MA lines
clearer labels
📌 Core Features
Trend flip arrows (no spam, 1 signal per turn)
Continuous background zones (gap-free trend shading)
Adaptive Baseline + ATR structure channel
RSI + MACD momentum filter (suppresses weak signals)
Trend Status Panel (UP, DOWN, NEUTRAL)
🔍 Quick Guide
BUY setup = green arrow + green background
SELL setup = red arrow + red background
Stay in the move while color doesn’t change
ATR channel helps avoid chasing overextended candles
🆚 LITE vs PRO
========================================================
Feature LITE PRO
--------------------- -------- ------------------------------
Trend shading + arrows ✔ ✔ + confirmations
Neutral trend state ✔ ✔ enhanced
Alerts ✖ ✔ full suite
Reversal Zones ✖ ✔ predictive boxes
HTF Filter ✖ ✔ smarter trend bias
Included strategies ✖ ✔ + PDF training
🔓 Upgrade to PRO
Reversal Zones • Alerts • HTF Filter • Trend Continuation Strategy
👉 FULL PRO VERSION --> fxsharerobots.com
📈 Works on Forex, Stocks, Crypto, Indices, Metals
⌚ Scalping • Intraday • Swing • Long-term
==========================================================
🌠FULL PRO VERSION --> fxsharerobots.com/impulse-trend-pro/
💾 ALL DOWNLOADS --> fxsharerobots.com/downloads/
Happy trading! — FxShareRobots Team
Price Action Signals Filtered +EMA🚀 Price Action Signals Filtered + EMA (Dual Confirmation)
💡 Indicator Overview
This indicator is a powerful tool designed to identify potential trend reversals or continuations using Price Action Pivot signals, but it filters them with an Exponential Moving Average (EMA) to ensure dual confirmation.
The indicator's purpose is to generate signals only when a Price Action confirmation aligns with a confirmed market trend (above or below the EMA), thereby reducing noise and increasing signal reliability.
✨ Key Features and Logic
1. Price Action (Pivot) Detection
The indicator automatically detects local low (Pivot Low) and local high (Pivot High) points.
Pivot Low: A potential market bottom.
Pivot High: A potential market top.
2. Price Action Confirmation
After a Pivot is detected, the indicator waits for subsequent confirmation from the closing prices of the candles:
Bullish Confirmation: After a Pivot Low, the indicator requires N consecutive candles (where N is defined in the settings) to close above the previous candle's close. This indicates buying pressure.
**Bearish Confirmation: After a Pivot High, the indicator requires N consecutive candles to close below the previous candle's close. This indicates selling pressure.
3. Trend Filter (EMA) - Dual Confirmation! 🎯
This is the critical component. A confirmed Price Action signal must align with the trend defined by the Exponential Moving Average (EMA):
Bullish Signal (Buy): Generated ONLY if the Bullish Price Action Confirmation occurs while the price (Close) is ABOVE the EMA (default 20 periods).
Bearish Signal (Sell): Generated ONLY if the Bearish Price Action Confirmation occurs while the price (Close) is BELOW the EMA.
This serves as a dual confirmation, ensuring the signal is captured in the direction of the broader market trend.
📈 How to Use
Look for the Signal: Wait for the shape (triangle, circle, or arrow) to appear on the chart.
Verify Confirmation: Know that the signal has already passed through the dual filter: Price Action and EMA.
Bullish signals appear below the bar when the price is ABOVE the EMA.
Bearish signals appear above the bar when the price is BELOW the EMA.
Risk Management: Always use this indicator in combination with your risk management strategy and technical analysis.
📝 Additional Notes
The indicator uses barstate.isconfirmed to accurately plot signals on the candle close.
The EMA line is also plotted on the chart for visual trend verification.
This indicator is a tool only and does not constitute financial advice. Always perform your own analysis and research.
Structure Analysis + Hammer Alert# Structure Resistance + Hammer Alert
## 📊 Indicator Overview
This indicator integrates Structure Breakout Analysis with Candlestick Pattern Recognition, helping traders identify market trend reversal points and strong momentum signals. Through visual markers and background colors, you can quickly grasp the bullish/bearish market structure.
---
## 🎯 Core Features
### 1️⃣ Structure Resistance System
- Auto-plot Previous High/Low: Automatically marks key support/resistance based on pivot points
- Structure Breakout Detection: Shows "BULL" when price breaks above previous high, "BEAR" when breaking below previous low
- Trend Background Color: Green background for bullish structure, red background for bearish structure
### 2️⃣ Bullish Momentum Candles (Hammer Patterns)
Detects candles with long lower shadows, indicating strong buying pressure at lows:
- 💪Strong Bull (Bullish Hammer): Green marker, bullish close with significant lower shadow
- 💪Weak Bull (Bearish Hammer): Teal marker, bearish close but strong lower shadow
### 3️⃣ Bearish Momentum Candles (Inverted Hammer/Shooting Star)
Detects candles with long upper shadows, indicating strong selling pressure at highs:
- 💪Weak Bear (Bullish Inverted Hammer): Orange marker, bullish close but significant upper shadow
- 💪Strong Bear (Shooting Star): Red marker, bearish close with significant upper shadow
### 4️⃣ Smart Marker Sizing
Markers automatically adjust size based on current trend:
- With-Trend Signals: Larger markers (e.g., hammer in bullish trend)
- Counter-Trend Signals: Smaller markers (e.g., shooting star in bullish trend)
- Neutral Trend: Medium-sized markers
---
## ⚙️ Parameter Settings
### Structure Resistance Parameters
- Swing Length: Default 5, higher values = clearer structure but fewer signals
- Show Lines/Labels: Toggle on/off options
### Bullish Momentum (Hammer) Parameters
- Lower Shadow/Body Ratio: Default 2.0, lower shadow must be 2x body size
- Upper Shadow/Body Ratio Limit: Default 0.2, upper shadow cannot be too long
- Body Position Ratio: Default 2.0, ensures body is at the top of candle
### Bearish Momentum (Inverted Hammer) Parameters
- Upper Shadow/Body Ratio: Default 2.0, upper shadow must be 2x body size
- Lower Shadow/Body Ratio Limit: Default 0.2, lower shadow cannot be too long
- Body Position Ratio: Default 2.0, ensures body is at the bottom of candle
### Filter & Display Settings
- Minimum Body Size: Filters out doji-like candles with tiny bodies
- Pattern Type Toggles: Show/hide different pattern types individually
- Background Transparency: Adjust background color intensity (higher = more transparent)
- Label Distance: Adjust marker distance from candles
---
## 📈 Usage Guidelines
### Trading Signal Interpretation
**Long Signals (Strongest to Weakest):**
1. Bullish Structure + Bullish Hammer (💪Strong Bull) → Strongest long signal
2. Bullish Structure + Bearish Hammer (💪Weak Bull) → Secondary long signal
3. Bearish Structure + Hammer → Potential reversal signal
**Short Signals (Strongest to Weakest):**
1. Bearish Structure + Shooting Star (💪Strong Bear) → Strongest short signal
2. Bearish Structure + Bullish Inverted Hammer (💪Weak Bear) → Secondary short signal
3. Bullish Structure + Shooting Star → Potential reversal signal
### Practical Tips
✅ Trend Following: Prioritize large marker signals (aligned with trend)
✅ Structure Confirmation: Wait for structure breakout before entry to avoid false breaks
✅ Multiple Timeframes: Confirm trend direction with higher timeframes
⚠️ Counter-Trend Caution: Small marker signals (counter-trend) require stricter risk management
---
## 🔔 Alert Setup
This indicator provides 9 alert conditions:
- Individual Patterns: Bullish Hammer, Bearish Hammer, Bullish Inverted Hammer, Shooting Star
- Combined Signals: Bullish Momentum, Bearish Momentum, Bull/Bear Momentum
- Structure Breakouts: Bullish Structure Break, Bearish Structure Break
---
## 💡 FAQ
**Q: Why do hammers sometimes appear without markers?**
A: Check "Minimum Body Size" setting - the candle body may be too small and filtered out
**Q: Too many or too few markers?**
A: Adjust "Lower Shadow/Body Ratio" or "Upper Shadow/Body Ratio" parameters - higher ratios = stricter conditions
**Q: How to see only the strongest signals?**
A: Disable "Bearish Hammer" and "Bullish Inverted Hammer", keep only "Bullish Hammer" and "Shooting Star"
**Q: Can it be used on all timeframes?**
A: Yes, but recommended for 15-minute and higher timeframes - shorter timeframes have more noise
---
## 📝 Disclaimer
⚠️ This indicator is a supplementary tool and should be used with other technical analysis methods
⚠️ Past performance does not guarantee future results - always practice proper risk management
⚠️ Recommended to test on demo account before live trading
---
**Version:** Pine Script v6
**Applicable Markets:** Stocks, Futures, Cryptocurrencies, and all markets
Linear Trajectory & Volume StructureThe Linear Trajectory & Volume Structure indicator is a comprehensive trend-following system designed to identify market direction, volatility-adjusted channels, and high-probability entry points. Unlike standard Moving Averages, this tool utilizes Linear Regression logic to calculate the "best fit" trajectory of price, encased within volatility bands (ATR) to filter out market noise.
It integrates three core analytical components into a single interface:
Trend Engine: A Linear Regression Curve to determine the mean trajectory.
Volume Verification: Filters signals to ensure price movement is backed by market participation.
Market Structure: Identifies previous high-volume supply and demand zones for support and resistance analysis.
2. Core Components and Logic
The Trajectory Engine
The backbone of the system is a Linear Regression calculation. This statistical method fits a straight line through recent price data points to determine the current slope and direction.
The Baseline: Represents the "fair value" or mean trajectory of the asset.
The Cloud: Calculated using Average True Range (ATR). It expands during high volatility and contracts during consolidation.
Trend Definition:
Bullish: Price breaks above the Upper Deviation Band.
Bearish: Price breaks below the Lower Deviation Band.
Neutral/Chop: Price remains inside the cloud.
Smart Volume Filter
The indicator includes a toggleable volume filter. When enabled, the script calculates a Simple Moving Average (SMA) of the volume.
High Volume: Current volume is greater than the Volume SMA.
Signal Validation: Reversal signals and structure zones are only generated if High Volume is present, reducing the likelihood of trading false breakouts on low liquidity.
Volume Structure (Smart Liquidity)
The script automatically plots Support (Demand) and Resistance (Supply) boxes based on pivot points.
Creation: A box is drawn only if a pivot high or low is formed with High Volume (if the volume filter is active).
Mitigation: The boxes extend to the right. If price breaks through a zone, the box turns gray to indicate the level has been breached.
3. Signal Guide
Trend Reversals (Buy/Sell Labels)
These are the primary signals indicating a potential change in the macro trend.
BUY Signal: Appears when price closes above the upper volatility band after previously being in a downtrend.
SELL Signal: Appears when price closes below the lower volatility band after previously being in an uptrend.
Pullbacks (Small Circles)
These are continuation signals, useful for adding to positions or entering an existing trend.
Long Pullback: The trend is Bullish, but price dips momentarily below the baseline (into the "discount" area) and closes back above it.
Short Pullback: The trend is Bearish, but price rallies momentarily above the baseline (into the "premium" area) and closes back below it.
4. Configuration and Settings
Trend Engine Settings
Trajectory Length: The lookback period for the Linear Regression. This is the most critical setting for tuning sensitivity.
Channel Multiplier: Controls the width of the cloud.
1.0: Aggressive. Results in narrower bands and earlier signals, but more false positives.
1.5: Balanced (Default).
2.0+: Conservative. Creates a wide channel, filtering out significant noise but delaying entry signals.
Signal Logic
Show Trend Reversals: Toggles the main Buy/Sell labels.
Show Pullbacks: Toggles the re-entry circle signals.
Smart Volume Filter: If checked, signals require above-average volume. Unchecking this yields more signals but removes the volume confirmation requirement.
Volume Structure
Show Smart Liquidity: Toggles the Support/Resistance boxes.
Structure Lookback: Defines how many bars constitute a pivot. Higher numbers identify only major market structures.
Max Active Zones: Limits the number of boxes on the chart to prevent clutter.
5. Timeframe Optimization Guide
To maximize the effectiveness of the Linear Trajectory, you must adjust the Trajectory Length input based on your trading style and timeframe.
Scalping (1-Minute to 5-Minute Charts)
Recommended Length: 20 to 30
Multiplier: 1.2 to 1.5
Logic: Fast-moving markets require a shorter lookback to react quickly to micro-trend changes.
Day Trading (15-Minute to 1-Hour Charts)
Recommended Length: 55 (Default)
Multiplier: 1.5
Logic: A balance between responsiveness and noise filtering. The default setting of 55 is standard for identifying intraday sessions.
Swing Trading (4-Hour to Daily Charts)
Recommended Length: 89 to 100
Multiplier: 1.8 to 2.0
Logic: Swing trading requires filtering out intraday noise. A longer length ensures you stay in the trade during minor retracements.
6. Dashboard (HUD) Interpretation
The Head-Up Display (HUD) provides a summary of the current market state without needing to analyze the chart visually.
Bias: Displays the current trend direction (BULLISH or BEARISH).
Momentum:
ACCELERATING: Price is moving away from the baseline (strong trend).
WEAKENING: Price is compressing toward the baseline (potential consolidation or reversal).
Volume: Indicates if the current candle's volume is HIGH or LOW relative to the average.
Disclaimer
*Trading cryptocurrencies, stocks, forex, and other financial instruments involves a high level of risk and may not be suitable for all investors. This indicator is a technical analysis tool provided for educational and informational purposes only. It does not constitute financial advice, investment recommendations, or a guarantee of profit. Past performance of any trading system or methodology is not necessarily indicative of future results.
SPX-to-ES Gamma Levels (20 GEX Levels)Draws GEX levels specified by user on ES futures chart.
User inputs SPX-to-ES offset, SPX price level, and length of box






















