欧易API教程:立即打造你的量化交易机器人!

欧易交易所 API 使用方法

欧易(OKX)交易所提供了一套强大的应用程序编程接口 (API),允许开发者以编程方式访问交易所的数据和功能。这使得用户能够创建自己的交易机器人、自动化交易策略、进行数据分析以及集成欧易的功能到第三方应用程序中。本文将详细介绍欧易交易所 API 的使用方法,涵盖账户创建、API 密钥申请、API 调用方式以及常见问题等方面。

一、准备工作:注册账户与申请 API 密钥

在使用欧易 API 之前,必须完成账户注册、KYC认证和API密钥的申请与配置。 这些准备工作是访问欧易交易所数据和执行交易操作的基础。

  1. 注册欧易账户: 如果尚未拥有欧易账户,请访问欧易官方网站 (okx.com) 进行注册。注册时,需要提供常用的邮箱地址或手机号码,并设置安全的登录密码。
  2. 身份验证 (KYC): 完成账户注册后,务必进行身份验证 (KYC)。KYC 验证分为不同等级,更高级别的验证通常能解锁更高的 API 访问权限和更宽松的交易限额。根据您的需求选择适合的KYC等级进行验证。
  3. 启用API: 成功登录欧易账户后,进入用户中心或账户设置页面,查找 "API" 或 "API Management" 选项。在大多数交易所中,此选项通常位于安全设置或账户设置的子菜单下。
  4. 创建 API 密钥: 在 API 管理页面,可以创建新的 API 密钥。每个 API 密钥都应根据其用途进行命名,以便于管理和跟踪。创建密钥时,必须设置以下关键参数:
    • API 名称: 为 API 密钥设置一个清晰且具有描述性的名称,例如 "MyTradingBot_v1" 或 "PortfolioTracker"。这有助于区分不同的 API 密钥,尤其是在您拥有多个应用程序或策略时。
    • Passphrase: Passphrase 是 API 密钥的额外安全层,用于加密签名请求。务必选择一个强密码,并将其安全存储。Passphrase 在生成API请求签名时,和Secret Key配合使用,如果遗忘需要重新生成API Key。
    • 权限设置: 这是创建 API 密钥过程中至关重要的一步。欧易 API 提供了多种权限级别,必须根据应用程序的具体需求选择最小权限原则。常见的权限类型包括:
      • 只读 (Read Only): 允许访问公开市场数据,例如实时行情、历史K线数据、交易对信息、订单簿深度等。此权限不允许进行任何交易操作。
      • 交易 (Trade): 允许进行下单、撤单、修改订单等交易操作。请谨慎授予此权限,并确保应用程序具有完善的风控机制。
      • 资金 (Funds): 允许进行提现、转账、充值等资金操作。此权限具有最高的风险,应仅在必要时授予,并采取严格的安全措施。

      强烈建议仅授予应用程序所需的最低权限,降低潜在的安全风险。例如,如果应用程序仅用于监控市场行情,则只需授予 "只读" 权限,切勿授予不必要的交易或资金权限。

    • IP限制 (IP Address Whitelist): 为了增强安全性,可以限制 API 密钥只能从特定的 IP 地址访问。这意味着只有来自指定 IP 地址的请求才会被授权。如果不确定应用程序的 IP 地址,可以暂时留空,但在生产环境中强烈建议配置 IP 白名单,限制API密钥的使用范围。可以使用如VPN或者云服务器等方式,获取固定IP地址。
  5. 获取 API 密钥信息: 成功创建 API 密钥后,将获得以下重要信息:
    • API Key: API Key 是用于识别您的身份的唯一标识符,类似于用户名。每个 API Key 对应一个账户,用于验证API请求的合法性。
    • Secret Key: Secret Key 是用于生成请求签名的私钥,类似于密码。必须妥善保管 Secret Key,绝对不能泄露给他人。

    务必安全存储 API Key、Secret Key 和 Passphrase。如果密钥泄露,立即撤销该 API 密钥并创建一个新的密钥。启用二次验证 (2FA) 可以提高账户的整体安全性。定期审查 API 密钥的权限和使用情况,及时撤销不再使用的密钥。

二、API 调用方式

欧易 API 支持 REST 和 WebSocket 两种调用方式,分别满足不同的数据获取和交易需求。REST API 适用于对数据准确性要求高,实时性要求不高的场景,而 WebSocket API 则适用于需要实时数据的场景,如高频交易。

  1. REST API: REST API 采用标准的 HTTP 请求方式,允许开发者使用各种编程语言和 HTTP 客户端库进行调用。欧易 REST API 采用 JSON 格式作为数据交换的载体,保证数据传输的通用性和易解析性。
    • API Endpoint: 欧易 REST API 的根 endpoint 是 https://www.okx.com/api/v5 。所有 API 请求都必须以该 endpoint 作为起始地址。使用正确的 endpoint 是成功调用 API 的前提。
    • HTTP 方法: 欧易 REST API 使用不同的 HTTP 方法来执行不同的操作,每个方法对应着不同的数据操作语义。
      • GET : 用于从服务器获取数据,不会对服务器数据产生修改。常用于查询市场行情、账户信息等。
      • POST : 用于向服务器提交数据,常用于创建新的资源,例如下单、创建提币请求等。
      • PUT : 用于更新服务器上已存在的资源,需要提供完整的资源信息。常用于修改订单等。
      • DELETE : 用于删除服务器上的资源。常用于撤销订单、删除地址等。
    • 请求头 (Headers): 在 HTTP 请求头中包含必要的信息,用于身份验证、指定数据格式等。
      • OK-ACCESS-KEY : 您的 API Key,用于标识您的账户。请妥善保管您的 API Key,防止泄露。
      • OK-ACCESS-SIGN : 您的请求签名,用于验证请求的真实性和完整性。签名可以防止请求被篡改。
      • OK-ACCESS-TIMESTAMP : 当前时间戳(UTC 秒数),用于防止重放攻击。时间戳的有效性通常有时间窗口限制。
      • OK-ACCESS-PASSPHRASE : 您的 Passphrase,用于增强安全性。Passphrase 通常用于加密敏感数据。
      • Content-Type : application/ (如果请求体包含 JSON 数据)。指定请求体的格式,服务器会根据该类型进行解析。
    • 请求签名 (Signature): 请求签名通过加密算法,对请求的关键信息进行加密,保证请求的安全性。

      signature = base64(HMAC-SHA256(timestamp + method + requestPath + body, secretKey))

      计算签名的过程如下:

      • timestamp : 当前时间戳(UTC 秒数)。保证请求的时效性。
      • method : HTTP 方法(例如 GET POST )。确保服务器知道请求的操作类型。
      • requestPath : API 请求的路径(例如 /api/v5/market/tickers )。指定请求的具体 API 接口。
      • body : 请求体(如果请求体包含 JSON 数据)。包含了请求的具体参数。
      • secretKey : 您的 Secret Key,用于加密计算签名。必须保密,切勿泄露。
  2. WebSocket API: WebSocket API 提供了双向的实时数据流通道,客户端和服务器可以实时地发送和接收数据。适用于对实时性要求高的场景,例如行情推送、订单更新等。
    • WebSocket Endpoint: 欧易 WebSocket API 的 endpoint 分为公共频道和私有频道。 wss://ws.okx.com:8443/ws/v5/public (公共频道) 提供无需身份验证的公开数据,例如市场行情。 wss://ws.okx.com:8443/ws/v5/private (私有频道) 提供需要身份验证的私有数据,例如账户信息和订单信息。
    • 订阅频道: 连接到 WebSocket API 后,需要订阅感兴趣的频道才能接收数据。每个频道对应着特定的数据类型。订阅通过发送 JSON 消息实现。

      { "op": "subscribe", "args": [ { "channel": "tickers", "instId": "BTC-USDT" } ] }

      在这个例子中,客户端订阅了 tickers 频道,并且指定了 instId BTC-USDT ,表示订阅 BTC-USDT 的市场行情数据。 频道名称和 instId 需要根据 API 文档进行正确设置。

    • 身份验证: 访问私有频道需要进行身份验证,确保只有授权用户才能访问敏感数据。身份验证的过程与 REST API 类似,需要提供 API Key、签名和时间戳等信息,并通过 JSON 消息发送到服务器。签名算法与 REST API 保持一致。

三、常见 API 调用示例

以下是一些常见的欧易 API 调用示例,使用 Python 语言和 requests 库。 这些示例展示了如何通过 API 获取市场数据和执行交易操作,为开发者提供快速入门的参考。务必替换示例代码中的占位符 (例如 YOUR_API_KEY , YOUR_SECRET_KEY , YOUR_PASSPHRASE ) 为您自己的实际 API 密钥和密码。

  1. 获取 BTC-USDT 的市场行情:
  2. 此示例演示如何获取 BTC-USDT 交易对的最新市场行情数据,包括最新成交价、买一价、卖一价、24 小时成交量等信息。 通过调用 /api/v5/market/tickers 接口,可以实时监控市场动态。

    
    import requests
    import time
    import hmac
    import hashlib
    import base64
    import 
    
    api_key = "YOUR_API_KEY"
    secret_key = "YOUR_SECRET_KEY"
    passphrase = "YOUR_PASSPHRASE"
    
    def generate_signature(timestamp, method, request_path, body):
        message = timestamp + method + request_path + body
        mac = hmac.new(secret_key.encode("utf-8"), message.encode("utf-8"), hashlib.sha256)
        d = mac.digest()
        return base64.b64encode(d).decode("utf-8")
    
    timestamp = str(int(time.time()))
    method = "GET"
    request_path = "/api/v5/market/tickers?instId=BTC-USDT"
    body = ""
    signature = generate_signature(timestamp, method, request_path, body)
    
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "Content-Type": "application/"
    }
    
    url = "https://www.okx.com/api/v5/market/tickers?instId=BTC-USDT"
    response = requests.get(url, headers=headers)
    
    print(response.())
    

    代码解释:

    • api_key , secret_key , passphrase : 需要替换成您在OKX交易所申请到的API Key,Secret Key和Passphrase。
    • generate_signature 函数:用于生成API请求的签名,以确保请求的安全性。签名过程包括将时间戳、请求方法、请求路径和请求体组合成一个字符串,然后使用 Secret Key 进行 HMAC-SHA256 加密,最后进行 Base64 编码。
    • timestamp :当前时间戳,单位为秒。
    • method :请求方法,这里是 "GET"。
    • request_path :API 请求的路径,这里是获取 BTC-USDT 市场行情的接口。
    • body :请求体,对于 GET 请求,通常为空字符串。
    • headers :包含 API Key、签名、时间戳和 Passphrase 的请求头。 Content-Type 被设置为 application/ , 虽然这里实际上没有发送JSON数据,但为了保持一致性和避免潜在的问题,建议保留此设置。
    • url :API 请求的完整 URL。
    • response = requests.get(url, headers=headers) :发送 GET 请求并获取响应。
    • print(response.()) :打印响应的 JSON 数据。
  3. 下单 (限价单):
  4. 此示例演示如何通过 API 下一个限价单。 限价单是指用户指定价格和数量,只有当市场价格达到或优于指定价格时才会成交的订单。 通过调用 /api/v5/trade/order 接口,可以实现自动交易策略。

    
    import requests
    import time
    import hmac
    import hashlib
    import base64
    import 
    
    api_key = "YOUR_API_KEY"
    secret_key = "YOUR_SECRET_KEY"
    passphrase = "YOUR_PASSPHRASE"
    
    def generate_signature(timestamp, method, request_path, body):
        message = timestamp + method + request_path + body
        mac = hmac.new(secret_key.encode("utf-8"), message.encode("utf-8"), hashlib.sha256)
        d = mac.digest()
        return base64.b64encode(d).decode("utf-8")
    
    timestamp = str(int(time.time()))
    method = "POST"
    request_path = "/api/v5/trade/order"
    body = .dumps({
        "instId": "BTC-USDT",
        "tdMode": "cash",
        "side": "buy",
        "ordType": "limit",
        "sz": "0.001",
        "px": "20000"
    })
    signature = generate_signature(timestamp, method, request_path, body)
    
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "Content-Type": "application/"
    }
    
    url = "https://www.okx.com/api/v5/trade/order"
    response = requests.post(url, headers=headers, data=body)
    
    print(response.())
    

    代码解释:

    • api_key , secret_key , passphrase : 同样需要替换成您自己的API Key,Secret Key和Passphrase。
    • generate_signature 函数:与获取市场行情示例中的签名函数相同,用于生成API请求的签名。
    • timestamp :当前时间戳,单位为秒。
    • method :请求方法,这里是 "POST"。 POST方法用于向服务器提交数据。
    • request_path :API 请求的路径,这里是下单接口。
    • body :请求体,包含下单的参数,例如:
      • instId :交易对,这里是 "BTC-USDT"。
      • tdMode :交易模式,"cash" 表示现货交易。
      • side :交易方向,"buy" 表示买入。
      • ordType :订单类型,"limit" 表示限价单。
      • sz :下单数量,这里是 0.001 BTC。
      • px :下单价格,这里是 20000 USDT。
    • headers :包含 API Key、签名、时间戳和 Passphrase 的请求头。 Content-Type 设置为 application/ ,因为请求体是一个 JSON 字符串。
    • url :API 请求的完整 URL。
    • response = requests.post(url, headers=headers, data=body) :发送 POST 请求并获取响应。 data=body 将JSON格式的请求体发送到服务器。
    • print(response.()) :打印响应的 JSON 数据。 响应数据会包含订单ID等信息,可用于后续查询订单状态。

四、错误处理

在使用欧易API进行交易或数据查询时,可能会遇到各种错误。欧易API会返回不同的HTTP状态码和JSON格式的错误信息,开发者需要根据这些信息来正确地处理错误,保证程序的稳定性和可靠性。

常见的错误代码包括:

  • 400 : 请求参数错误。这表示客户端发送的请求中包含了无效的参数,例如参数格式错误、缺少必要参数或参数值超出允许范围。您需要仔细检查请求参数,确保符合API文档的要求。详细的错误信息通常会包含在返回的JSON中,说明哪个参数存在问题。
  • 401 : 身份验证失败。这表示API密钥无效、过期或没有权限访问所请求的资源。请确保您使用的API密钥正确,并且已经启用了相应的权限。如果您最近更新了API密钥,请确保在您的应用程序中也进行了相应的更新。检查您的IP地址是否在API密钥的允许IP列表中。
  • 403 : 禁止访问。通常由于IP地址未添加到白名单导致,或您的账户权限不足,无法访问特定接口。
  • 429 : 超过请求频率限制。为了保护API的稳定性和可用性,欧易API对请求频率进行了限制。如果您在短时间内发送了过多的请求,就会收到此错误。您可以通过减少请求频率、使用批量请求或实现请求队列来解决此问题。某些接口可能拥有不同的限速策略,需要仔细阅读API文档。
  • 500 : 服务器内部错误。这表示欧易服务器内部发生了未知的错误。这种错误通常是临时的,您可以稍后重试。如果错误持续发生,请联系欧易的技术支持。
  • 503 : 服务不可用。表明欧易服务器目前无法处理该请求,通常是由于服务器维护或过载引起。建议稍后重试。

除了上述常见的错误代码之外,欧易API还可能返回其他错误代码,具体取决于不同的API接口和请求情况。您可以参考欧易 API 文档了解更多详细的错误代码信息,以及针对每种错误代码的处理建议。API文档通常会提供更详细的错误描述、错误示例和解决方案,帮助您更好地理解和处理API错误。同时,建议在您的应用程序中添加适当的错误处理机制,例如日志记录、重试机制和异常处理,以便更好地应对API错误。

五、API 文档

欧易交易所提供了一套全面的应用程序编程接口(API),允许开发者以编程方式访问和管理其平台上的各种功能。这些功能包括但不限于交易下单、查询账户信息、获取市场数据、管理资金划转等等。 为了帮助开发者更好地理解和使用这些 API,欧易提供了详细的 API 文档,您可以在欧易官方网站上的“开发者中心”或相关页面找到最新的 API 文档。

API 文档是开发者使用欧易 API 的重要参考资料。它包含了所有可用 API 接口的详细说明,针对每个接口都提供了清晰的请求示例、参数解释和响应格式。具体来说,文档详细描述了每个 API 接口的用途、HTTP 请求方法(如 GET、POST、PUT、DELETE)、所需的请求参数(包括数据类型、是否必填、取值范围等)、响应数据的结构(JSON 格式或其他格式)以及可能返回的错误代码及其含义。 一些高级 API 文档可能还会包含身份验证和授权的说明,以及速率限制等相关信息。开发者应仔细阅读 API 文档,以便正确地构建 API 请求和处理 API 响应,确保应用程序能够与欧易平台进行有效的交互。

内容版权声明:除非注明,否则皆为本站原创文章。

出处:https://www.add666.com/news/492798.html