Skip to content
SimicX

Catalogue · Endpoint

Get an alpha

What the alpha does and why: the hypothesis, the construction, every parameter and the paper behind it.

GET/v1/alphas/{alpha}

Parameters

Path parameters

NameTypeRequiredDefaultDescription
alphastringrequiredalpha_id (e.g. CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42). Use the value returned by GET /v1/alphas.

Example request

curl

curl -H "Authorization: Bearer sxk_live_4f9c…" \
  "https://api.simicx.com/v1/alphas/CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42"

Try it

Execute GET /v1/alphas/{alpha} against the live API using your key. Paste a key below to send without signing in, or sign in to auto-fill from your profile — either way, the call counts towards your rate limits. Whether the route answers depends on your key's endpoint allow-list — /v1/me lists what is in force; a new key starts with only the self-service routes until an administrator grants more.

Sent server-side via a same-origin proxy; only the documented host(s) are allowed.

Paste an API key above to list alphas your key may access.

Request

GEThttps://api.simicx.com/v1/alphas/{alpha}

Example response

JSON · synthetic values, real schema

{
  "data": {
    "algo_id": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42",
    "alpha_id": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42",
    "name": "Causal Haar Activity-Displacement Reversal",
    "tldr": "At weekly decisions, the alpha assesses active point-in-time S&P 500 members for temporary reversals following urgency-driven price displacement accompanied by unusual trading activity.",
    "copyright": "Copyright (c) 2025-2026 SimicX Limited.",
    "classification": {
      "structure": "cross_sectional",
      "method": "rule_based",
      "frequency": ["weekly"],
      "tags": ["Cross-Section", "Reversal", "Volume Based"]
    },
    "thesis": {
      "hypothesis": "A large return with abnormal activity across causal scales is hypothesised to reflect urgency-driven displacement that partially reverses over five trading days.",
      "mechanism": "Urgency-driven displacement partially reverses as patient liquidity returns.",
      "who_loses": "Liquidity providers who absorb an urgent order and must reprice inventory before patient counterparties return.",
      "economic_rationale": "A directional move with unusual volume at several persistence lengths may be costly urgency that leaves price temporarily too far from patient-counterparty value.",
      "falsification_criteria": []
    },
    "signal": {
      "score_direction": "Higher scores rank names expected to outperform over the holding horizon.",
      "decision_timing": "Scored at the weekly rebalance close, traded at the next open.",
      "core_math_framework": "z(j,t) = (d(j,t) - mean(D(j,t))) / max(sd_sample(D(j,t)), standard_deviation_floor), and S(t) = -sign(r(t)) * (1/J) * sum(j=1 to J) |z(j,t)|",
      "signal_logic": "Fade the displacement in proportion to how unusual the activity was.",
      "pseudocode": ["Read close and volume across the causal history ending at t", "..."],
      "validity_rules": ["A decision is scored only when at least 400 names are eligible.", "..."],
      "output_contract": "One score per eligible symbol per decision date."
    },
    "parameters": [
      {
        "name": "haar_max_scale",
        "type": "integer",
        "default": 3,
        "search_values": null,
        "range": [1.0, 3.0],
        "tunable": true,
        "unit": "trading days",
        "description": "Largest causal Haar detail scale aggregating activity-shock evidence.",
        "selected_value_by_test_year": { "2021": "3", "2022": "3", "2023": "3", "2024": "3", "2025": "3", "2026": "3" }
      }
    ],
    "data_requirements": {
      "universe": "Point-in-time membership of the sp500_pit universe (equity traded on us_equity, xnys calendar), resolved at every decision from the registered point-in-time membership list. The strategy never names an instrument itself.",
      "granularity": "daily",
      "lookback_bars": 50,
      "warmup_bars": 50,
      "adjustment": "Split and dividend adjusted.",
      "fields": [{ "name": "close", "category": "ohlcv", "required": true }],
      "history_requirement": null
    },
    "source_papers": [
      {
        "title": "Fast and Accurate Anomaly Detection in Time Series",
        "published_date": "2026-07-02",
        "role": "seed",
        "rationale": "Supplies the causal multi-scale detector the displacement score is built on."
      }
    ]
  },
  "meta": { "request_id": "req_7f3a2c", "generated_at": "2026-07-30T14:03:12Z", "source": "alpha_research", "alpha_id": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42" }
}

Response fields

Every field the response can carry, what it means, and how it is computed.

  • algo_idstring

    The alpha's identifier.

    How it is computed

    The collection name — the same value listed by GET /v1/alphas, and the same string as the source ZIP's filename and the id inside the sealed document.

  • alpha_idstring

    The same identifier under its former name.

    How it is computed

    Identical to algo_id. Retained so callers written against the older name keep working; prefer algo_id in new code.

  • namestring

    The alpha's display name.

    How it is computed

    The readable title from the run's research record. The client document holds the snake_case research id in the same field, so the readable one is preferred.

  • tldrstring | null

    The one-line thesis.

    How it is computed

    The client-facing wording, re-authored for delivery.

  • copyrightstring | null

    Copyright line for the write-up, when sealed.

    How it is computed

    Passed through from the client description document; null when the research-spec fallback has none.

  • classificationobject

    Structure, method, cadence and category tags.

    How it is computed

    frequency is a list of lowercase cadences (intraday, daily, weekly) — a list because an alpha may claim more than one. It is served as the run sealed it, not relabelled: a run that decides every bar reads daily. tags are category labels. data_tier is deliberately absent.

  • thesisobject

    The claim, how it is detected, who pays and why it lasts.

    How it is computed

    Five fields: hypothesis, mechanism, who_loses, economic_rationale and falsification_criteria[]. mechanism is the plain-language account of how the strategy works; earlier seals filed it under signal and it is served here either way. falsification_criteria is a list of pre-committed kill conditions — metric, threshold, horizon — and is EMPTY on every currently delivered alpha: the field postdates their sealing, so those runs committed to none, and criteria written after a backtest are not pre-commitments. Alphas whose criteria were set before the run carry them here.

  • signalobject

    How the score is formed and when it is taken.

    How it is computed

    Seven fields: score_direction, decision_timing, core_math_framework, signal_logic, pseudocode[], validity_rules[] and output_contract. Every key is always present; a value the run did not seal is null.

  • parametersobject[]

    Every parameter, with the value the walk-forward chose per test year.

    How it is computed

    selected_value_by_test_year maps each out-of-sample year to the selected value. A parameter re-picked identically every year is a settled choice; one that moves every year is a fitted one.

  • data_requirementsobject

    What the signal reads.

    How it is computed

    Universe, bar granularity, price adjustment and the field list, plus the history depth as lookback_bars and warmup_bars counted in the granularity unit. A run sealed before those counts existed states the same thing as history_requirement prose instead; exactly one of the two forms is populated.

  • source_papersobject[]

    The published work the idea came from, and what each contributes.

    How it is computed

    title, published_date, role and rationale. role is one of seed, mechanism, validation or contradiction — seed is the paper the method came from, and exactly one citation carries it. Empty when the run sealed none.

  • meta.alpha_idstring

    The address as resolved for the call.

    How it is computed

    Echoes the alpha served.

  • Authorisation comes before lookup: a key that may not read the alpha gets 403 alpha_not_allowed whether or not it exists, so a restricted key cannot map the catalogue by watching 403s turn into 404s. Every /v1/alphas/{alpha}/… endpoint guards the same way, but raises 403 run_not_allowed — the run allow-list is checked first there.
  • 404 alpha_description_not_found means the run sealed neither document — today only the incomplete seals. The alpha itself is still listed and its data endpoints still answer.
  • Every key in the payload is always present. A run that sealed a thinner document reads as null rather than as a missing key, so a client can address any field without guarding for its existence.