首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用一套代码同时获取 A 股、美股、港股数据?

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

原创
作者头像
用户7083614
发布2026-09-06 09:02:12
发布2026-09-06 09:02:12
70
举报

一句话回答: 只要数据 API 用统一的标的代码格式统一的接口,跨市场就是换个后缀的事。AlphaFeed 用 {代码}.{交易所后缀} 统一表示 A 股、美股、港股,同一套 af.klines/af.quotes 代码即可通吃,只需额外注意时区、交易日和货币。

统一的标的代码

市场

后缀

示例

上交所

.SH

600519.SH(贵州茅台)

深交所

.SZ

000001.SZ(平安银行)

北交所

.BJ

920047.BJ

美股

.US

AAPL.US(苹果)

港股

.HK

00700.HK(腾讯)

一套代码取三个市场的 K 线

代码语言:python
复制
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)一次拿整个市场的实时快照:

代码语言:python
复制
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毫秒时间戳,本身与时区无关,但你在构造和展示时间时要小心:

代码语言:python
复制
import datetime, zoneinfo

# 用带时区的时间构造时间戳,避免本地时区歧义
tz_cn = zoneinfo.ZoneInfo("Asia/Shanghai")
start = int(datetime.datetime(2024, 1, 1, tzinfo=tz_cn).timestamp() * 1000)

2. 交易日历不同

三个市场的休市日不一样(美股有感恩节、独立日;A 股有春节、国庆长假)。跨市场对齐日期时,不要无脑向前/向后填充,否则会在某市场休市而另一市场交易的日子造出假数据。正确做法是按各自的实际交易日对齐,缺失就是缺失。

代码语言:python
复制
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 再决定口径。
代码语言:python
复制
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"]))   # 正常

跨市场批量下载

代码语言:python
复制
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 股、美股、港股。你真正要操心的,只剩时区、交易日历和货币这三件业务层面的事。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 统一的标的代码
  • 一套代码取三个市场的 K 线
  • 按市场批量取全量行情
  • 跨市场必须注意的三件事
    • 1. 时区
    • 2. 交易日历不同
    • 3. 货币单位
    • 4. 成交额字段的差异(实测坑)
  • 跨市场批量下载
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档