限时教程!3分钟掌握MEXC API交易 | 附Python代码

发布:2025-03-24 11:53:38 阅读:122

MEXC API 指南

简介

MEXC API 提供了程序化访问 MEXC 全球交易所的强大接口,使开发者能够以前所未有的效率和灵活性,构建和部署各种金融应用。通过 MEXC API,开发者可以创建复杂的交易机器人,实现高效的自动化交易策略,实时获取全面的市场数据,并无缝集成 MEXC 的交易功能到自己的平台或应用中。它极大地扩展了交易的可能性,超越了手动交易的限制。

MEXC API 广泛应用于量化交易、算法交易、市场数据分析、风险管理以及自动化投资组合管理等多个领域。开发者可以利用 API 提供的各种功能,例如:下单、撤单、查询订单状态、获取实时价格、历史交易数据、账户余额信息等,构建个性化的交易解决方案。MEXC API 支持多种编程语言,包括 Python、Java、Node.js 等,并提供详细的文档和示例代码,方便开发者快速上手。

本指南旨在全面介绍 MEXC API 的核心概念、详细使用方法以及必要的安全注意事项。我们将深入探讨 API 的认证机制、请求结构、响应格式,以及各种常见 API 接口的用法。我们还将重点强调 API 使用过程中的风险控制和安全措施,帮助开发者安全、高效地利用 MEXC API 实现自己的交易目标。理解并熟练掌握 MEXC API,是进入程序化交易世界的关键一步。

API 密钥

在使用 MEXC API 之前,必须先生成 API 密钥。API 密钥是访问和控制您的 MEXC 账户及执行相关操作的关键凭证。它由两个密切相关的字符串组成: apiKey (也常被称为 accessKey ) 和 secretKey apiKey 的作用类似于您的用户名或账户标识符,用于向 MEXC 服务器表明请求的来源和所属账户。每当您发送 API 请求时,都需要包含 apiKey ,以便服务器能够识别您的身份并验证您是否有权执行相应的操作。 secretKey 则更为重要,它相当于您的密码或私钥,用于对 API 请求进行数字签名。数字签名是一种加密技术,可以验证请求的真实性和完整性,防止请求在传输过程中被篡改或伪造。为了保障账户安全,请务必妥善保管您的 secretKey ,切勿泄露给任何第三方,并定期更换,以降低安全风险。未经授权访问您的 secretKey 可能会导致资金损失或其他严重后果。每个API Key都具有不同的权限,您可以根据您的实际需求进行设置,以满足您的交易策略。 记住,API密钥是您访问MEXC API的凭证,务必谨慎管理。

如何生成 API 密钥:

  1. 登录你的 MEXC 账户。访问 MEXC 官方网站,使用您的用户名和密码进行安全登录。建议启用双重验证 (2FA) 以增强账户安全性。
  2. 前往 API 管理页面。登录后,导航至 API 管理页面。此页面通常位于用户个人中心、账户设置或类似的选项下。具体位置可能因 MEXC 平台更新而略有不同。
  3. 创建新的 API 密钥。在 API 管理页面,点击“创建 API 密钥”、“生成新密钥”或类似的按钮。系统会提示您为新的 API 密钥设置名称或备注,以便于您日后识别和管理。
  4. 设置 API 密钥的权限。创建 API 密钥后,您需要为其分配特定的权限。这些权限决定了 API 密钥可以执行的操作,例如:
    • 只读 (Read-Only): 允许访问账户信息和市场数据,但不能进行任何交易或提现操作。
    • 交易 (Trade): 允许进行买卖交易。
    • 提现 (Withdraw): 允许从账户中提取资金。 请勿轻易开启此权限,除非您完全信任使用此 API 密钥的应用程序或服务。
    务必谨慎设置权限,仅授予所需的权限,以降低安全风险。 最小权限原则是保障 API 密钥安全的最佳实践。
  5. 保存你的 apiKey secretKey 。API 密钥生成后,系统会显示 apiKey (公钥) 和 secretKey (私钥)。 apiKey 用于标识您的账户,而 secretKey 用于验证您的身份。 请务必妥善保管你的 secretKey ,不要泄露给任何人,也不要存储在不安全的地方。 强烈建议将 secretKey 存储在加密的数据库或安全的密钥管理系统中。如果 secretKey 泄露,恶意用户可能会利用它来访问您的账户并进行未经授权的操作。

    重要提示: 某些情况下, secretKey 只会显示一次。如果您未能及时保存,您可能需要重新生成 API 密钥。

API 接口类型

MEXC API 提供两种类型的接口,满足不同交易场景的需求,开发者可以根据自身应用选择合适的接口类型:

  • REST API: 基于标准的 HTTP 协议,通过发送 HTTP 请求(GET, POST, PUT, DELETE 等)到指定的 API 端点来获取数据或执行操作。每个请求都是独立的,服务器在处理完请求后会立即返回响应。REST API 适用于大多数场景,例如:
    • 市场数据查询: 获取指定交易对的最新价格、交易量、历史K线数据等。
    • 交易操作: 下单(市价单、限价单)、撤单、修改订单等。
    • 账户信息查询: 查询账户余额、持仓信息、交易历史等。
    • 资金划转: 进行币币账户和合约账户之间的资金划转。
    REST API 的优点在于其易用性和广泛的兼容性,几乎所有编程语言都支持 HTTP 请求。
  • WebSocket API: 基于 WebSocket 协议,建立客户端和服务器之间的持久连接,实现双向实时数据传输。一旦连接建立,服务器可以主动向客户端推送数据,而无需客户端发送请求。WebSocket API 适用于对实时性要求极高的场景,例如:
    • 实时行情推送: 接收交易对的最新成交价、买一价、卖一价、深度等数据,毫秒级更新。
    • 实时订单状态更新: 接收订单的最新状态(已提交、已成交、已撤销等)通知,无需轮询查询。
    • 实时账户信息更新: 接收账户余额、持仓信息的实时变动通知。
    WebSocket API 能够显著降低延迟和服务器负载,提高数据传输效率,为高频交易和量化交易提供强大的支持。 需要注意的是,使用 WebSocket API 通常需要维护一个长连接,并处理断线重连等问题。

REST API 接口

1. 请求方式:

MEXC REST API 允许开发者通过标准的 HTTP 请求方式与平台交互,进行数据查询和交易操作。支持以下几种常用的 HTTP 请求方法:

  • GET : 用于从服务器获取资源。通常用于查询市场数据、账户信息等只读操作,不会对服务器上的数据产生修改。请求参数通常附加在 URL 后面,例如 /api/v3/ticker/price?symbol=BTCUSDT
  • POST : 用于向服务器提交数据,通常用于创建新的资源。例如,可以使用 POST 请求提交订单。请求参数通常包含在请求体中。
  • PUT : 用于更新服务器上的现有资源。需要提供资源的完整表示,通常用于更新特定资源的所有属性。
  • DELETE : 用于删除服务器上的资源。例如,可以用于取消订单。

选择合适的 HTTP 请求方式对于确保 API 调用的语义正确性至关重要。请仔细阅读 MEXC API 文档,了解每个 API 端点支持的请求方式,并根据需要选择最合适的请求方式。错误的使用 HTTP 方法可能导致请求失败或产生意外的结果。例如,尝试使用 GET 方法提交订单将会失败,因为 GET 方法不应该用于修改服务器上的数据。

2. 请求头部:

为了保证与MEXC API的安全可靠通信,每个请求都必须严格包含以下头部信息。这些头部信息对于服务器验证请求的合法性以及正确处理请求至关重要:

  • Content-Type : application/

    指定请求体的格式为JSON(JavaScript Object Notation)。这是RESTful API的标准数据交换格式,易于解析和处理。务必设置为 application/ ,确保服务器能够正确解析请求体中的数据。

  • X-MEXC-APIKEY : 你的 apiKey

    这是你的API密钥,用于身份验证。API密钥允许MEXC服务器识别你的身份,并授权你访问相应的API接口。请务必妥善保管你的API密钥,避免泄露,以防止未经授权的访问。API密钥通常在MEXC交易所的API管理页面生成,并与你的账户相关联。每个账户可以拥有多个API密钥,方便进行权限管理。请注意,API密钥区分大小写。

缺少或不正确的头部信息将导致请求失败,并返回相应的错误代码。请确保在发送API请求时,正确设置了所有必需的头部信息。

3. 请求签名:

为了确保API请求的安全性与完整性,防止恶意篡改或未经授权的访问,您需要对每个请求进行数字签名。数字签名机制利用加密算法,验证请求的来源和内容,从而保证交易的安全性。以下是详细的签名流程:

  • 参数排序: 收集所有需要发送的请求参数,包括但不限于API密钥、时间戳、交易参数等。按照参数名称的字母升序进行排序。务必保证所有参数都参与签名,否则会导致签名验证失败。特殊字符无需编码,直接参与排序。
  • 参数连接: 将排序后的参数名和参数值用等号( = )连接起来,形成键值对。然后,将这些键值对之间用 & 符号连接,组成一个完整的参数字符串。注意,参数值需要进行URL编码,以确保特殊字符的正确传输。例如,如果参数包含空格、特殊符号或非ASCII字符,则必须对其进行编码。
  • HMAC-SHA256 签名: 使用您的 secretKey (密钥)作为密钥,对上一步生成的参数字符串进行 HMAC-SHA256 算法签名。HMAC-SHA256 是一种消息认证码算法,它结合了哈希函数和密钥,能够有效地验证数据的完整性和来源。 secretKey 必须妥善保管,切勿泄露,否则可能导致安全风险。
  • 十六进制转换与添加签名: 将 HMAC-SHA256 算法签名后的结果转换为十六进制字符串。然后,将此十六进制字符串作为一个新的参数添加到请求参数中,参数名为 signature 。将包含签名的完整参数集作为请求发送给服务器。服务器收到请求后,会使用相同的步骤计算签名,并与请求中的签名进行比对。如果签名一致,则说明请求未被篡改且来自可信来源。

示例 (Python):

以下代码展示了如何使用 Python 发送经过身份验证的 API 请求,该请求使用了 API 密钥、API 密钥以及 HMAC-SHA256 签名。本示例使用了 hashlib , hmac , time , requests , 和 urllib.parse 等库。

hashlib 提供了各种安全哈希和消息摘要算法,包括 SHA-256。 hmac 模块用于使用密钥进行哈希运算,以生成消息认证码。 time 模块用于获取当前时间戳,这通常是 API 请求参数的一部分。 requests 库是一个流行的 HTTP 客户端库,使得发送 HTTP 请求变得简单。 urllib.parse 提供了用于解析和构建 URL 的工具,在这里用于 URL 编码参数。

import hashlib
import hmac
import time
import requests
import urllib.parse

generate_signature 函数使用 API 密钥和参数字符串生成请求签名。签名用于验证请求的完整性和真实性。

def generate_signature(api_secret, params_string):
    """
    生成签名.

    Args:
        api_secret: API 密钥.
        params_string: 参数字符串.

    Returns:
        签名字符串.
    """
    hmac_obj = hmac.new(api_secret.encode('utf-8'), params_string.encode('utf-8'), hashlib.sha256)
    signature = hmac_obj.hexdigest()
    return signature

该函数首先创建一个 HMAC 对象,使用 API 密钥作为密钥,参数字符串作为消息。然后,它使用 SHA-256 算法计算 HMAC 摘要,并将结果以十六进制字符串的形式返回。编码确保API密钥和参数字符串使用 UTF-8 编码,这是一种常用的字符编码,可以处理各种字符集。

send_request 函数使用给定的参数发送 API 请求。该函数处理构造请求、添加必要的头部、生成签名以及发送请求。它支持 GET 和 POST 方法。错误处理也通过检查HTTP状态码来实现。

def send_request(api_key, api_secret, method, url, params=None):
    """
    发送 API 请求.

    Args:
        api_key: API 密钥.
        api_secret: API 密钥.
        method: HTTP 请求方式 (GET, POST, etc.).
        url: API endpoint URL.
        params: 请求参数 (字典).

    Returns:
        API 响应 (JSON 格式).
    """
    headers = {
        'Content-Type': 'application/',
        'X-MEXC-APIKEY': api_key
    }

    if params is None:
        params = {}

    timestamp = int(time.time() * 1000)
    params['timestamp'] = timestamp

    # 参数排序并拼接字符串
    sorted_params = sorted(params.items())
    params_string = urllib.parse.urlencode(sorted_params)

    # 生成签名
    signature = generate_signature(api_secret, params_string)
    params['signature'] = signature

    if method == 'GET':
        response = requests.get(url, headers=headers, params=params)
    elif method == 'POST':
        response = requests.post(url, headers=headers, =params)  # 使用 =params 发送 JSON 数据
    else:
        raise ValueError("Unsupported HTTP method: {}".format(method))

    response.raise_for_status()  # 检查 HTTP 状态码是否成功 (2xx)

    return response.()

设置请求头,包括 Content-Type X-MEXC-APIKEY Content-Type 设置为 application/ 指示请求体是 JSON 格式。 X-MEXC-APIKEY 头传递 API 密钥。如果未提供参数,则创建一个空字典。时间戳添加到参数中以确保请求的时效性,防止重放攻击。参数按字母顺序排序,并使用 urllib.parse.urlencode 进行 URL 编码。然后,使用 generate_signature 函数生成签名,并将签名添加到参数中。如果请求方法是 GET,则使用 requests.get 发送请求,并将参数作为查询字符串传递。如果请求方法是 POST,则使用 requests.post 发送请求,并将参数作为 JSON 数据传递。 response.raise_for_status() 检查 HTTP 状态码,如果状态码不是 2xx,则引发异常。将 API 响应作为 JSON 数据返回。

示例用法:获取服务器时间

为了与MEXC服务器进行时间同步,您可以调用 /api/v3/time 接口。获取准确的服务器时间对于确保您的交易策略和时间戳的正确性至关重要,尤其是在高频交易或程序化交易中。请务必将 YOUR_API_KEY YOUR_API_SECRET 替换为您实际的API密钥和密钥。

api_key = "YOUR_API_KEY" # 替换为你的 API key
api_secret = "YOUR_API_SECRET" # 替换为你的 API secret
url = "https://api.mexc.com/api/v3/time"
method = "GET"

上述代码片段展示了如何配置API密钥、密钥以及请求的URL和方法。 api_key api_secret 用于身份验证,确保只有授权用户才能访问API。 url 指定了要调用的API端点,而 method 则指定了HTTP请求方法,此处为 GET ,表示获取数据。

try:
response = send_request(api_key, api_secret, method, url)
print(response)
except requests.exceptions.RequestException as e:
print("请求失败:", e)

此代码块使用 try-except 结构来处理潜在的网络请求错误。 send_request 函数(此处未定义,需要您自行实现)负责发送带有身份验证信息的HTTP请求。如果请求成功,服务器将返回包含服务器时间信息的JSON响应,并通过 print(response) 打印出来。如果请求失败(例如,由于网络问题或API密钥错误),则会捕获 requests.exceptions.RequestException 异常,并打印错误消息,帮助您进行故障排除。

4. 常用 REST API 接口:

  • /api/v3/time : 获取服务器时间。此接口用于同步客户端与服务器的时间,确保交易请求的有效性。返回的服务器时间戳通常以毫秒为单位。
  • /api/v3/depth : 获取深度数据,也称为订单簿信息。此接口提供指定交易对的买单和卖单的价格和数量信息,有助于分析市场供需情况。深度数据通常包含多个档位的买单和卖单,分别按照价格排序。
  • /api/v3/ticker/24hr : 获取指定交易对 24 小时内的交易量、价格变动等统计数据。返回的数据包括开盘价、最高价、最低价、收盘价、成交量、成交额、涨跌幅等关键指标,可用于评估市场活跃度和价格波动情况。
  • /api/v3/order : 下单接口,用于创建买入或卖出订单。调用此接口需要提供交易对、订单类型(市价单、限价单等)、买卖方向、数量和价格等参数。成功下单后,服务器会返回订单ID,用于后续的订单状态查询。
  • /api/v3/openOrders : 获取当前未成交的订单列表。此接口允许用户查询所有未完成的交易订单,可以根据交易对进行筛选。返回的信息包括订单ID、交易对、订单类型、价格、数量、下单时间等。
  • /api/v3/account : 获取账户信息,包括可用余额、冻结余额、总资产等。此接口用于查询用户的账户资金情况,通常需要进行身份验证才能访问。返回的信息可能包括不同币种的余额和资产估值。

5. 错误处理:

当与加密货币API交互时,错误处理至关重要。API请求失败通常表示出现问题,服务器会返回一个包含错误信息的JSON对象,以便开发者能够诊断并解决问题。这个JSON对象一般会包含以下关键字段:

  • 错误码(Error Code): 一个数字或字符串代码,指示错误的具体类型。不同的API提供商使用不同的错误码体系,因此务必查阅API的官方文档来了解每个错误码的含义。常见的错误码可能包括:
    • 400:客户端错误,表示请求格式错误或缺少必要的参数。
    • 401:未授权,表示缺少有效的身份验证凭据。
    • 403:禁止访问,表示服务器拒绝执行请求。
    • 404:未找到,表示请求的资源不存在。
    • 429:请求过多,表示客户端在短时间内发送了过多的请求,触发了速率限制。
    • 500:服务器内部错误,表示服务器遇到无法处理的错误。
  • 错误信息(Error Message): 一段人类可读的文本描述,解释错误的具体原因。错误信息对于调试和理解错误非常有用。
  • 错误类型(Error Type): 一个字符串,表示错误的大致分类,例如“验证错误”、“网络错误”或“服务器错误”。
  • 错误详情(Error Details,可选): 一个可选的字段,提供关于错误的更多详细信息,例如无效的参数或具体的错误堆栈跟踪。

你需要根据错误码和错误信息来准确判断错误的类型,并根据不同的错误类型采取相应的处理措施。例如:

  • 重试机制: 对于由于网络问题或服务器临时故障导致的错误(例如500错误),可以尝试进行重试。为了避免对服务器造成过大的压力,应该使用指数退避策略来增加重试之间的间隔时间。
  • 参数校验: 对于客户端错误(例如400错误),需要检查请求参数是否正确,并进行必要的修正。
  • 身份验证: 对于未授权错误(例如401错误),需要检查API密钥是否有效,并确保已正确设置身份验证信息。
  • 速率限制处理: 当遇到速率限制错误(例如429错误)时,需要暂停发送请求,并在一段时间后重试。可以通过查看API响应头中的 Retry-After 字段来确定等待时间。
  • 日志记录: 将错误信息记录到日志文件中,以便后续分析和调试。
  • 用户通知: 对于某些错误,可能需要向用户显示错误信息,以便他们了解发生了什么问题,并采取相应的操作。例如,如果用户输入的地址格式不正确,则需要显示一个友好的错误消息。

一些API还提供更高级的错误处理机制,例如错误报告和监控功能。利用这些功能可以帮助你及时发现和解决问题,提高应用程序的稳定性和可靠性。务必仔细阅读API提供商的文档,了解其错误处理策略和最佳实践。

WebSocket API 接口

1. 连接地址:

MEXC WebSocket API 提供实时数据流,开发者可以通过建立 WebSocket 连接来获取最新的市场信息。MEXC WebSocket API 的主连接地址为 wss://wbs.mexc.com/ws 。 该地址为所有 WebSocket 连接的入口点,客户端需要通过此地址发起连接请求。 为了确保连接的稳定性和安全性,建议开发者使用支持 WebSocket 协议的客户端库,并妥善处理连接中断和重连机制。在连接建立后,客户端可以通过发送订阅消息来选择需要接收的数据类型,例如交易数据、深度数据、K线数据等。 MEXC 可能会根据网络状况和服务器负载对连接地址进行调整,建议开发者关注 MEXC 的官方公告,以便及时更新连接地址信息。 正确使用连接地址是成功接入 MEXC WebSocket API 的第一步,确保网络畅通和地址准确无误至关重要。

2. 数据格式:

MEXC WebSocket API 采用 JSON(JavaScript Object Notation)作为其主要的数据交换格式。这意味着所有通过 WebSocket 连接发送和接收的数据都将遵循 JSON 的结构化标准。JSON 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成,因此被广泛应用于 Web API 的开发中。 使用JSON格式可以确保数据在客户端和服务端之间高效、可靠地传输,同时提供良好的可扩展性和兼容性。

具体来说,这意味着:

  • 所有请求都应被格式化为有效的 JSON 对象。这包括交易订阅请求、身份验证请求以及其他任何发送到 MEXC WebSocket 服务器的消息。
  • 所有从 MEXC WebSocket 服务器返回的数据,例如实时市场数据(价格、交易量等)、账户信息更新、订单状态更新等,都将以 JSON 格式呈现。
  • JSON 对象通常包含键值对,其中键是字符串,值可以是字符串、数字、布尔值、数组或其他 JSON 对象,从而支持复杂的数据结构。
  • 开发者需要确保他们的客户端能够正确地解析和生成 JSON 数据,以便与 MEXC WebSocket API 进行无缝交互。许多编程语言都提供了内置或第三方库来处理 JSON 数据的序列化(将对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为对象)。

为了有效地使用 MEXC WebSocket API,开发者应该熟悉 JSON 格式的基本语法和数据类型。详细了解 MEXC API 返回的 JSON 结构的字段含义对于构建成功的交易应用程序至关重要。MEXC 官方文档会提供每个数据类型的详细 JSON 示例。

3. 订阅频道:实时数据流的接入点

要接收特定加密货币市场或交易对的实时更新,您需要订阅相应的频道。每个频道代表一个特定的数据流,例如交易深度、最新成交价或订单簿状态。订阅过程通过发送带有特定参数的 JSON-RPC 请求来完成。这种基于订阅的模式允许用户精确控制他们接收的数据类型,优化带宽使用并减少不必要的信息处理。

订阅请求的核心是一个 JSON 对象,它必须包含以下三个关键字段,以确保服务器能够正确解析和处理您的请求:

  • method : 此字段指定要执行的远程过程调用的名称。对于订阅操作,通常使用约定好的方法名称,例如 "subscribe" ,具体取决于所使用的 WebSocket API。仔细查阅API文档以确认正确的方法名称至关重要。
  • params : 这是一个包含订阅所需参数的数组。参数的具体内容取决于您想要订阅的频道。例如,订阅特定交易对的最新成交价可能需要指定交易对的代码(如 "BTC/USD" 或 "ETH/BTC")作为参数。不同的 API 可能会要求不同的参数格式,因此请务必参考相应的API文档。参数也可以包含多个,例如订阅多个交易对。
  • id : 这是一个由客户端生成的唯一标识符,用于将请求与服务器的响应相关联。当服务器返回订阅确认消息或后续的数据更新时,它将包含相同的 id 字段,使客户端能够识别响应对应于哪个订阅请求。 id 可以是数字、字符串或其他任何适合唯一标识请求的类型。

一个典型的订阅请求 JSON 对象可能如下所示(示例):


{
  "method": "subscribe",
  "params": ["trade.BTC-USDT"],
  "id": 12345
}

在这个例子中, method 是 "subscribe", params 是一个包含 "trade.BTC-USDT" 的数组(表示订阅 BTC/USDT 交易对的成交数据), id 是 12345。请注意,实际的 method params 值将取决于特定的加密货币交易所或数据提供商的 API 规范。

示例订阅行情频道:

订阅行情频道允许用户实时接收市场数据更新。以下是一个订阅现货交易对公开交易品种信息的示例请求,采用JSON格式,并通过WebSocket协议发送:


{
  "method": "SUBSCRIPTION",
  "params": [
    "[email protected]"
  ],
  "id": 1
}

字段解释:

  • method : 指定WebSocket请求的方法。 在此示例中, SUBSCRIPTION 表示订阅数据流。
  • params : 一个数组,包含订阅的参数。 在这里, "[email protected]" 是一个字符串,指示订阅现货市场所有公开交易对的交易品种信息。 交易所通常定义不同的频道名称 (如 [email protected] ) 用于订阅不同类型的数据。 更具体的频道名称可能包括 spot@ticker (单个交易对的ticker数据) 或 spot@depth5 (深度为5的订单簿)。请查阅具体的API文档以获取可用的频道列表。
  • id : 一个唯一的标识符,用于区分不同的请求。 通常为整数,方便客户端追踪请求的响应。 交易所会将此 id 包含在响应消息中。

注意事项:

  • 不同的加密货币交易所使用的频道命名规则可能不同。请务必参考交易所的官方API文档,了解其特定的订阅格式和频道名称。
  • 成功订阅后,服务器会持续推送市场数据更新,直到客户端取消订阅。
  • 客户端应当妥善处理接收到的数据,并根据 id 匹配请求和响应。
  • 一些交易所可能限制单个连接的订阅数量,或对请求频率进行限制。

4. 常用 WebSocket 频道:

  • [email protected] : 获取所有交易对的交易代码(symbol)信息。该频道提供交易所支持的所有交易对的列表,包括交易代码、基础货币、报价货币以及其他相关信息。 订阅此频道可以动态获取交易所支持的交易对,方便进行交易策略的开发和调整。
  • [email protected].[symbol] : 获取指定交易对的实时成交数据(Trade Data)。 例如: [email protected]_USDT 。 此频道提供每个成交订单的价格、数量和成交时间等信息,对于高频交易者和算法交易者来说至关重要,可以用于分析市场微观结构和捕捉瞬间交易机会。 [symbol] 必须替换为具体的交易对,例如 BTC_USDT
  • spot@depth.[symbol] : 获取指定交易对的深度数据(Order Book Depth)。例如: [email protected]_USDT 。 此频道提供买单和卖单的挂单价格和数量,可以用于分析市场供需关系和预测价格走势。深度数据通常分为多个层级,每个层级代表一个价格范围内的挂单总量。 [symbol] 必须替换为具体的交易对,例如 BTC_USDT 。订阅此频道可以了解市场买卖盘力量对比。
  • [email protected] : 接收订单更新信息(Order Updates)(需要 API Key 和 signature)。只有通过身份验证的用户才能订阅此频道。 该频道提供用户所有订单的状态更新,包括订单创建、订单成交、订单取消等信息。 订单更新信息对于用户监控交易状态和及时调整交易策略非常重要。
  • [email protected] : 接收成交更新信息(Trade Updates)(需要 API Key 和 signature)。 只有通过身份验证的用户才能订阅此频道。 该频道提供用户所有成交订单的详细信息,包括成交价格、成交数量、手续费等信息。成交更新信息对于用户分析交易历史和评估交易表现至关重要。

5. 认证:

为了确保私有频道的数据安全,例如订单更新、成交更新等,需要进行严格的认证流程。任何试图访问私有频道的客户端都必须提供有效的身份验证信息。认证请求的核心在于验证客户端的身份,以防止未经授权的访问和潜在的安全风险。

认证请求采用结构化的数据格式,通常包含以下关键字段: method params id method 字段指示认证所使用的方法或操作, id 字段用于唯一标识该请求,方便追踪和调试。

params 字段是认证的核心,它包含了用于验证身份的关键信息。具体来说,它需要包含以下三个必要的参数:你的 apiKey (API 密钥)、 signature (签名)和 timestamp (时间戳)。

apiKey 是分配给你的唯一标识符,用于识别你的账户。务必妥善保管你的 apiKey ,不要将其泄露给任何第三方。

signature 是使用你的 secretKey (密钥)对请求数据进行加密生成的数字签名。它的生成方式与 REST API 的签名生成方式完全相同,确保签名算法的一致性。 signature 用于验证请求的完整性和真实性,防止篡改和伪造。

timestamp 代表请求发送的时间,用于防止重放攻击。服务器会验证 timestamp 的有效性,以确保请求不是过期的或重复发送的。

总而言之,只有提供了正确 apiKey signature timestamp 的认证请求才能通过验证,并获得访问私有频道的权限。 请务必参考 REST API 的文档,了解关于 signature 生成的具体步骤和最佳实践。

示例 (Python):

以下 Python 代码展示了如何使用 websocket 库连接到加密货币交易所的 WebSocket API,进行身份验证并订阅公共和私有频道。该示例使用了 MEXC 交易所的 API,但可以进行修改以适应其他交易所。

导入必要的库:

import websocket
import 
import time
import hmac
import hashlib
import urllib.parse

websocket 库用于建立 WebSocket 连接。 库用于处理 JSON 格式的数据。 time 库用于获取时间戳。 hmac hashlib 库用于生成签名,以进行身份验证。 urllib.parse 库(尽管在此示例中未使用,但通常用于处理 URL 编码)。

定义一个函数来生成签名,该签名用于验证您的 API 密钥。签名使用 HMAC-SHA256 算法,将您的 API 密钥和时间戳进行哈希处理。

def generate_signature(api_secret, timestamp):
    param_str = f"accessKey={api_key}&timestamp={timestamp}"
    hmac_obj = hmac.new(api_secret.encode('utf-8'), param_str.encode('utf-8'), hashlib.sha256)
    signature = hmac_obj.hexdigest()
    return signature

创建 WebSocket 事件处理函数。 on_open 函数在 WebSocket 连接建立时调用:

def on_open(ws):
    print("WebSocket connection opened")

该函数打印一条消息到控制台,表明连接已成功建立。然后发送订阅消息,订阅公共频道以获取所有交易对的符号信息,并进行身份验证以订阅私有频道(订单更新)。

# 订阅公共频道 (获取所有交易对的symbol信息)
subscribe_message = {
    "method": "SUBSCRIPTION",
    "params": ["[email protected]"],
    "id": 1
}
ws.send(.dumps(subscribe_message))

# 认证并订阅私有频道 (订单更新)
timestamp = int(time.time() * 1000)
signature = generate_signature(api_secret, timestamp)
auth_message = {
    "method": "LOGIN",
    "params": {
        "accessKey": api_key,
        "signature": signature,
        "timestamp": timestamp
    },
    "id": 2
}
ws.send(.dumps(auth_message))

subscribe_orders_message = {
    "method": "SUBSCRIPTION",
    "params": ["[email protected]"],
    "id": 3
}
ws.send(.dumps(subscribe_orders_message))

公共频道 "[email protected]" 提供所有现货交易对的符号信息。私有频道 "[email protected]" 提供您的订单更新。请注意,访问私有频道需要身份验证。

on_message 函数在收到消息时调用:

def on_message(ws, message):
    print("Received message:", message)

该函数打印接收到的消息到控制台。 on_close 函数在 WebSocket 连接关闭时调用:

def on_close(ws):
    print("WebSocket connection closed")

该函数打印一条消息到控制台,表明连接已关闭。 on_error 函数在发生错误时调用:

def on_error(ws, error):
    print("WebSocket error:", error)

该函数打印错误消息到控制台。

在主程序中,替换 YOUR_API_KEY YOUR_API_SECRET 为您的实际 API 密钥和密钥。API 密钥和密钥用于验证您的身份并允许您访问私有频道。

if __name__ == "__main__":
    api_key = "YOUR_API_KEY"  # 替换为你的 API key
    api_secret = "YOUR_API_SECRET" # 替换为你的 API secret
    websocket_url = "wss://wbs.mexc.com/ws"

创建 WebSocketApp 对象,并将事件处理函数传递给它。然后调用 run_forever() 方法来启动 WebSocket 连接并保持运行。

ws = websocket.WebSocketApp(websocket_url,
                                     on_open=on_open,
                                     on_message=on_message,
                                     on_close=on_close,
                                     on_error=on_error)

ws.run_forever()

注意事项

  • 安全: API 密钥是访问您 MEXC 账户的凭证,务必像对待银行密码一样妥善保管。不要以任何方式泄露给任何人,包括不要在公共代码库(如 GitHub)中提交,不要在社交媒体或论坛上发布,也不要通过非加密的渠道传输。定期更换您的 API 密钥也是一个良好的安全习惯。考虑启用双因素认证 (2FA) 以增加账户安全性。
  • 频率限制: MEXC API 为了保证所有用户的服务质量,对请求频率施加了限制。 如果您在短时间内发送过多的请求,您的请求可能会被拒绝,并收到相应的错误代码。 请仔细阅读 MEXC API 文档,了解不同 API 端点的具体频率限制,并实施适当的重试机制和队列管理策略,避免超出限制。 在高频交易场景下,务必优化您的代码,减少不必要的 API 调用。
  • 精度: 在进行交易时,务必注意精度问题。 MEXC API 对交易数量和价格的精度有严格的要求。 提交的交易数量和价格必须符合交易所允许的最小单位和精度。 如果超出精度范围,交易可能会失败。 请仔细阅读 MEXC API 文档,了解不同交易对的精度要求,并在您的代码中进行适当的格式化和验证,确保数据的准确性。
  • 错误处理: 编写健壮的代码至关重要,能够妥善处理 API 返回的各种错误信息。 MEXC API 在遇到问题时会返回包含错误代码和错误信息的 JSON 响应。您的代码应该能够捕获这些错误,并根据错误类型采取相应的处理措施,例如重试、记录日志或通知用户。 完善的错误处理机制可以帮助您及时发现和解决问题,避免潜在的损失。
  • API 文档: 始终参考最新的 MEXC API 文档,以获取最准确的信息。 MEXC API 会不断更新和改进,新的功能和参数可能会被添加,旧的功能和参数可能会被弃用。 定期查阅最新的 API 文档,可以确保您的代码与最新的 API 版本兼容,并充分利用 API 提供的各种功能。 MEXC 官方网站通常提供最新的 API 文档和示例代码。
  • 测试: 在真实交易之前,务必使用 MEXC 提供的测试环境进行测试。 测试环境(也称为沙箱环境)与真实交易环境隔离,允许您在不承担任何经济风险的情况下测试您的交易策略和代码。 在测试环境中,您可以模拟各种交易场景,验证您的代码是否能够正确处理各种情况,并发现潜在的问题。 请务必在测试环境中进行充分的测试,然后再将您的代码部署到真实交易环境。
  • 资金安全: 充分了解你所使用的交易策略的风险,并采取适当的风险管理措施,对于保护您的资金安全至关重要。 任何交易策略都存在风险,包括市场风险、流动性风险和技术风险。 在使用任何交易策略之前,请务必对其进行充分的研究和评估,了解其潜在的风险和收益。 同时,采取适当的风险管理措施,例如设置止损单、控制仓位大小和分散投资,可以帮助您降低风险,保护您的资金安全。 不要将所有资金投入到单一交易策略中。