---
title: "Residual mean-reversion factor — snapshot + history for one ticker"
method: GET
path: "/residual-signal/{ticker}"
tags: ["Risk Metrics"]
---

# Residual mean-reversion factor — snapshot + history for one ticker

`GET /residual-signal/{ticker}`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/residual-signal/{ticker}`
- Auth: HTTP bearer

Phase D residual mean-reversion factor. `residual_z_5d` is the trailing 5-day cumulative L3 orthogonal residual return, z-scored by the stock's own 60-day residual volatility (negative = oversold, positive = overbought).

A combo-input factor building block for multi-signal alpha stacks — NOT a standalone strategy. Gross Sharpe ~0.79 (decile long-short, 5-day horizon), ~1.28 within the high-subsector-ER quintile; net of market-impact costs, standalone capacity caps near ~$1M book. Every response carries `capacity_note` with this disclosure.

**Billing:** $0.02 per request.

## Path parameters

- `ticker` string, required

## Query parameters

- `days` integer

## Response `200`

Latest signal reading + history window.

- object
  - `ticker` string
  - `as_of_date` string, date
  - `signal` ResidualSignalReading: One residual mean-reversion reading. In /residual-signal/{ticker} this is both the latest `signal` object and each `history` item; history items additionally carry `date`.
    - `date` string, date: Trading day (present on history items; omitted on the latest `signal`).
    - `residual_z_5d` number, nullable: 5-day cumulative L3 residual return, z-scored by 60-day residual vol. Negative = oversold.
    - `signal_strength` number, nullable: Absolute value of residual_z_5d.
    - `decile_rank` integer, nullable: 1-10 cross-sectional decile of residual_z_5d (1 = most oversold).
    - `industry_percentile` number, nullable: 0-1 percentile of residual_z_5d within the stock's EODHD industry cohort.
    - `residual_autocorr_5d` number, nullable: Trailing-252d lag-5 autocorrelation of the 5-day cumulative residual. Negative = mean-reverting.
    - `l3_subsector_er` number, nullable: Subsector variance-explained fraction — the signal-quality conditioning variable.
    - `signal_quality_quintile` integer, nullable: 1-5 quintile of l3_subsector_er (5 = tight subsector tracker = cleanest reversion regime).
  - `history` ResidualSignalReading[]
    - `date` string, date: Trading day (present on history items; omitted on the latest `signal`).
    - `residual_z_5d` number, nullable: 5-day cumulative L3 residual return, z-scored by 60-day residual vol. Negative = oversold.
    - `signal_strength` number, nullable: Absolute value of residual_z_5d.
    - `decile_rank` integer, nullable: 1-10 cross-sectional decile of residual_z_5d (1 = most oversold).
    - `industry_percentile` number, nullable: 0-1 percentile of residual_z_5d within the stock's EODHD industry cohort.
    - `residual_autocorr_5d` number, nullable: Trailing-252d lag-5 autocorrelation of the 5-day cumulative residual. Negative = mean-reverting.
    - `l3_subsector_er` number, nullable: Subsector variance-explained fraction — the signal-quality conditioning variable.
    - `signal_quality_quintile` integer, nullable: 1-5 quintile of l3_subsector_er (5 = tight subsector tracker = cleanest reversion regime).
  - `capacity_note` string
  - `methodology_link` string

## Other responses

- `400`: Invalid request.
- `401`: Missing or invalid Bearer token.
- `402`: Insufficient balance.
- `404`: Ticker not in the active universe.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/riskmodels/apis/riskmodels-api.md) · [All operations](https://skmtc.dev/riskmodels/apis/riskmodels-api/llms.txt) · [OpenAPI document](https://skmtc.dev/riskmodels/apis/riskmodels-api/revisions/1a034cad408a?raw)
