做A股量化的人大概都经历过这种尴尬:策略在A股跑得好好的,想加上港股和美股做一点全球配置,结果发现行情数据这块先卡住了。国内免费接口对A股支持很完善,但一碰到港股、美股,要么返回字段对不上,要么接口根本覆盖不到;用国外聚合数据服务又得注册、配Key、研究限额,再加上两个市场的交易时间完全错开,数据到底什么时候算"新鲜"都是个问题。上个月我刚好要把手里的策略从A股扩展到港美股,顺手把这条链路完整趟了一遍——从数据源选型、统一封装、交易时段判断到历史K线,最终写了一套同时拉取港股和美股行情的接口。这篇文章就把整个思路和过程中的坑整理出来,给同样在研究股市api接口如何同时获取港股和美股行情的朋友一份可以直接上手的方案。
1. 港股和美股的数据差异:先搞清楚你到底要兼容什么
写代码之前,先把两个市场的"业务规则"梳理清楚,这一节花的半小时能帮你后面少调两天的bug。很多人一上来就找API,结果拿到数据之后发现时间对不上、价格单位不对、盘口字段含义不同,再回头补课就晚了。
1.1 交易时段与时区:两个市场的"时差"决定了数据新鲜度
港股和美股最关键的区别是交易时间。港股是北京时间周一至周五早市9:30到12:00、午市13:00到16:00,中间有一个半小时午休;美股则是美东时间9:30到16:00,换算成北京时间要分夏令时和冬令时两种情况:夏令时是21:30到次日04:00,冬令时是22:30到次日05:00。
这个差异直接影响你写数据拉取任务的方式。如果任务挂在服务器上按"每天固定时间"运行,你就得处理三个不同市场的开关时间。更麻烦的是节假日体系完全不一样:A股休市的时候港股和美股可能正常交易,美股感恩节期间还有提前收盘的特殊安排,港股和A股同时休市的时间较多但也不完全同步。所以在设计接口时,不能默认"现在是交易时间",必须给每个市场单独维护一套交易日历和状态判断。
1.2 代码体系、货币和涨跌规则:数据格式上就分叉了
行情接口要同时兼容两个市场,代码规则是第一道坎。港股通常用5位数字代码,比如腾讯控股是00700;美股用字母代码,苹果是AAPL,带特殊字符的代码如伯克希尔B类股是BRK.B,在URL里这个点号还需要转义或者换成短横线。同一家公司在不同市场还有不同代码,比如阿里巴巴在港股是09988,在美股是BABA。
货币和报价单位也不一样,港股以港币计价,美股以美元计价。如果你的下游需要汇总两个市场的持仓市值,就必须额外引入汇率数据,否则算出来的组合净值在汇率波动大的时候会和真实值差很多。涨跌规则同样不同:港股没有传统意义的涨跌停板,只有针对恒指成分股的市场波动调节机制;美股主要靠个股熔断机制限制极端下跌,1美元以上的股票最小变动价位是0.01美元。这些规则导致如果你用A股的"超过昨收价±10%就告警"逻辑去覆盖港美股,会出现大量误报或漏报。
所以说,同时获取港股和美股行情,本质不是"发起两个HTTP请求再把结果拼在一起",而是要在数据层之上做一次语义统一。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 行情数据源选型:免费接口、数据服务、券商API的取舍
这个标题下的问题,第一个要面对的就是"用谁家的数据"。市面上靠谱的方案有三类:免费网页接口、海外聚合数据服务、券商开放平台。我逐个试过之后,说下它们各自的定位和适用场景。
2.1 腾讯和新浪的免费接口方案
腾讯财经和新浪财经都有公开的行情接口,这应该是个人开发者上手最快的方式。腾讯的实时行情接口https://qt.gtimg.cn/q=...支持一次批量请求多个股票,港股和美股都覆盖,新浪的https://hq.sinajs.cn/list=...同样可以。响应速度比A股一些第三方接口还快,个人做原型验证或者自用工具完全足够。
但免费接口有几个前提要认清楚:第一,接口协议不是正式对外发布的SDK,没有技术支持,字段索引可能随页面改版变化;第二,有隐藏的请求频率限制,并发拉多了会被网关短暂拒绝;第三,返回的字段语义需要自己摸索,不同市场的字段数量会错位。我的定位是:免费接口适合做"实时行情主数据源",但不适合做需要精确回放历史数据的场景。
2.2 海外聚合数据服务的定位
海外服务像Twelve Data、Alpha Vantage、Polygon.io,对美股的覆盖很全面,港股也能拿到日线和分钟线。这类服务的好处是有规范文档、有API Key配额、历史数据完整,缺点是免费额度有限制,比如Twelve Data免费版通常限制每分钟8次请求,Alpha Vantage是每天25次到500次不等,做实时盯盘不够用,做每日收盘后的批量同步倒是很合适。
我目前实践下来的组合是:盘中实时报价走腾讯免费接口,收盘后历史K线
