一句话回答: 只要数据 API 用统一的标的代码格式和统一的接口,跨市场就是换个后缀的事。AlphaFeed 用 {代码}.{交易所后缀} 统一表示 A 股、美股、港股,同一套 af.klines/af.quotes 代码即可通吃,只需额外注意时区、交易日和货币。
统一的标的代码
| 市场 | 后缀 | 示例 |
|---|---|---|
| 上交所 | .SH |
600519.SH(贵州茅台) |
| 深交所 | .SZ |
000001.SZ(平安银行) |
| 北交所 | .BJ |
920047.BJ |
| 美股 | .US |
AAPL.US(苹果) |
| 港股 | .HK |
00700.HK(腾讯) |
一套代码取三个市场的 K 线
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
targets = {
"A股-贵州茅台": "600519.SH",
"美股-苹果": "AAPL.US",
"港股-腾讯": "00700.HK",
}
for label, symbol in targets.items():
df = af.klines.get(symbol, period="1d", count=5, to_dataframe=True)
print(f"\n=== {label} ({symbol}) ===")
print(df[["trade_date", "open", "close", "volume"]].to_string(index=False))
同一个 af.klines.get,换个后缀就切换市场——不需要为每个市场学一套 API。
按市场批量取全量行情
用标的池(universes)一次拿整个市场的实时快照:
cn = af.quotes.get(universes="CN_Stock", to_dataframe=True) # A股
us = af.quotes.get(universes="US_Stock", to_dataframe=True) # 美股
hk = af.quotes.get(universes="HK_Stock", to_dataframe=True) # 港股
etf = af.quotes.get(universes="CN_ETF", to_dataframe=True) # A股ETF
print(f"A股 {len(cn)} 只 | 美股 {len(us)} 只 | 港股 {len(hk)} 只")
| 标的池 ID | 说明 |
|---|---|
CN_Stock |
A 股(沪深京) |
CN_ETF |
A 股 ETF |
US_Stock |
美股 |
HK_Stock |
港股 |
标的池查询需要对应市场的 Starter 及以上订阅;不同市场可分别订阅。
跨市场必须注意的三件事
1. 时区
- A 股 / 港股:北京时间(UTC+8);
- 美股:美东时间(UTC-5 / 夏令时 UTC-4),与北京相差 12~13 小时。
K 线接口的 start_time/end_time 用毫秒时间戳,本身与时区无关,但你在构造和展示时间时要小心:
import datetime, zoneinfo
# 用带时区的时间构造时间戳,避免本地时区歧义
tz_cn = zoneinfo.ZoneInfo("Asia/Shanghai")
start = int(datetime.datetime(2024, 1, 1, tzinfo=tz_cn).timestamp() * 1000)
2. 交易日历不同
三个市场的休市日不一样(美股有感恩节、独立日;A 股有春节、国庆长假)。跨市场对齐日期时,不要无脑向前/向后填充,否则会在某市场休市而另一市场交易的日子造出假数据。正确做法是按各自的实际交易日对齐,缺失就是缺失。
import pandas as pd
a = af.klines.get("600519.SH", count=250, to_dataframe=True)[["trade_date", "close"]]
u = af.klines.get("AAPL.US", count=250, to_dataframe=True)[["trade_date", "close"]]
merged = pd.merge(a, u, on="trade_date", how="inner", suffixes=("_cn", "_us"))
# inner join 只保留两市场都开盘的交易日,避免伪造数据
3. 货币单位
A 股以人民币计价,美股以美元、港股以港币计价。跨市场比较收益率没问题(收益率是无量纲的),但比较绝对价格或做组合市值加总时,需要自己按汇率换算。
4. 成交额字段的差异(实测坑)
实测中,A 股 K 线带真实成交额 amount,而美股/港股 K 线的 amount 返回 0.0(未提供该字段),但 volume(成交量)三市场都正常。因此:
- 需要“成交额”做流动性筛选时,美股/港股请改用
volume或last_price × volume估算,不要直接用amount; - 写跨市场通用逻辑时,先判断
amount是否为 0 再决定口径。
k = af.klines.get("AAPL.US", period="1d", count=3, to_dataframe=True)
print(list(k["amount"])) # [0.0, 0.0, 0.0] —— 美股/港股 amount 不可用
print(list(k["volume"])) # 正常
跨市场批量下载
symbols = ["600519.SH", "000001.SZ", "AAPL.US", "MSFT.US", "00700.HK"]
dfs = af.klines.batch(symbols, period="1d", count=250, adjust="forward",
to_dataframe=True, show_progress=True)
for sym, df in dfs.items():
print(f"{sym}: {len(df)} 根 K 线")
常见问题(FAQ)
Q:三个市场都支持分钟线吗?
A:日/周/月线三市场都支持;分钟级(含日内分时)主要支持 A 股。
Q:美股/港股要单独付费吗?
A:不同市场分别订阅,可按需组合。详见 定价页。
Q:港股代码要补零吗?
A:按示例格式,如腾讯为 00700.HK,保持交易所标准代码位数。
Q:跨市场收益率能直接比吗?
A:能,收益率无量纲;但绝对价格、市值需按汇率换算后再比。
小结
跨市场数据的复杂度,绝大部分来自"每个数据源一套 API、一套代码格式"。AlphaFeed 用统一的 {代码}.{后缀} 和统一接口把这层复杂度抹平,一套 Python 代码就能覆盖 A 股、美股、港股。你真正要操心的,只剩时区、交易日历和货币这三件业务层面的事。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart

