Methodology
How SilphCo Price works and why you can trust it
Last updated:
On this page
SilphCo Price is a time-weighted average of verified sales. It adapts to each card's trading volume, rejects outlier sales, and fills in missing grades using historical premiums. The result is a price that reflects the real market — not just the last sale.
What Is SilphCo Price?
Most price sites show the last sale — noisy for illiquid Pokemon cards where a Charizard PSA 10 can swing from $9,200 to $17,500 in a week. SilphCo Price smooths that noise with a time-value weighted average (TV-WAP). Recent sales count more than old ones, outliers are automatically rejected, and missing grades are inferred from nearby grades using historical premium ratios.
Adaptive Windows
A Charizard Base PSA 10 trades dozens of times a month; a vintage PSA 10 might trade once a year. A single fixed window would overreact for one and ignore the other. SilphCo Price uses an adaptive half-life based on trailing 30-day volume to scale the lookback window automatically:
| 30d Sales | Window | Why |
|---|---|---|
| 10 or more | 14 days | Fast-moving; recent prices matter most |
| 3–9 | 30 days | Steady; balanced view |
| 1–2 | 60 days | Sparse; need more history |
| 0 | 90 days | Floor fallback only |
Outlier Rejection
A $50,000 Charizard sale might be a wash trade, a typo, or a bundled deal. SilphCo Price uses a modified Z-score filter to detect and exclude these outliers before averaging — conservative enough to catch genuine anomalies without discarding legitimate market moves.
Confidence Levels
Every SilphCo Price carries a tvwap_confidence label. This tells you how the price was derived and how much weight to give it.
direct and direct_offchain prices are backed by actual sales. set_estimate and grader_estimate are directional only — useful for trends, not for setting exact listing prices.
Grade Inference
Not every grade trades regularly. A PSA 10 Charizard sells weekly, but a PSA 8 can go months between sales. Rather than showing a stale price, SilphCo infers it from nearby grades using historical premiums — computed from 90-day co-occurrence data, falling back to set-level medians then global defaults.
Rules of thumb:
- We never infer across more than 2 grade steps (PSA 10 can infer PSA 9 and PSA 8, but not PSA 7).
- Collectible grades (8–10) never mix with low grades (1–6) — the markets behave differently.
- Inferred prices never feed further inference. A PSA 9 inferred from PSA 10 will not be used to infer PSA 8.
On-Chain vs Off-Chain
SilphCo blends two sources of sales data:
On-Chain Sales
Sales recorded on the blockchain via Courtyard (Polygon) and Magic Eden (Solana). These are cryptographically verified — the transaction hash proves the sale happened at the stated price. On-chain data is our primary source when it is fresh.
Off-Chain Sales
Sales from eBay, TCGPlayer, and PokemonPriceTracker Business. These represent the traditional paper market. Off-chain data fills gaps when on-chain sales are stale or missing, especially for vintage cards that rarely trade on-chain.
On-chain is primary. If it is fresh, we use it. If stale or missing, off-chain fills the gap. Both sources run through the same TV-WAP engine so they are directly comparable.
Staleness
Every SilphCo Price carries a staleness score from 0 to 1:
- 1.0 — Very fresh. Sales within the adaptive window.
- 0.5 — Borderline. Sales exist but are aging.
- Below 0.5 — Stale. The UI shows "Estimated" to warn you the underlying data is old.
Staleness is the weighted average age of sales relative to the adaptive half-life. A 14-day-window card with its last sale 10 days ago is fresher than a 90-day-window card with its last sale 60 days ago.
Momentum
When a card shows a statistically significant trend, SilphCo attaches a momentum signal.
We reconstruct weekly TV-WAP snapshots going back twice the adaptive half-life and fit a trend line. If the slope is strong enough to distinguish from noise, we label it Up or Down. If not, we label it Flat with no directional signal.
The forecast horizon matches liquidity: fast-trading cards get a 7-day forecast, sparse cards up to 45 days. Confidence bands widen with less data — wide at 4 snapshots (reflecting genuine uncertainty), narrowing as more history accumulates.
Technical Summary
For developers and data scientists who want the exact formulas:
- TV-WAP uses exponential decay weights
w = exp(-ln(2)/H * age)where H is the adaptive half-life in days. - Outlier rejection uses modified Z-score with median absolute deviation (MAD), threshold = 3.5.
- Grade premiums are computed from 90-day card-level co-occurrence, falling back to set-level medians and then global defaults.
- Cross-grader premiums are era-aware (pre-2010, 2010-2020, 2021-plus) with same-era pairs weighted 2x.
- Momentum uses decay-weighted least squares (WLS) on reconstructed weekly TV-WAP snapshots. Significance gate: |t-statistic| >= 1.5.
- Prediction bands use the t-distribution with n-2 degrees of freedom, converging to +/- 1.96 sigma as data grows.