52-Week Low Quality: 24-Year Hong Kong Backtest (HKSE)

52-Week Low Quality: 24-Year Hong Kong Backtest (HKSE)

A $10,000 investment in 2002 following this strategy on the Hong Kong Stock Exchange was worth $5,472 by end of 2025. That's a 45% nominal loss over 24 years, not accounting for inflation.

Contents

  1. Method
  2. What We Found
  3. Year-by-Year
  4. Why Hong Kong Breaks This Strategy
  5. Run It Yourself
  6. Limitations

This is the worst result across every exchange we tested. And the reasons explain something specific: a quality filter built around financial statements can't protect you from geopolitical risk.

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


Method

Each quarter (January, April, July, October), screen for stocks within 15% of their 52-week low. Require a Piotroski F-score of 7 or higher, meaning the stock must show improving profitability, leverage, and operating efficiency. Hold up to 30 stocks equal-weight. Minimum 5 qualifying names to deploy capital. Sit in cash otherwise. Transaction costs: 0.1% per trade. Filing lag: 45 days.

Benchmark: Hang Seng Index (^HSI), 3.76% CAGR over 2002-2025.


What We Found

Metric 52-Low Quality (HKSE) Hang Seng
CAGR -2.51% 3.76%
Total Return -45.27% 140.39%
Excess Return vs Hang Seng -6.27%
Max Drawdown -79.92% -48.50%
Sharpe Ratio -0.260 0.036
Sortino Ratio -0.354
Calmar Ratio -0.031
Volatility 21.19% 21.05%
Up-Capture 59.55%
Down-Capture 86.45%
Beta 0.782
Alpha -6.10%
Win Rate vs bench 36.84%
Cash Periods 14/95 quarters
Avg Stocks (when invested) 23.3
$10k → $5,473 $24,039

The down-capture of 86.45% means the portfolio falls nearly as much as the Hang Seng during selloffs, while the up-capture of 59.55% means it captures only 60% of the upside. That asymmetry is the core problem. An alpha of -6.10% means you were losing about 6 percentage points per year relative to the Hang Seng on a risk-adjusted basis. Still clearly bad.

The max drawdown of -79.92% is not a theoretical figure. The portfolio actually lost nearly 80% of its peak value across the worst stretch of this test.

Hong Kong 52-Week Low Quality, Cumulative Returns 2002-2025
Hong Kong 52-Week Low Quality, Cumulative Returns 2002-2025


Year-by-Year

Year Portfolio Hang Seng
2002 +0.79% -17.49%
2003 -5.46% +36.69%
2004 -3.98% +11.22%
2005 -2.90% +4.97%
2006 +24.99% +35.90%
2007 +30.94% +35.70%
2008 -58.09% -45.42%
2009 +1.00% +45.07%
2010 +8.43% +7.39%
2011 -25.65% -19.45%
2012 +15.14% +23.49%
2013 -2.83% +0.12%
2014 -3.97% +2.22%
2015 -13.90% -10.61%
2016 +2.37% +3.86%
2017 +18.33% +37.76%
2018 -19.12% -17.65%
2019 +4.05% +13.58%
2020 +9.04% -3.75%
2021 -9.31% -15.28%
2022 -12.64% -13.45%
2023 -10.24% -16.66%
2024 +33.03% +16.89%
2025 +13.39% +39.05%

The early years looked fine. 2006 and 2007 delivered decent returns, though the portfolio lagged the Hang Seng in both years (+24.99% vs +35.90%, +30.94% vs +35.70%). Then 2008 erased it all, with a -58.09% loss against the Hang Seng's -45.42%. The strategy fell harder than the benchmark during the crash.

The failure to recover in 2009 (+1.00% vs the Hang Seng's +45.07%) is the defining moment. Mean-reversion strategies are supposed to benefit from post-crash bounces. Hong Kong stocks near lows after 2008 were often cheap for real reasons. The Piotroski filter looked backward at financial statements. The economic disruption ahead was not in those statements yet.

The 2020-2023 stretch is actually where the strategy held up better against the local benchmark. The Hang Seng itself was negative in three of those four years. The portfolio still lost money, but the gap narrowed. In 2020, the portfolio returned +9.04% while the Hang Seng fell -3.75%.

The 2024 recovery of +33.03% outpaced the Hang Seng's +16.89%. But 2025 reversed: the portfolio returned +13.39% while the Hang Seng surged +39.05%.

Hong Kong 52-Week Low Quality, Annual Returns vs Hang Seng
Hong Kong 52-Week Low Quality, Annual Returns vs Hang Seng


Why Hong Kong Breaks This Strategy

The Piotroski F-score checks nine items: positive net income, positive cash flow from operations, improving return on assets, improving cash flow quality, decreasing leverage, improving current ratio, no equity dilution, improving asset turnover, and improving gross margin. A score of 7+ means the company is passing most of these tests.

None of those tests can identify whether a company's primary customer is a property developer now drowning in debt. None of them flag whether a sector is about to be declared a "common prosperity" target by Beijing. None of them account for the risk that a stock exchange loses its reputation as a rule-of-law jurisdiction.

That's what happened in Hong Kong.

The companies that qualified for this screen in 2020 and 2021 often had solid F-scores. They were profitable, had improving margins, and weren't over-leveraged. But they were operating inside a macroeconomic and political environment that was structurally deteriorating. The strategy's -6.10% alpha against the Hang Seng still represents consistent value destruction by the stock selection process.

Three distinct crashes compound to create the -79.92% max drawdown: 1. 2008 GFC (-58.09% in the portfolio) 2. The 2011 European sovereign debt crisis spillover (-25.65% that year) 3. The 2020 to 2023 China/HK policy and regulatory spiral

Each time, the portfolio was loaded with Piotroski-qualified stocks that looked financially healthy going in. Financial health doesn't equal price recovery when the macro environment is actively hostile.

The 86.45% down-capture tells the story more precisely. In periods when the Hang Seng fell, this portfolio fell about 86% as much. Combined with the 59.55% up-capture, the asymmetry is consistently wrong-way. The 14/95 cash periods (15% of all quarters) mean the portfolio was mostly invested during these drawdowns. It didn't dodge them.


Run It Yourself

The live screen below shows current HKSE stocks within 15% of their 52-week low with Piotroski F-score ≥ 7.

WITH
inc AS (
    SELECT symbol, netIncome, grossProfit, revenue,
           ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
    FROM income_statement WHERE period = 'FY' AND netIncome IS NOT NULL
),
bal AS (
    SELECT symbol, totalAssets, totalCurrentAssets, totalCurrentLiabilities,
           longTermDebt, totalStockholdersEquity,
           ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
    FROM balance_sheet WHERE period = 'FY' AND totalAssets > 0
),
cf AS (
    SELECT symbol, operatingCashFlow,
           ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
    FROM cash_flow_statement WHERE period = 'FY' AND operatingCashFlow IS NOT NULL
),
piotroski AS (
    SELECT ic.symbol,
        CASE WHEN ic.netIncome > 0 THEN 1 ELSE 0 END
        + CASE WHEN cfc.operatingCashFlow > 0 THEN 1 ELSE 0 END
        + CASE WHEN (ic.netIncome/bc.totalAssets) > (ip.netIncome/bp.totalAssets) THEN 1 ELSE 0 END
        + CASE WHEN cfc.operatingCashFlow/bc.totalAssets > ic.netIncome/bc.totalAssets THEN 1 ELSE 0 END
        + CASE WHEN (COALESCE(bc.longTermDebt,0)/bc.totalAssets) < (COALESCE(bp.longTermDebt,0)/bp.totalAssets) THEN 1 ELSE 0 END
        + CASE WHEN (bc.totalCurrentAssets/bc.totalCurrentLiabilities) > (bp.totalCurrentAssets/bp.totalCurrentLiabilities) THEN 1 ELSE 0 END
        + CASE WHEN bc.totalStockholdersEquity >= bp.totalStockholdersEquity THEN 1 ELSE 0 END
        + CASE WHEN (ic.revenue/bc.totalAssets) > (ip.revenue/bp.totalAssets) THEN 1 ELSE 0 END
        + CASE WHEN (ic.grossProfit/ic.revenue) > (ip.grossProfit/ip.revenue) THEN 1 ELSE 0 END
        AS f_score
    FROM (SELECT * FROM inc WHERE rn=1) ic
    JOIN (SELECT * FROM inc WHERE rn=2) ip ON ic.symbol = ip.symbol
    JOIN (SELECT * FROM bal WHERE rn=1) bc ON ic.symbol = bc.symbol
    JOIN (SELECT * FROM bal WHERE rn=2) bp ON ic.symbol = bp.symbol
    JOIN (SELECT * FROM cf WHERE rn=1) cfc ON ic.symbol = cfc.symbol
),
prices_52w AS (
    SELECT symbol,
           LAST_VALUE(adjClose) OVER (PARTITION BY symbol ORDER BY dateEpoch ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS current_price,
           MIN(adjClose) OVER (PARTITION BY symbol) AS low_52w
    FROM stock_eod
    WHERE date >= CURRENT_DATE - INTERVAL '365 days' AND adjClose > 0
),
price_summary AS (
    SELECT symbol, MAX(current_price) AS current_price, MIN(low_52w) AS low_52w
    FROM prices_52w GROUP BY symbol
)
SELECT pio.symbol, p.companyName, p.sector,
       pio.f_score,
       ROUND(ps.current_price, 2) AS current_price,
       ROUND(ps.low_52w, 2) AS low_52w,
       ROUND((ps.current_price - ps.low_52w)/ps.low_52w * 100, 1) AS pct_above_low,
       ROUND(k.marketCap/1e9, 2) AS mktcap_b
FROM piotroski pio
JOIN profile p ON pio.symbol = p.symbol AND p.exchange = 'HKSE'
JOIN price_summary ps ON pio.symbol = ps.symbol
JOIN key_metrics_ttm k ON pio.symbol = k.symbol
WHERE k.marketCap > 500000000
  AND pio.f_score >= 7
  AND (ps.current_price - ps.low_52w)/ps.low_52w <= 0.15
  AND ps.current_price >= 1.0
ORDER BY (ps.current_price - ps.low_52w)/ps.low_52w ASC
LIMIT 30

Run this on Ceta Research Data Explorer with your API key.


Limitations

Survivorship bias: Delisted Hong Kong companies are not included. Given the number of HK companies that were suspended or delisted between 2020 and 2024, this meaningfully overstates returns. The actual results from a live strategy would likely be worse.

Geopolitical risk is not captured in backtests: The 2020 to 2023 Hong Kong regulatory environment was unprecedented. Backtests assume the future looks like the past. When political regimes shift, that assumption fails.

Currency: Returns and benchmark are both in HKD. The HKD peg to USD means currency risk is minimal for USD-based investors, but this also means the exchange doesn't benefit from currency appreciation that can lift returns in freely floating markets.

Market cap filter: We used HKD 500M (~USD 64M) as the minimum. This is a reasonable threshold for liquidity, but it excludes a significant portion of HKSE-listed names that are smaller Chinese companies with genuinely different risk profiles.

Forward-looking note: The 2024 recovery (+33.03%) is real. Some investors believe Chinese regulatory headwinds have peaked and valuations are genuinely cheap. This backtest doesn't predict what happens next. It documents what happened across 24 years.


Data: Ceta Research (FMP financial data warehouse), 2002-2025. Full methodology: backtests/METHODOLOGY.md. Backtest code: backtests/52-week-low/.