Indicator
Chart patterns
Indicator
TY's MA disparity with high/low markHere's a concise English description suitable for PulseWire (e.g., for the publish description or a comment block):
---
**TY's MA Disparity — Mean Reversion Strategy**
This indicator measures how far price has stretched from its moving average(s), expressed as a percentage disparity, to help identify potential mean-reversion entry/exit zones.
**Core calculation**
- Computes disparity `(close − MA) / MA × 100` separately for a mid-term MA (default 120) and a long-term MA (default 200)
- User can enable either MA independently, or both (values are summed when both are active)
- MA type is selectable (SMA or EMA, default SMA), applied to both MAs
**Bands**
- Upper/lower limit lines can be set manually, or switched to **Auto Band mode**, which sets the bands automatically to the highest/lowest disparity reading over the last N bars (default 150)
- Zones beyond the bands are shaded for quick visual identification of extreme readings
**Extreme price markers**
- Flags new 100-bar (adjustable) highs and lows in price itself
- New highs are marked with an upward triangle (▲), new lows with a downward triangle (▼), both plotted on the zero (center) line
- Markers are deduplicated only within the lookback window — if a new extreme appears within the same N-bar window as the prior marker, the prior one is replaced; markers older than the window are preserved as historical reference
- Fully timeframe-agnostic — lookback is bar-count based, so it works identically on daily, weekly, monthly, or any custom timeframe
**Optional display**
- Squared disparity (sign-preserving) available as an alternate series for emphasizing volatility of extreme moves
A warning label appears on-chart if both MA toggles are disabled (disparity would otherwise flatline at zero).
Indicator
Key Levels Higher High / Lower LowThis is a Pine Script v6 overlay indicator for PulseWire that plots four key daily price levels as horizontal lines extending from the bar they formed to the right edge of the chart.
What it draws
Previous Day High (PDH) red line at the high of the most recently completed daily candle.
Previous Day Low (PDL) green line at the low of the most recently completed daily candle.
Nearest Higher High (HH) red line at the closest prior daily high that is above the previous day high, searched back as far as needed.
Nearest Lower Low (LL) green line at the closest prior daily low that is below the previous day low, searched back as far as needed.
How it works
It tracks completed daily highs and lows internally while the current day is still forming.
At each new daily open it finalizes the previous day, then scans the stored daily history backwards until it finds the first higher high and first lower low.
Lines are redrawn once per bar so only the current relevant set stays on the chart.
It works on any intraday timeframe because the daily values are computed directly from the chart's own price action, not repainted.
Inputs you can change
Show/hide each of the four levels independently.
Colors for upper and lower levels.
Line width and style (solid, dashed, or dotted).
Toggle price labels on/off.
Maximum lookback window for the historical search (default 250 days).
Indicator
Asia, London & New York Session Highs/Lows//@version=6
indicator("Asia, London & New York Session Highs/Lows", shorttitle="Sess H/L", overlay=true, max_lines_count=500, max_labels_count=500, max_boxes_count=500)
// ============================================================================
// INPUTS
// ============================================================================
// --- Timezone ---------------------------------------------------------------
// All session windows are evaluated in THIS timezone, independent of the
// chart's visual timezone, so DST shifts are handled correctly via the
// IANA identifier passed to time().
tzChoice = input.string("America/New_York", "Timezone",
options= ,
group="Timezone", tooltip="Session times below are interpreted in this timezone.")
tzStr = tzChoice == "Exchange timezone (syminfo.timezone)" ? syminfo.timezone : tzChoice
// --- Session definitions ------------------------------------------------------
showAsia = input.bool(true, "Show Asia session", group="Sessions")
asiaSession = input.session("1900-0400", "Asia session time", group="Sessions")
showLondon = input.bool(true, "Show London session", group="Sessions")
londonSession = input.session("0300-1200", "London session time", group="Sessions")
showNY = input.bool(true, "Show New York session", group="Sessions")
nySession = input.session("0800-1700", "New York session time", group="Sessions")
// --- Display toggles ----------------------------------------------------------
showHighLines = input.bool(true, "Show high lines", group="Display")
showLowLines = input.bool(true, "Show low lines", group="Display")
showLabels = input.bool(true, "Show price labels", group="Display")
showBg = input.bool(true, "Show session background shading", group="Display")
extendRight = input.bool(true, "Extend completed levels right", group="Display")
showBoxes = input.bool(false, "Show session range boxes", group="Display")
// --- History & style ------------------------------------------------------------
historyCount = input.int(10, "Historical sessions to retain", minval=1, maxval=50, group="History & Style")
hiWidth = input.int(2, "High line width", minval=1, maxval=5, group="History & Style")
loWidth = input.int(2, "Low line width", minval=1, maxval=5, group="History & Style")
lblSizeStr = input.string("Small", "Label size", options= , group="History & Style")
lblSize = lblSizeStr == "Tiny" ? size.tiny : lblSizeStr == "Small" ? size.small : lblSizeStr == "Normal" ? size.normal : size.large
// --- Colors ----------------------------------------------------------------------
asiaColor = input.color(color.purple, "Asia color", group="Colors")
londonColor = input.color(color.blue, "London color", group="Colors")
nyColor = input.color(color.orange, "New York color", group="Colors")
// ============================================================================
// CORE SESSION ENGINE
// ----------------------------------------------------------------------------
// Called once per session from three separate call sites below. Each call
// site is a distinct location in the script, so the `var` state declared
// inside this function is maintained independently per session (Pine gives
// every call-site its own persistent copy of `var` variables declared in a
// user-defined function).
// ============================================================================
f_sessionHL(sessString, tzArg, sessColor, sessionName, doHi, doLo, doLbl, doBox, doExtend, maxHist, wHi, wLo, lSize) =>
var line hiLines = array.new()
var line loLines = array.new()
var label hiLabels = array.new()
var label loLabels = array.new()
var box boxes = array.new()
var float sessHigh = na
var float sessLow = na
var int sessHighBar = na
var int sessLowBar = na
var int sessStartBar = na
var float completedHigh = na
var float completedLow = na
// Session membership test in the chosen IANA timezone (handles DST and
// overnight wraparound, e.g. Asia 19:00-04:00, natively).
inSession = not na(time(timeframe.period, sessString, tzArg))
// na-safe "previous bar was in session" — handles bar_index 0 (chart
// history that starts mid-session) without producing an na boolean.
prevInSession = bar_index == 0 ? false : inSession
isNewSession = inSession and not prevInSession
isSessionEnd = not inSession and prevInSession
// ---- Session start: initialize extremes and create fresh drawings ------
if isNewSession
sessHigh := high
sessLow := low
sessHighBar := bar_index
sessLowBar := bar_index
sessStartBar := bar_index
if doHi
newHiLine = line.new(bar_index, high, bar_index, high, xloc.bar_index, extend.none, sessColor, line.style_solid, wHi)
array.push(hiLines, newHiLine)
if array.size(hiLines) > maxHist
line.delete(array.shift(hiLines))
if doLo
newLoLine = line.new(bar_index, low, bar_index, low, xloc.bar_index, extend.none, sessColor, line.style_dashed, wLo)
array.push(loLines, newLoLine)
if array.size(loLines) > maxHist
line.delete(array.shift(loLines))
if doLbl
newHiLabel = label.new(bar_index, high, sessionName + " H " + str.tostring(high, format.mintick), xloc.bar_index, yloc.price, color.new(color.black, 100), label.style_label_left, sessColor, lSize)
array.push(hiLabels, newHiLabel)
if array.size(hiLabels) > maxHist
label.delete(array.shift(hiLabels))
newLoLabel = label.new(bar_index, low, sessionName + " L " + str.tostring(low, format.mintick), xloc.bar_index, yloc.price, color.new(color.black, 100), label.style_label_left, sessColor, lSize)
array.push(loLabels, newLoLabel)
if array.size(loLabels) > maxHist
label.delete(array.shift(loLabels))
if doBox
newBox = box.new(bar_index, high, bar_index, low, sessColor, 1, line.style_solid, extend.none, xloc.bar_index, color.new(sessColor, 85))
array.push(boxes, newBox)
if array.size(boxes) > maxHist
box.delete(array.shift(boxes))
// ---- While in session: track extremes and update live drawings ---------
if inSession
if na(sessHigh) or high > sessHigh
sessHigh := high
sessHighBar := bar_index
if na(sessLow) or low < sessLow
sessLow := low
sessLowBar := bar_index
if doHi and array.size(hiLines) > 0
curHi = array.get(hiLines, array.size(hiLines) - 1)
line.set_xy1(curHi, sessHighBar, sessHigh)
line.set_xy2(curHi, bar_index, sessHigh)
if doLo and array.size(loLines) > 0
curLo = array.get(loLines, array.size(loLines) - 1)
line.set_xy1(curLo, sessLowBar, sessLow)
line.set_xy2(curLo, bar_index, sessLow)
if doLbl
if array.size(hiLabels) > 0
curHiLbl = array.get(hiLabels, array.size(hiLabels) - 1)
label.set_xy(curHiLbl, bar_index, sessHigh)
label.set_text(curHiLbl, sessionName + " H " + str.tostring(sessHigh, format.mintick))
if array.size(loLabels) > 0
curLoLbl = array.get(loLabels, array.size(loLabels) - 1)
label.set_xy(curLoLbl, bar_index, sessLow)
label.set_text(curLoLbl, sessionName + " L " + str.tostring(sessLow, format.mintick))
if doBox and array.size(boxes) > 0
curBox = array.get(boxes, array.size(boxes) - 1)
box.set_lefttop(curBox, sessStartBar, sessHigh)
box.set_rightbottom(curBox, bar_index, sessLow)
// ---- Session end: freeze levels for alerts, optionally extend lines ----
if isSessionEnd
completedHigh := sessHigh
completedLow := sessLow
if doExtend
if doHi and array.size(hiLines) > 0
line.set_extend(array.get(hiLines, array.size(hiLines) - 1), extend.right)
if doLo and array.size(loLines) > 0
line.set_extend(array.get(loLines, array.size(loLines) - 1), extend.right)
// ============================================================================
// RUN THE ENGINE FOR EACH SESSION (three independent, persistent call sites)
// ============================================================================
= f_sessionHL(asiaSession, tzStr, asiaColor, "Asia",
showAsia and showHighLines, showAsia and showLowLines, showAsia and showLabels, showAsia and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
= f_sessionHL(londonSession, tzStr, londonColor, "London",
showLondon and showHighLines, showLondon and showLowLines, showLondon and showLabels, showLondon and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
= f_sessionHL(nySession, tzStr, nyColor, "New York",
showNY and showHighLines, showNY and showLowLines, showNY and showLabels, showNY and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
// ============================================================================
// BACKGROUND SHADING (must be called unconditionally at top level)
// ============================================================================
bgcolor(showAsia and showBg and asiaIn ? color.new(asiaColor, 92) : na, title="Asia session background")
bgcolor(showLondon and showBg and londonIn ? color.new(londonColor, 92) : na, title="London session background")
bgcolor(showNY and showBg and nyIn ? color.new(nyColor, 92) : na, title="New York session background")
// ============================================================================
// TIMEFRAME WARNING (daily and higher timeframes are not reliable for
// intraday session detection)
// ============================================================================
var table warnTable = table.new(position.top_right, 1, 1)
if barstate.islast
if not timeframe.isintraday
table.cell(warnTable, 0, 0, "⚠ Session Highs/Lows is designed for intraday timeframes", text_color=color.white, bgcolor=color.new(color.red, 10), text_size=size.small)
else
table.cell(warnTable, 0, 0, "", bgcolor=color.new(color.white, 100))
// ============================================================================
// ALERTS — most recently completed session, confirmed-close crossings only
// ============================================================================
asiaCrossUp = barstate.isconfirmed and ta.crossover(close, asiaCompH)
asiaCrossDn = barstate.isconfirmed and ta.crossunder(close, asiaCompL)
londonCrossUp = barstate.isconfirmed and ta.crossover(close, londonCompH)
londonCrossDn = barstate.isconfirmed and ta.crossunder(close, londonCompL)
nyCrossUp = barstate.isconfirmed and ta.crossover(close, nyCompH)
nyCrossDn = barstate.isconfirmed and ta.crossunder(close, nyCompL)
alertcondition(asiaCrossUp, title="Asia High Cross Up", message="Price crossed above the most recently completed Asia session high")
alertcondition(asiaCrossDn, title="Asia Low Cross Down", message="Price crossed below the most recently completed Asia session low")
alertcondition(londonCrossUp, title="London High Cross Up", message="Price crossed above the most recently completed London session high")
alertcondition(londonCrossDn, title="London Low Cross Down", message="Price crossed below the most recently completed London session low")
alertcondition(nyCrossUp, title="New York High Cross Up", message="Price crossed above the most recently completed New York session high")
alertcondition(nyCrossDn, title="New York Low Cross Down", message="Price crossed below the most recently completed New York session low")
Indicator
Asia, London & New York Session Highs/Lows//@version=6
indicator("Asia, London & New York Session Highs/Lows", shorttitle="Sess H/L", overlay=true, max_lines_count=500, max_labels_count=500, max_boxes_count=500)
// ============================================================================
// INPUTS
// ============================================================================
// --- Timezone ---------------------------------------------------------------
// All session windows are evaluated in THIS timezone, independent of the
// chart's visual timezone, so DST shifts are handled correctly via the
// IANA identifier passed to time().
tzChoice = input.string("America/New_York", "Timezone",
options= ,
group="Timezone", tooltip="Session times below are interpreted in this timezone.")
tzStr = tzChoice == "Exchange timezone (syminfo.timezone)" ? syminfo.timezone : tzChoice
// --- Session definitions ------------------------------------------------------
showAsia = input.bool(true, "Show Asia session", group="Sessions")
asiaSession = input.session("1900-0400", "Asia session time", group="Sessions")
showLondon = input.bool(true, "Show London session", group="Sessions")
londonSession = input.session("0300-1200", "London session time", group="Sessions")
showNY = input.bool(true, "Show New York session", group="Sessions")
nySession = input.session("0800-1700", "New York session time", group="Sessions")
// --- Display toggles ----------------------------------------------------------
showHighLines = input.bool(true, "Show high lines", group="Display")
showLowLines = input.bool(true, "Show low lines", group="Display")
showLabels = input.bool(true, "Show price labels", group="Display")
showBg = input.bool(true, "Show session background shading", group="Display")
extendRight = input.bool(true, "Extend completed levels right", group="Display")
showBoxes = input.bool(false, "Show session range boxes", group="Display")
// --- History & style ------------------------------------------------------------
historyCount = input.int(10, "Historical sessions to retain", minval=1, maxval=50, group="History & Style")
hiWidth = input.int(2, "High line width", minval=1, maxval=5, group="History & Style")
loWidth = input.int(2, "Low line width", minval=1, maxval=5, group="History & Style")
lblSizeStr = input.string("Small", "Label size", options= , group="History & Style")
lblSize = lblSizeStr == "Tiny" ? size.tiny : lblSizeStr == "Small" ? size.small : lblSizeStr == "Normal" ? size.normal : size.large
// --- Colors ----------------------------------------------------------------------
asiaColor = input.color(color.purple, "Asia color", group="Colors")
londonColor = input.color(color.blue, "London color", group="Colors")
nyColor = input.color(color.orange, "New York color", group="Colors")
// ============================================================================
// CORE SESSION ENGINE
// ----------------------------------------------------------------------------
// Called once per session from three separate call sites below. Each call
// site is a distinct location in the script, so the `var` state declared
// inside this function is maintained independently per session (Pine gives
// every call-site its own persistent copy of `var` variables declared in a
// user-defined function).
// ============================================================================
f_sessionHL(sessString, tzArg, sessColor, sessionName, doHi, doLo, doLbl, doBox, doExtend, maxHist, wHi, wLo, lSize) =>
var line hiLines = array.new()
var line loLines = array.new()
var label hiLabels = array.new()
var label loLabels = array.new()
var box boxes = array.new()
var float sessHigh = na
var float sessLow = na
var int sessHighBar = na
var int sessLowBar = na
var int sessStartBar = na
var float completedHigh = na
var float completedLow = na
// Session membership test in the chosen IANA timezone (handles DST and
// overnight wraparound, e.g. Asia 19:00-04:00, natively).
inSession = not na(time(timeframe.period, sessString, tzArg))
// na-safe "previous bar was in session" — handles bar_index 0 (chart
// history that starts mid-session) without producing an na boolean.
prevInSession = bar_index == 0 ? false : inSession
isNewSession = inSession and not prevInSession
isSessionEnd = not inSession and prevInSession
// ---- Session start: initialize extremes and create fresh drawings ------
if isNewSession
sessHigh := high
sessLow := low
sessHighBar := bar_index
sessLowBar := bar_index
sessStartBar := bar_index
if doHi
newHiLine = line.new(bar_index, high, bar_index, high, xloc.bar_index, extend.none, sessColor, line.style_solid, wHi)
array.push(hiLines, newHiLine)
if array.size(hiLines) > maxHist
line.delete(array.shift(hiLines))
if doLo
newLoLine = line.new(bar_index, low, bar_index, low, xloc.bar_index, extend.none, sessColor, line.style_dashed, wLo)
array.push(loLines, newLoLine)
if array.size(loLines) > maxHist
line.delete(array.shift(loLines))
if doLbl
newHiLabel = label.new(bar_index, high, sessionName + " H " + str.tostring(high, format.mintick), xloc.bar_index, yloc.price, color.new(color.black, 100), label.style_label_left, sessColor, lSize)
array.push(hiLabels, newHiLabel)
if array.size(hiLabels) > maxHist
label.delete(array.shift(hiLabels))
newLoLabel = label.new(bar_index, low, sessionName + " L " + str.tostring(low, format.mintick), xloc.bar_index, yloc.price, color.new(color.black, 100), label.style_label_left, sessColor, lSize)
array.push(loLabels, newLoLabel)
if array.size(loLabels) > maxHist
label.delete(array.shift(loLabels))
if doBox
newBox = box.new(bar_index, high, bar_index, low, sessColor, 1, line.style_solid, extend.none, xloc.bar_index, color.new(sessColor, 85))
array.push(boxes, newBox)
if array.size(boxes) > maxHist
box.delete(array.shift(boxes))
// ---- While in session: track extremes and update live drawings ---------
if inSession
if na(sessHigh) or high > sessHigh
sessHigh := high
sessHighBar := bar_index
if na(sessLow) or low < sessLow
sessLow := low
sessLowBar := bar_index
if doHi and array.size(hiLines) > 0
curHi = array.get(hiLines, array.size(hiLines) - 1)
line.set_xy1(curHi, sessHighBar, sessHigh)
line.set_xy2(curHi, bar_index, sessHigh)
if doLo and array.size(loLines) > 0
curLo = array.get(loLines, array.size(loLines) - 1)
line.set_xy1(curLo, sessLowBar, sessLow)
line.set_xy2(curLo, bar_index, sessLow)
if doLbl
if array.size(hiLabels) > 0
curHiLbl = array.get(hiLabels, array.size(hiLabels) - 1)
label.set_xy(curHiLbl, bar_index, sessHigh)
label.set_text(curHiLbl, sessionName + " H " + str.tostring(sessHigh, format.mintick))
if array.size(loLabels) > 0
curLoLbl = array.get(loLabels, array.size(loLabels) - 1)
label.set_xy(curLoLbl, bar_index, sessLow)
label.set_text(curLoLbl, sessionName + " L " + str.tostring(sessLow, format.mintick))
if doBox and array.size(boxes) > 0
curBox = array.get(boxes, array.size(boxes) - 1)
box.set_lefttop(curBox, sessStartBar, sessHigh)
box.set_rightbottom(curBox, bar_index, sessLow)
// ---- Session end: freeze levels for alerts, optionally extend lines ----
if isSessionEnd
completedHigh := sessHigh
completedLow := sessLow
if doExtend
if doHi and array.size(hiLines) > 0
line.set_extend(array.get(hiLines, array.size(hiLines) - 1), extend.right)
if doLo and array.size(loLines) > 0
line.set_extend(array.get(loLines, array.size(loLines) - 1), extend.right)
// ============================================================================
// RUN THE ENGINE FOR EACH SESSION (three independent, persistent call sites)
// ============================================================================
= f_sessionHL(asiaSession, tzStr, asiaColor, "Asia",
showAsia and showHighLines, showAsia and showLowLines, showAsia and showLabels, showAsia and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
= f_sessionHL(londonSession, tzStr, londonColor, "London",
showLondon and showHighLines, showLondon and showLowLines, showLondon and showLabels, showLondon and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
= f_sessionHL(nySession, tzStr, nyColor, "New York",
showNY and showHighLines, showNY and showLowLines, showNY and showLabels, showNY and showBoxes,
extendRight, historyCount, hiWidth, loWidth, lblSize)
// ============================================================================
// BACKGROUND SHADING (must be called unconditionally at top level)
// ============================================================================
bgcolor(showAsia and showBg and asiaIn ? color.new(asiaColor, 92) : na, title="Asia session background")
bgcolor(showLondon and showBg and londonIn ? color.new(londonColor, 92) : na, title="London session background")
bgcolor(showNY and showBg and nyIn ? color.new(nyColor, 92) : na, title="New York session background")
// ============================================================================
// TIMEFRAME WARNING (daily and higher timeframes are not reliable for
// intraday session detection)
// ============================================================================
var table warnTable = table.new(position.top_right, 1, 1)
if barstate.islast
if not timeframe.isintraday
table.cell(warnTable, 0, 0, "⚠ Session Highs/Lows is designed for intraday timeframes", text_color=color.white, bgcolor=color.new(color.red, 10), text_size=size.small)
else
table.cell(warnTable, 0, 0, "", bgcolor=color.new(color.white, 100))
// ============================================================================
// ALERTS — most recently completed session, confirmed-close crossings only
// ============================================================================
asiaCrossUp = barstate.isconfirmed and ta.crossover(close, asiaCompH)
asiaCrossDn = barstate.isconfirmed and ta.crossunder(close, asiaCompL)
londonCrossUp = barstate.isconfirmed and ta.crossover(close, londonCompH)
londonCrossDn = barstate.isconfirmed and ta.crossunder(close, londonCompL)
nyCrossUp = barstate.isconfirmed and ta.crossover(close, nyCompH)
nyCrossDn = barstate.isconfirmed and ta.crossunder(close, nyCompL)
alertcondition(asiaCrossUp, title="Asia High Cross Up", message="Price crossed above the most recently completed Asia session high")
alertcondition(asiaCrossDn, title="Asia Low Cross Down", message="Price crossed below the most recently completed Asia session low")
alertcondition(londonCrossUp, title="London High Cross Up", message="Price crossed above the most recently completed London session high")
alertcondition(londonCrossDn, title="London Low Cross Down", message="Price crossed below the most recently completed London session low")
alertcondition(nyCrossUp, title="New York High Cross Up", message="Price crossed above the most recently completed New York session high")
alertcondition(nyCrossDn, title="New York Low Cross Down", message="Price crossed below the most recently completed New York session low")
Indicator
Mr Balwant's Indicator# EMA 8/33 Multi-Timeframe Bias Dashboard
## Overview
The EMA 8/33 Multi-Timeframe Bias Dashboard is designed to help traders quickly identify the overall market bias by comparing the 8 EMA and 33 EMA across multiple higher timeframes.
The dashboard monitors the following timeframes:
* 15 Minutes
* 30 Minutes
* 1 Hour
* 2 Hours
* 3 Hours
* 4 Hours
## How It Works
For each timeframe:
* **Bullish** → EMA 8 is above EMA 33.
* **Bearish** → EMA 8 is below EMA 33.
The indicator displays the trend for each timeframe along with an alignment score.
## Alignment
The Alignment value shows how many of the six monitored timeframes are bullish.
Examples:
* **6/6** = All six timeframes are bullish.
* **0/6** = All six timeframes are bearish.
* Any other value indicates mixed market conditions.
## Purpose
This indicator is designed as a trend-filtering tool. It helps traders stay aligned with the dominant market direction before looking for entries on lower timeframes.
Many traders use it as a higher-timeframe confirmation dashboard while executing trades on lower charts.
## Features
* EMA 8 vs EMA 33 trend detection.
* Multi-timeframe dashboard.
* Dark-theme friendly design.
* Instant visual trend confirmation.
* Simple and lightweight.
## Disclaimer
This indicator is intended for educational and analytical purposes only. It does not provide financial advice or guarantee profitable trades. Always combine it with your own risk management and trading strategy.
Indicator
CHK - Simple Moving AverageCHK - Simple Moving Average
Copy of Simple Moving Average
Some minnor Changes
Indicator
GEX Flush Levels Only This is to be used with GEX levels in the following order, separated by a comma:
Position Field SPY example
1 Ticker SPY
2 Date 2026-07-28
3 Ceiling 750.0
4 Chop High 742.0
5 Chop Low 741.0
6 Floor 737.0
7 Long Trigger 742.0
8 Short Trigger 741.0
9 TP1 Short 739.0
10 TP2 Short 737.0
11 TP1 Long 743.0
12 TP2 Long 745.0
13 Signal 1
Indicator
Smooth 5-Day MA Market StateThis indicator provides a clear visual representation of the market’s position relative to a live, smoothed 5-day moving average.
Unlike a standard daily moving average that appears as a staircase on intraday charts, this indicator uses the current intraday price together with the previous four completed daily closes. This allows the 5-day moving average to update throughout the trading session and appear smoother on timeframes such as the 1-hour chart.
The area between price and the moving average is shaded based on three market conditions:
Red: Price is below the 5-day moving average.
Yellow: Price is above the 5-day moving average, but the average is flat or declining.
Green: Price is above the 5-day moving average and the average is rising.
Indicator
Displacement Acceptance Engine [PhenLabs]📊 Displacement Acceptance Engine
Version: PineScript™ v6
📌 Description
The Displacement Acceptance Engine grades what happens after a liquidity sweep — not just the sweep itself. Most sweep tools fire on a wick beyond a swing and stop there. DAE waits for a real displacement leg, then scores whether price accepts that move or rejects it.
Traders see a clean story on the chart: sweep zone → neon displacement beam → scored ▲ ACC / ✕ REJ label, plus a live dashboard with bias, state, score, last event, HTF context, and volume pulse. Built for SMC/ICT retail who want continuation quality after stop-hunts on crypto, indices, FX, and metals.
🔧 Core Features
• Confirmed BSL/SSL liquidity pools from swing pivots
• Stop-hunt sweep detection with ATR buffer and optional close-back-inside
• Displacement window that requires body + ATR expansion beyond the sweep
• Acceptance vs rejection resolve with hold-fraction logic
• Mechanical 0–10 score (depth, displacement, body, volume, structure, HTF)
• Neon beams, sweep zones, scored labels, and PhenLabs command dashboard
• Cooldown + max visible events to keep charts readable
⚙️ How It Works
• Sweep Depth — wick pierce beyond the pool normalized by ATR
• Displacement Magnitude — impulse leg size vs ATR after the sweep
• Body Quality — displacement candle body strength vs ATR
• Volume Pulse — bar volume vs SMA (HOT / OK / SOFT)
• Structure Break — close through recent swing extreme or pool buffer
• HTF Bias — optional higher-timeframe alignment bonus
• Final score gates high-conviction ▲ ACC labels; failed holds print ✕ REJ
🎨 Visual Guide
• Dotted pool rails — active buyside / sellside liquidity
• Translucent sweep boxes — stop-hunt event footprint
• Dual-glow displacement beams — core + outer rail from origin to impulse close
• ▲ ACC / ✕ REJ scored labels — continuation quality at a glance
• Soft bar highlight — high-score acceptance bars only
• Top-right dashboard — BIAS · STATE · SCORE · EVENT · HTF · VOL · POOLS
📡 Alerts
• Bull Liquidity Sweep
• Bear Liquidity Sweep
• Bull Displacement
• Bear Displacement
• Bull Acceptance High Score
• Bear Acceptance High Score
• Displacement Rejection
⚙️ Key Settings
• Pivot Lookback — Default: 5 — pool sensitivity
• Require Close Back Inside — Default: true — classic stop-hunt reclaim
• Displacement Window — Default: 6 bars — time allowed for impulse
• Min Displacement (ATR) — Default: 0.55 — impulse size gate
• Acceptance Window — Default: 8 bars — hold / fail resolve time
• Hold Fraction of Disp Leg — Default: 0.45 — acceptance hold line
• Min Acceptance Score — Default: 6.0 — label / highlight gate
• HTF Bias Timeframe — Default: 60 — score alignment context
• Max Visible Events — Default: 8 — clutter control
⚠️ Disclaimer
Educational tool only. Not financial advice. Past structure ≠ future results. Always manage risk.
Indicator
Strat 3-1-2 + S/R + ICTStrat 3-1-2 + S/R + ICT — Complete Day-Trading Toolkit
This indicator combines three trading frameworks into one overlay so you can see Strat setups, key levels, support/resistance, and ICT smart-money concepts on a single chart.
■ THE STRAT
• 3-1-2 setups — detects an Outside bar (3) followed by an Inside bar (1), then signals when the inside bar's range breaks (2U up / 2D down). Optional bar-close confirmation for non-repainting signals.
• Failed 2 (F2D / F2U) — flags bars that break the prior low but close green (bullish trap) or break the prior high and close red (bearish trap). Optional strict mode requires the close back inside the prior bar's range.
• Full Timeframe Continuity (FTFC) — a side panel showing up to 8 timeframes colored green/red by their current candle. BUY/SELL signals can require all timeframes to agree.
• Candle numbering — optionally labels every bar 1 / 2U / 2D / 3 to learn the Strat visually.
• Multi-ticker F2 scanner — a dashboard that watches up to 8 symbols on any timeframe and alerts when an F2 fires on any of them.
■ KEY LEVELS
Previous/current day, week, month, and year highs and lows; premarket high/low; the 6 PM ET futures open and midnight ET open. Each level has independent toggles plus separate pickers for line color and label text color. Overlapping labels automatically shift side-by-side so tags never stack on top of each other (spacing is adjustable).
■ SUPPORT & RESISTANCE
Pivot-based levels that merge nearby touches into a single zone and count them — a level touched 3+ times turns solid yellow ("R ×3") to mark it as strong. Broken levels are automatically removed. Alerts on any S/R test.
■ ICT CONCEPTS
• Kill Zones — session shading for London Open, NY Open, London Close, and Asia (all toggleable).
• Fair Value Gaps — 3-candle imbalances drawn as boxes, auto-removed once price closes through them.
• Order Blocks — the last opposing candle before an impulse move, boxed and removed when mitigated.
• Market Structure — labels every break of a swing high/low as BOS (continuation) or CHoCH (potential reversal).
• Equal Highs / Lows — dotted liquidity lines connecting matching pivots, removed automatically once the pool is swept.
• Premium / Discount — daily 50% equilibrium line plus the OTE zone (62–79% retracement) for optimal entries.
• A global "last N bars" setting keeps ICT drawings on recent price action only, so the chart stays clean.
■ 30-MIN ORB
Opening range high/low drawn per session with breakout signals — optionally only the first break per side, close-through required, or FTFC-filtered.
■ ALERTS
Alert conditions for every signal: 3-1 formed, 3-1-2 triggered, F2D/F2U, BUY/SELL, ORB breaks, S/R tests, FVG formed, OB created, and the watchlist scanner. A minimum-timeframe filter stops noise from low timeframes.
■ HOW TO USE
Built for day trading index futures (NQ/ES) on 5–30 min charts, but works on any symbol and timeframe. A typical confluence entry: price in the discount/OTE zone, inside a bullish FVG or order block, during the NY kill zone, with FTFC green — then trigger on a 3-1-2 up or F2D signal.
This tool is for educational purposes and chart analysis only. It is not financial advice, and past patterns do not guarantee future results. Always manage your risk.
Indicator
FTM ENGINEFTM Engine is a highly advanced Smart Money Concepts (SMC) indicator built on Pine Script v6. Unlike standard SMC tools that clutter your chart with endless, low-probability boxes, FTM Engine utilizes a hidden Multi-Timeframe (MTF) algorithm to track institutional liquidity and filter out fakeouts.
The "Golden OB" 3-Step Strategy:
This indicator is built around a highly specific, high-probability institutional trading model:
Step 1 (Context): The background MTF engine tracks 15m and 30m Fair Value Gaps (FVG). It waits for the price to balance the algorithmic void by hitting the 50% mark (Consequent Encroachment).
Step 2 (Confirmation): If a Lower Timeframe (e.g., 5m) Order Block forms inside or intersecting this mitigated HTF FVG, and is strictly confirmed by a Pinbar or Engulfing candle, the algorithm flags it as a "⭐ Golden OB".
Step 3 (Execution): Upon the very first tap into this Golden OB, the indicator prints a precise 🚀 BUY or 🔻 SELL signal. To prevent overtrading and false signals, each Golden OB fires only once and is then removed from the signal queue.
Key Features:
Real-Time Market Structure: Dynamically plots BOS and CHoCH lines to keep you aligned with the local trend.
Clean Chart Dynamics: Only plots your current timeframe's (Local) FVGs and OBs visually, keeping your screen clutter-free while the 15m/30m logic works silently in the background.
Auto-Mitigation: Standard OBs and FVGs are automatically deleted once breached by a candle close, leaving only valid, fresh zones on your screen.
Advanced Alert System: Specific webhook-ready alerts for every stage of the 3-Step Golden Setup.
Perfect for disciplined day traders and scalpers who value quality setups over quantity.
Indicator
SESSION AMD CLASSIFIER V1A session-based AMD classifier that analyses Asia, London, and New York to identify the day’s Accumulation, Manipulation, and Distribution phases. Each session is assigned one unique role using range behaviour, liquidity sweeps, and directional expansion.
Indicator
Engine smt FTMEngine SMT is a comprehensive, next-generation Smart Money Concepts (SMC) toolkit built with the latest Pine Script v6 features. It is designed to keep your charts clean while providing high-probability institutional setups through a built-in Multi-Timeframe (MTF) engine.
Key Features:
Dynamic FVG & Order Blocks: Automatically detects and plots Bullish/Bearish Fair Value Gaps and Order Blocks. Unmitigated zones are continuously extended in real-time, and instantly deleted once invalidated (mitigated by a candle close), ensuring a noise-free chart.
Multi-Timeframe (MTF) Engine: Seamlessly tracks Higher Timeframe (e.g., 30m) Points of Interest (POIs) in the background while you monitor Lower Timeframes (e.g., 5m) for execution.
Market Structure Mapping: Identifies real-time Break of Structure (BOS), Change of Character (CHoCH), and crucial Liquidity Sweeps.
Advanced Alert System: Features a highly optimized, spam-proof alert module that notifies you on:
New HTF Zone creation.
Price's first tap/interaction with an HTF POI.
LTF confirmation signals (when an LTF FVG/OB forms inside an HTF zone).
Perfect for scalpers and intraday traders looking for an automated, highly responsive, and purely logical SMC setup.
Indicator
Session & Multi-Timeframe Market Map# Session & Multi-Timeframe Market Map
A comprehensive, visual-only market structure indicator that maps the levels
serious intraday traders actually watch — session ranges, the opening range,
higher-timeframe highs/lows, and completed weekday liquidity — all in one
clean, fully customizable overlay.
## What it does
**Session ranges**
- Asia, London, New York, and New York AM session boxes, each independently
toggleable, with high/low lines and labels for Asia and London
- Configurable session windows and timezone (DST handled automatically)
**Opening Range (ORB)**
- The 08:00–08:15 AM ET opening range, built from underlying 1-minute data
regardless of your chart's timeframe — so the range is accurate even on a
5m or 15m chart
- Freezes at 08:15, stays visible with an optional midpoint line through
11:00 AM
**Higher-timeframe levels**
- Previous hour, 4-hour, day, and week highs/lows, each using only the
previous fully completed candle — never the developing one
- Automatically re-anchors when each timeframe rolls over
**Weekday liquidity**
- Monday through Friday highs/lows for the current trading week, appearing
once each day is fully complete — a cumulative map of the week's
liquidity without a moving, incomplete "today" level
**Design**
- Independent color, line style, and visibility controls for every level
family
- Configurable label size, spacing, and lane offsets to prevent overlapping
text when levels sit close together
- Bounded object history — older session instances render faded and are
automatically cleaned up, so the chart never silently hits PulseWire's
drawing object limits
## What it deliberately doesn't do
This is a pure reference tool — it contains no trading logic of any kind:
no signals, no entries or exits, no setups, no alerts, no scoring, and no
external dependencies of any kind. It reads only the chart's own price and
time data and draws what's already there. Nothing here tells you what to
trade — it shows you where the market has already been.
## Design principles
- **Non-repainting by construction.** Every higher-timeframe value uses the
official Pine v6 pattern (` ` offset + `lookahead_on`), showing only
fully completed candles — behavior is identical on historical and live
bars.
- **No approximation.** Session-precision levels (session boxes, ORB,
hourly) are suppressed on timeframes coarse enough to make them
inaccurate, rather than silently drawing a wrong range.
- **Bounded, not leaking.** Every drawing family uses trimmed arrays with a
configurable retention count, so object counts never grow unbounded
across sessions, days, or weeks.
- **Update in place.** Active objects are moved and resized rather than
deleted and recreated every bar, keeping the script efficient even with
many levels enabled simultaneously.
## Ideal use cases
- Traders who build their read of the market around session structure and
liquidity levels rather than indicator-driven signals
- Anyone who wants a single, clean reference map instead of five separate
indicators competing for chart space
- A foundation others can build entry/exit logic on top of — the levels are
exposed cleanly enough to reference in a companion strategy script
---
*Built by Pedro Silva — Pine Script v6 development for custom indicators,
alert systems, and backtesting tools. Open for custom work.*
Indicator
Opening Range Breakout- ORB RPOpening Range Breakout — v1
A clean Pine Script v6 Opening Range Breakout indicator built around a fixed 8:00–8:15 AM New York opening range.
Unlike a traditional ORB that stops shading when the range finishes, this indicator displays the range as one continuous Market Map box from 8:00 AM through 11:00 AM ET. The range height freezes at 8:15, while the complete shaded area remains visible throughout the active trading window.
What it does
Calculates the opening-range high and low from 8:00–8:15 AM ET
Uses the America/New_York timezone for automatic daylight-saving adjustment
Freezes the completed range at 8:15 so later price movement cannot change it
Extends the entire shaded ORB box through 11:00 AM ET
Displays the ORB high, low, and optional midpoint across the full box
Confirms breakouts using candle closes, not intrabar wicks
Generates separate bullish and bearish breakout alerts
Optionally identifies confirmed retests of the broken boundary
Marks the ORB invalid when price confirms breakouts through both sides
Prevents duplicate signals using explicit daily state management
Automatically resets for each new New York trading day
Preserves a configurable number of historical ORB sessions
Includes an optional live status table
Breakout logic
A bullish breakout is confirmed when a candle closes above the completed ORB high between 8:15 and 11:00 AM ET.
A bearish breakout is confirmed when a candle closes below the completed ORB low during the same window.
Wicks outside the range do not count. Signals are evaluated only after the candle closes, preventing intrabar noise and repainting.
If price later confirms a breakout through the opposite boundary, the ORB becomes two-sided and invalid. Additional breakout and retest signals are then suppressed for that session.
Optional retest detection
Retest signals can be enabled when needed:
A bullish retest requires price to return to the ORB high after a bullish breakout and close back above it
A bearish retest requires price to return to the ORB low after a bearish breakout and close back below it
The breakout and retest cannot occur on the same candle
Retests are disabled automatically if the ORB becomes two-sided
Visual customization
Customize the indicator’s:
Box fill and transparency
Box border
ORB high and low colors
Midpoint visibility and style
Line width and line style
Breakout and retest markers
Historical-session lookback
Status-table visibility and position
Live session status
The optional table tracks the ORB through its complete lifecycle:
Waiting for range
Range forming
Range complete
Bullish breakout
Bearish breakout
Bullish retest
Bearish retest
Two-sided or invalid
Session finished
Design principles
Market Map visualization: One continuous shaded range from 8:00–11:00 AM ET, rather than a short formation box followed by disconnected extension lines.
No repainting: Breakouts and retests are confirmed only after a completed candle closes against a range that was already locked at 8:15.
Deterministic session state: Range values, breakout direction, retest eligibility, and invalidation state reset explicitly each trading day.
Clean object management: Historical boxes and signals are controlled through a configurable lookback to respect PulseWire’s drawing limits.
Readable Pine Script v6: The source is organized and documented so clients and developers can understand, customize, and extend it.
What v1 deliberately leaves out
This is an indicator, not an automated trading strategy. It does not include:
Automatic entries or order execution
Profit targets
Stop-loss calculations
Position sizing
Performance statistics
Strategy backtesting
Volume or higher-timeframe confluence filters
The purpose of v1 is to provide a reliable visual map and confirmed ORB event detection without imposing trade-management rules on the user.
Ideal use cases
Traders using the 8:00–8:15 AM ET range in their morning routine
Manual traders who want a clean session map and reliable alerts
Prop-firm traders who need structured breakout confirmation
Developers seeking a foundation for custom retest, target, risk, or automation systems
Clients who need precise session handling and non-repainting Pine Script logic
Built by Pedro Silva using Pine Script v6. Available for custom indicators, alert systems, session tools, strategy development, and backtesting projects.
Indicator
Market Structure Blocks and MTF ZigZagMarket Structure Blocks and MTF ZigZag
Overview
This indicator combines swing-based market structure analysis with Order Blocks, Breaker Blocks, Mitigation Blocks, and configurable multi-timeframe ZigZag overlays.
The primary ZigZag follows the chart timeframe and is used by the original market-structure calculation. A separate secondary ZigZag can display swing structure from another selected timeframe, such as 1 hour or 4 hours, directly on the current chart.
The indicator is intended to help traders organize price structure and identify areas that may be relevant for further analysis. It does not provide automatic trade entries or guarantee that a displayed zone will cause a reaction.
How the market structure is calculated
The script identifies alternating swing highs and swing lows using a configurable ZigZag length.
When the swing direction changes, the indicator stores the newly identified pivot. It then compares recent swing points and applies the Fib Factor setting to determine whether the structure has changed sufficiently to register a Market Structure Break.
The MSB line marks the relevant structural level associated with the detected change.
Block detection
After a market-structure change, the indicator searches the related price leg for candles that can define the following zones:
Bu-OB: Bullish Order Block.
Be-OB: Bearish Order Block.
Bu-BB: Bullish Breaker Block.
Be-BB: Bearish Breaker Block.
Bu-MB: Bullish Mitigation Block.
Be-MB: Bearish Mitigation Block.
The BB or MB classification depends on the relationship between the relevant recent swing points.
A zone can continue extending toward the right side of the chart until its invalidation condition is met. When Delete Old/Broken Boxes is enabled, invalidated zones are removed.
Primary ZigZag
The primary ZigZag represents the indicator's main structure calculation.
Available controls include:
Show or hide the primary ZigZag.
Adjust the primary ZigZag length.
Customize line color.
Choose Solid, Dashed, or Dotted line style.
Adjust line width.
The primary structure calculation, MSB logic, and block creation use the main ZigZag length and the current chart's price data.
Secondary multi-timeframe ZigZag
The secondary ZigZag is an optional and independent overlay.
It runs the same swing-direction and pivot-selection logic inside the selected secondary timeframe. Confirmed secondary-timeframe swing segments are then displayed on the current chart.
Available controls include:
Enable or disable the secondary ZigZag.
Select a secondary timeframe.
Set an independent ZigZag length.
Customize its color.
Choose Solid, Dashed, or Dotted style.
Adjust line width.
For example, a trader can keep the primary 5-minute or 15-minute ZigZag visible while simultaneously displaying the 1-hour or 4-hour structure.
For the most consistent multi-timeframe interpretation, the secondary timeframe should normally be equal to or higher than the current chart timeframe.
Zone visibility
Each zone family can be enabled or disabled independently:
Bullish Order Blocks.
Bearish Order Blocks.
Bullish Breaker Blocks.
Bearish Breaker Blocks.
Bullish Mitigation Blocks.
Bearish Mitigation Blocks.
Disabling a zone type prevents new boxes of that type from being created. This allows the chart to be simplified according to the trader's preferred workflow.
Important settings
Primary / Structure ZigZag Length
Controls the sensitivity of the primary swing calculation.
A smaller value generally identifies more frequent and smaller swings. A larger value generally produces fewer and broader structural swings.
Fib Factor
Controls the additional distance required by the market-state logic when evaluating a structural change.
Increasing this value makes the structural confirmation requirement more restrictive. Reducing it makes the indicator more sensitive to smaller structural changes.
Delete Old/Broken Boxes
When enabled, zones are deleted after their invalidation condition is met. When disabled, invalidated zones are removed from active management but may remain visible historically.
Alerts
The indicator includes alerts for:
A detected Market Structure Break.
Price trading inside a bullish or bearish Order Block.
Price trading inside a bullish or bearish Breaker or Mitigation Block.
Depending on the alert configuration, zone alerts may occur on multiple bars while price remains inside a zone.
Limitations
ZigZag-based tools confirm swing points only after the reversal conditions have been met. A recent developing swing is therefore not considered final until it is confirmed.
The endpoint of a confirmed ZigZag segment can appear on an earlier candle because that candle contained the actual swing high or swing low. This is normal retrospective pivot plotting and should not be interpreted as a signal that was available on the pivot candle itself.
Order Blocks, Breaker Blocks, Mitigation Blocks, and Market Structure Breaks are analytical references, not guaranteed support, resistance, entries, targets, or reversal points.
The indicator does not include position sizing, stop-loss placement, profit targets, execution rules, or risk management.
Suggested workflow
Use the secondary ZigZag to identify broader higher-timeframe structure.
Use the primary ZigZag to study the current chart's internal structure.
Observe where current-chart blocks align with higher-timeframe swing areas.
Wait for independent confirmation before considering a trade.
Define risk and invalidation before entering a position.
Credits and open-source reuse
The original Market Structure Break and Order Block code base was created by EmreKb.
This modified open-source version adds configurable primary ZigZag styling, an independently calculated multi-timeframe ZigZag overlay, separate secondary ZigZag sensitivity controls, and individual visibility controls for bullish and bearish Order Blocks, Breaker Blocks, and Mitigation Blocks.
The original author is credited both in the source-code header and in this publication description.
Disclaimer
This indicator is provided for chart analysis, education, and research. It is not financial advice and does not guarantee future market behavior. Users are responsible for independently evaluating all information, managing risk, and making their own trading decisions.
Indicator
Smoothed Heikin Ashi Strip# Smoothed Heikin Ashi Strength Strip
## Overview
The Smoothed Heikin Ashi Strength Strip is a compact trend-following and trend-pressure indicator. It summarizes the direction and relative size of smoothed Heikin Ashi candle bodies in a separate panel beneath the price chart.
Instead of drawing another set of candles over the price chart, the indicator displays a simple colored strip:
- Green represents a bullish smoothed Heikin Ashi body.
- Red represents a bearish smoothed Heikin Ashi body.
- Bright colors represent larger-than-usual bodies.
- Dim colors represent smaller-than-usual bodies.
This makes it possible to see changes in trend direction and pressure without covering the price chart with additional candles.
The indicator is not designed to generate automatic buy or sell signals. It is a visual tool for identifying trend conditions, trend expansion, slowing momentum, consolidation, and possible reversion environments.
## Understanding Heikin Ashi
Heikin Ashi is a method of rebuilding price candles using averaged price information. Traditional candles display the actual open, high, low, and close for each period. Heikin Ashi candles use calculated values designed to reduce some of the normal bar-to-bar noise.
Because Heikin Ashi values are calculated, they should not be mistaken for actual traded prices. Their purpose is to make the underlying trend easier to see.
This indicator applies additional smoothing before and after calculating the Heikin Ashi values, producing a slower and cleaner representation of the trend.
## How the indicator is calculated
The default configuration uses EMA 10/10 smoothing.
### First smoothing pass
The indicator applies a 10-period exponential moving average to the chart’s open, high, low, and close prices.
This reduces some of the short-term movement in the original price data.
### Heikin Ashi calculation
The indicator then constructs Heikin Ashi open and close values from the smoothed price data.
These two values create the smoothed Heikin Ashi body:
- When the Heikin Ashi close is above its open, the body is bullish.
- When the Heikin Ashi close is below its open, the body is bearish.
### Second smoothing pass
A second 10-period exponential moving average is applied to the Heikin Ashi open and close.
This additional smoothing reduces rapid color changes and emphasizes the broader trend.
### Body-width measurement
The indicator measures the distance between the final smoothed Heikin Ashi open and close:
`Body width = absolute value of HA close − HA open`
A wider body represents a larger difference between the two values. A narrower body represents a smaller difference.
### Relative body strength
Raw body sizes are difficult to compare because every symbol and timeframe uses different price units. The indicator therefore compares the current body width with the preceding average body width.
By default, the comparison baseline is the 20-period EMA of previous smoothed Heikin Ashi body widths.
This produces a relative measurement:
- A ratio below 1.0 means the current body is smaller than its recent average.
- A ratio near 1.0 means the body is approximately average-sized.
- A ratio above 1.0 means the body is larger than its recent average.
- With the default settings, a body at least 2.0 times its recent average receives maximum brightness.
## Reading the strip
### Bright green
Bright green means the smoothed Heikin Ashi body is bullish and relatively large.
This generally represents expanding bullish trend pressure. It does not guarantee that price will continue higher, but it indicates that the bullish body is strong compared with recent bodies.
### Dim green
Dim green means the smoothed Heikin Ashi body remains bullish but has become relatively small.
This may indicate:
- Slowing bullish pressure
- Trend consolidation
- Reduced volatility
- Temporary hesitation
- A possible transition toward reversion
A dim green bar is not automatically bearish. The smoothed body is still bullish; it is simply smaller than usual.
### Bright red
Bright red means the smoothed Heikin Ashi body is bearish and relatively large.
This generally represents expanding bearish trend pressure. It does not guarantee that price will continue lower.
### Dim red
Dim red means the body remains bearish but is relatively small.
This may indicate:
- Slowing bearish pressure
- Consolidation
- Reduced volatility
- Temporary hesitation
- A possible transition toward reversion
A dim red bar is not automatically bullish. It only shows that the bearish body has contracted.
## Reading sequences instead of individual bars
The indicator is most useful when viewed as a developing sequence.
### Strengthening trend
A sequence that becomes progressively brighter while maintaining the same color suggests that the smoothed Heikin Ashi bodies are expanding relative to their recent history.
### Slowing trend
A sequence that gradually becomes dimmer while maintaining the same color suggests that the bodies are contracting.
The trend direction has not yet changed, but its pressure may be slowing.
### Possible transition
A dim sequence followed by a color change may indicate that the previous trend weakened before the smoothed Heikin Ashi direction changed.
This can help identify a possible transition or reversion environment, but the color change should not be treated as a guaranteed entry.
### Choppy conditions
Frequent changes between dim green and dim red often indicate an unclear or sideways environment.
Because neither side is producing large bodies, this condition may be less suitable for trend-following decisions.
### Strong directional change
A transition from one color to a bright opposite color represents a more forceful change than a transition involving dim colors.
It still requires confirmation from price structure and risk management.
## Display modes
### Intensity Strip
This is the default display.
Every column has the same height. Body strength is represented by brightness:
- Dim means a smaller relative body.
- Bright means a larger relative body.
This mode produces the cleanest and most compact trend strip.
### Body-Width Histogram
In this mode, relative body width controls both brightness and column height.
- Smaller bodies create shorter, dimmer columns.
- Larger bodies create taller, brighter columns.
This mode makes changes in body size more visually obvious, although it occupies slightly more chart space.
## Indicator settings
### Smoothing Type
The indicator supports EMA and HMA smoothing.
EMA is the default and provides a balanced, steadily smoothed result.
HMA is generally more responsive. It may recognize changes sooner, but it can also produce more rapid changes and additional visual noise.
The selected smoothing method is applied to both smoothing passes.
### Pre-Smoothing Length
This controls how strongly the original open, high, low, and close prices are smoothed before the Heikin Ashi calculation.
The default is 10.
A smaller value makes the indicator more responsive but potentially noisier. A larger value makes it smoother but slower.
### Post-Smoothing Length
This controls how strongly the calculated Heikin Ashi open and close are smoothed.
The default is 10.
Increasing this value creates a steadier strip but introduces more lag. Decreasing it produces a faster but more sensitive strip.
### Typical Body Lookback
This determines how many periods are used to estimate the normal smoothed Heikin Ashi body width.
The default is 20.
A shorter lookback adapts more quickly to changing market conditions. A longer lookback produces a more stable reference.
### Full Strength at Body Multiple
This determines how large a body must be, relative to its normal size, to receive maximum brightness.
The default is 2.0.
With this setting, a body approximately twice its recent typical width is fully bright.
Lowering this value causes the strip to reach maximum brightness more easily. Raising it reserves maximum brightness for more unusually large bodies.
### Small-Body Transparency
This controls how dim very small bodies appear.
A higher value makes small bodies more transparent. A lower value keeps them more visible.
### Colors
The bullish and bearish colors can be changed to match the chart theme or personal preference.
## Timeframe behavior
The indicator performs its calculations using the chart’s current timeframe.
For example:
- On a daily chart, every strip column represents one trading day.
- On a weekly chart, every column represents one week.
- On a monthly chart, every column represents one month.
Changing the chart timeframe changes the underlying calculations. A bullish daily strip can exist at the same time as a bearish weekly strip because the two timeframes describe different market structures.
## Practical workflow
A simple way to begin using the indicator is:
1. Leave the smoothing settings at EMA 10/10.
2. Use the default Intensity Strip display.
3. Reduce the indicator panel to a thin ribbon.
4. Observe the color to identify the smoothed trend direction.
5. Observe brightness to evaluate whether the bodies are expanding or contracting.
6. Pay attention to sequences rather than reacting to one bar.
7. Confirm important observations using actual price structure, support and resistance, volume, or another independent method.
8. Base decisions on completed bars when possible.
## Important limitations
This indicator does not display actual trade prices. It uses calculated and smoothed Heikin Ashi values.
The two smoothing passes create lag. The strip will generally react later than raw price, especially when longer smoothing settings are used.
Brightness is relative, not absolute. A fully bright body is large compared with that symbol’s recent bodies. It may still be small in absolute price terms.
A dim body can represent slowing trend pressure, but it can also represent ordinary consolidation or reduced volatility. It does not guarantee an approaching reversal.
A large body shows expansion, but it does not guarantee continuation. Large bodies can also occur near exhaustion points.
The current unfinished bar can change color and brightness as the market moves. A bar’s final condition is only known after that bar closes.
The indicator does not provide entries, exits, profit targets, stop-loss levels, or position sizing.
## Summary
The Smoothed Heikin Ashi Strength Strip compresses three useful observations into one clean display:
- Green or red identifies the smoothed Heikin Ashi body direction.
- Brightness shows the body’s relative size.
- Changes in brightness show expansion or contraction in trend pressure.
It is best used as a trend and market-condition tool—not as a standalone trading signal.
Indicator
Liquidity Sweeps & Inverse FVGLiquidity sweep detection
Wick sweeps
Breakout-and-retest sweeps
Bullish and bearish FVG detection
IFVG confirmation after a candle closes through the gap
ATR volatility filtering
EMA/SMA trend filtering
IFVG alerts
Indicator
CME Full Session Start & Close TagsPlaces Daily Start Price and End Price Tags, Places Daily Start Price and End Price Tags, Places Daily Start Price and End Price Tags, Places Daily Start Price and End Price Tags, Places Daily Start Price and End Price Tags.
Indicator
PDH/PDL Sweep with CVD Divergenceit works like a swing failure pattern , sweep of previous day high and low gives a buy or sell signal with the confluence of CVD , this only works in a ranging market and struggles in a trending market , once you see HH HL in a chart then avoid taking trades based on this , this only works in a range like equal Highs or pooor high/Low
Indicator
MJC SharkfinBullish Reversal: When the yellow RSI line pierces below the lower blue band and rapidly hooks back inside, it creates a point looking like an upside-down shark fin—signaling a potential long entry.
Bearish Reversal: When the yellow RSI line pierces above the upper blue band and sharply hooks back down inside, it creates a classic "shark fin" shape—signaling an overextended market and a potential short setup.
The indicator is a custom variation of the Traders Dynamic Index (TDI). It combines Relative Strength Index (RSI) and Bollinger Bands into a single oscillator pane below your chart to identify short-term momentum extremes (the "shark fins") and potential reversal points.
Indicator























