My Smart Volume Profile – Fixed
Title: 🔹 My Smart Volume Profile – Fixed
Description:
Lightweight custom Volume Profile showing POC, VAH, and VAL levels from recent bars. Highlights the value area, marks price touches, and supports optional alerts.
Developer Note:
Created with precision and simplicity by Magnergy
Indikator dan strategi
Aibuyzone Vector Strategy - Floating DashboardVector Strategy – Floating Dashboard
The Vector Strategy is a visual trading-analysis tool designed to highlight strong directional candles that may represent impulsive moves in the market. It combines candle-structure analysis, volatility expansion, volume conditions, and trend filters into a single clear visual display.
Core Logic
Identifies candles where the body makes up a significant portion of the full bar range, suggesting strong directional intent.
Uses an ATR (Average True Range) expansion filter to confirm that the current candle’s range is larger than normal volatility.
Optionally applies a wick-imbalance requirement to favor bars showing a clear directional bias.
Can include a volume spike filter, marking candles where volume exceeds a moving average multiple.
Trend and Momentum Filters
Local trend: Defined by a fast and slow EMA pair to show short-term bias.
Higher-timeframe trend: Optionally aligns with an EMA from a higher timeframe to confirm broader momentum.
Momentum: RSI filter avoids generating signals in heavily overbought or oversold conditions.
Fair Value Gap (FVG) Option
When enabled, the script checks for a simple three-bar fair-value-gap structure in the direction of the potential signal, acting as an additional confirmation filter.
Signals and Visuals
Plots fast and slow EMAs to visualize the underlying trend.
Displays up/down shapes when qualifying vector-candle conditions occur.
Optional labels show “Vector Long” or “Vector Short” at the candle where conditions align.
Includes alert conditions for both long and short setups.
Floating Dashboard
A compact floating panel summarizes the most recent signal and market context:
Current signal state (Long / Short / Neutral)
Trend bias (Bullish / Bearish / Flat)
RSI reading
Body-to-range percentage
Volume-spike confirmation
Practical Use
This tool can assist traders in identifying strong impulsive candles aligned with a trend filter.
It is meant to complement a complete trading strategy, not to be used in isolation.
Traders may adjust thresholds such as ATR multiple, body-percentage, or RSI range based on the instrument’s volatility and personal risk tolerance.
Important Notice
This script is provided for educational and analytical purposes only.
It does not provide financial advice, recommendations, or guaranteed results.
Market conditions vary, and past performance does not ensure future outcomes.
Always test and validate any configuration in a simulated environment before live trading.
Block-Based Trend Breakout (UTB/DTB) & S/R ZonesThis indicator is designed to detect potential trend reversals or volatility bursts by analyzing price action structured into "blocks." Its primary goal is to capture the earliest signals that a defined trend structure is weakening or breaking.
Signal Generation:
🟢 DTB (Downtrend Breakout): When a confirmed downtrend is identified (e.g., price has been falling for 2 blocks), the indicator waits for the price to break above the highest high of the last completed block in that trend. When this break occurs, it signals a potential bullish reversal with a green DTB triangle below the bar.
🔴 UTB (Uptrend Breakdown): When a confirmed uptrend is identified (e.g., price has been rising for 2 blocks), the indicator waits for the price to break below the lowest low of the last completed block. When this break occurs, it signals a potential bearish reversal with a red UTB triangle above the bar.
🛠️ Key Settings
Block Size (bars): The number of bars in each block used to analyze the trend structure. Lower values track short-term trends; higher values track long-term trends.
Trend Confirmation (steps): The minimum number of consecutive blocks required to "confirm" a trend.
Tolerance: Allowed Off-Trend Steps: The number of "noise" blocks allowed while confirming a trend.
Show Support/Resistance Zones: Toggles the histogram-based S/R zones on or off.
S/R Lookback (blocks): Determines how many blocks to look back for calculating S/R zones.
S/R Zone Width (in ATR): Sets the thickness of the S/R zones, denominated in ATRs.
If you find this useful please reach out and let me know how you use it as it's fairly unique... and thus different than anything I've ever seen or used.
Buy/Sell Volume Tracker [wjdtks255]Indicator Description
Function: Separates buy and sell volume based on candle direction (close ≥ open) and displays the buy−sell difference (hist_val) as a histogram.
Visuals: Buy/sell bars are distinguished by user-selectable colors and opacity; two moving averages (MA1 and MA2) are shown to smooth the flow.
Meaning: A positive histogram indicates buy dominance; a negative histogram indicates sell dominance.
Limitation: The current separation is estimated from candle direction and may differ from execution-side (tick/trade-side) based data.
Trading Rules (Summary)
Conservative trend-following long
Entry: Enter long when hist_val turns above 0 and MA1 crosses MA2 from below.
Stop-loss: Exit if hist_val falls back below 0 or MA1 drops below MA2.
Take-profit: Use a risk:reward of 1:1.5 or set targets based on ATR.
Short-term rebound long
Entry: Enter a short-term long when a large negative histogram region begins to narrow and shows a recovery sign.
Stop-loss: Exit if hist_val drops below the previous low or bearish candles continue.
Take-profit: Prefer quick partial profit-taking.
Short (sell) strategy
Entry: Enter short when hist_val falls below 0 and MA1 crosses MA2 from above.
Stop-loss / Take-profit: Apply the inverse rules of the long strategy.
Filters and risk management
Volume filter: Only accept signals when volume exceeds a fraction of average volume to reduce noise.
Entry strength: Require |hist_val| to exceed a historical average threshold (e.g., avg(|hist_val|, N) × factor) to strengthen signals.
Position sizing: Size positions so that account risk per trade is within limits (e.g., 1–2% of account equity).
Timeframe: Use short timeframes for scalping and 1h+ for swing trading.
3ATMANE RANGEThis indicator calculates a custom range based on the 04:00 UTC H1 candle. It uses EMA(6) of HLC4 from the 1-hour timeframe and measures the pip distance from the high and low of that candle to the EMA. Two horizontal lines are drawn:
🔴 Down Line: projected below the low by the same pip distance from high to EMA
🟢 Up Line: projected above the high by the same pip distance from EMA to low
The lines are time-based and remain visible across all timeframes. A top-right table displays the pip values and the number of active lines.
Ideal for range breakout setups, volatility tracking, or session-based scalping logic.
Powered by 3ATMANE Logic 🔥
RSI ⇄ SMA Cross Alerts (80/20, On Close)RSI ⇄ SMA Cross Alerts (80/20, On Close)
Add //@version=5 (required in Pine v5).
Your logic is fine for “after being >80/<20 then RSI crosses its SMA,” and barstate.isconfirmed enforces on close.
plot(close) in a non-overlay RSI pane will squash the scale—drop it (or set overlay=true and move RSI to a separate scale, but simplest is just remove it).
Optional: expose source, add a tiny cooldown, and let alerts include close/RSI values.
MTF VFSMA SqueezeThe purpose of this indicator is to detect a market squeeze (lack of volatility) period and to identify the initiation and direction of the breakout.
It is based on Variety-Filtered, Squeeze Moving Averages indicator.
The original indicator created by Loxx identifies both squeeze zones and breakouts/breakdowns. A squeeze zone is defined when price is below a specific volatility threshold calculated as the difference between a fast- and slow-moving average and filtered using ATR- or Pips-based threshold.
It operates on a single timeframe and includes Loxx's Expanded Source Types, signals, alerts, etc. and 35+ Loxx's Moving Averages. These adaptive, minimal-lag indicators are built upon advanced mathematical and signal processing DSP techniques that far surpass traditional Moving Averages.
This currently published indicator includes the following main developments:
Squeeze Detection using Percentile Rank Method
It detects the Squeeze by applying a Percentile Rank to the historical distance (spread) between the two MAs.
MA Spread: The basis for Squeeze detection is the distance between the two moving averages.
Percentile Rank: A statistical measure that indicates the percentage of past Spread values within the set lookback period that are lower than the current MA Spread.
Squeeze State: A Squeeze occurs when the Percentile Rank is below the set Squeeze Threshold (%)).
Example: If the threshold is 20% and the Rank is 15%, it means the MA Spread is in its tightest 15% range, below the set threshold. Therefore, the condition is currently met.
Goal: Objective volatility measurement that adapts to market conditions.
Squeeze Duration Filter
A key condition for a Breakout signal is that the MAs must have remained in the Squeeze zone for a specified minimum duration.
Goal: To filter out market noise and False Breakouts.
Multi-Timeframe (MTF) Confluence
Multi-Timeframe trend and squeeze monitoring for 3 timeframes (TFs).
Provides confirmation using the MA status from two higher timeframes (TF2, TF3).
Goal: Trend and momentum confirmation from a broader market context.
Signals Only on Bar Close?
By selecting the signalOnClose parameter to enabled, it is possible to avoid repainting on the chart TF. If it is checked, all events on the chart (L/S signals, Squeeze Start/End, MA color change) will only appear after the bar has closed, preventing repainting. Higher TF events remain in real-time.
Goal: To increase the reliability of signals.
Multi-Level Alerts and Info Panel
Comprehensive, confluence-weighted alerts and real-time status display.
Enhanced Alerts based on multi-timeframe confluences. Alerts are ready to enable/disable for Any alert() function call and ready for watchlists. Alert Frequency is also configurable in Inputs window. „Once per bar close” is the most reliable for signals. „Always” or „Once per bar” alert frequencies may generate temporary signal alerts.
Please note that even if "Once per bar close" is selected as alert frequency, this only applies to the chart TF, and TF2 and TF3 status may be modified until the close of the relevant candle.
Goal: Transparent decision-making.
Other Improvements
Unlike the original indicator, the coloring of the MA curves on the chart depends on the relative positions of the fast MA and slow MA. The curves are colored bullish when the fast MA is above the slow MA, bearish when the opposite is true, and neutral in the squeeze zone.
Data Window with Squeeze Start/End, Buy/Sell, Status, Squeeze Percentile etc. on all 3 TFs.
Ready for Pine Screener.
Please be aware that currently only the chart TF is configurable in Pine Screener, TF2 and TF3 are set to their default values.
Pine Script® version 6.
Limitations
When setting the indicator parameters, please take into account the limitations of TradingView. (Lookback period of Percentile Rank and Moving Averages periods, Execution time limit (timeout) etc.)
For example, if a NaN% message appears as the Percentile Rank value, please reduce the lookback period.
How to use it
This indicator is a Breakout-following system, but it can also be the basis for Range Trading.
The Setup Phase
This is the preparation stage. The indicator signals low volatility as the bands tighten.
Squeeze Dynamics: Monitoring the Squeeze Duration is essential. The longer the price spends in the Squeeze zone, the more likely the resulting breakout will be powerful.
The Signal Phase (Breakout)
The Breakout signal appears on the bar where the Percentile Rank first crosses above the Squeeze threshold, indicating a sudden return of volatility.
Further condition: Meets the SqueezeDuration filter.
Breakout direction: Bullish: Fast MA > SLow MA, Bearish: Fast MA < SLow MA
Applying MTF Confluence:
The most promising trades that are in line with higher timeframes:
Total Confluence: Chart TF Signal + TF2 Bullish/Bearish + TF3 Bullish/Bearish. This is the strongest, highest-probability setup.
Simple signal: Only the Chart TF signals. This should be handled with caution, as the higher timeframes (TF2, TF3) might still be in a Squeeze or in a conflicting state.
Alternative Use: Range Trading within the Squeeze Bands
If the market has low volume, the squeeze bands can be used as dynamic support/resistance for bounces off the edges of the range:
The probability of a successful range trade increases if the boundaries of the squeeze zone have only been touched a few times previously. Each touch weakens the zone boundaries and increases the chance of a Breakout.
Suggested Tactics and Risk Management
When using Breakout strategies, strict risk management and the use of confirmations are essential:
Volume Confirmation: A strong, above-average volume Breakout candle increases the probability of a successful breakout.
False Breakout: If the breakout occurs on low volume, there is a higher chance of a pullback and a False Breakout.
Entry After Retest: A safer entry: wait until the price breaks out, but only enter if it returns to the squeeze zone and bounces back from there. This reduces the risk of a False Breakout trap.
The Risk of False Breakout:
False Breakouts are part of any Breakout strategy. Always have a strict Stop Loss set.
Reversal: Be prepared for the possibility that after a Breakout signal (e.g., Long), the price returns to the zone and then breaks out in the opposite (Short) direction.
Please note that all technical analysis and trading signals only indicate probabilities. Always use your own risk management rules and follow market regulations.
Disclaimer
This indicator is provided for educational and informational purposes only. It is not financial advice.
Trading involves substantial risk of loss and is not suitable for every investor. Past performance shown in examples is not indicative of future results.
The indicator provides signals and calculations, but trading decisions are solely your responsibility. Always:
Test strategies on paper before using real money
Never risk more than you can afford to lose
Understand that all trading involves risk
Consider seeking advice from a licensed financial advisor
The publisher makes no guarantees regarding accuracy, profitability, or performance. Use at your own risk.
Jim Sloman's Adam Theory's Second Reflection LineIt's a second reflection of past data.
Based on the idea found on Welles Wilder's book 'The Adam Theory of Markets'.
In that book Jim Sloman explains his idea of second reflection of price activity.
Instead of every bar, I just plotted line. I suggest to use a RL (Regression Line Curve) to smooth the source of the Adam Line so that the reflection is beautiful.
Simple EMA Cloud 20/50Shades the area between the 20 and 50 EMAs.
That's all it does, but combined with other indicators like the MACD, it gives you clear indications of entries and exits.
AND, it has no calories. What more could you ask for?
Crypto Breadth Engine [alex975]
A normalized crypto market breadth indicator with a customizable 40 coin input panel — revealing whether rallies are broad and healthy across major coins and altcoins or led by only a few.
📊 Overview
The Crypto Breadth Engine measures the real participation strength of the crypto market by analyzing the direction of the 40 largest cryptocurrencies by market capitalization.
⚙️ How It Works
Unlike standard breadth tools that only count assets above a moving average, this indicator measures actual price direction:
+1 if a coin closes higher, –1 if lower, 0 if unchanged.
The total forms a Breadth Line, statistically normalized using standard deviation to maintain consistent readings across timeframes and volatility conditions.
🧩 Dynamic Input Mask
All 40 cryptocurrencies are fully editable via the input panel, allowing users to easily replace or customize the basket (Top 40, Layer-1s, DeFi, Meme Coins, AI Tokens, etc.) without touching the code.
This flexibility keeps the indicator aligned with the evolving crypto market.
🧭 Trend Bias
The indicator classifies market structure as Bullish, Neutral, or Bearish, based on how the Breadth Line aligns with its moving averages (10, 20, 50).
💡 Dashboard
A compact on-chart table displays in real time:
• Positive and negative coins
• Participation percentage
• Current trend bias
🔍 Interpretation
• Rising breadth → broad, healthy market expansion
• Falling breadth → narrowing participation and structural weakness
Ideal for TOTAL, TOTAL3, or custom crypto baskets on 1D,1W.
Developed by alex975 – Version 1.0 (2025).
-------------------------------------------------------------------------------------
🇮🇹 Versione Italiana
📊 Panoramica
Il Crypto Breadth Engine misura la partecipazione reale del mercato crypto, analizzando la direzione delle 40 principali criptovalute per capitalizzazione.
Non si limita a contare quante coin sono sopra una media mobile, ma calcola la variazione effettiva del prezzo:
+1 se sale, –1 se scende, 0 se invariato.
La somma genera una Breadth Line normalizzata statisticamente, garantendo letture coerenti su diversi timeframe e fasi di volatilità.
🧩 Mascherina dinamica
L’indicatore include una mascherina d’input interattiva che consente di modificare o sostituire liberamente i 40 ticker analizzati (Top 40, Layer-1, DeFi, Meme Coin, ecc.) senza intervenire nel codice.
Questo lo rende sempre aggiornato e adattabile all’evoluzione del mercato crypto.
⚙️ Funzionamento e Trend Bias
Classifica automaticamente il mercato come Bullish, Neutral o Bearish in base alla relazione tra la breadth e le medie mobili (10, 20, 50 periodi).
💡 Dashboard
Una tabella compatta mostra in tempo reale:
• Numero di coin positive e negative
• Percentuale di partecipazione
• Stato attuale del trend
🔍 Interpretazione
• Breadth in crescita → mercato ampio e trend sano
• Breadth in calo → partecipazione ridotta e concentrazione su pochi asset
Ideale per analizzare TOTAL, TOTAL3 o panieri personalizzati di crypto.
Funziona su timeframe 1D, 4H, 1W.
Sviluppato da alex975 – Versione 1.0 (2025).
Crash Stats 15m (ETH) — X% | prev RTH min(VWAP, Close)# Crash Stats 15m (ETH) — X% Drawdown Event Analyzer
A 15-minute indicator that scans up to the last 5 years to find **crash events** where the close falls by at least **X%** relative to the **lower of** the prior day’s **RTH VWAP** and **RTH close**. It then measures recovery and follow-through behavior, tags the market regime around each event, and summarizes everything in a table.
---
## What the script detects
**Crash event (trigger):**
* On a 15-minute bar, `close <= refPrice * (1 - X%)`.
* `refPrice = min(previous RTH VWAP, previous RTH close)`.
* First touch only: subsequent bars below the threshold on the same trading day are ignored.
* Extended hours (ETH) are supported; if ETH is off, the script safely infers the previous RTH reference.
**Per-event measurements**
1. **Time to “turn up”** – first close **above the event-anchored AVWAP** (AVWAP cumulated from the trigger bar onward).
2. **Time to recover the reference price** – first close ≥ `refPrice`.
3. **Time to recover Y% above the crash-day average price** – first close ≥ `crashDayVWAP * (1+Y%)`.
4. **Post-crash lowest price & timing** – the lowest low and how long after the event it occurs, within a user-defined horizon (default 10 trading days, approximated in calendar days).
5. **Intraday RTH low timing** – on the crash day’s RTH session, when did the day’s intraday low occur, and **was it on the first 15-minute bar**?
6. **First 15-minute low of the RTH day** – recorded for context.
All durations are shown as **D days H hours M minutes**.
---
## Regime tagging (A / B)
For each event the script classifies the surrounding trend using daily closes:
* Let `r6m = (prevClose – close_6mAgo) / close_6mAgo`,
`r12m = (prevClose – close_12mAgo) / close_12mAgo`.
* **A**: both `r6m > 0` and `r12m > 0` (uptrend across 6m & 12m).
* **B**: one positive, one negative, and `r6m + r12m ≥ 0` (mixed but net non-negative).
* Otherwise: **—**.
This helps separate selloffs in strong uptrends (A) from mixed regimes (B) and others.
---
## Inputs
* **X — Crash threshold (%)**: default 5.
* **Y — Recovery above crash-day average (%)**: default 5.
* **Lookback years**: default 5 (bounded by data availability).
* **Horizon for post-crash lowest (trading days)**: default 10 (approximated as calendar days).
* **RTH session**: default `09:30–16:00` (exchange timezone).
* **Show markers**: plot labels on triggers.
* **Rows to display**: last N events in the table.
---
## Table columns
* Index, **Trigger time**, **Drop %**, **Ref price**, **Regime (A/B/—)**
* **Time to turn up** (above anchored AVWAP)
* **Time to ref price**, **Time to day VWAP + Y%**
* **Window lowest price**, **Time to window low**
* **RTH first-15m low**, **RTH lowest time**, **Was RTH low on first 15m?**
* **Crash-day VWAP**
---
## How to use
1. **Set chart to 15-minute** and **enable extended hours** for equities (recommended).
2. Keep defaults (**X=5%, Y=5%**) to start; tighten to 3–4% for more frequent events on less volatile symbols.
3. For non-US symbols or futures, adjust the **RTH session** if needed.
4. Read the table (top-right) for per-event diagnostics and aggregate averages (bottom row).
---
## Notes & implementation details
* Works whether ETH is on or off. If ETH is off, the script back-fills “previous RTH” references at the next RTH open and uses the prior daily close as a fallback.
* The “turn up” definition uses **event-anchored AVWAP**, a robust, price–volume anchor widely used for post-shock mean reversion analysis.
* Events are **de-duplicated**: only one event per trading day (per target RTH cycle).
* Lookback is limited by your plan and the data vendor. The script requests deep history (`max_bars_back=50000`), but availability varies by symbol.
* Durations use minute precision and are rendered as **days–hours–minutes** for readability.
---
## Quick troubleshooting
* **No events found**: lower **X%**, enable **ETH**, or ensure sufficient history is loaded (scroll back, or briefly switch to a higher timeframe to force deeper backfill, then return to 15m).
* **RTH boundaries off**: check the **RTH session** input matches the venue.
* **Few rows in table**: increase **Rows to display**.
---
## Typical use cases
* Back-test how fast different symbols tend to stabilize after a sharp gap-down or intraday shock.
* Compare recovery behavior across regimes **A / B** for sizing and risk timing.
* Build playbooks: e.g., if the RTH low occurs on the first 15m bar X% of the time, plan entries accordingly.
---
## Changelog
* **v1.0**: Initial public release with crash detection, anchored-AVWAP reversal, reference & VWAP+Y recovery timers, regime tagging, window-low timing, RTH low timing, and first-15m low capture.
Ethereum Sleepy Wallets – 6-Month DormancyWhat This Indicator Does
It measures how many Ethereum addresses have been completely inactive for at least 6 months (≥ 180 days) — using official Glassnode and CryptoQuant on-chain metrics.
This reveals deep conviction among long-term ETH holders
Core Concept: Direct 6-Month Dormancy
The indicator uses two precise on-chain signals:
Total Unique ETH Addresses
From GLASSNODE:ETH_ADDRESSES or CRYPTOQUANT:ETH_TOTAL_ADDRESSES
Counts every address ever used on Ethereum
Addresses Inactive ≥ 180 Days
From GLASSNODE:ETH_ADDRESSES_GREATER_THAN_180_DAYS
Counts every address that has not sent or received ETH in 6+ months
Sleepy ETH = Dormant ≥ 180 Days
Sleepy Ratio % = (Sleepy / Total) × 100
This is not an estimate — it’s direct, real dormancy.
Why 6-Month Dormancy Matters
Short-term activity (7-day) = noise from DeFi, NFTs, trading
180-day inactivity = true HODLing — coins untouched through entire market cycles
Historically:
Rising dormancy → supply drying up → bullish pressure
Falling dormancy → long-term holders selling → bearish warning
How It Works (Step-by-Step)
Fetches daily data from Glassnode (Pro+) or CryptoQuant (free)
Selects real data if available; otherwise uses robust fallback
Calculates raw sleepy wallets = addresses inactive ≥ 180 days
Smooths the signal with a 21-day simple moving average (SMA) to filter noise
Computes Sleepy Ratio % for instant conviction reading
Displays live info table with exact values on every bar
How to Use It
Signal
Interpretation
Suggested Action
Sleepy Ratio > 75% and rising
Extreme long-term HODLing
Strong accumulation — buy/hold
Smooth Sleepy trending up
Dormancy growing over 21 days
Bullish supply shock forming
Sleepy Ratio < 68% and falling
Long-term coins re-entering circulation
Caution — possible distribution
Smooth Sleepy dropping fast
HODLers breaking after 6+ months
Bearish warning — consider exits
Use on Daily (D) or Weekly (W) charts for clean, reliable signals.
Pro+ vs Free Mode
Mode
Data Source
Accuracy
Pro+ (Glassnode ON)
Real 180-day dormancy metric
100% precise
Free (Glassnode OFF)
CryptoQuant + price-scaled estimate
~80% historical correlation
Toggle in settings: Use Glassnode Data
What Makes This Indicator Original
First open-source script to directly plot Ethereum’s 6-month dormancy using official ADDRESSES_GREATER_THAN_180_DAYS
No fake math — uses true inactivity, not active address subtraction
Dual-source logic ensures usability on any TradingView plan
Dual output: raw sleepy count + 21-day SMA for precision and trend
Live info table shows real-time values and data source
Doji Pullback Buy SignalThis code includes:
Main Logic:
Rally Detection: Identifies when price has been rising for a specified number of consecutive candles
Pullback Detection: Identifies when price declines after a rally
Doji Identification: Finds candles with small bodies relative to their range
Buy Signal: Triggers when:
A rally occurs
Followed by a pullback
The last candle of the pullback is a Doji
The next candle closes above the Doji's high
《趨勢跟蹤》拜讀趨勢跟蹤這本書非常喜歡,根據書中內容製作出來的指標,包含:順勢交易、多空都做、加碼和風控。
t.me
《Trend Following》
I really enjoyed reading the book Trend Following. The indicators created based on the book's content include: momentum trading, going long and short, pyramiding, and risk control.
Double Grid + Auto Countdown Timer (Stable v6.1)Adjustable grid indicator with two levels and bar countdown timer fully adjustable.
ice tea//@version=6
indicator("ICT + ICC Combined Strategy", overlay=true)
// === INPUTS ===
bosSensitivity = input.int(3, "BOS Sensitivity", minval=1)
showDashboard = input.bool(true, "Show Dashboard")
dashCorner = input.string("top_right", "Dashboard Corner", options= )
// === COLORS ===
bosColorBull = color.new(color.green, 0)
bosColorBear = color.new(color.red, 0)
// === STRUCTURE & BOS LOGIC (example) ===
var bool bullishBOS = false
var bool bearishBOS = false
// Extract function calls for consistency
highestClose = ta.highest(close, bosSensitivity)
lowestClose = ta.lowest(close, bosSensitivity)
// Dummy BOS detection (replace with your actual logic)
if close > highestClose
bullishBOS := true
bearishBOS := false
else if close < lowestClose
bearishBOS := true
bullishBOS := false
else
bullishBOS := false
bearishBOS := false
// === BOS PLOTTING ===
if bullishBOS
line.new(bar_index - bosSensitivity, low , bar_index, low, color=bosColorBull, style=line.style_dotted)
label.new(bar_index, low, "BOS ↑", style=label.style_label_up, color=bosColorBull, textcolor=color.white)
if bearishBOS
line.new(bar_index - bosSensitivity, high , bar_index, high, color=bosColorBear, style=line.style_dotted)
label.new(bar_index, high, "BOS ↓", style=label.style_label_down, color=bosColorBear, textcolor=color.white)
// === ICC / SHORT-TERM DEALING RANGE LOGIC (simplified example) ===
var float stHigh = na
var float stLow = na
if bullishBOS
stLow := low
stHigh := high
else if bearishBOS
stLow := low
stHigh := high
plot(stHigh, title="ST High", color=color.orange, linewidth=1)
plot(stLow, title="ST Low", color=color.orange, linewidth=1)
// === DASHBOARD PANEL ===
if showDashboard
// choose table position
dashPosition = switch dashCorner
"top_left" => position.top_left
"bottom_left" => position.bottom_left
"bottom_right" => position.bottom_right
=> position.top_right
var table dash = table.new(dashPosition, 2, 2, bgcolor=color.new(color.black, 85), frame_color=color.new(color.white, 70))
// Higher time frame bias placeholder (replace with actual HTF logic)
htfBias = bullishBOS ? "bullish" : bearishBOS ? "bearish" : "neutral"
htfTxtColor = htfBias == "bullish" ? color.new(color.green, 0) : htfBias == "bearish" ? color.new(color.red, 0) : color.new(color.yellow, 0)
sigTxtColor = bullishBOS ? color.new(color.green, 0) : bearishBOS ? color.new(color.red, 0) : color.new(color.yellow, 0)
table.cell(dash, 0, 0, "1H Bias:", text_color=color.white, text_size=size.small)
table.cell(dash, 1, 0, str.upper(htfBias), text_color=htfTxtColor, text_size=size.small)
table.cell(dash, 0, 1, "15M Signal:", text_color=color.white, text_size=size.small)
table.cell(dash, 1, 1, sigTxtColor == color.new(color.green, 0) ? "Buy Setup" : sigTxtColor == color.new(color.red, 0) ? "Sell Setup" : "Waiting", text_color=sigTxtColor, text_size=size.small)
RSI Overbought/Oversold + Divergence Indicator (new)//@version=5
indicator('CryptoSignalScanner - RSI Overbought/Oversold + Divergence Indicator (new)',
//---------------------------------------------------------------------------------------------------------------------------------
//--- Define Colors ---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
vWhite = #FFFFFF
vViolet = #C77DF3
vIndigo = #8A2BE2
vBlue = #009CDF
vGreen = #5EBD3E
vYellow = #FFB900
vRed = #E23838
longColor = color.green
shortColor = color.red
textColor = color.white
bullishColor = color.rgb(38,166,154,0) //Used in the display table
bearishColor = color.rgb(239,83,79,0) //Used in the display table
nomatchColor = color.silver //Used in the display table
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Functions--------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
TF2txt(TF) =>
switch TF
"S" => "RSI 1s:"
"5S" => "RSI 5s:"
"10S" => "RSI 10s:"
"15S" => "RSI 15s:"
"30S" => "RSI 30s"
"1" => "RSI 1m:"
"3" => "RSI 3m:"
"5" => "RSI 5m:"
"15" => "RSI 15m:"
"30" => "RSI 30m"
"45" => "RSI 45m"
"60" => "RSI 1h:"
"120" => "RSI 2h:"
"180" => "RSI 3h:"
"240" => "RSI 4h:"
"480" => "RSI 8h:"
"D" => "RSI 1D:"
"1D" => "RSI 1D:"
"2D" => "RSI 2D:"
"3D" => "RSI 2D:"
"3D" => "RSI 3W:"
"W" => "RSI 1W:"
"1W" => "RSI 1W:"
"M" => "RSI 1M:"
"1M" => "RSI 1M:"
"3M" => "RSI 3M:"
"6M" => "RSI 6M:"
"12M" => "RSI 12M:"
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Show/Hide Settings ----------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
rsiShowInput = input(true, title='Show RSI', group='Show/Hide Settings')
maShowInput = input(false, title='Show MA', group='Show/Hide Settings')
showRSIMAInput = input(true, title='Show RSIMA Cloud', group='Show/Hide Settings')
rsiBandShowInput = input(true, title='Show Oversold/Overbought Lines', group='Show/Hide Settings')
rsiBandExtShowInput = input(true, title='Show Oversold/Overbought Extended Lines', group='Show/Hide Settings')
rsiHighlightShowInput = input(true, title='Show Oversold/Overbought Highlight Lines', group='Show/Hide Settings')
DivergenceShowInput = input(true, title='Show RSI Divergence Labels', group='Show/Hide Settings')
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Table Settings --------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
rsiShowTable = input(true, title='Show RSI Table Information box', group="RSI Table Settings")
rsiTablePosition = input.string(title='Location', defval='middle_right', options= , group="RSI Table Settings", inline='1')
rsiTextSize = input.string(title=' Size', defval='small', options= , group="RSI Table Settings", inline='1')
rsiShowTF1 = input(true, title='Show TimeFrame1', group="RSI Table Settings", inline='tf1')
rsiTF1 = input.timeframe("15", title=" Time", group="RSI Table Settings", inline='tf1')
rsiShowTF2 = input(true, title='Show TimeFrame2', group="RSI Table Settings", inline='tf2')
rsiTF2 = input.timeframe("60", title=" Time", group="RSI Table Settings", inline='tf2')
rsiShowTF3 = input(true, title='Show TimeFrame3', group="RSI Table Settings", inline='tf3')
rsiTF3 = input.timeframe("240", title=" Time", group="RSI Table Settings", inline='tf3')
rsiShowTF4 = input(true, title='Show TimeFrame4', group="RSI Table Settings", inline='tf4')
rsiTF4 = input.timeframe("D", title=" Time", group="RSI Table Settings", inline='tf4')
rsiShowHist = input(true, title='Show RSI Historical Columns', group="RSI Table Settings", tooltip='Show the information of the 2 previous closed candles')
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- RSI Input Settings ----------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
rsiSourceInput = input.source(close, 'Source', group='RSI Settings')
rsiLengthInput = input.int(14, minval=1, title='RSI Length', group='RSI Settings', tooltip='Here we set the RSI lenght')
rsiColorInput = input.color(#26a69a, title="RSI Color", group='RSI Settings')
rsimaColorInput = input.color(#ef534f, title="RSIMA Color", group='RSI Settings')
rsiBandColorInput = input.color(#787B86, title="RSI Band Color", group='RSI Settings')
rsiUpperBandExtInput = input.int(title='RSI Overbought Extended Line', defval=80, minval=50, maxval=100, group='RSI Settings')
rsiUpperBandInput = input.int(title='RSI Overbought Line', defval=70, minval=50, maxval=100, group='RSI Settings')
rsiLowerBandInput = input.int(title='RSI Oversold Line', defval=30, minval=0, maxval=50, group='RSI Settings')
rsiLowerBandExtInput = input.int(title='RSI Oversold Extended Line', defval=20, minval=0, maxval=50, group='RSI Settings')
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- MA Input Settings -----------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
maTypeInput = input.string("EMA", title="MA Type", options= , group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
maColorInput = input.color(color.yellow, title="MA Color", group='MA Settings') //#7E57C2
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Divergence Input Settings ---------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
lbrInput = input(title="Pivot Lookback Right", defval=2, group='RSI Divergence Settings')
lblInput = input(title="Pivot Lookback Left", defval=2, group='RSI Divergence Settings')
lbRangeMaxInput = input(title="Max of Lookback Range", defval=10, group='RSI Divergence Settings')
lbRangeMinInput = input(title="Min of Lookback Range", defval=2, group='RSI Divergence Settings')
plotBullInput = input(title="Plot Bullish", defval=true, group='RSI Divergence Settings')
plotHiddenBullInput = input(title="Plot Hidden Bullish", defval=true, group='RSI Divergence Settings')
plotBearInput = input(title="Plot Bearish", defval=true, group='RSI Divergence Settings')
plotHiddenBearInput = input(title="Plot Hidden Bearish", defval=true, group='RSI Divergence Settings')
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- RSI Calculation -------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
rsi = ta.rsi(rsiSourceInput, rsiLengthInput)
rsiprevious = rsi
= request.security(syminfo.tickerid, rsiTF1, [rsi, rsi , rsi ], lookahead=barmerge.lookahead_on)
= request.security(syminfo.tickerid, rsiTF2, [rsi, rsi , rsi ], lookahead=barmerge.lookahead_on)
= request.security(syminfo.tickerid, rsiTF3, [rsi, rsi , rsi ], lookahead=barmerge.lookahead_on)
= request.security(syminfo.tickerid, rsiTF4, [rsi, rsi , rsi ], lookahead=barmerge.lookahead_on)
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- MA Calculation -------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiMA = ma(rsi, maLengthInput, maTypeInput)
rsiMAPrevious = rsiMA
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Stoch RSI Settings + Calculation --------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
showStochRSI = input(false, title="Show Stochastic RSI", group='Stochastic RSI Settings')
smoothK = input.int(title="Stochastic K", defval=3, minval=1, maxval=10, group='Stochastic RSI Settings')
smoothD = input.int(title="Stochastic D", defval=4, minval=1, maxval=10, group='Stochastic RSI Settings')
lengthRSI = input.int(title="Stochastic RSI Lenght", defval=14, minval=1, group='Stochastic RSI Settings')
lengthStoch = input.int(title="Stochastic Lenght", defval=14, minval=1, group='Stochastic RSI Settings')
colorK = input.color(color.rgb(41,98,255,0), title="K Color", group='Stochastic RSI Settings', inline="1")
colorD = input.color(color.rgb(205,109,0,0), title="D Color", group='Stochastic RSI Settings', inline="1")
StochRSI = ta.rsi(rsiSourceInput, lengthRSI)
k = ta.sma(ta.stoch(StochRSI, StochRSI, StochRSI, lengthStoch), smoothK) //Blue Line
d = ta.sma(k, smoothD) //Red Line
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Divergence Settings ------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 50)
hiddenBearColor = color.new(color.red, 50)
//textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi
plFound = na(ta.pivotlow(osc, lblInput, lbrInput)) ? false : true
phFound = na(ta.pivothigh(osc, lblInput, lbrInput)) ? false : true
_inRange(cond) =>
bars = ta.barssince(cond == true)
lbRangeMinInput <= bars and bars <= lbRangeMaxInput
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Define Plot & Line Colors ---------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
rsiColor = rsi >= rsiMA ? rsiColorInput : rsimaColorInput
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Plot Lines ------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Create a horizontal line at a specific price level
myLine = line.new(bar_index , 75, bar_index, 75, color = color.rgb(187, 14, 14), width = 2)
bottom = line.new(bar_index , 50, bar_index, 50, color = color.rgb(223, 226, 28), width = 2)
mymainLine = line.new(bar_index , 60, bar_index, 60, color = color.rgb(13, 154, 10), width = 3)
hline(50, title='RSI Baseline', color=color.new(rsiBandColorInput, 50), linestyle=hline.style_solid, editable=false)
hline(rsiBandExtShowInput ? rsiUpperBandExtInput : na, title='RSI Upper Band', color=color.new(rsiBandColorInput, 10), linestyle=hline.style_dashed, editable=false)
hline(rsiBandShowInput ? rsiUpperBandInput : na, title='RSI Upper Band', color=color.new(rsiBandColorInput, 10), linestyle=hline.style_dashed, editable=false)
hline(rsiBandShowInput ? rsiLowerBandInput : na, title='RSI Upper Band', color=color.new(rsiBandColorInput, 10), linestyle=hline.style_dashed, editable=false)
hline(rsiBandExtShowInput ? rsiLowerBandExtInput : na, title='RSI Upper Band', color=color.new(rsiBandColorInput, 10), linestyle=hline.style_dashed, editable=false)
bgcolor(rsiHighlightShowInput ? rsi >= rsiUpperBandExtInput ? color.new(rsiColorInput, 70) : na : na, title="Show Extended Oversold Highlight", editable=false)
bgcolor(rsiHighlightShowInput ? rsi >= rsiUpperBandInput ? rsi < rsiUpperBandExtInput ? color.new(#64ffda, 90) : na : na: na, title="Show Overbought Highlight", editable=false)
bgcolor(rsiHighlightShowInput ? rsi <= rsiLowerBandInput ? rsi > rsiLowerBandExtInput ? color.new(#F43E32, 90) : na : na : na, title="Show Extended Oversold Highlight", editable=false)
bgcolor(rsiHighlightShowInput ? rsi <= rsiLowerBandInput ? color.new(rsimaColorInput, 70) : na : na, title="Show Oversold Highlight", editable=false)
maPlot = plot(maShowInput ? rsiMA : na, title='MA', color=color.new(maColorInput,0), linewidth=1)
rsiMAPlot = plot(showRSIMAInput ? rsiMA : na, title="RSI EMA", color=color.new(rsimaColorInput,0), editable=false, display=display.none)
rsiPlot = plot(rsiShowInput ? rsi : na, title='RSI', color=color.new(rsiColor,0), linewidth=1)
fill(rsiPlot, rsiMAPlot, color=color.new(rsiColor, 60), title="RSIMA Cloud")
plot(showStochRSI ? k : na, title='Stochastic K', color=colorK, linewidth=1)
plot(showStochRSI ? d : na, title='Stochastic D', color=colorD, linewidth=1)
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Plot Divergence -------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low
oscHL = osc > ta.valuewhen(plFound, osc , 1) and _inRange(plFound )
// Price: Lower Low
priceLL = low < ta.valuewhen(plFound, low , 1)
bullCond = plotBullInput and priceLL and oscHL and plFound
plot(
plFound ? osc : na,
offset=-lbrInput,
title="Regular Bullish",
linewidth=2,
color=(bullCond ? bullColor : noneColor)
)
plotshape(
DivergenceShowInput ? bullCond ? osc : na : na,
offset=-lbrInput,
title="Regular Bullish Label",
text=" Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor
)
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc < ta.valuewhen(plFound, osc , 1) and _inRange(plFound )
// Price: Higher Low
priceHL = low > ta.valuewhen(plFound, low , 1)
hiddenBullCond = plotHiddenBullInput and priceHL and oscLL and plFound
plot(
plFound ? osc : na,
offset=-lbrInput,
title="Hidden Bullish",
linewidth=2,
color=(hiddenBullCond ? hiddenBullColor : noneColor)
)
plotshape(
DivergenceShowInput ? hiddenBullCond ? osc : na : na,
offset=-lbrInput,
title="Hidden Bullish Label",
text=" H Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor
)
//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High
oscLH = osc < ta.valuewhen(phFound, osc , 1) and _inRange(phFound )
// Price: Higher High
priceHH = high > ta.valuewhen(phFound, high , 1)
bearCond = plotBearInput and priceHH and oscLH and phFound
plot(
phFound ? osc : na,
offset=-lbrInput,
title="Regular Bearish",
linewidth=2,
color=(bearCond ? bearColor : noneColor)
)
plotshape(
DivergenceShowInput ? bearCond ? osc : na : na,
offset=-lbrInput,
title="Regular Bearish Label",
text=" Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor
)
//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High
oscHH = osc > ta.valuewhen(phFound, osc , 1) and _inRange(phFound )
// Price: Lower High
priceLH = high < ta.valuewhen(phFound, high , 1)
hiddenBearCond = plotHiddenBearInput and priceLH and oscHH and phFound
plot(
phFound ? osc : na,
offset=-lbrInput,
title="Hidden Bearish",
linewidth=2,
color=(hiddenBearCond ? hiddenBearColor : noneColor)
)
plotshape(
DivergenceShowInput ? hiddenBearCond ? osc : na : na,
offset=-lbrInput,
title="Hidden Bearish Label",
text=" H Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor
)
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Check RSI Lineup ------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
bullTF = rsi > rsi and rsi > rsi
bearTF = rsi < rsi and rsi < rsi
bullTF1 = rsi1 > rsi1_1 and rsi1_1 > rsi1_2
bearTF1 = rsi1 < rsi1_1 and rsi1_1 < rsi1_2
bullTF2 = rsi2 > rsi2_1 and rsi2_1 > rsi2_2
bearTF2 = rsi2 < rsi2_1 and rsi2_1 < rsi2_2
bullTF3 = rsi3 > rsi3_1 and rsi3_1 > rsi3_2
bearTF3 = rsi3 < rsi3_1 and rsi3_1 < rsi3_2
bullTF4 = rsi4 > rsi4_1 and rsi4_1 > rsi4_2
bearTF4 = rsi4 < rsi4_1 and rsi4_1 < rsi4_2
bbTxt(bull,bear) =>
bull ? "BULLISH" : bear ? "BEARISCH" : 'NO LINEUP'
bbColor(bull,bear) =>
bull ? bullishColor : bear ? bearishColor : nomatchColor
newTC(tBox, col, row, txt, width, txtColor, bgColor, txtHA, txtSize) =>
table.cell(table_id=tBox,column=col, row=row, text=txt, width=width,text_color=txtColor,bgcolor=bgColor, text_halign=txtHA, text_size=txtSize)
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--- Define RSI Table Setting ----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
width_c0 = 0
width_c1 = 0
if rsiShowTable
var tBox = table.new(position=rsiTablePosition, columns=5, rows=6, bgcolor=color.rgb(18,22,33,50), frame_color=color.black, frame_width=1, border_color=color.black, border_width=1)
newTC(tBox, 0,1,"RSI Current",width_c0,color.orange,color.rgb(0,0,0,100),'right',rsiTextSize)
newTC(tBox, 1,1,str.format(" {0,number,#.##} ", rsi),width_c0,vWhite,rsi < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 4,1,bbTxt(bullTF, bearTF),width_c0,vWhite,bbColor(bullTF, bearTF),'center',rsiTextSize)
if rsiShowHist
newTC(tBox, 2,1,str.format(" {0,number,#.##} ", rsi ),width_c0,vWhite,rsi < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 3,1,str.format(" {0,number,#.##} ", rsi ),width_c0,vWhite,rsi < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
if rsiShowTF1
newTC(tBox, 0,2,TF2txt(rsiTF1),width_c0,vWhite,color.rgb(0,0,0,100),'right',rsiTextSize)
newTC(tBox, 1,2,str.format(" {0,number,#.##} ", rsi1),width_c0,vWhite,rsi1 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 4,2,bbTxt(bullTF1, bearTF1),width_c0,vWhite,bbColor(bullTF1,bearTF1),'center',rsiTextSize)
if rsiShowHist
newTC(tBox, 2,2,str.format(" {0,number,#.##} ", rsi1_1),width_c0,vWhite,rsi1_1 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 3,2,str.format(" {0,number,#.##} ", rsi1_2),width_c0,vWhite,rsi1_2 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
if rsiShowTF2
newTC(tBox, 0,3,TF2txt(rsiTF2),width_c0,vWhite,color.rgb(0,0,0,100),'right',rsiTextSize)
newTC(tBox, 1,3,str.format(" {0,number,#.##} ", rsi2),width_c0,vWhite,rsi2 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 4,3,bbTxt(bullTF2, bearTF2),width_c0,vWhite,bbColor(bullTF2,bearTF2),'center',rsiTextSize)
if rsiShowHist
newTC(tBox, 2,3,str.format(" {0,number,#.##} ", rsi2_1),width_c0,vWhite,rsi2_1 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 3,3,str.format(" {0,number,#.##} ", rsi2_2),width_c0,vWhite,rsi2_2 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
if rsiShowTF3
newTC(tBox, 0,4,TF2txt(rsiTF3),width_c0,vWhite,color.rgb(0,0,0,100),'right',rsiTextSize)
newTC(tBox, 1,4,str.format(" {0,number,#.##} ", rsi3),width_c0,vWhite,rsi3 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 4,4,bbTxt(bullTF3, bearTF3),width_c0,vWhite,bbColor(bullTF3,bearTF3),'center',rsiTextSize)
if rsiShowHist
newTC(tBox, 2,4,str.format(" {0,number,#.##} ", rsi3_1),width_c0,vWhite,rsi3_1 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 3,4,str.format(" {0,number,#.##} ", rsi3_2),width_c0,vWhite,rsi3_2 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
if rsiShowTF4
newTC(tBox, 0,5,TF2txt(rsiTF4),width_c0,vWhite,color.rgb(0,0,0,100),'right',rsiTextSize)
newTC(tBox, 1,5,str.format(" {0,number,#.##} ", rsi4),width_c0,vWhite,rsi4 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 4,5,bbTxt(bullTF4, bearTF4),width_c0,vWhite,bbColor(bullTF4,bearTF4),'center',rsiTextSize)
if rsiShowHist
newTC(tBox, 2,5,str.format(" {0,number,#.##} ", rsi4_1),width_c0,vWhite,rsi4_1 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
newTC(tBox, 3,5,str.format(" {0,number,#.##} ", rsi4_2),width_c0,vWhite,rsi4_2 < 50 ? bearishColor:bullishColor,'left',rsiTextSize)
//------------------------------------------------------
//--- Alerts -------------------------------------------
//------------------------------------------------------
My Smart Volume Profile – Fixed
Title: 🔹 My Smart Volume Profile – Fixed
Description:
Lightweight custom Volume Profile showing POC, VAH, and VAL levels from recent bars. Highlights the value area, marks price touches, and supports optional alerts.
Developer Note:
Created with precision and simplicity by Magnergy
Gann Astronomical Turning PointsThis is a comprehensive Pine Script that implements W.D. Gann's astronomical theories to identify potential market turning points. Here's a detailed breakdown of the script:
Overview
The script identifies and displays astronomical events (sun angles, moon phases, and Mercury retrogrades) that Gann theorists believe correlate with market turning points. It also analyzes historical price performance following these events to provide statistical significance.
Key Components
1. Input Parameters
Date Range: Users can set the analysis period (start and end dates)
Display Options: Toggle visibility of different astronomical events and tables
Analysis Settings: Configure the lookback period for price change analysis (1-20 days)
2. Astronomical Calculations
The script includes several functions to calculate celestial positions:
getDaysSinceEpoch(t): Calculates days since January 1, 2000 (reference point)
getSunLongitude(t): Computes the Sun's position in the ecliptic (0-360°)
getMoonPhase(t): Determines the Moon's phase angle relative to the Sun
getMercuryLongitude(t): Calculates Mercury's position in the ecliptic
3. Gann Critical Angles (Sun Events)
The script identifies when the Sun reaches four critical angles that Gann considered significant:
0° Aries (Spring Equinox)
90° Cancer (Summer Solstice)
180° Libra (Fall Equinox)
270° Capricorn (Winter Solstice)
These are detected by tracking when the Sun's longitude crosses these specific angles.
4. Moon Phases
Four key moon phases are identified:
New Moon: Moon passes between Earth and Sun
First Quarter: Moon is 90° east of Sun
Full Moon: Moon is opposite the Sun
Last Quarter: Moon is 270° east of Sun
5. Mercury Retrograde Periods
The script detects when Mercury appears to move backward in its orbit:
Identifies start and end dates of retrograde motion
Displays these periods as highlighted zones on the chart
6. Price Change Analysis
For each astronomical event, the script:
Calculates the percentage price change over a user-defined lookback period
Categorizes changes as positive or negative
Stores this data for statistical analysis
7. Statistical Significance
The script calculates several metrics for each event type:
Average Price Change: Mean percentage change following events
Up/Down Ratio: Number of positive vs. negative changes
Accuracy Percentage: How often the dominant direction occurred
8. Visual Elements
The script includes multiple display components:
Event Labels
Sun Angles: Orange sun symbols displayed above price bars
Moon Phases: Moon phase emojis displayed below price bars
Mercury Retrograde: Red boxes highlighting the retrograde periods
Information Tables
Events Table: Shows upcoming and recent astronomical events
Significance Analysis Table: Displays statistical performance of each event type
Forecast Section: Identifies the next upcoming event and predicted direction
9. Forecasting Functionality
The script predicts market direction for the next astronomical event based on:
Historical average price change for that event type
Statistical accuracy of previous similar events
Color-coded forecast (green for bullish, red for bearish)
This script offers an interesting implementation of Gann's astronomical theories, but should be used as part of a broader analysis rather than as a standalone trading system.
Disclaimer: This indicator is for educational purposes only. Past performance does not guarantee future results. Always conduct your own research and risk assessment before trading.
WIN1! • Crossing EMAs• (By Mesquita, v7)Moving average crossover strategy for intraday movements, especially in the continuous index (WIN1!) on the Brazilian stock exchange B³. The strategy is customizable for time windows, has a filter for trades only above the long-term average, whether only long, only short, or both, with or without stop loss.
Multi-Timeframe RSI TableIt can print RSI values of any four chosen periods in a tabular format on the chart itself. The table can be placed in any of the six positions, as required. If the RSI values are more than 40 or less than 40, these values are shown in bright Red, else it is light Red.






















