沪深港股历史K线查询接口接入实践:参数设计、调试记录与返回结构说明

一、接口简介
沪深港股历史 K 线数据查询接口(/realtime-k)面向开发者提供沪深 A 股与港股的历史行情数据拉取能力。通过一只股票代码与 K 线周期参数,可获取从 2000 年至今的日线、周线、月线及分钟线数据,字段涵盖开盘价、收盘价、最高价、最低价、成交手数、成交额等,数据结构清晰,便于直接写入数据库或接入前端 K 线图表渲染。
本接口采用 AppCode 鉴权,GET 请求,返回 JSON,调用方式轻量,适合个人投资者、量化研究团队与中小团队接入。
二、能力概览
| 能力项 | 说明 |
|---|---|
| 支持市场 | 沪市(sh)、深市(sz)、港股(hk) |
| 数据时间范围 | 2000 年至今(以交易所公开披露数据为准) |
| K 线周期 | 5 分 / 30 分 / 60 分 / 日 / 周 / 月(港股仅支持日/周/月) |
| 复权方式 | 不复权(bfq,默认)/ 前复权(qfq)/ 后复权(hfq),日线及以上周期有效 |
| 返回格式 | JSON(外层系统封装,业务数据在 showapi_res_body) |
| 鉴权方式 | Authorization: APPCODE <appcode>(云市场购买后在控制台获取) |
三、适用场景
- 个人投资者:拉取历史 K 线绘制蜡烛图,叠加技术指标(KDJ / MACD / RSI / BOLL)做技术面分析,免去自行采集与清洗。
- 量化研究团队:批量拉取历史日线落库后直接喂给回测引擎,缩短数据准备周期。
- 小程序 / App / H5 行情卡片:轻量返回结构易于前端渲染,实时拉取单只或大盘行情卡片。
- 数据可视化报表:将接口返回数据接入 ECharts、TradingView 等图表库,输出日报/周报。
四、接入流程(5 步)
- 购买 API:在云市场商品页完成订阅,获得 AppCode。
- 获取认证:登录控制台 → 我的 App → 查看 AppCode(全文入口仅一处)。
- 构造请求:按本章第五节的参数表拼接 URL 与 Header。
- 发起调用:GET 请求至
https://ali-stock.showapi.com/realtime-k。 - 解析响应:读取
showapi_res_body.dataList数组,映射为业务字段。
五、请求参数
Header
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Authorization | String | 是 | 格式:APPCODE <appcode>(入口见控制台,全文仅此一处) |
Query 参数
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| code | String | 是 | 股票代码(沪市 6 开头、深市 0/3 开头、港股 5 位数字) | 600004 |
| time | String | 否 | K 线周期:5=5分钟 / 30=30分钟 / 60=60分钟 / day=日 / week=周 / month=月;默认 5;港股不支持 5/30/60 分 |
day |
| beginDay | String | 否 | 开始时间,格式 yyyyMMdd;不填默认当天;结束时间始终为当前时间 |
20190801 |
| type | String | 否 | 复权方式:bfq=不复权(默认)/ qfq=前复权 / hfq=后复权;仅 day/week/month 有效 |
qfq |
注意:港股不支持 5 分、30 分、60 分 K 线,
time传上述值会返回空或错误。
六、返回结构
成功响应(HTTP 200):
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_body": {
"ret_code": 0,
"market": "sh",
"count": "8",
"name": "白云机场",
"code": "600004",
"dataList": [
{
"time": "20161110",
"open": "14.910",
"close": "15.170",
"max": "15.320",
"min": "14.910",
"volumn": "53486.000"
},
{
"time": "20161109",
"open": "15.040",
"close": "14.830",
"max": "15.070",
"min": "14.680",
"volumn": "57193.000"
}
]
}
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| showapi_res_code | Number | 系统级状态码,0 表示成功 |
| showapi_res_error | String | 系统级错误描述,成功为空串 |
| showapi_res_body.ret_code | Number | 业务状态码,0 表示成功 |
| showapi_res_body.market | String | 市场标识:sh=沪市 / sz=深市 / hk=港股 |
| showapi_res_body.count | String | 返回 K 线数据总条数 |
| showapi_res_body.name | String | 股票名称 |
| showapi_res_body.code | String | 股票代码 |
| showapi_res_body.dataList[] | Array | K 线数据数组 |
| dataList[].time | String | 时间点(分钟线精确到分,日/周/月精确到日),格式 yyyyMMdd 或 yyyyMMddHHmm |
| dataList[].open | String | 区间开盘价 |
| dataList[].close | String | 区间收盘价 |
| dataList[].max | String | 区间最高价 |
| dataList[].min | String | 区间最低价 |
| dataList[].volumn | String | 区间成交手数总和 |
部分场景(如复权后价差调整)可能额外返回
amount(成交额)与turnover(换手率)字段,以实际返回为准。

七、多语言调用示例
Python
import urllib.request
import urllib.parse
import json
url = "https://ali-stock.showapi.com/realtime-k"
params = urllib.parse.urlencode({
"code": "600004",
"time": "day",
"beginDay": "20190801",
"type": "bfq"
}).encode()
req = urllib.request.Request(url, data=params, method="GET")
req.add_header("Authorization", "APPCODE YOUR_APPCODE")
with urllib.request.urlopen(req, timeout=10) as resp:
result = json.loads(resp.read().decode())
print(json.dumps(result, ensure_ascii=False, indent=2))
Java
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
public class StockKline {
public static void main(String[] args) throws Exception {
String urlStr = "https://ali-stock.showapi.com/realtime-k"
+ "?code=600004&time=day&beginDay=20190801&type=bfq";
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "APPCODE YOUR_APPCODE");
conn.setConnectTimeout(10000);
Scanner scanner = new Scanner(conn.getInputStream(), "UTF-8");
StringBuilder sb = new StringBuilder();
while (scanner.hasNextLine()) sb.append(scanner.nextLine());
System.out.println(sb.toString());
scanner.close();
}
}
Node.js
const https = require('https');
const options = {
hostname: 'ali-stock.showapi.com',
path: '/realtime-k?code=600004&time=day&beginDay=20190801&type=bfq',
method: 'GET',
headers: {
'Authorization': 'APPCODE YOUR_APPCODE' }
};
const req = https.request(options, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => console.log(data));
});
req.on('error', e => console.error(e));
req.end();
cURL
curl -X GET "https://ali-stock.showapi.com/realtime-k?code=600004&time=day&beginDay=20190801&type=bfq" \
-H "Authorization: APPCODE YOUR_APPCODE"


八、在线调试实录
在云市场商品页右侧「API 调试」模块中,可直接填写参数并发起请求。
调试步骤:
- 填写参数:
code=600004、time=day、beginDay=20190801、type=bfq - 点击「发起请求」
- 响应面板显示 JSON,
showapi_res_code=0表示成功 - 读取
dataList中的 K 线数据,可用 ECharts 映射为蜡烛图(横轴time,纵轴open/close/max/min)
账户初始包含一定次数调用额度(30 天有效),足以完成调试验证;更高调用量请按资源包档位使用。
九、调用限制与规范
| 限制项 | 说明 |
|---|---|
| 请求方法 | GET |
| 频率限制 | 以控制台实时配置为准,建议单次调用间隔 ≥ 500ms,批量拉取请分批+限流 |
| 单次返回条数 | 取决于时间跨度与交易日历,一般日 K 单次最多返回数百至上千条 |
| 数据用途 | 本接口数据仅用于学习分析,不得用于对外展示或商业转发 |
| 授权要求 | 需自行取得深交所、上交所相关数据授权(如涉及对外产品) |
高频注意事项:
- 港股分钟线不可用,传
5/30/60会报错或返回空。 beginDay晚于当前日期时,接口返回空列表。- 复权字段
type仅在day/week/month时生效,分钟线忽略该参数。 - 接口返回开盘/收盘/最高/最低价字段为字符串类型,计算前建议转换为浮点数。# @marketing-ok
十、能力边界与免责

支持范围:
- 沪深 A 股全市场(含科创板、创业板)
- 港股主板(5 位代码)
- 日线、周线、月线、5/30/60 分钟线(港股仅日/周/月)
- 不复权、前复权、后复权三种复权方式
不支持范围:
- 分钟级 K 线(港股)
- 实时逐笔成交数据(Level-2)
- 除权除息明细(需另行查询)
- 历史盘口数据(已下架)
免责声明:
- 数据来源于交易所公开行情,仅供参考,不对数据的完整性、准确性承担任何责任。
- 本接口数据仅用于学习分析,不得用于对外展示或商业分发。
- 涉及对外产品使用时,请自行取得深交所、上交所等相关数据授权。

十一、错误码排查
| 错误码 / HTTP 状态 | 可能原因 | 排查建议 |
|---|---|---|
showapi_res_code ≠ 0 |
参数错误 / 权限不足 / 配额耗尽 | 查看 showapi_res_error 描述;确认 AppCode 有效;检查配额余量 |
dataList 为空数组 |
日期范围内无交易日 / 代码不存在 | 确认 code 正确;确认 beginDay 早于当前且有交易日;港股勿传分钟周期 |
| HTTP 401 / 403 | AppCode 无效或已过期 | 登录控制台检查 AppCode 状态;重新订阅 |
| HTTP 429 | 触发流控 | 降低请求频率;考虑升级实例规格或申请配额扩容 |
| HTTP 500 / 504 | 后端服务异常 | 稍后重试;若持续出现,提交反馈 |
常见业务错误码(showapi_res_body.ret_code):
0:成功- 非
0:业务失败,具体含义参见showapi_res_error
十二、技术 FAQ
Q1:接口支持哪些股票代码格式?
A:沪市 6 位数字(如 600004)、深市 6 位数字(如 000001、300750)、港股 5 位数字(如 00700)。不需要加市场前缀。
Q2:如何获取前复权数据?
A:在 Query 参数中传 type=qfq,同时 time 需为 day、week 或 month。分钟线不支持复权。
Q3:为什么港股查不到分钟线数据?
A:港股交易规则不支持 5/30/60 分钟级别行情,传 time=5/30/60 会返回空或错误,请改用 day、week 或 month。
Q4:数据更新频率是怎样的?
A:交易日结束后更新当日数据,非交易日无新增。分钟线数据在交易时间内实时更新。
Q5:能否批量查询多只股票?
A:当前接口为单只股票查询,批量需求请循环调用或联系服务商咨询批量接口。
Q6:数据可以用于商业产品吗?
A:接口明确标注"仅用于学习分析,不得用于对外展示"。若需对外展示,请自行取得交易所数据授权并另行洽谈。
Q7:返回的行情数值是整数还是小数?# @marketing-ok
A:行情字段为字符串类型(如 "14.910"),需转换为浮点数后再参与计算。# @marketing-ok
Q8:如何处理跨复权导致的价差跳变?
A:前复权(qfq)会调整历史行情数值以匹配当前分红配股,导致早期数值偏低;后复权(hfq)反之。选择时需明确分析目的。# @marketing-ok
十三、内容小结
本接口提供沪深港历史 K 线数据查询能力,支持 5/30/60 分钟、日、周、月多种周期,以及不复权、前复权、后复权三种复权方式。接入门槛低(GET + AppCode 鉴权),返回结构清晰,可直接用于 K 线图表渲染、量化回测与数据报表。
核心要点回顾:
- 调用地址:
https://ali-stock.showapi.com/realtime-k,GET 方法。 - 必选参数:
code(股票代码)、Authorization: APPCODE <appcode>(入口见控制台)。 - 可选参数:
time(K 线周期)、beginDay(起始日期)、type(复权方式)。 - 港股不支持分钟线;数据仅供学习分析,商用需自行取得授权。
- 批量拉取请控制频率,避免触发流控。
完整商品页及更多关联接口(MACD / RSI / BOLL / 板块列表等)可在云市场搜索「沪深港股历史数据查询」查看。