@pond-ts/financial API Reference
    Preparing search index...

    Function aroon

    • Aroon (Tushar Chande, 1995) — how recently the window's extremes happened, rather than how far away they are:

      aroonUp   = 100 · (period − barsSinceHighestHigh) / period    ${prefix}Up
      aroonDown = 100 · (period − barsSinceLowestLow) / period ${prefix}Down
      aroonOsc = aroonUp − aroonDown ${prefix}Osc

      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.

      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.

      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.

      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.

      • 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.

      Type Parameters

      • S extends SeriesSchema
      • const Prefix extends string = "aroon"

      Parameters

      Returns TimeSeries<
          readonly [
              S[0],
              ValueColumnsForSchema<
                  readonly [
                      S[0],
                      ValueColumnsForSchema<
                          readonly [
                              S[0],
                              ValueColumnsForSchema<S>,
                              OptionalNumberColumn<`${Prefix}Up`>,
                          ],
                      >,
                      OptionalNumberColumn<`${Prefix}Down`>,
                  ],
              >,
              OptionalNumberColumn<`${Prefix}Osc`>,
          ],
      >