RSI: Evolved [DAFE]RSI: Evolved : The Ultimate Momentum Intelligence Engine
30+ RSI Engines. 15+ Zero-Lag Smoothers. The Revolutionary Quantum Horizon. This is Not Just an RSI. This is the Evolution of Momentum.
█ PHILOSOPHY: BEYOND THE OSCILLATOR, INTO THE NEXUS
The standard Relative Strength Index is a relic. It is a brilliant, timeless concept trapped in a rigid, one-dimensional formula developed in the 1970s. It assumes all market momentum is uniform, that all volatility is equal, and that a single mathematical lens is sufficient to view the infinitely complex character of modern markets. It is not.
RSI: Evolved was not created to be another RSI. It was engineered to be the definitive evolution of momentum analysis. This is not an indicator; it is a powerful, interactive research environment. It is a laboratory where you, the trader, can move beyond the static "one-size-fits-all" approach and forge a momentum oscillator that is perfectly adapted to the unique physics of your market, timeframe, and trading style.
This suite deconstructs the very DNA of the RSI, rebuilding it with a library of over 30 distinct, mathematically diverse calculation engines . From timeless classics and exotic variations to proprietary DAFE quantum models, this suite provides an unparalleled arsenal for quantifying the unseen forces of market momentum.
█ THE EVOLUTION: WHAT MAKES THIS UNLIKE ANY OTHER RSI?
This is not just a collection of features; it is a seamlessly integrated, multi-layered analytical system. It stands in a class of its own for several key reasons:
The 30+ Algorithm Core: At its heart is a library of over 30 unique RSI calculation engines. You can now choose an engine based on its mathematical properties—whether you need the zero-lag responsiveness of a Hull RSI, the time-warping capability of a Laguerre RSI, or the predictive power of a DAFE Quantum Fusion RSI.
Advanced Post-Processing: After the RSI is calculated, it passes through a multi-stage refinement process. First, choose from over 15+ professional-grade smoothing algorithms to create a crystal-clear signal. Then, activate the intelligent Filter Module to scale the RSI's output based on trend, volatility, or momentum regimes.
The Quantum Horizon & Temporal Wave: This is a revolutionary leap in data visualization. The indicator projects the historical momentum waves from higher timeframes directly onto your main price chart as a futuristic, holographic overlay. You can now see the alignment (or divergence) of macro momentum without ever looking away from price action. This is multi-timeframe analysis evolved into an art form.
Dynamic, Volatility-Adaptive Zones: Static 70/30 levels are obsolete. Evolved's "Quantum Zones" are alive; they "breathe" with market volatility. They automatically widen during powerful trends to keep you in a winning trade and tighten during choppy consolidation to help you catch reversals with greater precision.
Comprehensive Analytical Modules: This is a full suite of institutional-grade tools, including a powerful regular and hidden Divergence Engine , a multi-timeframe Consensus Dashboard , and dynamic RSI Bands (Bollinger, Keltner, etc.) plotted directly on the oscillator.
█ THE QUANTUM HORIZON & TEMPORAL WAVE: SEEING MOMENTUM IN 4D
This groundbreaking feature fundamentally changes how you interact with multi-timeframe momentum data. The Quantum Horizon is a dedicated visualization module that projects up to three "Temporal Waves" directly onto your main price chart. Each wave is a historical representation of a momentum oscillator (RSI, MFI, or Stoch RSI) pulled from a higher timeframe of your choice. Instead of flipping between charts or cluttering your screen with multiple indicators, you get an immediate, intuitive, and aesthetically stunning view of the market's complete momentum structure.
Each Temporal Wave is a self-contained universe, rendered as a glowing, flowing line within its own gridded channel. This channel is not just for show; it represents the 0-100 scale of the oscillator, with key 30, 50, and 70 levels marked for reference. You can see the history of momentum, its peaks, its troughs, and its crossovers with its own signal line. This allows you to visually identify macro divergences, trend alignment, and exhaustion points on your primary trading chart, transforming your analysis from a fragmented process into a single, unified experience. This is no longer just an indicator; it is a true Heads-Up Display for the flow of time and momentum.
█ THE ARSENAL: A DEEP DIVE INTO THE RSI & SMOOTHING ENGINES
This is your library of mathematical DNA. Understanding your tools is the first step to mastery. The 30+ RSI types are grouped into distinct families, each with a unique philosophy.
THE RSI ENGINE FAMILIES
The Classics (Wilder's, Cutler's, EMA, WMA): These are the foundational building blocks of momentum analysis. They provide a reliable, time-tested baseline. Wilder's uses the RMA for a unique smoothing characteristic, while Cutler's uses the SMA for a more direct, arithmetic average of gains and losses. The EMA and WMA versions offer increased responsiveness by weighting recent price action more heavily.
The Low-Lag Warriors (DEMA, TEMA, Hull, ZLEMA): This family is engineered specifically to combat the inherent lag of classical averages. The Double and Triple EMA (DEMA, TEMA) use a composite of multiple EMAs to reduce latency. The Zero-Lag EMA (ZLEMA) attempts to remove lag by adjusting the source price with its own past data. The Hull RSI is a standout, using a weighted moving average calculation to achieve a remarkable balance of extreme smoothness and near-zero lag, making it ideal for scalping.
The Exotics (Laguerre, Connors, Fisher, KAMA): These engines employ advanced mathematical concepts to view momentum through a different lens. The Laguerre RSI , based on John Ehlers' work, uses a time-warping, non-linear filter that can be extremely responsive to changes in trend. The Fisher Transform RSI normalizes the output to a Gaussian distribution, making peaks and troughs sharper and more defined for clearer signals. The KAMA Adaptive RSI is a "smart" algorithm that automatically slows its calculation in choppy markets and speeds it up in strong trends.
The Volume-Based (Volume-Weighted, MFI, VWAP-Weighted): This family infuses price momentum with volume data, providing a measure of conviction. They answer not just "how fast is price moving?" but "how much participation is behind the move?". The Money Flow RSI (MFI) is a classic, while the Volume-Weighted and VWAP-Weighted versions directly incorporate volume into the gain/loss calculation, giving more weight to high-volume bars.
The DAFE Proprietary Engines (The "God Mode" Algos): The crown jewels of the Laboratory, these are custom-built, proprietary algorithms you will not find anywhere else.
DAFE Quantum Fusion: This engine calculates RSI on three harmonic timeframes simultaneously (based on the Golden Ratio) and "superimposes" them using a dynamic weighting system based on volume and momentum confidence. It is the most robust and balanced all-rounder.
DAFE Kinetic Energy: Based on the physics principle that Momentum = Mass × Velocity. Standard RSI only sees Velocity (price change). Kinetic RSI weights every price move by Relative Volume (Mass), measuring the true "force" of the market.
DAFE Spectral: This engine uses concepts from Digital Signal Processing to analyze the frequency of price moves. It automatically differentiates between the "Signal" (the underlying trend) and the "Noise" (the chop), and adapts its calculation speed accordingly.
DAFE Entropy Flow: A unique engine that uses Information Theory to measure market "disorder." In chaotic, high-entropy markets, it automatically dampens its own signal to avoid whipsaws. In orderly, low-entropy trends, it sharpens its signal to be more responsive.
THE POST-SMOOTHING FILTERS
After your primary RSI is calculated, you can pass it through one of over 15 advanced filters for unparalleled clarity.
Low-Lag (Hull, DEMA, TEMA): Ideal for responsive smoothing that tracks the raw RSI closely.
Adaptive (KAMA, VIDYA): Perfect for smart, regime-aware smoothing that is slow in chop and fast in trends.
DSP & Scientific (SuperSmoother, Butterworth, Gaussian, Jurik-Style): The pinnacle of signal processing. These filters provide the absolute cleanest signal with minimal lag, leveraging advanced digital signal processing techniques to surgically remove noise.
█ THE ANALYTICAL MODULES: BEYOND THE LINE
Dynamic Zones: Your overbought/oversold levels (e.g., 70/30) are no longer static lines. They are living, breathing zones that respond to market volatility. They automatically widen during powerful, high-volatility trends to prevent you from selling a strong uptrend too early. Conversely, they tighten during low-volatility consolidation, allowing you to catch smaller, mean-reverting moves with greater precision. This is a crucial evolution for trading in modern, dynamic markets.
Divergence Engine: The automated engine works tirelessly in the background to detect critical disconnects between price and momentum. It automatically identifies and plots both Regular Divergences (which often signal major trend reversals) and Hidden Divergences (which often signal trend continuations after a pullback) with clear on-chart and in-pane markers and lines.
MTF Dashboard: Context is everything. This module provides an instant read on the momentum across three higher timeframes of your choice. The "Consensus" reading tells you if all timeframes are aligned ("ALL BULL" or "ALL BEAR"), providing powerful contextual confirmation for your trades and helping you avoid taking signals that go against the macro flow.
RSI Bands: This module applies a full-fledged band methodology (Bollinger Bands, Keltner Channels, etc.) directly to the RSI line itself. A pierce of the upper or lower band is a powerful sign of a statistical extreme, often preceding a sharp reversion back to the mean. A "squeeze" in the RSI bands often precedes an explosive move in momentum.
Signal Line & Histogram: The fast-moving RSI line is paired with a slower, smoother Signal Line of your choice. Crossovers between these two lines can be used as effective entry/exit triggers that are often more reliable than simple overbought/oversold levels. The histogram visually represents the momentum (the velocity and acceleration) of the RSI itself, turning from light to dark green in a strengthening uptrend, for example.
█ DEVELOPMENT PHILOSOPHY
RSI: Evolved was forged from a single, guiding principle: momentum is not a fixed property; it is a dynamic, multi-faceted force with a unique character in every market. This tool was designed for the trader who is no longer satisfied with a one-size-fits-all indicator. It is for the analyst, the tinkerer, the scientist—the individual who seeks to deconstruct, understand, and master the hidden physics of market momentum. This is a tool for forging your own alpha, not just following a lagging line.
RSI: Evolved is designed to give you that patience and discipline, providing a crystal-clear, multi-dimensional view of momentum so you can act with precision when the perfect setup finally arrives.
█ DISCLAIMER AND BEST PRACTICES
THIS IS AN ADVANCED ANALYTICAL TOOL: This indicator provides intelligence on momentum, not financial advice. It should be used as a core component of a complete trading strategy.
RISK MANAGEMENT IS PARAMOUNT: All trading involves substantial risk. Never risk more capital than you are prepared to lose.
START WITH A ROBUST BASE: The "DAFE Quantum Fusion" engine with the "SuperSmoother" is an exceptionally powerful and well-balanced starting point for most markets.
USE CONFLUENCE: The highest probability signals occur when multiple modules agree. For example: a Regular Bullish Divergence, as the RSI crosses up from an Extreme Oversold Dynamic Zone, while the Quantum Horizon shows the higher timeframes are also starting to turn up.
"The hard part is not making the decision to buy or sell, but having the patience and discipline to wait for the right setup."
— Mark Weinstein
Taking you to school. - Dskyz, Trade with Anticipation. Trade with Strength. Trade with RSI: Evolved
In den Scripts nach "mtf" suchen
Directional Movement Index + MTF TableHey guys, just sharing a modified DMI-ADX indicator. The main addition is the Multi-Timeframe functionality, which helps filter out noise by showing higher TF trends. Credits to TradingView for the original source code. Hope you find it useful!
Custom Dividers [louis]Custom Dividers is a streamlined utility designed for Multi-Timeframe Analysis (MTF). It allows you to visualize higher timeframe structures directly on lower timeframe charts by drawing infinite vertical lines at the open of new periods.
Unlike standard grid lines and other divider indicators, this has custom inputs, giving you complete control over non-standard timeframes (e.g., 90-minute cycles, 6-hour blocks, or 2-day periods).
🔑 Key Features
- 4 Independent Timeframe Slots: Configure up to four different vertical dividers simultaneously.
- Custom Minute Inputs (TF 1 & TF 2): Instead of restricting you to a dropdown, the first two slots allow you to input any integer for minutes.
Example: Set 90 for 90-minute cycle dividers.
Example: Set 360 for 6-hour dividers.
- Standard Timeframe Selectors (TF 3 & TF 4): Traditional dropdowns for standard periods like Daily (D), Weekly (W), or Monthly (M).
- Visual Customization:
Lines: Uses line.new() drawing logic to ensure dividers stretch infinitely from top to bottom, regardless of price scale.
Styles: Select from Solid, Dashed, or Dotted directly in the inputs.
Width & Color: Fully customizable to blend into your chart theme.
⚙️ How to Configure
Go to the Settings (Inputs Tab):
TF 1 & TF 2: Enter the specific number of minutes (e.g., 60 = 1 Hour, 240 = 4 Hours). Toggle the checkbox to Show/Hide.
TF 3 & TF 4: Select the timeframe period from the dropdown. Toggle the checkbox to Show/Hide.
Style: Choose your line style, color, and width.
Note: Since this indicator uses geometric drawings (line.new) to achieve full-height vertical lines, all visual settings (Color, Width, Style) are located in the Inputs Tab, not the Style tab.
SMC Louis 4H-15M V6为了方便你将这个脚本分享到 TradingView 社区或私人收藏,我为你准备了一份中英文对照的专业描述。这份描述突出了脚本的技术核心——**Louis Trading 的 SMC 进场逻辑**。
---
## 📝 脚本描述 / Script Description
### 中文描述:SMC Louis 实战进场辅助工具 (V6版本)
**核心理念:**
本脚本根据 Louis Trading 的 SMC(Smart Money Concepts)交易教学编写,专注于 **4H 趋势过滤 + 15M 结构突破** 的高胜率进场逻辑。它通过自动化的绘图,将复杂的盘面观察简化为清晰的视觉信号。
**主要功能:**
* **多时段趋势追踪**:内置 200 EMA 动态过滤大周期方向,确保你始终顺势交易。
* **自动 BOS (结构突破) 检测**:实时标记市场结构的改变,识别潜在的反转或延续机会。
* **动态 0.715 进场参考线**:当 15M 级别发生 BOS 突破时,脚本自动根据波段高低点计算并绘制 Louis 教学中的 **0.715 黄金回撤位**,无需手动拉斐波那契线。
* **失衡区 (FVG) 视觉化**:自动高亮显示价格快速移动留下的真空区域,帮助识别高概率的订单回踩区。
* **实时仪表盘**:右上角直观显示当前大周期方向与行动建议(等待回踩或反弹)。
**使用说明:**
1. 建议在 **15分钟 (15M)** 周期下使用。
2. 观察仪表盘的趋势方向。
3. 当绿色 **BOS** 出现后,等待价格回踩 **黄色虚线 (0.715)** 且该线位于 **FVG** 区域内时考虑进场。
---
### English Description: SMC Louis Strategy Entry Assistant (V6)
**Core Concept:**
This script is meticulously designed based on the SMC (Smart Money Concepts) methodology taught by Louis Trading. It focuses on the high-probability **4H Trend Filter + 15M Market Structure Break (BOS)** execution workflow. It automates the complex manual charting process into clear, actionable visual cues.
**Key Features:**
* **MTF Trend Filtering**: Integrated 200 EMA helps you stay on the right side of the 4H higher-timeframe trend.
* **Automated BOS Detection**: Real-time identification of Market Structure Breaks (BOS), highlighting potential trend reversals or continuations.
* **Dynamic 0.715 Entry Level**: When a BOS occurs on the 15M timeframe, the script automatically calculates and plots the **0.715 Fibonacci retracement level**—a signature entry point from Louis's strategy.
* **Fair Value Gap (FVG) Visualization**: Automatically highlights price imbalances (FVGs), helping you spot where "Smart Money" is likely to mitigate orders.
* **Live Dashboard**: A clean UI in the top-right corner provides immediate context on trend direction and actionable advice.
**How to Use:**
1. Best used on the **15-Minute (15M)** timeframe.
2. Check the dashboard for the overall trend bias.
3. Wait for a **BOS** label; look for price to retracing into the **Yellow Dashed Line (0.715)**, especially if it aligns with a plotted **FVG box**.
---
### 💡 建议
如果你打算发布这个脚本,建议在 TradingView 的设置中将“15M 摆动回溯周期”默认设置为 **10-15**,这通常能最准确地过滤掉市场杂讯。
**你想让我为你生成一份专门针对“移动端使用”的简化版界面代码吗?(去掉了复杂的仪表盘,只保留核心线条,适合手机查看)**
EL OJO DE DIOS - FINAL (ORDEN CORREGIDO)//@version=6
indicator("EL OJO DE DIOS - FINAL (ORDEN CORREGIDO)", overlay=true, max_boxes_count=500, max_lines_count=500, max_labels_count=500)
// --- 1. CONFIGURACIÓN ---
grpEMA = "Medias Móviles"
inpShowEMA = input.bool(true, "Mostrar EMAs", group=grpEMA)
inpEMA21 = input.int(21, "EMA 21", minval=1, group=grpEMA)
inpEMA50 = input.int(50, "EMA 50", minval=1, group=grpEMA)
inpEMA200 = input.int(200, "EMA 200", minval=1, group=grpEMA)
grpStrategy = "Estrategia"
inpTrendTF = input.string("Current", "Timeframe Señal", options= , group=grpStrategy)
inpADXFilter = input.bool(true, "Filtro ADX", group=grpStrategy)
inpADXPeriod = input.int(14, "Período ADX", group=grpStrategy)
inpADXLimit = input.int(20, "Límite ADX", group=grpStrategy)
inpRR = input.float(2.0, "Riesgo:Beneficio", group=grpStrategy)
grpVisuals = "Visuales"
inpShowPrevDay = input.bool(true, "Máx/Mín Ayer", group=grpVisuals)
inpShowNY = input.bool(true, "Sesión NY", group=grpVisuals)
// --- 2. VARIABLES ---
var float t1Price = na
var bool t1Bull = false
var bool t1Conf = false
var line slLine = na
var line tpLine = na
// Variables Prev Day
var float pdH = na
var float pdL = na
var line linePDH = na
var line linePDL = na
// Variables Session
var box nySessionBox = na
// --- 3. CÁLCULO ADX MANUAL ---
f_calcADX(_high, _low, _close, _len) =>
// True Range Manual
tr = math.max(_high - _low, math.abs(_high - _close ), math.abs(_low - _close ))
// Directional Movement
up = _high - _high
down = _low - _low
plusDM = (up > down and up > 0) ? up : 0.0
minusDM = (down > up and down > 0) ? down : 0.0
// Smoothed averages
atr = ta.rma(tr, _len)
plus = 100.0 * ta.rma(plusDM, _len) / atr
minus = 100.0 * ta.rma(minusDM, _len) / atr
// DX y ADX
sum = plus + minus
dx = sum == 0 ? 0.0 : 100.0 * math.abs(plus - minus) / sum
adx = ta.rma(dx, _len)
adx
// --- 4. CÁLCULO DE DATOS ---
ema21 = ta.ema(close, inpEMA21)
ema50 = ta.ema(close, inpEMA50)
ema200 = ta.ema(close, inpEMA200)
// MTF Logic
targetTF = inpTrendTF == "Current" ? timeframe.period : inpTrendTF == "15m" ? "15" : "60"
// CORRECCIÓN AQUÍ: Uso de argumentos nominales (gaps=, lookahead=) para evitar errores de orden
f_getSeries(src, tf) =>
tf == timeframe.period ? src : request.security(syminfo.tickerid, tf, src, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off)
tf_close = f_getSeries(close, targetTF)
tf_high = f_getSeries(high, targetTF)
tf_low = f_getSeries(low, targetTF)
tf_ema21 = ta.ema(tf_close, inpEMA21)
tf_ema50 = ta.ema(tf_close, inpEMA50)
// Calcular ADX
float tf_adx = f_calcADX(tf_high, tf_low, tf_close, inpADXPeriod)
// Cruces
bool crossUp = ta.crossover(tf_ema21, tf_ema50)
bool crossDown = ta.crossunder(tf_ema21, tf_ema50)
bool crossSignal = crossUp or crossDown
bool adxOk = inpADXFilter ? tf_adx > inpADXLimit : true
// --- 5. LÓGICA DE SEÑALES ---
if crossSignal and adxOk and barstate.isconfirmed
t1Price := tf_ema21
t1Bull := tf_ema21 > tf_ema50
t1Conf := false
if not na(slLine)
line.delete(slLine)
slLine := na
if not na(tpLine)
line.delete(tpLine)
tpLine := na
label.new(bar_index, high + (ta.atr(14)*0.5), text="CRUCE T1", color=t1Bull ? color.green : color.red, textcolor=color.white, size=size.small)
bool touch = false
if not na(t1Price) and not t1Conf
if t1Bull
touch := low <= t1Price and close >= t1Price
else
touch := high >= t1Price and close <= t1Price
if touch and barstate.isconfirmed
t1Conf := true
float atr = ta.atr(14)
float sl = t1Bull ? low - (atr*0.1) : high + (atr*0.1)
float dist = math.abs(t1Price - sl)
float tp = t1Bull ? t1Price + (dist * inpRR) : t1Price - (dist * inpRR)
label.new(bar_index, t1Price, text="ENTRADA", color=color.yellow, textcolor=color.black, size=size.small)
slLine := line.new(bar_index, sl, bar_index + 15, sl, color=color.red, style=line.style_dashed, width=2)
tpLine := line.new(bar_index, tp, bar_index + 15, tp, color=color.green, style=line.style_dashed, width=2)
// --- 6. GRÁFICO ---
col21 = ema21 > ema21 ? color.teal : color.maroon
col50 = ema50 > ema50 ? color.aqua : color.fuchsia
col200 = ema200 > ema200 ? color.blue : color.red
plot(inpShowEMA ? ema21 : na, "EMA21", color=col21, linewidth=2)
plot(inpShowEMA ? ema50 : na, "EMA50", color=col50, linewidth=2)
plot(inpShowEMA ? ema200 : na, "EMA200", color=col200, linewidth=2)
bgcolor(ema50 > ema200 ? color.new(color.green, 95) : color.new(color.red, 95))
// --- 7. SESIÓN NY ---
isNYSummer = (month(time) == 3 and dayofmonth(time) >= 14) or (month(time) > 3 and month(time) < 11)
hourOffset = isNYSummer ? 4 : 5
nyHour = (hour - hourOffset) % 24
bool isSession = nyHour >= 6 and nyHour < 11
if isSession and inpShowNY
if na(nySessionBox)
nySessionBox := box.new(bar_index, high, bar_index, low, bgcolor=color.new(color.blue, 92), border_color=color.new(color.white, 0))
else
box.set_right(nySessionBox, bar_index)
box.set_top(nySessionBox, math.max(high, box.get_top(nySessionBox)))
box.set_bottom(nySessionBox, math.min(low, box.get_bottom(nySessionBox)))
if not isSession and not na(nySessionBox)
box.delete(nySessionBox)
nySessionBox := na
// --- 8. MÁX/MÍN AYER ---
hCheck = request.security(syminfo.tickerid, "D", high , lookahead=barmerge.lookahead_on)
lCheck = request.security(syminfo.tickerid, "D", low , lookahead=barmerge.lookahead_on)
if not na(hCheck)
pdH := hCheck
if not na(lCheck)
pdL := lCheck
if barstate.islast and inpShowPrevDay
line.delete(linePDH)
line.delete(linePDL)
if not na(pdH)
linePDH := line.new(bar_index - 50, pdH, bar_index, pdH, color=color.green)
if not na(pdL)
linePDL := line.new(bar_index - 50, pdL, bar_index, pdL, color=color.red)
alertcondition(crossSignal, "Cruce T1", "Cruce Tendencia 1")
alertcondition(touch, "Entrada Confirmada", "Entrada Confirmada")
[LJ] RSIM + ICT KillzonesIndicator Summary
This Pine Script indicator is a comprehensive, all-in-one toolkit designed for traders utilizing Inner Circle Trader (ICT) concepts. It visually maps out crucial time-based trading sessions, killzones, and key opening price levels directly on the chart. Alongside the time and price tools, it features a real-time "RSIM" (MTF RSI Monitor) dashboard to track market momentum across multiple timeframes, all while maintaining a lag-free chart through automated drawing cleanup.
Core Functionalities
ICT Killzones & Silver Bullets:
Visually demarcates specific high-probability trading windows—including the Asian, London, and New York (AM & PM) killzones, as well as the UK and US "Silver Bullet" times—using vertical lines and colored background highlights.
Key Opening Price Levels:
Automatically plots horizontal lines for significant opening prices, such as the New York Midnight Open (often used as true day open), CME Open, and NY AM/PM Opens. It also includes Higher Time Frame (HTF) levels for Weekly and Monthly opens.
Session High/Low Tracking:
Actively tracks and draws horizontal price levels for the High and Low of the current day, previous day, and individual Globex, Asian, London, and NY sessions.
Multi-Timeframe RSI Dashboard (RSIM):
An on-chart table that displays the current Relative Strength Index (RSI) values and a live countdown timer ("time to close") for the 5-minute, 15-minute, 1-hour, 4-hour, Daily, and Weekly timeframes.
Lunch "No-Trade-Zone":
Specifically highlights the New York Lunch period, visually warning traders of potential low-volume or erratic price action.
Automated Housekeeping:
A built-in memory management system that automatically deletes drawings (lines and labels) older than a user-defined number of days to prevent chart clutter and performance lag.
Built-in Debug Logger:
An optional on-chart logging table that tracks session triggers and script events, helping traders verify that times and levels are plotting correctly for their selected asset.
ATR Levels - Current Candle Open [MTF]a further improvement from the first version of the script. My intent is to look at 4H ATR levels meanwhile being on 5m or 1m.
Let me know if you have any questions or any suggestions to improve.
Multi-Timeframe Support
Anchor to any timeframe (e.g., 240 for 4H, D for Daily)
Leave blank to use chart's timeframe
ATR Levels
24 configurable levels (0.5 - 12.0 ATR)
4 groups for easy management
Bull color (default: teal) / Bear color (default: orange)
Adjustable line width
Optional level labels
Levels start at current HTF candle open, extend right
Live Extension Display
NOW row shows real-time UP/DN extension in ATR units
Updates as price moves within current HTF candle
Anchor Marker
Line + crosshair at current HTF open
Configurable colors (label bg, text, line)
Adjustable label offset (0-100 bars)
Statistics Table
REACH / REACT / REACT % for levels 0.5-3.0 ATR
Color-coded: green ≥50%, orange 30-50%, red <30%
Position: bottom-right
Size: Normal/Large/Huge
ATR Levels - Previous Candle Open [MTF]a further improvement from the first version of the script. My intent is to look at 4H ATR levels meanwhile being on 5m or 1m.
Let me know if you have any questions or any suggestions to improve
Multi-Timeframe Support
Anchor to any timeframe while viewing on a different chart timeframe
Examples: View 4H ATR levels on 5m chart (set to 240), Daily on 1H (D), etc.
Leave blank to use chart's timeframe
ATR Levels
24 configurable levels from 0.5 to 12.0 ATR (in 0.5 increments)
Organized in 4 groups for easy management
Separate bull/bear colors
Adjustable line width
Optional level labels
Previous Candle Zone
Visual background box showing previous HTF candle's high-low range
Configurable zone color and transparency
Toggle on/off
Extend Levels Setting
0 = Levels end exactly where previous candle closed
-1 = Extend infinitely to the right
1-500 = Extend specific number of bars beyond candle close
Anchor Marker
Horizontal line + vertical crosshair at anchor point
Configurable label background, text color, and line color
Adjustable label offset (0-100 bars)
Line extends to meet the label
Statistics Table
Tracks REACH (times price hit level) and REACT (times price reversed)
REACT % color-coded: green ≥50%, orange 30-50%, red <30%
Based on HTF candle data (100 bars)
Configurable table size (Normal/Large/Huge)
Positioned top-right
Optimized SMC - OB & FVG MTFOB & FVG on different timeframes
Optimized version that can show HTF PDAs on LTF
TEMA_1h_1D_1W_1MTEMA_1h_1D_1W_1M (Multi-Timeframe Triple Exponential Moving Average) indicator on TradingView.
Title: TEMA Multi-Timeframe (1h/1D/1W/1M) - Low Lag Trend
Short Description:
Plots TEMA (Triple Exponential Moving Average) from 1h, Daily, Weekly, and Monthly timeframes onto your current chart for instant, low-lag trend context.
Detailed Description:
Overview
The TEMA_1h_1D_1W_1M indicator is a comprehensive, multi-timeframe (MTF) analysis tool designed to visualize the Triple Exponential Moving Average (TEMA) from higher timeframes (HTF) directly on your current trading chart. By using TEMA instead of a standard EMA, this indicator significantly reduces lag, allowing you to identify trend changes faster without sacrificing trend smoothing.
Key Features
Four Timeframe Integration: Plots TEMA lines for 1-Hour (1h), Daily (1D), Weekly (1W), and Monthly (1M) timeframes.
Multi-Timeframe Compatibility: Displays higher timeframe TEMA lines on lower timeframe charts (e.g., 5m, 15m) without "stair-stepping" artifacts.
Low Lag, High Smoothness: TEMA provides a more responsive trendline than traditional EMAs, aiding in earlier trend detection.
Customizable Lengths: Fully adjustable TEMA lengths for each timeframe (default usually 20, 50, or 200).
Visual Clarity: Each timeframe's TEMA can be colored and styled separately to identify trend alignment at a glance.
Trading Applications
Trend Alignment: Confirm the long-term trend (e.g., Monthly/Weekly TEMA) aligns with the short-term trend (e.g., Hourly TEMA) before entering trades.
Dynamic Support/Resistance: Higher timeframe TEMAs act as robust, dynamic support and resistance levels.
Breakout Confirmation: Use 1h TEMA to confirm trend reversals, while using 1D/1W TEMA to filter out false signals.
Indicator Inputs
TEMA Periods: Separately adjustable lengths for 1h, 1D, 1W, and 1M.
Styling: Toggle visibility, colors, and line thickness for each timeframe.
Disclaimer: Education purpose only. TEMA works best in trending markets and may produce false signals in choppy, ranging markets.
3 MA Smart Money System v6 (No Repaint)✅ INDICATOR SPECIFICATIONS
🎯 Moving Average Type
SMA – Simple Moving Average
EMA – Exponential Moving Average
HMA – Hull Moving Average
🔥 Complete Features
✔ 3 moving averages in 1 indicator
✔ SMA/EMA/HMA options
✔ Turn each moving average on/off
✔ Multi-Timeframe (MTF)
✔ Auto Color Trend
✔ MA labels on the chart
✔ Alerts for all moving average combinations
✔ Color fill between moving averages (trend zones)
✔ Automatic MA crossover strategy (Buy/Sell)
✔ Smart Money + Moving Average (major trend filter)
✔ Moving average as automatic support & resistance
✔ NO REPAINT (safe for backtesting & live use)
🧠 SYSTEM LOGIC
MA 3 = Smart Money MA (main trend)
BUY
MA1 crosses UP MA2
Price above MA3
SELL
MA1 MA2 crosses down
Price below MA3
The MA3 zone is considered dynamic support/resistance.
Created by Dr. Trade
Mission Control Dashboard (AI, Crypto, Liquidity)Description: Mission Control Dashboard (AI, Liquidity) is a comprehensive macro-liquidity and cycle-analysis dashboard designed to track the "Flow of Funds" across traditional and crypto markets. Instead of looking at price action alone, this script monitors the fundamental "plumbing" of the global economy.
Key Metrics Tracked:
The Debt Wall: Monitors the US 10Y Yield and TLT price. It signals a "Critical" state if yields spike above 5% or TLT drops below $80, indicating high stress in the bond market.
Global Liquidity (MTF Stable): A proprietary calculation summing the balance sheets of the FED, ECB, BoJ, and PBoC, plus Stablecoin market cap. It calculates the Rate of Change (ROC) to see if the world is "printing" or "draining" money.
TGA Hidden Fuel: Tracks the Treasury General Account. A falling TGA is often bullish for risk assets as it injects liquidity into the banking system.
Universal Alt Season: Monitors TOTAL3 (Crypto market cap excluding BTC & ETH) for parabolic moves (>30% ROC).
AI Infra Capex: Real-time tracking of Capital Expenditures from MSFT, GOOG, AMZN, and META to gauge the health of the AI cycle.
How to use:
Green Status across the board: High probability for "Risk-On" environments (Alt season, Tech rallies).
Strategic Beta vs. Tactical Alpha: If Beta is draining but Alpha is accelerating, it suggests a "False Breakout" or a divergence in liquidity.
Uranium Trend: Used as a proxy for the energy transition and long-term industrial cycle strength.
MACD + EMA200 MTF - WEBHOOK FIXEDHi guys, works best with USDCHF
Default settings fit for me, you can tweak how much you want.
With default settings works well for 15min and 1min time-frame, for other time-frames, you need to tweak.
FVG Toolkit V2 (MTF + Backtest)FVG Toolkit V2 is a clean, multi-timeframe Fair Value Gap (FVG) indicator built for discretionary traders who want clarity, flexibility, and the ability to properly backtest.
This tool was designed specifically to solve common issues with FVG indicators—limited history, lack of timeframe control, and excessive chart clutter—while staying true to how institutional-style traders analyze price.
Key Features:
Multi-Timeframe Fair Value Gaps
Display FVGs from multiple timeframes on a single chart
Supports 5m, 15m, 30m, 1H, 4H, and Daily
Each timeframe can be turned on or off independently
Adjustable Backtesting Lookback
Choose how far back FVGs are displayed (in days)
Default set to 30 days for meaningful backtesting
Helps traders study historical reactions without overwhelming the chart
Custom Timeframe Labels
Each FVG is labeled directly on the chart
Rename timeframe labels in settings (e.g., “30m Bias”, “HTF Daily”, “5m Execution”)
Makes multi-timeframe analysis clear and intuitive
Unfilled & Inverted FVG Logic
Optional setting to show only unfilled FVGs
Optional inverted FVGs once a gap is fully filled
Helps identify potential support/resistance flips and reaction zones
Chart-Timeframe Visualization
All FVGs are drawn on the active chart timeframe
Ideal for execution on 1m, 5m, and 15m charts
Keeps higher-timeframe context visible without switching charts
Who This Indicator Is For:
Traders using Fair Value Gaps as reaction zones
ICT-style and price-action traders
Forex, Futures, and Indices traders
Traders who want clean charts and real backtesting, not repainting signals
Best Use Cases:
Higher-timeframe bias with 30m, 1H, 4H, or Daily FVGs
Execution on 5m or 15m charts
Studying which timeframes’ FVGs are respected by specific instruments
Backtesting FVG behavior across different markets (e.g., USDJPY vs Gold)
volSRCoreLibrary volSRCore
Library to compute volume-based support and resistance zones using fractal logic.
tfStringToFormat(tfInput)
Converts a timeframe string into Pine Script format.
Parameters:
tfInput (string): Timeframe string ("Chart", "1m", "5m", "1h", "D", etc.)
Returns:
string — Pine Script–formatted timeframe
resInMinutes()
Converts the current chart timeframe into minutes.
Returns:
float — number of minutes of the current timeframe
fractalUp(tfHigh, tfVol, tfVolMA)
Detects a bullish fractal (potential resistance).
Parameters:
tfHigh (float): High series of the timeframe
tfVol (float): Volume series of the timeframe
tfVolMA (float): Volume moving average series
Returns:
bool — true if a bullish fractal is detected
fractalDown(tfLow, tfVol, tfVolMA)
Detects a bearish fractal (potential support).
Parameters:
tfLow (float): Low series of the timeframe
tfVol (float): Volume series of the timeframe
tfVolMA (float): Volume moving average series
Returns:
bool — true if a bearish fractal is detected
calcFractalUpLevel(tfHigh, tfVol, tfVolMA)
Computes the resistance level from a bullish fractal.
Parameters:
tfHigh (float): High series
tfVol (float): Volume series
tfVolMA (float): Volume MA series
Returns:
float — resistance level
calcFractalDownLevel(tfLow, tfVol, tfVolMA)
Computes the support level from a bearish fractal.
Parameters:
tfLow (float): Low series
tfVol (float): Volume series
tfVolMA (float): Volume MA series
Returns:
float — support level
calcResistanceZone(tfHigh, tfOpen, tfClose, tfVol, tfVolMA)
Computes the resistance zone (between High and Open/Close).
Parameters:
tfHigh (float): High series
tfOpen (float): Open series
tfClose (float): Close series
tfVol (float): Volume series
tfVolMA (float): Volume MA series
Returns:
float — lower boundary of the resistance zone
calcSupportZone(tfLow, tfOpen, tfClose, tfVol, tfVolMA)
Computes the support zone (between Low and Open/Close).
Parameters:
tfLow (float): Low series
tfOpen (float): Open series
tfClose (float): Close series
tfVol (float): Volume series
tfVolMA (float): Volume MA series
Returns:
float — upper boundary of the support zone
tfNewBar(tfRes)
Detects a new bar on a given timeframe.
Parameters:
tfRes (simple string): Timeframe string
Returns:
bool — true if a new bar is detected
tfBarIndexBack(tfRes, barsBack)
Computes the bar_index N bars back on a target timeframe.
Parameters:
tfRes (simple string): Timeframe string
barsBack (simple int): Number of bars back (1, 3, 5, etc.)
Returns:
int — bar_index at that point in time
tfBarsRange(tfRes, startBar, endBar)
Computes the number of chart bars between two bars of a target timeframe.
Parameters:
tfRes (simple string): Timeframe string
startBar (simple int): Start bar (e.g., 1)
endBar (simple int): End bar (e.g., 5)
Returns:
int — number of chart bars in that range
calcPivotHighBarIndex(startBarsBack, rangeSize, maxBarsBack)
Finds the exact bar_index of the highest high within a given range.
Parameters:
startBarsBack (simple int): Start of the scan (bars back)
rangeSize (simple int): Size of the scan range
maxBarsBack (simple int): max_bars_back limit (e.g., 4999)
Returns:
int — bar_index of the highest high, or maxBarsBack if out of bounds
calcPivotLowBarIndex(startBarsBack, rangeSize, maxBarsBack)
Finds the exact bar_index of the lowest low within a given range.
Parameters:
startBarsBack (simple int): Start of the scan (bars back)
rangeSize (simple int): Size of the scan range
maxBarsBack (simple int): max_bars_back limit (e.g., 4999)
Returns:
int — bar_index of the lowest low, or maxBarsBack if out of bounds
detectPriceInteraction(resLevel, resZone, supLevel, supZone)
Detects price interactions with support/resistance zones.
Parameters:
resLevel (float): Resistance level
resZone (float): Resistance zone
supLevel (float): Support level
supZone (float): Support zone
Returns:
EntersResZone
TestsResAsSupport
EntersSupZone
TestsSupAsResistance
BreaksResistance
BreaksSupport
calcSRLevelsFromData(tfOpen, tfHigh, tfLow, tfClose, tfVol, volMaLength)
Computes all support/resistance levels from already-fetched MTF data.
Parameters:
tfOpen (float): TF open
tfHigh (float): TF high
tfLow (float): TF low
tfClose (float): TF close
tfVol (float): TF volume
volMaLength (simple int): Volume MA length
Returns:
ResistanceLevel
ResistanceZone
SupportLevel
SupportZone
IsFractalUp
IsFractalDown
detectNewSR(resLevel, supLevel)
Detects a new fractal event (new support or resistance found).
Parameters:
resLevel (float): Current resistance level
supLevel (float): Current support level
Returns:
NewResistance
NewSupport
[TehThomas] - Aligned Timeframe Liquidity Sweeps█ OVERVIEW
The Liquidity Sweeps ICT MTF indicator automatically detects and visualizes buyside and sellside liquidity levels based on higher timeframe (HTF) swing points. Designed specifically for traders using Smart Money Concepts and ICT (Inner Circle Trader) methodology, this tool helps identify where institutional players are likely hunting liquidity before making directional moves.
█ KEY FEATURES
✓ Automatic ICT-Aligned Timeframe Selection
• Intelligently selects the higher timeframe based on your current chart
• Follows ICT's recommended correlations (5min→1h, 15min→4h, 1h→Daily, etc.)
• No manual timeframe selection needed - adapts automatically
✓ Precise Liquidity Level Placement
• Lines start exactly at the LTF candle that created the HTF swing point
• Searches backwards through historical data to find exact placement
• Eliminates guesswork about where institutional orders cluster
✓ Real-Time Sweep Detection
• Solid lines indicate untouched liquidity (active levels)
• Lines automatically turn dotted when price sweeps through them
• Swept lines stop at the exact bar of the sweep (clean visualization)
• Both wicks and candle bodies trigger sweep detection
✓ Fully Customizable Per Timeframe
• Individual swing detection settings for each HTF (1m, 15m, 1h, 4h, D, W, M)
• Adjust sensitivity to show major levels only or capture granular liquidity pools
• Customizable colors and line width
• Organized settings groups for easy navigation
█ HOW IT WORKS
The indicator identifies swing highs and swing lows on a higher timeframe using pivot point detection. These swing points represent areas where stop-loss orders from retail traders concentrate, creating "liquidity pools" that smart money targets.
Timeframe Alignment (Automatic):
• 15s chart → 1min HTF
• 1min chart → 15min HTF
• 5min chart → 1hour HTF
• 15min chart → 4hour HTF
• 1hour chart → Daily HTF
• 4hour chart → Weekly HTF
• Daily chart → Monthly HTF
Swing Detection:
The indicator uses customizable left/right bar counts to identify valid swing points on the HTF. Default values are optimized per timeframe (e.g., 10 bars for 1h, 5 bars for Daily), but can be adjusted to your preference.
Visualization:
• Green lines = Buyside liquidity (swing highs where long stops sit)
• Red lines = Sellside liquidity (swing lows where short stops sit)
• Solid style = Untouched liquidity
• Dotted style = Swept liquidity
█ SETTINGS
Swing Detection Group:
• Swing Bars - 1 Minute: Default 5 bars
• Swing Bars - 15 Minutes: Default 8 bars
• Swing Bars - 1 Hour: Default 10 bars
• Swing Bars - 4 Hours: Default 6 bars
• Swing Bars - Daily: Default 5 bars
• Swing Bars - Weekly: Default 3 bars
• Swing Bars - Monthly: Default 2 bars
Tip: Increase values for cleaner charts with major levels only. Decrease for more sensitive detection.
Display Group:
• Buyside Liquidity Color: Default green
• Sellside Liquidity Color: Default red
• Line Width: Adjustable 1-5
█ HOW TO USE
Reading the liquidity levels:
🟢 Green solid line = Untouched buyside liquidity (potential magnet for price)
🔴 Red solid line = Untouched sellside liquidity (potential magnet for price)
🟢 Green dotted line = Swept buyside liquidity (bulls trapped)
🔴 Red dotted line = Swept sellside liquidity (bears trapped)
Trading Applications:
1. Liquidity Grab Reversals: Watch for sweeps followed by immediate reversals
2. Stop Hunt Detection: Multiple sweeps often precede strong counter-moves
3. Target Identification: Use untouched levels as potential price magnets
4. Market Structure Analysis: Understand institutional order flow
5. Confluence Zones: Combine with order blocks, FVGs, or other ICT concepts
Best Practices:
• Focus on liquid markets (major FX pairs, indices, large-cap stocks)
• Consider higher timeframe trend - sweeps against trend are higher probability
• Look for liquidity clusters (multiple levels close together)
• Wait for confirmation after sweeps before entering
• Not all sweeps result in reversals - context matters
█ TRADING STRATEGY EXAMPLES
Liquidity Sweep Reversal:
1. Identify untouched liquidity level
2. Wait for price to sweep through (line turns dotted)
3. Look for reversal price action (engulfing, rejection)
4. Enter in reversal direction with stop beyond the sweep
5. Target next liquidity level or structure
Liquidity-to-Liquidity:
1. Price sweeps sellside liquidity (red dotted)
2. Enter long positions
3. Target buyside liquidity above (green solid)
4. Exit when buyside liquidity is swept
█ IDEAL FOR
• ICT Methodology Traders
• Smart Money Concept Practitioners
• Liquidity-Based Strategies
• Multi-Timeframe Analysis
• Price Action Traders
• Stop Hunt Avoidance
█ TECHNICAL SPECIFICATIONS
• Maximum Lines: 500
• Lookback Range: Up to 1000 bars for precise placement
• Compatible: All markets and timeframes
• Data: Works on both real-time and historical bars
█ NOTES & DISCLAIMERS
• This indicator is a tool for analysis, not a standalone trading system
• Always use proper risk management and combine with other analysis
• Performance may vary across different markets and conditions
• Based on ICT concepts - familiarity with Smart Money trading is recommended
█ LIQUIDITY FOR SINGLETIMEFRAMES
If you prefer normal liquidity lines you can use my other free liquidity indicator
Magnitude of Price DiscoveryThis script is a simple attempt to show the magnitude of price discovery
Before we discuss how it works we need to discuss our terms.
Universal Truth of Price #1 - Price only trades in 3 distinct ways
Scenario 1 - Inside bar to previous range, consolidation.
Scenario 2 - Trending bar up or down, HH + HL to previous bar or LL + LH to previous bar
Scenario 3 - Outside bar, Higher highs AND lower lows to previous bar. Also known as a broadening formation.
If you are interested in the 2nd universal truth my indicator 'Timeframe Continuity Bars' discusses it there.
Given one of the 3 scenarios price can trade in is a broadening formation it proves that price discovery occurs as a series of new highs and new lows.
Notice the scenario 3 marked by SimpleStratNumbers
This scenario 3 is a broadening formation on the 1min and on the 30min basis.
Given this is true we know if price rejects the broadening highs it is attempting to make new lows to the broadening range
So, what this indicator does is it uses previous swing highs and swing lows and it shows you when price reclaims them and gives you a target.
The target of this indicator is guaranteed to be hit if the 2nd universal truth of price is in your favor.
This means if we reclaim a previous high to the downside. At the time of all known participation groups selling we know the magnitude of this selling would be the other side of the range
So it's simple, the solid line shows you the reclaimed level.
The dotted line shows you the magnitude.
Full timeframe continuity tells you when it is FOR SURE going to your target price via MTF analysis of the aggressiveness of the buyers/sellers.
However timeframe continuity is subject to change every 60min, every day, every week, and every month! That's the risk you take when trading.
Here's one example for you.
NASDAQ:AAPL monthly made a new low and changed to green this was your evidence price is attempting to take the other side of the range.
NASDAQ:AAPL monthly opened green again and re-confirmed the upside which meant the other side
of the range was still for certain going to be taken out.
After being taken out, breakout traders buy the highs and any shorts in aapl are forced to cover.
BOOM!
This indicator is likely to be updated in the near future to align entries on multiple timeframes.
Nothing spoken here is financial advice and it is ONLY what we know to be true about price action.
Al Sat Alpha Hunter System [MTF + Risk Manager]çok güzel yerlerden al sat komutu çıkıyor ve bunu size ücretsiz vermek istedim sizde faydalanın
SpatialIndexYou can start using this now by inserthing this at the top of your indicator/strategy/library.
import ArunaReborn/SpatialIndex/1 as SI
Overview
SpatialIndex is a high-performance Pine Script library that implements price-bucketed spatial indexing for efficient proximity queries on large datasets. Instead of scanning through hundreds or thousands of items linearly (O(n)), this library provides O(k) bucket lookup where k is typically just a handful of buckets, dramatically improving performance for price-based filtering operations.
This library works with any data type through index-based references, making it universally applicable for support/resistance levels, pivot points, order zones, pattern detection points, Fair Value Gaps, and any other price-based data that needs frequent proximity queries.
Why This Library Exists
The Problem
When building advanced technical indicators that track large numbers of price levels (support/resistance zones, pivot points, order blocks, etc.), you often need to answer questions like:
- *"Which levels are within 5% of the current price?"*
- *"What zones overlap with this price range?"*
- *"Are there any significant levels near my entry point?"*
The naive approach is to loop through every single item and check its price. For 500 levels across multiple timeframes, this means 500 comparisons every bar . On instruments with thousands of historical bars, this quickly becomes a performance bottleneck that can cause scripts to time out or lag.
The Solution
SpatialIndex solves this by organizing items into price buckets —like filing cabinets organized by price range. When you query for items near $50,000, the library only looks in the relevant buckets (e.g., $49,000-$51,000 range), ignoring all other price regions entirely.
Performance Example:
- Linear scan: Check 500 items = 500 comparisons per query
- Spatial index: Check 3-5 buckets with ~10 items each = 30-50 comparisons per query
- Result: 10-16x faster queries
Key Features
Core Capabilities
- ✅ Generic Design : Works with any data type via index references
- ✅ Multiple Index Strategies : Fixed bucket size or ATR-based dynamic sizing
- ✅ Range Support : Index items that span price ranges (zones, gaps, channels)
- ✅ Efficient Queries : O(k) bucket lookup instead of O(n) linear scan
- ✅ Multiple Query Types : Proximity percentage, fixed range, exact price with tolerance
- ✅ Dynamic Updates : Add, remove, update items in O(1) time
- ✅ Batch Operations : Efficient bulk removal and reindexing
- ✅ Query Caching : Optional caching for repeated queries within same bar
- ✅ Statistics & Debugging : Built-in stats and diagnostic functions
### Advanced Features
- ATR-Based Bucketing : Automatically adjusts bucket sizes based on volatility
- Multi-Bucket Spanning : Items that span ranges are indexed in all overlapping buckets
- Reindexing Support : Handles array removals with automatic index shifting
- Cache Management : Configurable query caching with automatic invalidation
- Empty Bucket Cleanup : Automatically removes empty buckets to minimize memory
How It Works
The Bucketing Concept
Think of price space as divided into discrete buckets, like a histogram:
```
Price Range: $98-$100 $100-$102 $102-$104 $104-$106 $106-$108
Bucket Key: 49 50 51 52 53
Items:
```
When you query for items near $103:
1. Calculate which buckets overlap the $101.50-$104.50 range (keys 50, 51, 52)
2. Return items from only those buckets:
3. Never check items in buckets 49 or 53
Bucket Size Selection
Fixed Size Mode:
```pine
var SI.SpatialBucket index = SI.newSpatialBucket(2.0) // $2 per bucket
```
- Good for: Instruments with stable price ranges
- Example: For stocks trading at $100, 2.0 = 2% increments
ATR-Based Mode:
```pine
float atr = ta.atr(14)
var SI.SpatialBucket index = SI.newSpatialBucketATR(1.0, atr) // 1x ATR per bucket
SI.updateATR(index, atr) // Update each bar
```
- Good for: Instruments with varying volatility
- Adapts automatically to market conditions
- 1.0 multiplier = one bucket spans one ATR unit
Optimal Bucket Size:
The library includes a helper function to calculate optimal size:
```pine
float optimalSize = SI.calculateOptimalBucketSize(close, 5.0) // For 5% proximity queries
```
This ensures queries span approximately 3 buckets for optimal performance.
Index-Based Architecture
The library doesn't store your actual data—it only stores indices that point to your external arrays:
```pine
// Your data
var array levels = array.new()
var array types = array.new()
var array ages = array.new()
// Your index
var SI.SpatialBucket index = SI.newSpatialBucket(2.0)
// Add a level
array.push(levels, 50000.0)
array.push(types, "support")
array.push(ages, 0)
SI.add(index, array.size(levels) - 1, 50000.0) // Store index 0
// Query near current price
SI.QueryResult result = SI.queryProximity(index, close, 5.0)
for idx in result.indices
float level = array.get(levels, idx)
string type = array.get(types, idx)
// Work with your actual data
```
This design means:
- ✅ Works with any data structure you define
- ✅ No data duplication
- ✅ Minimal memory footprint
- ✅ Full control over your data
---
Usage Guide
Basic Setup
```pine
// Import library
import username/SpatialIndex/1 as SI
// Create index
var SI.SpatialBucket index = SI.newSpatialBucket(2.0)
// Your data arrays
var array supportLevels = array.new()
var array touchCounts = array.new()
```
Adding Items
Single Price Point:
```pine
// Add a support level at $50,000
array.push(supportLevels, 50000.0)
array.push(touchCounts, 1)
int levelIdx = array.size(supportLevels) - 1
SI.add(index, levelIdx, 50000.0)
```
Price Range (Zones/Gaps):
```pine
// Add a resistance zone from $51,000 to $52,000
array.push(zoneBottoms, 51000.0)
array.push(zoneTops, 52000.0)
int zoneIdx = array.size(zoneBottoms) - 1
SI.addRange(index, zoneIdx, 51000.0, 52000.0) // Indexed in all overlapping buckets
```
Querying Items
Proximity Query (Percentage):
```pine
// Find all levels within 5% of current price
SI.QueryResult result = SI.queryProximity(index, close, 5.0)
if array.size(result.indices) > 0
for idx in result.indices
float level = array.get(supportLevels, idx)
// Process nearby level
```
Fixed Range Query:
```pine
// Find all items between $49,000 and $51,000
SI.QueryResult result = SI.queryRange(index, 49000.0, 51000.0)
```
Exact Price with Tolerance:
```pine
// Find items at exactly $50,000 +/- $100
SI.QueryResult result = SI.queryAt(index, 50000.0, 100.0)
```
Removing Items
Safe Removal Pattern:
```pine
SI.QueryResult result = SI.queryProximity(index, close, 5.0)
if array.size(result.indices) > 0
// IMPORTANT: Sort descending to safely remove from arrays
array sorted = SI.sortIndicesDescending(result)
for idx in sorted
// Remove from index
SI.remove(index, idx)
// Remove from your data arrays
array.remove(supportLevels, idx)
array.remove(touchCounts, idx)
// Reindex to maintain consistency
SI.reindexAfterRemoval(index, idx)
```
Batch Removal (More Efficient):
```pine
// Collect indices to remove
array toRemove = array.new()
for i = 0 to array.size(supportLevels) - 1
if array.get(touchCounts, i) > 10 // Remove old levels
array.push(toRemove, i)
// Remove in descending order from data arrays
array sorted = array.copy(toRemove)
array.sort(sorted, order.descending)
for idx in sorted
SI.remove(index, idx)
array.remove(supportLevels, idx)
array.remove(touchCounts, idx)
// Batch reindex (much faster than individual reindexing)
SI.reindexAfterBatchRemoval(index, toRemove)
```
Updating Items
```pine
// Update a level's price (e.g., after refinement)
float newPrice = 50100.0
SI.update(index, levelIdx, newPrice)
array.set(supportLevels, levelIdx, newPrice)
// Update a zone's range
SI.updateRange(index, zoneIdx, 51000.0, 52500.0)
array.set(zoneBottoms, zoneIdx, 51000.0)
array.set(zoneTops, zoneIdx, 52500.0)
```
Query Caching
For repeated queries within the same bar:
```pine
// Create cache (persistent)
var SI.CachedQuery cache = SI.newCachedQuery()
// Cached query (returns cached result if parameters match)
SI.QueryResult result = SI.queryProximityCached(
index,
cache,
close,
5.0, // proximity%
1 // cache duration in bars
)
// Invalidate cache when index changes significantly
if bigChangeDetected
SI.invalidateCache(cache)
```
---
Practical Examples
Example 1: Support/Resistance Finder
```pine
//@version=6
indicator("S/R with Spatial Index", overlay=true)
import username/SpatialIndex/1 as SI
// Data storage
var array levels = array.new()
var array types = array.new() // "support" or "resistance"
var array touches = array.new()
var array ages = array.new()
// Spatial index
var SI.SpatialBucket index = SI.newSpatialBucket(close * 0.02) // 2% buckets
// Detect pivots
bool isPivotHigh = ta.pivothigh(high, 5, 5)
bool isPivotLow = ta.pivotlow(low, 5, 5)
// Add new levels
if isPivotHigh
array.push(levels, high )
array.push(types, "resistance")
array.push(touches, 1)
array.push(ages, 0)
SI.add(index, array.size(levels) - 1, high )
if isPivotLow
array.push(levels, low )
array.push(types, "support")
array.push(touches, 1)
array.push(ages, 0)
SI.add(index, array.size(levels) - 1, low )
// Find nearby levels (fast!)
SI.QueryResult nearby = SI.queryProximity(index, close, 3.0) // Within 3%
// Process nearby levels
for idx in nearby.indices
float level = array.get(levels, idx)
string type = array.get(types, idx)
// Check for touch
if type == "support" and low <= level and low > level
array.set(touches, idx, array.get(touches, idx) + 1)
else if type == "resistance" and high >= level and high < level
array.set(touches, idx, array.get(touches, idx) + 1)
// Age and cleanup old levels
for i = array.size(ages) - 1 to 0
array.set(ages, i, array.get(ages, i) + 1)
// Remove levels older than 500 bars or with 5+ touches
if array.get(ages, i) > 500 or array.get(touches, i) >= 5
SI.remove(index, i)
array.remove(levels, i)
array.remove(types, i)
array.remove(touches, i)
array.remove(ages, i)
SI.reindexAfterRemoval(index, i)
// Visualization
for idx in nearby.indices
line.new(bar_index, array.get(levels, idx), bar_index + 10, array.get(levels, idx),
color=array.get(types, idx) == "support" ? color.green : color.red)
```
Example 2: Multi-Timeframe Zone Detector
```pine
//@version=6
indicator("MTF Zones", overlay=true)
import username/SpatialIndex/1 as SI
// Store zones from multiple timeframes
var array zoneBottoms = array.new()
var array zoneTops = array.new()
var array zoneTimeframes = array.new()
// ATR-based spatial index for adaptive bucketing
var SI.SpatialBucket index = SI.newSpatialBucketATR(1.0, ta.atr(14))
SI.updateATR(index, ta.atr(14)) // Update bucket size with volatility
// Request higher timeframe data
= request.security(syminfo.tickerid, "240", )
// Detect HTF zones
if not na(htf_high) and not na(htf_low)
float zoneTop = htf_high
float zoneBottom = htf_low * 0.995 // 0.5% zone thickness
// Check if zone already exists nearby
SI.QueryResult existing = SI.queryRange(index, zoneBottom, zoneTop)
if array.size(existing.indices) == 0 // No overlapping zones
// Add new zone
array.push(zoneBottoms, zoneBottom)
array.push(zoneTops, zoneTop)
array.push(zoneTimeframes, "4H")
int idx = array.size(zoneBottoms) - 1
SI.addRange(index, idx, zoneBottom, zoneTop)
// Query zones near current price
SI.QueryResult nearbyZones = SI.queryProximity(index, close, 2.0) // Within 2%
// Highlight nearby zones
for idx in nearbyZones.indices
box.new(bar_index - 50, array.get(zoneBottoms, idx),
bar_index, array.get(zoneTops, idx),
bgcolor=color.new(color.blue, 90))
```
### Example 3: Performance Comparison
```pine
//@version=6
indicator("Spatial Index Performance Test")
import username/SpatialIndex/1 as SI
// Generate 500 random levels
var array levels = array.new()
var SI.SpatialBucket index = SI.newSpatialBucket(close * 0.02)
if bar_index == 0
for i = 0 to 499
float randomLevel = close * (0.9 + math.random() * 0.2) // +/- 10%
array.push(levels, randomLevel)
SI.add(index, i, randomLevel)
// Method 1: Linear scan (naive approach)
int linearCount = 0
float proximityPct = 5.0
float lowBand = close * (1 - proximityPct/100)
float highBand = close * (1 + proximityPct/100)
for i = 0 to array.size(levels) - 1
float level = array.get(levels, i)
if level >= lowBand and level <= highBand
linearCount += 1
// Method 2: Spatial index query
SI.QueryResult result = SI.queryProximity(index, close, proximityPct)
int spatialCount = array.size(result.indices)
// Compare performance
plot(result.queryCount, "Items Examined (Spatial)", color=color.green)
plot(linearCount, "Items Examined (Linear)", color=color.red)
plot(spatialCount, "Results Found", color=color.blue)
// Spatial index typically examines 10-50 items vs 500 for linear scan!
```
API Reference Summary
Initialization
- `newSpatialBucket(bucketSize)` - Fixed bucket size
- `newSpatialBucketATR(atrMultiplier, atrValue)` - ATR-based buckets
- `updateATR(sb, newATR)` - Update ATR for dynamic sizing
Adding Items
- `add(sb, itemIndex, price)` - Add item at single price point
- `addRange(sb, itemIndex, priceBottom, priceTop)` - Add item spanning range
Querying
- `queryProximity(sb, refPrice, proximityPercent)` - Query by percentage
- `queryRange(sb, priceBottom, priceTop)` - Query fixed range
- `queryAt(sb, price, tolerance)` - Query exact price with tolerance
- `queryProximityCached(sb, cache, refPrice, pct, duration)` - Cached query
Removing & Updating
- `remove(sb, itemIndex)` - Remove item
- `update(sb, itemIndex, newPrice)` - Update item price
- `updateRange(sb, itemIndex, newBottom, newTop)` - Update item range
- `reindexAfterRemoval(sb, removedIndex)` - Reindex after single removal
- `reindexAfterBatchRemoval(sb, removedIndices)` - Batch reindex
- `clear(sb)` - Remove all items
Utilities
- `size(sb)` - Get item count
- `isEmpty(sb)` - Check if empty
- `contains(sb, itemIndex)` - Check if item exists
- `getStats(sb)` - Get debug statistics string
- `calculateOptimalBucketSize(price, pct)` - Calculate optimal bucket size
- `sortIndicesDescending(result)` - Sort for safe removal
- `sortIndicesAscending(result)` - Sort ascending
Performance Characteristics
Time Complexity
- Add : O(1) for single point, O(m) for range spanning m buckets
- Remove : O(1) lookup + O(b) bucket cleanup where b = buckets item spans
- Query : O(k) where k = buckets in range (typically 3-5) vs O(n) linear scan
- Update : O(1) removal + O(1) addition = O(1) total
Space Complexity
- Memory per item : ~8 bytes for index reference + map overhead
- Bucket overhead : Proportional to price range coverage
- Typical usage : For 500 items with 50 active buckets ≈ 4-8KB total
Scalability
- ✅ 100 items : ~5-10x faster than linear scan
- ✅ 500 items : ~10-15x faster
- ✅ 1000+ items : ~15-20x faster
- ⚠️ Performance degrades if bucket size is too small (too many buckets)
- ⚠️ Performance degrades if bucket size is too large (too many items per bucket)
Best Practices
Bucket Size Selection
1. Start with 2-5% of asset price for percentage-based queries
2. Use ATR-based mode for volatile assets or multi-symbol scripts
3. Test bucket size using `calculateOptimalBucketSize()` function
4. Monitor with `getStats()` to ensure reasonable bucket count
Memory Management
1. Clear old items regularly to prevent unbounded growth
2. Use age tracking to remove stale data
3. Set maximum item limits based on your needs
4. Batch removals are more efficient than individual removals
Query Optimization
1. Use caching for repeated queries within same bar
2. Invalidate cache when index changes significantly
3. Sort results descending before removal iteration
4. Batch operations when possible (reindexing, removal)
Data Consistency
1. Always reindex after removal to maintain index alignment
2. Remove from arrays in descending order to avoid index shifting issues
3. Use batch reindex for multiple simultaneous removals
4. Keep external arrays and index in sync at all times
Limitations & Caveats
Known Limitations
- Not suitable for exact price matching : Use tolerance with `queryAt()`
- Bucket size affects performance : Too small = many buckets, too large = many items per bucket
- Memory usage : Scales with price range coverage and item count
- Reindexing overhead : Removing items mid-array requires index shifting
When NOT to Use
- ❌ Datasets with < 50 items (linear scan is simpler)
- ❌ Items that change price every bar (constant reindexing overhead)
- ❌ When you need ALL items every time (no benefit over arrays)
- ❌ Exact price level matching without tolerance (use maps instead)
When TO Use
- ✅ Large datasets (100+ items) with occasional queries
- ✅ Proximity-based filtering (% of price, ATR-based ranges)
- ✅ Multi-timeframe level tracking
- ✅ Zone/range overlap detection
- ✅ Price-based spatial filtering
---
Technical Details
Bucketing Algorithm
Items are assigned to buckets using integer division:
```
bucketKey = floor((price - basePrice) / bucketSize)
```
For ATR-based mode:
```
effectiveBucketSize = atrValue × atrMultiplier
bucketKey = floor((price - basePrice) / effectiveBucketSize)
```
Range Indexing
Items spanning price ranges are indexed in all overlapping buckets to ensure accurate range queries. The midpoint bucket is designated as the "primary bucket" for removal operations.
Index Consistency
The library maintains two maps:
1. `buckets`: Maps bucket keys → IntArray wrappers containing item indices
2. `itemToBucket`: Maps item indices → primary bucket key (for O(1) removal)
This dual-mapping ensures both fast queries and fast removal while maintaining consistency.
Implementation Note: Pine Script doesn't allow nested collections (map containing arrays directly), so the library uses an `IntArray` wrapper type to hold arrays within the map structure. This is an internal implementation detail that doesn't affect usage.
---
Version History
Version 1.0
- Initial release
Credits & License
License : Mozilla Public License 2.0 (TradingView default)
Library Type : Open-source educational resource
This library is designed as a public domain utility for the Pine Script community. As per TradingView library rules, this code can be freely reused by other authors. If you use this library in your scripts, please provide appropriate credit as required by House Rules.
Summary
SpatialIndex is a specialized library that solves a specific problem: fast proximity queries on large price-based datasets . If you're building indicators that track hundreds of levels, zones, or price points and need to frequently filter by proximity to current price, this library can provide 10-20x performance improvements over naive linear scanning.
The index-based architecture makes it universally applicable to any data type, and the ATR-based bucketing ensures it adapts to market conditions automatically. Combined with query caching and batch operations, it provides a complete solution for spatial data management in Pine Script.
Use this library when speed matters and your dataset is large.
Timeframe Continuity BarsTimeframe Continuity Bars is a script that is extremely simple for good reason
So please, do not remove this post because it seems 'simple'
Now that's over with. Lets dive in to understand what timeframe continuity IS and what this indicator does.
Timeframe continuity is defined by 4 or more timeframes and it is the relationship of the last price traded to those 4 opening prices. Standard timeframe continuity would be using the M,W,D,60min timeframes.
The reason we use MTF analysis is because of the truth of what price is and how it works.
Price movement is SOLELY caused due to aggressive buying / selling. Some may attempt to refute this however at the end of the day. If the price is at 100.00 it is because a buyer is willing to buy there and a seller is willing to sell there. If those market participants did not want to buy or sell at 100.00 price would go up or down to meet the more aggressive participant.
So what does this look like you may ask...
If an aggressive buyer takes the offer we will see prices go up if they were willing to pay more than the last guy who took the offer.
So price may go from 100.00 to 100.01 because you decided to invest in that stock that day at that time with a market order
This same thing occurs when every other institution creates, adds, reduces, or exits a position. They have to buy or sell and they have to either do it aggressively or do it passively by sitting on the bid / ask and waiting.
So since this is true, we know that the relationship to the opening price is extremely important. This is because if price is above it's open that means buyers were willing to take the offer and buy at higher prices. If price is below it's open it means that sellers were willing to sell at the bid and they sold at lower prices.
So any candlestick chart is simply an aggregation of this aggressive buying/selling that is taking place at all times.
By using the timeframe continuity bars indicator we can measure the distance from the current open across 4 or more timeframes.
By doing this we can identify monthly participation groups, weekly participation groups, daily participation groups, and 60min participation groups.
When all those groups align green or red this is considered full timeframe continuity. Where the monthly weekly daily 60min groups are all taking the offer and buying, or all selling at the bid!
When this aligns this is when price is for CERTAIN going in one direction.
However, It is subject to change every 60 minutes as the 60min determines if those monthly weekly daily buyers are present RIGHT NOW.
So if the 60min changes we go into direct conflict against the month/week/day groups.
If we see the 60min and day align we go into direct conflict against the month/week
if the 60min day and week are red we over-take the monthly group for control. At the time of the week day and 60 being red we have ZERO evidence of the previous monthly buyer/seller that was present.
Now that you understand a little bit about continuity.. Check it out on the chart!
P.S Here is some tips
1) it is not about just all timeframes aligning, we want to see long green / red bars!
2) The opens reset on a cyclical basis. Each day, each week, each month... When the new timeframes open we will see timeframes have the SAME open. When the opens are the same price we have LESS evidence versus having all opens seperate.
3) Investors can use the Y Q M W as their 4 timeframes to see when institutional buying is occurring [go do a case study on AMEX:GLD and AMEX:SLV weekly timeframe with these settings]
4) You need to add 4 separate indicators and change the timeframes. It is ideal to then save this layout!
5) The best way to do price analysis is using #TheStrat across all 4 timeframes instead of one timeframe with this indicator. This is soley a tool we use to show changing of control between participation groups!
TimeframeAlignTHE PROBLEM THIS LIBRARY SOLVES
When you use `request.security()` to get data from a Higher Timeframe (HTF) and try to draw objects like boxes, lines, or labels, they appear at the wrong horizontal position . This is the "floating in space" problem.
Why does this happen?
The `bar_index` in Pine Script refers to where data was RECEIVED , not where the event OCCURRED .
Consider this scenario:
• You're on a 5-minute chart
• You request 1-hour data for drawing an FVG (Fair Value Gap)
• A 1H candle spans 12 chart bars (60min / 5min = 12)
• But your code draws at `bar_index - 1` or `bar_index - 3`
• The result: your FVG box is only 2-3 bars wide instead of spanning the correct 12-36 bars
This library solves that by tracking where HTF bars actually start and end on your chart timeframe.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW TO USE THIS LIBRARY
Step 1: Import the Library
```
import ArunaReborn/TimeframeAlign/1 as tfa
```
Step 2: Create a Tracker for Each HTF
```
var tfa.HTFTracker tracker1H = tfa.createTracker("60")
```
Step 3: Update the Tracker Every Bar
```
tfa.updateTracker(tracker1H, "60")
```
Step 4: Use Synced Drawing Functions
```
if tfa.htfBarChanged(tracker1H)
tfa.syncedBox(tracker1H, 3, 1, topPrice, bottomPrice, color.new(color.green, 80))
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EXPORTED TYPES
TimeframePair
Stores metadata about the relationship between source and chart timeframes.
• sourceTimeframe - The HTF/LTF being compared
• chartTimeframe - Current chart timeframe
• isHTF - True if source is higher than chart
• isLTF - True if source is lower than chart
• barRatio - Chart bars per source bar
• secondsRatio - Time ratio between timeframes
MTFEventData
Stores synchronized event data with correct bar positions.
• price - Price level of the event
• eventTime - Unix timestamp of the event
• chartBarStart - Chart bar_index where event's TF bar started
• chartBarEnd - Chart bar_index where event's TF bar ended
• htfOffset - The HTF offset used
• isValid - True if synchronization succeeded
HTFTracker
Tracks HTF bar boundaries. Create one per timeframe you need to track.
• htfTimeframe - The timeframe being tracked
• currentStartBar - Where current HTF bar started
• currentEndBar - Where current HTF bar ends (provisional)
• startHistory - Array of historical start positions
• endHistory - Array of historical end positions
• lastUpdateBar - Last bar_index when updated
• barJustChanged - True if HTF bar changed on this chart bar (set by updateTracker)
SyncedBox
Managed box with synchronization metadata.
• bx - The Pine Script box object
• htfTimeframe - Source timeframe
• leftHtfOffset / rightHtfOffset - HTF offsets for edges
• topPrice / bottomPrice - Price boundaries
• extendRight - Auto-extend flag
SyncedLine
Managed line with synchronization metadata.
• ln - The Pine Script line object
• htfTimeframe - Source timeframe
• htfOffset - Anchor offset
• price - Price level (horizontal lines)
• isHorizontal - Line orientation
• extendRight - Auto-extend flag
SyncedLabel
Managed label with synchronization metadata.
• lbl - The Pine Script label object
• htfTimeframe - Source timeframe
• htfOffset - Anchor offset
• price - Price level
• anchorPoint - "start", "end", or "middle"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EXPORTED FUNCTIONS
━━ CORE FUNCTIONS ━━
getTimeframeInfo(sourceTimeframe)
Analyzes relationship between a source TF and chart TF.
Returns: TimeframePair with comparison metadata
createTracker(htfTimeframe)
Creates a new HTF tracker. Call once per timeframe, store with `var`.
Returns: HTFTracker instance
updateTracker(tracker, htfTimeframe, historyDepth)
Updates tracker with current bar data. Call on every bar.
• htfTimeframe: The timeframe string (must match createTracker)
• historyDepth: Max HTF bars to track (default 500)
Returns: Updated tracker
getStartBar(tracker, htfOffset)
Gets chart bar_index where a specific HTF bar started.
• htfOffset: 0=current, 1=previous, 2=two bars ago, etc.
Returns: bar_index or na
getEndBar(tracker, htfOffset)
Gets chart bar_index where a specific HTF bar ended.
Returns: bar_index or na
htfBarChanged(tracker)
Detects when HTF bar just changed.
Returns: True on first chart bar of new HTF bar
findBarAtTime(timestamp, maxLookback)
Searches backward to find chart bar containing a timestamp.
• maxLookback: How far back to search (default 500)
Returns: bar_index or na
syncEventToChart(tracker, eventPrice, eventTime, anchorPoint)
Generic sync function mapping any event to correct chart position.
• anchorPoint: "start", "end", or "middle"
Returns: MTFEventData
━━ DRAWING CREATION FUNCTIONS ━━
syncedBox(tracker, leftHtfOffset, rightHtfOffset, topPrice, bottomPrice, bgcolor, ...)
Creates a box at correct HTF-aligned position.
• leftHtfOffset: HTF bars back for left edge
• rightHtfOffset: HTF bars back for right edge
• extendRight: Auto-extend to current bar
Returns: SyncedBox or na
syncedHLine(tracker, htfOffset, price, lineColor, lineStyle, lineWidth, extendRight)
Creates horizontal line anchored to HTF bar start.
• extendRight: If true, extends to current bar (default true)
Returns: SyncedLine or na
syncedVLine(tracker, htfOffset, atStart, lineColor, lineStyle, lineWidth)
Creates vertical line at HTF bar boundary.
• atStart: True=start of HTF bar, False=end
Returns: SyncedLine or na
syncedLabel(tracker, htfOffset, price, labelText, anchorPoint, ...)
Creates label at correct HTF-aligned position.
• anchorPoint: "start", "end", or "middle"
Returns: SyncedLabel or na
syncedPlotValue(tracker, value, htfOffset)
Returns value for plotting only at synced positions.
Returns: value if current bar is within HTF range, otherwise na
━━ UPDATE FUNCTIONS ━━
updateSyncedBox(syncedBox, extendToCurrentBar)
Extends existing box's right edge to current bar.
Returns: Updated SyncedBox
updateSyncedLine(syncedLine, extendToCurrentBar)
Extends existing horizontal line to current bar.
Returns: Updated SyncedLine
updateSyncedLabel(syncedLabel, tracker, newText, newPrice)
Updates label text/price while maintaining sync.
Returns: Updated SyncedLabel
━━ CONVENIENCE FUNCTIONS ━━
htfBarStartIndex(htfTimeframe, htfOffset, historyDepth)
Simple function to get HTF bar start without explicit tracker.
⚠️ Only tracks ONE timeframe. For multiple TFs, use createTracker pattern.
Returns: bar_index or na
htfBarEndIndex(htfTimeframe, htfOffset, historyDepth)
Simple function to get HTF bar end without explicit tracker.
⚠️ Only tracks ONE timeframe. For multiple TFs, use createTracker pattern.
Returns: bar_index or na
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPLETE USAGE EXAMPLES
Example 1: FVG Box with Auto-Extend
```
//@version=6
indicator("FVG with Synced Drawing", overlay=true)
import ArunaReborn/TimeframeAlign/1 as tfa
htfInput = input.timeframe("60", "HTF for FVG")
// Create tracker for chosen timeframe
var tfa.HTFTracker fvgTracker = tfa.createTracker(htfInput)
tfa.updateTracker(fvgTracker, htfInput)
// Get FVG data from HTF (confirmed bars with offset)
= request.security(syminfo.tickerid, htfInput,
[low , high , low > high ],
lookahead=barmerge.lookahead_off)
// Store managed box
var tfa.SyncedBox fvgBox = na
// Create synced box when FVG detected
if fvgDetected and tfa.htfBarChanged(fvgTracker)
fvgBox := tfa.syncedBox(fvgTracker, 3, 1, fvgTop, fvgBot,
color.new(color.green, 85), color.green, 1, "FVG", color.white, true)
// Extend box to current bar each tick
if not na(fvgBox)
tfa.updateSyncedBox(fvgBox, true)
```
Example 2: HTF Support/Resistance Lines
```
//@version=6
indicator("HTF S/R Lines", overlay=true)
import ArunaReborn/TimeframeAlign/1 as tfa
htfInput = input.timeframe("240", "HTF for S/R")
// Create and update tracker
var tfa.HTFTracker srTracker = tfa.createTracker(htfInput)
tfa.updateTracker(srTracker, htfInput)
// Get HTF high/low (confirmed with offset)
= request.security(syminfo.tickerid, htfInput,
[high , low ], lookahead=barmerge.lookahead_off)
// Track lines
var tfa.SyncedLine resistanceLine = na
var tfa.SyncedLine supportLine = na
// Create new lines when HTF bar changes
if tfa.htfBarChanged(srTracker)
resistanceLine := tfa.syncedHLine(srTracker, 1, htfHigh, color.red, line.style_solid, 2, true)
supportLine := tfa.syncedHLine(srTracker, 1, htfLow, color.green, line.style_solid, 2, true)
// Auto-extend lines each bar
if not na(resistanceLine)
tfa.updateSyncedLine(resistanceLine, true)
if not na(supportLine)
tfa.updateSyncedLine(supportLine, true)
```
Example 3: Multiple Timeframes
```
//@version=6
indicator("Multi-TF Boxes", overlay=true)
import ArunaReborn/TimeframeAlign/1 as tfa
// Create separate tracker for each timeframe
var tfa.HTFTracker tracker1H = tfa.createTracker("60")
var tfa.HTFTracker tracker4H = tfa.createTracker("240")
var tfa.HTFTracker trackerD = tfa.createTracker("1D")
// Update ALL trackers every bar (pass the same TF string)
tfa.updateTracker(tracker1H, "60")
tfa.updateTracker(tracker4H, "240")
tfa.updateTracker(trackerD, "1D")
// Now use each tracker independently for drawing
// Each tracker maintains its own separate boundary history
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NON-REPAINTING COMPLIANCE
To ensure non-repainting behavior, always use this pattern with request.security:
```
= request.security(syminfo.tickerid, htfTimeframe,
[value1 , value2 ], // Use offset for confirmed data
lookahead=barmerge.lookahead_off) // Never use lookahead_on
```
The ` ` offset ensures you're using the previous completed HTF bar, not the current forming bar.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HISTORY DEPTH PARAMETER
The `historyDepth` parameter controls how many HTF bars are tracked:
• Default: 500 HTF bars
• Maximum: Limited by Pine Script's array constraints
• Higher values = more historical accuracy but more memory usage
• Lower values = less memory but may return `na` for older offsets
Adjust based on your needs:
```
tfa.updateTracker(tracker, 100) // Track 100 HTF bars (light)
tfa.updateTracker(tracker, 1000) // Track 1000 HTF bars (heavier)
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IMPORTANT NOTES
1. One Tracker Per Timeframe : If you need multiple HTFs, create separate trackers for each. The convenience functions (htfBarStartIndex, htfBarEndIndex) only track one TF.
2. Update Every Bar : Always call updateTracker() unconditionally on every bar, not inside conditionals.
3. HTF Only : This library is designed for Higher Timeframe data. For LTF aggregation, use findBarAtTime() for time-based lookups.
4. Drawing Limits : Pine Script has limits on drawing objects. Use box.delete(), line.delete(), label.delete() to clean up old objects.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TROUBLESHOOTING
Q: My boxes/lines still appear at wrong positions
A: Make sure you're calling updateTracker() on every bar (not inside an if statement) and using the correct htfOffset values.
Q: Functions return na
A: The htfOffset might be larger than available history. Increase historyDepth or use a smaller offset.
Q: Multiple timeframes don't work correctly
A: Don't use the convenience functions for multiple TFs. Create separate HTFTracker instances with createTracker() for each timeframe.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CHANGELOG
v1 - Initial release
• HTFTracker pattern for reliable multi-TF tracking
• Synced drawing functions for boxes, lines, labels
• Update functions for extending drawings
• Convenience functions for simple single-TF use cases
200W SMA Dynamic Extension Bands (MTF, Auto Asset)Summary
200W SMA Dynamic Extension Bands is a multi-timeframe TradingView indicator that plots extension bands (multiples) around the 200-week simple moving average. It’s designed to work on any chart timeframe (1m → 1D → 1W) while anchoring the bands to the latest confirmed weekly data, so the long-term reference is consistent and non-repainting across timeframes.
This is a macro “valuation/temperature gauge” style tool: it helps you quickly see when the price is cheap vs. the 200W mean and when it is extended/expensive.
What it plots
The indicator always computes:
200-week SMA (weekly)
Band m2
Band m3
Band m4
Bands are defined as:
Bandk(t)=SMA200W(t)⋅mk
Where the multipliers mk are chosen automatically depending on the asset type (or manually via input).
Key features
Works on any timeframe: weekly SMA is fetched via request.security(..., "W", ...).
Non-repainting weekly anchor: uses barmerge.lookahead_off to avoid peeking into future weekly bars.
Auto asset presets:
Crypto: wider extensions (bigger cycles)
Gold: moderate extensions
Equities: tighter than crypto
FX: very tight extensions
Futures: moderate fallback
Zone coloring (optional):
Cheap zone (below 1×)
Fair zone (1× → m2)
Hot zone (m2 → m3)
Expensive zone (m3 → m4)
Info table (optional): shows selected preset, current multiple, and % extension vs 200W SMA.
Alerts (optional): “entered cheap” and “entered expensive” style triggers.
Presets (default multipliers)
These are intentionally conservative templates (tune to your market):
Crypto: 1.0,1.5,2.0,3.0
Gold: 1.0,1.2,1.5,2.0
Equities: 1.0,1.15,1.30,1.60
FX: 1.0,1.05,1.10,1.20
Futures: 1.0,1.25,1.50,2.00
Auto mode uses syminfo.type plus a simple heuristic for Gold tickers containing XAU / GOLD (because some platforms classify XAUUSD as forex).
How to use (practical)
Macro context / cycle temperature
Price below 1× (200W SMA): historically “cheap zone” for highly cyclical assets (especially BTC).
Price above m3: often “expensive/extended” and higher risk of mean reversion.
Not a standalone trading system
Use with trend confirmation (market structure), volume, and risk management.
Extensions can persist in strong trends—treat bands as regime context, not precise reversal points.
Settings you can change
SMA Length (Weeks): default 200
Band preset: Auto / Crypto / Gold / Equities / FX / Futures
Toggle:
Zone fills
Info table
Alerts
Included alertconditions:
Cross below 1× (entered cheap zone)
Cross above m3 (entered expensive zone)
High level guideline:
Green Zone: BUY (Below 1.0× - Undervalued)
Yellow Zone: HOLD (1.0× - 1.5× - Fair Value)
Orange Zone: CAUTION (1.5× - 2.0× - Getting Hot)
Red Zone: SELL (2.0× - 3.0× - Overvalued)
Notes / limitations
The “cheap/expensive” zones are heuristics. They do not guarantee future returns.
Auto classification is best-effort; if your symbol is unusual, set the preset manually.
For newly listed assets with limited weekly history, the 200W SMA may be na until enough data exists.
Evidenzia Data Specifica DinamicaSpecific Date Highlighter
Descrizione (Italiano)
Questo indicatore semplice ma estremamente efficace permette di evidenziare graficamente un'intera giornata specifica selezionata dall'utente. È lo strumento ideale per chi ha bisogno di analizzare il comportamento del prezzo durante eventi macroeconomici passati, date di earnings, o particolari sessioni storiche.
Caratteristiche principali:
Selettore Calendario Intuitivo: Grazie all'input di tipo time, puoi selezionare la data esatta tramite un calendario pop-up senza dover inserire manualmente numeri per giorno, mese e anno.
Compatibilità Multi-Timeframe: L'indicatore funziona su qualsiasi timeframe. Se sei su grafici intraday (1m, 5m, 1h), colorerà lo sfondo di tutte le candele appartenenti a quel giorno. Su grafici Daily, evidenzierà la singola candela selezionata.
Colore Personalizzabile: Puoi scegliere il colore dello sfondo e la sua opacità direttamente dalle impostazioni per adattarlo al tuo tema (Light o Dark).
Data Dinamica: Lo script è progettato per riconoscere automaticamente la data odierna come punto di partenza, facilitando l'analisi rapida dell'ultima sessione.
Casi d'uso:
Backtesting visivo: Evidenzia i giorni di rilascio dei dati CPI o decisioni FOMC per studiare la volatilità.
Journaling: Segna i giorni in cui hai effettuato trade importanti per ritrovarli facilmente nello storico.
Analisi Ciclica: Identifica rapidamente date specifiche in cui si sono verificati minimi o massimi storici.
Description (English)
This lightweight and effective tool allows you to highlight a specific full day on your chart. It is perfect for traders who need to visually isolate price action during macroeconomic events, earnings dates, or key historical sessions.
Key Features:
Calendar Picker: Easily select your target date using a built-in calendar input.
MTF Ready: Works seamlessly across all timeframes. On intraday charts, it highlights every bar within the 24-hour period. On daily charts, it highlights the specific daily candle.
Fully Customizable: Change the background color and transparency to match your chart layout.
Smart Default: The script is optimized to handle time logic correctly, ensuring the highlight starts exactly at 00:00 and ends at 23:59.
How to use: Go to settings, click on "Select Date", pick your day from the calendar, and the chart will instantly move the focus to that specific session.






















