OKEx API掘金指南:3分钟上手,开启自动化交易新纪元!

OKEx API 设置

OKEx (现称为OKX) API 提供了访问其交易平台数据和执行交易指令的强大而灵活的接口。 开发者可以利用 API 构建自动化交易机器人、进行市场分析、管理账户等。 本文将深入探讨 OKEx API 的设置,包括密钥生成、权限配置、以及一些常用 API 端点的使用。

API 密钥生成与管理

使用 OKEx API 的首要步骤是生成并妥善管理 API 密钥。 这些密钥是您的应用程序安全访问 OKEx 账户的凭证,允许应用程序在无需共享您的账户密码的情况下执行操作。 API 密钥通过身份验证和授权机制,确保只有经过授权的应用程序才能访问您的账户。

  1. 登录 OKEx 账户: 您需要登录您的 OKEx 账户。 如果您尚未拥有账户,请先完成注册流程,并进行必要的身份验证,以确保账户的安全性和合规性。注册完成后,请务必设置强密码并启用两步验证。
  2. 访问 API 设置页面: 成功登录后,导航至 OKEx 平台上的 API 设置或 API 管理页面。 该页面通常位于账户设置、个人资料设置或安全设置部分。具体位置可能因 OKEx 平台界面的更新而有所变化。请仔细查找相关选项。
  3. 创建新的 API 密钥: 在 API 设置页面,找到并点击 "创建 API 密钥" 或类似的按钮。 此操作将启动 API 密钥创建流程,您需要按照提示进行操作。
  4. 命名您的 API 密钥: 为新创建的 API 密钥指定一个具有描述性的名称。 选择一个能够清晰反映该密钥用途的名称至关重要,尤其是在您管理多个 API 密钥时。 建议使用易于识别且与应用程序功能相关的名称,例如 "TradingBot_V1"、"MarketData_API" 或 "PortfolioManager_Readonly"。
  5. 设置 API 权限: 这是 API 密钥配置过程中至关重要的一步。 您需要根据应用程序的实际需求,精确设置 API 密钥的权限范围。 OKEx API 通常提供以下几种类型的权限:
    • 只读 (Read): 此权限允许您的应用程序读取市场数据,例如实时价格、历史交易记录、深度数据等。 还允许应用程序读取您的账户余额、持仓信息以及交易历史记录。 拥有只读权限的 API 密钥无法执行任何交易操作。
    • 交易 (Trade): 此权限允许您的应用程序执行包括下单、取消订单、修改订单等交易操作。 请谨慎授予此权限,确保您的应用程序经过充分测试,并且代码逻辑正确,以避免意外交易或资金损失。 在使用交易权限前,请务必了解 OKEx 的交易规则和手续费结构。
    • 提币 (Withdraw): 此权限允许您的应用程序从您的 OKEx 账户提币。 强烈建议您避免为任何不必要的应用程序授予此权限,以最大程度地降低安全风险。 仅在您完全信任该应用程序,并且确有提币需求时,才应考虑授予此权限。 开启此权限需要进行严格的安全验证。

    在设置权限时,请务必遵循最小权限原则,即仅授予应用程序所需的最小权限。 避免授予过多的权限,以降低潜在的安全风险。例如,如果您的应用程序仅用于监控市场行情,则只需授予 "只读" 权限。 如果您的应用程序是用于自动化交易的机器人,则需要授予 "交易" 权限,并可能需要配置交易参数,例如交易对、交易数量等。

  6. 绑定 IP 地址 (可选): 为了进一步增强 API 密钥的安全性,您可以选择将 API 密钥绑定到一个或多个特定的 IP 地址。 这样,即使您的 API 密钥泄露,未经授权的 IP 地址也无法使用该密钥访问您的账户。 建议您将 API 密钥绑定到运行应用程序的服务器的 IP 地址或您常用的 IP 地址。 请注意,如果您的 IP 地址发生变化,您需要更新 API 密钥的 IP 地址绑定设置。
  7. 获取 API 密钥: 成功创建 API 密钥后,OKEx 平台将会显示您的 API Key(也称为 Public Key)、Secret Key(也称为 Private Key)以及 Passphrase(如果设置)。 务必妥善保管这些信息,特别是 Secret Key,因为它拥有对您账户的控制权。 强烈建议您将这些信息存储在安全的位置,例如加密的密钥管理系统或硬件钱包中。 切勿将这些信息存储在公共位置,例如 GitHub 仓库、公共云存储服务或公开可访问的服务器上。 对于 Passphrase,如果设置了,也要确保其安全性,它通常作为 API 访问的附加验证因素。
  8. 启用 Google 验证器/2FA: 为了最大程度地保障您的 OKEx 账户安全,强烈建议您启用 Google 验证器或其他形式的两步验证 (2FA)。 这将在您登录账户或执行敏感操作时,要求您输入一个由 2FA 应用生成的动态验证码。 即使您的 API 密钥泄露,攻击者也需要获取您的 2FA 验证码才能访问您的账户,从而大大提高了账户的安全性。

API 端点与请求

OKEx API 提供了一系列功能丰富的端点,旨在便捷地访问实时的市场数据、高效地管理账户资产以及精确地执行各类交易指令。 这些端点通过标准化的接口,为开发者和交易者提供了强大的工具,以便于构建自动化交易策略和数据分析应用。以下是一些常用的 API 端点,并附带更详尽的说明:

  • /api/v5/market/tickers: 此端点用于批量获取所有交易对的最新价格信息。返回数据包含了每个交易对的最新成交价、24 小时最高价、24 小时最低价、24 小时成交量等关键指标,是进行市场概览和趋势分析的重要数据来源。适用于需要监控多个交易对整体表现的场景。
  • /api/v5/market/ticker: 通过此端点,可以获取指定交易对的详细最新价格信息。除了最新成交价,还会返回买一价、卖一价、成交量、开盘价、涨跌幅等更全面的数据,方便用户进行更精确的交易决策。必须指定交易对的名称作为参数。
  • /api/v5/market/depth: 该端点提供指定交易对的实时深度数据,即买单和卖单的挂单情况。 通过分析深度数据,可以了解市场的买卖力量对比,评估价格支撑和阻力位,从而辅助交易策略的制定。通常会提供多个价格档位的挂单量,形成买卖盘口。
  • /api/v5/market/trades: 此端点用于获取指定交易对的最新成交记录。每一条成交记录包含成交时间、成交价格、成交数量以及买卖方向等信息。通过分析成交记录,可以了解市场的活跃程度和价格波动情况。返回数据通常按照时间倒序排列。
  • /api/v5/account/balance: 该端点允许用户查询其账户余额信息。 返回数据包含各种币种的可用余额、冻结余额以及总余额。 对于程序化交易和资产管理至关重要。需要进行身份验证才能访问。
  • /api/v5/trade/order: 使用此端点可以提交新的交易订单。 订单类型包括限价单、市价单、止损单等。 需要指定交易对、交易方向 (买入或卖出)、数量、价格等参数。 成功提交订单后,会返回订单 ID。
  • /api/v5/trade/cancel-order: 此端点用于取消尚未成交的订单。 需要提供要取消的订单的 ID。 成功取消订单后,会返回确认信息。 用于在市场行情变化时快速调整交易策略。
  • /api/v5/trade/orders-pending: 通过此端点,可以获取所有未成交的订单列表。 返回数据包含订单 ID、交易对、订单类型、价格、数量、订单状态等详细信息。 方便用户监控和管理其挂单情况。
  • /api/v5/trade/history-orders: 该端点提供用户的历史订单记录。 可以根据时间范围、交易对等条件进行筛选。 返回数据包含订单的各种信息,用于交易分析和历史记录查询。

每个 API 端点都要求提供特定参数,这些参数用于指定请求的具体内容,例如交易对名称、订单类型、数量等。API 返回的数据通常采用 JSON 格式,这是一种轻量级的数据交换格式,易于解析和处理。在使用 API 时,务必仔细阅读 API 文档,了解每个端点的参数要求和返回数据格式,以便正确地构建请求和解析返回数据。

API 请求的结构:

OKX API 请求通常包含以下关键部分,这些部分共同构建了一个完整的请求,以便与 OKX 交易所的服务器进行交互并获取所需的数据或执行相应的操作:

  • URL: API 端点的完整 URL,它是请求的目标地址,精确地指定了要访问的 API 功能。例如: https://www.okx.com/api/v5/market/tickers 用于获取市场交易对的行情数据。URL 包含了协议(HTTPS)、域名(www.okx.com)、API 版本(v5)以及具体的资源路径(market/tickers)。
  • HTTP 方法: 用于指示请求的类型和目的,常见的 HTTP 方法包括:
    • GET :用于从服务器获取数据,通常用于查询操作,例如获取市场行情、账户信息等。
    • POST :用于向服务器提交数据,通常用于创建或更新资源,例如下单、提币等。
    • PUT :用于更新服务器上的资源,需要提供完整的资源信息。
    • DELETE :用于删除服务器上的资源。
  • Headers: 包含 HTTP 头部信息,用于传递额外的请求参数和身份验证信息。重要的 Headers 包括:
    • Content-Type :指定请求体的 MIME 类型,例如 application/ 表示请求体是 JSON 格式的数据。
    • OK-ACCESS-KEY :您的 API 密钥,用于身份验证。
    • OK-ACCESS-SIGN :使用您的密钥和请求参数生成的签名,用于验证请求的完整性和真实性。
    • OK-ACCESS-TIMESTAMP :请求的时间戳,用于防止重放攻击。
    • OK-ACCESS-PASSPHRASE :您的 Passphrase,是 API 密钥的附加安全层。
  • Body(可选): 对于某些 HTTP 方法(例如 POST PUT ),请求体 (Body) 包含要发送到服务器的数据。请求体的数据格式通常为 JSON,包含了执行特定操作所需的参数。例如,在下单请求中,Body 可能包含交易对、下单方向、数量、价格等参数。需要注意的是,Body 的内容必须符合 API 文档中规定的格式和要求。

API 签名:

为了保障API请求的安全性,防止恶意篡改和未经授权的访问,所有API请求都必须进行签名验证。API签名本质上是一个基于您的Secret Key和请求参数生成的加密哈希值。OKEx及其他许多交易所普遍采用HMAC-SHA256算法来生成这种签名,因为它具有良好的安全性和抗碰撞性。生成的签名必须作为HTTP Header的一部分发送到服务器,以便服务器进行验证。

生成有效API签名的详细步骤如下:

  1. 构造规范化的消息字符串: 需要创建一个规范化的消息字符串,作为HMAC-SHA256哈希算法的输入。这个字符串的构造至关重要,任何细微的差异都会导致签名验证失败。通常包括以下几个部分,并按照指定的顺序连接:
    • 请求方法(HTTP Method): 使用大写形式的HTTP请求方法,例如 "GET" 或 "POST"。
    • API 端点 (API Endpoint): 不包含域名的API路径,例如 "/api/v5/account/balance"。
    • 查询参数(Query Parameters): 如果是GET请求,需要将所有查询参数按照字母顺序排列,并将它们按照 key=value&key=value 的格式拼接成字符串。需要注意URL编码问题,确保特殊字符被正确编码。
    • 请求体(Request Body): 如果是POST/PUT/PATCH等请求,且请求体是JSON格式,需要将JSON字符串原封不动地包含进来。注意,JSON字符串的顺序必须与客户端发送时完全一致,任何顺序的改变都会导致签名失败。
    • 时间戳(Timestamp): 通常是一个Unix时间戳,代表请求发送的时间。这个时间戳用于防止重放攻击,服务器通常会拒绝时间戳过旧的请求。
    需要注意的是,不同的交易所可能对消息字符串的构造方式有细微的差别,需要仔细阅读API文档。
  2. HMAC-SHA256 哈希计算: 使用您的Secret Key作为密钥,对构造好的消息字符串进行HMAC-SHA256哈希运算。这是一个单向散列函数,可以生成一个固定长度的哈希值。不同的编程语言提供了不同的HMAC-SHA256库,需要根据自己的编程语言选择合适的库。务必确保Secret Key的安全性,切勿泄露给他人。
  3. Base64 编码: 将HMAC-SHA256哈希算法生成的二进制哈希值进行Base64编码。Base64编码是一种将二进制数据转换为ASCII字符串的编码方式,方便在HTTP Header中传输。 经过Base64编码后的字符串就是最终的API签名。

示例(Python):

以下代码展示了如何使用Python生成签名并发送API请求,以获取OKX交易所的市场行情数据。 需要安装 hashlib hmac base64 time requests 库。

import hashlib
import hmac
import base64
import time
import requests
import 

定义您的API密钥、密钥和密码。 强烈建议将这些敏感信息存储在环境变量中,而不是直接在代码中硬编码。 确保 YOUR_PASSPHRASE 与您在OKX交易所设置的密码短语一致。 如果您没有设置密码短语,请将其留空。

api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"  # 如果您设置了 Passphrase

generate_signature 函数用于生成请求的数字签名。 它接受时间戳、HTTP方法、请求路径以及可选的请求正文作为输入。 该函数使用HMAC-SHA256算法对包含这些参数的字符串进行哈希处理,并使用您的密钥作为密钥。 然后,将生成的哈希值进行Base64编码,并将其返回作为字符串。

def generate_signature(timestamp, method, request_path, body=None):
    message = timestamp + method + request_path
    if body:
        message += body
    mac = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
    d = mac.digest()
    return base64.b64encode(d).decode()

为了构造签名,需要当前的时间戳。 时间戳必须是自Unix纪元以来的秒数。 HTTP方法在本例中为"GET",请求路径为"/api/v5/market/tickers",用于获取所有交易对的行情。

timestamp = str(int(time.time()))
method = "GET"
request_path = "/api/v5/market/tickers"

调用 generate_signature 函数来创建签名,将时间戳、方法和请求路径传递给它。

signature = generate_signature(timestamp, method, request_path)

创建一个包含必要的身份验证标头的字典。 OK-ACCESS-KEY 标头设置为您的API密钥。 OK-ACCESS-SIGN 标头设置为您生成的签名。 OK-ACCESS-TIMESTAMP 标头设置为时间戳。 OK-ACCESS-PASSPHRASE 标头设置为您的密码短语(如果已设置)。 Content-Type 标头设置为 "application/",表明请求正文将是JSON格式。

headers = {
    "OK-ACCESS-KEY": api_key,
    "OK-ACCESS-SIGN": signature,
    "OK-ACCESS-TIMESTAMP": timestamp,
    "OK-ACCESS-PASSPHRASE": passphrase,  # 如果您设置了 Passphrase
    "Content-Type": "application/"
}

构造完整的URL,将基本URL "https://www.okx.com" 与请求路径连接起来。

url = "https://www.okx.com" + request_path

使用 requests.get 函数向OKX API发送GET请求。 将URL和标头作为参数传递给函数。 如果需要发送POST请求以及JSON格式的请求体, 可以参考以下示例:


# For POST requests with a body:
# body = .dumps({"param1": "value1", "param2": "value2"})
# signature = generate_signature(timestamp, method, request_path, body)
# headers["OK-ACCESS-SIGN"] = signature
# response = requests.post(url, headers=headers, data=body)

发送请求后,您可以使用 response.text 属性访问响应的内容(通常是JSON格式的字符串),或者使用 response.() 方法将其解析为Python字典。

response = requests.get(url, headers=headers)

打印响应的内容。 这将显示从API返回的市场行情数据。 使用 response.status_code 检查HTTP状态码, 以确保请求成功(200 OK)。 如果状态码不是200, 则表明出现了问题, 您应该检查错误消息并采取适当的措施。

print(response.text)
# 或者,如果响应是JSON:
# print(response.())

API 使用注意事项

  • 频率限制: OKEx API 对请求频率有限制,旨在保护系统稳定性和防止滥用。一旦超过频率限制,API 将返回错误代码,您的请求将被拒绝。因此,在设计 API 客户端时,务必参考 OKEx 官方文档中关于不同端点的具体频率限制说明,并据此调整您的请求频率。可以考虑实现速率限制器,例如令牌桶算法或漏桶算法,以平滑请求流量。 了解不同类型的 API 请求(例如公共数据和私有账户数据)可能有不同的限制,并相应地进行调整。
  • 错误处理: 您的应用程序需要具备健壮的错误处理机制,以应对 API 返回的各种错误。OKEx API 返回的错误代码和消息,通常包含问题的详细信息,可以帮助您快速诊断问题。建议您实现详细的错误日志记录,以便于排查和调试。对于常见的错误,例如无效的 API 密钥或参数错误,可以提供用户友好的错误提示。同时,可以考虑使用重试机制来处理瞬时错误,例如网络连接问题或服务器过载,但要注意避免无限循环重试。
  • 数据格式: OKEx API 返回的数据通常是 JSON 格式,这是一种轻量级的数据交换格式。您的应用程序需要使用合适的 JSON 解析库(例如 Python 中的 `` 模块或 JavaScript 中的 `JSON.parse()`)来解析这些数据。考虑到 API 响应可能包含大量数据,建议使用流式解析或增量解析技术来提高解析效率,并减少内存占用。要确保您的应用程序能够正确处理各种 JSON 数据类型,包括字符串、数字、布尔值和数组。
  • 安全: 务必妥善保管您的 API 密钥,切勿将其泄露给他人,因为这可能导致您的账户被盗用。 不要将 API 密钥存储在版本控制系统中或公共代码仓库中。 强烈建议使用环境变量或密钥管理服务来存储和管理 API 密钥。 定期轮换您的 API 密钥也是一个良好的安全习惯,可以降低密钥泄露的风险。同时,启用 OKEx 提供的双因素身份验证 (2FA) 功能,以增强账户的安全性。
  • 文档: OKEx 提供了详尽的 API 文档,这是您使用 API 的重要参考资料。您应该仔细阅读文档,深入了解 API 的使用方法、各个端点的功能、请求参数、响应格式、以及错误代码的含义。 文档包含了所有可用端点的详细信息,参数说明,以及示例代码,涵盖了各种编程语言。 熟悉文档可以帮助您避免常见的错误,并充分利用 API 的各项功能。 经常查看更新的文档以了解最新的 API 功能和更改。
  • 测试环境: OKEx 通常会提供一个测试环境 (sandbox),这是一个模拟真实交易环境的平台,您可以利用它来测试您的应用程序,而无需使用真实资金。 强烈建议您在将代码部署到生产环境之前,在测试环境中进行充分的验证和测试,以确保其稳定性和正确性。 测试环境可以帮助您发现潜在的错误和问题,并避免在真实交易中造成损失。 注意测试环境中的数据可能与真实环境有所不同,因此在部署到生产环境之前,需要进行额外的验证。
  • WebSocket API: 除了 REST API,OKEx 还提供了 WebSocket API,用于实时订阅市场数据和账户更新。 WebSocket API 提供了更低的延迟和更高的吞吐量,适用于需要实时数据的应用程序,例如交易机器人和实时行情显示。 通过 WebSocket API,您可以接收到实时的价格变动、成交信息、订单状态更新等。 但是,使用 WebSocket API 需要建立持久连接,并处理连接断开和重连的情况。 仔细阅读 OKEx WebSocket API 的文档,了解其使用方法和限制。

常见问题

  • API 密钥泄露怎么办? 一旦发现 API 密钥泄露,必须采取紧急措施。 立即在 OKX 平台上禁用泄露的 API 密钥,并立即生成一套全新的 API 密钥对,包括新的 API 密钥和密钥。 泄露的 API 密钥可能被恶意行为者利用,导致资产损失或账户被盗用。 务必详细检查您的 OKX 账户交易历史和活动日志,密切关注是否存在任何未经授权或异常的活动。 如果发现可疑交易或其他未经授权的操作,立即联系 OKX 客服部门报告情况并寻求进一步的帮助。 为防止将来再次发生密钥泄露事件,请采取额外的安全措施,例如使用强密码管理工具安全地存储 API 密钥,避免将密钥硬编码到代码中,并定期轮换您的 API 密钥。
  • API 请求返回 "429 Too Many Requests" 错误怎么办? API 请求返回 "429 Too Many Requests" 错误表明您已经超过了 OKX API 的频率限制。 OKX 为了保证平台的稳定性和可用性,对 API 请求的频率进行了限制。 您应该首先降低您的 API 请求频率,减少在单位时间内发送的请求数量。 如果您需要更高的频率限制,可以联系 OKX 客服部门,提交申请并说明您的需求。 在申请时,请详细说明您的使用场景、预期的请求量以及您将如何遵守平台的 API 使用条款。 OKX 客服会根据您的具体情况进行评估,并决定是否批准您的申请。 同时,请务必查阅 OKX 官方 API 文档,了解不同 API 端点的具体频率限制,以便更好地控制您的请求频率。
  • API 签名错误怎么办? API 签名错误是使用 OKX API 时常见的错误之一。 为了确保 API 请求的安全性,OKX 使用签名机制来验证请求的完整性和真实性。 要解决 API 签名错误,首先要仔细检查您的 API 密钥、时间戳、请求方法(例如 GET 或 POST)、API 端点(例如 /api/v5/account/balance )和请求参数是否正确无误。 确保所有参数都按照 OKX 官方文档的要求进行格式化和编码。 请确保您使用了正确的哈希算法(例如 SHA256)和编码方式(例如 Base64)来生成签名。 不同的哈希算法和编码方式会生成不同的签名结果。 您可以参考 OKX 官方文档提供的签名示例代码,仔细比对您的代码,找出差异并进行修正。 请检查您的时间戳是否与 OKX 服务器的时间同步。 时间戳的偏差过大也会导致签名验证失败。
  • 如何获取我的账户余额? 您可以使用 /api/v5/account/balance 端点来获取您的 OKX 账户余额信息。 这是一个 REST API 端点,您需要使用 HTTP GET 请求来访问它。 在请求中,您需要提供有效的 API 密钥和签名,以进行身份验证。 API 返回的数据通常是 JSON 格式,包含了您账户中不同币种的余额信息,包括可用余额、冻结余额等。 请务必阅读 OKX 官方 API 文档,了解该端点的详细参数和返回值的说明。
  • 如何下单? 您可以使用 /api/v5/trade/order 端点来在 OKX 平台上进行下单操作。 这是一个 REST API 端点,您需要使用 HTTP POST 请求来发送订单。 在请求中,您需要提供必要的订单参数,例如交易对 (例如 BTC-USDT)、订单类型 (例如市价单或限价单)、订单方向 (买入或卖出)、数量和价格 (如果是限价单)。 同样,您需要提供有效的 API 密钥和签名,以进行身份验证。 API 返回的数据会包含订单的 ID 和状态信息。 请务必仔细阅读 OKX 官方 API 文档,了解该端点的所有可用参数和返回值的说明,并确保您提供的参数符合平台的交易规则。

通过仔细设置和正确使用 OKX API,您可以构建强大的应用程序,在 OKX 交易平台上进行自动化交易、程序化交易和数据分析。 例如,您可以编写程序自动执行交易策略、监控市场行情、获取历史数据或集成到您的交易机器人中。 请务必认真参考 OKX 官方 API 文档,并始终遵循安全最佳实践,例如使用强密码、启用双重验证、定期审查 API 密钥权限,以确保您的应用程序的稳定性和安全性,并保护您的账户和资产安全。