一句话回答: 只要数据 API 用统一的标的代码格式和统一的接口,跨市场就是换个后缀的事。AlphaFeed 用 {代码}.{交易所后缀} 统一表示 A 股、美股、港股,同一套 af.klines/af.quotes 代码即可通吃,只需额外注意时区、交易日和货币。
市场 | 后缀 | 示例 |
|---|---|---|
上交所 |
|
|
深交所 |
|
|
北交所 |
|
|
美股 |
|
|
港股 |
|
|
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 | 说明 |
|---|---|
| A 股(沪深京) |
| A 股 ETF |
| 美股 |
| 港股 |
标的池查询需要对应市场的 Starter 及以上订阅;不同市场可分别订阅。
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)三个市场的休市日不一样(美股有感恩节、独立日;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 只保留两市场都开盘的交易日,避免伪造数据A 股以人民币计价,美股以美元、港股以港币计价。跨市场比较收益率没问题(收益率是无量纲的),但比较绝对价格或做组合市值加总时,需要自己按汇率换算。
实测中,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 线")Q:三个市场都支持分钟线吗?
A:日/周/月线三市场都支持;分钟级(含日内分时)主要支持 A 股。
Q:美股/港股要单独付费吗?
A:不同市场分别订阅,可按需组合。详见 定价页。
Q:港股代码要补零吗?
A:按示例格式,如腾讯为 00700.HK,保持交易所标准代码位数。
Q:跨市场收益率能直接比吗?
A:能,收益率无量纲;但绝对价格、市值需按汇率换算后再比。
跨市场数据的复杂度,绝大部分来自"每个数据源一套 API、一套代码格式"。AlphaFeed 用统一的 {代码}.{后缀} 和统一接口把这层复杂度抹平,一套 Python 代码就能覆盖 A 股、美股、港股。你真正要操心的,只剩时区、交易日历和货币这三件业务层面的事。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。