Index Methodology
TCGBerg indices are cap-weighted, confidence-dampened, divisor-adjusted benchmarks of the trading card market. Each index tracks either a whole set or a print run within a set (for example Base Set 1st Edition Shadowless), at a single grade tier or as a composite across grades. Indices are denominated in points, base 100 at inception, so a level of 138 reads directly as up 38% since inception. The level moves only with constituent fair values: population growth and composition changes are absorbed into a continuous divisor, the same mechanism major equity indices use, so they never introduce artificial level jumps. This page documents the construction, maintenance, and limitations of the index family.
Download PDF specConstruction
Indices are auto-derived from the data, not manually curated. Each index is uniquely defined by two parameters:
- Scope: a set (Base Set) or a print run within a set (1st Edition Shadowless across all Base Set cards). Print runs are discovered systematically by grouping printings on their attribute flags; no set-specific logic, so new sets get their index family automatically when they onboard.
- Grade variant: a single grade tier (PSA 10, PSA 9, ...) or the composite across tiers.
The index level is:
level(t) = aggregate_effective_market_cap(t) / divisor(t)
where the aggregate is the sum of each constituent's confidence-dampened market cap (next section) and the divisor is maintained so the level reflects only fair-value changes. At inception (the first date an index has enough eligible constituents) the divisor is set to aggregate / 100, so every index starts at exactly 100.
Eligibility and Weighting
An atom is eligible to be a constituent when it has a fair value for the date, a non-zero graded population, and it matches the index's scope and grade filter. Confidence is deliberately NOT an eligibility gate: filtering on confidence would churn constituents in and out as their scores fluctuate. Instead, every eligible atom is included and weighted by its effective market cap:
effective_market_cap = market_cap x sqrt(confidence_score / 100)
The square root gives a gentle penalty: an atom at confidence 90 contributes about 95% of its raw cap, one at 50 about 71%, one at 10 about 32%. High-confidence atoms pass through nearly unchanged while noisy ones contribute proportionally less, without ever being excluded outright.
An index publishes only when it has at least 5 eligible constituents; below that it pauses rather than print a statistically meaningless level. An atom that loses eligibility (fair value disappears or population drops to zero) is not yanked immediately: a single missing date never causes removal, only sustained ineligibility does, with the removal applied at the next scheduled rebalance.
The Continuous Divisor
The fundamental rule: population growth must not inflate the index. Only price action moves the level.
Each day, before computing the level, the engine checks whether any constituent's population changed. If so, it recomputes yesterday's baseline using today's fair values with yesterday's populations, compares it with today's actual aggregate, and scales the divisor by the ratio. The result is that the level is identical before and after the population step; the change shows up only as a redistribution of constituent weights for future moves.
The same trick handles composition changes at rebalances. When constituents are added or removed, the divisor is adjusted so the level is unchanged at the rebalance moment:
new_divisor = new_aggregate_market_cap / current_level x 100
This is the standard continuous-divisor mechanism used by major equity indices. Every index page exposes its rebalance log: divisor before and after, aggregate cap change, and the exact constituents added and removed, so the level series is fully auditable and replayable.
Rebalances
On a scheduled cadence (currently weekly), the constituent universe of every index is re-evaluated:
- Re-discover print runs from current data, so newly onboarded sets and printings join automatically.
- Re-check eligibility for every atom in the index's potential universe.
- Add newly eligible atoms; remove atoms whose ineligibility has persisted since the prior evaluation window.
- Adjust the divisor to preserve the level across the change, and persist the rebalance event with its full diff for audit.
Most rebalances change little: a handful of additions or removals at most, with the divisor moving fractionally. The cadence is a deliberate middle ground; rebalancing on every data tick would churn membership on temporary data droughts, while waiting too long would leave a newly tracked atom outside its index for weeks.
Limitations
Known limitations of the current index family:
- Single-grader scope. Published indices are PSA-based. BGS and CGC atoms exist in the market cap layer but are not yet index constituents; cross-grader indices are a future enhancement.
- Half-grades excluded from composites. Half-grade sales (PSA 8.5 style) contribute to fair values at the parsing level but do not form their own atoms in the index engine.
- No concentration caps. A single dominant atom can carry a large share of its index. Capped variants are a possible future addition.
- Historical population is snapshot-based. Population history inherits the market cap layer's use of the latest known reading for past dates, which biases old absolute levels slightly upward; relative moves are unaffected.
- No raw (ungraded) indices. There is no clean raw fair value or population analog yet; raw indices wait on that methodology.
- Inception-relative levels. Each index starts at 100 on its own inception date (the first date it had enough eligible constituents); levels before inception are not published.

















































