Skip to main content
“Is AAPL extended?” is a two-call question: /v2/technicals gives the indicator read, /v2/price-action gives the range-and-volume context. Both are precomputed, so you do not pull /v2/history to answer it; history is for when the user wants the actual rows.

Two calls

timing.py
import httpx

h = {"X-API-Key": "sctx_..."}
tech = httpx.get("https://api.stockcontext.com/v2/technicals",
                 params={"symbol": "AAPL"}, headers=h).json()["data"]
pa = httpx.get("https://api.stockcontext.com/v2/price-action",
               params={"symbol": "AAPL"}, headers=h).json()["data"]

The technical read

Trimmed from a live AAPL response, the fields that answer “extended?”:
technicals.data (trimmed)
{
  "freshness": "end_of_day",
  "market_status": "closed",
  "as_of": "2026-06-08T00:55:14Z",
  "cache_age_seconds": 378,
  "moving_averages": {
    "sma_50": 281.08,
    "sma_200": 264.76,
    "vs_sma_50_pct": 9.34,
    "vs_sma_200_pct": 16.08,
    "golden_cross_active": true,
    "distance_from_52w_high_pct": -3.03
  },
  "momentum": {
    "rsi_14": 60.82,
    "rsi_zone": "neutral",
    "rsi_14_weekly": 68.57,
    "rsi_14_weekly_zone": "neutral",
    "stochastic_14_3_3": { "k": 66.73, "d": 74.73, "zone": "neutral" },
    "macd": { "value": 8.51, "signal_line": 9.45, "histogram": -0.94, "above_signal": false }
  },
  "trend_strength": { "adx_14": 45.51, "trending": true, "obv_trend_30d": "up" },
  "volatility": { "bollinger_20": { "percent_b": 0.61 }, "beta_1y_weekly": 1.1 }
}
How to read each piece:
  • rsi_zone is the daily RSI bucket. Here daily rsi_14 is 60.82, zone neutral; the weekly rsi_14_weekly is 68.57, also neutral but pressing toward overbought. The zone enum you will see across symbols: oversold, neutral, overbought. Daily and weekly can disagree, so report both rather than collapsing them.
  • golden_cross_active: true means the 50-day SMA sits above the 200-day. Combined with adx_14 of 45.51 and trending: true, the trend is strong and intact.
  • distance_from_52w_high_pct: -3.03 puts price 3.03% under the 52-week high, near the top of its range.
  • percent_b: 0.61 places price at 61% of the way up the 20-day Bollinger band: above the midline, not pinned to the upper band.

The price-action context

price-action.data (trimmed)
{
  "freshness": "end_of_day",
  "market_status": "closed",
  "as_of": "2026-06-05T20:00:00Z",
  "cache_age_seconds": 2557,
  "volume": { "latest": 65310502, "avg_30d": 49210144, "ratio_to_avg": 1.33 },
  "recent_extremes": {
    "high_90d": { "value": 316.94, "date": "2026-06-03" },
    "low_90d": { "value": 245.28, "date": "2026-03-30" }
  },
  "streaks": { "direction": "none", "consecutive_days": 0, "biggest_down_day_1y_pct": -5.0 },
  "drawdowns": { "max_90d": { "pct": -5.44 }, "max_1y": { "pct": -13.8 } }
}
ratio_to_avg of 1.33 says the latest session traded about a third above the 30-day average volume: the move up has buying behind it, not a thin tape. The 90-day drawdown of -5.44% (keep the sign) shows the recent pullback was shallow. No active streak.

The answer they support

answer (3 lines)
AAPL is firmly in an uptrend but not stretched. Daily and weekly RSI are both
neutral (60.8 and 68.6, the weekly pressing toward overbought); price sits 3.0%
below its 52-week high at Bollinger %B 0.61. The trend is strong and intact
(golden cross, ADX 45.5) on above-average volume (1.33x the 30-day).
Every clause traces to a field above. That is the whole job: read the precomputed indicators, weigh daily against weekly, keep the signs, and stop.
market_status (open during the session, closed otherwise) is a session flag for whether regular trading hours are in effect. It is not an execution signal or an exchange feed; do not imply order timing from it. See freshness for market_status, as_of, and the degraded state newer listings can return.

When you actually need the series

If the question needs rows (to draw a chart, or feed a model), call /v2/history: series is a CSV of up to 3 (e.g. close,rsi_14), range defaults to 1y. Don’t reach for it to answer “extended?”; technicals and price-action already hold the indicator, range, volume, streak, and drawdown context.

Compare basket

To put these technical fields side by side across 2-12 symbols, use compare.