参考

K 线返回字段速查

K 线返回 8 个字段:date、open、last、high、low、volume、amount、turnover。两个最容易踩的点:收盘价字段叫 last 不叫 close;所有数值都是字符串,不是数字。

返回长什么样

GET /v1/kline?code=sh600519&count=2 的真实返回:

{
  "ok": true,
  "endpoint": "kline",
  "tier": "free",
  "elapsed_ms": 701,
  "source": "multi",
  "data": [
    { "date": "2026-09-30", "open": "1239.53", "last": "1258.62", "high": "1268",
      "low": "1236.05", "volume": "38331", "amount": "4797250000", "turnover": "0.31" }
  ]
}

外层 5 个字段是每个端点都一样的:ok 是否成功、endpoint 端点名、tier 当前档位、elapsed_ms 耗时、source 数据来源。要取的行情数据都在 data 数组里。

八个字段各是什么

字段 含义 单位 / 格式
date 交易日 YYYY-MM-DD
open 开盘价 元
last 收盘价 元
high 最高价 元
low 最低价 元
volume 成交量 手
amount 成交额 元
turnover 换手率 百分比数值(0.31 = 0.31%)

两个最容易踩的坑

收盘价字段为什么叫 last 不叫 close?

因为同一个字段在盘中代表最新价、收盘后代表收盘价 —— 一个名字覆盖两种含义,不用按时间切换字段名。所以如果你在迁代码,映射关系是 close → last,不是 close → close。

数值为什么是字符串?

"1258.62" 是字符串,不是数字。这样设计是为了不丢精度 —— 浮点数在跨语言传递时会出现 1258.6200000000001 这类误差,而金额和价格对精度敏感。取值时自己转:

import requests

r = requests.get("https://api.ashareapi.com/v1/kline",
                 params={"code": "sh600519", "count": 250}).json()

for row in r["data"]:
    close = float(row["last"])      # 字符串 → float
    amount = float(row["amount"])

常见误用

  • 拿 volume 当股数 —— 它是手(1 手 = 100 股),要股数得乘 100。
  • 拿 turnover 当小数 —— 0.31 表示 0.31%,不是 31%。
  • 不判 ok 就取 data —— 失败时 data 可能为空或缺席,先看 ok。
  • 忘了 K 线没有 adjust 参数 —— 复权口径是固定的,不需要也不接受这个参数。

最后更新: 2026-10-05

字段与示例取自 2026-10-05 线上真实返回(/v1/kline?code=sh600519&count=2)。