Tìm kiếm tập lệnh với "Candlestick"
M15 Daily Open Candle Highlighter — v6Tô màu cây nến 15 phút đầu tiên của mỗi NGÀY giao dịch (theo múi giờ của symbol).
Heikin Ashi 3-Bar Momentum Alert by nqbrooksTrying some stuffz out yahuuur, HIKEYNASHIEEEHH 3 bar -4h momemtum aelerTT
特典インジケーター (ボリンジャーバンド+移動平均線)BTCやSP500向けのチャート解析ツールです。
- ボリンジャーバンド(オレンジ上下線、水色中央線)
- EMA5(青線)、EMA25(黄色線)、EMA200(赤線)
使い方のポイント
- トレンド判定: EMA200(赤)より上なら上昇基調、下なら下降基調が優勢。
- 短中期の勢い: EMA5(青)とEMA25(黄)のゴールデンクロス/デッドクロスで勢いの変化を確認。
- ボラティリティと逆張り: ボリンジャーバンドの上限/下限タッチは伸びの継続か反転の初動かを、中央線(基準・水色)復帰でフォロー確認。
- 時間軸: 1時間~4時間は短期、日足は中期のトレンド確認に適合。複数時間軸で整合性を取ると精度が上がります。
ツールの解説
ボリンジャーバンド(Bollinger Bands)
ボリンジャーバンドは、20期間の単純移動平均(SMA)を中央線とし、その上下に標準偏差×2のバンドを配置します。
- 上限バンド:相場の上振れが過熱している可能性を示すレジスタンスライン
- 下限バンド:相場の下振れが過冷却している可能性を示すサポートライン
- バンド幅の拡大:ボラティリティ上昇局面を示唆
- バンド幅の収縮:レンジ相場や転換前の低ボラティリティを示唆
---------------------
EMA5(Exponential Moving Average 5)
EMA5は直近5本の価格により重み付けされた指数移動平均です。
- 非常に短期的な価格の変化を捉え、エントリーや還流のタイミングに敏感
- EMA25とのクロスオーバーで、短期モメンタムの変化を判断
EMA25(Exponential Moving Average 25)
EMA25は中期的なトレンドを表す指数移動平均です。
- EMA5との位置関係でトレンドの強さや方向性を評価
- 価格がEMA25を上回れば短期的な買い優勢、下回れば売り優勢
EMA200(Exponential Moving Average 200)
EMA200は長期トレンドの大局を示す指数移動平均です。
- プロのトレーダーにも重要視されるサポート/レジスタンスライン
- 価格がEMA200を上回ると長期的に強気、市場全体のセンチメント確認に利用
Chart Analysis Tool for BTC and S&P500
- Bollinger Bands (orange upper/lower lines, light blue middle line)
- EMA5 (blue line), EMA25 (yellow line), EMA200 (red line)
Relative Volume Spike (Bullish vs Bearish)relative volume compared to 20day averages
used to detect when big money is coming in.
Combined Triggers Dashboard//@version=6
indicator("Combined Triggers Dashboard", overlay=true)
// ======================= INPUTS =======================
// Daily Trigger
shortDEMA_D = input.int(10, "Daily 10 DEMA")
longDEMA_D = input.int(20, "Daily 20 DEMA")
volAvgLen_D = input.int(20, "Daily 20-day Avg Volume")
volMultiplier_D = input.float(3, "Daily Volume Multiplier")
weekDEMAlen_D = input.int(10, "10-Week DEMA Reference for Daily Trigger")
// Weekly Trigger
shortDEMA_W = input.int(10, "Weekly 10 W DEMA")
longDEMA_W = input.int(20, "Weekly 20 W DEMA")
volAvgLen_W = input.int(50, "50-day Avg Volume for Weekly Trigger")
volMultiplier_W = input.float(3, "Weekly Volume Multiplier")
// Original Trigger (example)
shortDEMA_O = input.int(10, "Original 10 DEMA")
longDEMA_O = input.int(20, "Original 20 DEMA")
volAvgLen_O = input.int(20, "Original 20-day Avg Volume")
volMultiplier_O = input.float(3, "Original Volume Multiplier")
// ======================= FUNCTIONS =======================
f_dema(_src, _len) =>
ema1 = ta.ema(_src, _len)
ema2 = ta.ema(ema1, _len)
2 * ema1 - ema2
// ======================= DAILY TRIGGER =======================
dema10D = f_dema(close, shortDEMA_D)
dema20D = f_dema(close, longDEMA_D)
dailyVol = volume
avgVol20 = ta.sma(dailyVol, volAvgLen_D)
volCondition_D = dailyVol > volMultiplier_D * avgVol20
priceCondition_D = close > dema10D
demaCondition_D = dema10D > dema20D
weeklyClose_D = request.security(syminfo.tickerid, "W", close)
dema10W_D = ta.ema(weeklyClose_D, weekDEMAlen_D) * 2 - ta.ema(ta.ema(weeklyClose_D, weekDEMAlen_D), weekDEMAlen_D)
trigger_D = priceCondition_D and demaCondition_D and volCondition_D
plotshape(trigger_D, title="Daily Trigger", style=shape.triangleup, location=location.abovebar,
text="DTRG", textcolor=color.white, color=color.new(#FF4500, 0), size=size.small)
alertcondition(trigger_D, title="Daily DEMA Trigger Alert", message="Daily DEMA trigger detected")
// ======================= WEEKLY TRIGGER =======================
weeklyClose_W = request.security(syminfo.tickerid, "W", close)
dema10W = f_dema(weeklyClose_W, shortDEMA_W)
dema20W = f_dema(weeklyClose_W, longDEMA_W)
dailyVolW = volume
avgVol50 = ta.sma(dailyVolW, volAvgLen_W)
volCondition_W = dailyVolW > volMultiplier_W * avgVol50
priceCondition_W = close > dema20W
demaCondition_W = dema10W > dema20W
trigger_W = priceCondition_W and demaCondition_W and volCondition_W
plotshape(trigger_W, title="Weekly Trigger", style=shape.triangledown, location=location.abovebar,
text="WTRG", textcolor=color.white, color=color.new(#1E90FF, 0), size=size.small)
alertcondition(trigger_W, title="Weekly DEMA Trigger Alert", message="Weekly DEMA trigger detected")
// ======================= ORIGINAL TRIGGER =======================
dema10O = f_dema(close, shortDEMA_O)
dema20O = f_dema(close, longDEMA_O)
dailyVolO = volume
avgVolO = ta.sma(dailyVolO, volAvgLen_O)
volCondition_O = dailyVolO > volMultiplier_O * avgVolO
priceCondition_O = close > dema10O
demaCondition_O = dema10O > dema20O
trigger_Orig = priceCondition_O and demaCondition_O and volCondition_O
plotshape(trigger_Orig, title="Original Trigger", style=shape.labelup, location=location.belowbar,
text="TRG", textcolor=color.white, color=color.new(#32CD32, 0), size=size.small)
// ======================= COMBINED TABLE =======================
var table dash = table.new(position.top_right, 2, 20, border_width=1)
if barstate.islast
// --- DAILY TRIGGER (rows 0-4) ---
table.cell(dash, 0, 0, "Daily Trigger", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 0, trigger_D ? "YES ✅" : "NO ❌", text_color=color.white, bgcolor=trigger_D ? color.new(#FF4500, 0) : color.new(#555555, 50))
table.cell(dash, 0, 1, "CMP > 10D DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 1, str.tostring(close, format.price), text_color=color.white, bgcolor=priceCondition_D ? color.new(#32CD32, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 2, "10D > 20D DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 2, str.tostring(dema10D, format.price) + " > " + str.tostring(dema20D, format.price), text_color=color.white, bgcolor=demaCondition_D ? color.new(#FFFF00, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 3, "Daily Vol > 3x20D Avg", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 3, str.tostring(dailyVol, format.volume) + " / " + str.tostring(avgVol20, format.volume), text_color=color.white, bgcolor=volCondition_D ? color.new(#FF00FF, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 4, "10W DEMA Ref", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 4, str.tostring(dema10W_D, format.price), text_color=color.white, bgcolor=color.new(#00FFFF, 0))
// --- WEEKLY TRIGGER (rows 5-9) ---
table.cell(dash, 0, 5, "Weekly Trigger", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 5, trigger_W ? "YES ✅" : "NO ❌", text_color=color.white, bgcolor=trigger_W ? color.new(#1E90FF, 0) : color.new(#555555, 50))
table.cell(dash, 0, 6, "CMP > 20W DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 6, str.tostring(close, format.price), text_color=color.white, bgcolor=priceCondition_W ? color.new(#32CD32, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 7, "10W > 20W DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 7, str.tostring(dema10W, format.price) + " > " + str.tostring(dema20W, format.price), text_color=color.white, bgcolor=demaCondition_W ? color.new(#FFFF00, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 8, "Daily Vol > 3x50D Avg", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 8, str.tostring(dailyVolW, format.volume) + " / " + str.tostring(avgVol50, format.volume), text_color=color.white, bgcolor=volCondition_W ? color.new(#FF00FF, 0) : color.new(#AAAAAA, 50))
// --- ORIGINAL TRIGGER (rows 10-14) ---
table.cell(dash, 0, 10, "Original Trigger", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 10, trigger_Orig ? "YES ✅" : "NO ❌", text_color=color.white, bgcolor=trigger_Orig ? color.new(#32CD32, 0) : color.new(#555555, 50))
table.cell(dash, 0, 11, "CMP > 10D DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 11, str.tostring(close, format.price), text_color=color.white, bgcolor=priceCondition_O ? color.new(#32CD32, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 12, "10D > 20D DEMA", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 12, str.tostring(dema10O, format.price) + " > " + str.tostring(dema20O, format.price), text_color=color.white, bgcolor=demaCondition_O ? color.new(#FFFF00, 0) : color.new(#AAAAAA, 50))
table.cell(dash, 0, 13, "Daily Vol > 3x20D Avg", text_color=color.white, bgcolor=color.new(#555555, 30))
table.cell(dash, 1, 13, str.tostring(dailyVolO, format.volume) + " / " + str.tostring(avgVolO, format.volume), text_color=color.white, bgcolor=volCondition_O ? color.new(#FF00FF, 0) : color.new(#AAAAAA, 50))
Volume Quintile Candle ColorsRecolors the candles based on the quintile of volume in that candle compared to the most recent 100 candles
Dynamic Percentage High LowThis script gives a clear percentage wise view of visible high and low on all time frames in your view. It's dynamic.
STRAT Pattern Scanner - All 22 PatternsSTRAT Candle call outs. A learning tool created to help me identify different STRAT candle types while learning The STRAT strategy designed by the late Rob Smith. Feel free to change the code or add to it for personalized use.
Engulfing Bars - StrictIdentifies strict definition engulfing bars with a close in the leading 20% of the range.
Session First 5-Min High/LowHere's a professional description for your indicator:
Session First 5-Min High/Low Marker
This indicator automatically identifies and marks the high and low price levels established during the first 5 minutes of major trading sessions, helping traders identify key intraday support and resistance zones.
Key Features:
Tracks three major trading sessions in IST (Indian Standard Time):
Asian Session: 5:30 AM - 5:35 AM
London Session: 12:30 PM - 12:35 PM
New York Session: 5:30 PM - 5:35 PM
Draws horizontal lines at the highest and lowest prices reached during each session's opening 5-minute window
Color-coded for easy identification (Yellow for Asian, Blue for London, Red for New York)
Lines extend across the chart to help track price reactions throughout the day
Clean, minimal design with optional labels
Best Used For:
Identifying key intraday support and resistance levels
Session breakout trading strategies
Understanding institutional order flow at market opens
Works on 1-minute timeframe for precise tracking
Customizable Settings:
Toggle line extensions on/off
Adjust line width (1-5)
Change colors for each session
Show/hide session labels
Perfect for day traders and scalpers who trade around major session openings and want to identify high-probability support/resistance zones established during peak liquidity periods.
This description explains what the indicator does, its practical applications, and its key features in a way that's clear for TradingView users.RetryClaude can make mistakes. Please double-check responses.
RSI-Price Strength Box (Quant-Stable v4 - corrected sign)This indicator shows Price Sensitivity with RSI Movement
RSI Price Sensitivity v3 [Quant-Stable]The RSI Price Sensitivity v3 indicator measures how efficiently and consistently price responds to RSI movement — revealing when RSI momentum actually matters, and when it’s just noise.
It’s designed as a quant-grade analytical tool combining RSI, ADX, volatility, regression, and correlation logic to form a single normalized “sensitivity” score.
Core Concept
Traditional RSI often moves without price follow-through.
This indicator quantifies the strength of the connection between RSI and price, dynamically adapting to volatility and trend context.
It blends:
📊 RSI-Price Correlation: Statistical relationship between RSI momentum and price momentum.
⚙️ Efficiency Ratio: Measures how direct and smooth the RSI-price relationship is (noise filtering).
📈 Regression Confidence: Tests whether price moves are statistically aligned with RSI structure.
💡 Momentum Alignment: Checks directional agreement between RSI trend and price trend, weighted by ADX.
All components are dynamically normalized and weighted into one composite sensitivity score.
Volume Bubbles & Liquidity Heatmap 30% + biasLuxAlgo gave us an open script, I just primmed it up with the use of Chat GPT:There is no single magic number (like “delta must be 800”) that will guarantee directional follow-through in every market. But you can make a mathematically rigorous filter that gives you a high-probability test — by normalizing the delta against that market’s typical behavior and requiring multiple confirmations. Below is a compact, actionable algorithm you can implement immediately (in your platform or spreadsheet) plus concrete thresholds and the math behind them.
High-IQ rule set (math + trade logic)
Use three independent checks. Only take the trade if ALL three pass.
1) Z-score (statistical significance of the delta)
Compute rolling mean
𝜇
μ and std dev
𝜎
σ of delta on the same timeframe (e.g. 5m) over a lookback window
𝑊
W (suggest
𝑊
=
50
W=50–200 bars).
𝑍
=
delta
bar
−
𝜇
𝑊
𝜎
𝑊
Z=
σ
W
delta
bar
−μ
W
Threshold: require
𝑍
≥
2.5
Z≥2.5 (strong) — accept 2.0 for less strict, 3.0 for very rare signals.
Why: a Z>=2.5 means this delta is an outlier (~<1% one-sided), not normal noise.
2) Relative Imbalance (strength vs total volume)
Compute imbalance ratio:
𝑅
=
∣
delta
bar
∣
volume
bar
R=
volume
bar
∣delta
bar
∣
Threshold: require
𝑅
≥
0.25
R≥0.25 (25% of the bar’s volume is one-sided). For scalping you can tighten to 0.30–0.40.
Why: a big delta with tiny volume isn’t meaningful; this normalizes to participation.
3) Net follow-through over a confirmation window
Look ahead
𝑁
N bars (or check the next bar if you need intrabar speed). Compute cumulative delta and price move:
cum_delta
𝑁
=
∑
𝑖
=
1
𝑁
delta
bar
+
𝑖
cum_delta
N
=
i=1
∑
N
delta
bar+i
price_move
=
close
bar
+
𝑁
−
close
bar
price_move=close
bar+N
−close
bar
Thresholds: require
cum_delta
𝑁
cum_delta
N
has the same sign as the trigger and
∣
cum_delta
𝑁
∣
≥
0.5
×
∣
delta
bar
∣
∣cum_delta
N
∣≥0.5×∣delta
bar
∣, and
price_move
price_move exceeds a minimum meaningful tick amount (instrument dependent). For ES / US30 type futures: price move ≥ 5–10 ticks; for forex pairs maybe 10–20 pips? Use ATR
20
20
×0.05 as a generic minimum.
Why: separates immediate absorption (buy delta then sellers soak it) from genuine continuation.
Bonus check — Structural context (must be satisfied)
Trigger should not occur against a strong structural barrier (VWAP, daily high/low, previous session POC) unless you’re explicitly trading exhaustion/absorption setups.
If signal occurs near resistance and price does not clear that resistance within
𝑁
N bars, treat as probable trap.
Putting it together — final trade decision
Take the long (example):
If
𝑍
≥
2.5
Z≥2.5 and
𝑅
≥
0.25
R≥0.25 and cum_delta_N confirms and no hard resistance above (or you’re willing to trade absorption), then enter.
Place stop: under the low of the last 2–3 bars or X ATR (instrument dependent).
Initial target: risk:reward 1:1 minimum, scale out at 1.5–2R after confirming further delta.
Concrete numeric illustration using your numbers
You saw FOL = 456, then sell reaction with ~350 opposite. How to interpret:
Suppose your 5-min rolling mean
𝜇
μ = 100 and
𝜎
σ=120 (example):
𝑍
=
(
456
−
100
)
/
120
≈
2.97
⇒
statistically big
Z=(456−100)/120≈2.97⇒statistically big
So it passes Z.
If volume on that bar = 2000 contracts:
𝑅
=
456
/
2000
=
0.228
⇒
just below 0.25 threshold
R=456/2000=0.228⇒just below 0.25 threshold
So it fails R (weak participation proportionally), explaining why 456 alone didn’t move price.
Seller came back with 350 opposite soon after — check cum_delta_N:
cum_delta
𝑛
𝑒
𝑥
𝑡
3
≈
456
−
350
=
106
net
cum_delta
next3
≈456−350=106 net
Net is small relative to the initial spike — not convincing follow-through.
Conclusion: despite a big absolute number (456), relative measures and lack of follow-through meant the move failed. That’s exactly why raw numbers alone are unreliable.
Advanced refinement (for elite performance)
Use rolling median + MAD instead of mean/std if delta distribution is skewed.
Scale Z by volume volatility: divide Z by
volume
bar
/
volume
‾
volume
bar
/
volume
to penalize low-volume bars.
Use a signed cumulative delta over micro-windows: compute windowed cumulative delta standardized:
𝑍
cum
=
∑
𝑖
=
0
𝑀
−
1
delta
𝑡
−
𝑖
−
𝑀
𝜇
𝑀
𝜎
Z
cum
=
M
σ
∑
i=0
M−1
delta
t−i
−Mμ
and require
𝑍
cum
≥
3
Z
cum
≥3 for very high confidence.
Add market-depth / DOM confirmation (if available): require that resting ask size above is less than resting bid size below by a factor (i.e. visible liquidity supports the move).
Practical thresholds to start with (tune per instrument)
Lookback
𝑊
W: 100 bars (5m → about a trading day)
Z threshold: 2.5
Imbalance ratio
𝑅
R: ≥ 0.25 (tighten to 0.30 for scalping)
Confirmation window
𝑁
N: next 1–3 bars for intraday scalps; 3–6 bars for short swings
Cum delta confirmation: ≥ 0.5 × initial delta and same sign
Price move confirmation: ≥ 0.03 × ATR20 (or set absolute ticks per instrument)
TL;DR — the single best rule
Don’t chase absolute numbers. Use Z-score of delta + delta/volume ratio + real follow-through. If all three align, odds are heavily in your favor.
If you want, I can:
give you a tiny script (pseudocode or Pine / Python) that computes Z, R, cum_delta_N and flags qualifying bars, or
run the calculation on a sample of your recent bars if you paste a small CSV of time, delta, volume, close.
Which do you want? (I’ll give code right away.)
You said:
give me a percentage of difference where we have a high probability
ChatGPT said:
Thought for 7s
Nice — straight to the point. Here’s a concise, practical set of percentage thresholds (and associated confidence estimates) you can use right now to flag a “high probability” delta signal. I’ll give you three tiers (good / strong / elite), explain what each means, show how to compute it, and give a short example using your 456/2000 bar.
One-line rule
Compute delta percent
𝑃
=
∣
delta
∣
volume
×
100
%
P=
volume
∣delta∣
×100%.
Then require Z-score of delta ≥ 2.5 and P to be at or above the threshold below for the desired confidence tier.
Threshold tiers (percent of bar volume)
Good (high-probability trade candidate)
P ≥ 20–25%
Typical success probability (when combined with Z≥2.5 and no hard structural resistance): ~60–70%.
Use when you want a steady flow of signals with decent edge.
Strong (high confidence)
P ≥ 30–35%
Typical success probability: ~70–80% (with Z≥2.5 + structural alignment).
Fewer signals, higher win-rate. Good default for intraday.
Elite (very high probability / low false positives)
P ≥ 40–50%
Typical success probability: ~80–90% (with Z≥3 and confirmation).
Rare signals. Use for meaningful size or when you need maximum certainty.
Why percentage matters (short)
Absolute delta (456) is meaningless without volume context. A 456 delta on 2,000 volume → P = 456/2000 = 22.8% → sits just below the Good threshold, which matches why it failed: decent but not dominant participation.
Additional required checks (don’t skip these)
To turn P into a reliable filter, always require:
Z-score of the delta ≥ 2.5 (or ≥3 for Elite signals).
No immediate structural barrier (VWAP, strong resistance) that would plausibly absorb the order.
Follow-through: within next N bars (N = 1–3 for scalps) price moves in the same direction by ≥ 0.03×ATR20 (or instrument-specific tick threshold). If this fails, cut fast.
Combine all three and your realized win-rate will approach the probabilities above.
Practical quick checklist (to apply each signal)
Compute P = |delta|/volume. Is P ≥ 30%? (or your chosen tier)
Compute Z = (delta − mean)/std over last 100 bars. Is Z ≥ 2.5?
Is price not pinned under a heavy resistance?
Enter on next bar close (or intrabar on continuation), stop under last 2-bar low (for longs).
If price fails to move ≥ 0.03×ATR20 within 3 bars, exit.
Example (your bar)
delta = 456, volume = 2000 → P = 22.8% → below Good threshold (25%).
Even if Z was high, P failed — explains the failure. You need P ≥ ~30% plus Z≥2.5 to call it a Strong signal.
Final notes (instrument & timeframe)
These percentages were calibrated for futures/US indices and short intraday bars (1–5m).
For FX or low-tick instruments, use absolute ticks + a smaller P threshold (start at 15–20%).
Always backtest on the specific instrument/timeframe and tune thresholds.
If you want, I’ll generate a tiny script (Python or Pine) that calculates P and Z and flags Good/Strong/Elite signals for your chart history so you can see exact historical hit rates. Which language (Python or Pine)?
You said:
so if we have 456 g vs 350 r what pct is that in favour of green?
ChatGPT said:
Perfect — let’s calculate it carefully, digit by digit so we don’t make a slip.
We have:
Green (buy) volume = 456
Red (sell) volume = 350
We want to know what percentage is in favor of green, relative to the total volume.
Step 1. Compute total volume
Total
=
456
+
350
=
806
Total=456+350=806
Step 2. Compute green’s share
\text{Green %} = \frac{456}{806} \times 100
Now do it precisely:
456
÷
806
=
0.565506
456÷806=0.565506 (rounded)
So:
0.565506
×
100
=
56.55
%
0.565506×100=56.55%
Step 3. Compute red’s share (for context)
350
806
=
0.434494
→
43.45
%
806
350
=0.434494→43.45%
Step 4. Compute difference (bias toward green)
56.55
%
−
43.45
%
=
13.10
%
56.55%−43.45%=13.10%
✅ Final answer:
Green = 56.6% of total
Red = 43.4% of total
Bias = +13.1 percentage points in favor of green
So that’s only a 13% advantage to buyers — modest pressure, not a dominant imbalance.
For a high-probability signal (as we discussed earlier), you generally want ≥30% imbalance (e.g. ~65/35 split or stronger).
Original:
''The Volume Bubbles & Liquidity Heatmap indicator is a powerful trading tool designed to give traders a clearer picture of volume dynamics and liquidity distribution across multiple timeframes. By combining dynamic volume bubbles with a liquidity heatmap, this indicator makes it easy to identify areas of price interest, spot market imbalances, and improve decision-making for both scalpers and swing traders.
This trading indicator is ideal for volume traders, price action traders, and liquidity-focused traders who need a clean, multi-dimensional view of buyer/seller activity and the zones where market participants are most active. With full customization over bubble display, timeframes, and visual settings, traders can tailor the tool to fit virtually any trading strategy or market.''
30 Day HighDisplay the 30 day high on the chart, based on the highest high (as opposed to the highest close).
4H Sell Signals at Swing Highs/LowsThis shows only zones where a 4H FVG and a 4H OB overlap (i.e., true HPZ).
Uses strict filters (FVG size vs avg body, OB body multiplier) to reduce noise and show very few, high-quality zones.
Each HPZ is drawn once (box deleted/created only when the zone changes) to avoid chart spam.
Optional label appears when price is currently inside the HPZ so you can spot active opportunities quickly.
bar count plot only for far lookbackPurpose:
TradingView limits the number of text/label objects (≈500), which causes traditional bar-count indicators to stop showing numbers when you scroll far back in history.
This plots-only version bypasses that limitation entirely, allowing you to view bar numbers anywhere on the chart, even thousands of bars back.
How It Works:
Displays each bar’s in-day sequence number (1–78 by default) under the candles.
Counts restart automatically at the start of each trading day.
Uses a dual-channel “digit plot” system (tens + ones) instead of labels—extremely light on performance and unlimited in lookback.
The digits are drawn every N bars (default = 3) to keep the view uncluttered.
Key Parameters:
Show every Nth bar: Controls how often numbers appear (1 = every bar, 3 = every 3 bars, etc.).
Notes:
Digits are plotted directly via plotshape()—no labels—so they remain visible even 5 000 + bars back.
Alignment may vary slightly depending on chart zoom; this version is intended mainly for deep historical review rather than precise near-term alignment.
Microgaps (plots-only, 4-channel, same-day only)Purpose:
This indicator visually highlights 3-bar price gaps on your chart, showing clear visual structure for gap zones without lag or diagonal artifacts.
It draws two outer lines (top and bottom of the gap) for every valid 3-bar gap, and optionally a midline when the gap is considered “large.”
⚙️ How it works
A bull gap is detected when the current bar’s low is higher than the high from two bars ago (low > high ).
A bear gap is detected when the current bar’s high is lower than the low from two bars ago (high < low ).
The lines are centered at the middle bar of the 3-bar sequence.
Gaps are only drawn within the same trading day to avoid false overnight gaps.
To prevent overlapping artifacts, up to four concurrent gap channels can be drawn efficiently using GPU-friendly plot() lines.
🔵 Midline logic
The midline (center of the gap) is only displayed when the gap’s vertical size is “large” relative to recent volatility.
“Large” means the gap height is greater than a user-defined fraction of the average bar range over the past N bars.
Example: if the average 8-bar range = 2 points, and the threshold = 0.3, then only gaps larger than 0.6 points will show the midline.
🧩 Parameters
Setting Description
Bull Gap Color / Width Style of bullish gaps (top and bottom lines).
Bear Gap Color / Width Style of bearish gaps (top and bottom lines).
Mid Gap Color / Width Style of the optional midline (shown only when “large”).
Large Gap — Lookback (bars) Number of bars used to calculate the average range (default: 8).
Large Gap — Size vs Avg Range Fraction of the average range that defines a “large” gap (default: 0.5). Set lower (e.g. 0.3) to show more midlines.
💡 Tips
Set threshold lower (0.2–0.4) for more midlines, higher (0.6–1.0) to highlight only extreme gaps.
Works best on intraday timeframes (1-min to 30-min).
Fully GPU-efficient — can scroll back thousands of bars without lag.
K线计数竖线 - 贯穿屏幕Used to mark the past N k-lines to facilitate understanding of the running direction of the moving average