# 用汇率数据做货币换算:客户端交叉汇率计算指南
> 接口级 · 免费 · 返回 JSON · 适用:跨境/旅行/商务场景 · 阅读时间:8 分钟
## TL;DR
- 外汇数据查询**没有「汇率转换」接口**(产品导航的「货币转换」标签是分类入口,4 个接入点都不做换算)。
- 货币换算要**基于返回的汇率数据在客户端计算**:用热门列表(1683-1)的编码,或直接用日线(1683-2)的收盘价当汇率。
- 换算属「学习分析」用途,不得对外展示为实时牌价。
## Why:没有转换接口,怎么算?
很多用户看到「货币转换」就以为能直接传「100 美元换多少人民币」。实际上接口只给数据,不给换算服务。正确做法是:取一个代表汇率的数值(如 `USDCNY` 的收盘价),在代码里做乘法。本文给你可复用公式。
## What:换算的数据来源
| 你想算 | 取哪个数据 | 用法 |
|--------|-----------|------|
| A 兑 B 的汇率 | 热门列表里 `code=AB`(如 `USDCNY`)的隐含汇率 | 直接用 |
| 用历史汇率算 | 日线 1683-2 `close` | 取某日收盘价当当日汇率 |
| 非直接货币对 | 用共同锚点(如 USD)做交叉 | 见下「交叉汇率」 |
## How
### 直接换算(已知 code)
```python
import requests
def rate_of(code, appkey):
r = requests.post("https://route.showapi.com/1683-2",
data={"appKey": appkey, "code": code,
"begin": "20250201", "end": "20250201"}, timeout=10)
body = r.json()["showapi_res_body"]
return float(body["list"][-1]["close"]) # 当日收盘价作汇率
usdcny = rate_of("USDCNY", "YOUR_APPKEY")
print("100 美元 =", 100 * usdcny, "人民币")
```
### 交叉汇率(无直接 code 时,用 USD 锚定)
```python
# 算 100 欧元 兑 日元:EURUSD * USDJPY
eurusd = rate_of("EURUSD", "YOUR_APPKEY")
usdjpy = rate_of("USDJPY", "YOUR_APPKEY")
print("100 欧元 =", 100 * eurusd * usdjpy, "日元")
```
## 进阶 / 边界
- **没有实时牌价**:用的是延迟的收盘价/列表数据,换算结果仅供学习分析,不能当银行牌价或交易依据。
- **不要编造转换接口**:产品页「货币转换」只是分类导航,不存在 1683 的换算端点。
- **买卖点差不存在**:接口不提供点差,算出来的是中间价概念,真实换汇有银行点差。
## FAQ
**Q1:有没有直接输入金额就换算的接口?**
A:没有。外汇数据查询只提供汇率数据,换算需你在客户端基于数据计算。
**Q2:为什么导航有「货币转换」却查不到?**
A:那是产品分类/导航标签,本接口 4 个接入点均不做换算服务。
**Q3:算出来的汇率准吗?**
A:是延迟数据的中间价概念,仅供学习分析,不得用于对外展示或实盘。
**Q4:交叉汇率误差大吗?**
A:取决于锚点选择和数据延迟,仅作估算,非精确牌价。
## 下一步阅读
- [外汇数据查询:热门外汇列表接入点详解](https://www.showapi.com/guides/forex-hotlist-guide-1683)
- [外汇数据查询:日线历史查询接入点实战](https://www.showapi.com/guides/forex-daily-history-1683)
- [汇率监控与异常波动告警:批量查询接入指南](https://www.showapi.com/guides/forex-monitor-alert-1683)
- **本系列共 13 篇**:查看[外汇数据查询指南总目录](https://www.showapi.com/guides/forex-guides-1683)