How Orrery computes everything
Every signal rule, every calibration tier, every formula. Read this once and you can predict exactly what Orrery will say about any market.
How to read a market on Orrery
The five-step decision loop the rest of the site is built around.
- 1Pick a market
Open the Markets scanner at /scanner or pick a category at /category/{slug}. The scanner exposes filterable columns: 1h/24h/7d change, volume, liquidity, spread, end-date, resolution risk.
- 2Read the per-market terminal
Open the market detail page. You'll see a 7-day probability chart, recent trades scoped to this market, top YES/NO holders, all firing signals (with Evidence / Backtest / Action tiers), the extracted resolution source, and an AI-generated movement explanation.
- 3Verify the source
Read the Resolution block. It shows the extracted source, its type, confidence, and the verbatim market description from Polymarket. If the source is `ambiguous` or UMA is in `proposed/disputed/challenged`, treat any move as a signal of dispute, not new information.
- 4Read the calibration tiers
Every active signal shows Evidence (live confidence), Backtest (historical edge), and Action. If Action is `Watch only` or `Verify source`, do not treat the signal as a recommendation.
- 5Cite
Use the Markdown variant at /markets/{slug}/markdown for citation. It returns a single, timestamped artifact with a Cite-this stanza ready to paste.
Frequently asked
How does Orrery compute a momentum signal?
Momentum fires when the 1-hour and 24-hour price changes share the same sign and the 1-hour move is at least 1pp. Confidence is min(|Δ1h| × 8, 0.95) and is multiplied by a liquidity factor (capped at 1) so a fast move on a thin market gets dampened. Output is a deterministic { kind: 'momentum', confidence ∈ [0, 0.95], factors, message } record.
How does Orrery compute a divergence signal?
Divergence fires when the 1-hour and 24-hour price changes have opposite signs AND |Δ1h| ≥ 1pp AND |Δ24h| ≥ 1pp. Confidence is min(|Δ1h| × 6, 0.85) × liquidity factor. The signal describes that the short-term move is running counter to the 24h trend — it does not predict reversion.
How does Orrery compute a flow signal?
Flow fires when ≥ 3 trades ≥ $5,000 hit the same market within the recent window AND ≥ 70% of them are on the same outcome. Confidence is min((sameOutcomeFraction − 0.5) × 2 × Math.log10(uniqueWallets + 1), 0.9). The factors expose buys count, unique wallets, and net USD.
How does Orrery compute resolution_risk?
Resolution-risk fires on three independent triggers, taking the max confidence across them: (1) UMA optimistic oracle is in `proposed`, `disputed`, or `challenged` state — confidence 0.8; (2) the resolution source is missing or matches the `ambiguous` extractor pattern — confidence 0.6; (3) market endDate is within 24 hours but probability is between 5% and 95% (i.e. the market hasn't yet decided despite imminent settlement) — confidence 0.5.
What does the Backtest tier mean?
Backtest is the historical edge from a 1-month replay over Polymarket's CLOB price history. We run the same deterministic rules forward across recorded data and measure win rate + average post-spread move at 1h, 6h, and 24h. Tiers: `strong` if win rate > 60% on ≥ 50 samples; `mixed` if win rate is 50–60%; `weak` if < 50%; `forward-only` if we don't have a snapshot store yet (currently flow / resolution_risk / news_lag).
What is the Edge Score?
Edge Score (used on /opportunities) ranks markets by composite signal quality. Formula: `signal_confidence × 100 + multi_kind_bonus + log10(liquidity) × 5 − spread_pct × 50 − resolution_risk × 30`. Multi-kind bonus is +20 if two non-resolution-risk signals fire on the same market. The score is normalised to 0..100 within the result set.
How does Orrery classify market categories?
Polymarket's `category` field is `Other` for many markets. Orrery runs a deterministic keyword + tag classifier on top: a per-category regex over the question text, the description, and the event tags, applied in priority order — Crypto, AI, Macro, Geopolitics, Politics, Sports, Weather, Entertainment, Science, Business, Tech, then `Other`. Specific categories are evaluated before broader ones to avoid Macro swallowing crypto markets.
How does Orrery extract the resolution source?
Polymarket frequently leaves the `resolutionSource` field empty and inlines the source in the market description ("resolves according to Binance BTC/USDT close"). Orrery runs a deterministic regex extractor that tags the source with a `type` (one of: `exchange_price`, `official_government`, `sports_official_result`, `court_record`, `company_filing`, `news_consensus`, `social_media_post`, `ambiguous`) and a `confidence` (low / medium / high). The result feeds the Resolution & Risk block on per-market pages.
How are AI explanations grounded?
When `ANTHROPIC_API_KEY` is configured, /api/explain and /api/copilot stream answers from `claude-sonnet-4-6` with prompt caching on the system prompt. The system prompt is strict: every claim must cite supplied data fields, the model must never predict future direction, must never recommend trades, and must refuse any "insider intelligence" framing. The supplied context is a snapshot of the top 60 markets and 10 active signals at request time. Without a key the route falls back to a deterministic heuristic generated from the public market metrics.
What does Orrery NOT do?
Orrery does not facilitate trading, does not connect a wallet for signing, does not predict outcomes, and does not provide investment, legal, or tax advice. The Portfolio page is read-only multi-wallet aggregation by address (no signing, no key custody). Signals describe why a price moved, not whether to trade.
Need machine-readable methodology? /llms-full.txt covers the full agent-facing reference. /openapi.yaml is the OpenAPI 3.1 spec for every endpoint. The structured-data FAQ on this page is exposed as JSON-LD for grounding.