Highlight Selected WeekdaysThis indicator allows you to highlight selected trading days of the week directly on the chart with customizable colors.
Features:
Choose which weekdays to highlight (Sunday through Saturday).
Assign a different background color to each selected day.
Option to calculate the weekday based on the daily close or the active bar’s time.
インジケーターとストラテジー
Double Top/Bottom Screener V1//@version=6
indicator("Double Top/Bottom Screener", overlay=true, max_lines_count=500)
// Inputs
leftBars = input.int(5, "Left Bars")
rightBars = input.int(5, "Right Bars")
tolerance = input.float(0.02, "Max Difference (e.g., 0.02 for 2 cents)", step=0.01)
atrLength = input.int(14, "ATR Length for Normalized Distance", minval=1)
requiredPeaks = input.int(3, "Required Identical Peaks", minval=2, maxval=5)
// Declarations of persistent variables and arrays
var array resistanceLevels = array.new(0)
var array resistanceCounts = array.new(0)
var array supportLevels = array.new(0)
var array supportCounts = array.new(0)
var array resLines = array.new(0)
var array supLines = array.new(0)
var bool hasDoubleTop = false
var bool hasDoubleBottom = false
var float doubleTopLevel = na
var float doubleBottomLevel = na
var int todayStart = na
var bool isNewDay = false
// Step 1: Identify Swing Highs/Lows
swingHigh = ta.pivothigh(high, leftBars, rightBars)
swingLow = ta.pivotlow(low, leftBars, rightBars)
// Today's premarket start (04:00 AM ET)
if dayofmonth != dayofmonth
todayStart := timestamp(syminfo.timezone, year, month, dayofmonth, 4, 0, 0)
isNewDay := true
else
isNewDay := false
// Clear arrays and reset flags only once at premarket start
if isNewDay and time >= todayStart
array.clear(resistanceLevels)
array.clear(supportLevels)
array.clear(resistanceCounts)
array.clear(supportCounts)
array.clear(resLines)
array.clear(supLines)
hasDoubleTop := false
hasDoubleBottom := false
doubleTopLevel := na
doubleBottomLevel := na
// Add new swings and check for identical peaks
if not na(swingHigh) and time >= todayStart
bool isEqualHigh = false
int peakIndex = -1
float prevLevel = na
if array.size(resistanceLevels) > 0
for i = 0 to array.size(resistanceLevels) - 1
prevLevel := array.get(resistanceLevels, i)
if math.abs(swingHigh - prevLevel) <= tolerance
isEqualHigh := true
peakIndex := i
break
if isEqualHigh and peakIndex >= 0
array.set(resistanceCounts, peakIndex, array.get(resistanceCounts, peakIndex) + 1)
if array.get(resistanceCounts, peakIndex) == requiredPeaks
hasDoubleTop := true
doubleTopLevel := prevLevel
else
array.push(resistanceLevels, swingHigh)
array.push(resistanceCounts, 1)
line newResLine = line.new(bar_index - rightBars, swingHigh, bar_index, swingHigh, color=color.red, width=2, extend=extend.right)
array.push(resLines, newResLine)
if not na(swingLow) and time >= todayStart
bool isEqualLow = false
int peakIndex = -1
float prevLevel = na
if array.size(supportLevels) > 0
for i = 0 to array.size(supportLevels) - 1
prevLevel := array.get(supportLevels, i)
if math.abs(swingLow - prevLevel) <= tolerance
isEqualLow := true
peakIndex := i
break
if isEqualLow and peakIndex >= 0
array.set(supportCounts, peakIndex, array.get(supportCounts, peakIndex) + 1)
if array.get(supportCounts, peakIndex) == requiredPeaks
hasDoubleBottom := true
doubleBottomLevel := prevLevel
else
array.push(supportLevels, swingLow)
array.push(supportCounts, 1)
line newSupLine = line.new(bar_index - rightBars, swingLow, bar_index, swingLow, color=color.green, width=2, extend=extend.right)
array.push(supLines, newSupLine)
// Monitor and remove broken levels/lines; reset pattern if the equal level breaks
if array.size(resistanceLevels) > 0
for i = array.size(resistanceLevels) - 1 to 0
float level = array.get(resistanceLevels, i)
if close > level
line.delete(array.get(resLines, i))
array.remove(resLines, i)
array.remove(resistanceLevels, i)
array.remove(resistanceCounts, i)
if level == doubleTopLevel
hasDoubleTop := false
doubleTopLevel := na
if array.size(supportLevels) > 0
for i = array.size(supportLevels) - 1 to 0
float level = array.get(supportLevels, i)
if close < level
line.delete(array.get(supLines, i))
array.remove(supLines, i)
array.remove(supportLevels, i)
array.remove(supportCounts, i)
if level == doubleBottomLevel
hasDoubleBottom := false
doubleBottomLevel := na
// Limit arrays (after removals)
if array.size(resistanceLevels) > 10
line oldLine = array.shift(resLines)
line.delete(oldLine)
array.shift(resistanceLevels)
array.shift(resistanceCounts)
if array.size(supportLevels) > 10
line oldLine = array.shift(supLines)
line.delete(oldLine)
array.shift(supportLevels)
array.shift(supportCounts)
// Pattern Signal: 1 only if the exact required number of peaks is met
patternSignal = (hasDoubleTop or hasDoubleBottom) and (array.size(resistanceCounts) > 0 and array.get(resistanceCounts, array.size(resistanceCounts) - 1) == requiredPeaks or array.size(supportCounts) > 0 and array.get(supportCounts, array.size(supportCounts) - 1) == requiredPeaks) ? 1 : 0
// New: Nearest Double Level Price
var float nearestDoubleLevel = na
if hasDoubleTop and not na(doubleTopLevel)
nearestDoubleLevel := doubleTopLevel
if hasDoubleBottom and not na(doubleBottomLevel)
nearestDoubleLevel := na(nearestDoubleLevel) ? doubleBottomLevel : (math.abs(close - doubleBottomLevel) < math.abs(close - nearestDoubleLevel) ? doubleBottomLevel : nearestDoubleLevel)
// New: Distance to Nearest Level (using ATR for normalization)
var float atr = ta.atr(atrLength)
var float distanceNormalizedATR = na
if not na(nearestDoubleLevel) and not na(atr) and atr > 0
distanceNormalizedATR := math.abs(close - nearestDoubleLevel) / atr
// Optional Bounce Signal (for reference)
bounceSignal = 0
if array.size(resistanceLevels) > 0
for i = 0 to array.size(resistanceLevels) - 1
float level = array.get(resistanceLevels, i)
if low <= level and high >= level and close < level
bounceSignal := 1
if array.size(supportLevels) > 0
for i = 0 to array.size(supportLevels) - 1
float level = array.get(supportLevels, i)
if high >= level and low <= level and close > level
bounceSignal := 1
// Outputs
plot(patternSignal, title="Pattern Signal", color=patternSignal == 1 ? color.purple : na, style=plot.style_circles)
plot(bounceSignal, title="Bounce Signal", color=bounceSignal == 1 ? color.yellow : na, style=plot.style_circles)
plot(nearestDoubleLevel, title="Nearest Double Level Price", color=color.orange)
plot(distanceNormalizedATR, title="Normalized Distance (ATR)", color=color.green)
bgcolor(patternSignal == 1 ? color.new(color.purple, 80) : na)
if patternSignal == 1 and barstate.isconfirmed
alert("Double Pattern detected on " + syminfo.ticker + " at " + str.tostring(close), alert.freq_once_per_bar_close)
if barstate.islast
var table infoTable = table.new(position.top_right, 1, 4, bgcolor=color.new(color.black, 50))
table.cell(infoTable, 0, 0, "Pattern: " + str.tostring(patternSignal), bgcolor=patternSignal == 1 ? color.purple : color.gray)
table.cell(infoTable, 0, 1, "Bounce: " + str.tostring(bounceSignal), bgcolor=bounceSignal == 1 ? color.yellow : color.gray)
table.cell(infoTable, 0, 2, "Level: " + str.tostring(nearestDoubleLevel, "#.##"), bgcolor=color.orange)
table.cell(infoTable, 0, 3, "ATR Dist: " + str.tostring(distanceNormalizedATR, "#.##"), bgcolor=color.green)
Double Top/Bottom Screener 3-5 peaks //@version=6
indicator("Double Top/Bottom Screener", overlay=true, max_lines_count=500)
// Inputs
leftBars = input.int(5, "Left Bars")
rightBars = input.int(5, "Right Bars")
tolerance = input.float(0.02, "Max Difference (e.g., 0.02 for 2 cents)", step=0.01)
atrLength = input.int(14, "ATR Length for Normalized Distance", minval=1)
maxPeaks = input.int(5, "Max Identical Peaks", minval=2, maxval=5)
// Declarations of persistent variables and arrays
var array resistanceLevels = array.new(0)
var array resistanceCounts = array.new(0)
var array supportLevels = array.new(0)
var array supportCounts = array.new(0)
var array resLines = array.new(0)
var array supLines = array.new(0)
var bool hasDoubleTop = false
var bool hasDoubleBottom = false
var float doubleTopLevel = na
var float doubleBottomLevel = na
var int todayStart = na
var bool isNewDay = false
// Step 1: Identify Swing Highs/Lows
swingHigh = ta.pivothigh(high, leftBars, rightBars)
swingLow = ta.pivotlow(low, leftBars, rightBars)
// Today's premarket start (04:00 AM ET)
if dayofmonth != dayofmonth
todayStart := timestamp(syminfo.timezone, year, month, dayofmonth, 4, 0, 0)
isNewDay := true
else
isNewDay := false
// Clear arrays and reset flags only once at premarket start
if isNewDay and time >= todayStart
array.clear(resistanceLevels)
array.clear(supportLevels)
array.clear(resistanceCounts)
array.clear(supportCounts)
array.clear(resLines)
array.clear(supLines)
hasDoubleTop := false
hasDoubleBottom := false
doubleTopLevel := na
doubleBottomLevel := na
// Add new swings and check for identical peaks
if not na(swingHigh) and time >= todayStart
bool isEqualHigh = false
int peakIndex = -1
float prevLevel = na // Declare prevLevel with initial value
if array.size(resistanceLevels) > 0
for i = 0 to array.size(resistanceLevels) - 1
prevLevel := array.get(resistanceLevels, i)
if math.abs(swingHigh - prevLevel) <= tolerance
isEqualHigh := true
peakIndex := i
break
if isEqualHigh and peakIndex >= 0
array.set(resistanceCounts, peakIndex, array.get(resistanceCounts, peakIndex) + 1)
if array.get(resistanceCounts, peakIndex) >= maxPeaks
hasDoubleTop := true
doubleTopLevel := prevLevel
else
array.push(resistanceLevels, swingHigh)
array.push(resistanceCounts, 1)
line newResLine = line.new(bar_index - rightBars, swingHigh, bar_index, swingHigh, color=color.red, width=2, extend=extend.right)
array.push(resLines, newResLine)
if not na(swingLow) and time >= todayStart
bool isEqualLow = false
int peakIndex = -1
float prevLevel = na // Declare prevLevel with initial value
if array.size(supportLevels) > 0
for i = 0 to array.size(supportLevels) - 1
prevLevel := array.get(supportLevels, i)
if math.abs(swingLow - prevLevel) <= tolerance
isEqualLow := true
peakIndex := i
break
if isEqualLow and peakIndex >= 0
array.set(supportCounts, peakIndex, array.get(supportCounts, peakIndex) + 1)
if array.get(supportCounts, peakIndex) >= maxPeaks
hasDoubleBottom := true
doubleBottomLevel := prevLevel
else
array.push(supportLevels, swingLow)
array.push(supportCounts, 1)
line newSupLine = line.new(bar_index - rightBars, swingLow, bar_index, swingLow, color=color.green, width=2, extend=extend.right)
array.push(supLines, newSupLine)
// Monitor and remove broken levels/lines; reset pattern if the equal level breaks
if array.size(resistanceLevels) > 0
for i = array.size(resistanceLevels) - 1 to 0
float level = array.get(resistanceLevels, i)
if close > level
line.delete(array.get(resLines, i))
array.remove(resLines, i)
array.remove(resistanceLevels, i)
array.remove(resistanceCounts, i)
if level == doubleTopLevel
hasDoubleTop := false
doubleTopLevel := na
if array.size(supportLevels) > 0
for i = array.size(supportLevels) - 1 to 0
float level = array.get(supportLevels, i)
if close < level
line.delete(array.get(supLines, i))
array.remove(supLines, i)
array.remove(supportLevels, i)
array.remove(supportCounts, i)
if level == doubleBottomLevel
hasDoubleBottom := false
doubleBottomLevel := na
// Limit arrays (after removals)
if array.size(resistanceLevels) > 10
line oldLine = array.shift(resLines)
line.delete(oldLine)
array.shift(resistanceLevels)
array.shift(resistanceCounts)
if array.size(supportLevels) > 10
line oldLine = array.shift(supLines)
line.delete(oldLine)
array.shift(supportLevels)
array.shift(supportCounts)
// Pattern Signal: 1 if any pattern with maxPeaks is active and unbroken
patternSignal = (hasDoubleTop or hasDoubleBottom) ? 1 : 0
// New: Nearest Double Level Price
var float nearestDoubleLevel = na
if hasDoubleTop and not na(doubleTopLevel)
nearestDoubleLevel := doubleTopLevel
if hasDoubleBottom and not na(doubleBottomLevel)
nearestDoubleLevel := na(nearestDoubleLevel) ? doubleBottomLevel : (math.abs(close - doubleBottomLevel) < math.abs(close - nearestDoubleLevel) ? doubleBottomLevel : nearestDoubleLevel)
// New: Distance to Nearest Level (using ATR for normalization)
var float atr = ta.atr(atrLength)
var float distanceNormalizedATR = na
if not na(nearestDoubleLevel) and not na(atr) and atr > 0
distanceNormalizedATR := math.abs(close - nearestDoubleLevel) / atr
// Optional Bounce Signal (for reference)
bounceSignal = 0
if array.size(resistanceLevels) > 0
for i = 0 to array.size(resistanceLevels) - 1
float level = array.get(resistanceLevels, i)
if low <= level and high >= level and close < level
bounceSignal := 1
if array.size(supportLevels) > 0
for i = 0 to array.size(supportLevels) - 1
float level = array.get(supportLevels, i)
if high >= level and low <= level and close > level
bounceSignal := 1
// Outputs
plot(patternSignal, title="Pattern Signal", color=patternSignal == 1 ? color.purple : na, style=plot.style_circles)
plot(bounceSignal, title="Bounce Signal", color=bounceSignal == 1 ? color.yellow : na, style=plot.style_circles)
plot(nearestDoubleLevel, title="Nearest Double Level Price", color=color.orange)
plot(distanceNormalizedATR, title="Normalized Distance (ATR)", color=color.green)
bgcolor(patternSignal == 1 ? color.new(color.purple, 80) : na)
if patternSignal == 1 and barstate.isconfirmed
alert("Double Pattern detected on " + syminfo.ticker + " at " + str.tostring(close), alert.freq_once_per_bar_close)
if barstate.islast
var table infoTable = table.new(position.top_right, 1, 4, bgcolor=color.new(color.black, 50))
table.cell(infoTable, 0, 0, "Pattern: " + str.tostring(patternSignal), bgcolor=patternSignal == 1 ? color.purple : color.gray)
table.cell(infoTable, 0, 1, "Bounce: " + str.tostring(bounceSignal), bgcolor=bounceSignal == 1 ? color.yellow : color.gray)
table.cell(infoTable, 0, 2, "Level: " + str.tostring(nearestDoubleLevel, "#.##"), bgcolor=color.orange)
table.cell(infoTable, 0, 3, "ATR Dist: " + str.tostring(distanceNormalizedATR, "#.##"), bgcolor=color.green)
NOK Basket (Equal-Weighted)Measures the Norwegian crown's relative value to a basket of other currencies: EUR, USD, GBP, SEK AND DKK.
Anchored VWAP (Triple) MYRAXESAnchored VWAP Triple Indicator
The Anchored VWAP Triple indicator is a powerful tool for technical analysis, allowing traders to plot three customizable anchored Volume Weighted Average Price (VWAP) lines on a chart. Unlike traditional VWAP, which resets daily, this indicator lets you anchor each VWAP to a specific date and time, providing a unique perspective on price action relative to key market events.
Features
Three Independent VWAPs: Plot up to three VWAP lines, each anchored to a user-defined date and time.
Customizable Inputs: Set the year, month, day, hour, and minute for each VWAP anchor point. Choose distinct colors for easy identification.
Pure Anchored Design: VWAP lines start only from the anchor point, with no pre-anchor extensions, ensuring a clean and focused analysis.
Debug Mode: Optional display of hour and minute for troubleshooting or educational purposes.
Default Settings: Pre-configured with practical defaults (e.g., September 2025 dates) for immediate use.
How to Use
Add the indicator to your TradingView chart.
Adjust the anchor dates and times for each VWAP (VWAP 1, VWAP 2, VWAP 3) via the input settings.
Select custom colors for each VWAP line to differentiate them on the chart.
Enable Debug Mode if needed to verify time alignment.
Analyze price movements relative to the anchored VWAPs to identify support, resistance, or trend shifts.
Benefits
Ideal for swing traders and long-term analysts who need to anchor VWAP to significant price levels or events.
Enhances decision-making by comparing multiple VWAPs from different anchor points.
Fully compatible with TradingView’s Pine Script v6 for smooth performance.
This indicator is perfect for traders looking to deepen their market analysis with a flexible, multi-VWAP approach. Share your feedback or custom setups in the comments!
Quadro Volume Profile [BigBeluga]🔵 OVERVIEW
The Quadro Volume Profile is a precision-engineered volume profiling tool that segments market activity into four distinct quadrants surrounding the current price. By separating bullish and bearish volume above and below the current price, it helps traders identify dominant forces and high-interest price zones with ease. Each quadrant includes label annotations showing total volume and its share of overall activity — delivering powerful insights into the market’s internal structure.
🔵 CONCEPTS
Four-Quadrant Volume Distribution : Volume is separated into Buy and Sell profiles both above and below the current price.
Directional Volume Logic : Bullish and bearish candle volume is allocated to specific bins, creating color-coded volume stacks.
Dynamic PoC Detection : Point of Control (PoC) levels are calculated per quadrant and optionally displayed.
Lookback-Based Anchoring : The volume histogram is anchored to a fixed lookback window, ensuring consistency and historical context.
Label-Based Analytics : Each quadrant displays a labeled breakdown of direction, total volume, and percentage weight of total activity.
🔵 FEATURES
Four separate volume profiles:
Upper Left: Bearish volume (Sell Quad above price)
Upper Right: Bullish volume (Buy Quad above price)
Lower Left: Bullish volume (Buy Quad below price)
Lower Right: Bearish volume (Sell Quad below price)
Live Labels for Each Quad:
Displays BUY or SELL direction
Shows total volume per quadrant (e.g. 607.49K)
Displays percent share of total quad volume (e.g. 18.87%)
Toggle visibility for each profile and each Point of Control (PoC) dashed PoC lines with volume annotations
Adjustable calculation period (lookBack), number of bins, and horizontal offset
Color gradient intensity represents volume strength per bin
Auto-cleaning visuals to keep the chart uncluttered
Gradient color control for Buy and Sell volumes
Clean midline split between upper and lower quadrants
🔵 HOW TO USE
Select your desired calculation period (default: 200 bars) to define the range for volume analysis.
Adjust the bins parameter for more or less resolution in volume distribution.
Toggle each quadrant on/off depending on your preference using the settings panel:
“Upper Sell Quad” – shows bearish volume above current price (left)
“Upper Buy Quad” – shows bullish volume above current price (right)
“Lower Buy Quad” – shows bullish volume below current price (left)
“Lower Sell Quad” – shows bearish volume below current price (right)
Enable or disable PoC lines for each quad to highlight where volume peaked.
Use the gradient coloring to identify volume imbalances — sharp differences between opposing quads often indicate key zones of rejection or breakout.
Monitor the midline level which splits the four quadrants — it serves as a psychological pivot zone.
🔵 CONCLUSION
The Quadro Volume Profile offers a powerful and visually intuitive way to dissect market activity around price. By splitting volume into four quadrants, traders can better interpret order flow, identify dominant volume zones, and spot potential reversals or continuation setups. Whether you're trading breakouts, liquidity sweeps, or range-bound behavior — this tool adds a structured layer of volume context to your charting workflow.
Global M2 Money SupplyThis indicator calculates and plots an aggregated estimate of the Global M2 money supply, expressed in U.S. dollar terms. It combines M2 data from major economies and regions—including the U.S., Eurozone, Canada, the U.K., Switzerland, China, Japan, India, Brazil, and others—and adjusts each by its respective FX rate to USD. By summing these series, the script provides a broad view of worldwide liquidity conditions in one line.
A user-defined offset in days allows you to shift the global M2 line forward or backward, making it easier to visually compare liquidity trends against asset prices such as Bitcoin, gold, or equities. This tool is designed for traders and macro observers who want to study how global money supply growth or contraction correlates with financial markets over time.
이 지표는 전 세계 주요 국가와 지역의 M2 통화량을 달러 기준으로 합산하여 글로벌 유동성 지표로 보여줍니다. 미국, 유로존, 캐나다, 영국, 스위스, 중국, 일본, 인도, 브라질 등 여러 지역의 M2 데이터를 각 통화의 환율(USD 환산)로 조정한 뒤 합산해 하나의 흐름으로 표현합니다. 이를 통해 글로벌 차원의 통화 공급 변화를 한눈에 파악할 수 있습니다.
또한 사용자가 지정한 일 단위 오프셋 기능을 통해 글로벌 M2 라인을 앞뒤로 이동시켜, 비트코인·금·주식 등 다양한 자산 가격과의 시차적 관계를 직관적으로 비교할 수 있습니다. 거시경제 환경과 자산시장 간의 상관성을 연구하거나 시장 유동성 추이를 모니터링하려는 투자자에게 유용한 도구입니다.
Gold Lagging (N days)This indicator overlays the price of gold (XAUUSD) on any chart with a customizable lag in days. You can choose the price source (open, high, low, close, hlc3, ohlc4), shift the series by a set number of daily bars, and optionally normalize the values so that the first visible bar equals 100. The original gold line can also be displayed alongside the lagged series for direct comparison.
It is especially useful for analyzing delayed correlations between gold and other assets, observing shifts in safe-haven demand, or testing hypotheses about lagging market reactions. Since the lag is calculated on daily data, it remains consistent even if applied on intraday charts, while the indicator itself can be plotted on a separate price scale for clarity.
이 지표는 금(XAUUSD) 가격을 원하는 차트 위에 N일 지연된 형태로 표시합니다. 가격 소스(시가, 고가, 저가, 종가, hlc3, ohlc4)를 선택할 수 있으며, 지정한 일 수만큼 시리즈를 뒤로 이동시킬 수 있습니다. 또한 첫 값 기준으로 100에 맞춰 정규화하거나, 원래 금 가격선을 함께 표시해 비교할 수도 있습니다.
금과 다른 자산 간의 지연 상관관계를 분석하거나 안전자산 수요 변화를 관찰할 때 유용하며, 시장 반응의 시차 효과를 검증하는 데에도 활용할 수 있습니다. 지연은 일봉 데이터 기준으로 계산되므로 단기 차트에 적용해도 일 단위 기준이 유지되며, 별도의 가격 스케일에 표시되어 가독성을 높일 수 있습니다.
VWAP Exhaustion Bars - HyruVWAP Exhaustion Bars
Quick visual spotting of market exhaustion levels with color-coded RSI bars and VWAP bands.
What it does:
Colors candles based on RSI exhaustion levels (5 red shades for overbought, 4 green for oversold)
Shows rolling VWAP with standard deviation bands
Drops triangle alerts when price hits the bands - red for resistance, green for support
Built-in alerts for extreme levels and band touches
Perfect for:
Scalping reversals at exhaustion points
Identifying potential bounce zones
Quick visual confirmation of overbought/oversold conditions
Clean, fast, and gets straight to the point. No clutter, just actionable signals when you need them most.
Default settings work great, but tweak the RSI length and thresholds to match your trading style.
Multi-Timeframe Sweep IndicatorsLiquidity Sweeps: Identify when price sweeps stops above/below key levels
Breakout Confirmation: Confirm breakouts across multiple timeframes
Entry Timing: Use lower timeframe sweeps for precise entries
Risk Management: Higher timeframe sweeps may indicate stronger moves
The indicator works best when combined with other analysis techniques like support/resistance levels, volume analysis, and market structure.
Double Top/Bottom Screener with ATR otential Issues in the Latest Script
Based on the code and your previous feedback, here are possible mistakes:
Syntax or Compilation Error:
The script might have a typo or incomplete logic, especially with the new nearestDoubleLevel and distanceNormalizedATR additions.
Check: The table definition in the if barstate.islast block has 4 columns defined but tries to access a 5th with table.cell(infoTable, 0, 4, ...), which causes an "index out of bounds" error. This is a clear mistake.
Distance or Level Calculation:
If "Dist: NaN%" or "Level: NaN" appears, it might indicate that doubleTopLevel or doubleBottomLevel isn’t being set correctly, possibly due to the tolerance or array logic.
Check: The ATR-normalized distance (distanceNormalizedATR) might fail if atr is na due to insufficient bars.
Screener Column Issue:
The new columns ("Nearest Double Level Price" and "Normalized Distance (ATR)") might not display or sort correctly in the Pine Screener due to plotting or naming conflicts.
Price–MA Separation (Z-Score)Price–MA Separation (Z-Score + Shading)
This indicator measures how far price is from a chosen moving average and shows it in a separate pane.
It helps traders quickly spot overextended moves and mean-reversion opportunities.
⸻
What it does
• Calculates the separation between price and a moving average (MA):
• In Points (Price − MA)
• In Percent ((Price / MA − 1) × 100%)
• Converts that separation into a Z-Score (statistical measure of deviation):
• Z = (Separation − Mean) ÷ StdDev
• Highlights when price is unusually far from the MA relative to its recent history.
⸻
Visuals
• Histogram bars:
• Green = above the MA,
• Orange = below the MA.
• Intensity increases with larger Z-Scores.
• Zero line: red baseline (price = MA).
• Z threshold lines:
• +T1 = light red (mild overbought)
• +T2 = dark red (strong overbought)
• −T1 = light green (mild oversold)
• −T2 = dark green (strong oversold)
• Default thresholds: ±1 and ±2.
⸻
Settings
• MA Type & Length: Choose between SMA, EMA, WMA, VWMA, or SMMA (RMA).
• Units: Show separation in Points or Percent.
• Plot Mode:
• Raw = distance in points/percent.
• Z-Score = standardized deviation (default).
• Absolute Mode: Show only magnitude (ignore direction).
• Smoothing: Overlay a smoothed line on the histogram.
• Z-Bands: Visual guides at ± thresholds.
⸻
How to use
• Look for large positive Z-Scores (red zones): price may be stretched far above its MA.
• Look for large negative Z-Scores (green zones): price may be stretched far below its MA.
• Use as a mean-reversion signal or to confirm trend exhaustion.
• Works well with:
• Swing entries/exits
• Overbought/oversold conditions
• Filtering other signals (RSI, MACD, VWAP)
⸻
Notes
• Z-Scores depend on the lookback window (default = 100 bars). Adjust for shorter/longer memory.
• Strong deviations don’t always mean reversal—combine with other tools for confirmation.
• Not financial advice. Always manage risk.
⸻
Try adjusting the MA length and Z-Score thresholds to fit your trading style.
RSI(7) + MACD ZoneTitle: RSI(7) + MACD Zone Combo
Description:
This indicator combines RSI (7) and MACD (12,26,9) into a single panel with a unified scale for easier analysis.
RSI (7) is plotted in white and automatically turns red when the market reaches overbought (>70) or oversold (<30) conditions.
MACD is normalized to align with the RSI scale (0–100).
A value of 50 represents MACD = 0.
Above 50 (teal) indicates positive momentum.
Below 50 (red) indicates negative momentum.
This combination allows traders to quickly identify when short-term RSI conditions align with overall momentum shifts from MACD.
How to use:
Look for potential buy opportunities when RSI is oversold (<30) and MACD is above 50 (positive momentum).
Look for potential sell opportunities when RSI is overbought (>70) and MACD is below 50 (negative momentum).
Use in conjunction with price action and risk management — not as a standalone signal.
Phân tích Đa Khung Thời gian và Checklist
Multi-Timeframe Analysis and Checklist for EG System
It's a combination of two indicators: manual market trend analysis and a checklist for the EG System
VIX BanditThis is a momentum indicator that identifies potential VIX bottoms by using seven configurable Williams %R oscillators simultaneously.
Green dots🟢appear below the bar when all %R series agree the VIX is extremely oversold.
Fuchsia dots🟣appear above the bar when VIX reverts to its long-term average (an EMA).
I hope this helps you spot moments of maximum optimism and trade the subsequent panic, somehow.
OPEN = LOW + VWAP + Volume SurgeTradingView Pine Script that scans for OPEN = LOW, confirms VWAP support, and checks for volume surge — tailored for your intraday breakout strategy
Bitcoin Lagging (N Days)This indicator overlays Bitcoin’s price on any chart with a user-defined N-day lag. You can select the BTC symbol and timeframe (daily recommended), choose which price source to use (open, high, low, close, hlc3, ohlc4), and shift the series by a chosen number of days. An option to normalize the series to 100 at the first visible value is also available, along with the ability to display the original BTC line for comparison.
It is designed for traders and researchers who want to test lagging relationships between Bitcoin and other assets, observe correlation changes, or visualize how BTC’s past prices might align with current market movements. The lagging is calculated based on daily candles, so even if applied on intraday charts, the shift remains in daily units.
이 지표는 비트코인 가격을 원하는 차트 위에 N일 지연된 상태로 표시해 줍니다. 심볼과 타임프레임(일봉 권장)을 선택할 수 있으며, 가격 소스(시가, 고가, 저가, 종가, hlc3, ohlc4)도 설정 가능합니다. 또한 시리즈를 첫 값 기준으로 100에 맞춰 정규화하거나, 원래의 비트코인 가격선을 함께 표시할 수도 있습니다.
비트코인과 다른 자산 간의 시차 효과를 분석하거나 상관관계 변화를 관찰할 때 유용하게 활용할 수 있습니다. 지연은 일봉 기준으로 계산되므로, 분·시간 차트에 적용해도 항상 일 단위로 반영됩니다.
ATR Enhanced [DCAUT]█ ATR Enhanced
📊 OVERVIEW
Standard ATR uses only RMA smoothing, while ATR Enhanced provides 20+ professional smoothing algorithms , offering precise volatility measurement solutions for different trading scenarios and market environments.
💡 CORE VALUE
- 20+ algorithm choices : SMA, EMA, RMA, WMA, HMA, T3, KAMA, FRAMA, Kalman Filter, etc.
📋 PARAMETER SETUP
ATR Length : Calculation period (default: 14)
Moving Average Type : Choose the most suitable smoothing method from 20+ algorithms
🎨 COLOR CODING
Green : Rising volatility
Red : Falling volatility
CFR - Candle Formation RatioDescription
This indicator is designed to detect candles with small bodies and significant wick-to-body ratios, often useful for identifying doji-like structures and potential accumulation areas.
Features
Filter candles by maximum body size (% of the total candle range).
Require that wicks are at least X times larger than the body.
Define the position of the body within the candle (e.g., body must be between 40% and 60% of the candle height).
Visual output: a single arrow marker when conditions are met.
Fully customizable marker color and size.
⚠️ Note: The settings of this version are currently in Turkish. An English version of the settings will be released in the future.
Liquidity+FVG+OB Strategy (v6)How the strategy works (summary)
Entry Long when a Bullish FVG is detected (optionally requires a recent Bullish OB).
Entry Short when a Bearish FVG is detected (optionally requires a recent Bearish OB).
Stop Loss and Take Profit are placed using ATR multiples (configurable).
Position sizing is fixed contract/lot size (configurable).
You can require OB confirmation (within ob_confirm_window bars).
Alerts still exist and visuals are preserved.
Liquidity + FVG + OB Markings (Fixed v6)This indicator is built for price-action traders.
It automatically finds and plots three key structures on your chart:
Liquidity Levels – swing highs & lows that often get targeted by price.
Fair-Value Gaps (FVG) – inefficient price gaps between candles.
Order-Blocks (OB) – zones created by strong, high-volume impulsive candles.
It also provides alerts and a small information table so you can quickly gauge the current market context.
Nadaraya-Watson Multi-TF DashboardThis script is a Multi-Timeframe Flip State Dashboard based on Nadaraya-Watson: Rational Quadratic Kernel (Non-Repainting) indicator. It visualizes trend "flip" states across up to 8 custom timeframes using a consistent, non-repainting methodology. Built on 1-minute data, each timeframe row in the table updates only after its bar fully closes, ensuring accuracy and eliminating repainting issues.
Key features:
✅ Based on the Nadaraya-Watson Rational Quadratic Kernel, used to estimate trend direction
🧠 Each timeframe uses the same base 1-minute data for consistency across resolutions
🔄 Flip state detection is defined by slope reversals in the kernel regression
🧱 Fully supports non-repainting, close-confirmed states using lookahead=off
🧮 Configurable lookback window, kernel weighting, lag, and timeframes
🎨 Visual dashboard plots each TF’s state as a colored cell (green for bullish, red for bearish)
🛠️ Includes inline plots and debug traces to help visualize regression and flip logic
This dashboard is ideal for traders who want a compact visual overview of confirmed trend shifts across multiple timeframes, all using a mathematically grounded, TF-consistent model.