retail // reset · tool library

Indicator Vault.

Free indicators teach the transaction story: structure, momentum, money flow and participation. Paid BTC tools organise the longer cycle model on price — not secret magic.

EMA · SMA · RSI · MFI · volume · divergence · BTC cycle tools
how to read the signals together

Read the transaction story.

Price is the result. Read what had to happen for price to get there: where it sits in structure, whether movement has momentum, whether reported volume is leaning with the move, and whether that effort produced real distance. The indicators are not separate votes; they describe different parts of the same auction.

01 · structure · EMA / SMA

Location, trend control and acceptance.

A moving average is an average of prior prices, not a wall that price must obey. A rising, ordered stack — for example 20 above 50 above 100 above 200 — shows that recent accepted prices are higher than older accepted prices. The important read is the retest: does price pull back into an average, find buyers, reclaim it and continue, or does it close through it, fail to recover it, then start accepting below?

EMA gives newer candles more influence, so it turns sooner when behaviour changes. SMA gives every candle in the chosen lookback equal influence, so it turns more slowly and filters more short-term noise. Averages spreading apart can show a move expanding; flattening and compressing averages show that directional control is weakening or price is rotating in balance.

02 · momentum · RSI

How persistently are closes pushing?

RSI compares recent average gains with recent average losses. It rises when positive closes dominate its lookback and falls when negative closes dominate. In a strong advance, RSI commonly holds a higher range: pullbacks may find support around its middle area before the next push. In a decline, bounces often fail lower and RSI struggles to hold that middle area.

Read the reaction at structure, not a number in isolation. A breakout or reclaim is more congruent when RSI also breaks its own prior swing, recovers the middle region and stays elevated. Price making a new high while RSI cannot match its previous high is a loss of momentum confirmation — a warning to inspect the next response, not an automatic short. A high RSI can simply mean the current advance is strong.

03 · flow · MFI

Is the measured volume leaning with price?

MFI is a 0–100 oscillator built from typical price and the volume reported by the chart feed. When it rises, more of that measured activity is being associated with rising typical price over the selected lookback; when it falls, the balance is shifting toward falling typical price. It is volume-weighted pressure, not a literal record of all money entering or leaving an asset — particularly where crypto volume differs across venues.

A level reclaim has stronger confluence when price regains structure and MFI also turns upward or reclaims its middle area. When price rises while MFI stays weak, or price makes a new high while MFI cannot, the move lacks flow confirmation. That can precede absorption, a pause, or a failed breakout, but it needs price confirmation before it becomes a trade decision.

04 · participation · volume

How much activity produced the result?

Volume measures activity, not whether buyers or sellers will win. Compare it with the candle’s spread, close and the distance price actually travels. A break through a level on expanding volume, wide range and a close beyond the level shows committed activity and possible acceptance. A quiet pullback inside an established uptrend can show that the counter-move is not attracting the same participation.

The opposite read matters just as much: exceptional volume into resistance or support with little net progress, a narrow body or repeated rejection wicks means a lot traded but price could not travel. That can be absorption or defence. The next candles decide whether the level was accepted or rejected; volume alone does not tell you which side has won.

CONGRUENT READ · evidence stacking

When the story is internally aligned.

For a bullish continuation or reclaim, look for price above or reclaiming a rising average stack, RSI recovering and holding its stronger range, MFI turning with price rather than lagging it, and volume expanding on the directional move while the pullback contracts. This does not guarantee continuation; it means the chart is not asking you to ignore a major disagreement.

NON-CONGRUENT READ · slow down

When price and participation tell different stories.

Be more careful when price reaches a fresh high but the averages flatten, RSI and MFI fail to confirm their prior swings, the breakout has little participation, or very high volume produces almost no progress. That is not a command to fade the move. It is a cue to stop chasing and wait for the next candles to show acceptance, rejection, reclaim or failure.

free indicator · one TradingView slot

EMA + RSI / MFI Context Combo.

Four editable moving averages sit on price; RSI and MFI remain together in the normal 0–100 lower pane. The combination shows price location and trend structure above, then momentum and volume-weighted pressure below — all in one free TradingView slot.

copy directly · source stays compact

20 / 50 / 100 / 200 EMA or SMA · RSI / MFI

Each average can be changed independently: EMA or SMA, length, colour, opacity and thickness. Use the averages to locate price; use RSI to judge momentum persistence; use MFI to ask whether the chart’s measured volume is leaning with that movement. The copy button works without opening the source.

4 editable moving averages EMA or SMA per line RSI · lower pane MFI · lower pane one TradingView slot
View compact source
//@version=5
indicator("Retail // Reset — EMA + RSI / MFI Context Combo", overlay=false)

// One TradingView slot: moving averages are forced onto price.
// RSI and MFI remain in this normal 0–100 lower pane.
src = input.source(close, "Moving-average source", group="General")
showRSI = input.bool(true, "Show RSI", group="Oscillators")
showMFI = input.bool(true, "Show MFI", group="Oscillators")
rsiLength = input.int(14, "RSI length", minval=1, group="Oscillators")
mfiLength = input.int(14, "MFI length", minval=1, group="Oscillators")

maValue(method, source, length) =>
    method == "EMA" ? ta.ema(source, length) : ta.sma(source, length)

// MA 1 — default 20
ma1Method = input.string("EMA", "Method", options=["EMA", "SMA"], group="MA 1 · default 20")
ma1Length = input.int(20, "Length", minval=1, group="MA 1 · default 20")
ma1Color = input.color(color.aqua, "Colour", group="MA 1 · default 20")
ma1Opacity = input.int(0, "Opacity", minval=0, maxval=100, group="MA 1 · default 20")
ma1Width = input.int(2, "Thickness", minval=1, maxval=4, group="MA 1 · default 20")
ma1 = maValue(ma1Method, src, ma1Length)

// MA 2 — default 50
ma2Method = input.string("EMA", "Method", options=["EMA", "SMA"], group="MA 2 · default 50")
ma2Length = input.int(50, "Length", minval=1, group="MA 2 · default 50")
ma2Color = input.color(color.orange, "Colour", group="MA 2 · default 50")
ma2Opacity = input.int(0, "Opacity", minval=0, maxval=100, group="MA 2 · default 50")
ma2Width = input.int(2, "Thickness", minval=1, maxval=4, group="MA 2 · default 50")
ma2 = maValue(ma2Method, src, ma2Length)

// MA 3 — default 100
ma3Method = input.string("EMA", "Method", options=["EMA", "SMA"], group="MA 3 · default 100")
ma3Length = input.int(100, "Length", minval=1, group="MA 3 · default 100")
ma3Color = input.color(color.fuchsia, "Colour", group="MA 3 · default 100")
ma3Opacity = input.int(8, "Opacity", minval=0, maxval=100, group="MA 3 · default 100")
ma3Width = input.int(2, "Thickness", minval=1, maxval=4, group="MA 3 · default 100")
ma3 = maValue(ma3Method, src, ma3Length)

// MA 4 — default 200
ma4Method = input.string("EMA", "Method", options=["EMA", "SMA"], group="MA 4 · default 200")
ma4Length = input.int(200, "Length", minval=1, group="MA 4 · default 200")
ma4Color = input.color(color.yellow, "Colour", group="MA 4 · default 200")
ma4Opacity = input.int(12, "Opacity", minval=0, maxval=100, group="MA 4 · default 200")
ma4Width = input.int(2, "Thickness", minval=1, maxval=4, group="MA 4 · default 200")
ma4 = maValue(ma4Method, src, ma4Length)

plot(ma1, "MA 1", color=color.new(ma1Color, ma1Opacity), linewidth=ma1Width, force_overlay=true)
plot(ma2, "MA 2", color=color.new(ma2Color, ma2Opacity), linewidth=ma2Width, force_overlay=true)
plot(ma3, "MA 3", color=color.new(ma3Color, ma3Opacity), linewidth=ma3Width, force_overlay=true)
plot(ma4, "MA 4", color=color.new(ma4Color, ma4Opacity), linewidth=ma4Width, force_overlay=true)

rsi = ta.rsi(close, rsiLength)
mfi = ta.mfi(hlc3, mfiLength)
hline(70, "Upper guide", color=color.new(color.red, 50), linestyle=hline.style_dotted)
hline(50, "Midline", color=color.new(color.gray, 65), linestyle=hline.style_dotted)
hline(30, "Lower guide", color=color.new(color.lime, 50), linestyle=hline.style_dotted)
plot(showRSI ? rsi : na, "RSI", color=color.aqua, linewidth=2)
plot(showMFI ? mfi : na, "MFI", color=color.orange, linewidth=2)

// EMA = faster response to newer candles.
// SMA = equal weighting across the lookback.
// Read price, structure and volume together.
future free collection · six RSI designs

Six ways to make RSI easier to read, not obey.

The designs are deliberately separate. One shows boundaries, another shows intensity, and the divergence versions remain selective so the chart is not covered in weak signals.

RSI · region 01

Zone Rails

Clear horizontal lines for 30 / 50 / 70, with optional 20 / 80 exhaustion rails. The regions can be lightly coloured so the eye sees low, neutral and high pressure immediately.

fixed boundaries · clean reading
// Retail // Reset — RSI Zone Rails // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
RSI · region 02

Regime Bands

Range blocks rather than just lines: a bull-pressure area, bear-pressure area and neutral middle. The purpose is to notice where RSI is holding, not to treat 70 and 30 as universal sell and buy commands.

range behaviour · context first
// Retail // Reset — RSI Regime Bands // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
RSI · gradient 01

Pressure Heatline

A continuous colour gradient along the RSI line: user-set red and green extremes with a calm midpoint. It makes speed and direction of pressure legible without extra shapes.

continuous pressure colour
// Retail // Reset — RSI Pressure Heatline // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
RSI · gradient 02

Extremes Glow

The line stays quiet around the centre, then gains colour intensity as it approaches the chosen high or low extreme. It is designed to make exhaustion zones visible without calling the top or bottom.

quiet middle · vivid extremes
// Retail // Reset — RSI Extremes Glow // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
RSI · divergence 01

Major Pivot Divergence

Only marks confirmed swing-pivot disagreement: price makes a meaningful higher high while RSI makes a lower high, or price makes a meaningful lower low while RSI makes a higher low. No minor wick clutter.

confirmed pivots · fewer flags
// Retail // Reset — RSI Major Pivot Divergence // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
RSI · divergence 02

Confluence Divergence

Shows a major divergence only when RSI and a confirming oscillator such as MFI agree on the same directional mismatch. Agreement makes the warning stronger; it still does not prove a reversal.

RSI + MFI agreement
// Retail // Reset — RSI Confluence Divergence // Pine v5 source slot // Replace this placeholder with the finished source. // The Copy code button will copy this block automatically.
support the build · paid access

Keep the free vault free.

The free tools exist to teach the language of the chart. Crypto donations support the research, writing, testing and maintenance behind them. Paid access supports the heavier BTC systems and their ongoing updates.

crypto support

Donate to the free layer.

Use the exact wallet and network displayed below. A crypto address is not interchangeable across chains; send only the stated asset on the stated network.

DONATION WALLET · ADD NETWORK + ADDRESS
REPLACE_WITH_YOUR_CRYPTO_WALLET_ADDRESS
Network: REPLACE WITH NETWORK · Verify the first and last characters before sending. Do not send until this field has been replaced with a live wallet and exact chain.