{
  "url": "https://www.moonstonehq.com/articles/what-predicts-a-pokemon-card-return",
  "slug": "what-predicts-a-pokemon-card-return",
  "title": "What Predicts a Pokemon Card's Return?",
  "summary": "We tested six factors against 41,359 cards. Trailing momentum scores a rank correlation of -0.0016, and the median card returns exactly nothing.",
  "section": "Quant research",
  "published": "2026-09-22",
  "readMinutes": 11,
  "publisher": "moonstone",
  "findings": [
    {
      "value": "41,359",
      "measures": "cards in the broad cross-section",
      "basis": "priced on all three window days"
    },
    {
      "value": "-0.0016",
      "measures": "rank correlation, trailing to forward",
      "basis": "momentum, measured broadly"
    },
    {
      "value": "0.00%",
      "measures": "median forward return",
      "basis": "52.41% of cards did not move at all"
    },
    {
      "value": "0.1193",
      "measures": "rank correlation, set age to forward",
      "basis": "the only loading worth printing"
    }
  ],
  "tables": [
    {
      "title": "Panel A, broad: forward 12-day return by trailing 11-day return, 41,359 cards, 2026-09-22",
      "columns": [
        "Trailing 11 days",
        "Cards",
        "Mean forward",
        "Median forward",
        "Win rate",
        "Unchanged"
      ],
      "rows": [
        {
          "Trailing 11 days": "down more than 20%",
          "Cards": "1,764",
          "Mean forward": "+11.41%",
          "Median forward": "0.00%",
          "Win rate": "25.40%",
          "Unchanged": "64.46%"
        },
        {
          "Trailing 11 days": "down 10 to 20%",
          "Cards": "1,437",
          "Mean forward": "+3.14%",
          "Median forward": "0.00%",
          "Win rate": "31.59%",
          "Unchanged": "41.54%"
        },
        {
          "Trailing 11 days": "down 3 to 10%",
          "Cards": "3,608",
          "Mean forward": "+0.67%",
          "Median forward": "0.00%",
          "Win rate": "32.84%",
          "Unchanged": "34.65%"
        },
        {
          "Trailing 11 days": "flat, within 3%",
          "Cards": "26,225",
          "Mean forward": "+1.91%",
          "Median forward": "0.00%",
          "Win rate": "23.76%",
          "Unchanged": "58.31%"
        },
        {
          "Trailing 11 days": "up 3 to 10%",
          "Cards": "4,811",
          "Mean forward": "+0.89%",
          "Median forward": "0.00%",
          "Win rate": "35.79%",
          "Unchanged": "35.59%"
        },
        {
          "Trailing 11 days": "up 10 to 25%",
          "Cards": "2,158",
          "Mean forward": "-0.43%",
          "Median forward": "0.00%",
          "Win rate": "26.69%",
          "Unchanged": "41.29%"
        },
        {
          "Trailing 11 days": "up 25 to 50%",
          "Cards": "758",
          "Mean forward": "-1.79%",
          "Median forward": "0.00%",
          "Win rate": "20.32%",
          "Unchanged": "51.98%"
        },
        {
          "Trailing 11 days": "up more than 50%",
          "Cards": "598",
          "Mean forward": "-1.26%",
          "Median forward": "0.00%",
          "Win rate": "14.55%",
          "Unchanged": "67.22%"
        }
      ]
    },
    {
      "title": "Panel B, deep: forward 90-day return by trailing 90-day return, 40,823 observations across 2,766 cards",
      "columns": [
        "Trailing 90 days",
        "Observations",
        "Mean forward",
        "Median forward",
        "Win rate"
      ],
      "rows": [
        {
          "Trailing 90 days": "down more than 20%",
          "Observations": "1,505",
          "Mean forward": "+33.98%",
          "Median forward": "+17.10%",
          "Win rate": "74.02%"
        },
        {
          "Trailing 90 days": "down 10 to 20%",
          "Observations": "2,895",
          "Mean forward": "+16.29%",
          "Median forward": "+11.11%",
          "Win rate": "72.82%"
        },
        {
          "Trailing 90 days": "down 3 to 10%",
          "Observations": "4,522",
          "Mean forward": "+12.05%",
          "Median forward": "+7.12%",
          "Win rate": "69.92%"
        },
        {
          "Trailing 90 days": "flat, within 3%",
          "Observations": "6,464",
          "Mean forward": "+14.47%",
          "Median forward": "+6.25%",
          "Win rate": "70.02%"
        },
        {
          "Trailing 90 days": "up 3 to 10%",
          "Observations": "7,086",
          "Mean forward": "+11.99%",
          "Median forward": "+7.15%",
          "Win rate": "72.79%"
        },
        {
          "Trailing 90 days": "up 10 to 25%",
          "Observations": "9,822",
          "Mean forward": "+13.15%",
          "Median forward": "+8.16%",
          "Win rate": "72.17%"
        },
        {
          "Trailing 90 days": "up 25 to 50%",
          "Observations": "5,696",
          "Mean forward": "+13.90%",
          "Median forward": "+8.37%",
          "Win rate": "67.54%"
        },
        {
          "Trailing 90 days": "up more than 50%",
          "Observations": "2,833",
          "Mean forward": "+13.00%",
          "Median forward": "+6.67%",
          "Win rate": "59.44%"
        }
      ]
    },
    {
      "title": "Rank correlation with the forward return, 2026-09-22. Panel A is the 12-day window; the last row is Panel B's 90-day one",
      "columns": [
        "Factor",
        "Cards measured",
        "Spearman rank correlation",
        "Verdict"
      ],
      "rows": [
        {
          "Factor": "Set age at measurement (English)",
          "Cards measured": "20,828",
          "Spearman rank correlation": "0.1193",
          "Verdict": "the only loading above noise, and not monotone"
        },
        {
          "Factor": "Price level (log)",
          "Cards measured": "41,359",
          "Spearman rank correlation": "0.0180",
          "Verdict": "no usable signal"
        },
        {
          "Factor": "Trailing 11-day return",
          "Cards measured": "41,359",
          "Spearman rank correlation": "-0.0016",
          "Verdict": "no usable signal"
        },
        {
          "Factor": "Trailing 90-day return (Panel B)",
          "Cards measured": "40,823 obs",
          "Spearman rank correlation": "-0.0409",
          "Verdict": "faint reversal on the selected pool only"
        }
      ]
    },
    {
      "title": "Panel A: forward 12-day return by price level at the evaluation day",
      "columns": [
        "Price on 2026-09-10",
        "Cards",
        "Mean forward",
        "Median forward",
        "Win rate",
        "Unchanged"
      ],
      "rows": [
        {
          "Price on 2026-09-10": "under $0.25",
          "Cards": "6,880",
          "Mean forward": "+3.63%",
          "Median forward": "0.00%",
          "Win rate": "21.28%",
          "Unchanged": "61.00%"
        },
        {
          "Price on 2026-09-10": "$0.25 to $1",
          "Cards": "9,892",
          "Mean forward": "+1.56%",
          "Median forward": "0.00%",
          "Win rate": "24.55%",
          "Unchanged": "53.00%"
        },
        {
          "Price on 2026-09-10": "$1 to $5",
          "Cards": "11,331",
          "Mean forward": "+1.91%",
          "Median forward": "0.00%",
          "Win rate": "26.86%",
          "Unchanged": "50.97%"
        },
        {
          "Price on 2026-09-10": "$5 to $25",
          "Cards": "8,334",
          "Mean forward": "+1.38%",
          "Median forward": "0.00%",
          "Win rate": "30.80%",
          "Unchanged": "46.34%"
        },
        {
          "Price on 2026-09-10": "$25 to $100",
          "Cards": "3,476",
          "Mean forward": "+1.02%",
          "Median forward": "0.00%",
          "Win rate": "29.06%",
          "Unchanged": "50.52%"
        },
        {
          "Price on 2026-09-10": "$100 to $500",
          "Cards": "1,279",
          "Mean forward": "+1.07%",
          "Median forward": "0.00%",
          "Win rate": "24.47%",
          "Unchanged": "57.00%"
        },
        {
          "Price on 2026-09-10": "$500 and up",
          "Cards": "167",
          "Mean forward": "-0.39%",
          "Median forward": "0.00%",
          "Win rate": "18.56%",
          "Unchanged": "68.26%"
        }
      ]
    },
    {
      "title": "Forward 12-day return by set age, English cards with a recorded release date, n = 20,828",
      "columns": [
        "Set age on 2026-09-22",
        "Cards",
        "Mean forward",
        "Median forward",
        "Win rate",
        "Unchanged"
      ],
      "rows": [
        {
          "Set age on 2026-09-22": "under 1 year",
          "Cards": "1,062",
          "Mean forward": "+0.56%",
          "Median forward": "0.00%",
          "Win rate": "27.78%",
          "Unchanged": "28.91%"
        },
        {
          "Set age on 2026-09-22": "1 to 3 years",
          "Cards": "2,586",
          "Mean forward": "+1.45%",
          "Median forward": "0.00%",
          "Win rate": "31.79%",
          "Unchanged": "27.18%"
        },
        {
          "Set age on 2026-09-22": "3 to 6 years",
          "Cards": "4,008",
          "Mean forward": "+1.00%",
          "Median forward": "0.00%",
          "Win rate": "30.81%",
          "Unchanged": "36.40%"
        },
        {
          "Set age on 2026-09-22": "6 to 10 years",
          "Cards": "4,101",
          "Mean forward": "+0.79%",
          "Median forward": "0.00%",
          "Win rate": "28.12%",
          "Unchanged": "53.69%"
        },
        {
          "Set age on 2026-09-22": "10 to 15 years",
          "Cards": "3,173",
          "Mean forward": "+4.44%",
          "Median forward": "0.00%",
          "Win rate": "35.05%",
          "Unchanged": "44.28%"
        },
        {
          "Set age on 2026-09-22": "15 to 20 years",
          "Cards": "2,645",
          "Mean forward": "+4.20%",
          "Median forward": "0.00%",
          "Win rate": "41.63%",
          "Unchanged": "40.04%"
        },
        {
          "Set age on 2026-09-22": "20 to 25 years",
          "Cards": "2,279",
          "Mean forward": "+0.87%",
          "Median forward": "0.00%",
          "Win rate": "26.06%",
          "Unchanged": "61.08%"
        },
        {
          "Set age on 2026-09-22": "25 years and older",
          "Cards": "974",
          "Mean forward": "+0.13%",
          "Median forward": "0.00%",
          "Win rate": "23.41%",
          "Unchanged": "58.62%"
        }
      ]
    },
    {
      "title": "Panel A: forward 12-day return by how often the quote was rewritten in the trailing 11 days",
      "columns": [
        "Quote changes",
        "Cards",
        "Mean forward",
        "Median forward",
        "Win rate",
        "Unchanged"
      ],
      "rows": [
        {
          "Quote changes": "0 in 11 days",
          "Cards": "14,840",
          "Mean forward": "+2.43%",
          "Median forward": "0.00%",
          "Win rate": "14.29%",
          "Unchanged": "76.44%"
        },
        {
          "Quote changes": "1 to 2",
          "Cards": "12,780",
          "Mean forward": "+2.31%",
          "Median forward": "0.00%",
          "Win rate": "31.02%",
          "Unchanged": "49.42%"
        },
        {
          "Quote changes": "3 to 5",
          "Cards": "9,224",
          "Mean forward": "+2.12%",
          "Median forward": "0.00%",
          "Win rate": "33.58%",
          "Unchanged": "39.47%"
        },
        {
          "Quote changes": "6 to 8",
          "Cards": "4,515",
          "Mean forward": "-1.50%",
          "Median forward": "-0.96%",
          "Win rate": "37.10%",
          "Unchanged": "8.33%"
        }
      ]
    }
  ],
  "charts": [],
  "sections": [
    "The same question, asked of two populations that disagree",
    "Six things people believe predict a return, ranked by how much they actually do",
    "The one factor that loads, and the study you should read beside it",
    "Rarity, language, and how often the price changes"
  ],
  "method": [
    "Two panels, both as of 2026-09-22. PANEL A: the `price_history` table, a daily dump of the priced catalogue, days 20695 to 20718 inclusive (2026-08-30 to 2026-09-22), 1,150,986 rows over 52,656 TCGplayer products, of which 44,711 join a `cards` row on `tcg_id`. A card enters Panel A only if it carries a price on all three of days 20695, 20706 and 20718, giving n = 41,359. The trailing signal is day 20695 to day 20706 and uses no data after 20706; the forward return is day 20706 to day 20718. PANEL B: the per-card weekly `ppthist:<tcgId>` series in `api_cache`, 19,876 of which join the catalogue. A card enters Panel B only if its series reaches 2025-01-27 and carries at least 40 points, giving 2,766 cards. Evaluation points sit on a single 28-day grid anchored on 2025-01-27, the tape's first recorded week, and an evaluation point is used only when the whole 180-day window fits inside that card's own tape, so no leg is resolved past either end of it. At each of the three required dates the price used is the LAST recorded point at or before that date, accepted only when it falls within 10 days of it. That convention gives 40,823 observations and a trailing-to-forward rank correlation of -0.0409. Every part of it matters and none of it is obvious, so the alternative is published beside it: resolving to the NEAREST point within 10 days either side and letting a window overhang the tape gives 43,821 observations and -0.0411. The two readings agree to the third decimal; the observation count does not, and a Panel B figure quoted without its grid rule is not reproducible. All prices on both panels are TCGplayer market prices, which are ASKS, not sold medians; no graded price appears in any return here. Every panel is keyed on the TCGplayer product id and carries exactly one row per product. 51,719 catalogue rows carry a TCGplayer product id, and they resolve to 50,507 distinct ids: 1,212 ids are claimed by two rows each, 2,424 rows in all. Those pairs are not a Japanese print against its English twin, which is what we assumed before counting them. Every one of the 1,212 is a same-language pair, 972 Japanese and 240 English, and they are overwhelmingly one product indexed under two catalogue spellings of the same set, as the XY trainer kits are. Each id collapses to a single row, preferring an English row and then the lexically first catalogue id, so no product enters a cross-section, a factor sort or a census twice. The tie-break is stated rather than assumed away, because it decides which of the two spellings a shared product is filed under. Rank correlations are Spearman, computed with average ranks on ties. Medians use the house convention, the upper-middle element on even samples. Every return bucket in this study is closed at its upper edge, so a card up exactly 25.00% is in the 10-to-25 band and not the 25-to-50 one; 88 cards sit on the first of those edges and 69 on the second, which is enough to move three printed row counts if the rule is left unstated. Set age joins `cards.set_name` to the 201 cached set-metadata rows carrying a release date. That join took four attempts and the first three were wrong, which is worth stating because the failure mode is invisible in the output. The first matcher reached 31.61% of the panel; its residual turned out to be a bug, not missing data, because the metadata stores provider-prefixed names (`sm cosmic eclipse`) against a catalogue that stores plain ones (`Cosmic Eclipse`). The second reached 86.86% of English cards, and its residual was ALSO mostly a bug: 40 of those 60 unmatched names, covering 2,358 cards, had a release date sitting in the metadata that the matcher could not reach, because `&` folded to a space rather than to `and`, because ` base set` was appended but never stripped, and because promo sets and series abbreviations are spelled differently on the two sides. The third reached 98.24% and was wrong in the other direction, which is the more dangerous one: it dated 206 cards to sets they do not belong to, and a false match is invisible where a miss is not. Its prefix stripper removed the first word of any catalogue name whether or not a provider prefix was there, so `Expedition Base Set` matched the metadata row `Base Set` and 165 cards were dated 1999-01-09 instead of Expedition's 2002-09-15. Its token rules dropped the words `base` and `set`, which left the metadata row `Base Set 2` carrying the single token `2`, and that token is a subset of both `POP Series 2` and `EX Trainer Kit 2: Plusle & Minun`, so 41 more cards were dated to February 2000. Both of those sets do have a metadata row and neither row has a release date, so both belong in the residual rather than in the panel. The matcher used here folds accents, apostrophes, gender signs, case and punctuation, maps `&` to `and`, normalises promo vocabulary, expands a listed closed set of series abbreviations, strips a provider prefix only where a colon or a dash marks one, refuses a token-subset match on a single numeric token, and then resolves exact, unique-token-subset, and unique-token-superset in that order. Two tie-breaks apply when a bare catalogue name matches several metadata rows: a base-set row beats a promo or energies row, and a row that adds nothing to the query but a series token wins outright, which is how the catalogue's `Dragon` resolves to `EX Dragon` and its 2003 release rather than to Dragon Vault or Dragon Majesty. English coverage is 98.06%, 20,828 of 21,240. The remaining 20 names covering 412 cards were checked one at a time against the metadata rather than assumed: 404 of those cards belong to sets carrying no recorded release date, which is POP Series 1 to 9, the EX trainer kits, Alternate Art Promos, Nintendo and Wizards Black Star Promos, First Partner Pack, Miscellaneous Promos, Best of Game, Yellow A Alternate, and McDonald's Collection 2021. The other 8 are one set, Mega Evolution Energy, which the matcher declines because the metadata spells it Energies and a singular-to-plural rule is not worth the wrong matches it would make elsewhere. Japanese sets carry release dates for only 2.99% of Japanese cards, so the set-age factor is reported on English cards only. The set-level restatement groups the matched panel by `cards.set_name`, keeps sets with 20 or more members, and correlates set age against the equal-weight mean of the members' forward returns; that grouping is the one figure in this module that moves with the duplicate-id tie-break above, so it is reported as a direction rather than a measurement. EXCLUSIONS, stated because an earlier draft of this block wrongly said there were none: day 20706 is one of the partial catalogue dumps, so requiring a price on it drops 2,441 of the 43,800 products priced on both endpoints, 5.57%, and those are cheap, with a median start price of $0.11 against $1.89 for Panel A. Their median 23-day return is 0.00%, the same as Panel A's, so the exclusion moves level figures rather than the central finding, but it is a price-correlated exclusion and not a neutral one."
  ],
  "terms": "Figures are moonstone's own recorded measurements, dated as published. Quote them with the population stated beside them. The article at `url` is the human form of this file."
}