Stock Connect (Shanghai/Shenzhen-Hong Kong) fund flow analysis — Northbound (foreign into A-shares), Southbound (mainland into HK), sector allocation tracking, and cross-border arbitrage signals.
62
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./agent/src/skills/hk-connect-flow/SKILL.mdAnalyze capital flows through the Shanghai-Hong Kong and Shenzhen-Hong Kong Stock Connect programs. Northbound flows (foreign capital into A-shares) are a key institutional sentiment indicator for the China market; Southbound flows (mainland capital into Hong Kong) reveal mainland investor preference for HK-listed assets. Together they provide a real-time cross-border capital positioning signal.
| Channel | Direction | What It Measures |
|---|---|---|
| Shanghai Connect Northbound | Foreign → A-shares (SSE) | Foreign institutional A-share appetite |
| Shenzhen Connect Northbound | Foreign → A-shares (SZSE) | Foreign institutional A-share appetite (growth bias) |
| Shanghai Connect Southbound | Mainland → HK (HKEX) | Mainland capital HK allocation |
| Shenzhen Connect Southbound | Mainland → HK (HKEX) | Mainland capital HK allocation |
Daily quota: Each channel has a daily net buy quota (~RMB 52B / HKD 42B). Quota utilization >50% = strong directional signal.
Why Northbound matters:
Northbound signal framework:
# Daily Northbound net buy signals
def northbound_signal(daily_net_buy_rmb_billion):
if daily_net_buy_rmb_billion > 10:
return "strong_foreign_buying" # Very large single-day inflow
elif daily_net_buy_rmb_billion > 5:
return "moderate_foreign_buying"
elif daily_net_buy_rmb_billion > 0:
return "mild_foreign_buying"
elif daily_net_buy_rmb_billion > -5:
return "mild_foreign_selling"
elif daily_net_buy_rmb_billion > -10:
return "moderate_foreign_selling"
else:
return "strong_foreign_selling" # Panic outflow
# Cumulative flow trend (more important than single-day)
def northbound_trend(flows_20d, flows_5d):
cum_20d = sum(flows_20d)
cum_5d = sum(flows_5d)
if cum_20d > 30 and cum_5d > 10:
return "sustained_accumulation" # Strong bullish for A-shares
elif cum_20d < -30 and cum_5d < -10:
return "sustained_distribution" # Bearish for A-shares
elif cum_20d > 0 and cum_5d < 0:
return "accumulation_pausing" # Watch for reversal
elif cum_20d < 0 and cum_5d > 0:
return "distribution_pausing" # Possible bottom formationNorthbound sector allocation patterns:
| Sector Preference | Typical Holdings | Signal |
|---|---|---|
| Consumer staples (Moutai, dairy) | 30-35% of holdings | Core allocation, low turnover |
| Financials (banks, insurance) | 15-20% | Cyclical allocation, rate-sensitive |
| Technology (semiconductors, software) | 10-15% | Growth allocation, high turnover |
| Healthcare (CXO, innovative pharma) | 8-12% | Structural growth bet |
| New energy (EV, solar) | 5-10% | Thematic, high volatility |
Sector rotation signal:
Why Southbound matters:
Southbound signal framework:
# Southbound focus areas
southbound_targets = {
"tech_platforms": ["0700.HK", "9988.HK", "3690.HK", "9618.HK"],
"high_dividend": ["0939.HK", "1398.HK", "0883.HK", "2628.HK"],
"ah_discount": [], # Dynamically calculated based on AH premium index
}
def southbound_signal(daily_net_buy_hkd_billion):
if daily_net_buy_hkd_billion > 5:
return "strong_mainland_buying"
elif daily_net_buy_hkd_billion > 2:
return "moderate_mainland_buying"
elif daily_net_buy_hkd_billion < -2:
return "mainland_selling"
else:
return "neutral"Southbound investment patterns:
The Hang Seng AH Premium Index (HSAHP) tracks the average premium of A-shares over their H-share counterparts for dual-listed companies.
# AH Premium interpretation
ah_premium_index = 130 # A-shares trade 30% above H-shares on average
if ah_premium_index > 140:
signal = "extreme_ah_premium"
action = "favor H-shares over A-shares for dual-listed names"
elif ah_premium_index > 125:
signal = "elevated_ah_premium"
action = "mild H-share preference"
elif ah_premium_index < 110:
signal = "compressed_ah_premium"
action = "A-shares relatively cheap vs H; unusual, investigate"
else:
signal = "normal_range"Multi-dimensional scoring:
connect_score = {
"northbound_flow": 0, # -2 to +2: 20-day cumulative NB flow direction
"northbound_breadth": 0, # -2 to +2: number of NB top-10 holdings being added to
"southbound_flow": 0, # -2 to +2: 20-day cumulative SB flow direction
"ah_premium": 0, # -2 to +2: AH premium level (high = favor HK)
"fx_direction": 0, # -2 to +2: CNY strength (strong CNY = NB inflow support)
}
# Total range: -10 to +10
# > +5: strong cross-border risk-on, favor A-shares
# +2 to +5: mild bullish
# -2 to +2: neutral / mixed
# < -2: cross-border risk-off, foreign selling A-shares
# < -5: strong risk-off, likely FX-drivenimport tushare as ts
pro = ts.pro_api()
# Daily Northbound/Southbound aggregate flows
df = pro.moneyflow_hsgt(start_date="20260101", end_date="20260330")
# Columns: trade_date, ggt_ss (Shanghai SB), ggt_sz (Shenzhen SB),
# hgt (Shanghai NB), sgt (Shenzhen NB), north_money, south_money
# Top 10 Northbound active stocks
df = pro.hsgt_top10(trade_date="20260328", market_type="1") # 1=Shanghai, 3=Shenzhen
# Columns: trade_date, ts_code, name, close, change, rank, market_type,
# amount (trade amount), net_amount (net buy), buy, sellimport yfinance as yf
# HK-listed stocks price data
tencent = yf.download("0700.HK", start="2025-01-01", end="2026-03-30", progress=False)
alibaba = yf.download("9988.HK", start="2025-01-01", end="2026-03-30", progress=False)
# AH Premium Index (proxy via Hang Seng indices)
hsi = yf.download("^HSI", start="2025-01-01", end="2026-03-30", progress=False)| Metric | Source | Frequency | Threshold |
|---|---|---|---|
| Northbound daily net buy | Tushare / HKEX | Daily | >RMB 5B = significant |
| Northbound 20-day cumulative | Calculated | Daily | >RMB 30B = trend |
| Southbound daily net buy | Tushare / HKEX | Daily | >HKD 3B = significant |
| AH Premium Index | Hang Seng | Daily | >130 = H-share value |
| Quota utilization | HKEX | Intraday | >50% = strong conviction |
| NB Top 10 concentration | Tushare | Daily | Top 3 names >50% = concentrated bet |
## Stock Connect Flow Analysis — [Date Range]
### Northbound (Foreign → A-shares)
- **20-day cumulative**: [+/- RMB X.XB]
- **5-day trend**: [accelerating / decelerating / reversing]
- **Daily average**: [RMB X.XB]
- **Quota utilization**: [X%]
- **Signal**: [sustained accumulation / distribution / neutral]
### Northbound Sector Allocation
- **Adding to**: [sector1 (top names), sector2]
- **Reducing**: [sector1, sector2]
- **Rotation direction**: [defensive / cyclical / growth]
### Southbound (Mainland → HK)
- **20-day cumulative**: [+/- HKD X.XB]
- **Focus names**: [Tencent, Alibaba, bank names]
- **Driver**: [dividend yield / tech allocation / AH arbitrage]
### AH Premium
- **Current index**: [XXX]
- **Historical percentile**: [X%]
- **Implication**: [favor H-shares / neutral / favor A-shares]
### Composite Signal
| Dimension | Score (-2~+2) | Basis |
|-----------|---------------|-------|
| NB flow | +1 | Cumulative +RMB 15B over 20 days |
| NB breadth | +2 | Adding across 8 of top 10 |
| SB flow | 0 | Flat |
| AH premium | -1 | AH premium at 135 (H relatively cheap) |
| FX | +1 | CNY stable/strengthening |
### Cross-Market Implication
- **A-share outlook**: [bullish / neutral / bearish] (NB perspective)
- **HK outlook**: [bullish / neutral / bearish] (SB + AH perspective)
- **Arbitrage**: [AH premium trade: buy H / sell A for dual-listed names]8643fcd
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.