100 means the extreme is today's bar, 0 means it is the oldest bar
still in the window — so a strong uptrend keeps aroonUp pinned near 100
(fresh highs) while aroonDown decays toward 0, and the crossovers are
the signal. The name is Sanskrit for "dawn's early light"; Chande's point
is that this reads a trend change earlier than an average can, because
age moves the instant a new extreme prints while a mean has to be dragged.
Reads high and low (no close), each named by an option defaulting to
its DEFAULT_OHLCV column.
The window is period + 1 bars
period counts the oldest age the study can report, and "period
bars ago" is itself a reading, so the window has to hold period + 1 bars
— the one place in this package where a period is not its window's bar
count. The warm-up is therefore period rows, which is what TA-Lib's
AROON publishes too (its look-back is exactly period). The rule lives
in barsSinceExtremeValues so a second consumer cannot get it
wrong.
Definition
TA-Lib's AROON and AROONOSC, exactly: the oracle asserts bar-for-
bar agreement with identical warm-up masks on both columns and the
oscillator, at period 25 and period 5. There is no smoothing and no
seed here, so "exactly" means exactly — unlike the Wilder family, this
study has nothing to diverge on.
Ties go to the most recent bar
A new high that merely equals the standing high resets aroonUp to
100. That is TA-Lib's rule (measured: on the window 12, 11, 12, 10.5 at
period 4 it reports 75, the newer bar's age, not the older's 25), and it
is the reading that matches what the study is for — a market printing an
equal high is making a fresh one, not living off an old one.
Edges
aroonUp and aroonDown are bounded 0..100, and aroonOsc−100..100, by construction: the age is an integer in 0 … period.
Both are pinned by property tests.
Both are invariant to any strictly increasing map of price, not
merely a positive scale factor — the study reads the position of the
extreme, never its size, so any order-preserving transform (scale,
shift, x ** 1.5, …) leaves all three columns bit-identical. A
decreasing map swaps the two columns instead. That is a stronger
invariance than any other study here has, and the property test asserts
it as equality rather than a tolerance.
A gap costs period + 1 bars and then recovers. The kernel's rule
is strict — every cell in the window must be finite — because an extreme
taken over the cells you do have is still an honest extreme but its
age is not: the hole could be hiding the very bar being asked about.
Measured: TA-Lib fed a NaN high skips that bar silently — its
comparison against NaN is false — and reports every other bar
bit-identical to the clean run, so the hole is invisible in its output
and an age counted across it is confidently wrong. pond reports the
window as unknown instead.
A leading gap shifts the start, so running over another study's
output starts that many bars later rather than emptying the column.
The default period is not universal. 25 is the value StockCharts
and most charting platforms ship; TA-Lib's own default is 14
(measured), so a vendor comparison should check the length first — the
same caveat commodityChannelIndex carries. Aroon is a look-back
over positions, so a short window saturates at 100/0 far more often.
Aroon (Tushar Chande, 1995) — how recently the window's extremes happened, rather than how far away they are:
100means the extreme is today's bar,0means it is the oldest bar still in the window — so a strong uptrend keepsaroonUppinned near 100 (fresh highs) whilearoonDowndecays toward 0, and the crossovers are the signal. The name is Sanskrit for "dawn's early light"; Chande's point is that this reads a trend change earlier than an average can, because age moves the instant a new extreme prints while a mean has to be dragged.Reads high and low (no close), each named by an option defaulting to its
DEFAULT_OHLCVcolumn.The window is
period + 1barsperiodcounts the oldest age the study can report, and "periodbars ago" is itself a reading, so the window has to holdperiod + 1bars — the one place in this package where aperiodis not its window's bar count. The warm-up is thereforeperiodrows, which is what TA-Lib'sAROONpublishes too (its look-back is exactlyperiod). The rule lives in barsSinceExtremeValues so a second consumer cannot get it wrong.Definition
TA-Lib's
AROONandAROONOSC, exactly: the oracle asserts bar-for- bar agreement with identical warm-up masks on both columns and the oscillator, atperiod 25andperiod 5. There is no smoothing and no seed here, so "exactly" means exactly — unlike the Wilder family, this study has nothing to diverge on.Ties go to the most recent bar
A new high that merely equals the standing high resets
aroonUpto 100. That is TA-Lib's rule (measured: on the window12, 11, 12, 10.5atperiod 4it reports 75, the newer bar's age, not the older's 25), and it is the reading that matches what the study is for — a market printing an equal high is making a fresh one, not living off an old one.Edges
aroonUpandaroonDownare bounded0..100, andaroonOsc−100..100, by construction: the age is an integer in0 … period. Both are pinned by property tests.x ** 1.5, …) leaves all three columns bit-identical. A decreasing map swaps the two columns instead. That is a stronger invariance than any other study here has, and the property test asserts it as equality rather than a tolerance.period + 1bars and then recovers. The kernel's rule is strict — every cell in the window must be finite — because an extreme taken over the cells you do have is still an honest extreme but its age is not: the hole could be hiding the very bar being asked about. Measured: TA-Lib fed aNaNhigh skips that bar silently — its comparison againstNaNis false — and reports every other bar bit-identical to the clean run, so the hole is invisible in its output and an age counted across it is confidently wrong. pond reports the window as unknown instead.periodis not universal. 25 is the value StockCharts and most charting platforms ship; TA-Lib's own default is 14 (measured), so a vendor comparison should check the length first — the same caveat commodityChannelIndex carries. Aroon is a look-back over positions, so a short window saturates at 100/0 far more often.