TradingView indicator guides

SMA Slope: Standard-Deviation Scaling and Pine Script

This indicator divides the one-bar change in a simple moving average by the standard deviation of that change. It preserves the slope’s sign when the denominator is positive. It does not subtract the mean, measure acceleration, or establish statistical significance. The 0.6 threshold is a display setting, not a probability cutoff.

Inspect the Pine Script

Derive the slope before scaling it

For window N, the code uses d = SMA(close, N) − SMA(close[1], N). With a fixed N and complete data, this equals (close − close[N]) / N: the incoming price replaces the departing price in adjacent windows. It can be positive even when the current close is below the previous close.

The plotted value is d / sigma, where sigma is the population standard deviation of recent raw slopes. A centered z-score would instead be (d − mean(d)) / sigma. Omitting the mean is a substantive difference. Neither a dimensionless ratio nor a threshold crossing establishes a hypothesis test, confidence level or probability of a profitable trade.

A second difference d − d[1] would describe a change in raw slope. This script does not use that as its output. Changes in the plotted ratio can come from the numerator, the denominator, or both.

A numerical example separates the three quantities

Assume the selected deviation window contains hypothetical raw slopes 1, 2 and 3. Their mean is 2 and population standard deviation is sqrt(2/3) = 0.816497. The plotted ratio is 3 / 0.816497 = 3.674235. A centered z-score would be (3 − 2) / 0.816497 = 1.224745.

Now let the next raw slope be 2, making the window 2, 3, 2. Its standard deviation is sqrt(2/9) = 0.471405, so the plotted ratio becomes 4.242641. The raw slope fell from 3 to 2 while the normalized value rose. Calling that rise “accelerating SMA” would be incorrect.

If the window contains only the same slope, such as 2, 2, 2, its standard deviation is zero. The ratio is undefined despite a steadily rising average. The example below leaves that value unplotted. An absent line is not a measured neutral market.

Multiplying the full price series by a positive constant multiplies d and sigma equally, preserving the ratio. Adding a constant price offset leaves d unchanged. These invariances remove price units; they do not make the distribution, risk or meaning of a 0.6 threshold identical across assets and timeframes.

Normalization warmup and the difference from the product helper

The original helper chooses N deviation observations while bar_index < 10N, then switches abruptly to 10N. This counts chart bars rather than available slope observations. With N = 20 and complete prices, the first raw slope appears at zero-based index 20. Twenty slope observations exist at index 39, but 200 observations do not exist until index 219.

Switching the original helper at index 200 therefore requests the long deviation too early: indices 200 through 218 lack the full long window. This is not a gradual expansion from 20 to 200.

The page’s adapted example calculates both deviations on every bar and selects the long one only when available. It uses the short estimate during the earlier period, requires a positive denominator, and exposes the selected length in the Data Window. The product helper is not changed by this example. A switch from short to long normalization can still create a jump because the estimate changes.

The earliest possible short estimate is at index 2N − 1; the long estimate is at index 11N − 1 for complete prices. Missing values can change those spans. Neither enough observations nor a nonzero deviation guarantees a stable statistical estimate.

Colors, controls and realtime limits

Green means the ratio is strictly above the chosen threshold; red means it is strictly below its negative; blue covers valid values between and including both boundaries. There is one curve, no filled region. Window and display threshold are actual inputs. The adapted Window minimum is 2 and Threshold minimum is 0.

The threshold changes colors and reference lines, not the normalized values. At a fixed series, increasing a nonnegative threshold cannot increase the count of outside-band bars, but no fixed reduction in events or improvement in returns follows. Changing N alters both the SMA and the normalization horizon, so it is not a one-variable change to smoothing alone.

The output can change during an open realtime bar. There is no confirmed-bar gate, alert condition, strategy order or higher-timeframe request. A price gap is valid input to an SMA; it may change the slope substantially, but it does not mathematically break the average.

A source-backed way to check the implementation

TradingView’s SMA documentation describes the equal-weight average. The ta.stdev reference defines the standard-deviation function; the default biased estimate divides by the observation count. These building blocks do not establish a named inventor or a performance record for this particular ratio.

  1. Check the raw slope against (close − close[N]) / N on complete data. Inspect raw slope, denominator and selected window together.
  2. Reproduce the numerical examples and verify constant-slope behavior, the first short estimate and the long-window switch.
  3. Choose whether a proposed rule uses threshold occupancy, a fresh crossing, or closed-bar confirmation. Define entries, exits, costs and sizing separately.
  4. Compare parameter choices on a fixed sample and an untouched evaluation period. Do not translate 0.6 into a confidence claim or infer institutional participation from this price-only calculation.

ROC instead expresses endpoint price change relative to the older price. ADX describes directional-movement strength without a direction sign. They answer different questions; no universal lead time or superiority ranking follows from these formulas.

Pine Script v6: implementation and limits

This page adaptation replaces the original bar-index switch with availability-based selection of short and long deviations. It adds input bounds, a positive-denominator guard and Data Window diagnostics. Its formula remains uncentered slope divided by slope deviation; the shared product helper is unchanged.

Pine Script v6
//@version=6
indicator("SMA slope divided by slope deviation", overlay=false)

window = input.int(20, "SMA window", minval=2)
threshold = input.float(0.6, "Display threshold", minval=0.0)

rawSlope = ta.sma(close, window) - ta.sma(close[1], window)
shortDeviation = ta.stdev(rawSlope, window)
longDeviation = ta.stdev(rawSlope, window * 10)
useLongWindow = not na(longDeviation)
deviation = useLongWindow ? longDeviation : shortDeviation
isReady = not na(rawSlope) and not na(deviation) and deviation > 0
normalizedSlope = isReady ? rawSlope / deviation : na
lineColor = normalizedSlope > threshold ? color.green : normalizedSlope < -threshold ? color.red : color.blue

plot(normalizedSlope, "Slope / deviation", color=lineColor, linewidth=2)
hline(0, "Zero", color=color.gray)
hline(threshold, "Upper threshold", color=color.gray)
hline(-threshold, "Lower threshold", color=color.gray)
plot(rawSlope, "Raw SMA slope", display=display.data_window)
plot(deviation, "Slope deviation", display=display.data_window)
plot(useLongWindow ? window * 10 : window, "Deviation window", display=display.data_window)
Existing indicator chart preview
Existing visual preview. Verify exact values against the source; the image is not a performance result.

Specify a checkable adaptation in Pineify

Ask the AI Coding Agent to specify the normalization window, zero-deviation behavior and whether you want this uncentered ratio or a centered z-score. Request bar-close conditions explicitly if needed. Validate the source and numerical examples before building or testing any trading rule.

Open Pine Script AI Coding Agent

Educational indicator analysis. No measured trading performance is established here. Syntax validation does not prove formula equivalence, execution assumptions or profitability.

Implementation questions

No. It divides raw slope by its standard deviation without subtracting the slope mean. A centered z-score would use (slope − mean slope) / standard deviation.

No. The denominator can fall faster than the slope. The synthetic example raises the ratio from 3.674235 to 4.242641 while raw slope falls from 3 to 2.

The adapted example returns na. Constant nonzero slope can have zero standard deviation, so no plotted value does not imply a flat market.

Both N and 10N deviations are calculated each bar. The page example uses the long estimate only once it is available; the original product helper switches based on bar_index instead.

No. It is a configurable display threshold. A unitless ratio is not a p-value, confidence level or estimate of trading success.