Catalogue · Endpoint
Get an alpha
What the alpha does and why: the hypothesis, the construction, every parameter and the paper behind it.
/v1/alphas/{alpha}Parameters
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
alpha | string | required | — | alpha_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
https://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_idalpha_idnametldrcopyrightclassificationthesissignalparametersdata_requirementssource_papersmeta.alpha_idalgo_idstringThe 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_idstringThe 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.
namestringThe 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 | nullThe one-line thesis.
How it is computed
The client-facing wording, re-authored for delivery.
copyrightstring | nullCopyright 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.
classificationobjectStructure, 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.
thesisobjectThe 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.
signalobjectHow 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_requirementsobjectWhat 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_idstringThe 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.

