外汇数据查询:日线历史查询接入点实战(OHLC 与 30 天窗口)
# 外汇数据查询:日线历史查询接入点实战(OHLC 与 30 天窗口)
> 接入点:日线历史查询(1683-2) · 免费 · POST/GET · 返回 JSON · 适用:金融分析、投资者 · 阅读时间:7 分钟
## TL;DR
- 1683-2 返回指定货币对的**日 K 线历史**,每条含 `open/high/low/close` 与日期。
- 三个必填参数:`code`(来自热门列表)、`begin`、`end`,格式 `yyyyMMdd`,**区间不超过 30 天**。
- 更新频率:每天上午 4 点更新昨天的日 K;**节假日无数据**(返回可能为空)。
## Why:日线历史能解决什么问题
做趋势分析、回测、画 K 线图,第一步就是拿到规整的日频 OHLC。1683-2 直接给你结构化数组,省去自己爬网页。注意它是历史数据接口,不是实时行情,定位在「学习分析」。
## What:接口速览
| 项 | 说明 |
|----|------|
| 接口地址 | `https://route.showapi.com/1683-2?appKey={your_appKey}` |
| 必填参数 | `code`(String, 如 `USDCNY`,取自热门列表)、`begin`(yyyyMMdd)、`end`(yyyyMMdd, ≤30天) |
| 返回核心 | `list: [{date, open, high, low, close, code, forexName, time}]`、`size`、`remark` |
| 更新频率 | 每天上午 4 点更新昨天日 K(节假日无数据) |
| 数据性质 | 延迟数据,仅供学习分析,不得用于对外展示 |
## How:查询最近 10 天日线(Python)
```python
import requests, datetime
def daily_history(code: str, days: int, appkey: str) -> list:
end = datetime.date.today() - datetime.timedelta(days=1) # 昨天
begin = end - datetime.timedelta(days=days - 1)
payload = {
"appKey": appkey,
"code": code,
"begin": begin.strftime("%Y%m%d"),
"end": end.strftime("%Y%m%d"),
}
r = requests.post("https://route.showapi.com/1683-2", data=payload, timeout=10)
data = r.json()
if data.get("showapi_res_code") != 0:
raise RuntimeError(data.get("showapi_res_error"))
body = data["showapi_res_body"]
if str(body.get("ret_code")) != "0":
raise RuntimeError(f"ret_code={body.get('ret_code')}")
return body["list"]
rows = daily_history("USDCNY", 10, "YOUR_APPKEY")
for row in rows:
print(row["date"], "收:", row["close"], "高:", row["high"], "低:", row["low"])
```
**cURL**
```bash
curl -X POST "https://route.showapi.com/1683-2?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "code=USDCNY&begin=20250120&end=20250201"
```
**Node.js(fetch)**
```javascript
const body = new URLSearchParams({
appKey: "YOUR_APPKEY", code: "USDCNY",
begin: "20250120", end: "20250201"
});
const resp = await fetch("https://route.showapi.com/1683-2",
{ method: "POST", body, signal: AbortSignal.timeout(10000) });
const data = await resp.json();
console.log(data.showapi_res_body.list.length, "条日线");
```
## 返回示例(节选)
```json
{
"showapi_res_body": {
"ret_code": 0, "remark": "查询成功!", "size": "10",
"list": [
{ "date": "2025-01-31", "open": "7.2507", "high": "7.2507",
"low": "7.2424", "close": "7.2507", "code": "USDCNY",
"forexName": "美元兑人民币", "time": 1738252800000 }
]
}
}
```
## 进阶 / 边界
- **30 天上限**:`end-begin` 不能超过 30 天,要更长历史请分段循环请求再拼接。
- **节假日空数据**:法定节假日无日 K,列表可能变短甚至为空,前端绘制前要判空。
- **价格是字符串**:计算涨跌幅前先 `float(close)`。
## FAQ
**Q1:为什么今天查不到今天的 K 线?**
A:日线每天上午 4 点才更新「昨天」的数据,且节假日不更新,请用历史日期区间。
**Q2:一次最多能查多少天?**
A:文档明确区间不超过 30 天;更长需分段。
**Q3:time 时间戳怎么用?**
A:13 位毫秒,可用于排序或转本地时间;`date` 字段已是人易读的 `yyyy-MM-dd`。
**Q4:返回的 close 能当今日汇率展示吗?**
A:不能,这是历史收盘价且为延迟数据,仅供学习分析。
## 下一步阅读
- [外汇数据查询:历史分钟K线查询接入点实战](https://www.showapi.com/guides/forex-minute-kline-1683)
- [汇率走势可视化:用日线/分钟K线数据画图](https://www.showapi.com/guides/forex-visualization-1683)
- [免费档位限制下:如何设计缓存策略节省调用次数](https://www.showapi.com/guides/forex-cache-cost-1683)
- **本系列共 13 篇**:查看[外汇数据查询指南总目录](https://www.showapi.com/guides/forex-guides-1683)