Swing Trading Indicator: RSI + EMA + MACD + BB Signals**Swing Trading Indicator: Multi-Indicator Confluence Signals**
This indicator identifies high-probability swing trading setups using RSI pullbacks, EMA trend filter, MACD momentum confirmation, and Bollinger Bands for volatility-based entries. Perfect for daily/4H charts on stocks like TSLA or SPY.
**Key Features:**
- **Long Signal (Green ↑ Arrow)**: Uptrend (above 200 EMA) + RSI crosses above oversold (default 30) + MACD bullish crossover + Price at/near BB lower band + Optional squeeze filter.
- **Short Signal (Red ↓ Arrow)**: Mirror for downtrends.
- **Real-Time Dashboard**: Top-right table shows condition status (✓/✗) and "LONG/SHORT READY" alerts.
- **Customizable**: Adjust RSI levels, BB multiplier, enable/disable shorts/squeeze/arrows.
- **Alerts**: Built-in for entry notifications.
**How to Use:**
1. Add to chart (daily timeframe recommended).
2. Watch for arrows + "READY" in dashboard.
3. Manual entry: Risk 1% per trade, target 1:2 reward (e.g., trail stops).
**Backtest Note**: Based on similar setups, ~55-65% win rate in trending markets (test yourself). Not financial advice—trading involves risk. Fork and improve!
#swingtrading #RSI #MACD #BollingerBands #PineScript
지표 및 전략
Basit Trend AL/SAT//@version=5
indicator("Basit Trend AL/SAT", overlay=true)
yesil = close > open
kirmizi = close < open
1 = yeşil, -1 = kırmızı, 0 = başlangıç
var int trend = 0
trend := yesil ? 1 : kirmizi ? -1 : trend
al = yesil and trend != 1
sat = kirmizi and trend != -1
plotshape(al, title="AL", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.large, text="AL")
plotshape(sat, title="SAT", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.large, text="SAT")
bgcolor(trend == 1 ? color.new(color.green, 85) : trend == -1 ? color.new(color.red, 85) : na)
Order Flow Analysis [Master Alert]This script is a custom modification of the original "Order Flow Analysis" indicator by kingthies.
I have taken the original code and engineered a "Master Alert" system into it. Here is the breakdown of what this specific script does:
1. The Core Purpose: "One Ring to Rule Them All"
In the original script, if you wanted to catch every move, you would have to set up separate alerts for Divergences, Absorptions, Crosses, etc. This modified script combines all 8 possible signals into a single "Master Trigger."
2. What triggers the Alert?
The alert will fire if ANY of the following 4 events happen on a candle:
Divergence (The Arrows):
Green Arrow: Price makes lower low, Pressure makes higher low (Bullish).
Red Arrow: Price makes higher high, Pressure makes lower high (Bearish).
Absorption (The Transparent Bars):
Bull Absorption: Huge volume + Price won't drop (Hidden Buying).
Bear Absorption: Huge volume + Price won't rise (Hidden Selling).
Zero Line Crosses (The Sentiment Flip):
Bull Cross: Pressure score flips from Negative to Positive.
Bear Cross: Pressure score flips from Positive to Negative.
Strong Zones (Turbo Mode):
Strong Bull: Pressure score breaks above +50.
Strong Bear: Pressure score breaks below -50.
3. How to Use It
Add the script to your chart.
Create an Alert.
Select "Order Flow Master" as the Condition.
Select "MASTER ALERT (All Signals)".
Now, you will get a notification for every single significant event this indicator detects, without needing multiple alert slots.
Range-Weighted Volatility (Comparable)I wrote an indicator to measure volatility inside a range. It’s extremely useful for choosing a trading pair for grid strategies, because it lets you quickly, easily, and fairly identify which asset is the volatility leader. It measures volatility “fairly” relative to the asset’s trading range, not just by absolute price changes.
For example: if an asset trades in a 50–100 range and over a week it moves many, many times between 52 and 98, then it’s highly volatile. But if another asset trades in a 50–1000 range and makes the same 52–98 moves, its volatility is actually low — because the “weight” of that movement relative to the full range is small. The indicator accounts for this “movement weight” relative to the range, then sums these weights into a single number. That number makes it easy to judge whether an asset is suitable for a grid strategy.
That’s exactly what grids need: not just high volatility, but high volatility within a narrow range.
Settings: the Window (bars) field defines how many bars are used to calculate volatility. On a 5-minute chart, one week is 2016 bars (2460/57). By default, the script calculates over 30 days on 5-minute charts. The script also allows you to set a second symbol for comparison, so you can see both results on the same chart.
Написал индикатор для определения волатильности в диапазоне, очень-очень полезно для выбора торговой пары на гриде, позволяет легко и быстро и честно определить лидера по волатильности, при этом определяет ее "честно", относительно торгового диапазона, а не просто изменения цены.
Например если актив торгуется в диапазоне 50-100 и за неделю много-много раз сходил 52-98, то это очень волатильный актив, и в то же время если актив торгуется в диапазоне 50-1000 и сходил так же 52-98, то это будет низко волатильный актив, т.е. учитывается "вес" движения относительно диапазона и данные "веса" суммируются в одну единую цифру по которой и можно оценивать насколько актив подходит под грид стратегию.
А ведь именно это для гридов и нужно, не просто высокая волатильность, а именно высокая волатильность в узком диапазоне.
Касательно настроек , в поле Windows (bars) задается количество баров по которым скрипт будет считать волатильность, на 5-ти минутки неделя это 2016 (24*60/5*7), стандартно скрипт считает за 30 дней на 5-ти минутки. + в самом скрипте можно указать вторую пару для сравнения чтоб на одном графике увидеть результат.
Breakout/Breakdown DetectorBreakout/Breakdown Detector - Quick Overview
What it does:
This indicator automatically identifies when price breaks through key support or resistance levels, signaling potential trading opportunities.
Key Features:
📈 Breakout Detection - Alerts when price breaks ABOVE resistance (bullish signal)
📉 Breakdown Detection - Alerts when price breaks BELOW support (bearish signal)
🔊 Volume Confirmation - Optionally requires high volume to confirm the break (filters false signals)
📊 Visual Signals - Shows green triangles (breakout) and red triangles (breakdown) on chart
🎨 Support/Resistance Lines - Automatically draws key levels based on recent price action
Settings You Can Adjust:
Lookback Period (default 20) - How many candles back to find support/resistance
Volume Multiplier (default 1.5x) - How much volume needed to confirm
Breakout Threshold (default 0.5%) - How far price must break through the level
How to Use:
Add to any chart (stocks, crypto, forex, etc.)
Green triangle below bar = BUY signal (breakout)
Red triangle above bar = SELL signal (breakdown)
Set alerts to get notified automatically
Perfect for: Swing traders, breakout traders, and anyone who wants to catch momentum moves early! 🚀
INAZUMA Bollinger BandsThis is an indicator based on the widely used Bollinger Bands, enhanced with a unique feature that visually emphasizes the "strength of the breakout" when the price penetrates the bands.
Main Features and Characteristics
1. Standard Bollinger Bands Display
Center Line (Basis): Simple Moving Average (\text{SMA(20)}).
1 sigma Lines: Light green (+) and red (-) lines for reference.
2 sigma Lines (Upper/Lower Band): The main dark green (+) and red (-) bands.
2. Emphasized Breakout Zones: "INAZUMA / Flare" and "MAGMA"
The key feature is the activation of colored, expanding areas when the candlestick's High or Low breaks significantly outside the \pm 2\sigma bands.
Upper Side (Green Base / Flare):
When the High exceeds the +2\sigma line, a green gradient area expands upwards.
Indication: This visually suggests strong buying pressure or overbought conditions. The color deepens as the price moves further away, indicating higher momentum.
Lower Side (Red Base / Magma):
When the Low falls below the -2 sigma line, a red gradient area expands downwards.
Indication: This visually suggests strong selling pressure or oversold conditions. The color deepens as the price moves further away, indicating higher momentum.
Key Insight: This visual aid helps traders quickly assess the momentum and market excitement when the price moves outside the standard Bollinger Bands range. Use it as a reference for judging trend strength and potential entry/exit points.
Customizable Settings
You can adjust the following parameters in the indicator settings:
Length: The period used for calculating the Moving Average and Standard Deviation. (Default: 20)
StdDev (Standard Deviation): The multiplier for the band width (e.g., 2.0 for -2 sigma). (Default: 2.0)
Source: The price data used for calculation (Default: close).
Hicham tight/wild rangeHere’s a complete Pine Script indicator that draws colored boxes around different types of ranges!
Main features:
📦 Types of ranges detected:
Tight Range (30–60 pips): Gray boxes
Wild Range (80+ pips): Yellow boxes
Trinity Real Move Detector DashboardRelease Notes (critical)
1. This code "will" require tweaks for different timeframes to the multiplier, do not assume the data in the table is accurate, cross check it with the Trinity Real Move Detector or another ATR tool, to validate the values in the table and ensure you have set the correct values.
2. I mention this below. But please understand that pine code has a limitation in the number of security calls (40 request.security() calls per script). This code is on the limit of that threshold and I would encourage developers to see if they can find a way around this to improve the script and release further updates.
What do we have...
The Trinity Real Move Detector Dashboard is a powerful TradingView indicator designed to scan multiple assets at once and show when each one has genuine short-term volatility "energy" — the kind that makes directional options trades (especially 0DTE or short-dated) have a high probability of follow-through, and can be used for swing trading as well. It combines a simple ATR-based volatility filter with a SuperTrend-style bias to tell you not only if the market is "awake" but also in which direction the momentum is leaning.
At its core, the indicator calculates the current ATR on your chosen timeframe and compares it to a user-defined percentage of the asset's daily ATR. When the short-term ATR spikes above that threshold, it signals "enough energy" — meaning the underlying is moving with real force rather than choppy noise. The SuperTrend logic then determines bullish or bearish bias, so the status shows "BULLISH ENERGY" (green) or "BEARISH ENERGY" (red) when energy is on, or "WAIT" when it's not. It also counts how many bars the energy has been active and shows the current ATR vs threshold for quick visual confirmation.
The dashboard displays all this in a clean table with columns for Symbol, Multiplier, Current ATR, Threshold, Status, Bars Active, and Bias (UP/DOWN). It's perfect for 3-minute charts but works on any timeframe — just adjust the multiplier based on the hints in the settings.
Editing symbols and multipliers is straightforward and user-friendly. In the indicator settings, you'll see numbered inputs like "1. Symbol - NVDA" and "1. Multiplier". To change an asset, simply type the new ticker in the symbol field (e.g., replace "NVDA" with "TSLA", "AVGO", or "ADAUSD"). You can also adjust the multiplier for each asset individually in the corresponding "Multiplier" field to make it more or less sensitive — lower numbers give more signals, higher numbers give stricter, higher-quality ones. This lets you customize the dashboard to your watchlist without any coding. For example, if you switch to a 4-hour chart or a slower-moving stock like AVGO, you may need to raise the multiplier (e.g., to 0.3–0.4) to avoid false "bullish" signals during minor bounces in a larger downtrend.
One important note about the multiplier and timeframes: the default values are optimized for fast intraday charts (like 3-minute or 5-minute). On higher timeframes (15-minute, 1-hour, 4-hour, or daily), the SuperTrend bias can be too sensitive with low multipliers (1.0 default in the code), leading to situations like the AVGO 4-hour example — where price is clearly downtrending, but the dashboard shows "BULLISH ENERGY" because the tight bands flip on small bounces. To fix this, you need to manually increase the multiplier for that asset (or all assets) in the settings. For 4-hour or daily charts, 0.25–0.35 is often better to match smoother SuperTrend indicators like Trinity. Always test on your timeframe and asset — crypto usually needs slightly lower multipliers than stocks due to higher volatility.
TradingView has a hard limit of 40 request.security() calls per script. Each asset in the dashboard requires several calls (current ATR, daily ATR, SuperTrend components, etc.), so with the full ATR-based bias, you can safely monitor about 6–8 assets before hitting the limit. Adding more symbols increases the number of calls and will trigger the "too many securities" error. This is a platform restriction to prevent excessive server load, and there's no official way around it in a single script. Some advanced coders use tricks like caching or lower-timeframe requests to squeeze in a few more, but for reliability, sticking to 6–8 assets is recommended. If you need more, the common workaround is to create two separate indicators (e.g., one for stocks, one for crypto) and add both to the same chart.
Overall, this dashboard gives you a professional-grade multi-asset scanner that filters out low-energy noise and highlights real momentum opportunities across stocks and crypto — all in one glance. It's especially valuable for options traders who want to avoid theta decay on weak moves and only strike when the market has true fuel. By tweaking the per-symbol multipliers in the settings, you can perfectly adapt it to any timeframe or asset behavior, avoiding issues like the AVGO false bullish signal on higher timeframes.
MNQ Quant Oscillator Lab v2.1MNQ Quant Oscillator Lab v2.1 — Clean Namespaces
Adaptive LinReg Oscillator + Auto Regime Switching + MTF Confirmation + MOEP Gate + Research Harness
MNQ Quant Oscillator Lab is a research-grade oscillator framework designed for MNQ/NQ (and other liquid futures/indices) on 1-minute and intraday timeframes. It combines a linear-regression-based detrended oscillator with quant-style normalization, adaptive parameterization, regime switching, multi-timeframe confirmation, and an optional MOEP (Minimum Optimal Entry Point) gate. The goal is to provide a customizable signal laboratory that is stable in real time, non-repainting by default, and suitable for systematic experimentation.
What this indicator does
1) Core oscillator (quant-normalized)
The indicator computes a linear regression (LinReg) detrended signal and expresses it as a z-scored oscillator for portability across volatility regimes and assets. You can switch the oscillator “transform family” via Oscillator type:
LinReg Residual / Residual Z: detrended residual (mean-reversion sensitive)
LinReg Slope Z: regression slope (trend-derivative sensitive)
LogReturn Z: log-return oscillator (momentum-style)
VolNorm Return Z: volatility-normalized returns (risk-scaled)
This yields a single oscillator that is comparable over time, not tied to raw point values.
2) Adaptive length (dynamic calibration)
When enabled, the regression length is automatically adapted using a volatility-regime proxy (ATR% z-scored → logistic mapping). High volatility typically shortens the effective lookback; low volatility allows longer lookbacks. This helps the oscillator remain responsive during expansions while staying stable in compressions.
Important: the adaptive logic is implemented with safe warmup behavior, so it will not throw NaN errors on early bars.
3) Adaptive thresholds (dynamic bands)
Instead of static overbought/oversold levels, the indicator can compute dynamic upper/lower bands from the oscillator’s own distribution (rolling mean + sigma). This creates thresholds that adjust automatically to regime changes.
4) Auto regime switching (Trend vs Mean Reversion)
With Auto regime switch enabled, the indicator selects whether to behave as a Trend system or a Mean Reversion system using an interpretable heuristic:
Trend regime when EMA-spread is strong relative to ATR and ATR is rising
Otherwise defaults to Mean Reversion
This prevents running mean-reversion logic in trend breakouts and reduces “mode mismatch.”
5) Multi-timeframe (MTF) confirmation (optional)
MTF confirmation can be enabled to require that the higher timeframe oscillator sign aligns with the direction of the signal. This is useful for reducing noise on MNQ 1m by requiring higher-timeframe structure agreement (e.g., 5m or 15m).
6) MOEP Gate (optional “institutional” filter)
The MOEP gate is a confluence score filter intended to reduce low-quality signals. It aggregates multiple components into a 0–100 score:
BB/KC squeeze condition
Expansion proxy
Trend proxy
Momentum proxy (RSI-based)
Volume catalyst (volume z-score)
Structure break (highest/lowest break)
You can set:
Score threshold (minimum score required)
Minimum components required (forces diversity of evidence)
When enabled, a signal must satisfy both oscillator logic and MOEP confluence conditions.
7) Research harness (NON-CAUSAL, OFF by default)
A built-in research mode evaluates signals using future bars to compute basic forward excursion statistics:
MFE (max favorable excursion)
MAE (max adverse excursion)
Simple win-rate proxy based on MFE vs MAE
This feature is strictly for offline analysis and tuning. It is disabled by default and should not be considered “live-safe” because it uses future information for evaluation.
Signals and interpretation
Mean Reversion regime
Long: oscillator is below the lower band and turns back upward across it
Short: oscillator is above the upper band and turns back downward across it
Trend regime
Long: oscillator crosses above zero (optionally requires structure break confirmation)
Short: oscillator crosses below zero (optionally requires structure break confirmation)
Hybrid
When Hybrid is selected (manual mode), the indicator allows both trend and mean-reversion triggers, but still respects the filters and gates you enable.
Recommended starting configuration (MNQ 1m)
If you want stable, high-quality signals first, then expand into research:
Use RTH only: ON
Auto regime switch: ON
Adaptive length: ON
Adaptive bands: ON
MTF confirmation: OFF initially (turn ON later with 5m)
MOEP Gate: OFF initially (turn ON after you confirm base behavior)
Research harness: OFF (only enable for tuning studies)
Practical notes / transparency
The indicator is designed to be stable on live bars (optional confirmed-bar behavior reduces flicker).
No repainting logic is used for signals.
Any “performance” numbers shown under Research harness are not tradable metrics; they are forward-looking evaluation outputs intended strictly for experimentation.
Disclaimer
This script is provided for educational and research purposes only and does not constitute financial advice. Futures trading involves substantial risk, including the possibility of loss exceeding initial investment.
Gamma & Volatility Levels [Pro]General Purpose
This indicator analyzes volatility levels and expected price movements, combining gamma concepts (financial options) with volatility analysis to identify support and resistance zones.
Main Components
High Volatility Level (HVL): Calculates a volatility level based on the simple moving average (SMA) of the price plus one standard deviation. This level is represented by an orange line showing where volatility is concentrated.
Expected Movement (Movimiento Esperante): Uses the Average True Range (ATR) multiplied by an adjustable factor to project potential upward and downward movement ranges from the current price. It is drawn in green (upward) and red (downward).
Gamma Levels (Nivelas Gamma): Identifies two key levels: the call resistance (highest high of the last 50 periods) in blue, and the put support (lowest low) in purple. These are based on recent extreme prices.
Additional Information: The indicator calculates the percentage distance between the current price and the HVL, displaying it in a label.
Visual Elements
Colored lines on the chart for each level.
Labels with exact values next to each line.
A table in the upper right corner summarizing all calculated values.
Options to show or hide each element according to preference.
This is a useful tool for traders who work with options or seek to identify levels of extreme volatility and dynamic support/resistance zones.
Volume Delta Divergence Candle ColorThis indicator identifies divergences between price action and volume delta, highlighting potential reversal or continuation signals by coloring candles when buyer/seller pressure conflicts with the candle's direction.
**How It Works:**
The indicator analyzes real-time up/down volume data to detect two types of divergences:
🟣 **Seller Divergence (Fuscia)** - Occurs when a candle closes bullish (green) but the volume delta is negative, indicating more selling pressure despite the upward price movement. This suggests weak buying or potential distribution.
🔵 **Buyer Divergence (Cyan)** - Occurs when a candle closes bearish (red) but the volume delta is positive, indicating more buying pressure despite the downward price movement. This suggests weak selling or potential accumulation.
**Features:**
✓ Colors only divergent candles - non-divergent candles maintain your chart's default colors
✓ Uses actual exchange volume delta data (works best with CME futures and other instruments with tick-level data)
✓ Optional triangle markers above/below divergent candles for quick visual identification
✓ Clean, minimal design that doesn't clutter your chart
**Best Used For:**
- Identifying potential reversals or continuations
- Spotting weak price movements that may not follow through
- Confirming price action with underlying volume pressure
- Works on any timeframe with available volume delta data
**Note:** This indicator requires volume data from exchanges that provide tick-level information (CME futures, cryptocurrency exchanges, etc.). Results may vary on instruments with limited volume data.
PEAD ScreenerPEAD Screener - Post-Earnings Announcement Drift Scanner
═══════════════════════════════════════════════════════════════
WHY EARNINGS ANNOUNCEMENTS CREATE OPPORTUNITY
═══════════════════════════════════════════════════════════════
The days immediately following an earnings announcement are among the noisiest periods for any stock. Within hours, the market must digest new information about a company's profits, revenue, and future outlook. Analysts scramble to update their models. Institutions rebalance positions. Retail traders react to headlines.
This chaos creates a well-documented phenomenon called Post-Earnings Announcement Drift (PEAD): stocks that beat expectations tend to keep rising, while those that miss tend to keep falling - often for weeks after the initial announcement. Academic research has confirmed this pattern persists across decades and markets.
But not every earnings surprise is equal. A company that beats estimates by 5 cents might move very differently than one that beats by 5 cents with unusually high volume, or one where both earnings AND revenue exceeded expectations. Raw numbers alone don't tell the full story.
═══════════════════════════════════════════════════════════════
HOW "STANDARDIZED UNEXPECTED" METRICS CUT THROUGH THE NOISE
═══════════════════════════════════════════════════════════════
This screener uses a statistical technique to measure how "surprising" a result truly is - not just whether it beat or missed, but how unusual that beat or miss was compared to the company's own history.
The core idea: convert raw surprises into Z-scores.
A Z-score answers the question: "How many standard deviations away from normal is this result?"
- A Z-score of 0 means the result was exactly average
- A Z-score of +2 means the result was unusually high (better than ~95% of historical results)
- A Z-score of -2 means the result was unusually low
By standardizing surprises this way, we can compare apples to apples. A small-cap biotech's $0.02 beat might actually be more significant than a mega-cap's $0.50 beat, once we account for each company's typical variability.
This screener applies this standardization to three dimensions: earnings (SUE), revenue (SURGE), and volume (SUV).
═══════════════════════════════════════════════════════════════
THE 9 SCREENING CRITERIA
═══════════════════════════════════════════════════════════════
─────────────────────────────────────────
1. SUE (Standardized Unexpected Earnings)
─────────────────────────────────────────
WHAT IT IS:
SUE measures how surprising an earnings result was, adjusted for the company's historical forecast accuracy.
Calculation: Take the earnings surprise (actual EPS minus analyst estimate), then divide by the standard deviation of past forecast errors. This uses a rolling window of the last 8 quarters by default.
Formula: SUE = (Actual EPS - Estimated EPS) / Standard Deviation of Past Errors
HOW TO INTERPRET:
- SUE > +2.0: Strongly positive surprise - earnings beat expectations by an unusually large margin. These stocks often continue drifting higher.
- SUE between 0 and +2.0: Modest positive surprise - beat expectations, but within normal range.
- SUE between -2.0 and 0: Modest negative surprise - missed expectations, but within normal range.
- SUE < -2.0: Strongly negative surprise - significant miss. These stocks often continue drifting lower.
For long positions, look for SUE values above +2.0, ideally combined with positive SURGE.
─────────────────────────────────────────
2. SURGE (Standardized Unexpected Revenue)
─────────────────────────────────────────
WHAT IT IS:
SURGE applies the same standardization technique to revenue surprises. While earnings can be manipulated through accounting choices, revenue is harder to fake - it represents actual sales.
Calculation: Take the revenue surprise (actual revenue minus analyst estimate), then divide by the standard deviation of past revenue forecast errors.
Formula: SURGE = (Actual Revenue - Estimated Revenue) / Standard Deviation of Past Errors
HOW TO INTERPRET:
- SURGE > +1.5: Strongly positive revenue surprise - the company sold significantly more than expected.
- SURGE between 0 and +1.5: Modest positive surprise.
- SURGE < 0: Revenue missed expectations.
The most powerful signals occur when BOTH SUE and SURGE are positive and elevated (ideally SUE > 2.0 AND SURGE > 1.5). This indicates the company beat on both profitability AND top-line growth - a much stronger signal than either alone.
When SUE and SURGE diverge significantly (e.g., high SUE but negative SURGE), treat with caution - the earnings beat may have come from cost-cutting rather than genuine growth.
─────────────────────────────────────────
3. SUV (Standardized Unexpected Volume)
─────────────────────────────────────────
WHAT IT IS:
SUV detects unusual trading volume after accounting for how volatile the stock is. More volatile stocks naturally have higher volume, so raw volume comparisons can be misleading.
Calculation: This uses regression analysis to model the expected relationship between price volatility and volume. The "unexpected" volume is the residual - how much actual volume deviated from what the model predicted. This residual is then standardized into a Z-score.
In plain terms: SUV asks "Given how much this stock typically moves, is today's volume unusually high or low?"
HOW TO INTERPRET:
- SUV > +2.0: Exceptionally high volume relative to the stock's volatility. This often signals institutional activity - big players moving in or out.
- SUV between +1.0 and +2.0: Elevated volume - above normal interest.
- SUV between -1.0 and +1.0: Normal volume range.
- SUV < -1.0: Unusually quiet - less activity than expected.
High SUV combined with positive price movement suggests accumulation (buying). High SUV combined with negative price movement suggests distribution (selling).
─────────────────────────────────────────
4. % From D0 Close
─────────────────────────────────────────
WHAT IT IS:
This measures how far the current price has moved from the closing price on its initial earnings reaction day (D0). The "reaction day" is the first trading day that fully reflects the earnings news - typically the day after an after-hours announcement, or the announcement day itself for pre-market releases.
Calculation: ((Current Price - D0 Close) / D0 Close) × 100
HOW TO INTERPRET:
- Positive values: Stock has gained ground since earnings. The higher the percentage, the stronger the post-earnings drift.
- 0% to +5%: Modest positive drift - earnings were received well but momentum is limited.
- +5% to +15%: Strong drift - buyers continue accumulating.
- > +15%: Exceptional drift - significant institutional interest likely.
- Negative values: Stock has given back gains or extended losses since earnings. May indicate the initial reaction was overdone, or that sentiment is deteriorating.
This metric is most meaningful within the first 5-20 trading days after earnings. Extended drift (maintaining gains over 2+ weeks) is a stronger signal than a quick spike that fades.
─────────────────────────────────────────
5. # Pocket Pivots
─────────────────────────────────────────
WHAT IT IS:
Pocket Pivots are a volume-based pattern developed by Chris Kacher and Gil Morales. They identify days where institutional buyers are likely accumulating shares without causing obvious breakouts.
Calculation: A Pocket Pivot occurs when:
- The stock closes higher than it opened (up day)
- The stock closes higher than the previous day's close
- Today's volume exceeds the highest down-day volume of the prior 10 trading sessions
The screener counts how many Pocket Pivots have occurred since the earnings announcement.
HOW TO INTERPRET:
- 0 Pocket Pivots: No detected institutional accumulation patterns since earnings.
- 1-2 Pocket Pivots: Some institutional buying interest - worth monitoring.
- 3+ Pocket Pivots: Strong accumulation signal - institutions appear to be building positions.
Pocket Pivots are most significant when they occur:
- Immediately following earnings announcements
- Near moving average support (10-day, 21-day, or 50-day)
- On above-average volume
- After a period of price consolidation
Multiple Pocket Pivots in a short period suggest sustained institutional demand, not just a one-day event.
─────────────────────────────────────────
6. ADX/DI (Trend Strength and Direction)
─────────────────────────────────────────
WHAT IT IS:
ADX (Average Directional Index) measures trend strength regardless of direction. DI (Directional Indicator) shows whether the trend is bullish or bearish.
Calculation: ADX uses a 14-period lookback to measure how directional (trending) price movement is. Values range from 0 to 100. The +DI and -DI components compare upward and downward movement.
The screener shows:
- ADX value (trend strength)
- Direction indicator: "+" for bullish (price trending up), "-" for bearish (price trending down)
HOW TO INTERPRET:
- ADX < 20: Weak trend - the stock is moving sideways, choppy. Not ideal for momentum trading.
- ADX 20-25: Trend is emerging - potentially starting a directional move.
- ADX 25-40: Strong trend - clear directional movement. Good for momentum plays.
- ADX > 40: Very strong trend - powerful move in progress, but may be extended.
The direction indicator (+/-) tells you which way:
- "25+" means ADX of 25 with bullish direction (uptrend)
- "25-" means ADX of 25 with bearish direction (downtrend)
For post-earnings plays, ideal setups show ADX rising above 25 with positive direction, confirming the earnings reaction is developing into a sustained trend rather than a one-day spike.
─────────────────────────────────────────
7. Institutional Buying PASS
─────────────────────────────────────────
WHAT IT IS:
This proprietary composite indicator detects patterns consistent with institutional accumulation at three stages after earnings:
EARLY (Days 0-4): Looks for "large block" buying on the earnings reaction day (exceptionally high volume with a close in the upper half of the day's range) combined with follow-through buying on the next day.
MID (Days 5-9): Checks for sustained elevated volume (averaging 1.5x the 20-day average) combined with positive drift and consistent upward price movement (more up days than down days).
LATE (Days 10+): Detects either visible accumulation (positive drift with high volume) OR stealth accumulation (positive drift with unusually LOW volume - suggesting smart money is quietly building positions without attracting attention).
HOW TO INTERPRET:
- Check mark/value of '1': Institutional buying pattern detected. The stock shows characteristics consistent with large players accumulating shares.
- X mark/value of '0': No institutional buying pattern detected. This doesn't mean institutions aren't buying - just that the typical footprints aren't visible.
A passing grade here adds conviction to other bullish signals. Institutions have research teams, information advantages, and long time horizons. When their footprints appear in the data, it often precedes sustained moves.
Important: This is a pattern detection tool, not a guarantee. Always combine with other analysis.
─────────────────────────────────────────
8. Strong ATR Drift PASS
─────────────────────────────────────────
WHAT IT IS:
This measures whether the stock has drifted significantly relative to its own volatility. Instead of asking "did it move 10%?", it asks "did it move more than 1.5 ATRs?"
ATR (Average True Range) measures a stock's typical daily movement. A volatile stock might move 5% daily, while a stable stock might move 0.5%. Using ATR normalizes for this difference.
Calculation:
ATR Drift = (Current Close - D0 Close) / D0 ATR in dollars
The indicator passes when ATR Drift exceeds 1.5 AND at least 5 days have passed since earnings.
HOW TO INTERPRET:
- Check mark/value of '1': The stock has drifted more than 1.5 times its average daily range since earnings - a statistically significant move that suggests genuine momentum, not just noise.
- X mark/value of '0': The drift (if any) is within normal volatility bounds - could just be random fluctuation.
Why wait 5 days? The immediate post-earnings reaction (days 0-2) often includes gap fills and noise. By day 5, if the stock is still extended beyond 1.5 ATRs from the earnings close, it suggests real buying pressure, not just a reflexive gap.
A passing grade here helps filter out stocks that "beat earnings" but haven't actually moved meaningfully. It focuses attention on stocks where the market is voting with real capital.
─────────────────────────────────────────
9. Days Since D0
─────────────────────────────────────────
WHAT IT IS:
Simply counts the number of trading days since the earnings reaction day (D0).
HOW TO INTERPRET:
- Days 0-5 (Green): Fresh earnings - the information is new, institutional repositioning is active, and momentum trades are most potent. This is the "sweet spot" for PEAD strategies.
- Days 6-10 (Neutral): Mid-period - some edge remains but diminishing. Good for adding to winning positions, less ideal for new entries.
- Days 11+ (Red): Extended period - most of the post-earnings drift has typically played out. Higher risk that momentum fades or reverses.
Research shows PEAD effects are strongest in the first 5-10 days after earnings, then decay. Beyond 20-30 days, the informational advantage of the earnings surprise is largely priced in.
Use this to prioritize: focus on stocks with strong signals that are still in the early window, and be more selective about entries as days accumulate.
═══════════════════════════════════════════════════════════════
PUTTING IT ALL TOGETHER
═══════════════════════════════════════════════════════════════
You can use this screener in the chart view or in the Screener.
One combination of the above filters to develop a shortlist of positive drift candidates may be:
- SUE > 2.0 (significant earnings beat)
- SURGE > 1.5 (significant revenue beat)
- Positive % From D0 Close (price confirming the good news)
- Institutional Buying PASS (big players accumulating)
- Strong ATR Drift PASS (statistically significant movement)
- Days Since D0 < 10 (still in the active drift window)
No single indicator is sufficient. The power comes from convergence - when multiple independent measures all point the same direction.
═══════════════════════════════════════════════════════════════
SETTINGS
═══════════════════════════════════════════════════════════════
Key adjustable parameters:
- SUE Method: "Analyst-based" uses consensus estimates; "Time-series" uses year-over-year comparison
- Window Size: Number of quarters used for standardization (default: 8)
- ATR Drift Threshold: Minimum ATR multiple for "strong" classification (default: 1.5)
- Institutional Buying thresholds: Adjustable volume and CLV parameters
═══════════════════════════════════════════════════════════════
DISCLAIMER
═══════════════════════════════════════════════════════════════
This screener is a research tool, not financial advice. Past patterns do not guarantee future results. Always conduct your own due diligence and manage risk appropriately. Post-earnings trading involves significant uncertainty and volatility. The 'SUE' in this indicator does not represent a real person; any similarity to actual Sue's (or Susans for that matter) living or dead is quite frankly ridiculous, not to mention coincidental.
SuperTrend BUY SELL Color//@version=6
indicator("SuperTrend by Cell Color", overlay=true, precision=2)
// --- Parametreler ---
atrPeriod = input.int(10, "ATR Periyodu")
factor = input.float(3.0, "Çarpan")
showTrend = input.bool(true, "Trend Renkli Hücreleri Göster")
// --- ATR Hesaplama ---
atr = ta.atr(atrPeriod)
// --- SuperTrend Hesaplama ---
up = hl2 - factor * atr
dn = hl2 + factor * atr
var float trendUp = na
var float trendDown = na
var int trend = 1 // 1 = bullish, -1 = bearish
trendUp := (close > trendUp ? math.max(up, trendUp ) : up)
trendDown := (close < trendDown ? math.min(dn, trendDown ) : dn)
trend := close > trendDown ? 1 : close < trendUp ? -1 : trend
// --- Renkli Hücreler ---
barcolor(showTrend ? (trend == 1 ? color.new(color.green, 0) : color.new(color.red, 0)) : na)
// --- SuperTrend Çizgileri ---
plot(trend == 1 ? trendUp : na, color=color.green, style=plot.style_line, linewidth=2)
plot(trend == -1 ? trendDown : na, color=color.red, style=plot.style_line, linewidth=2)
Pro trade by Amit// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0) creativecommons.org
//@version=5
import HeWhoMustNotBeNamed/utils/1 as ut
import Trendoscope/ohlc/1 as o
import Trendoscope/LineWrapper/1 as wr
import Trendoscope/ZigzagLite/2 as zg
import Trendoscope/abstractchartpatterns/5 as p
import Trendoscope/basechartpatterns/6 as bp
indicator("Installing Wait....", "Automatic Chart Pattern", overlay = true, max_lines_count=500, max_labels_count=500, max_polylines_count = 100)
openSource = input.source(open, '', inline='cs', group='Source', display = display.none)
highSource = input.source(high, '', inline='cs', group='Source', display = display.none)
lowSource = input.source(low, '', inline='cs', group='Source', display = display.none)
closeSource = input.source(close, '', inline='cs', group='Source', display = display.none, tooltip = 'Source on which the zigzag and pattern calculation is done')
useZigzag1 = input.bool(true, '', group = 'Zigzag', inline='z1', display = display.none)
zigzagLength1 = input.int(8, step=5, minval=1, title='', group='Zigzag', inline='z1', display=display.none)
depth1 = input.int(55, "", step=25, maxval=500, group='Zigzag', inline='z1', display=display.none, tooltip = 'Enable and set Length and Dept of Zigzag 1')
useZigzag2 = input.bool(false, '', group = 'Zigzag', inline='z2', display = display.none)
zigzagLength2 = input.int(13, step=5, minval=1, title='', group='Zigzag', inline='z2', display=display.none)
depth2 = input.int(34, "", step=25, maxval=500, group='Zigzag', inline='z2', display=display.none, tooltip = 'Enable and set Length and Dept of Zigzag 2')
useZigzag3 = input.bool(false, '', group = 'Zigzag', inline='z3', display = display.none)
zigzagLength3 = input.int(21, step=5, minval=1, title='', group='Zigzag', inline='z3', display=display.none)
depth3 = input.int(21, "", step=25, maxval=500, group='Zigzag', inline='z3', display=display.none, tooltip = 'Enable and set Length and Dept of Zigzag 3')
useZigzag4 = input.bool(false, '', group = 'Zigzag', inline='z4', display = display.none)
zigzagLength4 = input.int(34, step=5, minval=1, title='', group='Zigzag', inline='z4', display=display.none)
depth4 = input.int(13, "", step=25, maxval=500, group='Zigzag', inline='z4', display=display.none, tooltip = 'Enable and set Length and Dept of Zigzag 4')
numberOfPivots = input.int(5, "Number of Pivots", , 'Number of pivots used for pattern identification.', group='Scanning', display = display.none)
errorThresold = input.float(20.0, 'Error Threshold', 0.0, 100, 5, 'Error Threshold for trend line validation', group='Scanning', display = display.none)
flatThreshold = input.float(20.0, 'Flat Threshold', 0.0, 30, 5, 'Ratio threshold to identify the slope of trend lines', group='Scanning', display = display.none)
lastPivotDirection = input.string('both', 'Last Pivot Direction', , 'Filter pattern based on the last pivot direction. '+
'This option is useful while backtesting individual patterns. When custom is selected, then the individual pattern last pivot direction setting is used',
group='Scanning', display=display.none)
checkBarRatio = input.bool(true, 'Verify Bar Ratio ', 'Along with checking the price, also verify if the bars are proportionately placed.', group='Scanning', inline = 'br', display = display.none)
barRatioLimit = input.float(0.382, '', group='Scanning', display = display.none, inline='br')
avoidOverlap = input.bool(true, 'Avoid Overlap', group='Scanning', inline='a', display = display.none)
repaint = input.bool(false, 'Repaint', 'Avoid Overlap - Will not consider the pattern if it starts before the end of an existing pattern '+
'Repaint - Uses real time bars to search for patterns. If unselected, then only use confirmed bars.',
group='Scanning', inline='a', display = display.none)
allowChannels = input.bool(true, 'Channels', group='Pattern Groups - Geometric Shapes', display = display.none, inline='g')
allowWedges = input.bool(true, 'Wedge', group='Pattern Groups - Geometric Shapes', display = display.none, inline='g')
allowTriangles = input.bool(true, 'Triangle', group='Pattern Groups - Geometric Shapes', display = display.none, inline='g',
tooltip = 'Channels - Trend Lines are parralel to each other creating equidistance price channels'+
' \t- Ascending Channel \t- Descending Channel \t- Ranging Channel'+
' Wedges - Trend lines are either converging or diverging from each other and both the trend lines are moving in the same direction'+
' \t- Rising Wedge (Expanding) \t- Rising Wedge (Contracting) \t- Falling Wedge (Expanding) \t- Falling Wedge (Contracting)'+
' Triangles - Trend lines are either converging or diverging from each other and both trend lines are moving in different directions'+
' \t- Converging Triangle \t- Diverging Triangle \t- Ascending Triangle (Contracting) \t- Ascending Triangle (Expanding) \t- Descending Triangle(Contracting) \t- Descending Triangle(Expanding)')
allowRisingPatterns = input.bool(true, 'Rising', group='Pattern Groups - Direction', display = display.none, inline = 'd')
allowFallingPatterns = input.bool(true, 'Falling', group='Pattern Groups - Direction', display = display.none, inline = 'd')
allowNonDirectionalPatterns = input.bool(true, 'Flat/Bi-Directional', group='Pattern Groups - Direction', display = display.none, inline = 'd',
tooltip = 'Rising - Either both trend lines are moving up or one trend line is flat and the other one is moving up.'+
' \t- Ascending Channel \t- Rising Wedge (Expanding) \t- Rising Wedge (Contracting) \t- Ascending Triangle (Expanding) \t- Ascending Triangle (Contracting)'+
' Falling - Either both trend lines are moving down or one trend line is flat and the other one is moving down.'+
' \t- Descending Channel \t- Falling Wedge (Expanding) \t- Falling Wedge (Contracting) \t- Descending Triangle (Expanding) \t- Descending Triangle (Contracting)'+
' Flat/Bi-Directional - Trend Lines move in different directions or both flat.'+
' \t- Ranging Channel \t- Converging Triangle \t- Diverging Triangle')
allowExpandingPatterns = input.bool(true, 'Expanding', group='Pattern Groups - Formation Dynamics', display = display.none, inline = 'f')
allowContractingPatterns = input.bool(true, 'Contracting', group='Pattern Groups - Formation Dynamics', display = display.none, inline='f')
allowParallelChannels = input.bool(true, 'Parallel', group = 'Pattern Groups - Formation Dynamics', display = display.none, inline = 'f',
tooltip = 'Expanding - Trend Lines are diverging from each other.'+
' \t- Rising Wedge (Expanding) \t- Falling Wedge (Expanding) \t- Ascending Triangle (Expanding) \t- Descending Triangle (Expanding) \t- Diverging Triangle'+
' Contracting - Trend Lines are converging towards each other.'+
' \t- Rising Wedge (Contracting) \t- Falling Wedge (Contracting) \t- Ascending Triangle (Contracting) \t- Descending Triangle (Contracting) \t- Converging Triangle'+
' Parallel - Trend Lines are almost parallel to each other.'+
' \t- Ascending Channel \t- Descending Channel \t- Ranging Channel')
allowUptrendChannel = input.bool(true, 'Ascending ', group = 'Price Channels', inline='uc', display = display.none)
upTrendChannelLastPivotDirection = input.string('both', '', , inline='uc', group='Price Channels', display = display.none,
tooltip='Enable Ascending Channel and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowDowntrendChannel = input.bool(true, 'Descending', group = 'Price Channels', inline='dc', display = display.none)
downTrendChannelLastPivotDirection = input.string('both', '', , inline='dc', group='Price Channels', display = display.none,
tooltip='Enable Descending Channel and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowRangingChannel = input.bool(true, 'Ranging ', group = 'Price Channels', inline='rc', display = display.none)
rangingChannelLastPivotDirection = input.string('both', '', , inline='rc', group='Price Channels', display = display.none,
tooltip='Enable Ranging Channel and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowRisingWedgeExpanding = input.bool(true, 'Rising ', inline='rwe', group = 'Expanding Wedges', display = display.none)
risingWedgeExpandingLastPivotDirection = input.string('down', '', , inline='rwe', group='Expanding Wedges', display = display.none,
tooltip='Enable Rising Wedge (Expanding) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowFallingWedgeExpanding = input.bool(true, 'Falling ', inline='fwe', group = 'Expanding Wedges', display = display.none)
fallingWedgeExpandingLastPivotDirection = input.string('up', '', , inline='fwe', group='Expanding Wedges', display = display.none,
tooltip='Enable Falling Wedge (Expanding) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowRisingWedgeContracting = input.bool(true, 'Rising ', inline='rwc', group = 'Contracting Wedges', display = display.none)
risingWedgeContractingLastPivotDirection = input.string('down', '', , inline='rwc', group='Contracting Wedges', display = display.none,
tooltip='Enable Rising Wedge (Contracting) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowFallingWedgeContracting = input.bool(true, 'Falling ', inline='fwc', group = 'Contracting Wedges', display = display.none)
fallingWedgeContractingLastPivotDirection = input.string('up', '', , inline='fwc', group='Contracting Wedges', display = display.none,
tooltip='Enable Falling Wedge (Contracting) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowRisingTriangleExpanding = input.bool(true, 'Ascending ', inline='rte', group = 'Expanding Triangles', display = display.none)
risingTriangleExpandingLastPivotDirection = input.string('up', '', , inline='rte', group='Expanding Triangles', display = display.none,
tooltip='Enable Ascending Triangle (Expanding) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowFallingTriangleExpanding = input.bool(true, 'Descending', inline='fte', group = 'Expanding Triangles', display = display.none)
fallingTriangleExpandingLastPivotDirection = input.string('down', '', , inline='fte', group='Expanding Triangles', display = display.none,
tooltip='Enable Descending Triangle (Expanding) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowExpandingTriangle = input.bool(true, 'Diverging ', inline='dt', group = 'Expanding Triangles', display = display.none)
divergineTriangleLastPivotDirection = input.string('both', '', , inline='dt', group='Expanding Triangles', display = display.none,
tooltip='Enable Diverging Triangle and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowRisingTriangleConverging= input.bool(true, 'Ascending ', inline='rtc', group = 'Contracting Triangles', display = display.none)
risingTriangleContractingLastPivotDirection = input.string('up', '', , inline='rtc', group='Contracting Triangles', display = display.none,
tooltip='Enable Ascending Triangle (Contracting) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowFallingTriangleConverging = input.bool(true, 'Descending', inline='ftc', group = 'Contracting Triangles', display = display.none)
fallingTriangleContractingLastPivotDirection = input.string('down', '', , inline='ftc', group='Contracting Triangles', display = display.none,
tooltip='Enable Descending Triangle (Contracting) and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowConvergingTriangle = input.bool(true, 'Converging ', inline='ct', group = 'Contracting Triangles', display = display.none)
convergingTriangleLastPivotDirection = input.string('both', '', , inline='ct', group='Contracting Triangles', display = display.none,
tooltip='Enable Converging Triangle and select the last pivot direction filter. Last pivot direction will only be used if the Generic Last Pivot Direction parameter is set to Custom')
allowedPatterns = array.from(
false,
allowUptrendChannel and allowRisingPatterns and allowParallelChannels and allowChannels,
allowDowntrendChannel and allowFallingPatterns and allowParallelChannels and allowChannels,
allowRangingChannel and allowNonDirectionalPatterns and allowParallelChannels and allowChannels,
allowRisingWedgeExpanding and allowRisingPatterns and allowExpandingPatterns and allowWedges,
allowFallingWedgeExpanding and allowFallingPatterns and allowExpandingPatterns and allowWedges,
allowExpandingTriangle and allowNonDirectionalPatterns and allowExpandingPatterns and allowTriangles,
allowRisingTriangleExpanding and allowRisingPatterns and allowExpandingPatterns and allowTriangles,
allowFallingTriangleExpanding and allowFallingPatterns and allowExpandingPatterns and allowTriangles,
allowRisingWedgeContracting and allowRisingPatterns and allowContractingPatterns and allowWedges,
allowFallingWedgeContracting and allowFallingPatterns and allowContractingPatterns and allowWedges,
allowConvergingTriangle and allowNonDirectionalPatterns and allowContractingPatterns and allowTriangles,
allowFallingTriangleConverging and allowFallingPatterns and allowContractingPatterns and allowTriangles,
allowRisingTriangleConverging and allowRisingPatterns and allowContractingPatterns and allowTriangles
)
getLastPivotDirectionInt(lastPivotDirection)=>lastPivotDirection == 'up'? 1 : lastPivotDirection == 'down'? -1 : 0
allowedLastPivotDirections = array.from(
0,
lastPivotDirection == 'custom'? getLastPivotDirectionInt(upTrendChannelLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(downTrendChannelLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(rangingChannelLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(risingWedgeExpandingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(fallingWedgeExpandingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(divergineTriangleLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(risingTriangleExpandingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(fallingTriangleExpandingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(risingWedgeContractingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(fallingWedgeContractingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(convergingTriangleLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(fallingTriangleContractingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection),
lastPivotDirection == 'custom'? getLastPivotDirectionInt(risingTriangleContractingLastPivotDirection) : getLastPivotDirectionInt(lastPivotDirection)
)
theme = input.string('Dark', title='Theme', options= , group='Display', inline='pc',
tooltip='Chart theme settings. Line and label colors are generted based on the theme settings. If dark theme is selected, '+
'lighter colors are used and if light theme is selected, darker colors are used. '+
'Pattern Line width - to be used for drawing pattern lines', display=display.none)
patternLineWidth = input.int(2, '', minval=1, inline='pc', group = 'Display', display = display.none)
showPatternLabel = input.bool(true, 'Pattern Label', inline='pl1', group = 'Display', display = display.none)
patternLabelSize = input.string(size.normal, '', , inline='pl1', group = 'Display', display = display.none,
tooltip = 'Option to display Pattern Label and select the size')
showPivotLabels = input.bool(true, 'Pivot Labels ', inline='pl2', group = 'Display', display = display.none, tooltip = 'Option to display pivot labels and select the size')
pivotLabelSize = input.string(size.normal, '', , inline='pl2', group = 'Display', display = display.none)
showZigzag = input.bool(true, 'Zigzag', inline='z', group = 'Display', display = display.none)
zigzagColor = input.color(color.blue, '', inline='z', group = 'Display', display = display.none, tooltip = 'Option to display zigzag within pattern and the default zigzag line color')
deleteOldPatterns = input.bool(true, 'Max Patterns', inline='do', group = 'Display', display = display.none)
maxPatterns = input.int(20, '', minval=1, step=5, inline = 'do', group = 'Display', display = display.none, tooltip = 'If selected, only last N patterns will be preserved on the chart.')
errorRatio = errorThresold/100
flatRatio = flatThreshold/100
showLabel = true
offset = 0
type Scanner
bool enabled
string ticker
string timeframe
p.ScanProperties sProperties
p.DrawingProperties dProperties
array patterns
array zigzags
method getZigzagAndPattern(Scanner this, int length, int depth, array ohlcArray, int offset=0)=>
var zg.Zigzag zigzag = zg.Zigzag.new(length, depth, 0)
var map lastDBar = map.new()
zigzag.calculate(array.from(highSource, lowSource))
var validPatterns = 0
mlzigzag = zigzag
if(zigzag.flags.newPivot)
while(mlzigzag.zigzagPivots.size() >= 6+offset)
lastBar = mlzigzag.zigzagPivots.first().point.index
lastDir = int(math.sign(mlzigzag.zigzagPivots.first().dir))
if(lastDBar.contains(mlzigzag.level)? lastDBar.get(mlzigzag.level) < lastBar : true)
lastDBar.put(mlzigzag.level, lastBar)
= mlzigzag.find(this.sProperties, this.dProperties, this.patterns, ohlcArray)
if(valid)
validPatterns+=1
currentPattern.draw()
this.patterns.push(currentPattern, maxPatterns)
alert('New Pattern Alert')
else
break
mlzigzag := mlzigzag.nextlevel()
true
method scan(Scanner this)=>
var array ohlcArray = array.new()
var array patterns = array.new()
ohlcArray.push(o.OHLC.new(openSource, highSource, lowSource, closeSource))
if(useZigzag1)
this.getZigzagAndPattern(zigzagLength1, depth1, ohlcArray)
if(useZigzag2)
this.getZigzagAndPattern(zigzagLength2, depth2, ohlcArray)
if(useZigzag3)
this.getZigzagAndPattern(zigzagLength3, depth3, ohlcArray)
if(useZigzag4)
this.getZigzagAndPattern(zigzagLength4, depth4, ohlcArray)
var scanner = Scanner.new(true, "", "",
p.ScanProperties.new(offset, numberOfPivots, errorRatio, flatRatio, checkBarRatio, barRatioLimit, avoidOverlap, allowedPatterns=allowedPatterns, allowedLastPivotDirections= allowedLastPivotDirections, themeColors = ut.getColors(theme)),
p.DrawingProperties.new(patternLineWidth, showZigzag, 1, zigzagColor, showPatternLabel, patternLabelSize, showPivotLabels, pivotLabelSize, deleteOnPop = deleteOldPatterns),
array.new())
if(barstate.isconfirmed or repaint)
scanner.scan()
FOMC Sweep Reaction AP Capital – FOMC Sweep Reaction v1.0
AP Capital – FOMC Sweep Reaction v1.0 is a news-reaction and liquidity-based trading tool designed specifically to track and trade FOMC volatility on Gold (XAUUSD) and other highly reactive instruments.
The indicator focuses on liquidity sweeps, structure breaks, and EMA reclaims that commonly occur around Federal Reserve interest-rate decisions and Powell speeches, helping traders identify high-probability reversal or continuation moves after the initial spike.
🔍 What This Indicator Detects
This tool highlights the most repeatable FOMC behaviours observed across multiple months of broker data:
• Sweeps of previous day’s high or low
• Stop-hunt wicks into liquidity pools
• EMA13 reclaim after the news spike
• Break and close beyond short-term structure
• Momentum shift following volatility exhaustion
The goal is not to predict the news, but to react to confirmed price behaviour after liquidity has been taken.
📌 Core Features
• FOMC Sweep Detection
Identifies aggressive wicks into prior highs/lows during news volatility
• EMA Reclaim Confirmation
Uses EMA13 to validate momentum shift after the sweep
• Market Structure Awareness
Filters reactions that fail to break structure to avoid false reversals
• Session-Aligned Logic
Designed around London → NY → FOMC release timing
• Clean Visuals
Minimal chart clutter for fast decision-making during volatile conditions
🧠 How to Use
Wait for FOMC release / Powell speech
Allow price to sweep previous liquidity (PDH / PDL / local extremes)
Observe reclaim of EMA13
Enter only after structure confirmation
Manage trade using EMA trailing or structure-based exits
⚠️ This is a reaction system, not a prediction tool.
📊 Best Use Cases
• XAUUSD (Gold)
• NASDAQ / US indices
• High-impact macro news events
• 5-min to 15-min timeframes
⚠️ Important Notes
• News volatility is extreme — risk management is essential
• Not designed for low-volatility or ranging markets
• Best combined with a clear trading plan and strict risk rules
📎 Disclaimer
This indicator is for educational purposes only and does not constitute financial advice. Trading during high-impact news events involves significant risk.
Relative Strength IndexRSI for indian market buy low and sell high.
rsi 3 low belo 15 buy and rsi high above 85 sell
Daily Vertical Linesadjust the time hour and minute base on ur timeframe.
please note that for asian beijing time you will need to deduct 1 hour
EMA Cross Color Buy/Sell//@version=5
indicator("EMA Color Cross + Trend Arrows V6", overlay=true, max_bars_back=500)
// === Inputs ===
fastLen = input.int(9, "Hızlı EMA")
slowLen = input.int(21, "Yavaş EMA")
// === EMA Hesapları ===
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
// Trend Yönü
trendUp = emaFast > emaSlow
trendDown = emaFast < emaSlow
// === Çizgi Renkleri ===
lineColor = trendUp ? color.new(color.green, 0) : color.new(color.red, 0)
// === EMA Çizgileri (agresif kalın) ===
plot(emaFast, "Hızlı EMA", lineColor, 4)
plot(emaSlow, "Yavaş EMA", color.new(color.gray, 70), 2)
// === Ok Sinyalleri ===
buySignal = ta.crossover(emaFast, emaSlow)
sellSignal = ta.crossunder(emaFast, emaSlow)
// Büyük Oklar
plotshape(buySignal, title="AL", style=shape.triangleup, color=color.green, size=size.large, location=location.belowbar)
plotshape(sellSignal, title="SAT", style=shape.triangledown, color=color.red, size=size.large, location=location.abovebar)
// === Trend Bar Color ===
barcolor(trendUp ? color.green : color.red)
Renkli EMA Crossover//@version=5
indicator("Renkli EMA Crossover", overlay=true)
// EMA periyotları
fastLength = input.int(9, "Hızlı EMA")
slowLength = input.int(21, "Yavaş EMA")
// EMA hesaplama
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// EMA renkleri
fastColor = fastEMA > fastEMA ? color.green : color.red
slowColor = slowEMA > slowEMA ? color.blue : color.orange
// EMA çizgileri (agresif kalın)
plot(fastEMA, color=fastColor, linewidth=3, title="Hızlı EMA")
plot(slowEMA, color=slowColor, linewidth=3, title="Yavaş EMA")
// Kesişimler
bullCross = ta.crossover(fastEMA, slowEMA)
bearCross = ta.crossunder(fastEMA, slowEMA)
// Oklarla sinyal gösterimi
plotshape(bullCross, title="Al Sinyali", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.large)
plotshape(bearCross, title="Sat Sinyali", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.large)
VR Volume Ratio + Divergence (Pro)成交量比率 (Volume Ratio, VR) 是一項通過分析股價上漲與下跌日的成交量,來研判市場資金氣氛的技術指標。本腳本基於傳統 VR 公式進行了優化,增加了**「趨勢變色」與「自動背離偵測」**功能,幫助交易者更精準地捕捉量價轉折點。
Introduction
Volume Ratio (VR) is a technical indicator that measures the strength of a trend by comparing the volume on up-days versus down-days. This script enhances the classic VR formula with "Trend Color Coding" and "Auto-Divergence Detection", helping traders identify volume-price reversals more accurately.
核心功能與參數
公式原理: VR = (Qu + Qf/2) / (Qd + Qf/2) * 100
Qu: 上漲日成交量 (Up volume)
Qd: 下跌日成交量 (Down volume)
Qf: 平盤日成交量 (Flat volume)
參數 (Length):預設為 26 日,這是市場公認最有效的短中線參數。
關鍵水位線 (Key Levels):
< 40% (底部區):量縮極致,市場情緒冰點,常對應股價底部,適合尋找買點。
100% (中軸):多空分界線。
> 260% (多頭警戒):進入強勢多頭行情,但需注意過熱。
> 450% (頭部區):成交量過大,市場情緒亢奮,通常為頭部訊號。
視覺優化 (Visuals):
紅漲綠跌:當 VR 數值大於前一日顯示為紅色(動能增強);小於前一日顯示為綠色(動能退潮)。
背離訊號 (Divergence):自動標記量價背離。
▲ 底背離 (Bullish):股價創新低,但 VR 指標墊高(主力吸籌)。
▼ 頂背離 (Bearish):股價創新高,但 VR 指標走弱(買氣衰竭)。
Features & Settings
Formula Logic: Calculated as VR = (Qu + Qf/2) / (Qd + Qf/2) * 100.
Default Length: 26, widely regarded as the optimal setting for short-to-medium term analysis.
Key Zones:
< 40% (Oversold/Bottom): Extreme low volume, often indicating a market bottom and potential buying opportunity.
100% (Neutral): The balance point between bulls and bears.
> 260% (Bullish Zone): Strong uptrend, volume is expanding.
> 450% (Overbought/Top): Extreme high volume, often indicating a market top and potential reversal.
Visual Enhancements:
Color Coding: Line turns Red when VR rises (Momentum Up) and Green when VR falls (Momentum Down).
Divergence Signals: Automatically marks divergence points on the chart.
▲ Bullish Divergence: Price makes a lower low, but VR makes a higher low (Accumulation).
▼ Bearish Divergence: Price makes a higher high, but VR makes a lower high (Distribution).
應用策略建議
抄底策略:當 VR 跌破 40% 後,指標線由綠翻紅,或出現「▲底背離」訊號時,為極佳的波段進場點。
逃頂策略:當 VR 衝過 450% 進入高檔區,一旦指標線由紅翻綠,或出現「▼頂背離」訊號時,建議分批獲利了結。
Strategy Guide
Bottom Fishing: Look for entries when VR drops below 40% and turns red, or when a "▲ Bullish Divergence" label appears.
Taking Profit: Consider selling when VR exceeds 450% and turns green, or when a "▼ Bearish Divergence" label appears.
Disclaimer: This tool is for informational purposes only and does not constitute financial advice. / 本腳本僅供參考,不構成投資建議。






















