Levels S/R Boxes + Gaps + SL/TPWhat It Does:
Automatically identifies and displays:
🟦 Support/Resistance zones (horizontal boxes)
🟨 Price gaps (unfilled gaps from market open/close)
🎯 Stop Loss levels (where to protect trades)
💰 Take Profit levels (where to exit trades)
Purpose: Shows you exactly where price is likely to bounce, reverse, or break through.
Best Practices:
✅ Trade at the boxes - Don't chase price
✅ Use SL/TP lines - Automatic risk management
✅ Wait for confirmation - Candle pattern + S/R level
✅ Gaps get filled - Trade towards yellow boxes
✅ Solid lines = stronger - Prefer 3+ touch levels
❌ Don't ignore SL - Always protect yourself
❌ Don't trade middle - Wait for S/R zones
❌ Don't fight strong levels - Respect solid boxes
Settings (Quick Reference):
S/R Strength: 10 (default) - Lower = more levels, Higher = fewer stronger levels
Max Levels: 5 (default) - Number of S/R boxes to show
Show Gaps: ON - Display yellow gap boxes
Show SL/TP: ON - Display entry/exit suggestions
Bantlar ve Kanallar
rahulp33It is a 15-min high-low for the day; this will help the fellow chartist understand a trend emerging for the day. This indicator, along with others, gives a general sense of the daily trend, but it's not the sole factor to consider.
rahulpatkiIt is a 15-min high-low for the day; this will help the fellow chartist understand a trend emerging for the day. This indicator, along with others, provides a general idea of the daily trend, but it is not the only one to consider.
Multi-Timeframe Opening RangeMulti Time frame range created to find trends and look for blocks of time in which the market is most likely to pivot.
Also assists in finding trends more easily highs and lows.
Take bounces and rejections off the boxes it works well.
MA Crossover20 Ema
200 Day Crossover
Marks Death and Golden Cross
Useful for longterm time frames and finding trends.
Can be used for intraday scalping but advised to be used with price action and other indicators like Williams %R or VWAP.
SymFlex Band - MAD, RSI, ATRThe SymFlex Band is an adaptive volatility and momentum framework that merges
three independent band models into a unified analytical tool.
• The MAD Band measures deviation from the moving average using Median Absolute Deviation,
providing a stable view of range-based volatility.
• The RSI Momentum Band adjusts its upper and lower boundaries asymmetrically,
expanding in the direction of momentum and contracting against it.
• The ATR Band captures classical volatility expansion for breakout and trend-continuation conditions.
Rather than placing the three indicators separately on a chart, the script synchronizes
their center-line logic, compares their band distances, identifies the nearest active band,
and displays real-time correlation between their dynamic ranges.
This structure helps traders understand whether price behavior is dominated by
range compression, momentum imbalance, or volatility expansion.
The table summarizes:
• active band ranges
• breakout status
• distance from each band
• cross-band correlation
This indicator is designed purely for analysis. It does not generate trade entries.
ATR Based TMA Bands [NeuraAlgo]ATR-Based TMA Bands
ATR-Based TMA Bands is a volatility-adaptive channel system built around a smoothed Triangular Moving Average (TMA).
It identifies trend direction, momentum shifts, and reversal opportunities using a combination of TMA structure and ATR-driven channel expansion.
Perfect for traders who want a clean, intelligent, and adaptive market framework.
Made by NeuraAlgo.
🔷 How It Works
1. 🔹 TMA Midline (Core Trend)
The indicator builds a smooth and stable midline using:
📐 Triangular Moving Average
🔄 Additional EMA smoothing
This creates a low-noise trend curve that reacts cleanly to real momentum changes.
2. 📈 Volatility-Adjusted Bands
The channels are built from:
📊 Standard Deviation × Expansion Multiplier
📏 Three ATR-based outer layers
These bands:
Expand in high volatility
Contract in stable markets
Reveal pullbacks, breakout zones, and exhaustion points
3. 🔁 Trend Tilt Algorithm
Slope is measured using an ATR-normalized tilt formula:
atrBase = ta.atr(smoothLen)
tilt = (midline - midline ) / (0.1 * atrBase)
This classifies the trend into:
Bullish
Bearish
Neutral
The bar colors and midline adjust automatically to match market direction.
4. 🔄 Reversal Detection (Turn Signals)
The indicator flags directional flips:
Turn Up → bearish → bullish shift
Turn Down → bullish → bearish shift
These are early reversal alerts ideal for swing traders.
5. 🎯 Flip Buy / Flip Sell Signals
Deep volatility extensions create high-probability re-entry zones:
Flip Buy → price rebounds from oversold ATR zone
Flip Sell → price rejects from overbought ATR zone
Great for:
Mean-reversion entries
Trend re-tests
Pullback trades
Exhaustion signals
📌 How to Use This Indicator
✔ Trend Trading
Follow trend using tilt-colored candles
Use midline as dynamic trend filter
Use channels for breakout/pullback entries
✔ Reversal Trading
Watch for Turn Up / Turn Down labels
Flip signals show where the market is over-stretched
✔ Risk Management
ATR channels automatically adjust to volatility
Helps with smarter SL/TP placement
⭐ Best For
Trend traders
Swing traders
Reversal hunters
Volatility lovers
Anyone wanting a smart, clean technical framework
💡 Core Features
TMA-smoothed trend detection
Multi-layer ATR expansion channels
Intelligent trend tilt algorithm
Turn Up / Turn Down reversal markers
Flip Buy / Flip Sell exhaustion signals
Adaptive bar coloring
Clean and professional visual design
CIHAN SCALP PRO v3 ELITEI’m sharing a testable scalping strategy:
When you see a Long or Short signal, you can open a position without waiting for the candle to close and take quick profits with a short TP.
But the real game-changer is coming soon!
The Professional Scalping System I’ve been working on, with 85%+ accuracy, is almost ready.
This system is fully mechanical — no analysis needed, it instantly catches momentum and trend shifts.
It will be available soon with a small monthly subscription fee.
Stay tuned!
Follow BreakoutThe indicator tracks trend breakouts. It generates multiple signals during sideways trends.
SNP420/INDI/support_resist_future_levelFunctionality – short description
The indicator automatically detects the latest pivot highs/lows and builds the current resistance and support levels from them. New levels start as candidate levels (dotted lines).
Using an ATR-based tolerance, it counts how many times price precisely tests and rejects the level (touch + reversal).
Once the minimum number of touches is reached, the level is marked as validated (solid line). The indicator also detects breakouts of S/R, colors breakout candles, projects a target level after the breakout, and highlights retests of the broken levels with boxes.
autor: SNP_420
project: FNXS
ps: Piece a love
21 & 55 EMA CloudWhenever prices goes inside the cloud and comes out
Entry: After coming out of the 21-55 EMA Cloud in uptrend
Confirm with CPR and support/resistance, breakout of resistance is good sign.
Stop loss is previous swing low.
Success Rate will be good
CTO Line Advanced CloneThis is what I think CTO Larsson is using for his CTO Line Indicator
Use at your own risk
Adaptive Trend Mapper-ATM (Arjo)Adaptive Trend Mapper (ATM) is a multi-factor trend, momentum, and compression-analysis tool designed to help traders visually map the strength and direction of market pressure.
Instead of simply combining existing indicators, ATM creates a new composite framework that blends momentum imbalance, directional strength, volatility contraction, and adaptive smoothing into a single, unified model.
Originality and usefulness
Adaptive Trend Mapper (ATM) does not replicate any one indicator.
It generates two custom indices— Bull Pressure Index and Bear Pressure Index —derived from a mathematical combination of RSI, inverse-RSI, and ADX. These indices behave differently from traditional oscillators:
They represent directional pressure on a 0–100 scale , not momentum.
They are designed to converge/diverge, forming a basis for the built-in Squeeze Detection Engine.
They can be optionally step-compressed , making the movement easier to read on fast or small charts.
The script also integrates a custom SuperSmoother trend model (not TradingView’s built-in function), which acts as an adaptive trend curve on the chart.
All calculations are combined intentionally—not as a mashup—to create a framework that allows traders to understand trend strength, compression phases, and micro-trend shifts in one place.
How the Indicator Works
1. Bull & Bear Pressure Indices:
These indices measure directional imbalance:
Bull Index = ADX strength weighted against inverse-RSI
Bear Index = ADX strength weighted against normal RSI
This produces two opposing pressure curves that rise or fall depending on whether buyers or sellers dominate.
You can optionally smooth these using:
SMA / EMA / WMA / RMA via the “Smoothing Settings” panel.
2. Squeeze & Compression Detection:
A squeeze is detected when:
ADX stays below a user-defined threshold
Bull–Bear Index difference shrinks
Average difference is falling (convergence)
This is a volatility-contraction model inspired by squeeze logic but applied to directional pressure, not Bollinger Bands/Keltner Channels .
3. Adaptive Trend Curve (SuperSmoother Engine)
The indicator applies a two-pole SuperSmoother filter to the price, then smooths it again using EMA.
The slope color flips between bullish and bearish and is displayed using:
A thin SuperSmoother curve
A thicker band for visual context
4. EMA-50 Trend Context:
An optional EMA-50 helps identify broad directional bias .
5. Step-Based Scaling
You can quantize the Bull/Bear indices using custom step intervals.
This makes the indicator easier to read on noisy intraday charts.
How to Use the Indicator
1. Trend Analysis
A rising Bull Index shows strengthening upward pressure
A rising Bear Index shows strengthening downward pressure
Wide divergence between the indices signals a strong trend
2. Compression / Squeeze Analysis
Yellow background = volatility compression + pressure convergence
Breakouts from this zone often precede directional expansion
3. Trendline Reading
SuperSmoother line color flip = micro trend shift
EMA-50 slope gives macro-trend direction
Perfect for combining trend and momentum maps on the same chart
4. Visual Interpretation
Cyan/teal → strong bullish pressure
Purple/red/orange → various levels of bearish control
Neutral/teal background → weak ADX
Yellow background → squeeze zone
Open-Source Notes
This script uses:
TradingView built-in RSI, ADX/DMI, and smoothing functions
A SuperSmoother implementation based on known DSP filter coefficients
All remaining logic, signal methods, composite indices, and compression model are original developments by ARJO .
The script is published open-source to comply with TradingView’s reuse policy.
Disclaimer
This tool is for educational and analytical purposes only.
It does not generate buy or sell signals.
Always use proper risk management.
Happy Trading (ARJO)
Advanced Bitcoin Cycle Detector with Projections & Hursttest script created with openrouter adn google gemmi 3
stock whisperersdfasow, why your line.new failed:
If Pine isn’t exactly v5, TradingView treats line like it doesn’t exist and throws “undeclared identifier”. That’s what you saw.
If you still want the fancy extending lines instead of plots, I can give you a version that forces Pine v5. But this one already does what you asked:
Shows the levels on top of candles, not in a lower pane.
Copy. Paste. Add. Done.
If it still breaks, the issue is your TradingView editor, not the code.
Micha Stokes Buyers Breakout Alert v2I added comments starts with EE , where code modifications are needed
Low Volatility Profiles [BigBeluga]🔵 OVERVIEW
Low Volatility Profiles is a market compression and breakout-anticipation tool that identifies phases of low volatility using ADX and then builds a real-time volume profile inside the detected range.
This helps traders spot accumulation/distribution zones and prepare for explosive moves when volatility expands.
When volatility is low ➜ price coils ➜ volume organizes ➜ breakouts become highly actionable.
This tool visualizes that process with dynamic range boxes + volume bins + PoC extension.
🔵 CONCEPTS
Low-Volatility Detection — Uses ADX threshold & cross logic to define volatility contraction regimes.
Range Construction — Draws a price box that expands with highs/lows during the compression phase.
Micro Volume Profile — Builds a volume histogram inside the range using bins (micro volume nodes).
Delta Calculation — Tracks positive vs negative volume to gauge buyer/seller pressure within range.
Point of Control (PoC) — Highlights the price level with max traded volume inside the range.
PoC Extension — Optionally extends PoC into future bars to show potential reaction zone after breakout.
Breakout Validation — Ends the profile zone when price breaks above or below the modeled range.
Noise Removal — Automatically removes invalid or small ranges to prevent chart clutter.
This tool turns consolidation into actionable structure by exposing where smart money accumulates before trending moves.
🔵 FEATURES
ADX-Driven Range Detection — Identify when market transitions into low-volatility compression.
Configurable ADX Threshold — Set sensitivity for contraction zones.
Cross-Type Option — Detect low volatility via cross under / crossover logic.
Dynamic Range Box — Expands live with price as contraction unfolds.
Micro Volume Profile (Bins) — Distributes volume across bins inside range for micro POC mapping.
Volume Delta Visualization — Shows imbalance inside consolidation (accumulation vs distribution).
Real-Time PoC Highlight — Instantly shows most traded price inside the compression.
PoC Extension Mode — Extend PoC forward to project reaction levels post-breakout.
Clean Auto-Reset Logic — Removes boxes if range invalid or breakout occurs too fast.
Optional Filled Boxes — Heatmap-style profile visualization inside range body.
ADX Line + Threshold Plot — Visual assistance for volatility state monitoring.
🔵 HOW TO USE
Identify Accumulation Zones — When price enters low-volatility ADX condition and profile builds.
Watch the PoC — PoC acts as battle zone; move above/below can signal initiator strength.
Breakout Strategy — Trade break above/below the range after compression.
Mean Reversion Inside Range — Fade edges while price remains inside compression box.
Combine With Trend Tools — Use trend confirmation (MA/EMA/Flow indicators) after breakout.
Use Delta Clues — Positive delta tilt suggests accumulation; negative suggests distribution.
Monitor Range Size — Longer build + high PoC volume = stronger potential breakout energy.
🔵 CONCLUSION
Low Volatility Profiles isolates accumulation phases and maps volume concentration before volatility expansion.
By combining ADX compression, micro volume distribution, and PoC tracing, traders gain an edge in anticipating powerful breakout cycles and institutional positioning.
Trade the quiet moment before the storm — where smart money prepares the move, and the real opportunity emerges.
DeepClean Linear indicator 1. Indicator Name
DeepClean Linear indicator
2. One-Line Introduction
A trend-recognition indicator that overlays a “transparent wave” on price, removing noise and revealing directional bias and trend intensity in a highly intuitive visual form.
3. Overall Summary
The DeepClean Linear indicator calculates trend direction using changes in linear regression slope and determines trend strength by comparing how consistently the regression line moves over a defined lookback window.
Rather than merely identifying trend direction, the indicator applies a triple-layer noise-filtering process (EMA → SMA → RMA) to produce a clean, wave-shaped data line that filters out unnecessary market noise.
This transparent wave sits directly on top of price, allowing traders to visually compare price movement and trend strength at the same time.
A stronger trend results in a taller, thicker wave, while weakening momentum causes the wave to thin, making it easier to spot trend continuation, exhaustion, or upcoming reversal.
Color automatically shifts based on trend:
Bright cyan/teal during bullish conditions
Reddish tones during bearish conditions
Transparency dynamically adjusts depending on strength
The indicator excels at identifying the true underlying trend by ignoring minor fluctuations and is well suited for scalping, swing trading, and position trading.
It also significantly reduces false signals in ranging markets, making it ideal for trend-following strategies.
4. Advantages
① Ultra-Clean Noise-Reduced Wave
Utilizes a 3-stage smoothing filter (EMA → SMA → RMA) to produce a much cleaner wave than standard moving averages, highlighting only core trend movement.
② Trend Direction & Strength at a Glance
Based on comparative linear regression behavior, the indicator quantifies both direction and strength, making convergence/divergence highly visible.
③ Intuitive Price Overlay Visualization
The semi-transparent wave sits directly on price action, allowing traders to instantly see divergence from price, trend weakening, or early turning points.
④ Dynamic Transparency Coloring
Strong trends appear bold and intense, while weaker trends fade visually—making signal interpretation effortless.
⑤ Excellent Range Filtering
During low-direction phases (state = 0), the wave turns neutral, preventing forced or premature entries.
⑥ Multi-Timeframe Compatibility
The wave remains stable from 1-minute to weekly charts, making it suitable for trend analysis, execution, and risk control across all timeframes.
📌 Core Concept Overview
The indicator evaluates the relative comparison of linear regression values over the last n periods.
A positive trend value indicates bullish bias
A negative trend value indicates bearish bias
Intensity represents strength and controls wave height
waveTop / waveBot define the visual wave area relative to price
State Values
1 = Bullish Trend
-1 = Bearish Trend
0 = Neutral / Weak Direction
⚙️ Settings Overview
Option Description
Trend Lookback (n) Comparison window for regression slope. Higher = bigger trend focus.
Range Tolerance (%) Strength threshold to classify bullish/bearish movement. Higher = more conservative.
Source Price source for regression calculations.
Linear Reg Length Length of the linear regression.
Noise Filter Strength (smoothK) Controls the smoothing intensity. Higher = smoother wave.
Wave Amplitude (amp) Adjusts the height/thickness of the wave.
Bull/Bear Color Colors for bullish/bearish waves.
Base Transparency Base opacity level; modified dynamically by trend strength.
📈 Bullish Timing Recognition Examples
Wave begins turning brighter teal and more opaque, indicating strengthening upward pressure.
waveTop expands above price, signaling early trend expansion.
State flips to 1, often marking a trend restart or early reversal phase.
A steadily rising wave height suggests sustained bullish momentum.
📉 Bearish Timing Recognition Examples
Wave shifts into red tones, showing bearish dominance.
waveBot expands below price, indicating rising downside volatility.
State stays at -1 while intensity increases, signaling entry into strong downtrend conditions.
A shift from weak → strong bearish intensity can provide short-entry timing cues.
🧪 Recommended Usage
Use as a core component in trend-following systems
Adjust position size based on wave thickness (trend strength)
Combine with RSI/MACD to reduce false signals during overbought/oversold zones
Sudden wave expansion during volatility increases helps detect trend acceleration
In sideways markets, frequent state = 0 readings help avoid low-probability trades
🔒 Important Notes
As a trend-based indicator, it may misread choppy/ranging markets
Because of smoothing, signals may appear slightly delayed
Extreme news volatility can temporarily distort trend clarity
Sideways & Breakout Detector + Forecast//@version=6
indicator("Sideways & Breakout Detector + Forecast", overlay=true, max_labels_count=500)
// Inputs
lengthATR = input.int(20, "ATR Länge")
lengthMA = input.int(50, "Trend MA Länge")
sqFactor = input.float(1.2, "Seitwärtsfaktor")
brkFactor = input.float(1.5, "Breakoutfaktor")
// ATR / Volatilität
atr = ta.atr(lengthATR)
atrSMA = ta.sma(atr, lengthATR)
// Basislinie / Trend
basis = ta.sma(close, lengthATR)
trendMA = ta.sma(close, lengthMA)
// Seitwärtsbedingung
isSideways = atr < atrSMA * sqFactor
// Breakouts
upperBreak = close > basis + atr * brkFactor
lowerBreak = close < basis - atr * brkFactor
// Vorhergesagter Ausbruch (Forecast)
// Wenn Seitwärtsphase + Kurs nahe obere oder untere Kanalgrenze
forecastBull = isSideways and (close > basis + 0.5 * atr)
forecastBear = isSideways and (close < basis - 0.5 * atr)
// Farben
barcolor(isSideways ? color.new(color.yellow, 40) : na)
barcolor(upperBreak ? color.green : na)
barcolor(lowerBreak ? color.red : na)
// Breakout-Bänder
plot(basis + atr * brkFactor, "Bull Break Zone", color=color.new(color.green, 60))
plot(basis - atr * brkFactor, "Bear Break Zone", color=color.new(color.red, 60))
// Labels (klein)
if isSideways
label.new(bar_index, close, "Seitwärts", color=color.yellow, style=label.style_label_center, size=size.tiny)
if upperBreak
label.new(bar_index, high, "Bull Breakout", color=color.green, style=label.style_label_up, size=size.tiny)
if lowerBreak
label.new(bar_index, low, "Bear Breakout", color=color.red, style=label.style_label_down, size=size.tiny)
// Vorhergesagte Ausbrüche markieren
plotshape(forecastBull, title="Forecast Bull", location=location.abovebar, color=color.new(color.green, 0), style=shape.triangleup, size=size.tiny)
plotshape(forecastBear, title="Forecast Bear", location=location.belowbar, color=color.new(color.red, 0), style=shape.triangledown, size=size.tiny)
// Alerts
alertcondition(isSideways, "Seitwärtsphase", "Der Markt läuft seitwärts.")
alertcondition(upperBreak, "Bull Breakout", "Ausbruch nach oben!")
alertcondition(lowerBreak, "Bear Breakout", "Ausbruch nach unten!")
alertcondition(forecastBull, "Forecast Bull", "Voraussichtlicher Bull-Ausbruch!")
alertcondition(forecastBear, "Forecast Bear", "Voraussichtlicher Bear-Ausbruch!")
Sniper Entry AU - AYUSHThis indicator combines EMA 9, EMA 15, and VWAP to identify trend direction and intraday strength. EMA 9 and EMA 15 show short-term momentum and crossover signals, while VWAP acts as an institutional reference point for fair value. Together, they help traders spot trend continuation, pullbacks, and high-quality entry zones during intraday sessions.
لbsm15// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) creativecommons.org
// © LuxAlgo
//@version=5
indicator("لbsm15", overlay = true, max_lines_count = 500, max_boxes_count = 500, max_bars_back = 3000)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
liqGrp = 'Liquidity Detection'
liqLen = input.int (7, title = 'Detection Length', minval = 3, maxval = 13, inline = 'LIQ', group = liqGrp)
liqMar = 10 / input.float (6.9, 'Margin', minval = 4, maxval = 9, step = 0.1, inline = 'LIQ', group = liqGrp)
liqBuy = input.bool (true, 'Buyside Liquidity Zones, Margin', inline = 'Buyside', group = liqGrp)
marBuy = input.float(2.3, '', minval = 1.5, maxval = 10, step = .1, inline = 'Buyside', group = liqGrp)
cLIQ_B = input.color (color.new(#4caf50, 0), '', inline = 'Buyside', group = liqGrp)
liqSel = input.bool (true, 'Sellside Liquidity Zones, Margin', inline = 'Sellside', group = liqGrp)
marSel = input.float(2.3, '', minval = 1.5, maxval = 10, step = .1, inline = 'Sellside', group = liqGrp)
cLIQ_S = input.color (color.new(#f23645, 0), '', inline = 'Sellside', group = liqGrp)
lqVoid = input.bool (false, 'Liquidity Voids, Bullish', inline = 'void', group = liqGrp)
cLQV_B = input.color (color.new(#4caf50, 0), '', inline = 'void', group = liqGrp)
cLQV_S = input.color (color.new(#f23645, 0), 'Bearish', inline = 'void', group = liqGrp)
lqText = input.bool (false, 'Label', inline = 'void', group = liqGrp)
mode = input.string('Present', title = 'Mode', options = , inline = 'MOD', group = liqGrp)
visLiq = input.int (3, ' # Visible Levels', minval = 1, maxval = 50, inline = 'MOD', group = liqGrp)
//-----------------------------------------------------------------------------}
//General Calculations
//-----------------------------------------------------------------------------{
maxSize = 50
atr = ta.atr(10)
atr200 = ta.atr(200)
per = mode == 'Present' ? last_bar_index - bar_index <= 500 : true
//-----------------------------------------------------------------------------}
//User Defined Types
//-----------------------------------------------------------------------------{
// @type used to store pivot high/low data
//
// @field d (array) The array where the trend direction is to be maintained
// @field x (array) The array where the bar index value of pivot high/low is to be maintained
// @field y (array) The array where the price value of pivot high/low is to be maintained
type ZZ
int d
int x
float y
// @type bar properties with their values
//
// @field o (float) open price of the bar
// @field h (float) high price of the bar
// @field l (float) low price of the bar
// @field c (float) close price of the bar
// @field i (int) index of the bar
type bar
float o = open
float h = high
float l = low
float c = close
int i = bar_index
// @type liquidity object definition
//
// @field bx (box) box maitaing the liquity level margin extreme levels
// @field bxz (box) box maitaing the liquity zone margin extreme levels
// @field bxt (box) box maitaing the labels
// @field brZ (bool) mainains broken zone status
// @field brL (bool) mainains broken level status
// @field ln (line) maitaing the liquity level line
// @field lne (line) maitaing the liquity extended level line
type liq
box bx
box bxz
box bxt
bool brZ
bool brL
line ln
line lne
//-----------------------------------------------------------------------------}
//Variables
//-----------------------------------------------------------------------------{
var ZZ aZZ = ZZ.new(
array.new (maxSize, 0),
array.new (maxSize, 0),
array.new (maxSize, na)
)
bar b = bar.new()
var liq b_liq_B = array.new (1, liq.new(box(na), box(na), box(na), false, false, line(na), line(na)))
var liq b_liq_S = array.new (1, liq.new(box(na), box(na), box(na), false, false, line(na), line(na)))
var b_liq_V = array.new_box()
var int dir = na, var int x1 = na, var float y1 = na, var int x2 = na, var float y2 = na
//-----------------------------------------------------------------------------}
//Functions/methods
//-----------------------------------------------------------------------------{
// @function maintains arrays
// it prepends a `value` to the arrays and removes their oldest element at last position
// @param aZZ (UDT, array, array>) The UDT obejct of arrays
// @param _d (array) The array where the trend direction is maintained
// @param _x (array) The array where the bar index value of pivot high/low is maintained
// @param _y (array) The array where the price value of pivot high/low is maintained
//
// @returns none
method in_out(ZZ aZZ, int _d, int _x, float _y) =>
aZZ.d.unshift(_d), aZZ.x.unshift(_x), aZZ.y.unshift(_y), aZZ.d.pop(), aZZ.x.pop(), aZZ.y.pop()
// @function (build-in) sets the maximum number of bars that is available for historical reference
max_bars_back(time, 1000)
//-----------------------------------------------------------------------------}
//Calculations
//-----------------------------------------------------------------------------{
x2 := b.i - 1
ph = ta.pivothigh(liqLen, 1)
pl = ta.pivotlow (liqLen, 1)
if ph
dir := aZZ.d.get(0)
x1 := aZZ.x.get(0)
y1 := aZZ.y.get(0)
y2 := nz(b.h )
if dir < 1
aZZ.in_out(1, x2, y2)
else
if dir == 1 and ph > y1
aZZ.x.set(0, x2), aZZ.y.set(0, y2)
if per
count = 0
st_P = 0.
st_B = 0
minP = 0.
maxP = 10e6
for i = 0 to maxSize - 1
if aZZ.d.get(i) == 1
if aZZ.y.get(i) > ph + (atr / liqMar)
break
else
if aZZ.y.get(i) > ph - (atr / liqMar) and aZZ.y.get(i) < ph + (atr / liqMar)
count += 1
st_B := aZZ.x.get(i)
st_P := aZZ.y.get(i)
if aZZ.y.get(i) > minP
minP := aZZ.y.get(i)
if aZZ.y.get(i) < maxP
maxP := aZZ.y.get(i)
if count > 2
getB = b_liq_B.get(0)
if st_B == getB.bx.get_left()
getB.bx.set_top(math.avg(minP, maxP) + (atr / liqMar))
getB.bx.set_rightbottom(b.i + 10, math.avg(minP, maxP) - (atr / liqMar))
else
b_liq_B.unshift(
liq.new(
box.new(st_B, math.avg(minP, maxP) + (atr / liqMar), b.i + 10, math.avg(minP, maxP) - (atr / liqMar), bgcolor=color(na), border_color=color(na)),
box.new(na, na, na, na, bgcolor = color(na), border_color = color(na)),
box.new(st_B, st_P, b.i + 10, st_P, text = 'Buyside liquidity', text_size = size.tiny, text_halign = text.align_left, text_valign = text.align_bottom, text_color = color.new(cLIQ_B, 25), bgcolor = color(na), border_color = color(na)),
false,
false,
line.new(st_B , st_P, b.i - 1, st_P, color = color.new(cLIQ_B, 0)),
line.new(b.i - 1, st_P, na , st_P, color = color.new(cLIQ_B, 0), style = line.style_dotted))
)
alert('buyside liquidity level detected/updated for ' + syminfo.ticker)
if b_liq_B.size() > visLiq
getLast = b_liq_B.pop()
getLast.bx.delete()
getLast.bxz.delete()
getLast.bxt.delete()
getLast.ln.delete()
getLast.lne.delete()
if pl
dir := aZZ.d.get (0)
x1 := aZZ.x.get (0)
y1 := aZZ.y.get (0)
y2 := nz(b.l )
if dir > -1
aZZ.in_out(-1, x2, y2)
else
if dir == -1 and pl < y1
aZZ.x.set(0, x2), aZZ.y.set(0, y2)
if per
count = 0
st_P = 0.
st_B = 0
minP = 0.
maxP = 10e6
for i = 0 to maxSize - 1
if aZZ.d.get(i) == -1
if aZZ.y.get(i) < pl - (atr / liqMar)
break
else
if aZZ.y.get(i) > pl - (atr / liqMar) and aZZ.y.get(i) < pl + (atr / liqMar)
count += 1
st_B := aZZ.x.get(i)
st_P := aZZ.y.get(i)
if aZZ.y.get(i) > minP
minP := aZZ.y.get(i)
if aZZ.y.get(i) < maxP
maxP := aZZ.y.get(i)
if count > 2
getB = b_liq_S.get(0)
if st_B == getB.bx.get_left()
getB.bx.set_top(math.avg(minP, maxP) + (atr / liqMar))
getB.bx.set_rightbottom(b.i + 10, math.avg(minP, maxP) - (atr / liqMar))
else
b_liq_S.unshift(
liq.new(
box.new(st_B, math.avg(minP, maxP) + (atr / liqMar), b.i + 10, math.avg(minP, maxP) - (atr / liqMar), bgcolor=color(na), border_color=color(na)),
box.new(na, na, na, na, bgcolor=color(na), border_color=color(na)),
box.new(st_B, st_P, b.i + 10, st_P, text = 'Sellside liquidity', text_size = size.tiny, text_halign = text.align_left, text_valign = text.align_top, text_color = color.new(cLIQ_S, 25), bgcolor=color(na), border_color=color(na)),
false,
false,
line.new(st_B , st_P, b.i - 1, st_P, color = color.new(cLIQ_S, 0)),
line.new(b.i - 1, st_P, na , st_P, color = color.new(cLIQ_S, 0), style = line.style_dotted))
)
alert('sellside liquidity level detected/updated for ' + syminfo.ticker)
if b_liq_S.size() > visLiq
getLast = b_liq_S.pop()
getLast.bx.delete()
getLast.bxz.delete()
getLast.bxt.delete()
getLast.ln.delete()
getLast.lne.delete()
for i = 0 to b_liq_B.size() - 1
x = b_liq_B.get(i)
if not x.brL
x.lne.set_x2(b.i)
if b.h > x.bx.get_top()
x.brL := true
x.brZ := true
alert('buyside liquidity level breached for ' + syminfo.ticker)
x.bxz.set_lefttop(b.i - 1, math.min(x.ln.get_y1() + marBuy * (atr), b.h))
x.bxz.set_rightbottom(b.i + 1, x.ln.get_y1())
x.bxz.set_bgcolor(color.new(cLIQ_B, liqBuy ? 73 : 100))
else if x.brZ
if b.l > x.ln.get_y1() - marBuy * (atr) and b.h < x.ln.get_y1() + marBuy * (atr)
x.bxz.set_right(b.i + 1)
x.bxz.set_top(math.max(b.h, x.bxz.get_top()))
if liqBuy
x.lne.set_x2(b.i + 1)
else
x.brZ := false
for i = 0 to b_liq_S.size() - 1
x = b_liq_S.get(i)
if not x.brL
x.lne.set_x2(b.i)
if b.l < x.bx.get_bottom()
x.brL := true
x.brZ := true
alert('sellside liquidity level breached for ' + syminfo.ticker)
x.bxz.set_lefttop(b.i - 1, x.ln.get_y1())
x.bxz.set_rightbottom(b.i + 1, math.max(x.ln.get_y1() - marSel * (atr), b.l))
x.bxz.set_bgcolor(color.new(cLIQ_S, liqSel ? 73 : 100))
else if x.brZ
if b.l > x.ln.get_y1() - marSel * (atr) and b.h < x.ln.get_y1() + marSel * (atr)
x.bxz.set_rightbottom(b.i + 1, math.min(b.l, x.bxz.get_bottom()))
if liqSel
x.lne.set_x2(b.i + 1)
else
x.brZ := false
if lqVoid and per
bull = b.l - b.h > atr200 and b.l > b.h and b.c > b.h
bear = b.l - b.h > atr200 and b.h < b.l and b.c < b.l
if bull
l = 13
if bull
st = math.abs(b.l - b.l ) / l
for i = 0 to l - 1
array.push(b_liq_V, box.new(b.i - 2, b.l + i * st, b.i, b.l + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
else
st = math.abs(b.l - b.h ) / l
for i = 0 to l - 1
if lqText and i == 0
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, text = 'Liquidity Void ', text_size = size.tiny, text_halign = text.align_right, text_valign = text.align_bottom, text_color = na, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
else
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
if bear
l = 13
if bear
st = math.abs(b.h - b.h) / l
for i = 0 to l - 1
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
else
st = math.abs(b.l - b.h) / l
for i = 0 to l - 1
if lqText and i == l - 1
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, text = 'Liquidity Void ', text_size = size.tiny, text_halign = text.align_right, text_valign = text.align_top, text_color = na, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
else
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
if b_liq_V.size() > 0
qt = b_liq_V.size()
for bn = qt - 1 to 0
if bn < b_liq_V.size()
cb = b_liq_V.get(bn)
ba = math.avg(cb.get_bottom(), cb.get_top())
if math.sign(b.c - ba) != math.sign(b.c - ba) or math.sign(b.c - ba) != math.sign(b.l - ba) or math.sign(b.c - ba) != math.sign(b.h - ba)
b_liq_V.remove(bn)
else
cb.set_right(b.i + 1)
if b.i - cb.get_left() > 21
cb.set_text_color(color.new(color.gray, 25))
//-----------------------------------------------------------------------------}






















