EMA Regime (9/20/50/100/200) — Stacked with 200 FilterEMA Regime (9/20/50/100/200) — Stacked Long/Short Box
Plots the 9, 20, 50, 100, and 200 EMAs on the chart.
Checks if price is above or below each EMA and whether the EMAs are stacked in order.
LONG signal: price above all selected EMAs and EMAs stacked 9 > 20 > 50 > 100 >(> 200 if strict mode on).
SHORT signal: price below all selected EMAs and EMAs stacked 9 < 20 < 50 < 100 (< 200 if strict mode on).
Shows a two-row table (LONGS / SHORTS) so you can quickly see which EMAs are aligned.
Optionally colors candles green/red when a full long/short regime is active.
Can show labels when a new LONG or SHORT condition appears.
Has alerts you can use for automated notifications when the regime flips.
“Use 200 EMA in the stack” lets you choose ultra-strict mode (9>20>50>100>200) or lighter mode (9>20>50>100 but price & 9 above 200).
Indikator dan strategi
EMA Separation (LFZ Scalps) v6 — Early TriggerPlots the percentage distance between a fast and a slow EMA (default 9 & 21) to gauge trend strength and filter out choppy London Flow Zone breakouts.
• Gray – EMAs nearly flat (low momentum, avoid trades)
• Orange – early trend building
• Green/Red – strong directional momentum
Useful for day-traders: wait for the gap to widen beyond your chosen threshold (e.g., 0.25 %) before entering a breakout. Adjustable EMA lengths and alert when the separation exceeds your “strong trend” level.
Double Top/Bottom Screener - Today Only V4//@version=6
indicator("Double Top/Bottom Screener - Today Only", overlay=true, max_lines_count=500)
// Inputs
leftBars = input.int(5, "Left Bars")
rightBars = input.int(5, "Right Bars")
tolerance = input.float(0.02, "Max Difference (e.g., 0.02 for 2 cents)", step=0.01)
atrLength = input.int(14, "ATR Length for Normalized Distance", minval=1)
requiredPeaks = input.int(3, "Required Identical Peaks", minval=2, maxval=5)
// Declarations of persistent variables and arrays
var array resistanceLevels = array.new(0)
var array resistanceCounts = array.new(0)
var array supportLevels = array.new(0)
var array supportCounts = array.new(0)
var array resLines = array.new(0)
var array supLines = array.new(0)
var bool hasDoubleTop = false
var bool hasDoubleBottom = false
var float doubleTopLevel = na
var float doubleBottomLevel = na
var int todayStart = na
var float nearestDoubleLevel = na // Explicitly declared as na by default
// Step 1: Identify Swing Highs/Lows
swingHigh = ta.pivothigh(high, leftBars, rightBars)
swingLow = ta.pivotlow(low, leftBars, rightBars)
// Today's premarket start (04:00 AM ET)
todayStart := timestamp(syminfo.timezone, year, month, dayofmonth, 4, 0, 0)
// Clear arrays and delete lines on the first bar or new day
if barstate.isfirst or (dayofmonth != dayofmonth and time >= todayStart)
// Delete all existing lines only if arrays are not empty
if array.size(resLines) > 0
for i = array.size(resLines) - 1 to 0
line.delete(array.get(resLines, i))
if array.size(supLines) > 0
for i = array.size(supLines) - 1 to 0
line.delete(array.get(supLines, i))
// Clear arrays
array.clear(resistanceLevels)
array.clear(supportLevels)
array.clear(resistanceCounts)
array.clear(supportCounts)
array.clear(resLines)
array.clear(supLines)
// Reset flags and levels
hasDoubleTop := false
hasDoubleBottom := false
doubleTopLevel := na
doubleBottomLevel := na
nearestDoubleLevel := na // Ensure reset on new day
// Add new swings only if today and after premarket
if not na(swingHigh) and time >= todayStart and dayofmonth == dayofmonth
bool isEqualHigh = false
int peakIndex = -1
float prevLevel = na
if array.size(resistanceLevels) > 0
for i = 0 to array.size(resistanceLevels) - 1
prevLevel := array.get(resistanceLevels, i)
if math.abs(swingHigh - prevLevel) <= tolerance
isEqualHigh := true
peakIndex := i
break
if isEqualHigh and peakIndex >= 0
array.set(resistanceCounts, peakIndex, array.get(resistanceCounts, peakIndex) + 1)
if array.get(resistanceCounts, peakIndex) == requiredPeaks
hasDoubleTop := true
doubleTopLevel := prevLevel
else
array.push(resistanceLevels, swingHigh)
array.push(resistanceCounts, 1)
line newResLine = line.new(bar_index - rightBars, swingHigh, bar_index, swingHigh, color=color.red, width=2, extend=extend.none)
array.push(resLines, newResLine)
if not na(swingLow) and time >= todayStart and dayofmonth == dayofmonth
bool isEqualLow = false
int peakIndex = -1
float prevLevel = na
if array.size(supportLevels) > 0
for i = 0 to array.size(supportLevels) - 1
prevLevel := array.get(supportLevels, i)
if math.abs(swingLow - prevLevel) <= tolerance
isEqualLow := true
peakIndex := i
break
if isEqualLow and peakIndex >= 0
array.set(supportCounts, peakIndex, array.get(supportCounts, peakIndex) + 1)
if array.get(supportCounts, peakIndex) == requiredPeaks
hasDoubleBottom := true
doubleBottomLevel := prevLevel
else
array.push(supportLevels, swingLow)
array.push(supportCounts, 1)
line newSupLine = line.new(bar_index - rightBars, swingLow, bar_index, swingLow, color=color.green, width=2, extend=extend.none)
array.push(supLines, newSupLine)
// Monitor and remove broken levels/lines; reset pattern if the equal level breaks
if array.size(resistanceLevels) > 0
for i = array.size(resistanceLevels) - 1 to 0
float level = array.get(resistanceLevels, i)
if close > level
line.delete(array.get(resLines, i))
array.remove(resLines, i)
array.remove(resistanceLevels, i)
array.remove(resistanceCounts, i)
if level == doubleTopLevel
hasDoubleTop := false
doubleTopLevel := na
nearestDoubleLevel := na // Reset if level breaks
if array.size(supportLevels) > 0
for i = array.size(supportLevels) - 1 to 0
float level = array.get(supportLevels, i)
if close < level
line.delete(array.get(supLines, i))
array.remove(supLines, i)
array.remove(supportLevels, i)
array.remove(supportCounts, i)
if level == doubleBottomLevel
hasDoubleBottom := false
doubleBottomLevel := na
nearestDoubleLevel := na // Reset if level breaks
// Limit arrays (after removals)
if array.size(resistanceLevels) > 10
line oldLine = array.shift(resLines)
line.delete(oldLine)
array.shift(resistanceLevels)
array.shift(resistanceCounts)
if array.size(supportLevels) > 10
line oldLine = array.shift(supLines)
line.delete(oldLine)
array.shift(supportLevels)
array.shift(supportCounts)
// Pattern Signal: 1 only if the exact required number of peaks is met
patternSignal = (hasDoubleTop or hasDoubleBottom) ? 1 : 0
// New: Nearest Double Level Price - Only update if pattern is active today and on current day
if time >= todayStart and dayofmonth == dayofmonth // Restrict to today
if patternSignal == 1 // Only set if pattern is active
if hasDoubleTop and not na(doubleTopLevel)
nearestDoubleLevel := doubleTopLevel
if hasDoubleBottom and not na(doubleBottomLevel)
nearestDoubleLevel := na(nearestDoubleLevel) ? doubleBottomLevel : (math.abs(close - doubleBottomLevel) < math.abs(close - nearestDoubleLevel) ? doubleBottomLevel : nearestDoubleLevel)
else
nearestDoubleLevel := na // Reset to na if no pattern today
else
nearestDoubleLevel := na // Reset for all historical bars
// New: Distance to Nearest Level (using ATR for normalization)
var float atr = ta.atr(atrLength)
var float distanceNormalizedATR = na
if not na(nearestDoubleLevel) and not na(atr) and atr > 0
distanceNormalizedATR := math.abs(close - nearestDoubleLevel) / atr
// Outputs
plot(patternSignal, title="Pattern Signal", color=patternSignal == 1 ? color.purple : na, style=plot.style_circles)
plot(nearestDoubleLevel, title="Nearest Double Level Price", color=color.orange)
plot(distanceNormalizedATR, title="Normalized Distance (ATR)", color=color.green)
bgcolor(patternSignal == 1 ? color.new(color.purple, 80) : na)
if patternSignal == 1 and barstate.isconfirmed
alert("Double Pattern detected on " + syminfo.ticker + " at " + str.tostring(close), alert.freq_once_per_bar_close)
if barstate.islast
var table infoTable = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 50))
table.cell(infoTable, 0, 0, "Pattern: " + str.tostring(patternSignal), bgcolor=patternSignal == 1 ? color.purple : color.gray)
table.cell(infoTable, 0, 1, "Level: " + str.tostring(nearestDoubleLevel, "#.##"), bgcolor=color.orange)
table.cell(infoTable, 0, 2, "ATR Dist: " + str.tostring(distanceNormalizedATR, "#.##"), bgcolor=color.green)
QTheoryQTheory –
This indicator is built on Quarterly Theory (developed by Daye)
🔹 Quarterly Theory
Markets often unfold in repeating quarterly cycles (Q1–Q4) across multiple timeframes — yearly, monthly, weekly, daily, 90-minute, and even micro cycles. By dividing price action into these quarters, traders can better anticipate structural shifts, accumulation/distribution phases, and liquidity runs.
🔹 Sequential SMT (SSMT)
Sequential SMT extends standard SMT (Smart Money Technique) by comparing multiple assets (such as FX majors) to identify divergences across quarters.
🔹 Features of QTheory
Automatic detection of quarterly cycles across multiple timeframes.
Visual cycle boxes & customizable dividers.
Integrated SSMT signals with divergence line visualization.
DFR (Defining Range) with Fibonacci levels.
Support for up to 5 comparison assets, with inversion options.
Auto-cycle selection for seamless multi-timeframe adaptation.
Extensive customization for colors, opacity, and signal display.
🔹 How it works
QTheory divides price data into consistent “quarters” across multiple timeframes. Within each cycle, it tracks highs, lows, and divergences, then overlays this information as boxes, dividers, and optional signals on your chart. Traders can use these visual cues to better align entries and exits with institutional market behavior patterns.
🔹 How to use it
Enable the desired cycle type (e.g., weekly, daily, 90-minute) from the settings.
Toggle boxes, dividers, and signals depending on your trading style.
Use SSMT divergences and DFR Fibs to anticipate a reversal
Compare against other assets (e.g., DXY or correlated pairs) to refine confluence.
⚠️ Disclaimer: This tool is for educational purposes only. It does not constitute financial advice. Always perform your own analysis and risk management.
Attribution: Portions of this script extend the quarter-cycle logic from TFlab’s “Quarterly Theory ICT 04”, released under the Mozilla Public License 2.0
TW All in OneIts a overlap strategy, giving signals for buy and sell.
Mostly suitable for Bank Nifty. Nifty and crude oil
MYM Edge Booster MYM Long Trading Assistant - ATR-Based Edge Booster
Clean, simple indicator that tells you when MYM long setups meet high-probability criteria. No complicated charts - just clear numbers and signals.
• ATR Targets & Stops (whole numbers)
• Quality Score (0-3 stars)
• Green Circle when conditions perfect
• Warnings for choppy/high volatility
• ES/NQ sector confirmation
Eliminates guesswork. Trade when the green circle appears.
Capitulation DayThe idea is that when US indexes are >10% below their 50,100,200sma it is a capitulation day.
Inversion Fair Value Gap Signals [AlgoAlpha]🟠 OVERVIEW
This script is a custom signal tool called Inversion Fair Value Gap Signals (IFVG) , designed to detect, track, and visualize fair value gaps (FVGs) and their inversions directly on price charts. It identifies bullish and bearish imbalances, monitors when these zones are mitigated or rejected, and extends them until resolution or expiration. What makes this script original is the inclusion of inversion logic—when a gap is filled, the area flips into an opposite "inversion fair value gap," creating potential reversal or continuation zones that give traders additional context beyond classic FVG analysis.
🟠 CONCEPTS
The script builds on the Smart Money Concepts (SMC) principle of fair value gaps, where inefficiencies form when price moves too quickly in one direction. Detection requires a three-bar sequence: a strong up or down move that leaves untraded price between bar highs and lows. To refine reliability, the script adds an ATR-based size filter and prevents overlap between zones. Once created, gaps are tracked in arrays until mitigation (price closing back into the gap), expiration, or transformation into an inversion zone. Inversions act as polarity flips, where bullish gaps become bearish resistance and bearish gaps become bullish support. Lower-timeframe volume data is also displayed inside zones to highlight whether buying or selling pressure dominated during gap creation.
🟠 FEATURES
Automatic detection of bullish and bearish FVGs with ATR-based thresholding.
Inversion logic: mitigated gaps flip into opposite-colored IFVG zones.
Volume text overlay inside each zone showing up vs down volume.
Visual markers (△/▽ for FVG, ▲/▼ for IFVG) when price exits a zone without mitigation.
🟠 USAGE
Apply the indicator to any chart and enable/disable bullish or bearish FVG detection depending on your focus. Use the colored gap zones as areas of interest: bullish gaps suggest possible continuation to the upside until mitigated, while bearish gaps suggest continuation down. When a gap flips into an inversion zone, treat it as potential support/resistance—bullish IFVGs below price may act as demand, while bearish IFVGs above price may act as supply. Watch the embedded up/down volume data to gauge the strength of participants during gap formation. Use the △/▽ and ▲/▼ markers to spot when price rejects gaps or inversions without filling them, which can indicate strong trending momentum. For practical use, combine alerts with your trade plan to track when new gaps form, when old ones are resolved, or when key zones flip into inversions, helping you align entries, targets, or reversals with institutional order flow logic.
MajorTop DeltaVol ma5-52wThe idea is to identify major tops on the weekly when both are above 0 at the same time; to look just for mkt tops.
Major tops use to drag on for a little with increasing volatility before crashing.
green is 5-52sma
fuchsia 3-9sma
Sma are on the candle's range ratio on the close.
Adjustable Day MarkersPlaces vertical dashed lines for each new day at midnight in light grey, so you have a visual reference on the chart rather than having to look at the time at the bottom.
To adjust it to your time zone: go to settings , then give a - or + value for " Timezone Offset ".
I'm at GMT+2, so I set it to 2 .
If you rather have the line appear at the beginning of your trading day, then that's also possible. Say I start every day at 8 AM, I would have to set it to +10 (since I'm currently GMT +2).
Oversold & Overbought Signal with RSISimple RSI overbought/oversold signals. Signals overbought when RSI > 80 and oversold when RSI < 30.
ORB 15m + MAs (v4.1)Session ORB Live Pro — Pre-Market Boxes & MA Suite (v4.1)
What it is
A precision Opening Range Breakout (ORB) tool that anchors every session to one specific 15-minute candle—then projects that same high/low onto lower timeframes so your 1m/5m levels always match the source 15m bar. Perfect for scalpers who want session structure without drift.
What it draws
Asia, Pre-London, London, Pre-New York, New York session boxes.
On 15m: only the high/low of the first 15-minute bar of each window (optionally persists for extra bars).
On 5m: mirrors the same 15m range, visible up to 10 bars.
On 1m: mirrors the same 15m range, visible up to 15 bars.
Levels update live while the 15m candle is forming, then lock.
Fully editable windows (easy UX)
Change session times with TradingView’s native input.session fields using the familiar format HHMM-HHMM:1234567. You can tweak each window independently:
Asia
Pre-London
London
Pre-New York
New York
Multi-TF logic (no guesswork)
Designed to show only on 1m, 5m, 15m (by default).
15m = ground truth. Lower timeframes never “recalculate a different range”—they mirror the 15m bar for that session, exactly.
Alerts
Optional breakout alerts when price closes above/below the session range.
Clean visuals
Per-session color controls (box + lines). Boxes extend only for the configured number of bars per timeframe, keeping charts uncluttered.
Built-in MA suite
SMA 50 and RMA 200.
Three extra MAs (SMA/EMA/RMA/WMA/HMA) with selectable color, width, and style (line, stepline, circles).
Why traders like it
Consistency: Lower-TF ranges always match the 15m source bar.
Speed: You see structure immediately—no waiting for N bars.
Control: Edit session times directly; tune how long boxes stay on chart per TF.
Clarity: Minimal, purposeful plotting with alerts when it matters.
Quick start
Set your session times via the five input.session fields.
Choose how long boxes persist on 1m/5m/15m.
Enable alerts if you want instant breakout notifications.
(Optional) Configure the MA suite for trend/bias context.
Best for
Intraday traders and scalpers who rely on repeatable session behavior and demand exact cross-TF alignment of ORB levels.
Gemini RSI Divergence SignalsLolLol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
Lol
HWEMA + Ceiling/Channel Combo testThis is a test script. Was developed as a decaying ATR smoothed with HMA
Bullish_1Hour_entry_Indicator with Alertsthis indicator consioders entry basis of EMAs convergence , VWAP & Multitime frame analysis
Candle Range % MarkerHigh/Low Percentage marker. For a Green Candle its low to High. For a Red its from High to Low of the Candle
Bullish_1Hour_entry_Indicator with AlertsIt uses EMAs convergence & VWAP confirmation along with multi Time frame analysis
RSI: alternative derivationMost traders accept the Relative Strength Index (RSI) as a standard tool for measuring momentum. But what if RSI is actually a position indicator?
This script introduces an alternative derivation of RSI, offering a fresh perspective on its true nature. Instead of relying on the traditional calculation of average gains and losses, this approach directly considers the price's position relative to its equilibrium (moving average), adjusted for volatility.
While the final value remains identical to the standard RSI, this alternative derivation offers a completely new understanding of the indicator.
Key components:
Price (Close)
Utilizes the closing price, consistent with the original RSI formula.
normalization factor
Transforms raw calculations into a fixed range between -1 and +1.
normalization_factor = 1 / (Length - 1)
EMA of Price
Applies Wilder’s Exponential Moving Average (EMA) to the price, serving as the anchor point for measuring price position, similar to the traditional RSI formula.
myEMA = ta.rma(close,Length)
EMA of close-to-close absolute changes (unit of volatility)
Adjusts for market differences by applying a Wilder’s EMA to absolute price changes (volatility), ensuring consistency across various assets.
CC_vol = ta.rma(math.abs(close - close ),Length)
Calculation Breakdown
DISTANCE:
Calculate the difference between the closing price and its Wilder's EMA. A positive value indicates the price is above the EMA; a negative value indicates it is below.
distance = close - myEMA
STANDARDIZED DISTANCE
Divide the distance by the unit of volatility to standardize the measurement across different markets.
S_distance = distance / CC_vol
NORMALIZED DISTANCE
Normalize the standardized distance using the normalization factor (n-1) to adjust for the lookback period.
N_distance = S_distance * normalization_factor
RSI
Finally, scale the normalized distance to fit within the standard RSI range of 0 to 100.
myRSI = 50 * (1 + N_distance)
The final equation:
RSI = 50 ×
What This Means for RSI
Same RSI Values, Different Interpretation
The standard RSI formula may obscure its true measurement, whereas this approach offers clarity.
RSI primarily indicates the price's position relative to its equilibrium, rather than directly measuring momentum.
RSI can still be used to analyze momentum, but in a more intuitive and well-informed way.
KD The ScalperWe have to take the trade when all three EMAs are pointing in the same direction (no criss-cross, no up/down, sideways). All 3 EMAs should be cleanly separated from each other with strong spacing between them; they are not tangled, sideways, or messy. This is our first filter before entering the trade. Are the EMAs stacked neatly, and is the price outside of the 25 EMA? If price pulls back and closes near or below the 25 or 50 EMA and breaks the 100 EMA, we don't trade. Use the 100 EMA as a safety net and refrain from trading if the price touches or falls below the 100 EMA.
1. Confirm the trend- All 3 EMAs must align, and they must spread
2. Watch price pull back to the 25th or the 50 EMA
3. Wait for the price to bounce - And re-approach the 25 EMA
Why is this powerful?
Removes 80% of the low-probability Trades
It keeps you out of choppy markets
Avoids Reversal Traps
Anchors us to momentum
We take the entry when the price moves up again and touches the 25 EMA from below, and then when it breaks above the 25 EMA, or even better, when a lovely green bullish candle forms. A bullish candle indicates good momentum. When a bullish candle closes in green, it means the momentum has increased significantly. This is when we enter a long trade, with the stop-loss just below the 50 EMA and the profit target being 1.5 times the stop-loss.
The same rule applies to the bearish trade.
KDJ Divergence Indicator(Regular & Hidden)📌 中文介绍
KDJ 背离指标(副图版,支持 Regular & Hidden)
这是一个基于 KDJ 指标 的背离检测工具,可以在副图中直观显示 Regular 背离(顶背离/底背离) 和 Hidden 背离(隐藏顶/隐藏底)。
功能特点:
可选计算基线:支持以 J 值 或 K 值 作为背离判定依据。
多种背离类型:
Regular Bullish(底背离):价格创新低,但指标不创新低 → 可能反弹。
Regular Bearish(顶背离):价格创新高,但指标不创新高 → 可能回落。
Hidden Bullish(隐藏底背离):价格不创新低,但指标创新低 → 可能延续上涨。
Hidden Bearish(隐藏顶背离):价格不创新高,但指标创新高 → 可能延续下跌。
连线显示:在副图用线条连接前后两个背离点,帮助更直观地发现趋势变化。
自定义选项:
可选择是否显示 Regular / Hidden 背离。
可调整回溯范围(左侧/右侧/最大最小)。
可自定义颜色和信号样式。
报警提醒:背离出现时会触发报警。
适合:
波段交易者寻找趋势反转。
短线交易者捕捉关键拐点。
技术分析结合 KDJ 的交易策略。
📌 English Introduction
KDJ Divergence Indicator (Sub-Chart, Regular & Hidden Supported)
This is a KDJ-based divergence detection tool, plotted in a sub-window, that highlights Regular Divergences (Bullish/Bearish) and Hidden Divergences (Hidden Bullish/Hidden Bearish).
Key Features:
Selectable Oscillator Line: Choose between J or K line as the basis for divergence detection.
Divergence Types:
Regular Bullish: Price makes a lower low, but oscillator makes a higher low → potential rebound.
Regular Bearish: Price makes a higher high, but oscillator makes a lower high → potential drop.
Hidden Bullish: Price holds higher low, but oscillator makes a lower low → potential trend continuation upward.
Hidden Bearish: Price holds lower high, but oscillator makes a higher high → potential trend continuation downward.
Line Connections: Draws connecting lines between divergence points for better visual clarity.
Customizable Settings:
Enable/disable Regular & Hidden divergences.
Adjustable left/right lookback and range filters.
Custom colors and shapes for signals.
Alert Ready: Alerts trigger when divergences are detected.
Best for:
Swing traders spotting trend reversals.
Short-term traders catching turning points.
Technical analysts using KDJ-based strategies.
InsideBarPlus - Alpha GroupInside bar is a great strategy for prop firm evaluations. Since it's a short scalp.
In this version, the target and stops are ATR based.
The reason is that the volatility measurement on that specific moment, makes more sense to measure SL or TP sizing.
I hope you all enjoy. (Backtest it considering slippage, spreads and commissions), on higher timeframes the performance is better, since the spread size "becomes tiny".