Stochastic Oscillator Explained
The Stochastic Oscillator measures where the current close sits within the high-low range of the last N periods. It's bounded 0–100: near 100 = close is at the top of the range (strong upward momentum), near 0 = bottom. Traders use it for overbought/oversold signals and divergence, similar to RSI but faster-reacting.
The math
%K = 100 × (close − lowest low of N periods) / (highest high of N − lowest low of N)
%D = simple moving average of %K over M periods
Standard settings: N = 14, M = 3. %K is the fast line; %D is the slow line.
"Fast stochastic" uses raw %K. "Slow stochastic" smooths %K with a 3-period SMA before taking %D — less noisy, more commonly used.
How to read it
- Above 80 → overbought
- Below 20 → oversold
- %K crosses %D → momentum shift signal
Same warning as RSI: in a strong trend, Stochastic will peg near 100 or 0 for extended periods. Fading every extreme reading is a great way to lose money on trend days. Combine with a trend filter.
Divergence is where Stochastic shines. Because it reacts faster than RSI, it often flags divergences earlier — sometimes too early, but earlier.
Stochastic in Pine Script (v6)
//@version=6
indicator("Stochastic + Alerts", overlay=false)
kLen = input.int(14, "%K Length")
kSmooth = input.int(3, "%K Smoothing")
dSmooth = input.int(3, "%D Smoothing")
k = ta.sma(ta.stoch(close, high, low, kLen), kSmooth)
d = ta.sma(k, dSmooth)
plot(k, color=color.blue, title="%K")
plot(d, color=color.orange, title="%D")
hline(80, "Overbought", color=color.red)
hline(20, "Oversold", color=color.green)
if ta.crossover(k, d) and k < 20
alert("Stochastic bullish cross in oversold zone", alert.freq_once_per_bar_close)
if ta.crossunder(k, d) and k > 80
alert("Stochastic bearish cross in overbought zone", alert.freq_once_per_bar_close)
Stochastic vs. RSI
| Trait | RSI | Stochastic |
|---|---|---|
| Input | Gain/loss ratio | Close relative to range |
| Speed | Smoother, slower | Faster, noisier |
| Best for | Trend momentum, divergence | Short-term reversals, divergence |
| Signals per day | Fewer | More |
Many traders run both. RSI for the broad momentum read; Stochastic for precise short-term timing.
Common mistakes
- Trading every cross. %K crossing %D happens constantly in chop. Restrict to crosses that occur in overbought/oversold zones at minimum.
- Ignoring divergence context. Stochastic divergence in a strong trend often fires three or four times before the actual reversal.
- Using defaults without thought. 14/3/3 is fine for most timeframes, but on 1-minute charts it's often too noisy — bump to 21/5/5.
Automating Stochastic signals with CrossTrade
Convert the indicator to a strategy() and wire up the standard CrossTrade payload:
key=YOUR-SECRET-KEY;
command=place;
account=Sim101;
instrument=ES 03-26;
action={{strategy.order.action}};
qty={{strategy.order.contracts}};
order_type=market;
tif=day;
sync_strategy=true;
market_position={{strategy.market_position}};
Frequently Asked Questions
What does the Stochastic Oscillator measure?
Where the current closing price sits within the high-low range of the last N bars. Readings near 100 mean price is closing at the top of its recent range; near 0, at the bottom.
Fast vs slow Stochastic — which should I use?
Slow Stochastic (the default 14/3/3 in most platforms) is less noisy and the standard choice. Fast Stochastic reacts quicker but fires many false signals. Unless you have a specific reason, use slow.
Is Stochastic better than RSI?
Neither is better — they answer slightly different questions. RSI is smoother and better for trend momentum; Stochastic reacts faster and is better for short-term timing. Many traders use both together.
What's the best Stochastic setting for day trading?
Default 14/3/3 works for most intraday timeframes. On very fast charts (1-minute), consider 21/5/5 to reduce noise. On slower charts (hourly+), defaults are fine.