Signals

SIGNALS QUICKSTART

Pulling quant signals

GET /v1/signals/{ticker} returns a JSON array of signal records, newest first. Each record's score is the Piotroski F-Score expressed as a 0-1 fraction (count of 9 passing tests divided by 9, not a 0-100 number). The components object breaks the diagnosis into five signal families: piotroski (9 booleans), altman_z (Z-Score + distress zone), beneish_m (manipulation M-Score + flag), sloan_accrual (accrual ratio + earnings quality), and regime (real HMM market regime: current plus confidence). Signals are computed weekly by the Whystock.app analytics engine and served as bitemporal records. To see coverage and a worked sample, browse the Quant Signals dataset.

bash
# Latest quant signals for AAPL
curl https://api.vectorfinancials.com/v1/signals/AAPL \
  -H "X-API-Key: vf_sk_your_key_here" \
  -G \
  -d "limit=1"

# Response: a JSON array of SignalRecord (newest first)
[
  {
    "ticker": "AAPL",
    "date": "2026-06-16",
    "score": 0.778,
    "components": {
      "piotroski": {
        "positive_ni": true, "positive_ocf": true, "roa_increasing": true,
        "ocf_gt_ni": true, "leverage_decreasing": false,
        "current_ratio_increasing": true, "no_dilution": true,
        "gross_margin_increasing": true, "asset_turnover_increasing": false
      },
      "altman_z": {
        "score": 6.12, "zone": "safe",
        "components": { "x1": 0.28, "x2": 0.19, "x3": 0.22, "x4": 4.85, "x5": 0.88 }
      },
      "beneish_m": { "score": -2.61, "flag": false },
      "sloan_accrual": { "ratio": -0.021, "quality": "high" },
      "regime": { "current": "bull", "confidence": 0.82 }
    },
    "effective_ts": "2026-06-16T00:00:00Z",
    "knowledge_ts": "2026-06-17T06:30:00Z"
  }
]

Here score = 0.778 means 7 of the 9 Piotroski tests passed (7 of 9). Altman Z of 6.12 sits in the safe zone, the Beneish M-Score is below the manipulation threshold (flag: false), Sloan accrual quality is high, and the market regime is bull at 0.82 confidence. All five families read clean.

Signals field reference

Every field returned by GET /v1/signals/{ticker}, its type, whether it can be null, and how to read it. All records are bitemporal and append-only, so multiple knowledge_ts versions may exist per (ticker, date); take the latest for the current view, or filter by it for point-in-time backtests with no look-ahead.

FieldTypeNullableMeaning & how to use
tickerstringnoEquity ticker symbol (e.g. AAPL). Echoes your request.
datestring (YYYY-MM-DD)noSignal/trading date the row describes. Sort or filter with date_from / date_to.
scorenumber (0 to 1)noPiotroski F-Score as a fraction = passing tests divided by 9. 0.778 = 7 of 9 passed. NOT a 0-100 ranking. Screen with e.g. score >= 0.66.
components.piotroski.positive_nibooleanyesNet income > 0.
components.piotroski.positive_ocfbooleanyesOperating cash flow > 0.
components.piotroski.roa_increasingbooleanyesReturn on assets up year-over-year.
components.piotroski.ocf_gt_nibooleanyesOperating cash flow > net income (accrual quality).
components.piotroski.leverage_decreasingbooleanyesLong-term leverage down YoY.
components.piotroski.current_ratio_increasingbooleanyesCurrent ratio up YoY.
components.piotroski.no_dilutionbooleanyesNo new shares issued.
components.piotroski.gross_margin_increasingbooleanyesGross margin up YoY.
components.piotroski.asset_turnover_increasingbooleanyesAsset turnover up YoY. F-Score = count of the 9 trues.
components.altman_z.scorenumberyesAltman Z-Score composite. Higher = safer.
components.altman_z.zonestringyessafe | grey | distress: bankruptcy-distress band derived from the Z-Score.
components.altman_z.components.x1numberyesWorking capital / total assets.
components.altman_z.components.x2numberyesRetained earnings / total assets.
components.altman_z.components.x3numberyesEBIT / total assets.
components.altman_z.components.x4numberyesMarket value of equity / total liabilities.
components.altman_z.components.x5numberyesSales / total assets.
components.beneish_m.scorenumberyesBeneish M-Score. Above −1.78 suggests earnings-manipulation risk.
components.beneish_m.flagbooleanyesTrue when the M-Score crosses the manipulation threshold. Use as a red flag.
components.sloan_accrualobject | nullyesWhole object is null when accrual inputs are unavailable.
components.sloan_accrual.rationumberyesAccrual ratio (balance-sheet method). Lower = higher earnings quality.
components.sloan_accrual.qualitystringyeshigh | medium | low earnings-quality bucket.
components.regime.currentstring | nullyesbull | bear | sideways | null: HMM market regime; null when undetermined.
components.regime.confidencenumber (0 to 1)yesModel confidence in the current regime. Gate on e.g. confidence >= 0.6.
effective_tsstring (ISO 8601)noWhen the signal became effective (the data date).
knowledge_tsstring (ISO 8601)noWhen VectorFin computed/ingested this version. Bitemporal key: latest per (ticker, date) is current.