Analyst Upgrade Clusters Across 14 Markets: One Signal Survives the Direction Test

We tested analyst upgrade clusters on 14 exchanges with next-day MOC execution. No immediate alpha, and the US 3-week window fails the direction test: downgrades beat the index too. What survives is US T+63. UK, Canada and Taiwan look strong but have too few downgrades to test.

Horizontal bar chart of T+1 abnormal returns by exchange for analyst upgrade cluster events (12 exchanges with 50+ events), sorted by magnitude.

Upgrade clusters, events where 2+ analysts move bullish simultaneously, do not produce immediate abnormal returns. We tested 14 exchanges from 2019-2025 using next-day Market-on-Close execution; most T+1 results are negative or statistically insignificant. Positive 3-week CARs show up in several markets, but in the US, the only market big enough to check, downgrade clusters beat the index at T+21 too, so the 3-week window is event drift, not analyst signal. The claim that survives its own inverse is the US at T+63. The immediate-pop narrative was same-bar entry bias.

Contents

  1. The Setup
  2. The Global Results
  3. The Data Artifact That Shapes Everything
  4. Where the 3-Week CARs Are (and What They Can and Can't Prove)
  5. United States
  6. UK (LSE)
  7. Canada (TSX)
  8. Taiwan (TAI)
  9. The Interesting Cases
  10. China: Strongest T+21, But Data Quality Issues
  11. Japan: Zero Alpha at All Windows
  12. Sweden and Thailand: Borderline Signals
  13. Where the Signal Doesn't Hold
  14. What This Means for Multi-Market Trading
  15. Running the Live Screen
  16. Notes on Methodology

The Setup

An upgrade cluster fires when the aggregate bullish count (StrongBuy + Buy) in the grades_historical table increases by 2 or more between consecutive observations for the same symbol. We require observations to be 14–30 days apart, which filters spurious clusters from periods when the data provider recorded daily snapshots instead of monthly ones.

Exchanges tested: US (NYSE/NASDAQ/AMEX), India (NSE), Japan (JPX), UK (LSE), Germany (XETRA), Hong Kong (HKSE), Korea (KSC), China (SHH+SHZ), Canada (TSX), Australia (ASX), Sweden (STO), Taiwan (TAI), Thailand (SET), South Africa (JNB). 14 exchanges total.

Benchmarks: Local market indices. S&P 500 (US), Sensex (India), Nikkei 225 (Japan), FTSE 100 (UK), DAX (Germany), Hang Seng (Hong Kong), KOSPI (Korea), SSE Composite (China), TSX Composite (Canada), ASX 200 (Australia), OMX Stockholm 30 (Sweden), TAIEX (Taiwan), SET Index (Thailand). JNB had no local index series in this run, so its rows are benchmarked against the S&P 500. That is the wrong market; JNB is shown for completeness and excluded from every conclusion below.

Execution: Next-day Market-on-Close (MOC). Event observed on date D → execute at close of D+1. This eliminates same-bar entry bias.

Market cap floors: Exchange-specific in local currency, targeting roughly $200M–$1B equivalent depending on market depth.

Windows: T+1, T+5, T+21, T+63 trading days.

Data: FMP financial data warehouse, 2000–2025. Updated March 2026.


The Global Results

Exchange Benchmark Events T+1 CAR t(1) T+21 CAR t(21)
China (SHH+SHZ) SSE Composite 2,180 -0.223%** -3.82 +2.943%** 12.11
Taiwan (TAI) TAIEX 322 +0.162% 1.54 +1.354%** 2.75
UK (LSE) FTSE 100 532 +0.228%* 2.29 +1.368%** 3.58
Canada (TSX) TSX Composite 518 -0.460%** -3.29 +1.295%** 3.22
Sweden (STO) OMX Stockholm 30 128 +0.314% 1.75 +1.251% 1.62
US (NYSE/NASDAQ/AMEX) S&P 500 5,657 -0.312%** -8.78 +0.764%** 4.42
Thailand (SET) SET Index 43 +0.310% 0.90 +0.739% 0.59
India (NSE) Sensex 607 +0.005% 0.07 +0.577% 1.62
Australia (ASX) ASX 200 398 -0.316%** -3.15 -0.003% -0.01
Hong Kong (HKSE) Hang Seng 876 -0.139% -1.93 -0.161% -0.45
Germany (XETRA) DAX 160 +0.265% 1.21 -0.358% -0.44
Korea (KSC) KOSPI 419 +0.041% 0.41 -1.331%* -2.03
Japan (JPX) Nikkei 225 911 +0.018% 0.32 -1.646%** -6.65
South Africa (JNB) (excluded) S&P 500 36 -0.393% -0.67 -2.681%* -2.44

** = p<0.01, * = p<0.05

Key changes from previous results: Local index benchmarks replace regional ETFs. Next-day MOC execution eliminates same-bar entry bias. India now uses NSE only (was BSE+NSE). China uses SHH+SHZ symbols (was old China symbols). Seven new exchanges added (ASX, STO, TAI, SET, JNB, plus updated China and India).

The direction test. A rating signal has to pay in one direction only. We ran downgrade clusters through the same pipeline: in the US (1,003 downgrade events), downgrades beat the S&P 500 by +1.480% at T+21, more than upgrades did, so the US 3-week move is direction-agnostic drift, and we treat T+21 as suspect everywhere. In the markets with positive 3-week CARs, downgrade samples are too small to test (UK 21 events, Canada 13, Taiwan 12), which means those T+21 numbers below are unverified in the one way that matters, not confirmed. Where the inverse leg is big enough to run, it fails: Japan's downgrades drift -3.970% alongside its upgrades at T+21, both significantly negative against the Nikkei. The US analysis has the full breakdown.


The Data Artifact That Shapes Everything

Before interpreting these numbers, the most important fact: FMP recorded analyst rating data at daily or near-daily frequency for many symbols during 2022, versus monthly in other years. This creates a 10–100x spike in detected upgrade clusters that year.

Our 14-day minimum gap filter eliminates most of these. But the filter can't undo the fundamental problem: if a symbol's ratings were only observed monthly in 2019–2021 but daily in 2022, the cluster detection window is structurally different across years. Any market where most events come from 2022 is effectively giving you a one-year snapshot, not a multi-year study.

The 2022 concentration is severe in most non-US exchanges, running from 77% of events in Hong Kong to 92% in China. India (55%) and Thailand (5%) are the two exceptions and are not 2022-concentrated. For the concentrated markets, the results represent how analyst upgrade clusters behaved in one specific year with one specific market regime, not a structural property of the signal.

US (56% from 2022) is the only exchange with enough history outside 2022 to support a multi-year read: 2,514 of its 5,657 events fall in other years. 2019: 54 events. 2020: 1,276. 2021: 472. India's 2022 share is fractionally lower at 55%, but that leaves only 273 events across every other year, so the better ratio doesn't buy it a multi-year study. On absolute out-of-2022 count, nothing else is close.


Where the 3-Week CARs Are (and What They Can and Can't Prove)

United States

N=5,657, T+1=-0.312%, T+21=+0.764%, T+63=+0.764%. T+1 is significantly negative. The T+21 number fails the direction test (downgrades: +1.480% in the same window), so the US claim rests on T+63, where upgrades hold +0.764% and downgrades turn negative. Medium clusters lead at +1.631% T+63 (t=3.14). See the US-specific analysis for the full breakdown by cluster size.

UK (LSE)

N=532, T+1=+0.228%, T+21=+1.368%*. The strongest T+21 persistence after China, and statistically robust on its own terms. The caveat: only 21 UK downgrade clusters exist, so we cannot run the direction test that undid the US T+21 claim. Treat this as a promising, unverified number rather than confirmed alpha.

Canada (TSX)

N=518, T+1=-0.460%, T+21=+1.295% (t=3.22**). Negative T+1 drift followed by a significant positive 3-week CAR. Same caveat as the UK: 13 downgrade events is too few for the direction test, so delayed price discovery is the interpretation, not the verified mechanism.

Taiwan (TAI)

N=322, T+1=+0.162%, T+21=+1.354% (t=2.75). No significant T+1 reaction, a robust-looking 3-week CAR, and again only 12 downgrade events, so the direction test cannot run. Unverified, same as the UK and Canada.


The Interesting Cases

China: Strongest T+21, But Data Quality Issues

China shows +2.943% T+21 CAR (t=12.11**), the highest in the dataset. But 92% of the 2,180 events come from 2022. Chinese A-shares had significant policy-driven sector rotations in 2022 (tech crackdowns, real estate interventions, zero-COVID impacts). The T+21 return likely captures 2022 market conditions more than the analyst signal itself.

T+1 is significantly negative (-0.223%, t=-3.82**). The extreme T+21 magnitude is unlikely to persist out-of-sample, and with only 24 downgrade clusters the direction test can't run here either. Treat with caution.

Japan: Zero Alpha at All Windows

Japan shows T+1=+0.018% (not significant) and T+21=-1.646%** (significantly negative). With honest next-day execution, there is no upgrade cluster alpha in Japanese markets at any horizon tested. This is a complete reversal from the old result (+1.813% T+1 with same-bar entry).

The previous "strongest pop" finding was entirely same-bar entry bias. Japanese markets are highly algorithmic — upgrade information gets priced immediately when it becomes available to the market, not when the FMP observation fires. By the time the cluster is detected in the data, the move has already happened and reversed.

Sweden and Thailand: Borderline Signals

Sweden (STO): N=128, T+1=+0.314%, T+21=+1.251% (t=1.62, not quite significant at p<0.05). Small sample, but the T+21 magnitude is material.

Thailand (SET): N=43, T+1=+0.310%, T+21=+0.739% (t=0.59, not significant). Only 43 events — too thin to draw conclusions.


Where the Signal Doesn't Hold

Japan (JPX): T+1=+0.018%, T+21=-1.646%**. Significantly negative T+21 alpha. No tradeable signal at any window. See above for discussion of why the old "+1.813% T+1" result was same-bar entry bias.

Korea (KSC): T+1=+0.041%, T+21=-1.331%*. Significantly negative T+21. Korean markets price analyst consensus shifts quickly and completely — no delayed alpha opportunity.

India (NSE): T+1=+0.005%, T+21=+0.577%. Neither result is statistically significant. This is a major change from the old BSE+NSE result (+0.236% T+1, +1.605% T+21*). Switching from dual-exchange + INDA ETF benchmark to NSE-only + Sensex eliminated the apparent alpha. The old result was likely benchmark mismatch, not real signal.

Hong Kong (HKSE): T+1=-0.139%, T+21=-0.161%. Both negative, neither significant. Large sample (876 events) with no signal. The old result showed -1.603% T+1** (significantly negative), which has mostly disappeared with next-day execution.

Germany (XETRA): T+1=+0.265%, T+21=-0.358%. Neither significant. Only 160 events. Too thin to conclude either way.

Australia (ASX): T+1=-0.316%**, T+21=-0.003%. Significant negative T+1, zero T+21. No signal.

South Africa (JNB): T+1=-0.393%, T+21=-2.681%*. Excluded from conclusions: only 36 events, and the benchmark is the S&P 500 because no local index series was available, so the number mostly measures the JSE-versus-US gap.


What This Means for Multi-Market Trading

With next-day MOC execution, the picture is narrower than the 3-week numbers suggest. The US is the one market where the signal survives its own direction test, and it does so at T+63 (+0.764%, downgrades negative), led by medium clusters (+1.631%). UK (+1.368%), Canada (+1.295%), and Taiwan (+1.354%) show strong T+21 CARs that cannot be direction-tested on 12-21 downgrade events; treat them as candidates, not conclusions. China's +2.943% is 92% 2022 events; treat as preliminary.

No large market shows a meaningful immediate pop. The only significant positive T+1 in the table is the UK's +0.228%*, a fifth the size of the old same-bar numbers. The immediate-pop narrative from event studies that use same-day execution does not hold with honest next-day MOC execution. And the 3-week window that replaced it fails the direction test where we can run one; the defensible horizon is 3 months.

India lost its signal when we switched from BSE+NSE with INDA ETF benchmark to NSE-only with Sensex. The old "+1.605% T+21" result was benchmark mismatch, not real alpha.

Japan lost its signal entirely. The old "+1.813% T+1" result was pure same-bar entry bias. T+21 is now -1.646%** (significantly negative).

The data quality issue (2022 concentration) will resolve over time. As FMP accumulates more years of post-2022 data, the non-US results will become more reliable, and their downgrade samples will grow large enough to direction-test. For now: the US T+63 result is the one claim that survives its own inverse. The UK, Canada, and Taiwan 3-week numbers are candidates awaiting bigger downgrade samples. Everything else requires more history.


Running the Live Screen

The screen works across any exchange. Adjust the exchange filter and market cap threshold:

WITH lagged AS (
    SELECT
        symbol,
        CAST(date AS DATE) AS obs_date,
        CAST(analystRatingsStrongBuy AS INTEGER) + CAST(analystRatingsBuy AS INTEGER)
            AS bullish_count,
        CAST(analystRatingsSell AS INTEGER) + CAST(analystRatingsStrongSell AS INTEGER)
            AS bearish_count,
        LAG(CAST(analystRatingsStrongBuy AS INTEGER) + CAST(analystRatingsBuy AS INTEGER))
            OVER (PARTITION BY symbol ORDER BY date) AS prev_bullish,
        LAG(CAST(date AS DATE))
            OVER (PARTITION BY symbol ORDER BY date) AS prev_date
    FROM grades_historical
    WHERE CAST(date AS DATE) >= CURRENT_DATE - INTERVAL '30' DAY
),
clusters AS (
    SELECT symbol, obs_date, bullish_count, bearish_count,
        bullish_count - prev_bullish AS upgrade_delta
    FROM lagged
    WHERE prev_bullish IS NOT NULL
      AND (obs_date - prev_date) BETWEEN 14 AND 30
      AND bullish_count - prev_bullish >= 2
)
SELECT
    c.symbol, c.obs_date, c.upgrade_delta, c.bullish_count, c.bearish_count,
    ROUND(k.marketCap / 1e9, 1) AS mktcap_bn
FROM clusters c
JOIN profile p ON c.symbol = p.symbol
JOIN key_metrics k ON c.symbol = k.symbol AND k.period = 'FY'
WHERE p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')  -- change for other markets
  AND k.marketCap > 1000000000
QUALIFY ROW_NUMBER() OVER (PARTITION BY c.symbol ORDER BY k.date DESC, c.obs_date DESC) = 1
ORDER BY c.upgrade_delta DESC, c.obs_date DESC
LIMIT 30

Notes on Methodology

UINT16 overflow: The analystRatings* columns are stored as unsigned 16-bit integers. Never compute deltas without CAST AS INTEGER first. On UINT16, 3 - 5 = 65,534, not -2.

14-day minimum gap: Non-negotiable. Without it, periods of daily FMP updates (2022) produce thousands of false cluster signals from consecutive-day observation pairs.

Benchmark selection: Local market index per exchange (Sensex, Nikkei 225, FTSE 100, DAX, and so on; SPY for the US; JNB has none and is excluded from conclusions). This matters most for high-growth markets where a local index captures the macro tailwind more accurately than a US benchmark.

Run the US upgrade cluster screen live →


Data: Ceta Research / FMP warehouse. grades_historical + stock_eod + key_metrics tables. Market cap floors applied per exchange. 2019–2025. Past performance does not guarantee future results. Research content, not investment advice.