Индикаторы и стратегии
StO Price Action - Impulse CandleShort Summary
- Highlights impulse candles based on relative momentum
- Compares current or previous closed candles against prior price movement
- Uses a configurable momentum factor to filter significant impulses
- Designed to make strong directional candles visually stand out
Full Description
Overview
- Identifies impulse candles with strong momentum
- Focuses on candle-to-candle expansion rather than trend or structure
- Intended to visually emphasize moments of acceleration in price
- Works as a complementary tool to price action and volatility analysis
Impulse Candle Logic
- Impulse candles are detected by comparing the current candle range to previous candles
- A candle is considered an impulse when its range exceeds prior movement by a defined factor
- The comparison basis can be (current forming Candle, previous fully closed Candle)
Momentum Factor
- The momentum factor defines how much stronger a candle must be compared to earlier candles
- Higher values filter out smaller moves and highlight only extreme impulses
- Lower values allow more frequent impulse detection
- Helps adapt the indicator to different instruments and volatility regimes
Range Calculation
- Two range calculation modes are available:
- Open / Close (Body range):
- Measures body-based momentum
- Focuses on directional conviction
- High / Low (Candle range):
- Measures full volatility expansion
- Includes wicks and intrabar extremes
Visualization
- Impulse candles are highlighted using a customizable bar color
- Designed to remain minimal and unobtrusive
Alerts
- Optional alert can be enabled after detected impulse candles
- Useful for monitoring momentum shifts without constant screen time
Usage
- Suitable for breakout detection and momentum confirmation
- Helps identify volatility expansion phases
- Can be used for entry timing or trade management
Notes
- This indicator does not predict direction on its own
- Impulse candles may occur in both trending and ranging markets
- Best used in combination with structure, levels or higher-timeframe context
- Momentum thresholds should be adjusted per market and timeframe
Fixed Price Levels with Zones (1000 / 750 / 500 / 250)idywbdiawunadnaw oidnawidnawodnaw wadaw dawd awdaw
Needle Below 20, Sub-chart## 指标名称
**单针下20副图(Needle Below 20, Sub-chart)**
## 一句话概述
在**中周期保持强势**的背景下,用短周期的“快速降温”来定位**强势回撤/错杀**,并额外标记**极端超卖(双线归零)**的情绪极值窗口。
---
## 指标逻辑与构成
本指标包含两条强弱线(随机指标风格的区间归一化):
* **短期线(默认 3)**
反映近短周期内价格在区间的位置,敏感度高,用于捕捉短线回撤与情绪快速降温。
* **长期线(默认 21)**
反映中周期强弱分布,用作“趋势/强势背景”的过滤。
并提供两类柱状提示(STICK):
1. **双线归零(默认:短期≤6 且 长期≤6)**
代表“情绪极端恐慌/极端超卖”的窗口,更多用于观察**反弹可能性**与“风险释放阶段”。
2. **单针下20(默认:短期≤20 且 长期≥80)**
代表“中周期强势未破 + 短线急跌/下探”的典型回撤信号,用于寻找趋势交易中的**回撤介入候选**。
图中绘制 **80/20** 参考线,帮助快速判断分位区域。
---
## 使用方法(推荐工作流)
### 1)先定“背景”:只在你认可的趋势环境使用
本指标本质是“**强势回撤定位器**”,并不负责替你判断大盘/板块/个股是否处于可交易趋势。建议搭配以下任一类过滤器:
* **趋势过滤(强烈推荐)**
* 价格位于中长期均线之上(例:MA50/MA200 上方)
* 或者你自己的趋势线/多空线系统显示多头趋势(如:快线>慢线、结构未破)
* **结构过滤(强烈推荐)**
* 回撤仍然在关键支撑之上(前高、趋势线、箱体上沿回踩等)
* 避免在明显“破位下跌”的结构中把信号当作抄底依据
### 2)信号触发后的处理:不要“看到就买”,而是“进入观察与触发”
* **单针下20(黄柱)**:
作为“候选提示”,下一步关注是否出现:
* 回踩关键位后的止跌K线(锤子线/吞没/放量止跌等)
* 次日/后续重新站回关键位或出现趋势延续确认
* 量价关系转好(缩量回撤、放量反转等)
* **双线归零(红柱)**:
更偏“情绪极值”提示,常见用途是:
* 提醒你风险已经释放到极端区域,观察是否出现反弹结构
* 不建议无过滤硬抄底;更适合与“结构止跌/大盘企稳”一起使用
---
## 风险控制与止损思路(示例,不构成建议)
以下仅提供“如何把信号落到可执行”的框架示例:
* **入场触发(示例)**
* 黄柱出现后:等待价格在关键位止跌,或出现确认K线再介入
* 分批:先小仓试错,确认后再加
* **止损锚点(示例)**
* 关键支撑位下破(趋势线/前低/箱体下沿)
* 或“信号触发后的反弹失败又破前低”
* **仓位建议(原则)**
* 把仓位大小与止损距离联动:止损距离越大,仓位越小
* 避免单次信号重仓;这类信号更适合“低风险试错 + 确认加仓”的趋势回撤逻辑
---
## 参数说明与调参建议
### 1)为什么是 3 / 21?
* **3**:强调“短期情绪/回撤”的敏感度,适合捕捉快速下探
* **21**:近似一个月交易日,刻画中周期强弱背景,适合作为“强势过滤”
如果你交易周期更短(更偏日内/隔日):
* 可考虑 **短期 2–5**、长期 **13–34** 区间做测试。
如果你交易周期更长(偏波段/中线):
* 可考虑 **短期 5–8**、长期 **34–55**。
### 2)为什么阈值是 6 / 20 / 80?
* **6**:更接近“极端”区域,用于标记情绪极值(双线归零)
* **20/80**:经典分位阈值,表示低位/高位区域,用于区分“短弱/长强”的错位状态
### 3)如何调参更贴合你的市场与标的?
建议按“信号密度—胜率—回撤”三者权衡:
* 信号太多:
* 降低“长期≥”阈值的触发频率(如 80→85)
* 或提高“短期≤”门槛的严苛度(20→15)
* 或把长期周期加长(21→34)
* 信号太少:
* 放宽阈值(长期 80→75、短期 20→25)
* 或缩短长期周期(21→13)
调参务必结合你常交易的品种波动特征,建议在同一市场同一类标的上做一致性回测/复盘。
---
## 免责声明
本脚本仅用于教育与研究目的,展示一种技术分析可视化方法,不构成任何形式的投资建议、交易建议或收益承诺。市场有风险,交易需谨慎。使用者应基于自身风险承受能力独立决策,并对交易结果自行负责。作者不对任何因使用本脚本导致的直接或间接损失承担责任。
---
## 致谢与来源
* **策略/思路来源**:B站 UP 主 **z哥** 的相关分享与讲解。
* **实现说明**:本脚本为 TradingView(Pine Script)版本的复现与可视化实现,便于在 TradingView 环境中使用与研究。
* 如原作者对公开引用有额外要求,请以原作者说明为准;若有侵权或需要修改归因方式,请联系我调整/下架相关描述。
下面给你补齐一份**英文版(可直接用于 TradingView 发布页)**,并与中文版结构对齐,符合社区常见写法(Overview / How it works / How to use / Inputs / Risk / Credits)。
---
## Title
**Needle Below 20 (Sub-chart) — TDX Style Recreation**
## Overview
This indicator is an auxiliary tool designed to spot **sharp short-term pullbacks (shakeouts) within a strong mid-term regime**, and to highlight **extreme oversold “panic” zones**. It is best used as a **candidate filter and timing aid** inside a broader trend-following framework, rather than as a standalone buy/sell signal.
## How it works
The script plots two normalized strength lines (stochastic-style normalization over a lookback window):
* **Short-term line (default: 3 bars)**
Captures fast sentiment cooling and short-term compression (high sensitivity).
* **Long-term line (default: 21 bars)**
Represents the mid-cycle regime strength, used as a context filter.
It also provides two stick/column signals:
1. **Double-Line Near-Zero (Red stick)**
Triggered when **Short-term ≤ 6 AND Long-term ≤ 6** (defaults).
This typically represents an **extreme oversold / capitulation-like** window, often used to monitor potential technical rebounds (confirmation recommended).
2. **Needle Below 20 (Yellow stick)**
Triggered when **Short-term ≤ 20 AND Long-term ≥ 80** (defaults).
This is commonly interpreted as a **strong regime intact + sudden short-term dump/pullback**, useful for spotting potential **trend pullback re-entry candidates**.
Reference levels **80/20** are drawn for quick zone reading.
### How to use (recommended workflow)
1. **Define the regime first (strongly recommended)**
This indicator does not decide whether a market is tradable. Use a trend/structure filter, for example:
* Price above a medium/long MA (e.g., MA50/MA200), or your own trend model
* Structure not broken (support holds, pullback into a valid support zone)
2. **Treat signals as “watchlist triggers,” not instant entries**
* **Yellow stick (Needle Below 20):**
After it prints, look for confirmation such as:
* A hold/reclaim of a key level (prior high, trendline, range top retest, etc.)
* A reversal candle or continuation confirmation
* Constructive volume/price behavior (e.g., pullback on lighter volume, rebound with demand)
* **Red stick (Double-Line Near-Zero):**
Best viewed as an **extreme sentiment/oversold marker**. Avoid blind bottom-fishing; combine with structure stabilization and broader market context.
## Risk management (examples, not financial advice)
* **Entry trigger (example):** scale in after confirmation rather than buying the first signal
* **Stop reference (example):** below the key support / prior swing low / structural invalidation level
* **Position sizing principle:** size positions based on stop distance; larger stop = smaller size
## Inputs / Parameters
* **Lookbacks (3 / 21):**
* 3 bars: short-term sensitivity for fast pullback detection
* 21 bars: mid-cycle regime context (roughly one trading month)
Suggested adjustments:
* Shorter-term trading: try **2–5** (short) and **13–34** (long)
* Longer swing trading: try **5–8** (short) and **34–55** (long)
* **Thresholds (6 / 20 / 80):**
* 6: “extreme” zone for near-zero panic marker
* 20/80: classic zone thresholds for low/high regime separation
If signals are too frequent:
* tighten thresholds (e.g., long ≥ 80 → 85, short ≤ 20 → 15), or lengthen long lookback (21 → 34)
If signals are too rare:
* loosen thresholds (e.g., long ≥ 80 → 75, short ≤ 20 → 25), or shorten long lookback (21 → 13)
## Disclaimer
This script is provided for **educational and research purposes only**. It does **not** constitute financial advice, investment recommendations, or any guarantee of performance. Trading involves risk. You are solely responsible for your decisions and outcomes.
## Credits / Attribution
* **Concept origin:** Inspired by the Bilibili creator **“z哥”**.
* **Implementation:** This is a TradingView (Pine Script) recreation for visualization and study.
If the original creator has specific attribution requirements, please follow the creator’s instructions. If any changes are needed, attribution text can be updated accordingly.
## Citation snippet
> Concept inspired by Bilibili creator “z哥”. Pine Script recreation for educational/research use.
Bradley Industries IndicatorThe Bradley Industries Indicator is a confluence-based trading system designed to identify early trend impulses while filtering out late or low-probability entries.
It combines four independent indicators, each measuring a different market dimension, and only generates a primary signal when all four align on the same bar.
The philosophy of the system is simple:
Enter only when structure, momentum, volatility, and directional flow agree at the start of a move.
Weinstein Stage AnalysisWeinstein Stage Analysis
This is an enhanced version of Stan Weinstein's classic Stage Analysis, optimized for visual clarity on dark themes. The indicator instantly colors your candlesticks based on the current Weinstein Stage using a bright, fully opaque color scheme that stands out strongly even on dark charts.
Key Features:
- Uses Weekly 30-period SMA (customizable length) as the primary reference line
- Supports "Within Range %" parameter – set to 0% for super-strong stocks that must stay clearly above/below the MA
- Four distinct stages with vivid colors:
• Stage 1 (Accumulation) – Bright Cyan (#00FFFF) – Stock is basing or consolidating near the MA
• Stage 2 (Uptrend) – Bright Green (#00CD00) – Strong uptrend, price clearly above the weekly MA
• Stage 3 (Topping) – Bright Orange (#FFAA00) – Price is still above MA but weakening (potential distribution)
• Stage 4 (Downtrend) – Bright Red (#FF0000) – Strong downtrend, price clearly below the weekly MA
- Automatic stage transition logic with perfect color persistence (no flickering)
- Super visible on both light and dark themes – colors are 100% opaque and highly saturated
- Plots the Weekly 30 SMA as a thick white line for easy reference
How to Use:
1. Add to any chart (works best on daily or weekly timeframes)
2. For very strong momentum stocks, set "Within Range %" to 0% – this forces the indicator to only show Stage 2 when price is clearly above the MA
3. Use default 30-period length or adjust based on your preference
4. Watch for clean stage transitions – especially the switch from Stage 3 (orange) to Stage 4 (red) as a strong sell signal, or Stage 1 (cyan) to Stage 2 (green) as a powerful buy signal
Key Zone$ - Support and Resistance0DTE Bounce Zones (6M) — Support & Resistance with VWAP, Volume, and Risk Management
This indicator is built for intraday and 0DTE options trading, focused on high-quality bounce and rejection setups at historically proven support and resistance zones.
It automatically identifies key zones from six months of historical price action and waits for real-time confirmation before signaling CALL or PUT opportunities. The goal is to reduce noise, avoid weak bounces, and provide clear, rules-based trade structure.
====================================================================
CORE FEATURES
====================================================================
Historical Support & Resistance Zones (6 Months)
Zones are built using 15-minute pivot highs and lows.
A zone must be tested at least 3 times to be considered valid.
Nearby zones are merged automatically to reduce clutter.
Zones extend forward in time and update dynamically.
Support zones are shown in green, resistance zones in red.
These are higher-quality structural levels, not same-day levels.
====================================================================
0DTE-Focused Entry Logic
Signals only trigger when price interacts with a confirmed zone and shows a strong rejection candle.
Signals are limited to high-probability trading windows only.
Market Open: 9:30–10:45 ET
Market Close: 3:00–4:00 ET
This avoids midday chop and focuses on periods with real momentum.
====================================================================
VWAP Confirmation (Strict)
CALL setups require a VWAP reclaim.
PUT setups require a VWAP loss.
This aligns trades with institutional order flow instead of counter-trend noise.
====================================================================
MACD Momentum Filter
MACD histogram behavior is used to confirm momentum direction and avoid taking bounces against the prevailing move.
====================================================================
ATR Candle Strength Filter
The signal candle must be large enough relative to ATR.
This filters out weak or indecisive candles that often fail with 0DTE.
====================================================================
Advanced Volume Confirmation (Relative Volume)
Relative Volume (RVOL) is used instead of raw volume.
Different RVOL thresholds are applied for CALLS versus PUTS.
Higher RVOL is required for PUTS due to downside urgency.
Lower RVOL is allowed for CALLS due to grind-up behavior.
Separate RVOL thresholds are used for the market open and market close.
This ensures signals only occur when real participation is present.
====================================================================
Built-In Risk Management (2:1 Reward/Risk)
Every signal automatically calculates an entry, stop loss, and target.
Stop loss is based on the zone edge with an ATR buffer.
Targets default to a 2:1 reward-to-risk ratio.
Entry, stop, and target levels are drawn directly on the chart and included in alerts.
====================================================================
Smart Alerts (CALLS & PUTS)
Alerts trigger only when all conditions are met.
Alerts include trade direction, entry price, stop price, target price, and RVOL information.
Alerts are designed for 5-minute confirmation trading.
To use alerts, select “Any alert() function call” when creating the alert.
====================================================================
INTENDED USE
====================================================================
0DTE options trading.
5-minute chart confirmation.
Index ETFs and liquid equities such as SPY, QQQ, IWM, and SPX.
Traders who want aggressive entries with confirmation.
Traders who value structure, volume, and risk control.
====================================================================
NOTES
====================================================================
This is not a prediction tool.
Signals require discipline and confirmation.
Best results come from trading only the highest-quality setups.
Gold 2-Week Futures LevelsYou may change the color at bottom of script and i used 1h to mark out my levels, you may change it to fit your time frame.
DkS Market Structure Breakout Strategy Crypto & ForexDkS Market Structure Breakout Strategy Crypto & Forex
🔍 Overview
DkSPro – Universal Market Analysis is a structure-based trading strategy designed for Crypto and Forex markets, focused on trend alignment, breakout confirmation, and volume validation.
This strategy is built to filter low-quality trades, avoid ranging conditions, and reduce false breakouts by requiring multiple layers of confirmation before any trade is executed.
It is intended for scalping and intraday trading, prioritizing consistency and risk control over trade frequency.
🧠 Strategy Logic (How It Works)
DkSPro follows a sequential decision process, not a single-indicator signal:
Trend Bias (EMA Structure)
A fast and slow EMA define the directional bias.
Long trades are only allowed during bullish EMA alignment.
Short trades are only allowed during bearish EMA alignment.
This prevents counter-trend and ranging-market entries.
Market Structure & Breakout Validation
The strategy identifies recent swing highs and lows.
Trades are triggered only after a confirmed breakout of structure, not during consolidation.
This avoids early entries and false momentum moves.
Volume Confirmation
Volume must exceed its moving average by a defined multiplier.
This ensures participation and filters out low-liquidity breakouts.
Volume thresholds adapt depending on the selected trading mode.
Momentum Confirmation (RSI)
RSI is used strictly as a momentum filter, not as a standalone signal.
It confirms that price movement aligns with the breakout direction.
Risk Management (Mandatory)
Every position includes a predefined Stop Loss and Take Profit.
Position sizing is based on a fixed percentage of equity, keeping risk per trade within sustainable limits.
All conditions must align simultaneously; otherwise, no trade is executed.
⚙️ Trading Modes
SAFE Mode
Stronger volume and RSI thresholds
Fewer trades, higher selectivity
Designed for risk control and consistency
AGGRESSIVE Mode
Slightly relaxed filters
Higher trade frequency during strong momentum
Intended for experienced users only
📊 Markets & Assets
This strategy has been actively used and tested on:
🟢 Crypto (Binance / Binance.US)
SOL-USDT
XRP-USDT
Other high-liquidity pairs (BTC, ETH)
Crypto mode benefits from stronger volume confirmation to adapt to higher volatility.
🔵 Forex
Major pairs such as EURUSD, GBPUSD, USDJPY
Optimized for liquid markets with lower relative volume
The same structural logic applies to both markets, with volume behavior naturally adapting to each asset class.
⏱ Recommended Timeframes
Crypto: 5m – 15m
Forex: 15m – 1H
Lower timeframes (1m) are not recommended due to noise and unreliable volume behavior.
🧪 Backtesting & Settings Transparency
Default strategy properties are intentionally conservative to reflect realistic conditions:
Initial capital: $20,000
Position size: 2% of equity
Commission: 0.08%
Slippage: 1 tick
Fixed Stop Loss and Take Profit on every trade
Backtests should be performed on sufficient historical data (ideally 6–12 months) to ensure a statistically meaningful sample size (100+ trades).
📈 Originality & Usefulness
DkSPro is not a simple indicator mashup.
Each component serves a specific role in a layered confirmation system:
EMAs define direction
Structure defines timing
Volume validates participation
RSI confirms momentum
Risk management controls exposure
Removing any layer significantly reduces signal quality. The strategy is designed as a complete decision framework, not a signal generator.
⚠️ Important Notes
This script is an analysis and execution tool, not financial advice.
Market conditions change, and no strategy performs well in all environments.
Users are encouraged to backtest, forward test, and adjust position sizing according to their own risk tolerance.
🧩 Version Notice
This publication represents a consolidated and refined version of an internal experimental script.
No parallel or duplicate versions are intended.
All future improvements will be released exclusively using TradingView’s Update feature.
🇪🇸 Descripción en Español (Resumen)
DkSPro es una estrategia basada en estructura de mercado, diseñada para Crypto y Forex, que combina tendencia, ruptura de estructura, volumen y control de riesgo.
Solo opera cuando todas las condiciones se alinean, evitando rangos, falsas rupturas y sobreoperar.
Ha sido utilizada en Binance con pares como SOL-USDT y XRP-USDT, así como en Forex, siempre con gestión de riesgo fija y condiciones realistas.
MACD 12-26-9 with Slope, Convergence & Divergence1. Core Indicator: MACD (12-26-9)
The script uses the standard MACD:
Fast EMA: 12
Slow EMA: 26
Signal EMA: 9
It plots:
MACD Line → short-term vs long-term momentum
Signal Line → smoothed MACD
Histogram → distance between MACD and Signal
2. Histogram Slope (Momentum Acceleration)
What it is
The slope measures how fast the MACD histogram is changing.
histSlope = hist - hist
What it tells you
Positive slope → momentum accelerating
Negative slope → momentum slowing
Slope flip → early momentum shift (often before MACD cross)
Why it matters
MACD crosses are lagging.
Histogram slope gives early warning of momentum changes.
3. Convergence & Divergence (MACD vs Signal)
How it’s calculated
The script measures the distance between the MACD and Signal lines:
distance = abs(macdLine - signalLine)
Convergence → distance is shrinking
Divergence → distance is expanding
Interpretation
Convergence = compression / energy building
Divergence = expansion / trend strength or exhaustion
This is not price divergence, but internal momentum structure.
4. MACD Perimeter Threshold (Momentum Filter)
What it is
Horizontal bands above and below zero that define a “noise zone”.
Inside perimeter → weak / choppy momentum
Outside perimeter → strong momentum
Why it’s useful
Filters low-quality MACD crosses
Identifies compression → expansion
Helps spot trend exhaustion when momentum fades outside the band
5. Visual Encoding (What you see)
Histogram colors
Bright green / red → strong acceleration
Dull green / maroon → weakening momentum
Gray → indecision
MACD line color
Yellow → converging (compression)
Orange → diverging (expansion)
Blue → neutral
Markers
Up triangle → bullish convergence
Down triangle → bearish divergence
6. How traders use this indicator
Trend continuation
MACD above zero
Histogram positive
Slope rising
Divergence expanding
➡ Strong trend continuation
Pullback entries
Trend intact
Histogram pulls back toward zero
Slope turns up again
➡ High-probability re-entry
Breakout anticipation
Long convergence
Histogram flattening
Sudden slope expansion
➡ Breakout likely
Exhaustion warning
Large divergence
Histogram slope weakens
Momentum fails to expand
➡ Trend may stall or reverse
7. Best use cases
Works best as a momentum confirmation tool
Combine with:
Market structure
Support / resistance
Moving averages
Volume or Force Index
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.
Value Area PRO (TPO/Volume Session VAH/VAL/POC) 📌 AP Capital Value Area PRO (TPO / Volume)
AP Capital Value Area PRO is a session-based value area indicator designed for Gold (XAUUSD), NASDAQ (NAS100), and other CFD instruments.
It focuses on where the market has accepted price during the current session and highlights high-probability interaction zones used by professional traders.
Unlike rolling lookback volume profiles, this indicator builds a true session value area and provides actionable signals around VAH, VAL, and POC.
🔹 Core Features
Session-Anchored Value Area
Value Area is built only during the selected session
Resets cleanly at session start
Levels develop during the session and can be extended forward
No repainting or shifting due to lookback changes
TPO or Volume Mode
TPO (Time-at-Price) mode – ideal for CFDs and tick-volume data
Volume mode – uses broker volume if preferred
Same logic, different weighting method
Fixed Price Bin Size
Uses a fixed bin size (e.g. 0.10 for Gold, 0.25–0.50 for NAS100)
Produces cleaner, more realistic VAH/VAL levels
Avoids distorted profiles caused by dynamic bin scaling
VAH / VAL / POC Levels
VAH (Value Area High)
VAL (Value Area Low)
POC (Point of Control) (optional)
Lines can be extended to act as forward reference levels
🔹 Trading Signals & Alerts
Value Re-Entry
Identifies false breakouts where price:
Trades outside value
Then closes back inside
Often seen before strong mean-reversion or continuation moves.
Acceptance
Detects initiative activity using:
Multiple consecutive closes outside value
Filters out weak single-candle breaks
Rejection
Flags strong rejection candles:
Large candle body
Wick outside value
Close back inside the value area
These conditions are especially effective on Gold intraday.
🔹 Optional Profile Histogram
Right-side volume/TPO histogram
Buy/sell imbalance visualization
Fully optional to reduce chart clutter and improve performance
🔹 Best Use Cases
Recommended markets
XAUUSD (Gold)
NAS100 / US100
Other index or metal CFDs
Recommended timeframes
5m, 15m, 30m
Suggested settings
Mode: TPO
Value Area: 70%
Bin size:
Gold: 0.10
NAS100: 0.25 or 0.50
🔹 How Traders Use It
Trade rejections at VAH / VAL
Look for acceptance to confirm trend days
Use re-entries to fade failed breakouts
Combine with trend filters, EMA structure, or session context
⚠️ Disclaimer
This indicator is provided for educational and analytical purposes only and does not constitute financial advice. Always manage risk appropriately.
Session VWAP Cumulative BiasThe Session VWAP Cumulative Bias indicator is designed to differentiate between "choppy" price action and true "institutional" trend days. Unlike standard VWAP indicators that only show where price is now, this tool tracks the cumulative sentiment of the entire session.
Core Functions:
Cumulative Z-Score Logic: It calculates the distance between price and VWAP (in Standard Deviations) and sums it up over the course of the day. This reveals the "weight" of the market bias—the longer price stays pinned away from the VWAP, the more extreme the histogram becomes.
Scale Protection: It includes a "Capping" mechanism that prevents morning gaps or low-volume outliers from distorting the scale, ensuring the histogram remains readable from open to close.
Momentum vs. Regime Toggles: Users can switch between VWAP Slope (measuring the speed of the average's movement) and Cumulative Bias (measuring total session dominance).
Visual price Overlay: It automatically colors the price candles and plots a session-anchored VWAP line on the main chart, providing a clear visual of when price is "fair" versus "overextended."
How to read it:
Trend Confirmation: A steadily growing "mountain" in the histogram confirms an institutional trend day where dips are being bought (or rips sold).
Mean Reversion: When price hits a new high but the Cumulative Histogram begins to round off or diverge, it signals that the "elastic band" is stretched and price is likely to return to the orange VWAP line.
Regime Shifts: A cross of the zero-line on the histogram indicates a total shift in session control from buyers to sellers (or vice versa).
4 Period Momentum Composite IndicatorThe 4‑Period Momentum Indicator blends four lookback windows (1m, 3m, 6m, 12m) into a single zero‑centered momentum line. The value recalculates from whatever candle you anchor on, giving you full control when scrolling through historical price action. Positive readings reflect upward momentum, negative readings show weakness, and zero‑line crossovers highlight potential trend shifts. Designed for multi‑timeframe use and ETF relative‑strength comparison.
Auto Fib Prev-Week Only for [4H+ Swing]Maps the previous week Fib levels:
Captures real supply & demand.
Defines where price was accepted or rejected.
Creates levels that current price must respect.
This indicator locks those levels in place and extends them forward.
What the levels represent:
- Previous Week High / Low
- Major boundaries. Breaks require momentum.
- 50% Level
- Balance point. Chop and indecision are common here.
- 61.8% Levels (Bull & Bear)
- Primary mean-reversion zones.
- Most reliable reaction levels.
- 78.6% Levels
- Last defense before trend failure or expansion.
- Extensions (1.214 → 2.618 / negatives)
- Exhaustion and target zones.
Working....
Dashboard (bottom-right)
- Nearest Sup / Res – Closest actionable level
- On Level? – Price is currently reacting at a level
- UpBreak% / DnBreak% – Probability of breaking vs rejecting
- Bias – Market posture (UP / DOWN / NEUTRAL)
- Tol – Sensitivity used for level detection
BLUF: Maps last week’s structure forward to identify high-probability reaction zones and whether price is more likely to revert or break.
Relative Strength SpreadSPY vs IWM Relative Strength Spread Indicator
The SPY vs IWM Relative Strength Spread indicator measures leadership between large-cap and small-cap equities by comparing the percent performance of SPY (S&P 500) against IWM (Russell 2000) over a user-defined lookback period.
The indicator plots a zero-centered histogram in a separate pane, making relative strength shifts immediately visible.
How It Works
The indicator calculates the percent change of SPY and IWM over the same lookback window.
It then subtracts IWM’s percent change from SPY’s percent change.
The result is plotted as a histogram pinned to the 0% line.
This design removes long-term drift and ensures that:
Positive values indicate SPY is outperforming IWM
Negative values indicate IWM is outperforming SPY
How to Read the Histogram
Above Zero (Green Bars)
Large-cap stocks are leading → typically associated with risk-on stability and institutional flow into SPY-weighted names.
Below Zero (Red Bars)
Small-cap stocks are leading → often signals risk appetite expansion and speculative participation.
Crosses of the Zero Line
Mark potential leadership transitions between large caps and small caps.
Why This Indicator Is Useful
Identifies market regime shifts (risk-on vs risk-off behavior)
Confirms or filters trend strength in equities
Helps time rotations between large-cap and small-cap exposure
Works consistently across all timeframes
Because the calculation is based on percent change, the histogram remains normalized and comparable regardless of price level or timeframe.
Best Use Cases
As a market internals / breadth confirmation tool
As a bias filter for SPY, IWM, or index futures
To spot early leadership changes before price trends fully develop
John Trade AlertsImagine you are watching a ball bounce up and down on a graph.
This script is like a set of rules that says:
When to start playing
When to stop playing
When you got some prize levels
and it yells to you (alerts) when those things happen.
The main ideas
Breakout Buy (ball jumps high)
There is a line drawn high on the chart called the breakout level.
If the price (the ball) closes above that line, and some extra “good conditions” are true (enough volume, uptrend, etc.),
the script says: “We entered a Breakout trade now.”
Pullback Buy (ball dips into a box)
There is a zone (a small box) between a low line and a high line: the pullback zone.
If the price closes inside that zone, and the pullback looks “healthy” (not too much volume, still above a moving average, etc.),
the script says: “We entered a Pullback trade now.”
Stops (when to get out if it goes wrong)
For each entry type (Breakout or Pullback), there is a red stop line under the price.
If the price falls below that stop line, the script says:
“Stop hit, we’re out of the trade.”
Hard Support / Invalidation (big no‑no level)
There is a special hard support line.
The script also looks at the 1‑hour chart in the background.
If a 1‑hour candle closes below that hard support, it says:
“Hard invalidation – idea is broken, get out.”
Targets (prize levels)
Above the current price there are several orange lines: Target 1, 2, 3A, 3B, 4A, 4B.
If the price goes up and crosses one of these lines, the script says:
“Target X reached!”
Trend and Volume “health checks”
It checks if the short‑term average price (SMA20) is going up → “uptrend.”
It can check if price is above a long‑term average (SMA200).
For breakouts, it checks if volume is stronger than usual (good push).
For pullbacks, it prefers quieter than usual volume (calm dip).
It can also check an Anchored VWAP line (a special average price from a chosen starting time) and only trade if price is above that too.
Remembering if you are “in a trade”
The script keeps a little memory:
Are we currently in a position (inPos) or not?
Was it a Breakout or a Pullback entry?
What is our entry price and active stop?
When it gets a new entry signal, it turns inPos to true, picks the right stop, and draws that stop line.
When a stop or hard invalidation happens, it sets inPos to false again.
It can also “forget” and reset at the start of a new trading day if you want.
Alerts
When:
you get a Breakout entry
or a Pullback entry
or a Stop is hit
or the hard support is broken on 1‑hour
or a Target is reached
the script sends a message you can use in TradingView alerts (pop‑ups, email, webhook, etc.).
Things you see on the chart
Teal line: Breakout level
Green lines: Pullback zone low & high
Red line: Active stop (only when you’re “in” a trade)
Orange lines: Targets 1, 2, 3A, 3B, 4A, 4B
Blue line: Anchored VWAP (if you turn it on)
Purple faint line: SMA20 (short‑term trend)
Gray faint line: SMA200 (long‑term trend)
Little label near the last bar that says:
if you’re IN or Flat
which type of entry (Breakout/Pullback)
what your current stop is
So in kid words:
It draws important lines on the chart.
It watches the price move like a ball.
When the ball does something special (jump above, fall below, hit a prize line),
it shouts to you with alerts.
It remembers if you’re in the game or not, and where your safety line (stop) is.
Daily Inputs - The Prometheus InitiativeDaily ES inputs from the Prometheus Initiative is a clean, customizable overlay indicator designed specifically for ES (S&P 500 E-mini futures) day traders who rely on manually selected key price levels each session.
Instead of spending time manually drawing horizontal lines every day, this tool lets you quickly input the daily price levels directly in the settings and instantly see them plotted as horizontal lines across your chart.
Key Features:
• 15 fully editable price inputs with customizable settings.
Why this indicator was created:
Manually drawing 10–15 lines each morning is time-consuming. This indicator was developed to eliminate that friction — allowing fast, accurate plotting of levels so you can focus on execution rather than drawing tools. The largest benefit is that you can toggle the indicator on/off to keep a clean chart as to not interfere with your existing visual levels.
Perfect for:
- ES / NQ futures traders
- Anyone who wants a clean, no-nonsense way to visualize custom horizontal levels
How to use:
1. Add to your chart
2. Open Settings → Enter the daily levels provided
3. Watch price interact with the levels!
Note: This is a manual input tool. Levels do NOT auto-calculate. It's meant to reflect the exact levels posted each day.
Happy trading! 📈
Feel free to leave feedback or suggestions in the comments.
Disclaimer: This indicator is for educational/visual purposes only. Trading futures involves substantial risk of loss and is not suitable for all investors.
Dynamic Zone TraderDynamic Zone Trader - MACD-based trading system with adaptive stop loss and take profit zones.
This indicator generates buy/sell signals from MACD histogram crossovers and automatically adjusts position sizing based on market conditions.
Key Features:
Detects breakout trades and expands targets to capture larger moves
Identifies choppy/ranging conditions and tightens stops to reduce risk
Shows supply and demand zones based on pivot highs/lows
Displays three take profit levels (TP1, TP2, TP3) that scale with trade quality
Entry signals filtered by 50 EMA to trade with the trend
Signal strength score displayed on each entry marker
How It Works:
The indicator analyzes recent price structure and movement to classify each trade:
Breakout trades (breaking recent highs/lows) get 1.6x larger zones
Normal trades get standard 1.0x sizing
Choppy weak signals get 0.75x smaller zones
This allows you to take bigger positions on high-conviction setups while limiting risk during low-quality trades.
Settings:
MACD parameters (default 8/21/5)
Base stop loss: 60 ticks
Base take profit: 80 ticks
EMA filter: 50 period
Optional ADX trend filter
Adjustable breakout detection sensitivity
Works on any timeframe and instrument, but optimized for index futures like NQ/MNQ.
RSI Swing Indicator// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
//
// DESCRIPTION:
// This is an improved version of the original RSI Swing Indicator created by BalintDavid.
// It highlights swing moves between RSI overbought/oversold extremes and updates swing labels
// as price pushes to new highs or lows inside the same RSI regime.
//
// HOW TO USE:
// 1) Set the RSI source, length, and overbought/oversold levels in Inputs.
// 2) Watch the swing lines connect the last oversold to overbought (and vice-versa).
// 3) Labels show structure: HH (higher high), LH (lower high), HL (higher low), LL (lower low).
// 4) Enable "Show only last connecting line" to keep just the most recent connection.
//
// CONTACT:
// ronbelson@gmail.com
//
Week High/LowThis indicator plots the Previous Week High and Low as two horizontal dashed lines.
It is designed to appear only on the Daily (D) and Weekly (W) timeframes, ensuring a clean higher-timeframe context without lower-timeframe noise.
The levels are calculated from the completed weekly candle and automatically update at the start of each new week.
These levels serve as weekly liquidity references, commonly used to assess premium/discount zones, potential stop-run areas, and higher-timeframe market reactions.






















