Skip to content

Methodology

Backtests & event studies

Strict time-series research over point-in-time snapshots (backtest-v1.0). Features at time T only use data available at T, dead tokens stay in the sample, and every result shows its sample size, confidence, date range, full distribution and drawdowns — never only the good numbers.

Point in time (no lookahead, no leakage)

  • Event time vs knowledge time. Theses count from when they were posted; market data from its timestamp. A snapshot at T uses only theses with posted_at ≤ T and market points with ts ≤ T.
  • Author history as of T. Early Quality and author metrics at T use only calls whose outcome had resolved by T (72h after posting).
  • Cohorts as of T. Algorithmic cohort membership comes from the daily snapshot taken on or before T — never today's membership.
  • Immutable history. Score snapshots are stored and never rewritten; editing a profile or handle today cannot change a historical score.

Events, entry and exit

  • Event — the rule set matches a token's snapshot at T, and it is the token's first match or at least one cooldown after its previous event. The default cooldown equals the horizon, so samples do not overlap.
  • Entry — the first price at or after T, within 15 minutes. Never a price before the event.
  • Exit — the last price at or before T + horizon. Maximum return, maximum drawdown and time to peak are measured over (entry, exit].
  • Unresolved — events whose horizon ends after now are counted and reported, but excluded from statistics.
  • Horizons — 15m · 1h · 6h · 24h · 3d · 7d, depending on the history available.

Dead tokens (survivorship)

Tokens that die (no price, or liquidity near zero for about a day) stay in every historical query. You choose how a death inside the horizon is valued:

PolicyReturn used
last_price (default)Return to the last observed price.
total_loss−100%.
excludeRemoved from the statistics — but counted and flagged in the warnings, so the exclusion is never silent.

Statistics

  • N resolved events, unique tokens, dead-token events and unresolved events.
  • Hit rate (share with a positive return at the horizon) with a 95% Wilson interval.
  • Median return with a bootstrap 95% interval (deterministic seed), 10% trimmed mean and mean.
  • Median max drawdown, median time to peak, best and worst outcome.
  • Distributions of returns and drawdowns: histogram, box plot and p5 … p95.
  • Every event, with its entry, exit, return, drawdown and the rule-field values at T.

Warnings & confidence

WarningWhen
Small sampleN < 30
Concentrated≥ 50% of events come from ≤ 3 tokens
Short historyThe data range is shorter than 7 days
Capped eventsMore than 2,000 events (the oldest are dropped from the event list)

Confidence: N < 10 INSUFFICIENT, < 30 LOW, < 100 MEDIUM, otherwise HIGH. A “90% hit rate” from 10 samples is shown as exactly that — with its interval and the warning.

Leakage checks

Every result carries leakage_checks — assertions evaluated on the actual events, each with a pass flag and detail:

  • every feature snapshot used has a timestamp ≤ the event time;
  • every entry is at or after the event time;
  • no price before the entry is used for returns;
  • the feature vector's own timestamp is ≤ the event time.

Event studies

Pre-defined questions refreshed hourly over point-in-time history, with per-horizon return and drawdown distributions. They use a 1-day cooldown per token. Event studies are available on every plan; custom backtests need Pro or Team.

StudyEvent
What happens after thesis velocity triples?
velocity-3x
Thesis velocity > 3× baselineThesis velocity 1h > +200% AND Theses 1h ≥ 3 · horizons 1h, 6h, 24h, 3d
What happens after 5 high-quality authors converge?
hq-authors-converge
5+ high-quality authors in 24hHigh-quality authors ≥ 5 · horizons 1h, 6h, 24h, 3d
What happens when social activity rises but price does not?
social-up-price-flat
Social rising, price flatDivergence ≥ +25 AND Price change 1h ≤ +2% AND Price change 1h ≥ -2% · horizons 1h, 6h, 24h, 3d
What happens when a few accounts dominate the attention?
crowding-spike
Crowding above 75Crowding > 75 AND Theses 24h ≥ 10 · horizons 1h, 6h, 24h, 3d
What happens when attention gets broad?
broad-attention
40+ unique authors in 24hUnique authors 24h ≥ 40 · horizons 1h, 6h, 24h, 3d
What happens after thesis activity drops more than 60% hour-on-hour?
cooling
Attention cooling sharplyAttention acceleration < -60% AND Theses 24h ≥ 10 · horizons 1h, 6h, 24h, 3d

Browse results in Event studies or run your own in Backtests.

Endpoints

Example responses use illustrative values ($XYZ, example_rhea, a placeholder address) — not real tokens or authors; every field name and shape is exactly what the API returns. Long sections are collapsed as { … }.

POST/v1/quant/backtests
scope backtests:write

Queue a strict point-in-time backtest (Pro / Team).

Returns 202 with a queued run and a Location header; poll GET /v1/quant/backtests/{id} or use the SDK's backtests.wait. Without a plan that includes backtests the API answers 402 PLAN_REQUIRED.

Parameters

NameDescription
rulesrequired
body · { field, op, value }[] 1–12
Entry conditions (AND).
horizonrequired
body · 15m | 1h | 6h | 24h | 3d | 7d
Holding horizon.
name
body · string ≤ 80
Label for the run.
from
body · ISO-8601 | unix
Start of the test window (default: all history).
to
body · ISO-8601 | unix
End of the test window.
cooldown
body · horizon
Minimum spacing between two events of the same token. Default = horizon (non-overlapping samples).
dead_token_policy
body · last_price | total_loss | exclude
How tokens that died inside the horizon are valued. Dead tokens are always included unless excluded explicitly (then counted and warned).Default last_price
universe
body · { chains?, min_liquidity_usd? }
Restrict the universe.
  • rulesbody · { field, op, value }[] 1–12required
    Entry conditions (AND).
  • horizonbody · 15m | 1h | 6h | 24h | 3d | 7drequired
    Holding horizon.
  • namebody · string ≤ 80
    Label for the run.
  • frombody · ISO-8601 | unix
    Start of the test window (default: all history).
  • tobody · ISO-8601 | unix
    End of the test window.
  • cooldownbody · horizon
    Minimum spacing between two events of the same token. Default = horizon (non-overlapping samples).
  • dead_token_policybody · last_price | total_loss | exclude
    How tokens that died inside the horizon are valued. Dead tokens are always included unless excluded explicitly (then counted and warned).
    Default last_price
  • universebody · { chains?, min_liquidity_usd? }
    Restrict the universe.
curl -X POST "https://fomoquant.app/v1/quant/backtests" \
  -H "Authorization: Bearer $FOMOQUANT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"rules":[{"field":"momentum","op":">","value":80},{"field":"early_quality","op":">","value":70},{"field":"crowding","op":"<","value":30}],"horizon":"24h"}'
GET/v1/quant/backtests/{id}
scope backtests:read

A backtest run — poll until status is done or failed.

Result: N, hit rate (+ Wilson CI), median, mean and 10% trimmed mean return, median max drawdown, median time to peak, best/worst, return and drawdown distributions, warnings, every event and the leakage checks.

Parameters

NameDescription
idrequired
path · btr_…
Backtest run id.
  • idpath · btr_…required
    Backtest run id.
curl "https://fomoquant.app/v1/quant/backtests/btr_6b5n0h3k8m2q9x4v7c1d" \
  -H "Authorization: Bearer $FOMOQUANT_API_KEY"
GET/v1/quant/event-studies
scope backtests:read

Event studies refreshed hourly over point-in-time history.

curl "https://fomoquant.app/v1/quant/event-studies" \
  -H "Authorization: Bearer $FOMOQUANT_API_KEY"
GET/v1/quant/event-studies/{slug}
scope backtests:read

One event study with per-horizon distributions.

Parameters

NameDescription
slugrequired
path · slug
velocity-3x, hq-authors-converge, social-up-price-flat, crowding-spike, broad-attention or cooling.
  • slugpath · slugrequired
    velocity-3x, hq-authors-converge, social-up-price-flat, crowding-spike, broad-attention or cooling.
curl "https://fomoquant.app/v1/quant/event-studies/velocity-3x" \
  -H "Authorization: Bearer $FOMOQUANT_API_KEY"

FomoQuant provides analytics and historical/statistical context, not financial advice or guaranteed predictions.