用一个API接口批量查询A股、港股、美股的K线数据

在实际开发中,我们经常需要从多个股票市场中获取行情数据,尤其是在构建交易所、量化交易系统或跨市场套利策略时,对接实时、多市场的行情接口几乎是刚需。然而,市面上大部分的行情服务产品只支持单一市场,比如只提供 A 股或美股数据;即便支持多个市场,也往往需要分别调用不同的接口,增加了开发成本和维护复杂度。

特别是对于K线数据的实时获取需求,不少接口要么延迟大、要么授权复杂、价格昂贵,真正能够同时支持 A 股、港股和美股,并能批量返回多只股票的实时K线数据的接口,可以说是少之又少。

在本文中,我们将使用Infoway的API接口,通过一次请求即可批量获取三大市场(A股、港股、美股)的K线行情。这种接口特别适合用于:

  • 构建支持多市场的交易终端交易所
  • 搭建量化交易系统(如 CTA、择时、套利等)
  • 实时监控跨市场价格波动与机会

批量获取K线

我们可以在一个HTTP请求中查询A股、港股、和美股的K线: 

package org.example.ws;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpExample {
    public static void main(String[] args) {
        try {
            // 定义请求URL,包含A股、港股、美股代码
            String apiUrl = "https://data.infoway.io/stock/batch_kline/1/10/000001.SZ%2C0700.HK%2CAMZN.US";
            URL url = new URL(apiUrl);

            // 创建HTTP连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为GET
            connection.setRequestMethod("GET");

            // 设置请求头
            connection.setRequestProperty("User-Agent", "Mozilla/5.0");
            connection.setRequestProperty("Accept", "application/json");

            // 先在官网 https://infoway.io 申请免费API Key
            connection.setRequestProperty("apiKey", "yourApikey");

            // 获取响应码
            int responseCode = connection.getResponseCode();
            System.out.println("HTTP code: " + responseCode);

            // 读取响应内容
            BufferedReader reader;
            if (responseCode == HttpURLConnection.HTTP_OK) {
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            } else {
                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
            }

            String line;
            StringBuilder response = new StringBuilder();

            while ((line = reader.readLine()) != null) {
                response.append(line);
            }

            reader.close();

            // 打印响应内容
            System.out.println("message: " + response);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

返回示例

[
    {
        "s": "000001.SZ",        // 平安银行 A股
        "o": "11.23",
        "h": "11.28",
        "l": "11.22",
        "c": "11.25",
        "pca": "0.02",
        "pfr": "0.18%",
        "v": "258400",
        "vw": "11.2458",
        "t": 1747550648097,
        "ty": 1
    },
    {
        "s": "0700.HK",          // 腾讯控股 港股
        "o": "385.50",
        "h": "386.90",
        "l": "383.20",
        "c": "384.10",
        "pca": "-1.40",
        "pfr": "-0.36%",
        "v": "923400",
        "vw": "384.93",
        "t": 1747550648097,
        "ty": 1
    },
    {
        "s": "AMZN.US",          // 亚马逊 美股
        "o": "185.10",
        "h": "186.75",
        "l": "183.60",
        "c": "185.90",
        "pca": "0.80",
        "pfr": "0.43%",
        "v": "456200",
        "vw": "185.42",
        "t": 1747550648097,
        "ty": 1
    }
]

以上是HTTP请求的代码示例,如果你的使用场景对延时特别敏感,还是建议使用Websocket来订阅数据,这样能大大降低延时。具体的实现方法可以看官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值