Scalping indicators are purpose-built tools that measure how fast price is moving and whether the current market regime offers any edge at all — the two questions that decide a trade lasting seconds to minutes. You build your own because off-the-shelf oscillators were designed for swing horizons, and at scalping speed their smoothing turns signal into history.


Why standard indicators fail the scalper

RSI, MACD, and moving averages share one design flaw at low timeframes: they smooth price to filter noise, and smoothing is lag by construction. By the time a 14-period RSI crosses a threshold on a 1-minute chart, the move it detected is several bars old — often the entire tradable portion of a scalp. These tools answer "what has price been doing," when the scalper needs "what is price doing right now, and is it getting faster or slower."

The fix is to treat price as a moving object and measure its physics directly. That means the first derivative (speed) and the second derivative (acceleration), computed with minimal smoothing and normalized so they are comparable across instruments and sessions.

But speed alone is half the problem. The other half — arguably the more profitable half — is knowing when not to trade. Most scalping losses are not bad entries in good conditions; they are decent entries in conditions where no edge exists. A market chopping violently inside a compressed range will stop out both longs and shorts regardless of timing. So a serious scalping toolkit splits into two families: instruments that measure speed and force, and instruments that classify the regime and gate you out of no-edge chop.


What Pine Script v6 can and cannot build

Before the catalog, an honest boundary. Pine v6 can build anything derivable from OHLCV, time, and higher-timeframe data requests — and that covers the majority of what follows. What it cannot do is see beyond the bar: there is no access to the order book, Level 2, or market-by-order data; volume cannot be split by aggressor side, so true delta, CVD, and order flow imbalance are out of reach; and Pine charts only the underlying, so an option's chain, implied volatility, and greeks are invisible to it.

The practical consequence is that composite scores mixing price with order flow or options data earn a "Partial" verdict: a price-only version builds in Pine and is genuinely useful, while the full version needs a live order-flow or options feed outside TradingView. Every indicator below carries its verdict — Yes, Partial, or No with the missing data named — so you know before writing a line of code what actually ships.


The speed family — price is a moving object

If price is a moving object, the first thing to measure is its velocity, and the second is whether that velocity is increasing or decaying. Four instruments cover this, in ascending sophistication.

Rate of Change (ROC) is the entry point: ROC = (close - close[n]) / close[n]. It expresses speed as a percentage of price over the last n bars, which makes it comparable across instruments. Its weakness is the lookback itself — a slight lag baked into the n-bar window. Pine v6: Yes, via the built-in ta.roc.

Momentum strips out the normalization: Momentum = close - close[n]. Raw point speed, nothing more. It is noisier and instrument-specific, but it responds one bar sooner than anything smoothed. Pine v6: Yes, via ta.mom.

Price Velocity formalizes the derivative: Velocity = Δprice / Δtime. The crucial upgrade over ROC is the denominator — actual elapsed time rather than bar count, which matters when bars vary in information content. And velocity in isolation is meaningless: two points per minute is violent in a quiet instrument and dead in a fast one. So normalize by volatility per unit time — Velocity / (ATR per second) — and the reading becomes "how fast is price moving relative to how fast this instrument normally travels." Pine v6: Yes, computed from close and the time variable.

Price Acceleration is the second derivative: Acceleration = Velocity - Velocity[1]. This is the earliest exhaustion detector available from price alone. Rising price with rising acceleration is a strengthening impulse — the move is feeding on itself. Rising price with falling acceleration is momentum exhaustion: the object is still moving but the force behind it is fading, which is precisely the warning against a late entry. Pine v6: Yes.

The scalper's instinct is to fuse these into one reading. Blend the speed and force components into a single impulse score and tune the weights yourself:


Volatility and expansion — how fast the range is opening

Speed measures direction; volatility measures the size of the arena. A scalper needs both, because a fast move inside a shrinking range behaves differently from the same move inside an expanding one.

ATR — Wilder's average true range — remains the workhorse. It measures range expansion with no directional opinion, which is exactly its value: it tells you whether the market is offering enough travel to pay for spread and slippage. Pine v6: Yes, via ta.atr.

ATR Resolution Ratio is the multi-timeframe idea most retail traders get wrong. You cannot compare a 1-minute ATR to a 15-minute ATR directly, because under a random walk volatility scales with the square root of time — a 15-minute bar should travel roughly sqrt(15) times what a 1-minute bar does, not 15 times. So normalize each ATR by the square root of its timeframe before dividing:

A low ratio means the lower timeframe is compressed relative to its higher-timeframe volatility budget — a coiled state. A high ratio means the lower timeframe is expanding or outright exploding relative to that budget. Skipping the square-root normalization produces a ratio that drifts with timeframe choice and tells you nothing. Pine v6: Yes — request.security fetches the HTF ATR, and the sqrt-time normalization is arithmetic.

This is the exact tool for "is the 1-minute worth trading against the 15-minute right now" — plug in both ATRs and read the regime:

Parkinson and Garman-Klass volatility upgrade the estimator itself. Close-to-close volatility discards everything that happened inside the bar; range-based estimators recover it. Parkinson uses the high-low range, and Garman-Klass adds open and close, each producing a materially less noisy volatility estimate from the same OHLC bar. For fast regime detection, less estimator noise means fewer false regime flips. Pine v6: Yes — both are pure OHLC arithmetic.


Regime and efficiency — trend versus chop

This is the no-trade heart of the system. Every instrument in this section answers one question: does directional edge exist right now, or is the market a coin flip with transaction costs?

Directional Efficiency, the Kaufman Efficiency Ratio, is the single best chop detector in the toolkit. The formula: Efficiency = |net move| / total travel, where net move is the straight-line distance price covered over n bars and total travel is the sum of absolute bar-to-bar changes along the way. A value of 1.0 is a clean straight trend — every point of travel contributed to the destination. A value near zero is violent motion that goes nowhere. The contrast is stark in numbers: a price oscillating 100, 101, 100, 101 travels constantly but nets almost nothing, producing efficiency near 0.2 — untradeable. A price walking 100, 101, 102, 103, 104 nets exactly what it traveled: efficiency 1.0. Pine v6: Yes.

See it move — toggle a clean trend, a mild trend, and violent chop, and watch the efficiency collapse:

The Hurst exponent replaces the eyeball with a statistic. H below 0.5 indicates mean-reverting behavior — chop, where moves tend to retrace. H above 0.5 indicates persistence — trends that continue. H near 0.5 is a random walk, where no strategy based on price history has an expectation. It is a rigorous regime label rather than an impression. Pine v6: Partial — a rescaled-range computation is expressible with arrays but computationally heavy; a windowed approximation is what feasibly runs on a chart.

The Variance Ratio of Lo and MacKinlay asks the random-walk question formally: compare the variance of k-period returns to k times the variance of 1-period returns. Under a true random walk the ratio is 1 — variance scales linearly with horizon and no edge exists. Above 1, returns compound directionally: trending. Below 1, returns cancel: mean-reverting. This is a formal statistical test of whether directional edge is even present, which is a stronger claim than any oscillator makes. Pine v6: Yes — array-based and feasible.

Half-life of mean reversion answers the follow-up question: if the market is chopping, how long will it chop? Fit an AR(1) / Ornstein-Uhlenbeck process to price and derive half-life = -ln(2) / lambda. The result is denominated in bars — an estimate of how long the current mean-reverting condition persists, which directly sizes your no-trade wait instead of leaving it to patience. Pine v6: Partial — obtainable via a linear regression of the price change on the price level; feasible but heavier than a standard indicator.


Structure and compression — the coiling spring

Regime statistics see distributions; structure tools see the swings themselves.

The Structure Persistence Score counts consecutive structural sequences — higher highs with higher lows, or lower lows with lower highs. Long unbroken runs signal a trend with memory; frequent flips between the two signal random chop wearing a trend costume. It is the market-structure counterpart to the efficiency ratio, and the two confirm each other. Pine v6: Yes, built on ta.pivothigh and ta.pivotlow.

Swing Compression measures the spring. Define Compression = 1 - (current swing size / average swing size) and watch the sequence of swing magnitudes. A market printing swings of 2.5, then 1.8, then 1.1, then 0.6 is coiling — each oscillation smaller than the last, energy storing rather than releasing. Compression at this rate rarely resolves quietly; it precedes a breakout whose direction the compression itself does not predict, which is why compression is a preparation signal, not an entry signal. Pine v6: Yes, from the same pivot functions.


Volume and order flow — is the move real money

Price can move on nothing. Volume tools ask whether anyone with size is actually behind the move — and this is where the Pine boundary starts to bite.

Volume Velocity, or volume participation, compares current volume to a time-of-day seasonal baseline rather than a flat average — a distinction that matters because the open is naturally several times heavier than midday, and a flat average would flag every open as a volume surge and every lunch hour as a drought. Measure volume against what is normal for this minute of the session, then take its rate of change. A price move with rising participation is backed by real money; the same move on fading participation is a ghost. Pine v6: Yes — volume is a chart primitive, and the seasonal baseline is a time-of-day array, feasible to maintain.

The VWAP z-score standardizes distance from value: VWAP z-score = (price - VWAP) / sigma(price - VWAP). Raw distance from VWAP means different things on different days; dividing by its own standard deviation converts it to "how unusual is this stretch." A rising z-score is an accelerating rejection of value — price leaving the day's accepted area with conviction. Pine v6: Yes — ta.vwap plus a standard deviation.

Delta and Cumulative Volume Delta (CVD) split volume by aggressor: contracts executed at the ask are aggressive buys, at the bid aggressive sells, and their running difference is the truest available read of who is in control. Pine v6: No — Pine cannot split volume by aggressor side; true delta requires tick or order-book data. A crude approximation assigning up-bar volume to buyers and down-bar volume to sellers exists, but it is unreliable and should never be trusted as delta.

Order Flow Imbalance (OFI), in the Cont-Kukanov-Stoikov formulation, derives buy and sell pressure from changes in the best bid and ask sizes in the Level 1 book — pressure visible before it prints as trades. Pine v6: No — Pine has no order book at any level.

This order-flow layer is the bridge to order flow trading and volume profile — the reads that live below the candle.


Liquidity and structure context

The Liquidity Activity Score aggregates the events smart-money frameworks care about: sweeps of prior extremes, stop-runs, proximity to equal highs and lows, and rejection behavior at those levels. Pine v6: Partial — the price-geometry components build cleanly (equal-high/low proximity, interaction with prior highs and lows, wick rejection, a price-only sweep of a prior extreme), but stop-run strength and absorption are order-flow quantities Pine cannot see. The price-only version pairs with liquidity sweep trading.

The FVG Quality Score addresses a chronic problem with fair value gaps: geometry alone produces far too many candidates. Score each gap by displacement strength, volume confirmation, whether it accompanied a break of structure, higher-timeframe alignment, and freshness. A geometrically valid gap printed in a dead market scores low — and deserves to. Pine v6: Partial — geometry, displacement, and volume all build in Pine; the full quality weighting mixes discretionary and order-flow inputs that do not.

Jump detection, from Barndorff-Nielsen and Shephard, separates a genuine jump — a sweep or impulse, a discontinuity in the price path — from ordinary continuous diffusion, by comparing realized variance to bipower variation. Bipower variation is robust to jumps; realized variance is not; a widening gap between them flags a jump statistically rather than by eye. Pine v6: Yes — both quantities compute from returns.


The composite engines — blending signals into one score

No single line above is sufficient. Each measures one dimension, and scalping decisions are multi-dimensional: a market can be fast but inefficient, compressed but well-participated. The answer is to normalize each component and blend them into weighted scores. This is the Oyamori engine stack.

The Market Compression Index (MCI) answers "how compressed or dead is this market." The blend: directional inefficiency 40%, ATR compression 20%, velocity compression 15%, swing compression 15%, volume compression 10%. Read it in bands: 0–20 Expansion, 21–40 Healthy, 41–60 Transition, 61–80 Compression, 81–100 Dead Zone. Pine v6: Yes — every component is price or volume based.

The Adaptive Regime Index (ARI) answers "what regime is this," on a 0–100 scale: 0–30 Dead, 31–50 Choppy, 51–70 Tradable, 71–85 Trending, 86–100 Momentum Expansion. Its blend draws on ATR expansion, directional efficiency, structure persistence, volume participation, price velocity, and liquidity activity. Pine v6: Partial — buildable when the liquidity-activity component is price-only; the full version needs order flow.

The Market Impulse Score (MIS) answers "is there real driving force right now" — the question that matters immediately after a sweep, a break of structure, or a range breakout. It blends price velocity, price acceleration, volume velocity, delta acceleration, order-book imbalance, and sweep strength. Pine v6: Partial — a price-only MIS built from velocity, acceleration, volume velocity, and price-sweep strength ships in Pine, but the delta-acceleration and order-book-imbalance components need order flow.

The Scalp Opportunity Index (SOI) shifts the question from market state to opportunity quality: SOI = ARI + MIS + liquidity context + SMC structure + FVG quality + HTF alignment + risk-reward - MCI. Note the sign on MCI — compression subtracts from opportunity. Bands: 0–39 No Trade, 40–59 Watch, 60–74 Tradable, 75–89 High Quality, 90–100 Exceptional. Pine v6: Partial — the price-based core builds; the order-flow and options inputs do not.

The Premium Expansion Probability (PEP) is options-specific, built for 0DTE: if I buy this call or put now, what is the chance of premium expansion in the next 3–10 minutes? It blends underlying impulse, delta sensitivity, gamma effect, implied-volatility response, spread quality, option volume, and a time-to-expiry effect. Pine v6: No — Pine charts only the underlying and cannot read the option chain, implied volatility, or greeks.

Every indicator in this article, with its formula and Pine v6 verdict, is searchable in one place — filter by tier or by what actually builds in Pine:


The gates — turning scores into a no-trade filter

Scores describe; gates decide. The final layer converts continuous readings into binary permission.

The Regime Transition Detector (RTD) exists because scalping profit lives in the transition from compression to expansion, not in the mature trend — by the time trend indicators confirm, the cheap entry is gone. The engine is a CUSUM filter: accumulate the running sum of price deviations and fire when the sum crosses a threshold, a change-point method that reacts to shifts faster than any moving average. The trigger cluster: MCI falling fast, the ATR ratio rising, velocity rising, volume participation rising, and a range-break attempt. Pine v6: Yes.

The Adaptive No-Trade Zone (ANTZ) makes the regime impossible to ignore by painting the chart background. An example condition: MCI > 70 and directional efficiency < 0.30 and volume participation < 0.80 and MIS < 40 and no recent liquidity event. Output: red background means no trade, amber means wait, clear or green means tradable, blue means expansion. Pine v6: Partial — background coloring via bgcolor is a Pine strength, but the MIS and liquidity components carry order-flow dependencies, so a price-only version is what actually ships.

Drive the gate yourself — move the four readings and watch the background flip between no-trade, wait, tradable, and expansion:

The Tradeability Gate (TG) is the last checkpoint before any signal fires. An example: allow the trade only if ARI >= 55 and MCI <= 60 and SOI >= 65 and MIS >= 50, with no higher-timeframe conflict, an acceptable spread, and expected risk-reward at or above minimum. Every condition must hold; one failure vetoes the trade. Pine v6: Partial — the spread and order-flow dependencies fall outside Pine.

Worth a brief mention here is the Multi-Resolution Regime Matrix (MRM): a regime label per timeframe — 15s, 1m, 5m, 15m, 1h — read according to your trade horizon rather than by naive majority vote, since a scalper cares about the 15s-to-5m rows and a day trader about the 5m-to-1h rows. Pine v6: Partial — multi-timeframe requests work, but true sub-minute resolution like 15 seconds needs seconds-resolution data.


Validate before you trust — the part everyone skips

A score that has not been tested is a story, not an edge. This section is shorter than the catalog above and matters more.

Start with information-driven bars. A fixed 1-minute bar is an arbitrary slice of the day: it mixes the frantic open with dead lunch chop and pretends they carry equal information. Sampling by activity instead — volume bars, dollar bars, or imbalance bars, each closing when a threshold of activity is reached — gives every bar comparable information content and makes downstream statistics behave. Pine v6: No — Pine bars are fixed time or tick and cannot natively resample into dollar or imbalance bars.

Next, triple-barrier labeling. Defining a "win" honestly is harder than it sounds for a scalping signal. The triple-barrier method labels each hypothetical entry by which barrier it hits first: a profit target, a stop, or a time limit. No cherry-picked exits, no open-ended holding periods — every signal receives an unambiguous outcome. Pine v6: Partial — the strategy tester approximates it, though it is a labeling method for research more than a live indicator.

Then the backtest itself. Scalping trades overlap heavily in time, and overlapping trades leak information between training and test sets — the reason naive backtests overstate edge so reliably. Purged, embargoed cross-validation removes training samples that overlap each test window and embargoes a buffer around it; walk-forward testing then demands the strategy earn its results strictly out of sample, on data that did not exist when the parameters were chosen. Pine v6: No — this is backtesting methodology, not a chart indicator.

The point lands here: every composite score in this article — MCI, ARI, MIS, SOI, all of them — is a hypothesis until it survives this process on your instrument, your timeframe, your costs. Build the indicator first. Then earn the right to trust it. The discipline is the same as measuring any system with its full set of trading metrics.


The one-line build order
Measure price as a moving object — its speed and its acceleration — and judge the regime with efficiency and compression before asking any directional question. Confirm with volume, and where your data feed allows it, with real order flow. Blend the components into normalized, weighted scores, then gate them so the system refuses to trade compressed, inefficient, unparticipated markets at all. And before a single dollar rides on any of it, validate the whole stack out of sample with honest labels and purged, walked-forward tests — because in scalping, the edge you have not verified is indistinguishable from the edge you do not have.