Northbound Capital Flow Analysis 2016-2024
The Shanghai-Hong Kong Stock Connect and Shenzhen-Hong Kong Stock Connect allow foreign investors to trade A-shares through Hong Kong. This analysis tracks northbound capital (foreign buying of A-shares) from July 2016 to April 2024, covering 1,848 trading days and 3,441 stocks.
Foreign capital showed persistent inflows from 2016 to 2023, despite major market shocks including the US-China trade war (2018), COVID-19 (2020), and Ukraine conflict (2022). The trend reversed after August 2023, possibly due to Fed rate hikes and geopolitical tensions.
| Year | Avg Holdings (B shares) | Avg Stocks | YoY Growth |
|---|---|---|---|
| 2016 | 109 | 674 | - |
| 2017 | 156 | 1,689 | +43% |
| 2018 | 294 | 1,879 | +88% |
| 2019 | 507 | 2,003 | +72% |
| 2020 | 705 | 2,115 | +39% |
| 2021 | 874 | 2,250 | +24% |
| 2022 | 1,020 | 2,393 | +17% |
| 2023 | 1,174 | 2,933 | +15% |
| 2024 | 1,179 | 3,305 | +0.4% |
Foreign investors show a strong preference for Shanghai-listed stocks (66.3% of total holdings), likely due to the concentration of large-cap blue chips like banks, oil, and utilities on SSE.
Foreign capital concentrates in large-cap banks, consumer leaders, and utilities. The top 30 stocks account for ~25% of total northbound holdings.
| Rank | Stock | Holdings (M shares) | Ownership % | Sector |
|---|---|---|---|---|
| 1 | 601288.SH (ABC) | 3,155 | 0.98% | Banking |
| 2 | 000725.SZ (BOE) | 2,957 | 8.00% | Electronics |
| 3 | 601398.SH (ICBC) | 2,752 | 1.02% | Banking |
| 4 | 600900.SH (Yangtze Power) | 1,868 | 7.78% | Utilities |
| 5 | 601668.SH (CSCEC) | 1,832 | 4.43% | Construction |
| 6 | 601988.SH (BOC) | 1,746 | 0.82% | Banking |
| 7 | 601899.SH (Zijin Mining) | 1,535 | 7.46% | Mining |
| 8 | 002027.SZ (Focus Media) | 1,528 | 10.58% | Media |
| 9 | 601328.SH (BCM) | 1,448 | 3.68% | Banking |
| 10 | 600028.SH (Sinopec) | 1,424 | 1.49% | Energy |
Data Source: Tushare Pro API (Shanghai-Hong Kong & Shenzhen-Hong Kong Stock Connect holdings)
Time Range: July 4, 2016 – April 26, 2024 (1,848 trading days)
Coverage: 3,441 unique stocks, 3.9M+ data points
Processing: Deduplicated by (trade_date, ts_code), aggregated daily holdings
Metrics: Holdings (shares), ownership ratio (%), stock count
Visualization: Matplotlib, 30-day moving averages for trend smoothing