如何用一套代码同时获取 A 股、美股、港股数据?

用户头像sh_*2176oo
2026-09-07 发布

一句话回答: 只要数据 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(成交量)三市场都正常。因此:

  • 需要“成交额”做流动性筛选时,美股/港股请改用 volumelast_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 股、美股、港股。你真正要操心的,只剩时区、交易日历和货币这三件业务层面的事。

参考

评论