3x ORB Alerts (JSON webhook, 3 ORBs)2× ORB Alerts (JSON Webhook, ORB4 + ORB5) is a clean, lightweight multi-session Opening Range Breakout (ORB) alert engine designed for automated trading systems using TradingView webhooks.
This indicator provides up to 3 independent ORB windows, each with:
Custom session time
Custom cutoff time (HHMM or HH:MM)
First-close breakout detection (Up or Down)
Dedicated alert conditions
Persistent ORB range + breakout price
Full JSON webhook output for bots
No boxes, no lines, no visual clutter (performance-optimized)
✔️ What this indicator does
Tracks ORB high/low during the selected session
Locks the range once the session ends
Waits for a valid breakout (close > high or close < low)
Triggers alerts only once per ORB per day
Sends a clean JSON payload to your trading bot
✔️ Webhook JSON includes
Symbol
Timeframe
ORB window number (1–3)
Breakout direction
Break price
ORB range
ATR (optional filtering)
Close price
Timestamp
Custom API key
✔️ Why this script exists
This indicator is built specifically for automated ORB trading bots, where reliability, clean signals, and low-latency alerts are critical.
No repainting, no noise — just clear breakout confirmations for fully automated systems.
✔️ Use Cases
Futures (GC, NQ, ES, CL, FDAX, etc.)
Forex session breakout strategies
Crypto ORB systems (BTC, ETH)
Multi-session automated strategies
Proprietary trading automation
✔️ How to use
Set up 1,2,3 ORB sessions
Add corresponding alert conditions
Select "Once per bar close"
Paste your webhook URL
Your trading bot receives a JSON package on every breakout
แบนด์และแชนแนล
Absorption Meter — M15/M5/M3Absorption Meter — EMA200 + Wick + Absorption Combo
Absorption Meter is a synthetic orderflow/absorption tool built only on OHLCV data. It plots two lines — Buy Absorption and Sell Absorption — plus optional EMA200-based reversion and trend-continuation signals. The idea is to highlight where aggressive buyers or sellers are likely being absorbed, not rewarded.
The script uses a simple delta/CVD proxy (volume signed by candle direction), volume z-scores, candle structure (wicks vs body), VWAP proximity, and distance from EMA200. For each bar it builds two scores from 0–100:
• Buy Absorption (green): high when selling pressure is strong (negative delta and CVD slope), volume is above normal, the candle is wicky/inefficient, price is near VWAP, and the bar looks like a stall or has a strong lower wick. This suggests shorts are hitting into bids and being absorbed.
• Sell Absorption (red): high when buying pressure is strong (positive delta and CVD slope), volume is above normal, the candle is wicky, price is near VWAP, and the bar looks like a stall or has a strong upper wick. This suggests longs are hitting into offers and being absorbed.
I use this mostly as contrarian context: high Buy Absorption near lows is a reason to stop chasing shorts and look for long/cover zones; high Sell Absorption near highs is a reason to stop chasing longs and look for short/profit zones. It is not a stand-alone “buy/sell” signal.
On top of the lines, the script can draw arrows and fire alerts when several conditions align:
• EMA200 mean reversion (price stretched from EMA200, recent big wick, strong absorption).
• Optional base VWAP triggers (absorption near VWAP).
• Optional strong distance-only reversions.
• Optional trend-bias continuation (on the right side of EMA200 with supportive slope and absorption/wicks).
Key settings (short overview):
• Z-Score and Volume Z lookbacks: control how “unusual” delta, CVD and volume must be.
• ATR Length: used for volatility, gates, and EMA distance.
• Weights (Delta, CVD Slope, Volume Z, 1–Body Efficiency, VWAP Proximity): control how much each component contributes to the score.
• Gates (Small Move, Wick Size, Soft Factor): control how strict the bar structure must be to count as absorption.
• EMA200 / StdDev / distance thresholds: control when EMA reversion logic activates.
• Big Wick filters (min wick vs ATR, wick percent, body percent, reclaim rules, min volume Z): define what a real “rejection wick” looks like.
• Session filter and cooldown: restrict signals to your session and avoid arrow spam.
This is a context tool: it shows where aggressive volume is running into resistance or support so you can make better decisions around chasing, fading, or taking profits.
2x ORB Alerts (JSON webhook, ORB4 + ORB5)2× ORB Alerts (JSON Webhook, ORB4 + ORB5) is a clean, lightweight multi-session Opening Range Breakout (ORB) alert engine designed for automated trading systems using TradingView webhooks.
This indicator provides 2 independent ORB windows, each with:
Custom session time
Custom cutoff time (HHMM or HH:MM)
First-close breakout detection (Up or Down)
Dedicated alert conditions
Persistent ORB range + breakout price
Full JSON webhook output for bots
No boxes, no lines, no visual clutter (performance-optimized)
✔️ What this indicator does
Tracks ORB high/low during the selected session
Locks the range once the session ends
Waits for a valid breakout (close > high or close < low)
Triggers alerts only once per ORB per day
Sends a clean JSON payload to your trading bot
✔️ Webhook JSON includes
Symbol
Timeframe
ORB window number (4&5)
Breakout direction
Break price
ORB range
ATR (optional filtering)
Close price
Timestamp
Custom API key
✔️ Why this script exists
This indicator is built specifically for automated ORB trading bots, where reliability, clean signals, and low-latency alerts are critical.
No repainting, no noise — just clear breakout confirmations for fully automated systems.
✔️ Use Cases
Futures (GC, NQ, ES, CL, FDAX, etc.)
Forex session breakout strategies
Crypto ORB systems (BTC, ETH)
Multi-session automated strategies
Proprietary trading automation
✔️ How to use
Set up to 4&5 ORB sessions
Add corresponding alert conditions
Select "Once per bar close"
Paste your webhook URL
Your trading bot receives a JSON package on every breakout
PA + Volatility + Volume Confluence (3/3) — v5Volume price action and volatility. It gives you early warning when market is about to move.
Abacus Community Williams %R + Bollinger %B📌 Indicator Description (Professional & Clear)
Williams %R + Bollinger %B Momentum Indicator (ThinkOrSwim Style)
This custom indicator combines Williams %R and Bollinger %B into a single, unified panel to provide a powerful momentum-and-positioning view of price action. Modeled after the ThinkOrSwim version used by professional traders, it displays:
✅ Williams %R (10-period) – Yellow Line
This oscillator measures the market's position relative to recent highs and lows.
It plots on a 0% to 100% scale, where:
80–100% → Overbought region
20–0% → Oversold region
50% → Momentum equilibrium
Williams %R helps identify exhaustion, trend strength, and potential reversal zones.
✅ Bollinger %B (20, 2.0) – Turquoise Histogram Bars
%B shows where price is trading relative to the Bollinger Bands:
Above 50% → Price is in the upper half of the band (bullish pressure)
Below 50% → Price is in the lower half (bearish pressure)
Near 100% → Price pushing upper band (possible breakout)
Near 0% → Price testing lower band (possible breakdown)
The histogram visually represents momentum shifts in real time, creating a clean profile of volatility and strength.
🎯 Why This Combination Works
Together, Williams %R and Bollinger %B reveal:
Momentum direction
Overbought/oversold conditions
Volatility compression & expansion
Trend continuation vs reversal zones
High-probability inflection points
Williams %R shows oscillation and exhaustion, while %B shows pressure inside volatility bands.
The combination helps identify whether momentum supports the current trend or is weakening.
🔍 Use Cases
Detect early trend reversals
Validate breakouts and breakdowns
Spot momentum failure in price extremes
Confirm pullbacks and continuation setups
Time entries and exits with higher precision
💡 Best For
Swing traders
Momentum traders
Trend-followers
Options traders (for timing premium decay or volatility expansion)
AkdakTrading1Script using M5 Order Blocks with an FVG and the first blocks of an impulse to take trades with a 1:1 risk-reward.
Opening Range Box, 2 SessionsOpening Range & Session Box Indicator
This indicator automatically draws Opening Range (OR) boxes and Session Boxes based on specific time zone settings, helping you visualize key trading periods across different global markets.
Key Features:
Custom Sessions: Define two independent trading sessions (e.g., New York and London).
Time Zone Selection: Choose the exact time zone for each session from a simple dropdown menu, ensuring accurate session mapping regardless of your chart's time zone.
Opening Range Definition: The initial portion of each session (defined by the Opening Range Minutes input) establishes the high and low of the box.
Offset Lines: Automatically draws two percentage offset lines inside the box, allowing you to easily track price movement relative to the Opening Range high and low (e.g., 10% retracement levels).
How to Use the Inputs:
Session A/B Timezone - Select the time zone for Session A (e.g., America/New_York).
Session A/B Time - Define the start and end time for Session A (e.g., 0930-1600).
Opening Range Minutes - Set how long the initial opening range period lasts (e.g., 30 minutes).
Percent from High/Low for Line - Set the percentage distance for the inner offset lines (e.g., 10.0 for 10% retracement).
Number of Boxes to Show - Controls the number of historical session boxes and lines that remain visible on the chart.
Key Levels: ATH + Previous Day + HTF S/RKey levels line indicator for all time high, previous day low and high for momentum trading
Orbital Barycenter Matrix @darshaksscThe Orbital Barycenter Matrix is a visual, informational-only tool that models how price behaves around a dynamically calculated barycenter —a type of moving equilibrium derived entirely from historical price data.
Instead of focusing on signals, this indicator focuses on market structure symmetry, distance, compression, expansion, and volatility-adjusted movement.
This script does not predict future price and does not provide buy/sell signals .
All values and visuals come solely from confirmed historical data , in full compliance with TradingView policy.
📘 How the Indicator Works
1. Dynamic Barycenter (Core Mean Line)
The barycenter is calculated from a smoothed blend of historical price components.
It represents the center of mass around which price tends to oscillate.
This is not a forecast line—only a representation of historical average behavior.
2. Orbital Rings (Distance Zones)
Around the barycenter, the indicator draws several “orbital rings.”
Each ring shows a volatility-scaled distance from the barycenter using ATR-based calculations.
These rings help visualize:
How far price has drifted from its historical center
Whether price is moving in an inner, mid, or outer region
How volatility influences the spacing of the rings
Rings do not imply future targets and are informational only.
3. Orbital Extension Range
Beyond the outermost ring, a wider band (extension range) shows a high-volatility reference distance.
It represents extended displacement relative to past price behavior—not a projected target.
4. Orbit Trail (Motion Trace)
The Orbit Trail plots small circles behind price, helping visualize how price has moved through the orbital regions over time.
Colors adjust with “pressure” (distance from center), making compression and expansion easy to observe.
5. Satellite Nodes (Swing Markers)
Confirmed swing highs and lows (using fixed pivots) are marked as small dots.
Their color reflects the orbital zone they formed in, giving context to how significant or extended each pivot was.
These swing markers do not repaint because they use confirmed pivots.
6. Pressure & Distance Calculations
The indicator converts price displacement away from the barycenter into a pressure metric, scaled between 0%–100%.
Higher pressure means price is further from its historical center relative to volatility.
The dashboard displays:
Zone classification
ATR-based distance
Pressure level
A small intensity gauge
All are informational readings—no direction or forecast.
📊 Key Features
✔ Dynamic barycenter core
✔ Up to four orbital rings
✔ Informational orbital extension band
✔ Visual orbit trail showing recent movement
✔ Non-repainting satellite swing nodes
✔ Distance & pressure analytics
✔ Fully adjustable HUD
✔ Always-visible floating dashboard (screen-anchored)
✔ Zero repainting on confirmed elements
✔ 100% sourced from historical data only
✔ Policy-safe: no predictions, no signals, no targets
🎯 What to Look For
1. How close price is to the barycenter
This can reveal whether price is in:
The inner region
The mid zone
The outer region
The extended field
2. Pressure level
Shows how “stretched” price is relative to its past behavior.
3. Satellite nodes
Indicate where confirmed pivots formed and in which orbital band.
4. Ring interactions
Observe how price moves between rings—inside, outside, or oscillating around them.
5. Color changes in the orbit trail
These show changes in market compression/expansion.
🧭 How to Read the Indicator
Inner Orbit
Price close to its historical equilibrium.
Mid Orbit
Moderate displacement from typical range.
Outer Orbit
Historically extended movement.
Beyond Extension Field
Price has moved further than usual relative to historical volatility.
These are descriptive conditions only , not trade recommendations.
🛠 How to Apply It on the Chart
Use the barycenter to understand where price has historically balanced.
Observe how volatility changes the spacing between rings.
Use pressure readings to identify when price is compressed, neutral, or extended.
Use swing nodes to contextualize historical pivot formation.
Watch how price interacts with rings to better understand rhythm, velocity, and structural behavior.
This tool is meant to enhance visual understanding—not to generate trade entries or exits.
⚠️ Important Disclosure
This indicator is strictly informational.
It does not predict or project future price movement.
It does not provide buy/sell/long/short signals.
All lines, zones, and values are derived solely from past market data.
Any interpretation is at the user’s discretion.
FBB Buy/Sell ProDisclaimer : This script is for educational purposes only and does not constitute financial advice. Use at your own risk.
FBB Buy/Sell Pro is a volatility based reversal tool that builds a dynamic channel around a volume weighted moving average and highlights potential turning points at the extremes. The indicator paints a smooth "funnel" of bands around price and generates Buy/Sell labels when candles reject the outer zones, helping you spot exhaustion and mean reversion opportunities in trending or ranging markets.
Signals are based on price interaction with the outer bands combined with candle direction, optionally filtered by RSI to reduce noise. When enabled, the built in TP/SL module projects an ATR based stop and target using a configurable risk to reward ratio and clearly draws entry, risk and reward zones directly on the chart.
For tracking performance, FBB Pro includes an on chart statistics table that simulates trades using your own base capital, leverage and fee settings. It displays net profit, number of trades and win rate so you can quickly evaluate how the logic behaves on different symbols and timeframes.
Key features
Dynamic FBB volatility channel around VWMA with smooth gradient visualization
Clear reversal Buy/Sell labels at outer band reactions with optional RSI filter
Automatic TP/SL projection based on ATR and custom risk to reward
Realistic stats module with leverage and fee simulation shown in a compact table
Works on most markets and timeframes. It is recommended to combine FBB Buy/Sell Pro with your own higher timeframe context and risk management.
ATR STRUCTURESTATIC LINES SET BY ATR VALUES AND MULTIPLED OBSE$RVED EPERCENTAGES more of a tool I use for me then it is for anyone else.
Simple Line📌 Understanding the Basic Concept
The trend reverses only when the price moves up or down by a fixed filter size.
It ignores normal volatility and noise, recognizing a trend change only when price moves beyond a specified threshold.
Trend direction is visually intuitive through line colors (green: uptrend, red: downtrend).
⚙️ Explanation of Settings
Auto Brick Size: Automatically determines the brick/filter size.
Fixed Brick Size: Manually set the size (e.g., 15, 30, 50, 100, etc.).
Volatility Length: The lookback period used for calculations (default: 14).
📈 Example of Identifying Buy Timing
When the line changes from gray or red to green, it signals the start of an uptrend.
This indicates that the price has moved upward by more than the required threshold.
📉 Example of Identifying Sell Timing
When the line changes from green to red, it suggests a possible downtrend reversal.
At this point, consider closing long positions or evaluating short entries.
🧪 Recommended Use Cases
Use as a trend filter to enhance the accuracy of existing strategies.
Can be used alone as a clean directional indicator without complex oscillators.
Works synergistically with trend-following strategies, breakout strategies, and more.
🔒 Notes & Cautions
More suitable for medium- to long-term trend trading than for fast scalping.
If the brick size is too small, the indicator may react to noise.
Sensitivity varies greatly depending on the selected brick size, so backtesting is essential to determine optimal values.
❗ The Trend Simple Line focuses solely on direction—remove the noise and focus purely on the trend.
초대 전용 스크립트
이 스크립트에 대한 접근이 제한되어 있습니다. 사용자는 즐겨찾기에 추가할 수 있지만 사용하려면 사용자의 권한이 필요합니다. 연락처 정보를 포함하여 액세스 요청에 대한 명확한 지침을 제공해 주세요.
이 비공개 초대 전용 스크립트는 스크립트 모더레이터의 검토를 거치지 않았으며, 하우스 룰 준수 여부는 확인되지 않았습니다. 트레이딩뷰는 스크립트의 작동 방식을 충분히 이해하고 작성자를 완전히 신뢰하지 않는 이상, 해당 스크립트에 비용을 지불하거나 사용하는 것을 권장하지 않습니다. 커뮤니티 스크립트에서 무료 오픈소스 대안을 찾아보실 수도 있습니다.
작성자 지시 사항
.
c9indicator
면책사항
해당 정보와 게시물은 금융, 투자, 트레이딩 또는 기타 유형의 조언이나 권장 사항으로 간주되지 않으며, 트레이딩뷰에서 제공하거나 보증하는 것이 아닙니
Filte Ichimoku1. Indicator Name
Filte Ichimoku
2. One-line Introduction
A smoothed and visually enhanced version of the Ichimoku Cloud that highlights trend direction and strength using adaptive color transparency.
3. General Overview
Filte Ichimoku is a modernized take on the classic Ichimoku Kinko Hyo indicator, designed for traders who value clarity and minimalism while retaining core Ichimoku functionality.
It calculates traditional components like Tenkan-sen, Kijun-sen, and the Senkou Span A/B, but focuses primarily on visualizing the Kumo (cloud) with enhanced styling.
Instead of raw plots, Filte Ichimoku applies triple-step smoothing to both Senkou spans, creating a soft, wave-like appearance that reflects trend fluidity.
The color of the cloud dynamically adapts based on whether Span A is above or below Span B (bullish/bearish), and its opacity changes according to the intensity of the trend, which is calculated relative to ATR-based volatility.
By forward-shifting the plots and visually blending the cloud, the indicator helps traders quickly identify dominant trends, potential reversals, and consolidation zones.
Its clean design makes it highly compatible with both traditional Ichimoku strategies and modern price action systems.
4. Key Advantages
🌥 Adaptive Ichimoku Cloud
Cloud color and transparency dynamically change based on real trend strength and direction.
📊 Smoother, Cleaner Display
Triple-smoothing on Senkou A and B creates a less noisy, more readable visual output.
📈 Forward Shift Preserved
Maintains the traditional Ichimoku forward-shift logic, helping project future price zones.
🎨 Customizable Trend Colors
Define your own bullish and bearish cloud colors for easy visual alignment with your strategy.
🚫 Noise Reduction via ATR Normalization
Trend intensity is calculated relative to ATR, reducing false positives in low-volatility zones.
🔒 Lightweight & Secure Design
Optimized script avoids exposure of sensitive logic while remaining fast and reliable in live charts.
📘 Indicator User Guide
📌 Basic Concept
Filte Ichimoku emphasizes cloud dynamics (Kumo) to interpret market structure.
Trend direction is derived from the relationship between Senkou Span A and B, while trend strength is measured by their distance relative to ATR.
The smoother curves make it easier to read while preserving all Ichimoku logic.
⚙️ Settings Explained
Tenkan Sen Length: Fast-moving average calculation period (default: 18)
Kijun Sen Length: Medium trend baseline (default: 52)
Senkou Span Length: Long-term cloud boundary (default: 104)
Bull/Bear Color: Set custom colors for bullish or bearish cloud states
📈 Bullish Timing Example
Senkou Span A > Span B, and the cloud appears green with high opacity
Indicates strong uptrend support, especially when price is above both Tenkan and Kijun
📉 Bearish Timing Example
Span B > Span A, cloud turns red and darkens
Suggests bearish dominance; avoid long entries or prepare for short-side setups
🧪 Recommended Use Cases
Use as a trend background layer for existing Ichimoku or price action systems
Combine with breakouts, support/resistance, and momentum indicators
Great for trend filtering in mid- to long-term strategies
🔒 Precautions
Designed for clarity and filtering—not a standalone entry system
In sideways markets, cloud may compress and color changes may become less meaningful
Adjust smoothing lengths cautiously to avoid lagging during volatile swings
Best results come from combining with price structure analysis
Filter Bar1. Indicator Name
Filter Bar
2. One-line Introduction
A trend-aware bar coloring system that visualizes market direction and strength through adaptive transparency based on regression scoring.
3. General Overview
Filter Bar+ is a minimalist but powerful trend visualization tool that colors chart bars according to market direction and momentum strength.
It analyzes the linear regression trend alignment over a specified lookback period and uses a pairwise comparison algorithm to determine whether the market is in a bullish, bearish, or neutral state.
The result is a "trend score" that gets normalized to reflect trend intensity (0~1).
Bar colors are then dynamically updated using the specified bullish or bearish base colors, where higher intensity results in more opaque (darker) bars, and weaker trends lead to lighter, faded tones.
If no strong trend is detected, bars are shown in gray, signaling indecision or neutrality.
The strength of this indicator lies in its simplicity—it doesn’t draw lines, waves, or shapes, but overlays insight directly onto the chart through smart color cues.
It’s particularly effective as a background filter for price action traders, scalpers, and anyone who prefers clean charts but still wants embedded directional context.
4. Key Advantages
🎨 Adaptive Bar Coloring
Bar color opacity increases with trend strength, offering instant visual confirmation without clutter.
📊 Quantified Trend Direction
Uses a regression-based scoring system to reliably detect uptrends, downtrends, or sideways markets.
⚖️ Customizable Sensitivity
Parameters like lookback period and tolerance percentage give users full control over signal responsiveness.
🧼 Clean Chart Presentation
No lines, shapes, or overlays—just color-coded bars that blend into your existing chart setup.
🚀 Lightweight & Fast
Minimal computational load ensures it works smoothly even on lower-end devices or multiple chart setups.
🔒 Secure Internal Logic
Algorithm is neatly encapsulated and optimized, with no critical logic exposed.
📘 Indicator User Guide
📌 Basic Concept
Filter Bar+ evaluates trend direction and strength using a pairwise comparison of linear regression values.
The result determines whether the market is bullish, bearish, or neutral, and adjusts bar colors accordingly.
It visually amplifies the current market state without drawing any indicators on the chart.
⚙️ Settings Explained
Lookback Period: Number of bars used to compare regression values
Range Tolerance (%): Minimum score required to label a trend as bullish or bearish
Regression Source: Data input used for regression (default: close)
Linear Regression Length: Period for generating the base regression line
Bull/Bear Base Colors: Choose colors to represent bullish or bearish bars
📈 Buy Timing Example
Bars are green (or user-set bullish color) and becoming more vivid
Indicates a strengthening bullish trend; helpful when used alongside breakout confirmation or support zones
📉 Sell Timing Example
Bars turn red (or your custom bearish color) with increasing opacity
Signals growing bearish pressure; acts as confirmation during short setups or breakdowns
🧪 Recommended Use Cases
Combine with volume, RSI, or price action setups for direction filtering
Ideal for clean chart strategies where visual simplicity is preferred
Use as a confirmation layer to reduce noise in sideways markets
🔒 Precautions
This is a visual filter, not a signal generator—use alongside other strategies for entries/exits
In choppy markets, bars may flicker between colors—adjust sensitivity as needed
Works best when you already have a directional thesis and want to validate it visually
Always test settings for your asset/timeframe before applying in live trades
Filter Ribbon1. Indicator Name
Filter Ribbon
2. One-line Introduction
A trend visualization ribbon that uses linear regression and directional scoring to highlight bullish and bearish strength with intuitive color gradients.
3. General Overview
Filter Ribbon is a minimalistic yet powerful trend visualization tool that leverages linear regression slope ordering to determine directional momentum. It analyzes the ordering of regression values over a defined lookback period and quantifies how consistently the price has been trending upward or downward.
Using a pairwise comparison system, it calculates a trend "score" and compares this to a configurable threshold to determine if a bullish, bearish, or neutral condition exists.
The result is a color-coded ribbon that sits over the chart, changing hue and opacity based on both the direction and strength of the trend. The stronger the directional alignment, the more opaque the ribbon becomes, offering traders a fast, intuitive way to assess market sentiment at a glance.
It also includes an optional linear regression line to further help visualize the central trend.
This indicator is best used in trend-following systems or as a dynamic background layer when combined with signal-based strategies.
Thanks to its efficient design and protected logic, Filter Ribbon offers high-performance visualization without compromising strategy integrity.
4. Key Advantages
🌈 Visual Trend Heatmap
Dynamic color ribbon gives real-time visual feedback on both trend direction and strength.
🔢 Quantified Trend Scoring
Calculates a mathematically sound trend score using pairwise linear regression comparisons.
⚖️ Adjustable Sensitivity
Users can tune lookback and threshold parameters to fit different asset classes and timeframes.
📉 Smooth Ribbon Effect
Plots upper/lower bands around regression line with smooth filling for a professional chart look.
🎯 Precise Trend Confirmation
Acts as a confidence layer for other entry/exit signals by confirming broader trend bias.
🔒 Secure and Minimal Codebase
Core logic is embedded securely with minimal exposure, reducing risk of replication or misuse.
📘 Indicator User Guide
📌 Basic Concept
Filter Ribbon determines trend direction and intensity by comparing the order of linear regression values over time.
It forms a ribbon on the chart that changes color based on trend direction and opacity based on trend strength.
This makes it ideal for identifying clear trending periods vs. uncertain consolidations.
⚙️ Settings Explained
Lookback Period: Number of bars for scoring the trend direction (higher = smoother trend)
Range Tolerance (%): Determines how aggressive the trend classification is (lower = stricter)
Regression Length: Period for calculating the base linear regression line
Ribbon Colors: Customize colors for bullish and bearish conditions
📈 Bullish Timing Example
Ribbon color is green and becomes increasingly opaque
Regression line slopes upward and price remains above it
Can be used as trend confirmation for long trades
📉 Bearish Timing Example
Ribbon color is red with higher opacity
Price consistently below the regression line
Useful for confirming short trade setups or avoiding long entries
🧪 Recommended Use Cases
Combine with breakout indicators to validate if the breakout aligns with broader trend
Use in swing or trend-following strategies as a background filter
Helps filter out trades during unclear, sideways market conditions
🔒 Precautions
Not a signal generator on its own — meant for trend context only
Ribbon may lag slightly during sudden trend reversals; best used with reactive entry tools
Always test ribbon parameters on your specific market/timeframe before applying live
Avoid using solely in low-volatility or flat markets — sensitivity may require tuning
+++
Filter Cross1. Indicator Name
Filter Cross Indicator
2. One-line Introduction
A multi-filtered crossover strategy that enhances classic moving average signals with trend, volatility, volume, and momentum confirmation.
3. General Overview
The Filter Cross indicator builds upon the traditional golden/dead cross concept by incorporating additional market filters to evaluate the quality of each signal. It uses two key moving averages (50-period and 200-period SMA) to identify crossovers, while adding four advanced metrics:
Linear regression trend ordering,
ATR-based volatility positioning,
Volume pressure,
Price positioning relative to fast MA.
These components are individually scored and averaged to calculate a Confidence %, which is displayed on the chart alongside each crossover signal. Visual cues such as dynamic color changes reflect the current trend direction and strength, making it intuitive for both novice and experienced traders.
The indicator is especially effective in swing trading and trend-following strategies, where false signals can be filtered out through the additional logic.
Security measures are applied to ensure that the core logic remains protected, making it safe for proprietary use.
4. Key Advantages
✅ Multi-factor Signal Validation
Evaluates each signal using four key market filters to improve reliability over classic crossovers.
📉 Confidence Score Display
Each signal is accompanied by a Confidence % label to help traders assess entry/exit quality.
🎨 Dynamic Color Feedback
Automatically adjusts chart color based on trend intensity and direction, aiding visual clarity.
🔍 Linear Regression Trend Logic
Uses pairwise comparison of regression data to quantify trend alignment across lookback periods.
📈 Reduced False Signals
Minimizes noise and weak signals during sideways markets using adaptive thresholds.
📘 Indicator User Guide
📌 Basic Concept
Filter Cross enhances moving average crossover signals using four additional market-based filters.
These include trend alignment, volatility range, volume strength, and price momentum.
Final signals are graded with a Confidence % score, showing how favorable the conditions are for action.
⚙️ Settings Explained
Fast MA Length: Short-term moving average period (default: 50)
Slow MA Length: Long-term moving average period (default: 200)
Linear Regression Length: Period used to assess price trend alignment
Trend Lookback / Threshold: Sensitivity controls for trend scoring
Volume Lookback / ATR Length: Defines volatility and volume filters
Bull/Bear Color: Customize visual colors for bullish and bearish signals
📈 Buy Timing Example
Golden Cross occurs (50 MA crosses above 200 MA)
Confidence % is above 70%
Trend color turns green, volume is rising, price above fast MA → Strong entry signal
📉 Sell Timing Example
Dead Cross occurs (50 MA crosses below 200 MA)
Confidence % above 60% indicates a reliable bearish setup
Regression trend down, color turns red → Valid exit or short opportunity
🧪 Recommended Use Cases
Combine with RSI or MACD for timing confirmation in swing trades
Use Confidence % to filter out weak crossover signals during sideways trends
Effective in medium-to-long term trading with volatile assets
🔒 Precautions
Confidence % reflects current conditions—not future prediction—use with discretion
May produce delayed signals in ranging markets; test before real application
Best results achieved when combined with other indicators or price action context
Always optimize parameters based on the specific market or asset being traded
+++
Ultimate Std Dev Channel • 4 Zones • 100% WORKINGStandard-deviation channel — fully customizable (band width, line style, colors, opacity, thickness, and labels).
Adaptive Trend Finder SatishThis indicator will help you to identify intraday trend.
Credit Goes to Julien_Eche (This indicator is replicate of Adaptive Trend Finder and created separately only because the actual Adaptive Trend Finder code was not good for intraday trader and this code with small tweak will help short and long term, i only tweaked in shortterm logic. )
Astra EdgeAstra Edge Tool
Astra Edge is built from the ground up, through years of real market experience, observation, and execution — not theory.
It reflects how I personally analyze price structure, volatility, and directional bias in live markets.
The indicator combines multiple layers of technical logic — multi-timeframe trend context, fixed daily structure levels, volatility bands, and range compression detection — into one stable, easy-to-read system.
It does not predict or guarantee direction; it reads what the market is doing right now and presents it visually in a structured way.
Every element of Astra Edge — the dashboard, zones, and compression highlights — is designed to help traders interpret market behavior, not chase it.
It aims to bring clarity and control to your intraday or swing decision-making by helping you focus on structure, momentum, and context instead of noise.
It’s not a shortcut or a holy grail.
It’s a refined tool that mirrors how experienced traders actually think — visually, contextually, and systematically.
⚙️ Features
🟢 Multi–Timeframe Dashboard
A clean grid showing five user-selected symbols across three timeframes — giving instant trend alignment and strength visibility.
LTP, % change, and SMA direction are colour-coded for quick interpretation.
🔵 Fixed Market Structure Levels
Automatic plotting of previous day and today’s high, low, open, and close —
the four most powerful reference points for intraday structure and reaction levels.
No repainting, no recalculation — just static, reliable structure.
🟣 Zone Bands
Calculates zones from the prior candles
Weekly or custom timeframe zones
Zones are highlighted dynamically and labeled clearly, helping you identify balance, breakout, and reversal regions visually.
🟠 Sideways Zone Detector
Built-in compression detector that identifies when the market is stuck in range.
Highlights consolidation zones and labels them with optional Zig Zag markers, helping traders avoid choppy conditions or plan breakout traps early.
🟡 Optional Bollinger Framework
Toggleable Bollinger structure that adds volatility context to the chart, helping spot expansions, squeezes, or range resets quickly.
⚙️ Customization
Dashboard and Sideways Zone ON/OFF switches
Adjustable zone thickness, label names, and colours
Works across stocks, indices, forex, and crypto
Optimized for dark and light chart themes
🧠 How to Use
Best for intraday and positional structure analysis
Works on any timeframe — but ideal visualization on 1m to 1h charts
Ideal timeframe 5mins
Focus on zone reactions and structure shifts, not standalone signals
Combine with your own entry confirmation or volume logic
Remember — Astra Edge shows structure, it doesn’t decide trades.
💎 Philosophy
“Every trader has tools. The elite have Astra Edge.”
Astra Edge was built for traders who prefer clarity over clutter and discipline over guesswork.
It combines multiple technical frameworks — not to replace your strategy, but to enhance your judgment.
⚠️ Disclaimer
I am not a SEBI-registered advisor.
This indicator is created purely for educational and informational purposes.
It does not guarantee profits, nor should it be considered investment advice or a trading signal system.
Trading and investing involve risk — use at your own discretion and consult a SEBI-registered financial advisor before making any financial decisions.
Astra Edge follows price action — price action does not follow Astra Edge.
Sometimes it will align perfectly with the trend, other times it won’t.
This is not a Holy Grail, it’s a structured lens to view the market more intelligently.
💼 Access
“Access available to invite-only users.”
All existing users will receive lifetime updates and improvements without any additional charges.
sumeth.com EntryExit ProA professional multi-filter trading tool combining price action, pattern detection, dynamic trend filters, RSI/MACD confirmations, and breakout logic. Designed for precise entry & exit in any market.
ATR Trailing Stop + HL2 VWAP + EMAsmain atr/ema script
use this to guage immediate trend on the 2m
use this to guage long term trend on thr 6h and one day charts.
Typicallly most accurate with futures.
S/R MTF// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © fluxchart
//@version=6
//S&R; V2.12
const bool DEBUG = false
const bool fixSRs = true
const bool fixRetests = false
indicator("crr S/R MTF", overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500, dynamic_requests = true)
const int maxSRInfoListSize = 10
const int maxBarInfoListSize = 3000
const int maxDistanceToLastBar = 500
const int minSRSize = 5
const int retestLabelCooldown = 3
const float tooCloseATR = 1.0 / 8.0
const int labelOffsetBars = 20
const int atrLen = 20
atr = ta.atr(atrLen)
avgVolume = ta.sma(volume, atrLen)
var int curTFMS = timeframe.in_seconds(timeframe.period) * 1000
var map alerts = map.new()
alerts.put("Retest", false)
alerts.put("Break", false)
srPivotLength = input.int(15, "Pivot Length", minval = 3, maxval = 50, group = "General Configuration", display = display.none)
srStrength = input.int(1, "Strength", , group = "General Configuration", display = display.none)
srInvalidation = input.string("Close", "Invalidation", , group = "General Configuration", display = display.none)
expandZones = input.string("Only Valid", "Expand Lines & Zones", options = , group = "General Configuration", display = display.none)
showInvalidated = input.bool(true, "Show Invalidated", group = "General Configuration", display = display.none)
timeframe1Enabled = input.bool(true, title = "", group = "Timeframes", inline = "timeframe1", display = display.none)
timeframe1 = input.timeframe("", title = "", group = "Timeframes", inline = "timeframe1", display = display.none)
timeframe2Enabled = input.bool(false, title = "", group = "Timeframes", inline = "timeframe2", display = display.none)
timeframe2 = input.timeframe("D", title = "", group = "Timeframes", inline = "timeframe2", display = display.none)
timeframe3Enabled = input.bool(false, title = "", group = "Timeframes", inline = "timeframe3", display = display.none)
timeframe3 = input.timeframe("W", title = "", group = "Timeframes", inline = "timeframe3", display = display.none)
showBreaks = input.bool(true, "Show Breaks", group = "Breaks & Retests", inline = "ShowBR", display = display.none)
showRetests = input.bool(true, "Show Retests", group = "Breaks & Retests", inline = "ShowBR", display = display.none)
avoidFalseBreaks = input.bool(false, "Avoid False Breaks", group = "Breaks & Retests", display = display.none)
breakVolumeThreshold = input.float(0.3, "Break Volume Threshold", minval = 0.1, maxval = 2.0, step = 0.1, group = "Breaks & Retests", tooltip = "Only taken into account if Avoid False Breakouts is enabled. Higher values mean it's less likely to be a break.", display = display.none)
inverseBrokenLineColor = input.bool(false, "Inverse Color After Broken", group = "Breaks & Retests", display = display.none)
styleMode = input.string("Lines", "Style", , group = "Style", display = display.none)
lineStyle = input.string("____", "Line Style", , group = "Style", display = display.none)
lineWidth = input.int(2, "Line Width", minval = 1, group = "Style", display = display.none)
zoneSize = input.float(1.0, "Zone Width", minval = 0.1, maxval = 10, step = 0.1, group = "Style", display = display.none)
zoneSizeATR = zoneSize * 0.075
supportColor = input.color(#08998180, "Support Color", group = "Style", inline = "RScolors", display = display.none)
resistanceColor = input.color(#f2364580, "Resistance Color", group = "Style", inline = "RScolors", display = display.none)
breakColor = input.color(color.blue, "Break Color", group = "Style", inline = "RScolors2", display = display.none)
textColor = input.color(#ffffff80, "Text Color", group = "Style", inline = "RScolors2", display = display.none)
enableRetestAlerts = input.bool(true, "Enable Retest Alerts", tooltip = "Needs Show Retests option enabled.", group = "Alerts", display = display.none)
enableBreakAlerts = input.bool(true, "Enable Break Alerts", tooltip = "Needs Show Breaks option enabled.", group = "Alerts", display = display.none)
insideBounds = (bar_index > last_bar_index - maxDistanceToLastBar)
type srInfo
int startTime
float price
string srType
int strength
string timeframeStr
bool ephemeral = false
int breakTime
array retestTimes
type srObj
srInfo info
bool startFixed
bool breakFixed
bool rendered
string combinedTimeframeStr
line srLine
box srBox
label srLabel
label breakLabel
array retestLabels
type barInfo
int t
int tc
float c
float h
float l
var allSRList = array.new()
//#region Find Val RTN Time
findValRtnTime (barInfo biList, valToFind, toSearch, searchMode, minTime, maxTime, int defVal = na) =>
int rtnTime = defVal
float minDiff = na
if biList.size() > 0
for i = biList.size() - 1 to 0
curBI = biList.get(i)
if curBI.t >= minTime and curBI.t < maxTime
toLook = (toSearch == "Low" ? curBI.l : toSearch == "High" ? curBI.h : curBI.c)
if searchMode == "Nearest"
curDiff = math.abs(valToFind - toLook)
if na(minDiff)
rtnTime := curBI.t
minDiff := curDiff
else
if curDiff <= minDiff
minDiff := curDiff
rtnTime := curBI.t
if searchMode == "Higher"
if toLook >= valToFind
rtnTime := curBI.t
break
if searchMode == "Lower"
if toLook <= valToFind
rtnTime := curBI.t
break
rtnTime
//#endregion
formatTimeframeString (string formatTimeframe, bool short = false) =>
timeframeF = (formatTimeframe == "" ? timeframe.period : formatTimeframe)
if str.contains(timeframeF, "D") or str.contains(timeframeF, "W") or str.contains(timeframeF, "S") or str.contains(timeframeF, "M")
timeframe.from_seconds(timeframe.in_seconds(timeframeF))
else
seconds = timeframe.in_seconds(timeframeF)
if seconds >= 3600
hourCount = int(seconds / 3600)
if short
str.tostring(hourCount) + "h"
else
str.tostring(hourCount) + " Hour" + (hourCount > 1 ? "s" : "")
else
if short
timeframeF + "m"
else
timeframeF + " Min"
renderSRObj (srObj sr) =>
if na(sr.info.breakTime) or showInvalidated
sr.rendered := true
endTime = nz(sr.info.breakTime, time + curTFMS * labelOffsetBars)
extendType = extend.none
if na(sr.info.breakTime)
extendType := extend.right
if expandZones == "Only Valid" and na(sr.info.breakTime)
extendType := extend.both
else if expandZones == "All"
extendType := extend.both
endTime := time + curTFMS * labelOffsetBars
labelTitle = formatTimeframeString(sr.info.timeframeStr)
if not na(sr.combinedTimeframeStr)
labelTitle := sr.combinedTimeframeStr
labelTitle += " | " + str.tostring(sr.info.price, format.mintick) + ((sr.info.ephemeral and DEBUG) ? " " : "")
if styleMode == "Lines"
// Line
sr.srLine := line.new(sr.info.startTime, sr.info.price, endTime, sr.info.price, xloc = xloc.bar_time, color = sr.info.srType == "Resistance" ? resistanceColor : supportColor, width = lineWidth, style = lineStyle == "----" ? line.style_dashed : lineStyle == "...." ? line.style_dotted : line.style_solid, extend = extendType)
// Label
sr.srLabel := label.new(extendType == extend.none ? ((sr.info.startTime + endTime) / 2) : endTime, sr.info.price, xloc = xloc.bar_time, text = labelTitle, textcolor = textColor, style = label.style_none)
else
// Zone
sr.srBox := box.new(sr.info.startTime, sr.info.price + atr * zoneSizeATR, endTime, sr.info.price - atr * zoneSizeATR, xloc = xloc.bar_time, bgcolor = sr.info.srType == "Resistance" ? resistanceColor : supportColor, border_color = na, text = labelTitle, text_color = textColor, extend = extendType, text_size = size.normal, text_halign = (extendType != extend.none) ? text.align_right : text.align_center)
// Break Label
if showBreaks
if not na(sr.info.breakTime)
sr.breakLabel := label.new(sr.info.breakTime, sr.info.price, "B", yloc = sr.info.srType == "Resistance" ? yloc.belowbar : yloc.abovebar, style = sr.info.srType == "Resistance" ? label.style_label_up : label.style_label_down, color = breakColor, textcolor = color.new(textColor, 0), xloc = xloc.bar_time, size = size.small)
if (time - curTFMS <= sr.info.breakTime) and (time + curTFMS >= sr.info.breakTime)
alerts.put("Break", true)
// Retest Labels
if showRetests
if sr.info.retestTimes.size() > 0
for i = sr.info.retestTimes.size() - 1 to 0
curRetestTime = sr.info.retestTimes.get(i)
cooldownOK = true
if sr.retestLabels.size() > 0
lastLabel = sr.retestLabels.get(0)
if math.abs(lastLabel.get_x() - curRetestTime) < curTFMS * retestLabelCooldown
cooldownOK := false
if cooldownOK and (curRetestTime >= sr.info.startTime) and (na(sr.info.breakTime) or curRetestTime < sr.info.breakTime)
if time - curTFMS <= curRetestTime and time >= curRetestTime
alerts.put("Retest", true)
sr.retestLabels.unshift(label.new(curRetestTime, sr.info.price, "R" + (DEBUG ? (" " + str.tostring(sr.info.price)) : ""), yloc = sr.info.srType == "Resistance" ? yloc.abovebar : yloc.belowbar, style = sr.info.srType == "Resistance" ? label.style_label_down : label.style_label_up, color = sr.info.srType == "Resistance" ? resistanceColor : supportColor, textcolor = color.new(textColor, 0), xloc = xloc.bar_time, size = size.small))
safeDeleteSRObj (srObj sr) =>
if sr.rendered
line.delete(sr.srLine)
box.delete(sr.srBox)
label.delete(sr.srLabel)
label.delete(sr.breakLabel)
if sr.retestLabels.size() > 0
for i = 0 to sr.retestLabels.size() - 1
curRetestLabel = sr.retestLabels.get(i)
label.delete(curRetestLabel)
sr.rendered := false
var allSRInfoList = array.new()
var barInfoList = array.new()
pivotHigh = ta.pivothigh(srPivotLength, srPivotLength)
pivotLow = ta.pivotlow(srPivotLength, srPivotLength)
barInfoList.unshift(barInfo.new(time, time_close, close, high, low))
if barInfoList.size() > maxBarInfoListSize
barInfoList.pop()
if insideBounds and barstate.isconfirmed
// Find Supports
if not na(pivotLow)
validSR = true
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
curRSInfo = allSRInfoList.get(i)
if (math.abs(curRSInfo.price - pivotLow) < atr * tooCloseATR) and na(curRSInfo.breakTime)
validSR := false
break
if validSR
newSRInfo = srInfo.new(barInfoList.get(srPivotLength).t, pivotLow, "Support", 1, timeframe.period)
newSRInfo.retestTimes := array.new()
//for i = 1 to srPivotLength
//curBI = barInfoList.get(i)
//if (curBI.l <= newSRInfo.price and curBI.c >= newSRInfo.price)
//newSRInfo.strength += 1
//if curBI.t != newSRInfo.startTime
//newSRInfo.retestTimes.unshift(curBI.t)
allSRInfoList.unshift(newSRInfo)
while allSRInfoList.size() > maxSRInfoListSize
allSRInfoList.pop()
// Find Resistances
if not na(pivotHigh)
validSR = true
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
curRSInfo = allSRInfoList.get(i)
if (math.abs(curRSInfo.price - pivotLow) < atr * tooCloseATR) and na(curRSInfo.breakTime)
validSR := false
break
if validSR
newSRInfo = srInfo.new(barInfoList.get(srPivotLength).t, pivotHigh, "Resistance", 1, timeframe.period)
newSRInfo.retestTimes := array.new()
//for i = 1 to srPivotLength
//curBI = barInfoList.get(i)
//if (curBI.h >= newSRInfo.price and curBI.c <= newSRInfo.price)
//newSRInfo.strength += 1
//if curBI.t != newSRInfo.startTime
//newSRInfo.retestTimes.unshift(curBI.t)
allSRInfoList.unshift(newSRInfo)
if allSRInfoList.size() > maxSRInfoListSize
allSRInfoList.pop()
// Handle SR Infos
if insideBounds and (srInvalidation == "Wick" or barstate.isconfirmed)
if allSRInfoList.size() > 0
for i = 0 to allSRInfoList.size() - 1
srInfo curSRInfo = allSRInfoList.get(i)
// Breaks
invHigh = (srInvalidation == "Close" ? close : high)
invLow = (srInvalidation == "Close" ? close : low)
closeTime = time
if na(curSRInfo.breakTime)
if curSRInfo.srType == "Resistance" and invHigh > curSRInfo.price
if (not avoidFalseBreaks) or (volume > avgVolume * breakVolumeThreshold)
curSRInfo.breakTime := closeTime
if inverseBrokenLineColor and (not curSRInfo.ephemeral) and curSRInfo.strength >= srStrength
ephSR = srInfo.new(closeTime, curSRInfo.price, "Support", curSRInfo.strength, curSRInfo.timeframeStr, true)
ephSR.retestTimes := array.new()
allSRInfoList.unshift(ephSR)
else if curSRInfo.srType == "Support" and invLow < curSRInfo.price
if (not avoidFalseBreaks) or (volume > avgVolume * breakVolumeThreshold)
curSRInfo.breakTime := closeTime
if inverseBrokenLineColor and (not curSRInfo.ephemeral) and curSRInfo.strength >= srStrength
ephSR = srInfo.new(closeTime, curSRInfo.price, "Resistance", curSRInfo.strength, curSRInfo.timeframeStr, true)
ephSR.retestTimes := array.new()
allSRInfoList.unshift(ephSR)
// Strength & Retests
if na(curSRInfo.breakTime) and time > curSRInfo.startTime and barstate.isconfirmed
if curSRInfo.srType == "Resistance" and high >= curSRInfo.price and close <= curSRInfo.price
int lastRetestTime = 0
if curSRInfo.retestTimes.size() > 0
lastRetestTime := curSRInfo.retestTimes.get(0)
if lastRetestTime != time
if not curSRInfo.ephemeral
curSRInfo.strength += 1
curSRInfo.retestTimes.unshift(time)
else if curSRInfo.srType == "Support" and low <= curSRInfo.price and close >= curSRInfo.price
int lastRetestTime = 0
if curSRInfo.retestTimes.size() > 0
lastRetestTime := curSRInfo.retestTimes.get(0)
if lastRetestTime != time
if not curSRInfo.ephemeral
curSRInfo.strength += 1
curSRInfo.retestTimes.unshift(time)
fixSRToTimeframe (srObj sr) =>
srMS = math.max(timeframe.in_seconds(sr.info.timeframeStr), timeframe.in_seconds()) * 1000
if (not sr.startFixed)
if not sr.info.ephemeral
if sr.info.srType == "Resistance"
sr.info.startTime := findValRtnTime(barInfoList, sr.info.price, "High", "Nearest", sr.info.startTime - srMS, sr.info.startTime + srMS, sr.info.startTime)
else
sr.info.startTime := findValRtnTime(barInfoList, sr.info.price, "Low", "Nearest", sr.info.startTime - srMS, sr.info.startTime + srMS, sr.info.startTime)
sr.startFixed := true
else
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
curSR = allSRList.get(i)
if (not curSR.info.ephemeral) and (not na(curSR.info.breakTime)) and curSR.info.price == sr.info.price and ((sr.info.srType == "Resistance" and curSR.info.srType == "Support") or (sr.info.srType == "Support" and curSR.info.srType == "Resistance"))
if curSR.breakFixed
sr.info.startTime := curSR.info.breakTime
sr.startFixed := true
break
if not na(sr.info.breakTime)
if (not sr.breakFixed)
if sr.info.srType == "Resistance"
sr.info.breakTime := findValRtnTime(barInfoList, sr.info.price, srInvalidation == "Wick" ? "High" : "Close", "Higher", sr.info.breakTime - srMS, sr.info.breakTime + srMS, sr.info.breakTime)
else
sr.info.breakTime := findValRtnTime(barInfoList, sr.info.price, srInvalidation == "Wick" ? "Low" : "Close", "Lower", sr.info.breakTime - srMS, sr.info.breakTime + srMS, sr.info.breakTime)
sr.breakFixed := true
if sr.info.retestTimes.size() > 0 and fixRetests
for i = 0 to sr.info.retestTimes.size() - 1
curRetestTime = sr.info.retestTimes.get(i)
retestStartTime = curRetestTime - srMS
retestStartTime := math.max(retestStartTime, sr.info.startTime + 1)
retestEndTime = curRetestTime + srMS
if not na(sr.info.breakTime)
retestEndTime := math.min(retestEndTime, sr.info.breakTime - 1)
if sr.info.srType == "Resistance"
sr.info.retestTimes.set(i, findValRtnTime(barInfoList, sr.info.price, "High", "Higher", retestStartTime, retestEndTime, sr.info.retestTimes.get(i)))
else
sr.info.retestTimes.set(i, findValRtnTime(barInfoList, sr.info.price, "Low", "Lower", retestStartTime, retestEndTime, sr.info.retestTimes.get(i)))
getSR (srObj list, srPrice, eph, srType, timeframeStr) =>
srObj rtnSR = na
if list.size() > 0
for i = 0 to list.size() - 1
curSR = list.get(i)
if curSR.info.price == srPrice and curSR.info.ephemeral == eph and curSR.info.srType == srType and curSR.info.timeframeStr == timeframeStr
rtnSR := curSR
break
rtnSR
// Handle SR
handleTF (tfStr, tfEnabled) =>
if tfEnabled
tfSRInfoList = request.security(syminfo.tickerid, tfStr, allSRInfoList)
if not na(tfSRInfoList) and tfSRInfoList.size() > 0
for i = 0 to tfSRInfoList.size() - 1
srInfo curSRInfo = tfSRInfoList.get(i)
if fixSRs
currentSameSR = getSR(allSRList, curSRInfo.price, curSRInfo.ephemeral, curSRInfo.srType, curSRInfo.timeframeStr)
if not na(currentSameSR)
if currentSameSR.startFixed
curSRInfo.startTime := currentSameSR.info.startTime
if currentSameSR.breakFixed
curSRInfo.breakTime := currentSameSR.info.breakTime
curSRInfo.retestTimes := currentSameSR.info.retestTimes
// All other info should be replaced except fixed start, break and all retests.
currentSameSR.info := curSRInfo
if not currentSameSR.breakFixed
fixSRToTimeframe(currentSameSR)
else
srObj newSRObj = srObj.new(curSRInfo)
// We handle retests in current timeframe so no need to get them from upper.
newSRObj.info.retestTimes := array.new()
newSRObj.retestLabels := array.new()
fixSRToTimeframe(newSRObj)
allSRList.unshift(newSRObj)
else
srObj newSRObj = srObj.new(curSRInfo)
newSRObj.retestLabels := array.new()
allSRList.unshift(newSRObj)
true
if (bar_index > last_bar_index - maxDistanceToLastBar * 8) and barstate.isconfirmed
if not fixSRs
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
srObj curSRObj = allSRList.get(i)
safeDeleteSRObj(curSRObj)
allSRList.clear()
handleTF(timeframe1, timeframe1Enabled)
handleTF(timeframe2, timeframe2Enabled)
handleTF(timeframe3, timeframe3Enabled)
if allSRList.size() > 0
for i = 0 to allSRList.size() - 1
srObj curSRObj = allSRList.get(i)
safeDeleteSRObj(curSRObj)
tooClose = false
for j = 0 to allSRList.size() - 1
closeSR = allSRList.get(j)
if closeSR.rendered and math.abs(closeSR.info.price - curSRObj.info.price) <= tooCloseATR * atr and closeSR.info.srType == curSRObj.info.srType and closeSR.info.ephemeral == curSRObj.info.ephemeral
tooClose := true
if not str.contains((na(closeSR.combinedTimeframeStr) ? formatTimeframeString(closeSR.info.timeframeStr) : closeSR.combinedTimeframeStr), formatTimeframeString(curSRObj.info.timeframeStr))
if na(closeSR.combinedTimeframeStr)
closeSR.combinedTimeframeStr := formatTimeframeString(closeSR.info.timeframeStr) + " & " + formatTimeframeString(curSRObj.info.timeframeStr)
else
closeSR.combinedTimeframeStr += " & " + formatTimeframeString(curSRObj.info.timeframeStr)
break
if (curSRObj.info.strength >= srStrength) and (na(curSRObj.info.breakTime) or (curSRObj.info.breakTime - curSRObj.info.startTime) >= minSRSize * curTFMS) and (not tooClose)
renderSRObj(curSRObj)
// Current Timeframe Retests
if allSRList.size() > 0 and barstate.isconfirmed
for i = 0 to allSRList.size() - 1
srObj curSR = allSRList.get(i)
if na(curSR.info.breakTime) and time > curSR.info.startTime
if curSR.info.srType == "Resistance" and high >= curSR.info.price and close <= curSR.info.price
int lastRetestTime = 0
if curSR.info.retestTimes.size() > 0
lastRetestTime := curSR.info.retestTimes.get(0)
if lastRetestTime != time
curSR.info.retestTimes.unshift(time)
else if curSR.info.srType == "Support" and low <= curSR.info.price and close >= curSR.info.price
int lastRetestTime = 0
if curSR.info.retestTimes.size() > 0
lastRetestTime := curSR.info.retestTimes.get(0)
if lastRetestTime != time
curSR.info.retestTimes.unshift(time)
//plotchar(alerts.get("Break") ? high : na, "", "✅", size = size.normal)
//plotchar(alerts.get("Retest") ? high : na, "", "❤️", size = size.normal, location = location.belowbar)
alertcondition(alerts.get("Retest"), "New Retest", "")
alertcondition(alerts.get("Break"), "New Break", "")
if enableRetestAlerts and alerts.get("Retest")
alert("New Retests Occured.")
if enableBreakAlerts and alerts.get("Break")
alert("New Breaks Occured.")






















