OKX API掘金:实时行情,量化交易,就差你!

时间:2025-03-07 阅读数:72人阅读

OKX API 市场数据查询

OKX 提供强大的 API 接口,允许开发者获取实时和历史市场数据,用于构建交易机器人、分析工具和其他相关应用。 本文将深入探讨如何使用 OKX API 进行市场数据查询,并提供相关代码示例。

API 概览

OKX API 市场数据接口提供了一系列用于获取实时和历史交易信息的工具。这些接口主要分为两大类别:

  • 公共接口(Public Endpoints): 公共接口无需 API 密钥即可访问,为开发者提供了便捷的数据获取途径。通过这些接口,用户可以获取包括但不限于以下信息:所有可交易的交易对列表及其详细参数(例如最小交易数量、价格精度等)、实时市场价格(最新成交价、买一价、卖一价)、订单簿深度信息(买单和卖单的挂单量和价格)、历史成交记录、以及其他市场统计数据。公共接口适用于不需要访问用户个人账户信息的场景,例如数据分析、行情展示等。
  • 签名接口(Signed Endpoints): 签名接口则需要使用 API 密钥进行身份验证,以确保账户安全。通过签名接口,用户可以访问与账户相关的信息,例如账户余额、持仓情况、交易历史、以及进行下单、撤单等操作(此处不重点讨论账户相关内容)。签名接口在安全性方面要求更高,适用于需要进行交易操作或访问用户敏感信息的场景。

本文重点关注公共接口,详细介绍如何通过公共接口获取 OKX 交易所的实时市场数据。我们将探讨不同类型公共接口的使用方法、数据格式以及实际应用场景,帮助开发者快速上手并构建自己的数据分析或交易应用。

准备工作

在使用 OKX API 之前,充分的准备工作至关重要,这将直接影响您集成 API 的效率和成功率。建议您在开始编写代码之前,仔细完成以下步骤:

  1. 详尽阅读 OKX API 文档: OKX 官方 API 文档是您掌握 API 的核心资源。务必花时间深入了解文档,特别是以下几个关键方面:
    • Endpoint 详情: 每个 API endpoint 的具体作用、功能以及适用场景。
    • 请求参数详解: 每个 endpoint 需要的参数(包括必选和可选参数)、参数类型、参数范围、参数含义以及正确的传参方式。
    • 返回格式规范: API 返回数据的 JSON 结构、字段含义、数据类型以及错误代码的解释。理解返回格式对于解析数据至关重要。
    • 速率限制策略: 了解 OKX API 的速率限制(Rate Limit)机制,避免因请求过于频繁而被限制访问。
    • 认证和授权方式: 熟悉如何使用 API 密钥(API Key)进行身份验证和授权,确保安全访问 API。
    OKX 官方文档会不断更新,请定期查阅以获取最新信息。
  2. 选择合适的编程语言和库: 根据您的编程经验、项目需求和团队技术栈选择最合适的编程语言和 HTTP 请求库。
    • 常见编程语言: Python, Java, Node.js, Go, PHP 等都是常用的选择。
    • HTTP 请求库:
      • Python: requests , aiohttp (异步请求)
      • Java: HttpClient , OkHttp
      • Node.js: axios , node-fetch
      • Go: net/http
    • 选择标准: 考虑库的易用性、性能、社区支持和文档完整性。
  3. 安装必要的依赖库: 在您选择的编程环境中安装所需的 HTTP 请求库。
    • Python 示例: 在命令行中使用 pip install requests 安装 requests 库。建议使用虚拟环境(如 venv )隔离项目依赖。
    • 其他语言: 参考您所选语言和库的官方文档进行安装。
    确保您的开发环境已正确配置,并能成功导入和使用这些库。
  4. 掌握 REST API 基本概念: 对 REST API 的理解是高效使用 OKX API 的基础。
    • HTTP 请求方法: 理解 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等 HTTP 方法的用途。
    • JSON 数据格式: 熟悉 JSON (JavaScript Object Notation) 格式,包括 JSON 对象、JSON 数组、键值对等概念。OKX API 使用 JSON 作为数据交换格式。
    • 状态码: 了解常见的 HTTP 状态码,如 200 (OK)、400 (Bad Request)、401 (Unauthorized)、404 (Not Found)、500 (Internal Server Error) 等,以便正确处理 API 返回结果。
    • API 鉴权: 学习 API 密钥 (API Key) 的申请和使用,以及如何将其添加到 HTTP 请求头中进行身份验证。

获取交易对信息

交易对信息是进行市场数据查询的基础,它包含了交易标的、计价货币、合约类型等关键信息。通过了解交易对信息,您可以准确选择需要监控或交易的市场。

可以使用 /api/v5/public/instruments 接口获取 OKX 交易所上所有可交易的交易对的详细信息。该接口返回的数据包含了交易对的名称、基础货币、报价货币、合约乘数(对于期货合约)、最小交易单位、交易手续费率等重要参数。

通过该接口,您可以根据不同的交易需求筛选交易对,例如:只查看永续合约、只查看特定币种的交易对、或只查看杠杆交易对。这有助于您高效地找到符合交易策略的标的。

API Endpoint:

GET /api/v5/public/instruments

该API端点用于检索所有交易工具(instruments)的详细信息。它属于公共API,意味着无需身份验证即可访问。此端点返回的数据对于了解交易所支持的交易对及其相关参数至关重要。

详细说明:

  • 方法: GET ,表示从服务器请求数据。
  • 路径: /api/v5/public/instruments ,指定API的版本(v5)和资源类型(instruments)。 public 表明这是一个公共端点。
  • 用途: 获取交易平台提供的所有交易产品的完整列表,包括但不限于现货、合约、期权等。

返回值:

服务器将返回一个JSON格式的响应,其中包含每个交易工具的详细信息。这些信息可能包括:

  • Instrument ID (instId): 交易工具的唯一标识符,例如 "BTC-USD-SWAP"。
  • Instrument Family (instFamily): 交易工具所属的系列,例如 "BTC-USD" 或 "ETH-USDT"。
  • Instrument Type (instType): 交易工具的类型,例如 "SPOT"(现货), "SWAP"(永续合约), "FUTURES"(交割合约), "OPTION"(期权)。
  • Quote Currency (quoteCcy): 报价货币,例如 "USD"。
  • Base Currency (baseCcy): 基础货币,例如 "BTC"。
  • Settle Currency (settleCcy): 结算货币,例如 "USD"。
  • Tick Size (tickSz): 价格变动的最小单位。
  • Lot Size (lotSz): 交易的最小单位。
  • Contract Value (ctVal): 合约价值,适用于合约交易。
  • Leverage (leverage): 可用杠杆倍数,适用于合约交易。
  • Expiry Date (expDate): 到期日期,适用于交割合约和期权。
  • Delivery Date (delivDate): 交割日期,适用于交割合约。
  • Online Status (state): 交易工具的在线状态,例如 "live" (上线) 或 "suspended" (暂停)。

使用场景:

开发者可以使用此API端点来:

  • 动态更新交易平台支持的交易对列表。
  • 获取每个交易对的详细参数,用于计算交易成本和风险。
  • 根据交易工具类型进行筛选和展示。
  • 监控交易工具的在线状态。

请求参数:

  • instType (必选): 产品类型。指定要查询的产品类别。支持的类型包括:
    • SPOT : 现货交易,代表直接买卖加密货币。
    • FUTURES : 交割合约,指在未来特定日期以约定价格买卖加密货币的合约。
    • SWAP : 永续合约,一种没有到期日的合约,允许无限期持有。
    • OPTION : 期权合约,赋予持有者在特定日期或之前以特定价格买入或卖出加密货币的权利,而非义务。
    必须提供此参数以确定返回哪些类型的产品信息。
  • uly (可选): 标的指数。仅当 instType OPTION 时才需要此参数。
    • 指定期权合约的基础资产。例如,如果查询的是 BTC 的期权,则 uly 应设置为 BTC 的指数代码。
    • 对于其他产品类型( SPOT , FUTURES , SWAP ),此参数应留空。
    • 若查询所有期权,不指定标的指数可能会返回大量数据。建议在实际应用中根据需求精确指定。
  • instId (可选): 单个产品 ID。
    • 如果提供此参数,API 将仅返回指定产品 ID 的详细信息。
    • 产品 ID 是交易所用于唯一标识每个交易对或合约的字符串。例如, BTC-USD-SWAP 代表比特币/美元的永续合约。
    • 如果省略此参数,API 将返回所有符合 instType uly (如果适用)条件的产品信息列表。
    • 不提供 instId 时,返回的数据量会比较大,应考虑分页处理或筛选。

代码示例 (Python):

以下Python代码演示了如何使用 requests 库与OKX交易所的API交互,获取指定类型的交易对信息。代码包含了错误处理机制,能有效应对API请求失败的情况。

import requests
import 

def get_instruments(inst_type):
    """
    从OKX API获取指定类型的交易对列表。

    Args:
        inst_type (str): 交易对类型,例如 "SPOT", "FUTURES", "SWAP", "OPTION"。

    Returns:
        list: 包含交易对信息的列表,如果请求失败则返回None。
    """
    url = "https://www.okx.com/api/v5/public/instruments"
    params = {"instType": inst_type}

    try:
        response = requests.get(url, params=params)
        response.raise_for_status()  # 检查HTTP状态码,如果不是200则抛出异常

        data = response.()

        if data["code"] == "0":
            return data["data"]
        else:
            print(f"API Error: {data['msg']}")
            return None

    except requests.exceptions.RequestException as e:
        print(f"Request Error: {e}")
        return None

if __name__ == "__main__":
    spot_instruments = get_instruments("SPOT")
    if spot_instruments:
        print(f"Found {len(spot_instruments)} SPOT instruments.")
        # 打印第一个交易对的详细信息,使用.dumps格式化输出
        print(.dumps(spot_instruments[0], indent=4))
    else:
        print("Failed to retrieve SPOT instruments.")

代码详解:

  • 引入必要的库: requests 用于发送HTTP请求, 用于格式化API返回的JSON数据。
  • get_instruments(inst_type) 函数:
    • 接收一个参数 inst_type ,用于指定要查询的交易对类型。
    • 构造API请求URL和参数,例如查询现货交易对 (SPOT)。
    • 使用 requests.get() 方法发送GET请求到OKX API。
    • 使用 response.raise_for_status() 检查HTTP响应状态码,确保请求成功。
    • 解析API返回的JSON数据,检查 code 字段是否为 "0",表示请求成功。
    • 如果请求成功,返回包含交易对信息的列表;否则,打印错误信息并返回 None
    • 使用 try...except 块处理可能出现的网络请求异常。
  • 主程序 ( if __name__ == "__main__": ):
    • 调用 get_instruments("SPOT") 获取现货交易对列表。
    • 检查返回的列表是否为空。
    • 如果列表不为空,则打印交易对数量,并使用 .dumps() 格式化打印第一个交易对的详细信息 (包括缩进,提高可读性)。
    • 如果列表为空,则打印错误信息。

错误处理: 代码包含了详细的错误处理机制,包括:

  • HTTP状态码检查: 使用 response.raise_for_status() 确保API请求成功。
  • API错误处理: 检查API返回的JSON数据中的 code 字段,判断请求是否成功。
  • 网络请求异常处理: 使用 try...except 块捕获可能出现的 requests.exceptions.RequestException 异常。

注意事项:

  • 使用此代码需要安装 requests 库: pip install requests
  • OKX API可能需要身份验证,具体取决于你要访问的端点。本示例代码仅访问公开端点,无需身份验证。如果需要访问需要身份验证的端点,需要配置API密钥。
  • 请仔细阅读OKX API文档,了解各个端点的使用方法和参数要求。
  • 请勿滥用API,以免被限制访问。

代码解释:

  1. 导入 requests 库,用于发送 HTTP 请求,以及 库,用于处理 JSON 数据。 requests 使得与 RESTful API 交互变得简单,而 提供了将 Python 对象序列化和反序列化为 JSON 字符串的功能。
  2. 定义 get_instruments 函数,它接受一个 inst_type 参数,用于指定交易类型,例如 "SPOT" (现货), "SWAP" (永续合约), "FUTURES" (期货), "OPTION" (期权)。这个函数的设计目标是从交易所 API 获取指定类型的交易对信息。
  3. 构造 API 请求 URL 和参数。 URL 是 API 的端点地址,参数则包含了请求所需的额外信息,例如交易类型 inst_type 。正确的 URL 和参数对于成功访问 API 并获取所需数据至关重要。
  4. 使用 requests.get 方法发送 GET 请求到 API 端点。 GET 请求通常用于从服务器检索数据。 requests.get 返回一个响应对象,包含了服务器的响应信息,如状态码、响应头和响应体。
  5. 使用 response.raise_for_status() 方法检查 HTTP 状态码。 此方法会检查状态码是否表示成功 (2xx)。 如果状态码表示错误 (4xx 或 5xx),它会抛出一个 HTTPError 异常,从而便于错误处理。 确保 API 请求成功是处理数据的首要步骤。
  6. 将 JSON 响应解析为 Python 字典。 API 通常以 JSON 格式返回数据。 response.() 方法会将 JSON 响应体转换为 Python 字典,方便后续的数据访问和处理。解析 JSON 数据是数据提取的关键步骤。
  7. 检查 API 返回的 code 字段是否为 "0"。 不同的 API 可能会使用不同的字段来表示请求状态。 在这里,假设 code 为 "0" 表示 API 调用成功。 如果 code 不是 "0",则表示 API 调用失败,需要进行相应的错误处理,例如记录错误日志或抛出自定义异常。
  8. 如果 API 调用成功,返回 data 字段中的交易对信息。 data 字段通常包含 API 返回的实际数据,例如交易对的名称、交易量、价格等。返回 data 字段,以便调用者可以使用这些信息进行进一步的处理和分析。
  9. if __name__ == "__main__": 代码块中,调用 get_instruments 函数,并将 inst_type 设置为 "SPOT",以获取现货交易对的信息。然后,打印交易对的数量,并使用 .dumps 方法美化输出第一个交易对的详细信息。 .dumps indent 参数可以控制 JSON 数据的缩进,提高可读性。此代码块是程序的入口点,用于测试和演示 get_instruments 函数的功能。

获取市场行情信息

在成功获取所需的交易对信息后,您便可以利用 /api/v5/market/ticker 接口深入了解特定交易对的实时市场动态。该接口提供了该交易对最新的市场行情快照,包含关键的价格和交易量数据。

通过调用 /api/v5/market/ticker 接口,您可以获取以下关键市场指标:

  • 最新成交价: 指示该交易对的最新成交价格,反映了当前市场对该资产的估值。
  • 24小时最高价: 提供过去24小时内该交易对的最高成交价格,帮助您评估价格波动范围。
  • 24小时最低价: 提供过去24小时内该交易对的最低成交价格,同样有助于您评估价格波动范围。
  • 24小时成交量: 显示过去24小时内该交易对的总成交量,是衡量市场活跃度和流动性的重要指标。成交量越高,通常意味着市场参与者越多,交易更容易执行。
  • 24小时成交额: 代表过去24小时内该交易对的总成交额,以计价货币(例如USDT、BTC)表示。
  • 开盘价: 指示过去24小时的开盘价格。
  • 指数价格: 部分平台可能提供指数价格,代表平台综合考虑的合理价格。

正确解读和分析这些市场数据,对于制定交易策略、风险管理以及把握市场机会至关重要。请务必结合其他数据来源和技术分析工具,做出明智的投资决策。

请求示例:

假设您想获取BTC-USDT交易对的行情信息,您可以构造如下的请求:

GET /api/v5/market/ticker?instId=BTC-USDT

注意事项:

  • 请务必正确填写 instId 参数,确保指定正确的交易对。
  • 部分交易所对接口请求频率有限制,请注意控制请求频率,避免触发限流。
  • 不同交易所返回的数据格式可能存在差异,请参考相应交易所的API文档。

API Endpoint:

GET /api/v5/market/ticker

该 API 接口用于获取指定交易对的市场行情数据。通过发送 GET 请求至 /api/v5/market/ticker ,您可以查询包括最新成交价、最高价、最低价、交易量等关键信息。 为了获取特定交易对的数据,您需要在请求中包含必要的参数,例如交易对代码( instrument_id )。

请求示例:

假设您想获取 BTC/USDT 交易对的行情数据,您可以使用以下格式的请求:

GET /api/v5/market/ticker?instrument_id=BTC-USDT

响应数据:

API 将返回包含市场行情数据的 JSON 对象。该对象将包含诸如 askPrice (卖一价)、 bidPrice (买一价)、 high24h (24小时最高价)、 low24h (24小时最低价)、 lastPrice (最新成交价)、 volume24h (24小时成交量) 等字段。具体返回字段及格式请参考 API 文档的详细说明。

错误处理:

如果请求失败,API 将返回包含错误代码和错误信息的 JSON 对象。请务必根据错误信息进行相应的处理,例如检查请求参数是否正确、网络连接是否正常等。

速率限制:

需要注意的是,API 接口存在速率限制。请合理控制请求频率,避免触发速率限制导致请求失败。具体的速率限制规则请参考 API 文档。

请求参数:

  • instId (必选): 产品 ID,用于指定需要查询的具体交易对。例如, BTC-USDT 表示比特币与 USDT 的交易对。该参数是必需的,如果缺少该参数,API 将无法确定您想要查询哪个市场的数据。不同的交易平台可能支持不同的交易对,请参考平台的 API 文档获取支持的 instId 列表。该参数必须准确无误,区分大小写。错误的 instId 将导致 API 请求失败或返回错误的数据。

代码示例 (Python):

此示例展示了如何使用 Python 和 requests 库从 OKX 加密货币交易所的 API 获取指定交易对的实时交易数据。 为了确保代码的可读性和可维护性,我们定义了一个函数来专门处理 API 请求。

requests 库是一个流行的 Python 库,用于发送 HTTP 请求。 使用它可以方便地与 Web API 进行交互,获取数据。

import requests
import 

def get_ticker(inst_id):
    """
    从 OKX API 获取指定交易对的 ticker 信息。

    Args:
        inst_id (str): 交易对 ID,例如 "BTC-USDT"。

    Returns:
        dict: 包含 ticker 信息的字典,如果请求失败则返回 None。
    """
    url = "https://www.okx.com/api/v5/market/ticker"
    params = {"instId": inst_id}
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()  # 如果 HTTP 请求返回错误状态码,则抛出异常
        data = response.()
        if data["code"] == "0":
            return data["data"][0]  # 返回的是一个列表,我们取第一个
        else:
            print(f"API Error: {data['msg']}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"Request Error: {e}")
        return None

上述代码定义了一个名为 get_ticker 的函数,该函数接受一个参数 inst_id ,表示要获取 ticker 信息的交易对 ID。 该函数首先构造 API 的 URL,然后使用 requests.get 方法发送 GET 请求。 response.raise_for_status() 方法会检查 HTTP 响应状态码,如果状态码表示错误(例如 404 或 500),则会引发异常。 接下来,将响应内容解析为 JSON 格式,并检查返回的 code 字段。 如果 code 为 "0",则表示请求成功,函数返回包含 ticker 信息的字典。 否则,函数打印错误消息并返回 None 。 使用 try...except 块捕获网络请求过程中可能出现的异常,例如连接错误或超时。

以下代码演示了如何调用 get_ticker 函数并打印结果:

if __name__ == "__main__":
    btc_usdt_ticker = get_ticker("BTC-USDT")
    if btc_usdt_ticker:
        print(f"BTC-USDT Ticker:")
        print(.dumps(btc_usdt_ticker, indent=4)) # 使用 .dumps 格式化输出
    else:
        print("Failed to retrieve BTC-USDT ticker.")

if __name__ == "__main__": 块中,首先调用 get_ticker 函数获取 BTC-USDT 交易对的 ticker 信息。 如果成功获取到 ticker 信息,则将其打印到控制台。 为了使输出更易于阅读,我们使用了 .dumps 函数并指定了 indent=4 参数,以便以缩进的格式打印 JSON 数据。

此脚本依赖于 requests 库。 如果你没有安装 requests 库,可以使用以下命令安装:

pip install requests

为了增加代码的健壮性,可以考虑添加以下改进:

  • 添加重试机制: 如果 API 请求失败,可以尝试多次重试。
  • 配置 API 密钥: 如果 OKX API 需要 API 密钥,可以将 API 密钥存储在环境变量中,并在代码中读取。
  • 添加日志记录: 可以使用 logging 模块记录 API 请求和响应,以便进行调试和监控。
  • 数据验证: 验证从 API 返回的数据是否符合预期格式和范围,以防止程序因意外数据而崩溃。

代码解释:

  1. 定义 get_ticker 函数: 函数名为 get_ticker ,接受一个字符串类型的参数 inst_id inst_id 代表的是交易对的 ID,例如 "BTC-USDT",指定需要查询的加密货币交易对。 函数的作用是获取指定交易对的最新行情数据。
  2. 构造 API 请求 URL 和参数: 根据交易所提供的 API 文档,构建用于请求最新行情数据的完整 URL。这通常涉及一个基础 URL (例如 `https://www.example.com/api/v1/ticker`) 加上查询参数。 本例中,参数包括 `instId`,其值为传入的 inst_id 参数。 使用库例如 `urllib.parse` 可以方便地构造带有查询参数的 URL。
  3. 使用 requests.get 发送 GET 请求: 利用 Python 的 requests 库发送 HTTP GET 请求到构造好的 API URL。 GET 请求用于从服务器获取数据。 requests.get(url, params=params) 方法中的 url 参数为 API URL, params 参数为一个字典,包含需要传递给 API 的查询参数。
  4. 使用 response.raise_for_status() 检查 HTTP 状态码: 在收到 API 的响应后,需要检查 HTTP 状态码,以确认请求是否成功。 response.raise_for_status() 方法会在状态码表示错误 (例如 404, 500) 时抛出一个 HTTPError 异常,从而方便错误处理。 如果状态码为 200 (OK),则表示请求成功。
  5. 将 JSON 响应解析为 Python 字典: API 通常返回 JSON 格式的数据。 使用 response.() 方法可以将 JSON 响应解析为 Python 字典。 这使得可以方便地访问和处理返回的数据。
  6. 检查 API 返回的 code 是否为 "0": 许多交易所的 API 会在 JSON 响应中包含一个 code 字段,用于表示 API 调用的状态。 通常, code 为 "0" 表示 API 调用成功。 通过检查 code 字段,可以进一步确认 API 调用是否成功,即使 HTTP 状态码为 200。
  7. 如果 API 调用成功,返回 data 字段中的行情信息: 如果 API 调用成功,行情数据通常位于 JSON 响应的 data 字段中。 data 字段可能包含多个行情数据,例如买一价、卖一价、最新成交价、24 小时成交量等。 由于返回的是列表,通常 API 只返回一个元素的列表,列表的第一个元素包含所需的行情数据,所以此处取 data[0] ,获取第一个行情数据。
  8. if __name__ == "__main__": 代码块中,调用 get_ticker 函数获取 BTC-USDT 的行情信息,并打印: if __name__ == "__main__": 是一个 Python 惯用法,用于判断当前模块是否作为主程序运行。 如果是,则执行该代码块中的代码。 在该代码块中,调用 get_ticker 函数,传入 "BTC-USDT" 作为 inst_id 参数,获取 BTC-USDT 的行情信息,并将返回的行情数据打印到控制台。 这允许在不导入该模块的情况下,直接运行该脚本来获取 BTC-USDT 的最新行情。

获取深度信息(Order Book)

深度信息(Order Book),又称订单簿,是加密货币交易所中至关重要的实时数据,它详细展示了当前市场上买单(Bid)和卖单(Ask)的价格和数量分布情况。 订单簿直观地反映了市场参与者对特定交易对的买卖意愿和力量对比,是交易决策的重要参考依据。通过分析订单簿,交易者可以评估市场的流动性、潜在支撑位和阻力位,以及短期内的价格波动方向。

要获取特定交易对的深度信息,可以使用 /api/v5/market/books 接口。该接口通常需要指定交易对(例如:BTC/USDT)作为参数,并可能支持设置返回的深度层级(例如:前多少个最优价格的买卖单)。 返回的数据通常包含买方订单和卖方订单两部分,每一部分都包含价格和数量两个字段,并按照价格从优到劣的顺序排列。 例如,买方订单会按照价格由高到低排列,卖方订单则按照价格由低到高排列。

需要注意的是,不同的交易所API对于深度信息的格式可能略有差异,因此在使用前务必仔细阅读对应交易所的API文档。 订单簿信息是动态变化的,需要实时更新才能保持其有效性。一些交易所提供WebSocket接口,允许用户订阅订单簿的实时更新推送,以便及时获取最新的市场深度信息。 高频交易和算法交易通常依赖于对订单簿的实时分析和快速响应。

API Endpoint: 获取市场深度数据

请求方法: GET

API路径: /api/v5/market/books

描述: 此API接口用于检索指定交易对的市场深度数据,也称为订单簿数据。它提供当前市场上买单和卖单的价格和数量信息,帮助用户了解市场的供需情况和流动性。通过分析订单簿,用户可以评估交易滑点、预测价格变动,并制定更明智的交易策略。

参数:

  • instId (必选): 交易对ID,例如 "BTC-USDT"。 必须指定要查询的市场深度数据的交易对。
  • sz (可选): 返回的订单簿深度。 默认值为 "20",表示返回买卖双方各20个价位的订单。 可以调整该值以获取更深或更浅的市场深度。 可选项包括 "5", "10", "20", "400"。 更高的数值可能导致响应时间延长。
  • depth (可选): 返回的订单簿档位深度。 可选项包括"1", "10", "100"。 数字越小深度越精准,但会增加服务器压力。
  • mrgMode (可选): 保证金模式,仅适用于组合保证金账户和单币种保证金账户。 crossed 表示全仓模式, isolated 表示逐仓模式。

响应:

API 将返回一个 JSON 对象,其中包含以下信息:

  • asks : 卖单数组。 每个元素代表一个卖单,包含价格和数量。
  • bids : 买单数组。 每个元素代表一个买单,包含价格和数量。
  • ts : 时间戳,指示数据更新的时间。
  • checksum : 校验和,用于验证数据的完整性。(部分交易所支持)

示例:

以下是一个API请求的示例:

GET /api/v5/market/books?instId=BTC-USDT&sz=5

上述请求将返回 BTC-USDT 交易对的买卖双方各 5 个价位的市场深度数据。

注意事项:

  • 频繁请求此接口可能会受到速率限制。 请遵守交易所的API使用条款。
  • 市场深度数据是动态变化的。 建议定期更新数据以保持最新信息。
  • 不同交易所的市场深度数据可能略有差异。

请求参数:

  • instId (必选): 产品 ID,用于指定要查询的交易对。例如, BTC-USDT 代表比特币兑泰达币的交易对。必须提供此参数以明确指定您希望获取哪个交易对的深度数据。如果未提供 instId ,API 将无法确定您需要的数据。
  • sz (可选): 返回的深度数据条数,控制返回的深度数据量。默认值为 20,表示返回买一到买二十,卖一到卖二十的订单薄数据。最大值为 400,允许您获取更详细的订单薄信息。增加 sz 的值可以提供更全面的市场深度视图,但也会增加返回的数据量和处理时间。例如,若需要查看更深层的市场挂单情况,可以将 sz 设置为 100 或更高。

代码示例 (Python):

本示例展示了如何使用Python编程语言通过OKX交易所的API获取指定交易对的订单簿数据。它使用了 requests 库来发送HTTP请求,并解析返回的JSON数据。该代码片段旨在帮助开发者理解如何与OKX API交互,并获取市场深度信息。下面是详细的代码实现:


import requests
import 

def get_order_book(inst_id, size=20):
    """
    从OKX API获取指定交易对的订单簿数据。

    Args:
        inst_id (str): 交易对ID,例如 "BTC-USDT"。
        size (int): 需要获取的订单簿深度数量,默认为20。

    Returns:
        dict: 包含订单簿数据的字典,如果请求失败则返回None。
    """
    url = "https://www.okx.com/api/v5/market/books"
    params = {"instId": inst_id, "sz": size}
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()  # 检查请求是否成功

        data = response.()

        if data["code"] == "0":
            return data["data"][0]
        else:
            print(f"API Error: {data['msg']}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"Request Error: {e}")
        return None

if __name__ == "__main__":
    btc_usdt_order_book = get_order_book("BTC-USDT", size=5) # 获取前 5 条深度数据
    if btc_usdt_order_book:
        print(f"BTC-USDT Order Book (Top 5):")
        print(.dumps(btc_usdt_order_book, indent=4))
    else:
        print("Failed to retrieve BTC-USDT order book.")

代码解释:

  • 导入必要的库: requests 库用于发送HTTP请求, 库用于处理JSON格式的数据。
  • get_order_book 函数: 该函数接受交易对ID( inst_id )和订单簿深度( size )作为参数。它构建API请求URL和参数,然后发送GET请求到OKX API。
  • 错误处理: 使用 try...except 块来捕获可能发生的请求异常,例如网络错误或API错误。 response.raise_for_status() 用于检查HTTP响应状态码是否表示成功。
  • API 响应处理: 如果API返回成功,则解析JSON响应并提取订单簿数据。OKX API返回的JSON数据包含一个 code 字段,用于指示请求是否成功。如果 code 为 "0",则表示请求成功。订单簿数据位于 data 字段中,通常是一个包含买单和卖单的列表。
  • 主程序: if __name__ == "__main__": 块中,调用 get_order_book 函数来获取BTC-USDT交易对的订单簿数据。如果成功获取数据,则将其格式化并打印到控制台。
  • JSON 格式化输出: .dumps(btc_usdt_order_book, indent=4) 将Python字典格式化为易于阅读的JSON字符串, indent=4 参数指定缩进量为4个空格。

注意事项:

  • API 密钥: 本示例未包含API密钥的身份验证。对于某些API端点,可能需要提供有效的API密钥才能访问数据。请参考OKX API文档,了解如何进行身份验证。
  • 频率限制: OKX API有频率限制,即在一定时间内允许发送的请求数量有限制。如果超过频率限制,API将返回错误。请注意控制请求频率,以避免被限制。
  • 数据格式: OKX API返回的订单簿数据格式可能会发生变化。请参考OKX API文档,了解最新的数据格式。通常,订单簿数据包含买单和卖单的列表,每个订单包含价格和数量。
  • 错误处理: 建议在实际应用中添加更完善的错误处理机制,例如记录错误日志、重试请求等。

代码解释:

  1. 定义 get_order_book 函数: 该函数是获取订单簿数据的核心。它接受两个参数: inst_id (交易对 ID,例如 "BTC-USDT") 和 size (请求的订单簿深度条目数量,即买单和卖单各多少条)。 函数签名明确了输入和输出,为后续调用提供了清晰的接口。
  2. 构造 API 请求 URL 和参数: 为了从交易所获取订单簿数据,需要构造一个完整的 API 请求 URL。 这通常涉及到基本 URL (例如交易所的 API 地址) 加上特定的 endpoint (例如 "/api/v5/market/books"),以及查询参数,例如 instId sz (对应于 inst_id size )。 将参数构建成字典,方便后续添加到请求中。
  3. 使用 requests.get 发送 GET 请求: Python 的 requests 库用于发送 HTTP 请求。 requests.get(url, params=params) 会向指定的 URL 发送一个 GET 请求,并将参数附加到 URL 中。 GET 请求常用于从服务器获取数据。
  4. 使用 response.raise_for_status() 检查 HTTP 状态码: 在处理 API 响应之前,必须检查 HTTP 状态码,以确保请求成功。 response.raise_for_status() 方法会检查状态码是否表示错误 (例如 404 Not Found 或 500 Internal Server Error)。 如果状态码表示错误,它将引发一个 HTTPError 异常,从而可以及早发现并处理问题。
  5. 将 JSON 响应解析为 Python 字典: 交易所通常以 JSON 格式返回数据。 response.() 方法会将 JSON 响应解析为 Python 字典,方便后续访问和处理数据。 JSON 是一种常用的数据交换格式,易于解析和使用。
  6. 检查 API 返回的 code 是否为 "0": 许多交易所的 API 在 JSON 响应中包含一个 code 字段,用于指示 API 调用是否成功。通常, code 为 "0" 表示成功,其他值表示错误。 检查 code 字段可以更可靠地判断 API 调用是否成功,而不仅仅依赖于 HTTP 状态码。
  7. 如果 API 调用成功,返回 data 字段中的深度信息: 如果 API 调用成功, data 字段通常包含请求的订单簿数据。 订单簿数据通常是一个包含多个条目的列表,每个条目表示一个买单或卖单。 因为API返回的数据是一个列表,所以需要取列表中的第一个元素`data[0]`来获取真正的订单簿信息。每个条目通常包含价格和数量等信息。
  8. if __name__ == "__main__": 代码块中,调用 get_order_book 函数获取 BTC-USDT 的前 5 条深度数据,并打印: if __name__ == "__main__": 代码块确保只有在直接运行脚本时才执行其中的代码。 这允许将代码作为模块导入到其他脚本中,而不会意外执行测试代码。 在此代码块中,调用 get_order_book 函数,传入 "BTC-USDT" 作为交易对 ID 和 5 作为深度大小,然后打印返回的订单簿数据。 这是测试和使用 get_order_book 函数的常见方式。

获取K线数据

K线数据(Candlestick Data),也称为蜡烛图数据,是加密货币市场技术分析中不可或缺的重要工具。它以图形化的方式展示了特定时间段内资产的价格波动信息,包括开盘价、收盘价、最高价和最低价,从而帮助交易者识别趋势、预测价格走向并制定交易策略。 通过分析K线图的形态,可以观察市场的买卖力量对比,判断市场情绪。

可以使用 /api/v5/market/candles 接口,通过发送HTTP GET请求的方式,获取指定交易对的历史 K 线数据。该接口通常需要提供交易对的代码(例如:BTCUSDT)、K线的时间周期(例如:1分钟、5分钟、1小时、1天等)以及所需的数据量。不同的交易所或数据提供商可能对接口参数和返回的数据格式略有差异,在使用前应仔细阅读相关API文档。获取的数据通常以JSON格式返回,包含时间戳、开盘价、最高价、最低价、收盘价和交易量等信息。

API Endpoint:

GET /api/v5/market/candles

此API端点用于获取指定加密货币交易对的历史K线数据(也称为蜡烛图数据)。K线图是技术分析中常用的一种图表,它以图形化的方式展示了特定时间段内的开盘价、收盘价、最高价和最低价。通过此端点,开发者和交易者可以访问这些历史数据,用于分析市场趋势、制定交易策略或构建量化交易模型。

方法: GET

URL: /api/v5/market/candles

描述: 获取指定交易对的K线数据。 返回的数据包括时间戳、开盘价、最高价、最低价、收盘价和交易量等信息。 通过不同的参数设置,可以获取不同时间周期的K线数据,例如1分钟、5分钟、1小时、1天等。 此端点是构建加密货币交易应用、市场分析工具和量化交易策略的关键组成部分。

请求参数 (示例):

  • instId (string, 必选): 交易对ID,例如: BTC-USDT 。 指示你希望获取K线数据的具体交易对。
  • bar (string, 可选): K线周期,例如: 1m (1分钟), 5m (5分钟), 1h (1小时), 1d (1天)。 如果不指定,默认周期可能会根据交易所的设置而有所不同。 常见的K线周期包括分钟级别、小时级别、天级别、周级别和月级别。
  • limit (integer, 可选): 返回K线数据的条数,默认值和最大值通常有限制,例如: 100 。 指定你希望获取的历史K线数据的数量。
  • before (string, 可选): 分页参数,用于获取更早的数据。 通常是上一次请求返回的第一个数据点的时间戳。
  • after (string, 可选): 分页参数,用于获取更晚的数据。 通常是上一次请求返回的最后一个数据点的时间戳。

响应示例:


[
  [
    "1678886400000",  // 时间戳 (毫秒)
    "20000",        // 开盘价
    "20500",        // 最高价
    "19800",        // 最低价
    "20200",        // 收盘价
    "100",          // 交易量 (基础货币)
    "2020000"       // 交易额 (计价货币)
  ],
  [
    "1678886460000",
    "20200",
    "20400",
    "20100",
    "20300",
    "80",
    "1624000"
  ]
  // ... 更多K线数据
]

注意事项:

  • 请务必阅读交易所的API文档,了解具体的参数要求和频率限制。 不同的交易所可能有不同的参数名称、格式和限制。
  • 频繁请求可能会导致API调用被限制。 建议合理设置请求频率,避免对交易所的服务器造成过大压力。
  • 时间戳通常以毫秒为单位。 在进行时间计算时,请注意单位转换。
  • 交易量和交易额的单位可能因交易对而异。 请仔细查阅交易所的API文档,了解具体的单位。

请求参数:

  • instId (必选): 产品 ID,用于指定需要查询K线数据的交易对。例如, BTC-USDT 表示比特币兑USDT的交易对。该参数是查询历史K线数据的必要条件。
  • bar (必选): K线周期,定义了每根K线的时间跨度。常见的周期包括: 1m (1 分钟),代表每根K线包含 1 分钟内的价格信息; 5m (5 分钟),以此类推; 15m (15 分钟); 30m (30 分钟); 1H (1 小时); 4H (4 小时); 1D (1 天); 1W (1 周);以及 1M (1 个月)。选择合适的K线周期取决于您的交易策略和分析需求。
  • limit (可选): 返回数据的条数,即希望获取的K线数量。默认值为 100,表示如果不指定该参数,API 将返回 100 根 K 线。最大值为 100,即使指定大于 100 的值,API 也会只返回 100 根 K 线。 使用此参数可以控制请求的数据量,优化响应时间。
  • after (可选): 请求此时间戳之后(不包含此时间戳)的数据。该参数使用 Unix 时间戳,单位为毫秒。例如,如果指定 after 为 1678886400000,则 API 将返回所有时间戳大于 1678886400000 的 K 线数据。该参数通常用于分页查询或增量更新,避免重复获取相同的数据。
  • before (可选): 请求此时间戳之前(不包含此时间戳)的数据。同样使用 Unix 时间戳,单位为毫秒。与 after 相反, before 用于指定查询的时间范围上限。 例如,如果指定 before 为 1678972800000,则 API 将返回所有时间戳小于 1678972800000 的 K 线数据。结合 after before 参数,可以精确地查询指定时间范围内的 K 线数据。

代码示例 (Python):

该 Python 脚本演示了如何通过 OKX API 获取加密货币的 K 线数据。它使用 requests 库发送 HTTP 请求,并使用 time 库将时间戳转换为可读格式。脚本定义了一个函数 get_candles ,该函数接受交易对 ( inst_id )、K 线周期 ( bar ) 和数据条数限制 ( limit ) 作为参数。

import requests
import time
import

def get_candles(inst_id, bar, limit=100):
"""
从 OKX API 获取 K 线数据。
Args:
inst_id (str): 交易对,例如 "BTC-USDT"。
bar (str): K 线周期,例如 "1m" (1 分钟), "5m" (5 分钟), "1H" (1 小时), "1D" (1 天)。
limit (int): 返回的数据条数限制,默认为 100,最大值为 100。
Returns:
list: K 线数据列表,每个元素是一个包含时间戳、开盘价、最高价、最低价、收盘价和成交量的列表。如果发生错误,则返回 None。
"""
url = "https://www.okx.com/api/v5/market/candles"
params = {"instId": inst_id, "bar": bar, "limit": limit}
try:
response = requests.get(url, params=params)
response.raise_for_status() # 如果状态码不是 200,则引发 HTTPError 异常
data = response.()
if data["code"] == "0":
return data["data"]
else:
print(f"API Error: {data['msg']}")
return None
except requests.exceptions.RequestException as e:
print(f"Request Error: {e}")
return None

if __name__ == "__main__":
btc_usdt_candles = get_candles("BTC-USDT", "1H", limit=5) # 获取 5 条 1 小时 K 线数据
if btc_usdt_candles:
print(f"BTC-USDT 1H Candles (Last 5):")
for candle in btc_usdt_candles:
# candle 数据格式: [时间戳, 开盘价, 最高价, 最低价, 收盘价, 成交量]
timestamp, open_price, high_price, low_price, close_price, volume = candle
readable_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(timestamp) / 1000)) # 将毫秒级时间戳转换为可读时间
print(f"Time: {readable_time}, Open: {open_price}, Close: {close_price}, Volume: {volume}")
else:
print("Failed to retrieve BTC-USDT candles.")

该脚本使用了 try...except 块来处理可能发生的请求异常,例如网络连接问题或 API 错误。 response.raise_for_status() 方法用于检查 HTTP 响应状态码,并在状态码不是 200 OK 时引发异常。如果 API 返回错误码,脚本会打印错误消息。时间戳从毫秒转换为秒时,除以 1000.0 以确保浮点数运算,防止截断。

代码解释:

  1. 定义 get_candles 函数,该函数用于从交易所获取K线(Candlestick)数据。它接受三个关键参数: inst_id (交易对ID,例如"BTC-USDT"), bar (K线周期,例如"1h"表示1小时),和 limit (返回K线数量的上限)。 这些参数允许用户灵活地指定要获取的K线数据的交易品种、时间粒度和数量。
  2. 构造 API 请求 URL 和参数。函数会基于交易所提供的API文档,构建完整的API请求URL,通常包括基础URL和特定的API端点。同时,将 inst_id , bar , 和 limit 等参数以查询字符串的形式添加到URL中,以便交易所服务器能够正确地处理请求。API密钥和其他认证信息也可能包含在请求头中,确保请求的合法性。
  3. 使用 requests.get 发送 GET 请求。 Python的 requests 库被用来发送HTTP GET请求到构造好的API URL。GET请求是一种常用的HTTP方法,用于从服务器请求数据。 requests.get 方法会返回一个 response 对象,其中包含服务器的响应数据,包括HTTP状态码、响应头和响应内容。
  4. 使用 response.raise_for_status() 检查 HTTP 状态码。 为了确保API请求成功,代码会调用 response.raise_for_status() 方法。该方法会检查HTTP状态码,如果状态码表示错误(例如400、404、500等),则会抛出一个HTTPError异常,从而可以及时发现并处理API调用失败的情况。如果状态码是200(表示成功),则该方法不会做任何操作。
  5. 将 JSON 响应解析为 Python 字典。 交易所通常以JSON格式返回API响应数据。代码使用 response.() 方法将JSON响应内容解析为Python字典,方便后续的数据处理。解析后的字典包含了K线数据以及其他相关信息,例如时间戳、开盘价、最高价、最低价、收盘价和交易量等。
  6. 检查 API 返回的 code 是否为 "0"。 一些交易所会在JSON响应中包含一个 code 字段,用于表示API调用是否成功。代码会检查 code 字段的值是否为 "0"(或者其他表示成功的代码)。如果 code 不为 "0",则表示API调用失败,代码会抛出一个异常或者返回一个错误信息。
  7. 如果 API 调用成功,返回 data 字段中的 K 线数据。 如果API调用成功,交易所返回的K线数据通常包含在 data 字段中。代码会提取 data 字段中的数据,并将其作为函数的结果返回。返回的K线数据通常是一个列表,每个元素代表一个K线,包含时间戳、开盘价、最高价、最低价、收盘价和交易量等信息。
  8. if __name__ == "__main__": 代码块中,调用 get_candles 函数获取 BTC-USDT 的 5 条 1 小时 K 线数据,并打印。 if __name__ == "__main__": 是一个Python常用的代码块,用于判断当前脚本是否作为主程序运行。如果是,则执行该代码块中的代码。在该代码块中,调用 get_candles 函数,并传入 "BTC-USDT" 作为 inst_id ,"1h" 作为 bar ,5 作为 limit ,从而获取BTC-USDT的最近5条1小时K线数据。获取到的数据会被打印到控制台,方便用户查看。
  9. 将返回的时间戳转换为可读的时间格式。 交易所返回的时间戳通常是Unix时间戳,表示从1970年1月1日0时0分0秒到当前时间的秒数。为了方便阅读,代码会将Unix时间戳转换为可读的时间格式,例如 "YYYY-MM-DD HH:MM:SS"。这可以通过Python的 datetime 模块来实现。转换后的时间格式更容易理解,方便用户分析K线数据。