RSI Sigmoid (Saturation)# 📊 RSI Sigmoid (Saturation) Indicator
---
## 🎯 What Does This Indicator Do?
This indicator transforms the traditional **RSI (Relative Strength Index)** using a **sigmoid function**, creating a mathematically "saturated" version that provides smoother, more controlled momentum signals.
---
## ✨ Key Features
### 🌊 **Saturation Effect**
Unlike standard RSI which oscillates wildly between 0-100, this version uses a **hyperbolic tangent function** to compress extreme values:
- 🔴 **Extreme readings** (very high/low) are dampened → pushed toward saturation zones (10 & 90)
- 🟡 **Middle range** (30-70) remains responsive and dynamic
- 🟢 **Sharp spikes** are smoothed while maintaining trend direction
### 👁️ **Dual Visualization**
- **🔵 Blue Line**: RSI Sigmoid (Saturated) - Your primary signal
- **🟠 Orange Circles**: Traditional RSI - For comparison
- **🟣 Purple Area**: Difference plot showing transformation intensity
### 🎯 **Smart Signals**
- **▲ Green Triangle**: Buy Signal when RSI Sigmoid crosses **above 50**
- **▼ Red Triangle**: Sell Signal when RSI Sigmoid crosses **below 50**
- **🎨 Background Colors**: Highlight oversold, overbought, and saturation zones
---
## ⚙️ How to Use
### 📐 **RSI Period** (Default: 50)
```
Higher Values (70-100) → Smoother, slower, fewer signals
Lower Values (14-30) → More responsive, more signals, noisier
```
### 🎚️ **Sigmoid Coefficient** (Default: 0.5)
```
Low (0.1-0.2) → Gentle saturation, closer to standard RSI
Medium (0.25) → Balanced transformation
High (0.3-0.5) → Aggressive saturation, strong dampening
```
### 📍 **Oversold/Overbought Levels**
Customize based on your:
- Trading timeframe (1m, 5m, 1h, 1D, etc.)
- Asset volatility
- Trading style (scalping, swing, position)
---
## 🔍 What to Watch For
| Signal | Meaning | Action |
|--------|---------|--------|
| 🟢 **Cross Above 50** | Bullish momentum shift | Consider long positions |
| 🔴 **Cross Below 50** | Bearish momentum shift | Consider short positions |
| ⚡ **Saturation < 10** | Extreme oversold | Potential reversal up |
| 🔥 **Saturation > 90** | Extreme overbought | Potential reversal down |
| 🟣 **Large Difference** | High transformation intensity | Strong momentum dampening |
---
## 💡 Trading Tips
✅ **DO:**
- Use multiple timeframes for confirmation
- Combine with support/resistance levels
- Apply proper risk management (stop-loss, position sizing)
- Backtest settings on your specific asset
- Watch for divergences between price and indicator
❌ **DON'T:**
- Rely solely on this indicator
- Ignore market context and fundamentals
- Over-leverage based on signals
- Use default settings without testing
- Trade without a clear strategy
---
## ⚠️ IMPORTANT DISCLAIMERS
### 🚨 **NOT Financial Advice**
This indicator is provided for **educational and informational purposes only**. It does not constitute financial, investment, or trading advice.
### 🛡️ **Risk Warning**
- ❌ **No guarantee of profits** - Past performance ≠ future results
- ❌ **Do not rely on this alone** - Always use multiple analysis methods
- ❌ **Markets are unpredictable** - No indicator can predict with certainty
- ❌ **You can lose money** - Never risk more than you can afford to lose
### 🎛️ **Customization Required**
All settings are **user-configurable** for a reason:
- Default values may NOT suit your strategy
- Different assets require different parameters
- Always backtest before live trading
- Adjust based on your timeframe and risk tolerance
### 📜 **Your Responsibility**
- ✓ You are responsible for your own trading decisions
- ✓ Always do your own research (DYOR)
- ✓ Understand the risks before trading
- ✓ Consider consulting a licensed financial advisor
---
## 📋 Quick Settings Guide
| Trading Style | RSI Period | Sigmoid K | Notes |
|---------------|------------|-----------|-------|
| **Scalping** | 14-21 | 0.3-0.4 | Fast signals, higher noise |
| **Day Trading** | 30-50 | 0.4-0.5 | Balanced responsiveness |
| **Swing Trading** | 50-70 | 0.5 | Smoother, fewer false signals |
| **Position Trading** | 70-100 | 0.5 | Very smooth, major trends only |
---
## 🏷️ License & Liability
**Use at your own risk.** The creator assumes **no liability** for any trading losses, damages, or consequences resulting from the use of this indicator.
---
### 🤝 Happy Trading & Stay Safe! 📈
*Remember: The best indicator is your own knowledge and discipline.*
Osilator Terpusat / Centered Oscillators
Order Blocks INDIBOT 3D | INDIBOT ABO SALTAN 11 //@version=6
indicator("Order Blocks INDIBOT 3D | INDIBOT ABO SALTAN ", overlay = true,
max_boxes_count = 500, max_labels_count = 500, max_lines_count = 500, max_polylines_count = 100, max_bars_back = 5000)
//#region CONSTANTS
// Core constants that control stored OB capacity and label size.
const int MAX_STORED_OBS = 50
const int retestSize = 4
//#endregion
//#region INPUTS
// Core user controls for OB behavior, volume delta, 3D style and alerts.
grpOB = "ORDER BLOCKS"
swingLen = input.int(5, "Swing Length", minval = 1, group = grpOB, inline = "sw", display = display.none)
bullObColor = input.color(color.new(color.teal, 55), "", group = grpOB, inline = "sw")
bearObColor = input.color(color.new(color.red, 55), "", group = grpOB, inline = "sw")
invMethod = input.string("Wick", "Invalidation", options = , group = grpOB, display = display.none)
showNearestX = input.int(3, "Show Nearest", minval = 1, maxval = 20, group = grpOB, display = display.none)
extendZones = input.int(10, "Extend Zones", minval = 0, group = grpOB,
tooltip = "This will extend the zones by X candles.", display = display.none)
showRetestLbl = input.bool(true, "Retest Labels", group = grpOB, inline = "tog")
hideInvalid = input.bool(true, "Hide Invalidated Zones", group = grpOB, inline = "tog")
grpVD = "VOLUME DELTA"
vdEnable = input.bool(true, "Enable", group = grpVD, inline = "vd")
vdBullColor = input.color(color.new(color.teal, 65), "", group = grpVD, inline = "vd")
vdBearColor = input.color(color.new(color.red, 65), "", group = grpVD, inline = "vd")
vd3D = input.bool(true, "3D", group = grpVD, inline = "3d", tooltip = "Adds 3D-style depth faces.") and vdEnable
vd3DDepth = input.int(5, "", group = grpVD, inline = "3d", minval = 1, maxval = 5, display = display.none)
displayStyle = input.string("Vertical", "Display Style", options = , group = grpVD,
tooltip = "Horizontal: split shown top/bottom. Vertical: split shown left/right across the zone.", display = display.none)
vdTfIn = input.timeframe("", "Volume Delta Timeframe", group = grpVD,
tooltip = "Lower timeframe used to estimate delta")
showTotalVol = input.bool(true, "Display Total Volume", group = grpVD,
tooltip = "Displays total volume (Bull+Bear) from the active delta source.", inline = "vd2") and vdEnable
showDeltaPct = input.bool(true, "Show Delta %", group = grpVD, inline = "vd2",
tooltip = "Shows bullish vs bearish volume split. If selected TF is lower than chart TF, uses LTF data; otherwise uses chart TF.") and vdEnable
vdTextColor = input.color(color.white, "", group = grpVD, inline = "vd2")
grpAL = "ALERTS"
alBullOB = input.bool(true, "Bullish Order Block", group = grpAL, inline = "oba")
alBearOB = input.bool(true, "Bearish Order Block", group = grpAL, inline = "oba")
alBullRetest = input.bool(true, "Bullish OB Retest", group = grpAL, inline = "obr")
alBearRetest = input.bool(true, "Bearish OB Retest", group = grpAL, inline = "obr")
//#endregion
//#region TYPES
// Custom structs for order blocks and 3D poly drawing.
type PolyParams
array points
color lineColor
color fillColor
int lineWidth
type ObRec
int leftIndex
int leftTime
int createdIndex
int createdTime
float top
float bottom
bool isBull
bool active
bool retested
int retestIndex
int retestTime
int invalidIndex
int invalidTime
float bullVol
float bearVol
float totalVol
float bullPct
float bearPct
bool hasDelta
type RetestRec
int barIndex
bool isBull
int obLeftIndex
int obCreatedIndex
//#endregion
//#region GENERIC HELPERS
// Small utilities: clearing drawings, geometry helpers, nearest-OB picking.
method clearAll(array bx, array pl, array lb) =>
if bx.size() > 0
for i = 0 to bx.size() - 1
bx.get(i).delete()
bx.clear()
if pl.size() > 0
for i = 0 to pl.size() - 1
pl.get(i).delete()
pl.clear()
if lb.size() > 0
for i = 0 to lb.size() - 1
lb.get(i).delete()
lb.clear()
// Builds a simple side face for 3D-style boxes using chart points.
method sideBox(array pts, int x, float btm, float top, float depthY, int widthX) =>
pts.unshift(chart.point.from_index(x, btm))
pts.unshift(chart.point.from_index(x + widthX, btm + depthY))
pts.unshift(chart.point.from_index(x + widthX, top + depthY))
pts.unshift(chart.point.from_index(x, top))
pts.unshift(chart.point.from_index(x, btm))
// Returns true if a candle's high/low intersects the OB zone.
touchesZone(float zTop, float zBot, float cHigh, float cLow) =>
cHigh >= zBot and cLow <= zTop
// Distance from price to zone in price units, used to rank nearest zones.
zoneDistance(float px, float zTop, float zBot) =>
px > zTop ? px - zTop : px < zBot ? zBot - px : 0.0
// Inserts a distance+index pair into a sorted list, capped at kMax.
method insertBest(array dists, array idxs, float dist, int idx, int kMax) =>
if dists.size() == 0
dists.push(dist)
idxs.push(idx)
else
int pos = dists.size()
if dists.size() > 0
for j = 0 to dists.size() - 1
if dist < dists.get(j)
pos := j
break
dists.insert(pos, dist)
idxs.insert(pos, idx)
while dists.size() > kMax
dists.pop()
idxs.pop()
// Picks the k nearest bull/bear OBs to current price (optionally including invalid).
pickNearest(array store, bool wantBull, int kMax, bool includeInvalid) =>
array dists = array.new_float()
array idxs = array.new_int()
if store.size() > 0
for i = 0 to store.size() - 1
ObRec ob = store.get(i)
if ob.isBull == wantBull
bool ok = includeInvalid ? true : ob.active
if ok
float dist = zoneDistance(close, ob.top, ob.bottom)
dists.insertBest(idxs, dist, i, kMax)
idxs
formatVol(float v) =>
str.tostring(v, format.volume)
//#endregion
//#region VOLUME ENGINE (CHART OR LOWER TF)
// Per-bar total / bull / bear volume
tfSec(string tf) =>
timeframe.in_seconds(tf)
int chartSec = tfSec(timeframe.period)
int srcSec = tfSec(vdTfIn)
bool useLtf = not na(chartSec) and not na(srcSec) and srcSec < chartSec
getBarVols() =>
float tot = na
float bull = na
float bear = na
if not useLtf or vdTfIn == ""
float v = volume
bool up = close > open
bool dn = close < open
tot := v
bull := up ? v : 0.0
bear := dn ? v : 0.0
else
array oArr = request.security_lower_tf(syminfo.tickerid, vdTfIn, open)
array cArr = request.security_lower_tf(syminfo.tickerid, vdTfIn, close)
array vArr = request.security_lower_tf(syminfo.tickerid, vdTfIn, volume)
float tSum = 0.0
float bSum = 0.0
float sSum = 0.0
int n = array.size(vArr)
if n > 0
for i = 0 to n - 1
float v2 = array.get(vArr, i)
float o2 = array.get(oArr, i)
float c2 = array.get(cArr, i)
tSum += v2
if c2 > o2
bSum += v2
else if c2 < o2
sSum += v2
tot := tSum
bull := bSum
bear := sSum
= getBarVols()
//#endregion
//#region POC ENGINE (MOST-TOUCHED PRICE + VOLUME)
// Finds a POC between swing and BOS, then aggregates volume.
findMostTouchedPrice(int fromIdx, int toIdx, int nBins) =>
int span = toIdx - fromIdx
if span <= 0 or na(fromIdx) or na(toIdx)
else
float minP = 1e10
float maxP = -1e10
for idx = fromIdx to toIdx
int rel = bar_index - idx
if rel >= 0
float lo = low
float hi = high
if not na(lo) and not na(hi)
if lo < minP
minP := lo
if hi > maxP
maxP := hi
if not (minP < maxP)
else
float step = (maxP - minP) / nBins
step := step <= 0 ? syminfo.mintick : step
array diffCnt = array.new_float(nBins, 0.0)
for idx = fromIdx to toIdx
int rel2 = bar_index - idx
if rel2 >= 0
float lo2 = low
float hi2 = high
if not na(lo2) and not na(hi2)
int sBin = int(math.floor((lo2 - minP) / step))
int eBin = int(math.floor((hi2 - minP) / step))
sBin := sBin < 0 ? 0 : sBin > nBins - 1 ? nBins - 1 : sBin
eBin := eBin < 0 ? 0 : eBin > nBins - 1 ? nBins - 1 : eBin
float cStart = diffCnt.get(sBin)
diffCnt.set(sBin, cStart + 1.0)
if eBin + 1 < nBins
float cEnd = diffCnt.get(eBin + 1)
diffCnt.set(eBin + 1, cEnd - 1.0)
int bestBin = 0
float bestCnt = 0.0
float runCnt = 0.0
for i = 0 to nBins - 1
runCnt += diffCnt.get(i)
if runCnt > bestCnt
bestCnt := runCnt
bestBin := i
float poc = minP + (bestBin + 0.5) * step
// Aggregates total / bull / bear volume at a single price level (POC) for a range.
volumeAtPrice(int fromIdx, int toIdx, float poc) =>
int touches = 0
float totVol = 0.0
float bullVol = 0.0
float bearVol = 0.0
int span = toIdx - fromIdx
if not na(poc) and span >= 0
for step = 0 to span
int idx = toIdx - step
int rel = bar_index - idx
if rel >= 0
float lo = low
float hi = high
if not na(lo) and not na(hi) and lo <= poc and hi >= poc
touches += 1
float vTot = barTotVol
float vBull = barBullVol
float vBear = barBearVol
if not na(vTot)
totVol += vTot
if not na(vBull)
bullVol += vBull
if not na(vBear)
bearVol += vBear
// Wrapper: find POC first, then compute volume at that POC for the BOS range.
calcMostTouchedPriceVol(int fromIdx, int toIdx, int nBins) =>
= findMostTouchedPrice(fromIdx, toIdx, nBins)
= volumeAtPrice(fromIdx, toIdx, poc)
//#endregion
//#region ORDER BLOCK ENGINE (POC-BASED)
// Detects swing highs/lows, confirms BOS, anchors OB at first POC touch.
var array obs = array.new()
var array obRetests = array.new()
var int lastBullRetestBar = na
var int lastBearRetestBar = na
var float shPrice = na
var int shIdx = na
var float slPrice = na
var int slIdx = na
bool evNewBullOB = false
bool evNewBearOB = false
bool evBullRetest = false
bool evBearRetest = false
float ph = ta.pivothigh(high, swingLen, swingLen)
float pl = ta.pivotlow(low, swingLen, swingLen)
if not na(ph)
shPrice := ph
shIdx := bar_index - swingLen
if not na(pl)
slPrice := pl
slIdx := bar_index - swingLen
bool bosBearNow = not na(slPrice) and bar_index > slIdx and close < slPrice and close >= slPrice
bool bosBullNow = not na(shPrice) and bar_index > shIdx and close > shPrice and close <= shPrice
bool bosBear = bosBearNow
bool bosBull = bosBullNow
// Precompute BOS ranges and POC stats in global scope
int bosIdxBear = bar_index - 1
int fromIdxBear = slIdx
int toIdxBear = bosIdxBear
= calcMostTouchedPriceVol(fromIdxBear, toIdxBear, 40)
int bosIdxBull = bar_index - 1
int fromIdxBull = shIdx
int toIdxBull = bosIdxBull
= calcMostTouchedPriceVol(fromIdxBull, toIdxBull, 40)
// Keeps OB array trimmed to recent history and limits max stored OBs.
pruneObs() =>
int minLeft = math.max(0, bar_index - 4999)
if obs.size() > 0
for i = obs.size() - 1 to 0
ObRec ob = obs.get(i)
if ob.leftIndex < minLeft
obs.remove(i)
while obs.size() > MAX_STORED_OBS
bool removed = false
if obs.size() > 0
for j = obs.size() - 1 to 0
ObRec ob2 = obs.get(j)
if not ob2.active
obs.remove(j)
removed := true
break
if not removed and obs.size() > 0
obs.pop()
// Creates and seeds an OB record using a POC-anchored candle and BOS volumes.
addObFromPoc(int baseIdx, float top, float bottom, bool isBull, float totSeed, float bullSeed, float bearSeed, int createdIdx) =>
int offLeft = bar_index - baseIdx
int offCreated = bar_index - createdIdx
int leftTime = time
int createdTm = time
float tot = totSeed
float bVol = bullSeed
float sVol = bearSeed
bool hasDelta = tot > 0.0
float bullPct = hasDelta ? math.round((bVol / tot) * 100.0) : 50.0
float bearPct = hasDelta ? 100.0 - bullPct : 50.0
obs.unshift(ObRec.new(baseIdx, leftTime, createdIdx, createdTm, top, bottom, isBull,
true, false, na, na, na, na, bVol, sVol, tot, bullPct, bearPct, hasDelta))
pruneObs()
// Returns true if a proposed zone overlaps any active OB
obOverlapsActive(float zoneTop, float zoneBottom) =>
float zTop = math.max(zoneTop, zoneBottom)
float zBot = math.min(zoneTop, zoneBottom)
bool overlaps = false
if obs.size() > 0
for i = 0 to obs.size() - 1
ObRec ob = obs.get(i)
if ob.active
float oTop = math.max(ob.top, ob.bottom)
float oBot = math.min(ob.top, ob.bottom)
bool rangeOverlap = zTop >= oBot and zBot <= oTop
if rangeOverlap
overlaps := true
break
overlaps
// Returns true if there is a price gap between anchorIdx and bosIdx.
hasGapBetween(int anchorIdx, int bosIdx, bool isBull) =>
bool gap = false
int fromIdx = math.min(anchorIdx, bosIdx)
int toIdx = math.max(anchorIdx, bosIdx)
if toIdx - fromIdx >= 1
for absIdx = fromIdx + 1 to toIdx
int relNow = bar_index - absIdx
int relPrev = relNow + 1
if relNow >= 0 and relPrev >= 0
float hiPrev = high
float loPrev = low
float hiNow = high
float loNow = low
if not na(hiPrev) and not na(loPrev) and not na(hiNow) and not na(loNow)
if isBull
if loNow > hiPrev
gap := true
break
else
if hiNow < loPrev
gap := true
break
gap
// Bearish BOS → Bearish OB
if bosBear
int bosIdx = bosIdxBear
int fromIdx = fromIdxBear
int toIdx = toIdxBear
if not na(pocB) and touchesB > 0 and not na(fromIdx) and not na(toIdx)
int spanB = toIdx - fromIdx
int bestIdx = na
float runMaxHigh = na
if spanB >= 0
for step = 0 to spanB
int idx = toIdx - step
int rel = bar_index - idx
if rel >= 0
float lo = low
float hi = high
if not na(lo) and not na(hi)
runMaxHigh := na(runMaxHigh) ? hi : math.max(runMaxHigh, hi)
bool touches = lo <= pocB and hi >= pocB
if touches and hi == runMaxHigh
bestIdx := idx
bool gapLeg = not na(bestIdx) ? hasGapBetween(bestIdx, bosIdx, false) : false
if not na(bestIdx) and not gapLeg
int relBest = bar_index - bestIdx
float top = high
float bottom = low
if not obOverlapsActive(top, bottom)
addObFromPoc(bestIdx, top, bottom, false, totVolB, bullVolB, bearVolB, bosIdx)
evNewBearOB := true
slPrice := na
slIdx := na
// Bullish BOS → Bullish OB
if bosBull
int bosIdx2 = bosIdxBull
int fromIdx2 = fromIdxBull
int toIdx2 = toIdxBull
if not na(pocH) and touchesH > 0 and not na(fromIdx2) and not na(toIdx2)
int spanH = toIdx2 - fromIdx2
int bestIdx2 = na
float runMinLow = na
if spanH >= 0
for step = 0 to spanH
int idx2 = toIdx2 - step
int rel2 = bar_index - idx2
if rel2 >= 0
float lo2 = low
float hi2 = high
if not na(lo2) and not na(hi2)
runMinLow := na(runMinLow) ? lo2 : math.min(runMinLow, lo2)
bool touches = lo2 <= pocH and hi2 >= pocH
if touches and lo2 == runMinLow
bestIdx2 := idx2
bool gapLeg2 = not na(bestIdx2) ? hasGapBetween(bestIdx2, bosIdx2, true) : false
if not na(bestIdx2) and not gapLeg2
int relBest2 = bar_index - bestIdx2
float top2 = high
float bottom2 = low
if not obOverlapsActive(top2, bottom2)
addObFromPoc(bestIdx2, top2, bottom2, true, totVolH, bullVolH, bearVolH, bosIdx2)
evNewBullOB := true
shPrice := na
shIdx := na
// Invalidation and retest detection for existing OBs.
if obs.size() > 0
for i = 0 to obs.size() - 1
ObRec ob = obs.get(i)
if ob.active
bool invalid = false
int invIdx = na
int invTime = na
if ob.isBull
if invMethod == "Wick"
invalid := low < ob.bottom
invIdx := bar_index
invTime := time
else
if bar_index > 0
invalid := close < ob.bottom
invIdx := bar_index - 1
invTime := time
else
if invMethod == "Wick"
invalid := high > ob.top
invIdx := bar_index
invTime := time
else
if bar_index > 0
invalid := close > ob.top
invIdx := bar_index - 1
invTime := time
if invalid
ob.active := false
ob.invalidIndex := invIdx
ob.invalidTime := invTime
bool retestPrev = false
int retestBar = na
int retestTm = na
if bar_index > 0
if ob.isBull
bool opensAbovePrev = open > ob.top
bool closesAbovePrev = close > ob.top
bool wickTouchesPrev = low <= ob.top and low >= ob.bottom
retestPrev := opensAbovePrev and closesAbovePrev and wickTouchesPrev
else
bool opensBelowPrev = open < ob.bottom
bool closesBelowPrev = close < ob.bottom
bool wickTouchesPrev = high >= ob.bottom and high <= ob.top
retestPrev := opensBelowPrev and closesBelowPrev and wickTouchesPrev
if retestPrev
retestBar := bar_index - 1
retestTm := time
if retestPrev and not na(retestBar) and retestBar > ob.createdIndex
ob.retested := true
ob.retestIndex := retestBar
ob.retestTime := retestTm
int lastSideBar = ob.isBull ? lastBullRetestBar : lastBearRetestBar
bool canLog = na(lastSideBar) or retestBar - lastSideBar >= 4
if canLog
obRetests.unshift(RetestRec.new(retestBar, ob.isBull, ob.leftIndex, ob.createdIndex))
if ob.isBull
evBullRetest := true
lastBullRetestBar := retestBar
else
evBearRetest := true
lastBearRetestBar := retestBar
obs.set(i, ob)
//#endregion
//#region DRAW ENGINE (ZONES + VOLUME + 3D)
// Handles all boxes, polylines and labels for OBs and 3D faces.
bool showVD = vdEnable
bool isVert = displayStyle == "Vertical"
bool isHorz = not isVert
float dayAtr = ta.atr(14)
var array allBoxes = array.new()
var array allPolys = array.new()
var array allLabels = array.new()
drawPoly(PolyParams pp) =>
if not na(pp) and not na(pp.points) and pp.points.size() > 0
allPolys.unshift(polyline.new(points = pp.points, line_color = pp.lineColor, fill_color = pp.fillColor))
method pushBox(array store, box b) =>
store.unshift(b)
method pushLabel(array store, label l) =>
store.unshift(l)
// Chooses base colors for OB zones depending on vdEnable and bull/bear type.
obColors(ObRec ob) =>
color bullCol = vdEnable ? vdBullColor : bullObColor
color bearCol = vdEnable ? vdBearColor : bearObColor
color baseCol = ob.isBull ? bullCol : bearCol
color faded = ob.active ? baseCol : color.new(baseCol, 85)
// Computes right-most bar index for drawing an OB, considering extension and invalidation.
obRightIndex(ObRec ob) =>
int activeRight = bar_index + extendZones
if ob.active
activeRight
else
na(ob.invalidIndex) ? activeRight : ob.invalidIndex
// Draws the main OB zone box on the chart.
drawObZoneBox(ObRec ob, color faded) =>
int xR = obRightIndex(ob)
int xL = ob.leftIndex
int minBar = bar_index - 4999
if xL < minBar
xL := minBar
xR := math.max(xR, xL)
box bx = box.new(left = xL, right = xR, top = ob.top, bottom = ob.bottom, xloc = xloc.bar_index, bgcolor = faded, border_color = na, border_width = 0)
allBoxes.pushBox(bx)
// Draws a retest marker (triangle) when price revisits an OB.
drawRetestLabels(array bullAct, array bearAct, array bullInv, array bearInv) =>
int ret = 0
if showRetestLbl and obRetests.size() > 0
int minBar = bar_index - 4999
int lastBullLbl = na
int lastBearLbl = na
for i = obRetests.size() - 1 to 0
RetestRec r = obRetests.get(i)
if r.barIndex < minBar or r.barIndex > bar_index
RetestRec _trash = obRetests.remove(i)
else
bool hasDisplayedParent = false
if r.isBull
if bullAct.size() > 0
for j = 0 to bullAct.size() - 1
ObRec ob = obs.get(bullAct.get(j))
if ob.leftIndex == r.obLeftIndex and ob.createdIndex == r.obCreatedIndex
hasDisplayedParent := true
break
if not hasDisplayedParent and not hideInvalid and bullInv.size() > 0
for j = 0 to bullInv.size() - 1
ObRec ob = obs.get(bullInv.get(j))
if ob.leftIndex == r.obLeftIndex and ob.createdIndex == r.obCreatedIndex
hasDisplayedParent := true
break
else
if bearAct.size() > 0
for j = 0 to bearAct.size() - 1
ObRec ob = obs.get(bearAct.get(j))
if ob.leftIndex == r.obLeftIndex and ob.createdIndex == r.obCreatedIndex
hasDisplayedParent := true
break
if not hasDisplayedParent and not hideInvalid and bearInv.size() > 0
for j = 0 to bearInv.size() - 1
ObRec ob = obs.get(bearInv.get(j))
if ob.leftIndex == r.obLeftIndex and ob.createdIndex == r.obCreatedIndex
hasDisplayedParent := true
break
if not hasDisplayedParent
continue
int age = bar_index - r.barIndex
if age >= 0 and age <= 4999
if r.isBull
if not na(lastBullLbl) and r.barIndex - lastBullLbl < 3
continue
lastBullLbl := r.barIndex
else
if not na(lastBearLbl) and r.barIndex - lastBearLbl < 3
continue
lastBearLbl := r.barIndex
float yPrice = close
color baseCol = r.isBull ? bullObColor : bearObColor
st = r.isBull ? label.style_triangleup : label.style_triangledown
yl = r.isBull ? yloc.belowbar : yloc.abovebar
label newLbl = label.new(r.barIndex, yPrice, "", xloc = xloc.bar_index, yloc = yl, style = st,
color = color.new(baseCol, 0), textcolor = color.new(baseCol, 0), size = retestSize, force_overlay = true)
allLabels.pushLabel(newLbl)
ret
// Returns geometry used for volume overlay and 3D top view.
obGeom(ObRec ob) =>
int rawL = ob.leftIndex
int rawR = obRightIndex(ob)
int minBar = bar_index - 4999
int xL = math.max(rawL, minBar)
int xR = math.max(rawR, xL)
int widthX = vd3DDepth
int xR2 = xR + widthX
float yT = ob.top
float yB = ob.bottom
float h = yT - yB
// Converts bull/bear percentages into display strings (if enabled).
deltaTexts(float bullPct, float bearPct) =>
string bullTxt = showDeltaPct ? str.tostring(bullPct) + "%" : ""
string bearTxt = showDeltaPct ? str.tostring(bearPct) + "%" : ""
// Draws a text label with total volume on the right-bottom corner of the OB.
drawTotalVolLabel(int xL, int xR, float yT, float yB, float h, float total) =>
if showTotalVol
int cx = xR - 1
if cx < xL
cx := xL
float cy = yB + h * 0.25
string txt = formatVol(total)
label lb = label.new(cx, cy, txt, xloc = xloc.bar_index, style = label.style_label_right,
textcolor = vdTextColor, color = #ffffff00, size = size.small, force_overlay = true)
allLabels.pushLabel(lb)
// Fills the OB with bull/bear split either vertically or horizontally.
drawDeltaFills(int xL, int xR, float yT, float yB, float h, float bullPct, string bullTxt, string bearTxt) =>
color bullCol = vdEnable ? vdBullColor : bullObColor
color bearCol = vdEnable ? vdBearColor : bearObColor
if isVert
int splitX = xL + int((xR - xL) * (bullPct / 100.0))
splitX := xR - xL >= 2 ? math.max(xL + 1, math.min(xR - 1, splitX)) : xL
box bBull = box.new(xL, yT, splitX, yB, xloc = xloc.bar_index, bgcolor = bullCol, border_width = 0, text = bullTxt, text_color = vdTextColor, text_size = size.small)
box bBear = box.new(splitX, yT, xR, yB, xloc = xloc.bar_index, bgcolor = bearCol, border_width = 0, text = bearTxt, text_color = vdTextColor, text_size = size.small)
allBoxes.pushBox(bBull)
allBoxes.pushBox(bBear)
else
float midY = yB + h * (bullPct / 100.0)
box bBull = box.new(xL, midY, xR, yB, xloc = xloc.bar_index, bgcolor = bullCol, border_width = 0, text = bullTxt, text_color = vdTextColor, text_size = size.small)
box bBear = box.new(xL, yT, xR, midY, xloc = xloc.bar_index, bgcolor = bearCol, border_width = 0, text = bearTxt, text_color = vdTextColor, text_size = size.small)
allBoxes.pushBox(bBull)
allBoxes.pushBox(bBear)
// Track first visible bar index for 3D top face clipping.
var int leftVisIdx = na
if na(leftVisIdx) and time >= chart.left_visible_bar_time
leftVisIdx := bar_index
// Draws the 3D front faces and top faces based on bull/bear split and style.
drawDelta3D(int xL, int xR, int widthX, int xR2, float yT, float yB, float h, float bullPct) =>
color bullCol = vdEnable ? vdBullColor : bullObColor
color bearCol = vdEnable ? vdBearColor : bearObColor
float depthY = dayAtr * (0.1 * vd3DDepth)
int visibleLeft = na(leftVisIdx) ? xL : math.max(xL, leftVisIdx)
int visibleRight = xR
if isHorz
float midY = yB + h * (bullPct / 100.0)
if bullPct > 0
array ptsFrontBull = array.new()
ptsFrontBull.sideBox(xR, yB, midY, depthY, widthX)
drawPoly(PolyParams.new(ptsFrontBull, color.new(chart.fg_color, 90), color.new(bullCol, 70), 1))
if bullPct < 100
array ptsFrontBear = array.new()
ptsFrontBear.sideBox(xR, midY, yT, depthY, widthX)
drawPoly(PolyParams.new(ptsFrontBear, color.new(chart.fg_color, 90), color.new(bearCol, 70), 1))
if visibleRight > visibleLeft
array ptsTop = array.new()
ptsTop.unshift(chart.point.from_index(visibleRight + widthX, yT + depthY))
ptsTop.unshift(chart.point.from_index(visibleLeft + widthX, yT + depthY))
ptsTop.unshift(chart.point.from_index(visibleLeft, yT))
ptsTop.unshift(chart.point.from_index(visibleRight, yT))
ptsTop.unshift(chart.point.from_index(visibleRight + widthX, yT + depthY))
drawPoly(PolyParams.new(ptsTop, color.new(chart.fg_color, 90), color.new(bearCol, 70), 1))
else
array ptsFront = array.new()
ptsFront.sideBox(xR, yB, yT, depthY, widthX)
drawPoly(PolyParams.new(ptsFront, color.new(chart.fg_color, 90), color.new(bearCol, 70), 1))
if visibleRight > visibleLeft
float frac = bullPct / 100.0
int bullRight = visibleLeft + int((visibleRight - visibleLeft) * frac)
bullRight := math.max(visibleLeft, math.min(visibleRight, bullRight))
if bullPct > 0 and bullRight > visibleLeft
array ptsTopBull = array.new()
ptsTopBull.unshift(chart.point.from_index(bullRight + widthX, yT + depthY))
ptsTopBull.unshift(chart.point.from_index(visibleLeft + widthX, yT + depthY))
ptsTopBull.unshift(chart.point.from_index(visibleLeft, yT))
ptsTopBull.unshift(chart.point.from_index(bullRight, yT))
ptsTopBull.unshift(chart.point.from_index(bullRight + widthX, yT + depthY))
drawPoly(PolyParams.new(ptsTopBull, color.new(chart.fg_color, 90), color.new(bullCol, 70), 1))
if bullPct < 100 and visibleRight > bullRight
array ptsTopBear = array.new()
ptsTopBear.unshift(chart.point.from_index(visibleRight + widthX, yT + depthY))
ptsTopBear.unshift(chart.point.from_index(bullRight + widthX, yT + depthY))
ptsTopBear.unshift(chart.point.from_index(bullRight, yT))
ptsTopBear.unshift(chart.point.from_index(visibleRight, yT))
ptsTopBear.unshift(chart.point.from_index(visibleRight + widthX, yT + depthY))
drawPoly(PolyParams.new(ptsTopBear, color.new(chart.fg_color, 90), color.new(bearCol, 70), 1))
// Draws a full OB: zone, retest label, volume fill and 3D faces.
drawZoneAndVolume(ObRec ob) =>
= obColors(ob)
drawObZoneBox(ob, faded)
if showVD and ob.hasDelta
= obGeom(ob)
= deltaTexts(ob.bullPct, ob.bearPct)
drawTotalVolLabel(xL, xR, yT, yB, h, ob.totalVol)
drawDeltaFills(xL, xR, yT, yB, h, ob.bullPct, bullTxt, bearTxt)
if vd3D
drawDelta3D(xL, xR, widthX, xR2, yT, yB, h, ob.bullPct)
true
// Clear all previous drawings each bar before re-rendering current selection.
allBoxes.clearAll(allPolys, allLabels)
// Pick active and invalid OBs based on hideInvalid + showNearestX.
array bullActive = array.new_int()
array bearActive = array.new_int()
array bullInvalid = array.new_int()
array bearInvalid = array.new_int()
if hideInvalid
bullActive := pickNearest(obs, true, showNearestX, false)
bearActive := pickNearest(obs, false, showNearestX, false)
else
bullActive := pickNearest(obs, true, showNearestX, false)
bearActive := pickNearest(obs, false, showNearestX, false)
if obs.size() > 0
for i = 0 to obs.size() - 1
ObRec o = obs.get(i)
if not o.active
if o.isBull
bullInvalid.push(i)
else
bearInvalid.push(i)
if bearInvalid.size() > 0 and not hideInvalid
for i = 0 to bearInvalid.size() - 1
ObRec ob = obs.get(bearInvalid.get(i))
drawZoneAndVolume(ob)
if bearActive.size() > 0
for i = 0 to bearActive.size() - 1
ObRec ob = obs.get(bearActive.get(i))
drawZoneAndVolume(ob)
if bullInvalid.size() > 0 and not hideInvalid
for i = 0 to bullInvalid.size() - 1
ObRec ob = obs.get(bullInvalid.get(i))
drawZoneAndVolume(ob)
if bullActive.size() > 0
for i = 0 to bullActive.size() - 1
ObRec ob = obs.get(bullActive.get(i))
drawZoneAndVolume(ob)
// Draw all stored retest events on top of zones
drawRetestLabels(bullActive, bearActive, bullInvalid, bearInvalid)
//#endregion
//#region ALERTS
alertcondition(alBullOB and evNewBullOB, "Bullish Order Block", "New Bullish Order Block detected.")
alertcondition(alBearOB and evNewBearOB, "Bearish Order Block", "Bearish Order Block detected.")
alertcondition(alBullRetest and evBullRetest, "Bullish OB Retest", "Bullish Order Block retest.")
alertcondition(alBearRetest and evBearRetest, "Bearish OB Retest", "Bearish Order Block retest.")
if alBullOB and evNewBullOB
alert("Bullish Order Block detected.", alert.freq_once_per_bar)
if alBearOB and evNewBearOB
alert("Bearish Order Block detected.", alert.freq_once_per_bar)
if alBullRetest and evBullRetest
alert("Bullish Order Block retest.", alert.freq_once_per_bar)
if alBearRetest and evBearRetest
alert("Bearish Order Block retest.", alert.freq_once_per_bar)
// ==========================================================================================
// === Dashboard with Telegram Link ===
var table myTable = table.new(position.top_center, 1, 1, border_width=1, frame_color=color.black, bgcolor=color.white)
// Add Telegram Message to Dashboard
table.cell(myTable, 0, 0, "Join Telegram @STRATEGY INDIBOT", bgcolor=color.blue, text_color=color.white, text_size=size.normal)
V5 Momentum Candle PRO (Advanced Momentum and Market Regime)V5 Momentum Candle PRO is a price-action–based momentum indicator designed for XAUUSD on the M5 timeframe, focusing on high-quality impulsive candles while actively filtering out noise, consolidation, and weak market conditions.
This indicator is built to help traders identify strong momentum entries near candle close, making it suitable for scalping and short-term intraday trading.
🔍 Core Logic
The indicator detects momentum candles using a scoring system that evaluates:
Candle body size (pip-based, optimized for XAUUSD)
Body-to-range ratio (to avoid indecision candles)
Upper & lower wick dominance
ATR-based volatility validation
Volume confirmation
Consolidation (core zone) filtering
Only candles that reach a minimum score threshold are considered valid momentum signals.
📈 Trend & Market Regime Filters
To improve signal quality, the indicator includes multiple advanced filters:
Higher Timeframe EMA Trend Filter (default: M15)
Optional counter-trend control
ADX + ATR Market Regime Filter to avoid:
Low volatility conditions
Weak or sideways markets
These filters help reduce false signals during ranging or choppy price action.
📉 RSI Exit Zone (Confirmation Only)
RSI is used only as an exit/confirmation filter, not as a primary entry trigger.
RSI is calculated on a higher timeframe (default: H1)
Helps avoid entries when price is already in a neutral or exhaustion zone
Designed to support momentum continuation, not reversals
⏱ Smart Alert System (Noise Reduction)
This indicator features a time-based alert filter:
Alerts are triggered only during the last 2 minutes before candle close
If a valid entry appears earlier in the candle, the alert will be ignored
This helps traders focus on confirmed momentum near candle close, reducing alert noise and premature signals
Recommended alert setting: Once Per Bar
🎯 Visual Tools
Entry arrows for BUY and SELL signals
Automatic TP & SL projection boxes based on:
Fixed pip values, or
Risk-to-Reward ratio (RR)
HTF EMA and M5 EMA plotted directly on the chart
⚙️ Customization
All key parameters are fully adjustable, including:
Candle body & wick thresholds
ATR and ADX sensitivity
RSI zones and timeframe
Risk management settings (SL, TP, RR)
Alert behavior
This allows traders to adapt the indicator to different sessions (London / New York) or personal trading styles.
⚠️ Disclaimer
This indicator is a technical analysis tool, not a trading strategy and not financial advice.
All trading decisions and risk management are the responsibility of the user.
RSI [Hash Capital Research]RSI is a visually enhanced momentum indicator built on the classic Relative Strength Index.
This version expands RSI into a more flexible analytical tool through smoothing options, adaptive zone-based coloring, optional signal line overlays, and divergence detection.
It is designed as a context-building indicator, not a standalone entry system.
What This Indicator Does
This script calculates a smoothed RSI using user-defined parameters and then provides multiple optional enhancements:
1. Adaptive RSI Visualization
The core RSI is plotted with:
Zone-based color changes (neutral, oversold, overbought)
Optional glow effects to emphasize extreme conditions
User-defined color intensity and midline visibility
The goal is to provide clearer visual segmentation of trend strength and momentum behavior.
2. Custom Smoothing & Signal Line Options
The indicator allows:
Multi-layer smoothing for RSI stability
An optional signal line using the trader’s preferred moving-average method (SMA, EMA, SMMA/RMA, WMA, VWMA)
This helps operators examine whether momentum is accelerating or stabilizing relative to its mean.
3. Overbought/Oversold Tools
User-defined thresholds determine:
Highlighted zones
Optional markers for extreme reversals (based on RSI + momentum + velocity criteria)
Midline (50) cross highlights for trend-bias transitions
These features help contextualize where the RSI sits relative to broader momentum regimes.
4. Divergence Detection (Optional)
When enabled, the script scans for regular bullish and bearish divergences using pivot-based structure.
It compares:
Price making lower lows vs RSI making higher lows (bullish)
Price making higher highs vs RSI making lower highs (bearish)
Detected divergences are plotted on the RSI panel with visual labels.
This detection uses pivot lookbacks and range limits defined by the user.
5. Alerts
The indicator provides optional alerts for:
Extreme reversals
Overbought/oversold momentum shifts
Midline (50) crossovers
Bullish / bearish divergences
Alerts are intended for monitoring, not for automated execution.
How to Use It
This RSI modification is intended to support broader analysis workflows, including:
Identifying regime shifts using midline crosses
Monitoring momentum structure across trend phases
Highlighting oversold or overbought clustering
Adding a visual signal line to interpret momentum smoothing
Spotting divergence between price and RSI
As with all indicators, this tool should be used as one component of a complete analysis framework.
What Makes This Version Distinct
This script maintains the core behavior of RSI but introduces:
A multi-layer smoothing system
Adaptive colors calibrated to oversold/neutral/overbought zones
Optional glow visualizations
A modular signal-line engine with multiple MA types
Configurable divergence detection with visual labels
Multiple marker placement modes for extreme conditions
These features expand RSI’s readability while keeping its underlying logic transparent and consistent with common operator workflows.
Important Notes
This is an indicator, not a strategy. It does not execute trades or calculate performance metrics.
The visual enhancements are designed to improve clarity, not to generate automated “buy” or “sell” systems.
Divergence detection is optional because divergence is inherently contextual and may not apply equally across all markets or timeframes.
VWAP Enhanced (Visual Feedback)This is the standard Volume-Weighted Average Price (VWAP) indicator, with the addition of an adjustable anchored time point. This modification aligns with the objective of analyzing price action relative to a specific subsequent event.
4 Period Momentum Composite IndicatorThe 4‑Period Momentum Indicator blends four lookback windows (1m, 3m, 6m, 12m) into a single zero‑centered momentum line. The value recalculates from whatever candle you anchor on, giving you full control when scrolling through historical price action. Positive readings reflect upward momentum, negative readings show weakness, and zero‑line crossovers highlight potential trend shifts. Designed for multi‑timeframe use and ETF relative‑strength comparison.
Momentum Scanner: Low Float + Volume Spike + 3 Green CandlesScanner for low-float stocks with volume spikes and 3 consecutive bullish candles
Institutional Volatility Expansion & Liquidity Thresholds (IVEL)Overview
The IVEL Engine is an institutional-grade volatility modeling tool designed to identify the mathematical boundaries of price delivery. Unlike retail oscillators that use fixed scales, this script utilizes dynamic ATR-based multiples to map Institutional Premium and Discount zones in real-time.
How to Use
To maximize the effectiveness of the IVEL Engine, traders should focus on Price Delivery at the extreme thresholds:
Identifying Institutional Premium (Short Setup) : When price expands into the Upper Red Zone, it has reached a mathematical exhaustion point. Seek short-side entries when price shows signs of rejection from this level back toward the Fair Value Baseline.
Identifying Institutional Discount (Long Setup) : When price reaches the Lower Green Zone, it is considered "cheap" by institutional algorithms. Look for long-side absorption or accumulation patterns within this zone.
Mean Reversion Targets: The Fair Value Baseline (Center Line) acts as the primary magnetic target. Successful trades taken at the outer thresholds should use the baseline as the first objective for profit-taking.
Alerts & Execution Strategy
The IVEL Engine is designed for automated monitoring so you don't have to watch the screen 24/7. To set up your execution workflow:
Set the Alert : Right-click the indicator and select "Add Alert." Set the condition to "Price Crossing Institutional Premium" (Upper Red) or "Price Crossing Institutional Discount" (Lower Green).
Wait for the Hit : Do not market-enter as soon as the alert fires. The alert tells you price has entered a High-Probability Liquidity Zone.
Confirm the Rejection : Once alerted, drop down to a lower timeframe (e.g., 5m or 15m) and look for a "Shift in Market Structure" or an SMT Divergence.
Execute : Enter once the rejection is confirmed, targeting the Fair Value Baseline as your primary TP1.
Methodology
The script anchors to an EMA-based baseline and projects expansion bands that adapt to current market conditions.
Value Area : The blue inner region where the majority of trading volume occurs.
Liquidity Exhaustion : The red and green outer regions where the probability of "Smart Money" reversal is highest.
Adaptive RSI [BOSWaves]Adaptive RSI - Percentile-Based Momentum Detection with Dynamic Regime Thresholds
Overview
Adaptive RSI is a self-calibrating momentum oscillator that identifies overbought and oversold conditions through historical percentile analysis, constructing dynamic threshold boundaries that adjust to evolving market volatility and momentum characteristics.
Instead of relying on traditional fixed RSI levels (30/70 or 20/80) or static overbought/oversold zones, regime detection, threshold placement, and signal generation are determined through rolling percentile calculation, smoothed momentum measurement, and divergence pattern recognition.
This creates adaptive boundaries that reflect actual momentum distribution rather than arbitrary fixed levels - tightening during low-volatility consolidation periods, widening during trending environments, and incorporating divergence analysis to reveal momentum exhaustion or continuation patterns.
Momentum is therefore evaluated relative to its own historical context rather than universal fixed thresholds.
Conceptual Framework
Adaptive RSI is founded on the principle that meaningful momentum extremes emerge relative to recent price behavior rather than at predetermined numerical levels.
Traditional RSI implementations identify overbought and oversold conditions using fixed thresholds that remain constant regardless of market regime, often generating premature signals in strong trends or missing reversals in range-bound markets. This framework replaces static threshold logic with percentile-driven adaptive boundaries informed by actual momentum distribution.
Three core principles guide the design:
Threshold placement should correspond to historical momentum percentiles, not fixed numerical levels.
Regime detection must adapt to current market volatility and momentum characteristics.
Divergence patterns reveal momentum exhaustion before price reversal becomes visible.
This shifts oscillator analysis from universal fixed levels into adaptive, context-aware regime boundaries.
Theoretical Foundation
The indicator combines smoothed RSI calculation, rolling percentile tracking, adaptive threshold construction, and multi-pattern divergence detection.
A Hull Moving Average (HMA) pre-smooths the price source to reduce noise before RSI computation, which then undergoes optional post-smoothing using configurable moving average types. Confirmed oscillator values populate a rolling historical buffer used for percentile calculation, establishing upper and lower thresholds that adapt to recent momentum distribution. Regime state persists until the oscillator crosses the opposing threshold, preventing whipsaw during consolidation. Pivot detection identifies swing highs and lows in both price and oscillator values, enabling regular divergence pattern recognition through comparative analysis.
Five internal systems operate in tandem:
Smoothed Momentum Engine : Computes HMA-preprocessed RSI with optional post-smoothing using multiple MA methodologies (SMA, EMA, HMA, WMA, DEMA, RMA, LINREG, TEMA).
Historical Buffer Management : Maintains a rolling array of confirmed oscillator values for percentile calculation with configurable lookback depth.
Percentile Threshold Calculation : Determines upper and lower boundaries by extracting specified percentile values from sorted historical distribution.
Persistent Regime Detection : Establishes bullish/bearish/neutral states based on threshold crossings with state persistence between signals.
Divergence Pattern Recognition : Identifies regular bullish and bearish divergences through synchronized pivot analysis of price and oscillator values with configurable range filtering.
This design allows momentum interpretation to adapt to market conditions rather than reacting mechanically to universal thresholds.
How It Works
Adaptive RSI evaluates momentum through a sequence of self-calibrating processes:
Source Pre-Smoothing: Input price undergoes 4-period HMA smoothing to reduce bar-to-bar noise before oscillator calculation.
RSI Calculation: Standard RSI computation applied to smoothed source over configurable length period.
Optional Post-Smoothing: Raw RSI value undergoes additional smoothing using selected MA type and length for cleaner regime detection.
Historical Buffer Population: Confirmed oscillator values accumulate in a rolling array with size limit determined by adaptive lookback parameter.
Percentile Threshold Extraction: Array sorts on each bar to calculate upper percentile (bullish threshold) and lower percentile (bearish threshold) values.
Regime State Persistence: Bullish regime activates when oscillator crosses above upper threshold, bearish regime activates when crossing below lower threshold, neutral regime persists until directional threshold breach.
Pivot Identification: Swing highs and lows detected in both oscillator and price using configurable left/right parameters.
Divergence Pattern Matching: Compares pivot relationships between price and oscillator within min/max bar distance constraints to identify regular bullish (price LL, oscillator HL) and bearish (price HH, oscillator LH) divergences.
Together, these elements form a continuously updating momentum framework anchored in statistical context.
Interpretation
Adaptive RSI should be interpreted as context-aware momentum boundaries:
Bullish Regime (Blue): Activated when oscillator crosses above upper percentile threshold, indicating momentum strength relative to recent distribution favors upside continuation.
Bearish Regime (Red): Established when oscillator crosses below lower percentile threshold, identifying momentum weakness relative to recent distribution favors downside continuation.
Upper Threshold Line (Blue)**: Dynamic resistance level calculated from upper percentile of historical oscillator distribution - adapts higher during trending markets, lower during ranging conditions.
Lower Threshold Line (Red): Dynamic support level calculated from lower percentile of historical oscillator distribution - adapts lower during downtrends, higher during consolidation.
Regime Fill: Gradient coloring between oscillator and baseline (50) visualizes current momentum intensity - stronger color indicates greater distance from neutral.
Extreme Bands (15/85): Upper and lower extreme zones with strength-modulated transparency reveal momentum extremity - darker shading during powerful moves, lighter during moderate momentum.
Divergence Lines: Connect price and oscillator pivots when divergence pattern detected, appearing on both price chart and oscillator pane for confluence identification.
Reversal Markers (✦): Diamond signals appear at 80+ (bearish extreme) and sub-15 (bullish extreme) levels, marking potential exhaustion zones independent of regime state.
Percentile context, divergence confirmation, and regime persistence outweigh isolated oscillator readings.
Signal Logic & Visual Cues
Adaptive RSI presents four primary interaction signals:
Regime Switch - Long : Oscillator crosses above upper percentile threshold after previously being in bearish or neutral regime, suggesting momentum strength shift favoring bullish continuation.
Regime Switch - Short : Oscillator crosses below lower percentile threshold after previously being in bullish or neutral regime, indicating momentum weakness shift favoring bearish continuation.
Regular Bullish Divergence (𝐁𝐮𝐥𝐥) : Price forms lower low while oscillator forms higher low, revealing positive momentum divergence during downtrends - often precedes reversal or consolidation.
Regular Bearish Divergence (𝐁𝐞𝐚𝐫) : Price forms higher high while oscillator forms lower high, revealing negative momentum divergence during uptrends - often precedes reversal or correction.
Alert generation covers regime switches, threshold crossings, and divergence detection for systematic monitoring.
Strategy Integration
Adaptive RSI fits within momentum-informed and mean-reversion trading approaches:
Adaptive Regime Following : Use threshold crossings as primary trend inception signals where momentum confirms directional breakouts within statistical context.
Divergence-Based Reversals : Enter counter-trend positions when divergence patterns appear at extreme oscillator levels (above 80 or below 20) for high-probability mean-reversion setups.
Threshold-Aware Scaling : Recognize that tighter percentile spreads (e.g., 45/50) generate more signals suitable for ranging markets, while wider spreads (e.g., 30/70) filter for stronger trend confirmation.
Extreme Zone Confluence : Combine reversal markers (✦) with divergence signals for maximum-conviction exhaustion entries.
Multi-Timeframe Regime Alignment : Apply higher-timeframe regime context to filter lower-timeframe entries, taking only setups aligned with dominant momentum direction.
Smoothing Optimization : Increase smoothing length in choppy markets to reduce false signals, decrease in trending markets for faster response.
Technical Implementation Details
Core Engine : HMA-preprocessed RSI with configurable smoothing (SMA, HMA, EMA, WMA, DEMA, RMA, LINREG, TEMA)
Adaptive Model : Rolling percentile calculation over confirmed oscillator values with size-limited historical buffer
Threshold Construction : Linear interpolation percentile extraction from sorted distribution array
Regime Detection : State-persistent threshold crossing logic with confirmed bar validation
Divergence Engine : Pivot-based pattern matching with range filtering and duplicate prevention
Visualization : Gradient-filled regime zones, adaptive threshold lines, strength-modulated extreme bands, dual-pane divergence lines
Performance Profile : Optimized for real-time execution with efficient array management and minimal computational overhead
Optimal Application Parameters
Timeframe Guidance:
1 - 5 min : Micro-structure momentum detection for scalping and intraday reversals
15 - 60 min : Intraday regime identification with divergence-validated turning points
4H - Daily : Swing and position-level momentum analysis with macro divergence context
Suggested Baseline Configuration:
RSI Length : 18
Source : Close
Smooth Oscillator : Enabled
Smoothing Length : 20
Smoothing Type : SMA
Adaptive Lookback : 1000
Upper Percentile : 50
Lower Percentile : 45
Divergence Pivot Left : 15
Divergence Pivot Right : 15
Min Pivot Distance : 5
Max Pivot Distance : 60
These suggested parameters should be used as a baseline; their effectiveness depends on the asset's volatility profile, momentum characteristics, and preferred signal frequency, so fine-tuning is expected for optimal performance.
Parameter Calibration Notes
Use the following adjustments to refine behavior without altering the core logic:
Too many whipsaw signals : Widen percentile spread (e.g., 40/60 instead of 45/50) to demand stronger momentum confirmation, or increase "Smoothing Length" to filter noise.
Missing legitimate regime changes : Tighten percentile spread (e.g., 48/52 instead of 45/50) for earlier detection, or decrease "Smoothing Length" for faster response.
Oscillator too choppy : Increase "Smoothing Length" for cleaner readings, or switch "Smoothing Type" to RMA/TEMA for heavier smoothing.
Thresholds not adapting properly : Reduce "Adaptive Lookback" to emphasize recent behavior (500-800 bars), or increase it for more stable thresholds (1500-2000 bars).
Too many divergence signals : Increase "Pivot Left/Right" values to demand stronger swing confirmation, or widen "Min Pivot Distance" to space out detections.
Missing significant divergences : Decrease "Pivot Left/Right" for faster pivot detection, or increase "Max Pivot Distance" to compare more distant swings.
Prefer different momentum sensitivity : Adjust "RSI Length" - lower values (10-14) for aggressive response, higher values (21-28) for smoother trend confirmation.
Divergences appearing too late : Reduce "Pivot Right" parameter to detect divergences closer to current price action.
Adjustments should be incremental and evaluated across multiple session types rather than isolated market conditions.
Performance Characteristics
High Effectiveness:
Markets with mean-reverting characteristics and consistent momentum cycles
Instruments where momentum extremes reliably precede reversals or consolidations
Ranging environments where percentile-based thresholds adapt to volatility contraction
Divergence-driven strategies targeting momentum exhaustion before price confirmation
Reduced Effectiveness:
Extremely strong trending markets where oscillator remains persistently extreme
Low-liquidity environments with erratic momentum readings
News-driven or gapped markets where momentum disconnects from price temporarily
Markets with regime shifts faster than adaptive lookback can recalibrate
Integration Guidelines
Confluence : Combine with BOSWaves structure, volume analysis, or traditional support/resistance
Threshold Respect : Trust signals that occur after clean threshold crossings with sustained momentum
Divergence Context : Prioritize divergences appearing at extreme oscillator levels (80+/15-) over those in neutral zones
Regime Awareness : Consider whether current market regime matches historical momentum patterns used for calibration
Multi-Pattern Confirmation : Seek divergence patterns coinciding with reversal markers or threshold rejections for maximum conviction
Disclaimer
Adaptive RSI is a professional-grade momentum and divergence analysis tool. It uses percentile-based threshold calculation that adapts to recent market behavior but cannot predict future regime shifts or guarantee reversal timing. Results depend on market conditions, parameter selection, lookback period appropriateness, and disciplined execution. BOSWaves recommends deploying this indicator within a broader analytical framework that incorporates price structure, volume context, and comprehensive risk management.
ACHT EMA Cross Pullback Strategy with HTF Filter, RSI SignalsADVANCED INDICATOR FOR TRADING USING EMA CROSS PULLBACK STRATEGY
✨ MAIN FEATURES:
• 📈 Signals on pullback after EMA9/EMA20 crossover
• 🔍 Multi-level signal filtering
• 🕒 Multi-timeframe analysis (HTF filter)
• 🛡️ Trend indicator protection
• 📊 Compact information panel
🎯 MAIN SIGNALS:
1️⃣ EMA CROSS + PULLBACK
• EMA9 crosses EMA20 up/down
• Price pullback to EMA9 after crossover
• EMA200 filter (bullish/bearish trend)
2️⃣ RSI SIGNALS IN HTF ZONES
• RSI crossing its SMA
• Works only in HTF zones
• "First signal only" option in zone
🛡️ INDICATOR FILTERS:
• ✅ SuperTrend - main trend identification
• ✅ MACD - additional trend confirmation
• ✅ RSI - overbought/oversold filter
• ✅ HTF filter - higher timeframe analysis
⚙️ CUSTOMIZATION OPTIONS:
• Adjustable periods for all indicators
• Enable/disable each filter
• RSI level settings
• HTF filter timeframe selection
• Signal visualization options
📱 INFORMATION PANEL:
• Compact table with key metrics
• Status of all filters and indicators
• Visual HTF zone indicators
• Emoji for quick perception
🚨 ALERT SYSTEM:
• Alerts on main signals
• Alerts on HTF zone entry
• Alerts on RSI signals
• Customizable trigger conditions
📈 USAGE RECOMMENDATIONS:
1. Wait for EMA9 and EMA20 crossover
2. Look for price pullback to EMA9
3. Check all filter compliance
4. Ensure HTF zone presence
5. Use RSI signals as supplement
⚠️ RISKS AND LIMITATIONS:
• Indicator doesn't guarantee profit
• Always use stop-losses
• Test strategy on demo account
• Adapt parameters to your trading style
RADAR_V67_TESTThis V67 indicator is a comprehensive trend-following strategy designed to filter out market noise and identify high-probability entries in the cryptocurrency market.
The system is built on three major technical pillars:
Hull Moving Average (HMA): Provides superior reactivity to trend reversals compared to standard moving averages.
Supertrend: Acts as a primary trend filter to ensure we only trade in a confirmed bullish environment.
Volume Analysis (POC): The script identifies the Point of Control (POC) to ensure that buy signals occur above institutional congestion zones.
The buy signal (Screener_Signal = 1) is triggered only when the price crosses above the Hull MA while remaining above the Supertrend and the volume POC. This is a robust tool for both swing trading and day trading, focusing on momentum and institutional support.
Le Supertrend : Il sert de filtre de sécurité pour s'assurer que nous sommes dans une dynamique haussière confirmée.
L'analyse du Volume (POC) : Le script identifie le prix où le volume a été le plus important (Point of Control) pour s'assurer que l'achat se fait au-dessus des zones de congestion institutionnelles.
Le signal d'achat (Screener_Signal = 1) est déclenché uniquement lorsque le prix croise la Hull MA à la hausse, tout en restant au-dessus du Supertrend et du POC de volume. C'est un outil robuste pour le swing trading et le day trading.
Manus Forex Alpha Pro Indicator (Trend-Momentum Hybrid)ใช้ AI Manus ช่วยผสมผสานให้ ใช้งานง่ายดี
น่าจะไม่ต้องอธิบายนะครับ เพราะเป็นพื้นฐานการใช้งาน
เพียงแต่มี แดชบอร์ด ช่วยให้อ่านง่ายขึ้น
การลงทุนมีความเสี่ยง ไม่มีเครื่องมือใดคาดการณ์ถูกต้อง 100%
เรียนรู้ ฝึกฝน มีวินัย ควบคุมความเสี่ยง ด้วยตนเอง
Using AI Manus helps integrate it, making it easy to use.
I don't think I need to explain this, as it's basic usage.
The dashboard simply makes it easier to read.
Investing involves risk; no tool is 100% accurate.
Learn, practice, be disciplined, and manage your own risk.
Quantum MACD📈 STRENGTHS:
1. Adaptability to Any Asset
Automatically adjusts overbought/oversold levels according to each asset's volatility
No manual level adjustment needed for different instruments
2. 4 Intelligent Zone Calculation Methods
Percentiles: Considers historical distribution of MACD values
Standard Deviation: Statistically justified levels
ATR: Accounts for market volatility
Bollinger Bands: Classic proven method
3. Enhanced Visualization
Gradient zone fill (intensity depends on distance to level)
Four histogram colors like in standard MACD
Clear solid divergence lines with markers
Information panel with key data
4. Multiple Signals and Alerts
Divergences (bullish/bearish)
Entry/exit from overbought/oversold zones
MACD and signal line crossovers
Strong signals (when approaching extreme levels)
5. Flexible Configuration
Ability to enable/disable any elements
Period adjustment for different methods
Color scheme selection
Sensitivity adjustment via multipliers
6. Professional Functions
Table with extended information
Signal strength calculation
Distance to level indicators
Display of historical MACD minimums/maximums
📉 WEAKNESSES:
1. High Complexity for Beginners
Many settings can confuse novice traders
Difficulty choosing optimal zone calculation method
Requires time to learn all functions
2. Possible Chart Overload
Multiple lines and fills can clutter the chart
Lines may overlap with many divergences
Information panel occupies screen space
3. Calculation Delays
Use of large periods (up to 500 bars) for calculations
Some methods (percentiles) require data accumulation
Possible lags on lower timeframes
4. Risk of Over-Optimization
Too fine-tuning for specific assets
Possibility of fitting parameters to historical data
Need to review parameters when trends change
5. Dependence on Chosen Method
Different methods can give contradictory signals
No single "perfect" method for all situations
Requires testing each method on specific assets
6. Pine Script Limitations
Inability to implement exact percentiles without arrays
Performance limitations with complex calculations
Some visual effects cannot be implemented perfectly
7. False Signals
In strong trends, indicator may remain in overbought/oversold zones for long periods
Divergences sometimes form late
Frequent line crossovers in sideways markets
⚖️ BALANCE OF STRENGTHS AND WEAKNESSES:
Who It's Suitable For:
✅ Experienced traders who need advanced analysis tools
✅ Analysts studying indicator behavior on different assets
✅ Swing traders working on medium timeframes
✅ Those trading multiple assets who need automatic adaptation
Who It's Not Suitable For:
❌ Beginners just starting with technical analysis
❌ Scalpers who need minimal delay
❌ Traders preferring minimalistic indicators
❌ Those wanting a "magic button" without configuration
💡 USAGE RECOMMENDATIONS:
Start Simple: Use only one zone calculation method (e.g., "Standard Deviation")
Test: Check each method on your asset's historical data
Simplify: Disable unnecessary visual elements for cleaner charts
Combine: Use this indicator with others (trend, volume-based)
Observe: Monitor indicator behavior in different market conditions (trend, range)
🎯 CONCLUSION:
Quantum MACD is a powerful professional tool for traders willing to invest time in learning and configuring it. It solves the key problem of standard MACD - static overbought/oversold levels.
Main Advantage: adaptation to any asset without manual adjustment.
Main Disadvantage: complexity for beginners and risk of chart overload.
The indicator performs best on daily and weekly timeframes when trading stocks, cryptocurrencies, and currency pairs with good liquidity.
Blockcircle FTR - Follow Through ReversalWHAT THIS INDICATOR DOES
Blockcircle FTR identifies failed directional moves followed by quality reversals. The indicator tracks structural pivot levels, monitors price interactions with those levels, and validates reversal sequences against a configurable threshold.
A trend filter provides macro context so you can evaluate whether signals align with or oppose the broader direction.
KEY FEATURES
Reversal quality filtering via delivery threshold requirement
Sweep confirmation when reversals follow liquidity grabs at structural levels
ATR-adaptive origin zones marking reversal starting points
Trend alignment indicator comparing signal bias to moving average direction
Volume validation filter for participation confirmation
Real-time dashboard with signal statistics and alignment status
DETAILED BREAKDOWN
Structural Level Tracking
The indicator identifies pivot highs and lows based on the Structure Lookback parameter. These pivots serve as reference levels where liquidity typically accumulates. Levels remain active until price interacts with them or they exceed the Level Lifespan setting.
When the price reaches a structural level, this interaction is logged. If a reversal then forms in the opposite direction within the Sweep Window, the signal qualifies as sweep-confirmed, indicating that stops were likely triggered before the move reversed.
FTR Detection Logic
The core detection looks for a specific sequence: a directional attempt that fails to follow through, followed by a counter-move that meets the Delivery Threshold ratio. This ratio measures the quality of the reversal relative to the failed move's structure.
Higher threshold values (closer to 1.0) require cleaner, more convincing reversals. Lower values (closer to 0.1) allow weaker setups through. The default of 0.7 provides reasonable filtering without being overly restrictive.
Trend Context Filter
A moving average (EMA or SMA, configurable period) provides simple trend context. The dashboard displays three related metrics:
Trend: Current price position relative to the MA (Bullish/Bearish)
FTR Bias: Direction of the most recent confirmed signal (Long/Short)
Aligned: Whether these two readings match (Yes/No)
This helps identify situations where the FTR bias has become stale or is positioned against the prevailing trend.
Signal Classification
Standard signals appear as small triangles and represent FTR patterns that passed the delivery threshold and any active filters.
Sweep-confirmed signals appear with an "S" label and represent the subset of signals where price swept a structural level shortly before the reversal formed. These carry higher conviction due to the additional liquidity context.
Dashboard Metrics
The information panel provides:
Current trend direction and FTR bias
Alignment status between the two
Bars elapsed since the last signal
Running totals for long and short signals
Sweep-confirmed counts in parentheses
Volume filter status
Configuration Parameters
Structure Lookback: Bars used for pivot detection. Higher values capture more significant swings.
Delivery Threshold: Minimum ratio for valid reversals. Range 0.1 to 1.0.
Level Lifespan: The maximum bars a structural level remains active.
Sweep Window: Lookback period for sweep confirmation.
Trend MA Period: Moving average length for trend context.
Volume Spike Multiple: Required volume ratio when volume filter is active.
Zone Depth: Origin zone width as ATR multiple.
Practical Application
Sweep-confirmed signals with trend alignment represent the highest-conviction setups. These combine a quality reversal pattern, liquidity sweep context, and trend support.
Standard signals without sweep confirmation remain valid FTR patterns but warrant additional discretion.
Counter-trend signals (Aligned showing NO) can still produce valid moves, but historically carry lower probability. Consider position sizing adjustments accordingly.
Origin zones serve as potential support/resistance areas for subsequent price returns.
Important Limitations
The indicator may remain biased in the wrong direction during extended trends if no qualifying reversal pattern forms. The trend filter helps identify these situations, but does not automatically override the FTR bias.
Signal counts are calculated on visible chart history and will vary based on the loaded timeframe and bar count.
As with any technical tool, signals should be evaluated within the broader market context rather than traded mechanically.
Hope you find it useful! If you have any questions, please don't hesitate to ask them!
OI: Simple BandOI: Simple Band (Open Source)
OI: Simple Band is a very simple, open-source overlay that draws a two-line moving-average band and fills the space between them to highlight trend bias and momentum shifts at a glance.
What it plots
EMA (Exponential Moving Average) using the selected length
SMMA (Smoothed Moving Average) using the same length
A ribbon fill between the two:
Green when EMA > SMMA (bullish bias)
Red when EMA < SMMA (bearish bias)
Why use two different MAs with the same length?
Even with the same length, these two averages react differently:
EMA weights recent prices more heavily, so it responds faster to changes.
SMMA is designed to be steadier and slower, filtering more noise.
Using the same length keeps the comparison fair (same smoothing window) while still giving you a “fast vs slow response” relationship. The distance and relationship between them becomes a simple way to see:
Momentum / pressure: When EMA pulls away from SMMA, price is moving with enough force to overcome smoothing.
Compression: When they converge, momentum is fading and conditions often look more “balanced.”
State changes: Crossovers flip the ribbon colour and can be used as a context shift (trend/bias filter), not a standalone entry/exit rule.
Inputs
Moving average band (length): Controls both EMA and SMMA smoothing.
SMMA Source: Chooses the data used for the SMMA calculation (EMA is calculated on close).
Notes
This is intentionally minimal: no higher-timeframe requests, no security() calls, no signals — just a clean visual band.
Like all moving averages, it updates on the live candle and will settle on bar close.
MACD Colored CandlesMACD Histogram Candle Colors
Overview
This indicator visualizes MACD momentum directly on your candlesticks by coloring them according to the MACD histogram's state. Instead of looking at a separate MACD panel, you can instantly see momentum changes right on your price chart.
How It Works
The indicator calculates the standard MACD (Moving Average Convergence Divergence) and applies the histogram's color logic directly to your candles:
🟢 **Teal (#26a69a)** - Bullish momentum increasing (histogram positive and rising)
🟢 **Light Teal (#b2dfdb)** - Bullish momentum weakening (histogram positive but falling)
🔴 **Light Red (#ffcdd2)** - Bearish momentum weakening (histogram negative but rising)
🔴 **Red (#ff5252)** - Bearish momentum increasing (histogram negative and falling)
Features
- **Pure MACD Logic**: Uses exact MACD histogram color calculations
- **Clean Chart**: No additional plots or tables cluttering your view
- **Customizable Inputs**: Adjust Fast length (default 12), Slow length (default 26), and Signal length (default 9)
- **MA Type Selection**: Choose between EMA or SMA for both oscillator and signal calculations
- **Overlay Display**: Works seamlessly with other indicators
Settings
- **Source**: Price source for MACD calculation (default: close)
- **Fast Length**: Period for fast moving average (default: 12)
- **Slow Length**: Period for slow moving average (default: 26)
- **Signal Length**: Period for signal line (default: 9)
- **Oscillator MA Type**: EMA or SMA
- **Signal MA Type**: EMA or SMA
Best Use Cases
- Quick momentum identification without switching between panels
- Combining with support/resistance levels for trade entries
- Identifying divergences between price action and momentum
- Multi-timeframe analysis with color-coded momentum
Tips
- Use in combination with traditional MACD for confirmation
- Color changes often precede significant price movements
- Works on all timeframes and instruments
- Consider pairing with volume indicators for stronger signals
Credits
Based on the standard MACD indicator with histogram color visualization applied to candlesticks.
---
*This is an open-source script. Feel free to use, modify, and share!*
Adaptive Momentum Contextdaptive Momentum Context (AMC)
Adaptive Momentum Context (AMC) is a single-panel, overlay indicator designed to help traders read market context, momentum behavior, and volatility-driven rhythm in a structured and non-misleading way.
This indicator does not aim to predict future price movements. Instead, it focuses on describing current market conditions using adaptive smoothing and higher-timeframe bias.
Concept Overview
AMC is built around three core ideas:
Higher Timeframe Context (Bias)
Adaptive Market Rhythm
Momentum Behavior within Context
These components are combined to provide a clearer view of when momentum aligns with the broader market structure.
Higher Timeframe Bias
The indicator retrieves price data from a user-selected higher timeframe and compares it to a moving average on that timeframe.
When higher timeframe price is above its average, the background is shaded green.
When it is below, the background is shaded red.
This background does not generate signals.
Its purpose is to define directional context and reduce decision-making against dominant market conditions.
Adaptive Market Rhythm
Instead of using a fixed-length moving average, AMC calculates an adaptive smoothing length based on relative volatility.
When volatility expands, the smoothing period increases.
When volatility contracts, the smoothing period shortens.
Because Pine Script does not allow dynamic lengths in built-in moving averages, the adaptive line is calculated manually using a recursive EMA formula.
This ensures:
No repainting
No future data access
Full Pine Script v6 compliance
The adaptive line represents the current market rhythm, not a trend guarantee.
Momentum Behavior
Momentum is derived from changes in the adaptive rhythm rather than raw price.
Small visual markers appear when:
Momentum accelerates in the direction of the higher timeframe bias
Momentum decelerates against that bias
These markers are contextual cues, not standalone trade signals.
How to Use
AMC is best used as a context and filtering tool, not as a mechanical entry system.
Possible use cases:
Filtering lower-timeframe entries
Avoiding trades against higher-timeframe structure
Visualizing momentum shifts during pullbacks or continuations
Users are encouraged to combine this indicator with their own risk management and execution rules.
Important Notes
This indicator does not provide performance guarantees.
Past behavior does not imply future results.
No lookahead, no repainting, or non-standard chart types are used.
Default settings are intended for general use and may require adjustment depending on market and timeframe.
Momentum Indikator (Avg Volume)Momentum Indicator (Avg Volume)
1. Purpose of the Indicator
The WMT Momentum Indicator (Avg Volume) is designed to highlight strong price movements accompanied by increased trading volume.
It specifically filters for trading days where:
volume is increasing,
volume is above its average,
and the percentage price movement exceeds a defined threshold.
The goal is to identify momentum days early — both bullish and bearish.
2. Display & Visualization
Visualization: Histogram (columns)
Panel: Separate indicator window (overlay = false)
Y-Axis: Percentage price change compared to the previous close
Colors:
🟢 Green: Positive daily movement (Close ≥ Open)
🔴 Red: Negative daily movement (Close < Open)
Zero Line: Reference line separating positive and negative momentum
3. Input Parameters
Parameter Description Default
+/- Movement Threshold (%) Minimum absolute daily price movement in percent 4.0 %
Volume Average (Days) Period for the moving average of volume 20 days
4. Logic & Calculations
4.1 Volume Conditions
The indicator only considers days where:
Volume is higher than the previous day
volHigherPrev = volume > volume
Volume is above the moving average
avgVolume = ta.sma(volume, volLength)
volAboveAvg = volume > avgVolume
➡️ This ensures that only days with unusually high market participation are taken into account.
4.2 Price Movement
Percentage change vs. previous close
priceMovePct = (close - close ) / close * 100
Absolute movement
absMovePct = math.abs(priceMovePct)
Intraday direction
priceMoveDay = close - open
4.3 Direction Logic
Condition Meaning
priceMoveDay ≥ 0 Bullish day (green)
priceMoveDay < 0 Bearish day (red)
4.4 Main Condition (Signal Filter)
A bar is displayed only if all of the following conditions are met:
showBar =
volHigherPrev and
volAboveAvg and
absMovePct >= moveThreshold
➡️ Interpretation:
Only strong price movements with rising and above-average volume are visualized.
5. Color Logic
barColor =
showBar and volGreen ? color.green :
showBar and volRed ? color.red :
na
Color Meaning
Green Strong bullish momentum
Red Strong bearish momentum
No bar Conditions not met
6. Plot Description
Momentum Histogram
plot(
showBar ? priceMovePct : na,
style = plot.style_columns
)
Bars are plotted only when showBar = true
Bar height represents the percentage change vs. previous close
Direction and color indicate momentum direction
Zero Line
hline(0, "0-Line")
Visual separation between positive and negative momentum
Helps with quick interpretation
7. Typical Use Cases
Identifying breakout days
Confirming trend continuation
Detecting distribution or accumulation
Filtering for momentum trading & swing trading
Complementing price action or volume-based strategies
8. Practical Interpretation
Tall green bar:
→ Strong buying pressure, potential trend start or continuation
Tall red bar:
→ Strong selling pressure, possible trend exhaustion or short signal
No bars:
→ Market without relevant momentum (sideways / low volume)
Dual RSI Spread Strategy [Custom]
概述
这是一个综合性的动量交易工具,结合了双重 RSI 交叉系统与经典 RSI 背离检测功能。该指标旨在通过分析短期与长期动量的“剪刀差”来识别潜在的超买/超卖区域,并辅以顶底背离信号作为反转确认。
核心功能与逻辑
1. 双重 RSI 差值信号 (Dual RSI Spread) 该策略同时计算两条 RSI 曲线:
短周期 RSI (默认 13):对价格变化反应灵敏。
长周期 RSI (默认 42):代表长期趋势基准。
交易信号基于两条 RSI 的差值 (Spread) 生成,逻辑如下:
🟢 买入信号 (Buy):当 长周期 RSI - 短周期 RSI > 20。这意味着短期动量严重低于长期基准,市场可能处于深度超卖状态,存在均值回归需求。
🔴 卖出信号 (Sell):当 短周期 RSI - 长周期 RSI > 20。这意味着短期动量冲高过快,远超长期基准,市场可能过热。
2. RSI 顶底背离 (Divergence) 指标内置了经典的背离检测算法(可选择开启/关闭),应用于短周期 RSI:
Bullish Divergence (看涨背离):价格创新低,但 RSI 底部抬高。
Bearish Divergence (看跌背离):价格创新高,但 RSI 顶部降低。 (注意:背离功能默认关闭,请在设置中勾选 "Calculate Divergence" 开启)
3. 高度自定义
支持自定义 RSI 长度、平滑类型 (SMA/EMA) 及平滑长度。
支持自定义差值阈值(默认 20)。
完整的告警支持:可分别为差值信号和背离信号设置 TradingView 告警。
如何使用 建议将“差值信号”作为预警,结合“背离信号”作为确认。当出现“买入”标签且随后出现 Bullish 背离时,胜率通常更高。
Overview
This is a comprehensive momentum trading tool that combines a Dual RSI Cross System with Classic RSI Divergence Detection. It is designed to identify potential overbought/oversold conditions by analyzing the "spread" between short-term and long-term momentum, reinforced by divergence signals for reversal confirmation.
Key Features & Logic
1. Dual RSI Spread Signals The script calculates two RSI lines simultaneously:
Short RSI (Default 13): Sensitive to immediate price changes.
Long RSI (Default 42): Represents the longer-term baseline.
Trading signals are generated based on the Spread (Difference) between these two lines:
🟢 BUY Signal: Triggers when Long RSI - Short RSI > 20. This implies short-term momentum is significantly below the long-term baseline, suggesting a deep oversold condition and potential mean reversion.
🔴 SELL Signal: Triggers when Short RSI - Long RSI > 20. This implies short-term momentum has spiked too far above the baseline, suggesting an overheated market.
2. RSI Divergence The indicator includes a built-in divergence detection algorithm (optional) applied to the Short RSI:
Bullish Divergence: Price makes a lower low, but RSI makes a higher low.
Bearish Divergence: Price makes a higher high, but RSI makes a lower high. (Note: Divergence is disabled by default. Please check "Calculate Divergence" in the settings to enable).
3. Fully Customizable
Configurable RSI lengths, Smoothing types (SMA/EMA), and Smoothing lengths.
Adjustable Spread Threshold (Default is 20).
Full Alert Support: Set alerts specifically for Spread Signals or Divergence detections.
How to Use It is recommended to use the "Spread Signals" as an early warning system and the "Divergence Signals" as confirmation. A setup where a "BUY" spread label is followed by a Bullish Divergence line often presents a higher probability trade.
SMC Rebalance to Equilibrium + ATR/ADX (Release)Markets spend more time rebalancing than trending. After an impulsive move, price naturally seeks fair value (equilibrium / mean / VWAP / 50%) where buyers and sellers agree again.
This makes rebalance trades higher win-rate and lower risk compared to continuation or breakout strategies.
Examples from real market behaviour:
- Gold futures (GC) rebalance very frequently because gold is heavily mean-reverted by institutions and hedgers. Roughly 60–70% of intraday moves show some form of rebalance.
- Nasdaq (NQ) is momentum-dominant, but even then 45–55% of intraday extensions rebalance, especially outside NY Open.
- FCPO is strongly controlled and rotational, with 70–80% of moves showing rebalance behaviour, especially outside aggressive news flows.
What each candle label means in this indicator
This indicator labels ATR state per candle to read market intent:
E (Expansion) - Volatility increasing. Aggressive participation. Used to drive price, not to rebalance.
S (Strong) - Sustained momentum. Trend still active.
D (Decreasing) - Volatility contracting. Acceptance forming. This is the core condition for rebalance.
W (Weak) represents very low momentum and temporary hesitation. W means the market is unsure.
Indicator features explained
This indicator is designed to be simple, objective, and rule-based:
Candle labels show real-time ATR state (E / S / D / W)
Strong rebalance condition is highlighted when D-D-D forms
Filters avoid signals during ADX expansion
Designed specifically for SMC rebalance to equilibrium, not continuation
Alerts trigger only when valid rebalance conditions appear, helping traders avoid over-trading and impulsive entries
Why D-D-D is very important?
Three consecutive D candles (D-D-D) mean:
- Volatility has contracted for multiple closes
- Chasers are gone
- Order flow is absorbed
- Market accepts current price as unfair
This is the strongest condition for price to return to equilibrium and sometimes continue further to MRH / MRL instead of stopping at 50%.
Important: One or two D candles are not enough. D-D-D confirms acceptance, not just a pause
Why NOT to trade rebalance when ADX is expanding
ADX expansion means trend strength is increasing. When ADX is expanding:
- Decreasing ATR often means reload, not reversal
- Price is being delivered, not balanced
- Rebalance attempts usually fail
This indicator filters out rebalance signals when ADX shows expansion because trend strength overrides balance logic.
Why price can rebalance without taking liquidity
A liquidity sweep is not required for rebalance.
Rebalance happens because acceptance changes, not because stops are hunted.
Price returns to equilibrium when:
- Momentum fades
- Volatility contracts
- Participation drops
- Passive orders dominate
Liquidity sweeps only make the move faster, not necessary. This is why rebalances commonly happen in Asian session, late US session, and mid-range conditions without any obvious stop-run.
Best time to trade rebalance (US & Malaysia time)
Rebalance works best when liquidity is stable or decaying, not expanding.
Best for Gold (GC)
- US Late Session: 11:30 pm – 2:00 am MYT
- Asian Morning: 7:00 am – 11:00 am MYT
Best for Nasdaq (NQ)
- US Late Session only: 11:30 pm – 1:30 am MYT
Avoid for all markets
- NY Open impulse: 8:30 pm – 10:30 pm MYT
This is delivery time, not balance time.
Core idea to remember
Rebalance trading is not about predicting reversals. It is about waiting for acceptance.
Liquidity makes moves fast. Acceptance makes moves possible. This indicator exists to help you trade what markets do most of the time — rebalance back to fair value — with discipline and structure
Hash Ember StackOverview
Hash Ember Stack is a multi-period momentum visualizer that displays a structured view of market pressure across ten different lookback windows. It is designed to help operators assess how momentum behaves across short-term, intermediate, and long-term horizons using a unified ribbon-stack format.
The tool does not generate trading entries by itself; instead, it organizes momentum data so traders can better understand how multiple timeframes align or diverge.
Conceptual Framework
The indicator calculates momentum using one of three oscillator families:
RSI – measures velocity and magnitude of price movement
Stochastic – compares close relative to recent range
CCI – measures deviation from the average price
Each oscillator is normalized into a comparable 0–100 scale so all periods can share the same heatmap color logic. This creates a consistent visual framework regardless of which momentum type is selected.
The ten lookback periods range from very short (fast response) to very long (structural regime). Displaying them together helps illustrate momentum compression, expansion, clustering, or divergence across timeframes.
Ribbon Structure & Visual System
Each period is represented as a horizontal band (“ribbon”) with:
A fixed vertical height for readability
A heat-mapped color derived from momentum value
Optional spacing between ribbons to improve separation
The color system transitions from green (momentum weakness), through neutral tones, into red (momentum strength). These colors do not predict price direction; they simply map oscillator values into a standardized visual gradient.
Labels may be shown on the right side to indicate each ribbon’s lookback period.
Extreme Condition Detection (Optional)
The indicator can highlight situations where several momentum periods reach extreme conditions at the same time.
Oversold status is defined by user-selected thresholds
Overbought status uses an upper threshold
A fluorescent cross is plotted when a minimum number of ribbons meet these definitions
These markers do not produce trading signals; they are intended only to highlight statistically uncommon clustering of extreme momentum readings.
Inputs & Controls
Momentum Type – Selects which oscillator family is used
Smoothing – Applies an SMA to reduce noise
Ten customizable lookback periods – Short to macro momentum
Ribbon Height & Gap – Adjusts layout density
Period Labels – Enables lookback annotations
Extreme Signal Settings – Thresholds and minimum ribbon count
Signal Position – Above or below the ribbon stack
Intended Use
Hash Ember Stack is suitable for:
Identifying how different time horizons align
Visualizing periods of momentum compression and expansion
Contextualizing reversals or trend continuation environments
Supporting discretionary or systematic analysis workflows
The indicator is not a strategy and does not perform backtesting or place trades. It provides structured momentum context that operators can integrate into their own decision-making frameworks.
Futures Calendar Spread Mean Reversion Strategyfutures calendar spread strategy:
Make sure you type in the correct spread in your chart
3 standard deviations for entry, with a stop at 4 standard deviations, seems to work best
don't select tp at mean
Use with energies and grains futures, anything very seasonal
Apex Wallet - Ultimate Multi-Oscillator (9-in-1) & Market TrendThe Apex Wallet Multi-Oscillator is a powerful "All-in-One" technical analysis tool designed to clean up your charts by combining nine of the most effective momentum and trend indicators into a single workspace. This script is engineered to adapt to different trading styles—Scalping, Day-Trading, or Swing-Trading—with a single click.
+4
Whether you are looking for trend exhaustion, momentum shifts, or volatility breakouts, this indicator provides a clear, visual summary of market dynamics.
+1
Key Features
9 Indicators in 1: Access RSI, Stochastic, StochRSI, MACD, Zero-Lag MACD, Andean Oscillator, and the Traders Dynamic Index (TDI).
+1
Smart Layout Modes:
Raw (Brut): Classic view with original values.
+1
Stacked (Empilé): Organizes indicators into fixed vertical zones to prevent overlapping.
+1
Proportional Stacking: Automatically calculates and adjusts the height of blocks based on active oscillators.
+2
Trading Presets: Switch between Scalping, Day-Trading, and Swing-Trading modes. The script automatically adjusts periods and lengths (e.g., RSI 7 for Scalping vs. 21 for Swing) to match the market speed.
+3
Included Oscillators
Stochastic & RSI: Standard momentum tools with color-coded signals.
Traders Dynamic Index (TDI): A full suite including the RSI Price Line, Signal Line, and Market Base Line with optional Bollinger Bandwidth columns.
+1
MACD & Zero-Lag MACD: Includes histogram fills and trend-colored lines for faster reaction to price movement.
+2
Andean Oscillator: An advanced tool to identify Bull/Bear dominance and market "Range" or "Reversal" states.
Visual Signals & Alerts
Market Trend: Optional visual coloring based on indicator crosses to quickly spot bullish or bearish momentum.
+3
Customizable UI: High-fidelity rendering with dashed levels and proportional fills for a professional, clean interface.
+1
Integrated Alerts: Pre-configured alerts for Andean Oscillator trend changes (Bullish, Bearish, or Reversal).
How to use
Select your Trading Mode in the settings based on your timeframe.
Toggle the indicators you want to see.
Use the Stacked mode if you want to keep your sub-window organized without lines crossing each other.






















