Skip to main content
stock_technicals is the schema-2-only specialist companion to stock_prices. It reads the same held licensed bars and reuses the same locked formulas; the split changes routing and token cost, not indicator or benchmark math.
The capabilities catalog reports stock_technicals_core at 305 measured tokens with a 400-token gate. The example is trimmed from the real render captured at tests/fixtures/prices_v2/golden_technicals.json.

Fixed methods and refusals

  • Daily and weekly RSI use Wilder RSI-14. ADX uses Wilder RMA-14 for true range, directional movement, and DX. Slow stochastic is 14-3-3.
  • OBV cumulatively signs raw volume by adjusted-close direction. MACD is 12-26-9, Bollinger is 20 periods at two population standard deviations, and ATR is Wilder ATR-14 divided by adjusted close.
  • max_drawdown_1y and max_drawdown_3y require complete 365- and 1,095-calendar-day windows. Partial windows refuse with insufficient_history.
  • beta_1y and beta_5y use covariance/variance of weekly log returns versus SPY over shared sessions, with floors of 40 and 200 returns. excess_returns_pct uses the same aligned anchors.
  • Missing SPY history returns an ingestion_pending benchmark refusal. A benchmark store/feed fault returns a typed price_unavailable benchmark cell; neither turns the response into a 5xx.

Indicator history

Pass indicators to append a history block using the same column/row grammar as prices history. range defaults to 1y; warm-up cells are typed insufficient_history refusals.
Composite indicators expand into named numeric columns. bars: false cannot carry indicator columns and returns the standard 422 invalid_request envelope rather than silently dropping them.