OB + EMA100/200 + FVG [INTRADING]A powerful all-in-one tool for Smart Money Concepts (SMC) and price action traders, combining three core market structure elements into a clean, customizable visual framework:
Order Blocks (OB): Automatically detects bullish and bearish order blocks after fractal breaks (3-bar or 5-bar). Choose to display blocks based on candle body or wick, and optionally filter only those followed by a Fair Value Gap.
Fair Value Gaps (FVG): Highlights imbalance zones as semi-transparent rectangles with percentage-based filtering. Gaps are automatically removed once price returns to fill them.
EMA 100 & EMA 200: Built-in trend filters (yellow and blue) to help align trades with the broader market direction.
🔹 Fully customizable: adjust line style, color, thickness, and length
🔹 Optional fractal markers for clearer structure identification
🔹 Auto-cleanup: OB lines and FVG zones disappear after being filled
🔹 Watermark-free chart space with subtle author credit
Perfect for traders using ICT, SMC, or institutional order flow strategies who need precise, uncluttered visuals to spot high-probability reversal and continuation zones.
Author: @Denis_IT_Trade
ビル・ウィリアムズのインジケーター
ADX Buy/Sell Markers (on ADX pane)This TradingView indicator is designed to help traders identify buy and sell opportunities using the Average Directional Index (ADX) combined with directional indicators (+DI and -DI). It works by plotting the ADX line and detecting when the +DI line crosses above or below the -DI line, signaling potential changes in market direction. The indicator only triggers a buy or sell signal if the ADX value is above a certain threshold, ensuring that signals are only generated during stronger trends. By combining these elements, the indicator helps traders filter out weaker signals and focus on higher-probability trading opportunities, making it an important tool for trend-following strategies CME_MINI:NQ1!
RSI Buy/Sell SignalsThis indicator generates buy and sell signals based on the Relative Strength Index (RSI). It works by calculating the RSI value over a 14-period length and then checking if the RSI drops below 30 (oversold) or rises above 70 (overbought). When it’s oversold, the indicator plots a green upward arrow suggesting a potential buy. When it’s overbought, it plots a black downward arrow suggesting a potential sell. In essence, it helps traders spot possible reversal points using RSI levels directly on their charts. CME_MINI:NQ1!
Session First 15-Min High/LowHere's a professional description for your 15-minute indicator:
Session First 15-Min High/Low Marker
This indicator automatically identifies and marks the high and low price levels established during the first 15 minutes of major trading sessions, providing traders with broader opening range support and resistance zones for intraday analysis.
Key Features:
Tracks three major trading sessions in IST (Indian Standard Time):
Asian Session: 5:30 AM - 5:45 AM
London Session: 12:30 PM - 12:45 PM
New York Session: 5:30 PM - 5:45 PM
Draws horizontal lines at the highest and lowest prices reached during each session's opening 15-minute window
Color-coded for easy identification (Green for Asian, Blue for London, Red for New York)
Lines extend across the chart to help track price reactions throughout the day
Clean, minimal design with optional labels
Best Used For:
Identifying stronger intraday support and resistance levels with a wider opening range
Session breakout and reversal trading strategies
Understanding institutional order flow during market opens
Works on 1-minute timeframe for precise tracking (15 candles) or 5-minute timeframe (3 candles)
Why 15 Minutes vs 5 Minutes? The 15-minute opening range captures more price action and market participation, often providing more reliable support/resistance levels than the narrower 5-minute range. This makes it ideal for swing traders and those looking for higher-probability trade setups.
Customizable Settings:
Toggle line extensions on/off
Adjust line width (1-2)
Change colors for each session
Show/hide session labels
Perfect for day traders and position traders who want to identify high-probability support/resistance zones established during the critical opening 15 minutes of major trading sessions when liquidity and volatility are highest.
This description highlights the difference between the 5-minute and 15-minute versions and explains the practical benefits of the wider range.
My script//@version=6
indicator(title="HIMA_RSI", shorttitle="HIMA_RSI", overlay=false)
src = close,
BTC – MA20/50/200 (Overlay)//@version=5
indicator("BTC – MA20/50/200 (Overlay)", overlay=true, max_lines_count=500)
// ==== Inputs ====
tf = input.timeframe("", "Multi-TF (để trống = khung hiện tại)")
lenMA1 = input.int(20, "MA1 (ngắn)")
lenMA2 = input.int(50, "MA2 (trung)")
lenMA3 = input.int(200, "MA3 (dài)")
useEMA = input.bool(false, "Dùng EMA thay vì SMA")
// ==== Series ====
src = request.security(syminfo.tickerid, tf == "" ? timeframe.period : tf, close)
// ==== MA helper ====
ma(src,len,ema) => ema ? ta.ema(src,len) : ta.sma(src,len)
ma1 = ma(src,lenMA1,useEMA)
ma2 = ma(src,lenMA2,useEMA)
ma3 = ma(src,lenMA3,useEMA)
// ==== Plots ====
plot(ma1, title="MA20/EMA20", linewidth=2)
plot(ma2, title="MA50/EMA50", linewidth=2)
plot(ma3, title="MA200/EMA200", linewidth=2)
// ==== Labels gợi ý ====
condPullback = close < ma1 and close >= ma2
condTrendUp = close > ma2 and ma2 > ma3
condRisk = close < ma2
if condPullback
label.new(bar_index, high, "Pullback về MA ngắn", textalign=text.align_left)
if condTrendUp
label.new(bar_index, low, "Xu hướng tăng duy trì", textalign=text.align_left)
if condRisk
label.new(bar_index, high, "Mất MA trung – thận trọng", textalign=text.align_left)
Williams Alligator Spread Oscillator (WASO)Short description (About box)
Williams Alligator Spread Oscillator (WASO) converts Bill Williams’ Alligator into a 0–100 oscillator that measures the average distance between Lips/Teeth/Jaw relative to ATR. High = expansion/trend (default), low = compression/range — making sideways markets easier to spot. Includes adaptive normalization, configurable thresholds, background shading, and alerts.
Full description (Description field)
What it does
The Williams Alligator Spread Oscillator (WASO) transforms Bill Williams’ Alligator into a single, adaptive 0–100 scale. It computes the average pairwise distance among the Alligator lines (Lips/Teeth/Jaw), normalizes it by ATR and a rolling min–max window, and smooths the result. This makes the signal robust across symbols and timeframes and explicitly improves detection of sideways (ranging) conditions by highlighting compression regimes.
Why it helps
Sideways detection made easier: Low WASO marks compressed regimes that commonly align with consolidation/range phases, helping you identify chop and plan breakout strategies.
Trend/expansion clarity: High WASO indicates the Alligator lines are widening relative to volatility, pointing to trending or expanding conditions.
You can flip the direction if you prefer “High = Range.”
How it is calculated (plain English)
Smooth price with RMA (SMMA-like) to get Jaw, Teeth, Lips.
Compute the average pairwise distance between these three lines.
Divide by ATR to remove price-scale effects.
Normalize with a rolling min–max window to map values to 0–100.
Optionally apply EMA smoothing to the oscillator.
Key settings
Jaw/Teeth/Lips Lengths: Alligator periods (SMMA-like via ta.rma).
ATR Length: Volatility benchmark for scaling.
Normalization Lookback: Longer = steadier; shorter = more responsive.
Smoothing (EMA): Evens out noise.
High Value = Large Spread (Trend): Toggle to invert semantics.
Upper/Lower Thresholds: 70/30 are practical starting points.
Signals / interpretation
Sideways / Compression (easier to spot):
Default direction: WASO below Lower Threshold (e.g., <30).
With inverted direction OFF: WASO above Upper Threshold (e.g., >70).
Trend / Expansion:
Default direction: WASO above Upper Threshold (e.g., >70).
With inverted direction OFF: WASO below Lower Threshold (e.g., <30).
Midline (50): Neutral zone; flips around 50 can hint at regime shifts.
Alerts included
Range Start (sideways/compression)
Trend Start (expansion/trend)
Notes & limitations
This implementation omits the classic forward shift of Alligator lines to keep signals usable on live bars.
If market behavior shifts (very quiet or very volatile), tune Lookback and ATR Length.
Combine WASO with breakout levels or momentum filters for entries/exits.
Credits & disclaimer
Inspired by Bill Williams’ Alligator.
For educational purposes only. Not financial advice.
Release Notes (v1.0):
Initial release of Williams-Alligator Spread Oscillator (WASO) with ATR-based scaling and adaptive 0–100 normalization.
Direction toggle (High = Trend by default), adjustable thresholds, background shading, and two alert conditions.
TMC Strategy - Simplified Buy/Sell Signals//@version=5
indicator("TMC Strategy - Simplified Buy/Sell Signals", overlay=true)
// Input parameters
emaLength = input.int(20, title="EMA Length")
rsiLength = input.int(10, title="RSI Length")
macdFast = input.int(12, title="MACD Fast Length")
macdSlow = input.int(26, title="MACD Slow Length")
macdSignal = input.int(9, title="MACD Signal Length")
// Calculate indicators
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
= ta.macd(close, macdFast, macdSlow, macdSignal)
// Trend condition
uptrend = close > ema
downtrend = close < ema
// Momentum condition
rsiBullish = rsi > 50
rsiBearish = rsi < 50
// MACD condition
macdBullish = ta.crossover(macdLine, signalLine)
macdBearish = ta.crossunder(macdLine, signalLine)
// Buy and Sell Signals
buySignal = uptrend and rsiBullish and macdBullish
sellSignal = downtrend and rsiBearish and macdBearish
// Plot Buy and Sell Signals
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small)
// Optional: Plot EMA for visual reference
plot(ema, title="EMA", color=color.blue, linewidth=2)
9:30 USA OPENEasy if it go up it will turn green and you can lng if it goes down it will turn red and you can short
Advanced Market Trend Analyzer//@version=5
indicator("Advanced Market Trend Analyzer", shorttitle="AMT Analyzer", overlay=true)
// Input parameters
rsi_length = input.int(14, "RSI Length")
ema_fast = input.int(9, "Fast EMA")
ema_slow = input.int(21, "Slow EMA")
volume_ma_length = input.int(20, "Volume MA Length")
overbought = input.int(70, "Overbought Level")
oversold = input.int(30, "Oversold Level")
BIF ASK WITH TREND Price Trend with PercentageBID ASK WITH TREND Price Trend with Percentage SHOW MARKET TREND AND MARKET VOLLUME
Estrategia MACD//@version=6
indicator("Trading Sessions", overlay = true, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500)
bool showSessionNames = input.bool(true, "Show session names")
bool showSessionOC = input.bool(true, "Draw session open and close lines")
bool showSessionTickRange = input.bool(true, "Show tick range for each session")
bool showSessionAverage = input.bool(true, "Show average price per session")
const string TZ_TOOLTIP_TEXT = "The session's time zone, specified in either GMT notation (e.g., 'GMT-5') or as an IANA time zone database name (e.g., 'America/New_York')."
+ " We recommend the latter since it includes other time-related changes, such as daylight savings."
const string FIRST_SESSION_GROUP = "First Session"
showFirst = input.bool(true, "Show session", group = FIRST_SESSION_GROUP, display = display.none)
firstSessionName = input.string("Tokyo", "Displayed name", group = FIRST_SESSION_GROUP, display = display.none)
firstSessionTime = input.session("0900-1500", "Session time", group = FIRST_SESSION_GROUP, display = display.none)
firstSessionTZ = input.string("Asia/Tokyo", "Session timezone", group = FIRST_SESSION_GROUP, display = display.none, tooltip = TZ_TOOLTIP_TEXT)
firstSessionColor = input.color(color.new(#2962FF, 85), "Session color", group = FIRST_SESSION_GROUP)
const string SECOND_SESSION_GROUP = "Second session"
showSecond = input.bool(true, "Show session", group = SECOND_SESSION_GROUP, display = display.none)
secondSessionName = input.string("London", "Displayed name", group = SECOND_SESSION_GROUP, display = display.none)
secondSessionTime = input.session("0830-1630", "Session time", group = SECOND_SESSION_GROUP, display = display.none)
secondSessionTZ = input.string("Europe/London", "Session timezone", group = SECOND_SESSION_GROUP, display = display.none, tooltip = TZ_TOOLTIP_TEXT)
secondSessionColor = input.color(color.new(#FF9800, 85), "Session color", group = SECOND_SESSION_GROUP)
const string THIRD_SESSION_GROUP = "Third session"
showThird = input.bool(true, "Show session", group = THIRD_SESSION_GROUP, display = display.none)
thirdSessionName = input.string("New York", "Displayed name", group = THIRD_SESSION_GROUP, display = display.none)
thirdSessionTime = input.session("0930-1600", "Session time", group = THIRD_SESSION_GROUP, display = display.none)
thirdSessionTZ = input.string("America/New_York", "Session timezone", group = THIRD_SESSION_GROUP, display = display.none, tooltip = TZ_TOOLTIP_TEXT)
thirdSessionColor = input.color(color.new(#089981, 85), "Session color", group = THIRD_SESSION_GROUP)
type SessionDisplay
box sessionBox
label sessionLabel
line openLine
line avgLine
line closeLine
float sumClose
int numOfBars
type SessionInfo
color color
string name
string session
string timezone
SessionDisplay active = na
method setName(SessionDisplay this, string name) =>
sessionLabel = this.sessionLabel
sessionBox = this.sessionBox
boxText = array.new()
if showSessionTickRange
boxText.push("Range: " + str.tostring((sessionBox.get_top() - sessionBox.get_bottom()) / syminfo.mintick, format.mintick))
if showSessionAverage
boxText.push("Avg: " + str.tostring(this.sumClose / this.numOfBars, format.mintick))
if showSessionNames
boxText.push(name)
sessionLabel.set_y(sessionBox.get_bottom())
sessionLabel.set_text(array.join(boxText, " "))
method createSessionDisplay(SessionInfo this) =>
boxColor = this.color
opaqueColor = color.new(boxColor, 0)
dis = SessionDisplay.new(
sessionBox = box.new(bar_index, high, bar_index, low, bgcolor = boxColor, border_color = na),
sessionLabel = label.new(bar_index, low, "", style = label.style_label_upper_left, textalign = text.align_left, textcolor = opaqueColor, color = color(na)),
openLine = showSessionOC ? line.new(bar_index, open, bar_index, open, color = opaqueColor, style = line.style_dashed, width = 1) : na,
closeLine = showSessionOC ? line.new(bar_index, close, bar_index, close, color = opaqueColor, style = line.style_dashed, width = 1) : na,
avgLine = showSessionAverage ? line.new(bar_index, close, bar_index, close, style = line.style_dotted, width = 2, color = opaqueColor) : na,
sumClose = close,
numOfBars = 1
)
linefill.new(dis.openLine, dis.closeLine, boxColor)
dis.setName(this.name)
this.active := dis
method updateSessionDisplay(SessionInfo this) =>
sessionDisp = this.active
sessionBox = sessionDisp.sessionBox
openLine = sessionDisp.openLine
closeLine = sessionDisp.closeLine
avgLine = sessionDisp.avgLine
sessionDisp.sumClose += close
sessionDisp.numOfBars += 1
sessionBox.set_top(math.max(sessionBox.get_top(), high))
sessionBox.set_bottom(math.min(sessionBox.get_bottom(), low))
sessionBox.set_right(bar_index)
sessionDisp.setName(this.name)
if showSessionOC
openLine.set_x2(bar_index)
closeLine.set_x2(bar_index)
closeLine.set_y1(close)
closeLine.set_y2(close)
if showSessionAverage
avgLine.set_x2(bar_index)
avg = sessionDisp.sumClose / sessionDisp.numOfBars
avgLine.set_y1(avg)
avgLine.set_y2(avg)
sessionDisp
method update(SessionInfo this) =>
bool isChange = timeframe.change("1D")
if (not na(time("", this.session, this.timezone))) // inSession
if na(this.active) or isChange
this.createSessionDisplay()
else
this.updateSessionDisplay()
else if not na(this.active)
this.active := na
getSessionInfos()=>
array sessionInfos = array.new()
if showFirst
sessionInfos.push(SessionInfo.new(firstSessionColor, firstSessionName, firstSessionTime, firstSessionTZ))
if showSecond
sessionInfos.push(SessionInfo.new(secondSessionColor, secondSessionName, secondSessionTime, secondSessionTZ))
if showThird
sessionInfos.push(SessionInfo.new(thirdSessionColor, thirdSessionName, thirdSessionTime, thirdSessionTZ))
sessionInfos
var array sessionInfos = getSessionInfos()
if timeframe.isdwm
runtime.error("This indicator can only be used on intraday timeframes.")
for info in sessionInfos
info.update()
RUDWAN OSMAN MUHUMED redsco trader
this indicator will help you to use ema 9 and ema 20 together with one indicator.
CCI + MACD Signal MTF (2nd-cross)This custom indicator combines the Commodity Channel Index (CCI) and the MACD to generate trading signals.
Basic signals (dots):
A green dot is plotted when CCI is above +100 and MACD is positive.
A red dot is plotted when CCI is below –100 and MACD is negative.
These dots help visualize momentum alignment between the two indicators.
Second-cross signals (text + alert):
The indicator also tracks cycles of the CCI.
When CCI first moves above +100 and later falls back below +100, this is counted as one completed cycle.
The next time CCI crosses back above +100 (the second cross), if MACD is still positive, a “BUY” label is plotted and a buy alert is triggered.
Conversely, when CCI first moves below –100 and later rises back above –100, that is one completed cycle.
The next time CCI crosses back below –100 (the second cross), if MACD is negative, a “SELL” label is plotted and a sell alert is triggered.
Alerts:
Alerts are only fired on the second-cross events (BUY or SELL), making them rarer but potentially more reliable than the basic dot conditions.
Timeframe flexibility:
Both the CCI and the MACD can be calculated on custom timeframes independently of the chart’s timeframe.
CCI + MACD Signal MTF (2nd-cross)This custom indicator combines the Commodity Channel Index (CCI) and the MACD to generate trading signals.
Basic signals (dots):
A green dot is plotted when CCI is above +100 and MACD is positive.
A red dot is plotted when CCI is below –100 and MACD is negative.
These dots help visualize momentum alignment between the two indicators.
Second-cross signals (text + alert):
The indicator also tracks cycles of the CCI.
When CCI first moves above +100 and later falls back below +100, this is counted as one completed cycle.
The next time CCI crosses back above +100 (the second cross), if MACD is still positive, a “BUY” label is plotted and a buy alert is triggered.
Conversely, when CCI first moves below –100 and later rises back above –100, that is one completed cycle.
The next time CCI crosses back below –100 (the second cross), if MACD is negative, a “SELL” label is plotted and a sell alert is triggered.
Alerts:
Alerts are only fired on the second-cross events (BUY or SELL), making them rarer but potentially more reliable than the basic dot conditions.
Timeframe flexibility:
Both the CCI and the MACD can be calculated on custom timeframes independently of the chart’s timeframe.
fartbombLinReg fit (history): solid line showing the best-fit linear trend over the last len bars.
Projected offset (visual): same line shifted h bars right so you can see direction.
Future projection (segments): the actual next-h forecast, drawn from the last bar.
Forecast made h bars ago: circle at each bar’s target showing what was predicted h bars earlier.
H / X markers: a hit if that earlier forecast fell inside the bar’s high–low range.
Investorjordann - Script I have developed a script for the BTC pair. I'm currently trialing this...it is using multiple indicators and timeframes to trigger a trade. So far it seems very profitable across many timeframes, but I am still trailing.
EMAs Personalizáveis (até 5)📘 Indicator Explanation – Customizable EMAs (up to 5)
This indicator was developed in Pine Script v6 to make it easier to visualize multiple Exponential Moving Averages (EMAs) on a single chart.
🔑 Main features:
Supports up to 5 different EMAs.
Ability to enable or disable each EMA individually.
Fully customizable period for each EMA.
Flexible color selection for better visual organization.
Adjustable line thickness to highlight the most relevant levels.
📌 How to use:
Open the indicator settings.
Select which EMAs you want to display (from 1 to 5).
Define the period (e.g., 20, 50, 100, 200, etc.).
Choose a color for each EMA.
Observe price behavior relative to the EMAs to identify:
Trends → price above long EMAs indicates bullish strength.
Reversals → EMA crossovers may signal a change in direction.
Dynamic support and resistance → EMAs often act as reaction zones for price.
💡 Practical example:
Short EMA (20) → shows short-term movement.
Mid-term EMA (50 or 100) → confirms trend direction.
Long EMA (200 or 500) → indicates the overall market trend.
👉 This indicator is flexible and can be used for scalping, swing trading, or position trading, depending on the chosen periods.
XAUUSD CSI+RSI+Delta (15m)XAUUSD 15m
Candle Stability Index: 0.4
RSI Index: 80
Candle Delta Length: 6
Disable Repeating Signals: Enabled
CCI vs Two EMAs + Trendlines + Breakout HighlightPerfect indicator which analyzes the cci4000 & 2 EMAS.
Williams Accelerator Oscillator — ACWhat it is
The Accelerator Oscillator (AC) measures the acceleration/deceleration of momentum. It’s derived from the Awesome Oscillator (AO) and shows whether momentum is speeding up or slowing down. In this implementation, columns are green when AC rises vs. the previous bar and red when it falls.
How it’s calculated
Price source: Median Price (HL2) by default; Close can be used instead.
AO = SMA(HL2, fastLen) − SMA(HL2, slowLen) (defaults: 5 & 34).
AC = AO − SMA(AO, signalLen) (default: 5).
Coloring: Green if AC > AC , else Red.
Zero line (optional) helps contextualize acceleration around neutral.
How to read it (typical interpretation)
Above 0: Upside acceleration (bullish pressure increasing).
Below 0: Downside acceleration (bearish pressure increasing).
Color sequences: Consecutive green columns suggest increasing upside acceleration; consecutive red columns suggest increasing downside acceleration.
Note: AC reflects change in momentum, not trend direction by itself. Many traders confirm with trend filters or price structure before acting.
Inputs
AO Fast SMA (default 5)
AO Slow SMA (default 34)
AC Signal SMA (default 5) — smoothing for the AO used in AC calc
Use Median Price (HL2) for AO (on/off)
Show zero line (on/off)
Show AO (for reference) (on/off)
Show AC signal (SMA of AO) (on/off)
Plots
AC Histogram — column chart colored by acceleration (green/red).
Zero — optional baseline at 0.
AO — optional reference line.
AO Signal (SMA) — optional smoothing line of AO.
Alerts
AC crosses above 0 — acceleration flips positive.
AC crosses below 0 — acceleration flips negative.
AC green above zero — AC rising and > 0.
AC red below zero — AC falling and < 0.
Usage tips
On lower timeframes, consider a slightly larger signalLen to reduce noise.
Confirm with price action, trend filters, or volatility context.
Values update intrabar; for stricter signals, confirm on bar close.
Limitations
AC is built from moving averages and is therefore lagging relative to raw price.
It is not normalized; behavior can vary by instrument and timeframe.
Do not use in isolation for entries/exits without risk management.
Credits
Concept by Bill Williams. This script is an independent implementation for educational and research purposes.
Disclaimer
No financial advice. Markets involve risk; test thoroughly before live use.