AllTick
-
外汇数据 实时行情历史K线

外汇接口接入教程:如何获取实时外汇行情与历史 K 线数据

本文介绍如何通过 REST API 获取历史外汇 K 线,并结合 WebSocket 接收实时行情。以 EUR/USD 为例,讲解 Python 接口调用、关键参数及时间戳处理,帮助开发者构建可靠的外汇行情应用。

AllTick阅读 5 分钟

开发外汇行情看板或量化交易系统时,通常需要解决两个问题:一是如何持续获取 EUR/USD、USD/JPY 等货币对的最新报价,二是如何获取历史价格,用于绘制 K 线图和验证交易策略。

这两类需求看似相近,实际适合的接口方式并不相同。外汇接口的接入重点,不只是成功获取数据,还包括选择合适的数据通道、正确处理时间戳,以及保证实时行情和历史数据能够衔接。

实时行情应该使用 REST API 还是 WebSocket?

如果应用只需要在用户打开页面时查询一次报价,REST API 通常更直接。程序发起 HTTP 请求,获取当前数据后即可结束请求,适合行情查询、页面初始化和定时刷新。

但如果需要持续更新外汇报价,例如在交易终端中展示 EUR/USD 的最新买价和卖价,反复调用 REST API 就需要不断发起请求,还要处理请求间隔内发生的行情变化。

这时,WebSocket 更适合持续行情订阅。客户端建立连接后订阅需要的货币对,由服务端持续推送更新,减少反复建立 HTTP 请求的开销。

开发需求更适合的方式
查询当前报价或初始化页面REST API
持续更新实时外汇行情WebSocket
获取历史 K 线并进行回测REST API
同时展示历史图表与实时价格REST API + WebSocket

在选择外汇行情接口时,还需要确认具体货币对是否受支持、数据包含哪些报价字段,以及账户套餐的请求频率和订阅限制。不同接口即使都返回价格,也不一定具有相同的数据含义。

使用 AllTick 获取历史外汇 K 线

以获取 EUR/USD 的历史行情为例,AllTick 提供外汇数据接口,可以通过 HTTP GET 请求查询 K 线数据。

外汇、贵金属、加密货币及部分商品使用的历史 K 线接口路径为 /quote-b-api/kline,请求中通过 token 传递 API Token,并通过 query 提交经过 URL 编码的 JSON 参数。

下面使用 Python 请求最近 100 根、每根 5 分钟的 EUR/USD K 线:

text
import json
import os
import uuid
import requests

BASE_URL = "https://quote.alltick.co/quote-b-api"
TOKEN = os.environ["ALLTICK_API_TOKEN"]

query = {
    "trace": str(uuid.uuid4()),
    "data": {
        "code": "EURUSD",
        "kline_type": 2,
        "kline_timestamp_end": 0,
        "query_kline_num": 100,
        "adjust_type": 0
    }
}

response = requests.get(
    f"{BASE_URL}/kline",
    params={
        "token": TOKEN,
        "query": json.dumps(query)
    },
    timeout=15
)

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

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

candles = result.get("data", {}).get("kline_list", [])
print(f"Retrieved {len(candles)} candles")

运行前需要安装 requests,并将有效的 API Token 设置为环境变量 ALLTICK_API_TOKEN。这段代码展示的是请求和基础错误处理逻辑,实际返回结构及调用结果仍应通过当前账户和接口文档核实。

几个参数尤其值得注意:

  • code:指定货币对,需使用产品列表支持的代码格式。
  • kline_type:指定 K 线周期,上述代码中的 2 对应 5 分钟。
  • kline_timestamp_end:设置查询时间边界,0 表示从最新可用行情区间查询。
  • query_kline_num:指定返回数量,单次最多请求 500 根 K 线。

需要更多历史数据时,不要假定一次请求就能返回全部记录。应根据接口支持的时间边界逐段查询,并检查时间戳是否重复、数据是否按预期排序,以及请求结果是否完整。

实时行情接入后,为什么还要检查时间戳?

接口返回数据,并不意味着这些数据可以直接用于计算指标或驱动业务逻辑。

例如,WebSocket 推送了 EUR/USD 的多条更新。如果程序仅按消息到达顺序覆盖价格,网络延迟可能导致较早生成的行情晚于较新的行情到达,最终使界面显示旧价格。

更稳妥的做法是记录每条行情的事件时间,并在业务层区分行情产生时间和本地接收时间。更新缓存时,根据数据类型及接口提供的时间字段判断是否应该覆盖当前记录,而不是单纯依赖消息到达顺序。

历史 K 线也需要类似的检查。合并不同批次的数据时,应使用货币对和 K 线周期等字段确定数据范围,再根据 K 线时间戳去重和排序。遇到时间缺口时,应先判断它是否属于正常的市场休市或数据可用性范围,不要直接用前一根 K 线的收盘价填充所有空档。

此外,实时行情与历史 K 线可能具有不同的更新节奏。若应用需要在历史图表末端持续更新,应明确当前使用的是已完成 K 线还是正在形成的 K 线,避免把尚未结束的周期当作最终收盘价。

选择外汇行情 API 前,还需要确认什么?

接入前,建议先确认三个问题:需要的货币对是否在产品覆盖范围内;历史数据的可用时间跨度和 K 线周期是否满足业务需求;账户套餐是否支持所需的请求频率和 WebSocket 连接数。

AllTick 的外汇 API 页面列出了 EUR/USD、GBP/USD、USD/JPY 等代表性货币对,并介绍了实时买卖报价、Tick 数据、OHLC K 线及历史时间序列等数据类型。具体覆盖范围和可用权限仍应以当前产品目录、套餐说明及 API 文档为准。

如果你正在开发外汇行情看板、量化策略或市场数据服务,可以先查看 AllTick 外汇行情 API,再根据需要阅读 AllTick API 文档,确认接口参数、认证方式及数据限制后再进行集成。

可靠的外汇行情接入,不仅要拿到实时价格,还要确保历史数据、时间戳和更新逻辑符合应用的实际需求。 在正式部署前,建议先用目标货币对验证请求结果,再测试 WebSocket 断线重连、数据去重及历史 K 线补齐流程。

立即开始接入市场数据

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