OscillatorsBeginner
Stochastic Oscillator
Compares closing price to its range over a period to identify momentum exhaustion.
1H, 4H, Daily
Crypto, Forex, Equities
Pine Script v5
What is it?
Developed by George Lane in the 1950s, the Stochastic Oscillator measures where the current close sits within the high-low range of the last N periods (default 14). %K = (close - lowest low) / (highest high - lowest low) × 100. %D is a 3-period SMA of %K (the signal line). Values above 80 are overbought; below 20 are oversold. The key insight is that in an uptrend, prices tend to close near the high of the range; in a downtrend, near the low. When this pattern breaks down, momentum is shifting.
When to use it
- Overbought/oversold reversals in ranging markets: %K crossing below 80 from above is a sell signal; crossing above 20 from below is a buy signal.
- %K/%D crossovers: when %K crosses above %D in the oversold zone (below 20), it is a bullish signal; crossing below %D in overbought (above 80) is bearish.
- Divergence: price making a new high while Stochastic makes a lower high is a bearish divergence warning.
- Trend confirmation: in a strong uptrend, Stochastic can stay above 80 for extended periods — use this as a trend-continuation signal rather than a reversal.
- Multi-timeframe: a daily Stochastic in oversold territory combined with a 4H bullish %K/%D cross is a higher-probability long setup.
Common pitfalls
- Stochastic is extremely sensitive to the lookback period. The default 14 periods generates many false signals in volatile crypto markets — try 21 or 28 for smoother readings.
- Like RSI, Stochastic can remain in overbought territory for the entire duration of a strong trend. Shorting every time it hits 80 in a bull market is a losing strategy.
- The %D line is a lagging smoothing of %K — by the time a %K/%D cross occurs, the move may already be well underway.
- Stochastic is calculated on high-low-close data. In crypto, where wicks are often extreme, the high-low range can be dominated by a single spike candle, distorting the reading.
- Fast Stochastic (raw %K and %D) vs Slow Stochastic (smoothed) behave very differently. Most platforms default to Slow — confirm which version you are using.
Free code template
Paste directly into TradingView Pine Editor → Add to chart.
Pine Script v5
/indicator("Stochastic — DAI Template", shorttitle="DAI Stoch", overlay=false)
kLen = input.int(14, "%K Length", minval=1)
dLen = input.int(3, "%D Smooth", minval=1)
obLevel = input.int(80, "Overbought", minval=50)
osLevel = input.int(20, "Oversold", maxval=50)
kVal = ta.stoch(close, high, low, kLen)
dVal = ta.sma(kVal, dLen)
kColor = kVal >= obLevel ? #ef4444 : kVal <= osLevel ? #3b82f6 : #22c55e
plot(kVal, "%K", color=kColor, linewidth=2)
plot(dVal, "%D", color=color.new(#f97316, 20), linewidth=1)
hline(obLevel, "Overbought", color=color.new(#ef4444, 40), linestyle=hline.style_dashed)
hline(50, "Midline", color=color.new(#94a3b8, 60), linestyle=hline.style_dotted)
hline(osLevel, "Oversold", color=color.new(#3b82f6, 40), linestyle=hline.style_dashed)
bgcolor(kVal >= obLevel ? color.new(#ef4444, 92) : kVal <= osLevel ? color.new(#3b82f6, 92) : na)
bullCross = ta.crossover(kVal, dVal) and kVal < osLevel
bearCross = ta.crossunder(kVal, dVal) and kVal > obLevel
plotshape(bullCross, "Bull Cross", shape.triangleup, location.bottom, #22c55e, size=size.small)
plotshape(bearCross, "Bear Cross", shape.triangledown, location.top, #ef4444, size=size.small)
alertcondition(bullCross, "Stoch Bull Cross", "%K crossed above %D in oversold zone")
alertcondition(bearCross, "Stoch Bear Cross", "%K crossed below %D in overbought zone")