Indicator · Pine Script v6 · On the chart

VWAP Reclaim (LONG-only) Indicator

by skipp-dev· code credited to VWAP Long Reclaim Indicator

This indicator detects long-only trading setups centered on volume-weighted average price (VWAP) reclaim sequences.

View on GitHub

GitHub stars1on the repository
Pine versionv6current
Lines of code330
Settings29inputs
LicenceNone statedfile: MPL-2.0
Last update2 days ago26 Oct 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

330 lines of Pine Script v6 from pine/legacy/VWAP_Long_Reclaim_Indicator.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

VWAP_Long_Reclaim_Indicator.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © 2026 VWAP Long Reclaim Indicator

//@version=6
indicator(title="VWAP Reclaim (LONG-only) Indicator", shorttitle="VWAP Reclaim LONG IND", overlay=true)

// Import library
// import wbburgin/wbburgin_utils/2 as utils  // replaced by native slope+bias trend

// ==================== HELPER FUNCTIONS ====================

// Zero-Lag error-corrected EMA source (from SkippALGO USI Quantum Pulse).
// Leads classic EMA by ~2-5 bars, enabling earlier RSI flips.
f_zl_src(src, len) =>
    e1 = ta.ema(src, len)
    e2 = ta.ema(e1, len)
    2.0 * e1 - e2

// ==================== INPUTS ====================

// VWAP Settings
hideonDWM = input(false, title="Hide VWAP on 1D or Above", group="VWAP Settings")
var anchor = input.string(defval="Session", title="Anchor Period",
    options=["Session", "Week", "Month", "Quarter", "Year", "Decade", "Century", "Earnings", "Dividends", "Splits"], 
    group="VWAP Settings")
src = input(title="Source", defval=hlc3, group="VWAP Settings")
offset = input(0, title="Offset", group="VWAP Settings")

// Standard Deviation Bands Settings
showBand_1 = input(true, title="Show Band 1", group="Standard Deviation Bands Settings")
stdevMult_1 = input(0.88, title="Standard Deviation Multiplier", group="Standard Deviation Bands Settings")

// Strategy Settings
simpleVwapCross = input.bool(false, "Simple VWAP Cross Entry",
    tooltip="BUY sobald der Preis den VWAP von unten kreuzt. Überspringt die Reclaim→Retest→Go Sequenz.",
    group="Strategy")
breakoutEntry = input.bool(true, "Breakout Entry (Pullback High)",
    tooltip="BUY wenn Close den rollenden Pullback High bricht (Reclaim→Retest→Go). Kann unabhängig vom Simple VWAP Cross ein-/ausgeschaltet werden.",
    group="Strategy")
matchedTrends = input.bool(true, "Only Show Matched Trends", 
    tooltip="Only show long signals when VWAP is trending up.",
    group="Strategy")

displaybars = input.bool(true, "Barcolors", group="Display")
showTradeLabels = input.bool(true, "Show Trade Labels", group="Display")

// Trend Detection Settings
trendSlopeBars = input.int(5, "VWAP Slope Lookback", minval=1, maxval=20,
    tooltip="Bars for VWAP slope calculation. Lower = faster but noisier.",
    group="Trend Detection")
trendEmaLen = input.int(8, "Price Bias EMA Length", minval=3, maxval=50,
    tooltip="EMA length for price-above-VWAP bias. Lower = earlier signal.",
    group="Trend Detection")

// Reclaim Settings
preset3m = input.string("Neutral", "3m Preset", options=["Aggressive", "Neutral", "Conservative", "Custom"], group="Reclaim Settings")
reclaimWindowBars = input.int(12, "Reclaim: Max Bars bis Retest", minval=1, group="Reclaim Settings")
retestTolATR = input.float(0.10, "Retest Toleranz (ATR-Anteil)", minval=0.0, step=0.01, group="Reclaim Settings")
useAtrTol = input.bool(true, "Toleranz via ATR", group="Reclaim Settings")
debug = input.bool(true, "Debug Markers", group="Reclaim Settings")
showStatusTable = input.bool(true, "Show Status Table", group="Reclaim Settings")
pullbackLookback = input.int(5, "Pullback High Lookback", minval=2, maxval=30,
    tooltip="Rolling-Fenster für den Pullback High (Donchian). Kleiner = schneller. Default 5.",
    group="Reclaim Settings")

// USI Trend Filter Settings (aggressive, early-tuned)
useUsiFilter = input.bool(true, "USI Trend Filter",
    tooltip="BUY nur wenn der USI (Universal Strength Index) einen Aufwärtstrend zeigt. Aggressive Einstellung mit Zero-Lag und kurzen RSI-Längen für früheste Erkennung.",
    group="⚡ USI Trend Filter")
usiLen1 = input.int(7, "USI Slow RSI Length", minval=2, maxval=30,
    tooltip="Längster RSI im Stack. Default 7 (aggressiv). SkippALGO nutzt 13.",
    group="⚡ USI Trend Filter")
usiLen2 = input.int(5, "USI Mid RSI Length", minval=2, maxval=30,
    tooltip="Mittlerer RSI im Stack. Default 5.",
    group="⚡ USI Trend Filter")
usiLen3 = input.int(3, "USI Fast RSI Length", minval=2, maxval=30,
    tooltip="Kürzester/schnellster RSI (Red Line). Default 3 (aggressiv).",
    group="⚡ USI Trend Filter")
usiMinBullStack = input.int(2, "Min Bull Stack", minval=1, maxval=2,
    tooltip="Mindest-Stacking: Wie viele kürzere RSIs müssen über dem nächst-langsameren liegen? 1 = aggressiv, 2 = alle gestapelt.",
    group="⚡ USI Trend Filter")

// Signal Filter Settings — bar-close confirmation + volume gate
barCloseOnly = input.bool(true, "Bar Close Only",
    tooltip="Labels und Alerts nur auf geschlossenen Bars. Verhindert Intra-Bar-Flicker bei Live-Daten.",
    group="🔒 Signal Filters")
useVolFilter = input.bool(false, "Volume Filter",
    tooltip="Signale nur wenn das aktuelle Barvolumen über dem Durchschnitt liegt. Filtert Signale in ruhigen/illiquiden Phasen.",
    group="🔒 Signal Filters")
minVolRatio = input.float(1.0, "Min Volume Ratio", minval=0.1, step=0.1,
    tooltip="Mindest-Verhältnis: Aktuelles Barvolumen / SMA(Volumen). 1.0 = Durchschnitt, 1.5 = 50% über Durchschnitt.",
    group="🔒 Signal Filters")
volSmaLen = input.int(20, "Volume SMA Length", minval=5, maxval=100,
    tooltip="Lookback für den Volumen-Durchschnitt.",
    group="🔒 Signal Filters")

reclaimWindowBarsEff = preset3m == "Aggressive" ? 20 : preset3m == "Conservative" ? 8 : preset3m == "Neutral" ? 12 : reclaimWindowBars
retestTolATREff = preset3m == "Aggressive" ? 0.16 : preset3m == "Conservative" ? 0.06 : preset3m == "Neutral" ? 0.10 : retestTolATR

// Pine hint: evaluate stateful TA functions on every bar, then use the result in conditions.
cumVolume = ta.cum(volume)
if barstate.islast and cumVolume == 0
    runtime.error("No volume is provided by the data vendor.")

// Signal filter gates (evaluated on every bar)
volSma = ta.sma(volume, volSmaLen)
volRatio = volSma > 0 ? volume / volSma : 0.0
volGate = useVolFilter ? volRatio >= minVolRatio : true
barCloseGate = barCloseOnly ? barstate.isconfirmed : true

// ==================== DATA REQUESTS ====================

new_earnings = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_split = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)

// ==================== VWAP ANCHOR PERIOD ====================

isNewPeriod = switch anchor
    "Earnings"  => not na(new_earnings)
    "Dividends" => not na(new_dividends)
    "Splits"    => not na(new_split)
    "Session"   => timeframe.change("D")
    "Week"      => timeframe.change("W")
    "Month"     => timeframe.change("M")
    "Quarter"   => timeframe.change("3M")
    "Year"      => timeframe.change("12M")
    "Decade"    => timeframe.change("12M") and year % 10 == 0
    "Century"   => timeframe.change("12M") and year % 100 == 0
    => false

isEsdAnchor = anchor == "Earnings" or anchor == "Dividends" or anchor == "Splits"
if na(src[1]) and not isEsdAnchor
    isNewPeriod := true

// ==================== VWAP CALCULATION ====================

var float vwapValue = na
var float upperBandValue1 = na
var float lowerBandValue1 = na
var float upperBandValue2 = na
var float lowerBandValue2 = na

if not (hideonDWM and timeframe.isdwm)
    [_vwap, _stdevUpper, _] = ta.vwap(src, isNewPeriod, 1)
    vwapValue := _vwap
    stdevAbs = _stdevUpper - _vwap
    upperBandValue1 := _vwap + stdevAbs * stdevMult_1
    lowerBandValue1 := _vwap - stdevAbs * stdevMult_1
    upperBandValue2 := _vwap + 2 * stdevAbs * stdevMult_1
    lowerBandValue2 := _vwap - 2 * stdevAbs * stdevMult_1

// ==================== RECLAIM -> RETEST -> GO (LONG-ONLY) ====================

atr = nz(ta.atr(14), syminfo.mintick * 10)
tol = useAtrTol ? atr * retestTolATREff : syminfo.mintick * 2

wasBelowVwap = close[1] < vwapValue[1]
reclaimUp = wasBelowVwap and close > vwapValue

var int reclaimBar = na
var float retestLow = na
var bool inReclaimSeq = false
var bool retestSeen = false
var bool inVirtualPos = false

// Reset on new anchor period — old VWAP reclaim/position is no longer valid
if isNewPeriod
    inVirtualPos := false
    inReclaimSeq := false
    retestSeen := false
    retestLow := na
    reclaimBar := na

// Rolling highest high (Donchian) — replaces monotonic pullbackHigh.
// Reacts to pullbacks because old highs drop out of the window.
pullbackHigh = ta.highest(high, pullbackLookback)

if reclaimUp
    reclaimBar := bar_index
    inReclaimSeq := true
    retestSeen := false
    retestLow := na

if inReclaimSeq
    expired = (bar_index - reclaimBar) > reclaimWindowBarsEff
    hardFail = close < vwapValue - tol
    if expired or hardFail
        inReclaimSeq := false
        retestSeen := false

    if not retestSeen
        retestCond = low <= vwapValue + tol and close >= vwapValue - tol
        if retestCond
            retestSeen := true
            retestLow := low

goLong = inReclaimSeq and retestSeen and close > pullbackHigh[1] and bar_index > reclaimBar

// Faster trend detection: VWAP slope over N bars + EMA price bias.
// Reacts ~3 bars earlier than utils.trendUp() because priceBias turns
// true while the VWAP slope is still flat/neutral.
vwapSlope = ta.change(vwapValue, trendSlopeBars)
priceBias = ta.ema(close, trendEmaLen) > vwapValue
isUpTrend = vwapSlope > 0 or priceBias
matchedTrendsFilter_long = not matchedTrends ? true : isUpTrend

// ==================== USI QUANTUM PULSE (EARLY-TUNED) ====================
// Aggressive 3-length RSI stacking with Zero-Lag source for earliest
// possible trend detection. Based on SkippALGO's USI Quantum Pulse but
// trimmed to the 3 shortest lengths and always in Zero-Lag mode.

// Zero-Lag sources: error-corrected EMA removes ~(len-1)/2 bars of lag.
usiSrc1 = f_zl_src(close, usiLen1)   // slowest (default 7)
usiSrc2 = f_zl_src(close, usiLen2)   // mid     (default 5)
usiSrc3 = f_zl_src(close, usiLen3)   // fastest (default 3) — "Red Line"

// RSI on each Zero-Lag source
usiLine1 = ta.rsi(usiSrc1, usiLen1)
usiLine2 = ta.rsi(usiSrc2, usiLen2)
usiLine3 = ta.rsi(usiSrc3, usiLen3)

// Bull stacking: count how many faster RSIs are above the next slower one
// Full stack = 2 (L3 > L2 > L1), minimum stack = 1 for aggressive mode
usiBullStack = (usiLine3 > usiLine2 ? 1 : 0) + (usiLine2 > usiLine1 ? 1 : 0)

// Tier A bull state: Red Line (fastest) above Blue Line (slowest)
usiBullState = usiLine3 > usiLine1

// Combined USI uptrend: stacking meets minimum AND Red > Blue
usiUpTrend = usiBullStack >= usiMinBullStack and usiBullState

// Final USI gate: when disabled, always true so it doesn't block
usiGate = useUsiFilter ? usiUpTrend : true

// Entry signal: simpleVwapCross has priority — when on, only VWAP
// cross entries fire (no breakout). When off, breakoutEntry toggle
// controls the Reclaim→Retest→Go breakout.
entryTrigger = simpleVwapCross ? reclaimUp : (breakoutEntry and goLong)
longSignal = entryTrigger and matchedTrendsFilter_long and usiGate and barCloseGate and volGate and not inVirtualPos

if longSignal
    inVirtualPos := true
    inReclaimSeq := false   // prevent consecutive re-fires (parity with strategy)
    retestSeen := false

exitOnVwapLoss = inVirtualPos and close < vwapValue - tol and barCloseGate

if exitOnVwapLoss
    inVirtualPos := false

// ==================== PLOTS ====================

plot(vwapValue, title="VWAP", color=color.white, linewidth=2, offset=offset)

upperBand_1 = plot(showBand_1 ? upperBandValue1 : na, title="Upper Band #1", color=color.new(color.gray, 50), offset=offset, linewidth=1)
lowerBand_1 = plot(showBand_1 ? lowerBandValue1 : na, title="Lower Band #1", color=color.new(color.gray, 50), offset=offset, linewidth=1)

plot(upperBandValue2, title="Upper Band #2", color=color.lime, linewidth=1)
plot(lowerBandValue2, title="Lower Band #2", color=color.red, linewidth=1)

hl2_plot = plot(hl2, color=na, title="HL2")

// ==================== FILLS ====================

fill(hl2_plot, upperBand_1, color=hl2 > upperBandValue1 ? color.new(color.green, 50) : na, title="Above Upper Band")
fill(hl2_plot, lowerBand_1, color=hl2 < lowerBandValue1 ? color.new(color.red, 50) : na, title="Below Lower Band")
fill(upperBand_1, lowerBand_1, title="Bands Fill", color=isUpTrend ? color.new(color.lime, 88) : color.new(color.red, 88))

// ==================== BAR COLORING ====================

barcolor(displaybars ? (isUpTrend ? color.new(color.lime, 30) : color.new(color.red, 30)) : na, title="Trade Direction")

// ==================== SIGNALS ====================

plotshape(debug and barCloseGate and reclaimUp, title="ReclaimUp", style=shape.triangleup, location=location.belowbar, color=color.new(color.white, 0), size=size.tiny, text="R")
plotshape(debug and barCloseGate and retestSeen and inReclaimSeq, title="RetestSeen", style=shape.circle, location=location.belowbar, color=color.new(color.yellow, 0), size=size.tiny, text="T")
plotshape(showTradeLabels and longSignal, title="Long Entry", style=shape.labelup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.white, size=size.tiny, text="Buy")
plotshape(showTradeLabels and exitOnVwapLoss, title="VWAP Loss Exit", style=shape.labeldown, location=location.abovebar, color=color.new(color.orange, 0), textcolor=color.white, size=size.tiny, text="Exit")
plot(inReclaimSeq or inVirtualPos ? pullbackHigh : na, title="Pullback High", color=color.new(color.aqua, 0), linewidth=1)

// ==================== STATUS TABLE ====================

var table statusTable = table.new(position.top_right, 2, 10, border_width=1)
if barstate.islast
    if showStatusTable
        table.cell(statusTable, 0, 0, "Preset", text_color=color.white, bgcolor=color.new(color.blue, 65))
        table.cell(statusTable, 1, 0, preset3m, text_color=color.white, bgcolor=color.new(color.blue, 80))

        table.cell(statusTable, 0, 1, "Window", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 1, str.tostring(reclaimWindowBarsEff), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 2, "Tol ATR", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 2, str.tostring(retestTolATREff, "#.##"), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 3, "Tol Mode", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 3, useAtrTol ? "ATR" : "Ticks", text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 4, "Tol Px", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 4, str.tostring(tol, format.mintick), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 5, "Anchor", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 5, anchor, text_color=color.white, bgcolor=color.new(color.gray, 85))

        anchorHint = anchor == "Session" ? "OK" : "3m daytrade: Session"
        anchorBg = anchor == "Session" ? color.new(color.green, 75) : color.new(color.orange, 65)
        table.cell(statusTable, 0, 6, "Hint", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 6, anchorHint, text_color=color.white, bgcolor=anchorBg)

        usiLabel = not useUsiFilter ? "OFF" : (usiUpTrend ? "BULL" : "FLAT")
        usiBg = not useUsiFilter ? color.new(color.gray, 70) : (usiUpTrend ? color.new(color.green, 65) : color.new(color.gray, 70))
        table.cell(statusTable, 0, 7, "USI", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 7, usiLabel, text_color=color.white, bgcolor=usiBg)

        bcLabel = barCloseOnly ? "ON" : "OFF"
        bcBg = barCloseOnly ? color.new(color.green, 65) : color.new(color.gray, 70)
        table.cell(statusTable, 0, 8, "BarClose", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 8, bcLabel, text_color=color.white, bgcolor=bcBg)

        volLabel = useVolFilter ? str.tostring(volRatio, "#.##") + "x" : "OFF"
        volBg = not useVolFilter ? color.new(color.gray, 70) : (volGate ? color.new(color.green, 65) : color.new(color.red, 65))
        table.cell(statusTable, 0, 9, "VolFilt", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 9, volLabel, text_color=color.white, bgcolor=volBg)
    else
        table.clear(statusTable, 0, 0, 1, 9)

// ==================== ALERTING ====================

alertcondition(longSignal, title="Long Entry", message="VWAP Reclaim LONG - GO Entry")
alertcondition(exitOnVwapLoss, title="VWAP Loss Exit", message="VWAP Reclaim LONG - VWAP lost, exit")

Overview

VWAP Reclaim (LONG-only) Indicator calculates VWAP with standard deviation bands, tracking slope and price bias through an exponential moving average. Signals trigger on either simple crosses or breakout reclaims following a pullback retest within an ATR-based tolerance window. Trend and volume filters, including a multi-length Universal Strength Index (USI), refine signal validation. Visual elements plot directly on the price chart alongside optional bar coloring, debug markers, and a status table.

Details

Published by

skipp-dev on GitHub

Code credit

VWAP Long Reclaim Indicator, as written in the script's header

Type

Indicator, Pine Script v6

Draws

On the price chart

Category

Trend, Moving averages, Breakout, Volatility & bands

Markets

Any symbol

Timeframes

M1-M5, M15-H1

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Hide VWAP on 1D or AboveboolfalsehideonDWM
Anchor PeriodstringSessionanchor
Sourcesourcehlc3src
Offsetint0offset
Show Band 1booltrueshowBand_1
Standard Deviation Multiplierfloat0.88stdevMult_1
Simple VWAP Cross EntryboolfalsesimpleVwapCross
Breakout Entry (Pullback High)booltruebreakoutEntry
Only Show Matched TrendsbooltruematchedTrends
Barcolorsbooltruedisplaybars
Show Trade LabelsbooltrueshowTradeLabels
VWAP Slope Lookbackint5trendSlopeBars
Show all 29 settings
SettingTypeDefaultVariable
Price Bias EMA Lengthint8trendEmaLen
3m PresetstringNeutralpreset3m
Reclaim: Max Bars bis Retestint12reclaimWindowBars
Retest Toleranz (ATR-Anteil)float0.10retestTolATR
Toleranz via ATRbooltrueuseAtrTol
Debug Markersbooltruedebug
Show Status TablebooltrueshowStatusTable
Pullback High Lookbackint5pullbackLookback
USI Trend FilterbooltrueuseUsiFilter
USI Slow RSI Lengthint7usiLen1
USI Mid RSI Lengthint5usiLen2
USI Fast RSI Lengthint3usiLen3
Min Bull Stackint2usiMinBullStack
Bar Close OnlybooltruebarCloseOnly
Volume FilterboolfalseuseVolFilter
Min Volume Ratiofloat1.0minVolRatio
Volume SMA Lengthint20volSmaLen
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

GEKO Gold

by grzegorzkowalskigk-jpg
1 stars

GEKO Gold is a trend-following indicator for gold (XAUUSD/MGC). It computes a GEKO-TIMID composite trend strength score by blending weekly and daily EMAs and ADX values, then classifies the trend into Emerging, Dominant or Extended states. The indicator plots

Indicator v6 TrendMoving averages
Updated 3 months ago · Custom licence GitHub repository of GEKO Gold
1 stars

V10 Swing Sniper (KLSE) is a daily chart overlay indicator designed for swing trading Bursa Malaysia equities based on Mark Minervini's Stage 2 and Volatility Contraction Pattern (VCP) principles. It calculates exponential moving averages, relative strength ag

Indicator v5 TrendBreakout
Updated 4 months ago · None stated GitHub repository of V10 Swing Sniper (KLSE)

EMA Breakout

by jerryinyang
5 stars

This indicator calculates and plots the exponential moving average on the chart, along with Keltner Channel bands. It applies optional filters based on Keltner Channel and Money Flow to identify breakout signals. Breakouts occur when price crosses the EMA with

Indicator v4 TrendMoving averages
Updated 2 years ago · None stated GitHub repository of EMA Breakout
318 stars

This indicator plots four customizable moving averages directly on the main price chart using default lengths of 3, 8, 21, and 50 periods. It fills the space between adjacent averages in green or maroon depending on trend alignment. Additionally, it computes B

Indicator v5 Moving averagesTrend
Updated 2 months ago · MIT GitHub repository of Multiple Moving Averages

NVDA Trend Ribbon

by longsurf-ai
277 stars

This indicator plots three exponential moving averages and ATR volatility envelopes on the price chart. It compares the fast and slow EMAs to shade a trend ribbon and marks confirmed upward and downward crossovers with triangle labels. Settings change the thre

Indicator v6 TrendMoving averages
Updated yesterday · MIT GitHub repository of NVDA Trend Ribbon

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers