AllTick
-
港股 股票市场数据历史市场数据金融数据 apiK 线数据

港股api能获取历史K线吗?日线、分钟线和历史数据解析

了解如何通过港股 API 获取历史 K 线数据,涵盖日线、分钟线、接口查询限制、历史数据范围及行情数据管理方法。

AllTick阅读 5 分钟

开发港股行情页面时,获取最新价格通常只是第一步。要让用户查看过去几个月的走势,或者切换到 1 分钟、5 分钟等周期观察盘中变化,还需要解决历史 K 线的获取和存储问题。

因此,选择港股 API 时,不能只看接口是否支持 K 线,还要确认支持哪些周期、单次能获取多少根,以及能否查询指定日期以前的数据。

港股 API 可以获取历史 K 线,但日线和分钟线的覆盖范围并不相同,单次查询数量与历史回溯方式也有明确限制。 如果项目需要多年历史数据,尤其是用于量化回测,应该在开发前确认这些边界。

港股API支持哪些历史K线周期

日线和分钟线适合不同的行情场景。日线常用于观察中长期走势、计算均线等指标;分钟线则更适合盘中行情图表和短周期分析。

AllTick 股票 K 线接口支持以下周期:

K 线周期参数值常见用途
1 分钟1盘中价格变化
5 分钟2短周期行情观察
15 分钟3盘中趋势分析
30 分钟4较长周期盘中图表
1 小时5小时级趋势分析
日线8日常行情与趋势分析
周线9中长期走势
月线10长周期行情分析

港股属于股票数据,支持的最短周期为 1 分钟,不支持 2 小时和 4 小时 K 线。单产品 K 线接口每次最多返回 500 根数据。

实际开发时,可以根据图表的默认展示需求决定首次加载的周期。例如,股票详情页默认显示日线,用户切换到分钟图时再请求对应周期,避免页面初始化时加载暂时用不到的数据。

使用港股API获取历史K线

以腾讯控股 700.HK 为例。假设行情页面需要展示最近 200 根日线,可以调用 AllTick 股票 K 线接口。

请求使用 X-API-Key Header 进行身份认证,查询参数放在接口路径的 queryData 中。Python 示例:

text
import os
import json
import uuid
import requests
from decimal import Decimal
from urllib.parse import quote

api_key = os.environ.get("ALLTICK_API_KEY")

if not api_key:
    raise RuntimeError("Missing ALLTICK_API_KEY")

query_data = {
    "trace": str(uuid.uuid4()),
    "data": {
        "code": "700.HK",
        "kline_type": 8,
        "kline_timestamp_end": 0,
        "query_kline_num": 200,
        "adjust_type": 0
    }
}

base_url = (
    "https://quote.alltick.co/"
    "quote-stock-b-api/v1/kline/"
)

encoded_query = quote(
    json.dumps(query_data, separators=(",", ":")),
    safe=""
)

response = requests.get(
    base_url + encoded_query,
    headers={"X-API-Key": api_key},
    timeout=15
)

response.raise_for_status()
result = response.json()

if result.get("ret") != 200:
    raise RuntimeError(
        f"AllTick API error: {result.get('msg')}"
    )

raw_klines = result.get("data", {}).get("kline_list")

if not isinstance(raw_klines, list):
    raise RuntimeError("Invalid K-line response")

bars = []
seen_timestamps = set()

for item in raw_klines:
    timestamp = int(item["timestamp"])

    if timestamp in seen_timestamps:
        raise RuntimeError(
            f"Duplicate K-line timestamp: {timestamp}"
        )

    seen_timestamps.add(timestamp)

    bars.append({
        "timestamp": timestamp,
        "open": Decimal(item["open_price"]),
        "high": Decimal(item["high_price"]),
        "low": Decimal(item["low_price"]),
        "close": Decimal(item["close_price"]),
        "volume": Decimal(item["volume"]),
        "turnover": Decimal(item["turnover"])
    })

bars.sort(key=lambda item: item["timestamp"])

print(bars)

几个参数直接决定了查询结果:

  • code:股票代码。示例中的 700.HK 对应腾讯控股。
  • kline_type:K 线周期。8 表示日线,1 表示 1 分钟线。
  • kline_timestamp_end:查询结束位置。传入 0 表示从最新可用交易周期开始查询。
  • query_kline_num:请求的 K 线数量,单次最多 500 根。
  • adjust_type:股票复权参数。当前接口文档列出的可用取值为 0,不要自行将其他取值当作已支持的复权方式。

返回结果中的 kline_list 包含时间戳、开盘价、最高价、最低价、收盘价、成交量和成交金额等字段。价格及成交数据可能以字符串形式返回,示例使用 Decimal 保留数值精度,避免直接使用二进制浮点数进行金融数据计算。

代码还检查了重复时间戳,并按时间先后排列数据。接入生产环境时,可以进一步将 code、K 线周期和时间戳作为数据记录的联合标识,避免多次同步时重复写入。

以上代码用于展示请求结构和基础数据处理逻辑,尚未使用实际 API Key 进行运行验证。

500根K线能覆盖多少港股历史行情

这是评估港股历史数据 API 时容易被忽略的限制。

500 根日线和 500 根 1 分钟线,代表的时间跨度完全不同。日线通常覆盖更长的交易区间,而分钟线的数据点会在交易时段内快速累积。因此,不能把接口最多返回 500 根理解为可以查询 500 天,也不能认为每种周期都能覆盖相同长度的历史行情。

还需要关注 kline_timestamp_end 的使用限制。AllTick 文档说明,传入 0 可以从最新交易周期向前查询;但通过指定历史时间戳作为查询边界的方式,并不适用于股票代码。也就是说,不能直接套用外汇或加密货币的时间戳分页逻辑,通过不断修改结束时间来获取更早的港股 K 线。

套餐的数据范围也需要分开理解。AllTick 综合套餐页面列出了不同的通用历史 K 线年限,同时对股票数据单独标注最近 500 根历史 K 线;All HK Stocks 全市场方案也标注最近 500 根历史 K 线,并覆盖约 3,000 个港股代码。

因此,不能仅根据套餐显示的通用历史年限,就认定某只港股的每种分钟周期都能回溯相同年限。实际可获取的数据还要结合股票代码、K 线周期和具体套餐确认。

如果项目需要多年港股历史行情,尤其是用于长期回测或研究,建议先明确目标股票、所需周期和起止日期,再确认数据是否覆盖需求。若接口不能按指定时间戳查询股票历史数据,就需要提前评估其他历史数据获取方式,而不是等到回测系统开发完成后再处理数据缺口。

港股分钟数据怎样减少重复请求

假设一个行情平台同时展示几十只港股,每只股票都需要日线和 1 分钟走势图。如果用户每次打开页面,系统都重新请求完整的历史 K 线,不仅会增加 API 调用量,也会重复传输已经保存的数据。

更合适的做法,是将历史数据初始化和最新数据更新分开处理:

-
-

这里涉及两个 K 线接口:

单产品 K 线接口 /v1/kline/{queryData}

用于查询单只股票的历史 K 线,单次最多返回 500 根。适合在用户打开股票详情页,或本地数据库缺少对应周期数据时进行初始化。

批量 K 线接口 /v1/batch-kline

支持一次请求多个产品和多个 K 线周期,但每个产品的每种周期最多返回最新 2 根。它更适合定期获取最新 K 线并更新本地记录,不能代替单产品历史 K 线查询。

还需要注意,AllTick WebSocket 不支持 K 线推送。若应用需要实时成交价、Tick 或盘口数据,应根据对应接口能力接入,不能把实时行情推送等同于 K 线推送。

对于同时监控多只港股的系统,可以先按需获取历史数据并存入数据库,再通过批量 K 线接口更新最新记录。写入时使用股票代码、周期和时间戳进行去重,能够减少重复保存,也方便后续检查数据是否连续。

检查港股历史K线的数据完整性

接口返回数据后,还需要判断这些 K 线是否符合应用的使用要求。尤其是分钟线,不能只根据时间戳是否连续来判断数据有没有缺失。

港股交易存在正常的非连续时段,例如午间休市、周末、公众假期以及个别股票停牌。上述时段没有对应的分钟 K 线,并不一定代表数据源出现问题。

比较可靠的检查方式,是先建立交易日历,再根据目标股票的交易状态和对应周期,生成预期的 K 线时间点。只有在预期应当有数据的时段内,实际数据仍然缺少对应时间点,才应该进一步排查是否存在数据缺口。

同时,建议检查以下几项:

  • 时间戳:确认使用统一的时间标准存储,展示时再转换为香港时区,避免时区处理不一致造成 K 线错位。
  • 重复记录:以股票代码、周期和时间戳作为联合标识,避免重复请求后产生重复数据。
  • 价格字段:检查 OHLC 数值能否正常解析,并确认最高价不低于开盘价、收盘价和最低价不高于开盘价、收盘价等基本关系。
  • 成交字段:确认成交量和成交金额能够正确解析,不要将缺失值直接当成真实的零成交。
  • 历史范围:记录每只股票实际获取到的最早和最新时间戳,避免把接口返回数量误认为完整历史覆盖范围。

对港股行情应用而言,历史 K 线不仅用于图表展示,也可能进入指标计算、统计分析和回测流程。前期做好时间戳、重复记录和交易时段检查,可以减少后续排查成本。

对于需要接入较多港股代码的项目,AllTick 提供覆盖约 3,000 个港股代码的 All HK Stocks 方案,并列出最近 500 根历史 K 线及其他行情数据能力。开发者可以结合标的数量、历史数据需求和实时更新频率评估是否适用。

如果正在开发港股行情图表、股票监控工具或历史行情分析系统,可以从 AllTick 港股行情数据接入入口 了解接入方式。正式开发前,建议先用目标股票和目标周期验证实际返回的数据范围,再决定数据存储和历史行情管理方案。

立即开始接入市场数据

几秒内生成免费 API 密钥,通过一个端点连接所有市场。