WaveTrend Oscillator: LazyBear Formula, Crosses, and Limits
WaveTrend is a momentum oscillator popularized on TradingView by LazyBear's published script. Its two lines summarize normalized price movement; a crossover is a change in that relationship, not a forecast of a profitable trade.
Read the original formula
LazyBear's WaveTrend publication is the reference for the version discussed here. The familiar calculation uses:
- Average price AP = (high + low + close) / 3.
- ESA = an exponential moving average of AP over the channel length.
- D = an exponential average of the absolute difference between AP and ESA.
- CI = (AP − ESA) / (0.015 × D).
- WT1 = an exponential average of CI over the average length.
- WT2 = a four-bar simple average of WT1.
The familiar channel/average settings are 10 and 21. Reference lines at +60/+53 and −60/−53 describe relatively high and low oscillator readings. WaveTrend is not bounded like RSI: it can exceed those levels, and a flat or insufficient price history can make normalization unavailable.
Interpret crosses and extremes
WT1 crossing above WT2 indicates the faster line has overtaken its smoother signal. A cross below shows the reverse. An extreme reading can persist during a trend, so selling every upper-band touch or buying every lower-band touch can create repeated losing entries.
Divergence compares price swings with oscillator swings. Define which pivots qualify and when each pivot becomes known. If a script confirms pivots using later bars, its marker cannot be treated as information available on the pivot bar itself.
There is no dataset here establishing that WaveTrend leads RSI, removes whipsaws, or anticipated a particular Bitcoin reversal. Evaluate those claims with explicit rules and unseen data.
Variants are different calculations
A standard-deviation-normalized variant changes the denominator and therefore the scale. This retained function fragment illustrates that difference; it is not a complete indicator or a verified reproduction of every script called Enhanced WaveTrend:
f_ewave(src, chlen, avglen) =>
basis = ta.ema(src, chlen)
dev = ta.stdev(src, chlen)
wave = (src - basis) / dev * 100
ta.ema(wave, avglen)
The fragment requires a surrounding script, a call, and output plots. Its division also requires nonzero, available standard deviation. The factor of 100 does not constrain its output to ±100. Thresholds from the original WaveTrend should not be transferred without examining the resulting series.
Install and test the intended version
Open the author's publication, confirm the author and settings, and add that script to your chart. Community derivatives can change smoothing, alerts, coloring, divergence confirmation, or higher-timeframe requests. Read their source or documentation individually.
MT4, MT5, and thinkorswim versions require separate implementations. A familiar name does not prove numerical equivalence or permission to redistribute code. Compare timestamps, input prices, warm-up behavior, and closed-bar outputs before treating a port as interchangeable.
For alerts, specify whether the signal must survive candle close. For a strategy, separately define fills, stops, position sizing, and costs. Syntax validity and a visually appealing oscillator do not establish trading performance.

