MEXC API交易指南:新手也能轻松玩转量化交易?【附Python代码】

本文详细介绍了MEXC交易所的API,包括REST API和WebSocket API的使用方法。通过Python代码示例,帮助开发者快速上手,实现自动化交易、获取市场数据等功能。 立即开始您的量化交易之旅!

抹茶 (MEXC) API 介绍

抹茶 (MEXC) 交易所提供一套全面的 API (应用程序编程接口),允许开发者以编程方式访问交易平台并执行各种操作。通过 MEXC API,用户可以自动化交易策略、获取市场数据、管理账户信息以及集成 MEXC 到现有的交易系统或应用程序中。

API 概览

MEXC API 主要分为两类,分别为 REST API 和 WebSocket API。 这两种 API 各有优势,适用于不同的应用场景。

  • REST API: RESTful API 是一种基于 HTTP 协议的应用程序编程接口,允许开发者通过发送 HTTP 请求(例如 GET, POST, PUT, DELETE)来获取数据和执行操作。这种 API 架构风格具有简单、易于理解和广泛支持的特点。在 MEXC 的场景下,REST API 适用于大多数场景,包括但不限于:
    • 获取历史和实时的市场数据,例如交易对的最新成交价、交易量、深度信息等。
    • 下达各种类型的订单,包括市价单、限价单、止损单等。
    • 查询账户信息,例如可用余额、持仓情况、订单历史等。
    • 管理账户,例如资金划转、API 密钥管理等。
    由于其通用性和易用性,REST API 是大多数应用程序与 MEXC 交易所交互的首选方式。
  • WebSocket API: WebSocket API 提供了一种全双工通信协议,允许服务器主动向客户端推送数据,而无需客户端发起请求。这种特性使得 WebSocket API 非常适合需要低延迟和实时数据流的应用程序。在 MEXC 的场景下,WebSocket API 主要用于:
    • 实时市场数据更新:例如,可以实时接收交易对的最新成交价、深度信息等,而无需频繁地轮询 REST API。
    • 账户状态推送:例如,可以实时接收订单成交、资金变动等通知,而无需手动查询账户信息。
    因此,WebSocket API 适用于需要低延迟数据流的应用程序,例如高频交易、程序化交易和实时监控系统。 开发者可以通过订阅特定的频道来接收所需的数据,从而实现高效的实时数据处理。

MEXC REST API 详解

MEXC REST API 是一种基于 HTTP 协议构建的应用程序编程接口,它允许开发者以编程方式访问和管理MEXC交易所的各种功能。该API利用标准的 HTTP 请求方法(如 GET、POST、PUT、DELETE)与服务器进行通信,并采用轻量级的数据交换格式 JSON (JavaScript Object Notation) 来传输数据。JSON 格式易于解析,并且在不同编程语言之间具有良好的兼容性,因此被广泛应用于Web API的开发。

API Endpoint 的基础 URL 是 https://api.mexc.com 。所有 API 请求都必须以此 URL 作为前缀,后面再附加具体的 API 路径和查询参数。例如,要获取市场上的交易对信息,您可能需要访问 https://api.mexc.com/api/v3/exchangeInfo 。不同的 API 版本可能会有不同的 URL 前缀,例如 /api/v3/ 指的是 API 的第三个版本。在使用 API 之前,务必查阅官方文档,确认正确的 URL 结构和版本信息,以确保请求能够正确路由到目标资源。

认证

为了安全地访问需要身份验证的 MEXC API 端点,您需要生成唯一的 API 密钥对,包括 API Key 和 Secret Key。 API Key 扮演着您的身份标识符的角色,而 Secret Key 则用于对您的请求进行数字签名,以此来保障请求的完整性和真实性,防止恶意篡改或伪造。

  • API Key: API Key 是在您的 MEXC 账户中创建的公钥,用于明确识别您的身份。您可以将其视为您的公开用户名,在每次 API 调用时声明您的身份。
  • Secret Key: Secret Key 是与您的 API Key 相对应的私钥,务必像保管您的银行密码一样安全地存储和保护它。Secret Key 用于生成用于验证请求的 HMAC-SHA256 签名,切勿泄露给任何第三方,否则可能导致您的账户面临安全风险。

所有需要进行身份验证的 API 请求都必须包含以下特定的 HTTP 头部信息,以便 MEXC 服务器能够正确地验证请求的来源和完整性:

  • X-MEXC-APIKEY : 此头部用于传递您的 API Key,让 MEXC 服务器能够识别请求的来源账户。确保将您的 API Key 正确地填入此头部。
  • X-MEXC-TIMESTAMP : 此头部包含当前 Unix 时间戳(以秒为单位)。时间戳用于防止重放攻击,确保请求的新鲜度。服务器会验证时间戳是否在可接受的范围内。
  • X-MEXC-SIGNATURE : 此头部包含使用您的 Secret Key 对请求参数进行 HMAC-SHA256 算法加密后生成的签名。签名是对请求数据的摘要,用于验证请求的完整性和真实性。服务器会使用相同的 Secret Key 和算法重新计算签名,并与此头部中的签名进行比较。如果签名匹配,则表明请求未被篡改,并且确实来自拥有相应 Secret Key 的用户。

签名计算

为了确保API请求的安全性和完整性,需要对请求进行签名。签名计算是验证请求是否来自可信来源的关键步骤。以下是详细的签名计算步骤:

  1. 参数排序: 收集所有参与签名的请求参数。这包括URL中的查询参数(Query Parameters)以及请求体(Request Body)中的参数。务必将这些参数都纳入考虑范围。然后,严格按照参数名称的字母顺序(区分大小写)对这些参数进行排序。例如,参数 timestamp 应该排在参数 token 之前。
  2. 参数拼接: 将排序后的参数以 key=value 的形式拼接成一个字符串。每个键值对之间使用等号 = 连接。如果某个参数的值为空,也需要包含该参数,例如 empty_param= 。然后,使用 & 符号将所有的键值对连接成一个长字符串。注意,URL编码(例如百分号编码)的参数值需要在拼接前进行解码。
  3. HMAC-SHA256加密: 使用您的 Secret Key 作为密钥,对拼接后的字符串进行HMAC-SHA256加密。 Secret Key 是您在API平台获得的唯一凭证,务必妥善保管,不要泄露。HMAC-SHA256是一种带有密钥的哈希算法,能够有效地验证数据的完整性和来源。
  4. 十六进制转换: 将HMAC-SHA256加密后的二进制结果转换为十六进制字符串。通常,您可以使用编程语言提供的相关函数或库来实现这一转换。确保使用统一的字符编码,例如UTF-8,以避免出现不一致的签名结果。将此十六进制字符串作为签名值,并通过特定的HTTP头部或查询参数传递给API服务器。

示例 (Python):

import hashlib import hmac import time import urllib.parse

def generate_signature(secret_key, params): """ 生成 MEXC API 请求签名。用于验证请求的合法性,防止恶意篡改。

API签名是基于您的Secret Key和请求参数计算出的HMAC-SHA256哈希值。在发送API请求时,需要将此签名包含在请求头或请求参数中。

Args:
    secret_key (str): 您的MEXC API Secret Key。请妥善保管您的Secret Key,切勿泄露给他人。
    params (dict):  包含所有请求参数的字典。参数必须是字符串类型。

Returns:
    str:  用于API请求的 HMAC-SHA256 签名(十六进制字符串)。

"""
# 1. 参数排序:将请求参数按照键的字母顺序进行排序。这是生成签名的重要步骤,确保每次使用相同的参数顺序生成相同的签名。
sorted_params = urllib.parse.urlencode(sorted(params.items()))

# 2. HMAC-SHA256 哈希:使用HMAC-SHA256算法,以您的Secret Key为密钥,对排序后的参数字符串进行哈希运算。
signature = hmac.new(
     secret_key.encode('utf-8'),  # 将Secret Key编码为UTF-8字节流
     sorted_params.encode('utf-8'), # 将排序后的参数字符串编码为UTF-8字节流
     hashlib.sha256 # 使用SHA256哈希算法
).hexdigest() # 将哈希结果转换为十六进制字符串

# 3. 返回签名:返回生成的HMAC-SHA256签名。
return signature

示例用法

在实际应用中,你需要将 YOUR_SECRET_KEY 替换为你真实的 API 密钥。 密钥的保密性至关重要,切勿将其泄露给任何第三方,以防止资产损失或其他安全风险。 以下代码段展示了如何构建请求参数,并使用 generate_signature 函数生成签名:


secret_key = "YOUR_SECRET_KEY"
params = {
    "symbol": "BTCUSDT",
    "side": "BUY",
    "type": "LIMIT",
    "quantity": 0.01,
    "price": 20000,
    "timestamp": int(time.time())
}

上述代码定义了一个包含交易参数的字典 params symbol 指定交易的交易对,例如 "BTCUSDT",表示比特币兑美元。 side 指定交易方向,可以是 "BUY"(买入)或 "SELL"(卖出)。 type 指定订单类型,例如 "LIMIT"(限价单)。 quantity 指定交易数量,即购买或出售的资产数量。 price 指定限价单的价格。 timestamp 指定请求的时间戳,通常以 Unix 时间表示,即自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。务必确保时间戳的准确性,否则可能导致签名验证失败。

接下来,调用 generate_signature 函数,使用你的密钥和参数生成签名。生成的签名将用于验证请求的真实性和完整性:


signature = generate_signature(secret_key, params)
print(f"签名: {signature}")

将生成的签名添加到请求头或请求参数中,并发送到交易所的 API 端点。交易所将使用该签名验证请求的有效性。 例如,可以将签名添加到 HTTP 请求头的 X-MBX-SIGNATURE 字段中。 请参考具体的交易所 API 文档,了解如何正确地添加和使用签名。

常用 API 端点

以下是一些常用的 REST API 端点,这些端点允许开发者与交易所进行交互,获取市场数据并执行交易操作:

  • GET /api/v3/exchangeInfo : 获取交易所的详细信息,包括所有交易对(交易品种)的列表、每个交易对的交易规则(如价格精度、数量精度、最小交易量)、服务器时间以及其它重要的交易所参数。此端点是开始集成 API 之前了解交易所规则的关键。
  • GET /api/v3/depth : 获取指定交易对的市场深度(订单簿)数据,包括买单和卖单的价格和数量。 可以指定 limit 参数来限制返回的订单数量,例如 limit=100 返回最佳的100个买单和卖单。此端点对于分析市场供需关系和进行高频交易至关重要。
  • GET /api/v3/trades : 获取指定交易对最近的成交记录,包括成交时间、价格、数量以及买卖方向。 可以指定 limit 参数来限制返回的成交记录数量。 此端点可以用于跟踪实时市场动态。
  • GET /api/v3/klines : 获取指定交易对的 K 线(蜡烛图)数据,K 线数据是指定时间周期内的开盘价、最高价、最低价和收盘价。 可以通过参数指定时间周期(例如 1m 表示 1 分钟,1h 表示 1 小时,1d 表示 1 天)和返回的 K 线数量。 此端点是技术分析的基础。
  • POST /api/v3/order : 提交新的交易订单。需要提供交易对、订单类型(市价单、限价单等)、买卖方向、数量和价格(如果适用)等参数。该端点需要进行身份验证,并具有相应的 API 权限。
  • GET /api/v3/order : 查询特定订单的状态,例如是否已成交、部分成交或已取消。需要提供订单 ID 作为参数。该端点需要进行身份验证,并具有相应的 API 权限。
  • DELETE /api/v3/order : 取消尚未完全成交的订单。需要提供订单 ID 作为参数。该端点需要进行身份验证,并具有相应的 API 权限。
  • GET /api/v3/account : 获取账户信息,包括可用余额、冻结余额以及其它账户相关的参数。该端点需要进行身份验证,并具有相应的 API 权限。 为了安全起见,API 密钥通常需要设置不同的权限,例如只读权限或交易权限。

请求示例 (Python)

以下代码演示了如何使用 Python 和 requests 库与 MEXC API 进行交互,以下单为例。 它包括必要的导入,以及一个用于创建订单的函数,并详细说明了函数的使用方法。

为了保障代码的正确运行,你需要安装 requests 库。可以使用以下命令安装: pip install requests

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

def create_order(api_key, secret_key, symbol, side, type, quantity, price):
    """
    使用 MEXC API 下订单。

    Args:
        api_key (str): 您的 API Key,用于身份验证。请确保妥善保管您的 API Key。
        secret_key (str): 您的 Secret Key,用于生成签名。请确保妥善保管您的 Secret Key。
        symbol (str): 交易对,例如 "BTCUSDT"。注意大小写敏感。
        side (str): 交易方向,只能是 "BUY" (买入) 或 "SELL" (卖出)。务必使用大写。
        type (str): 订单类型,可以是 "LIMIT" (限价单) 或 "MARKET" (市价单)。务必使用大写。
        quantity (float): 交易数量,即买入或卖出的数量。请注意最小交易数量限制。
        price (float): 订单价格,仅当订单类型为 "LIMIT" 时需要指定。

    Returns:
        dict: API 响应,包含订单信息,如订单 ID、状态等。如果请求失败,会抛出异常。

    Raises:
        requests.exceptions.HTTPError: 如果 API 请求返回错误状态码。
    """
    endpoint = "https://api.mexc.com/api/v3/order"  # MEXC API 订单endpoint
    timestamp = int(time.time() * 1000) # 获取当前时间戳,单位为毫秒。 MEXC 使用毫秒级时间戳。

    params = {
        "symbol": symbol,
        "side": side,
        "type": type,
        "quantity": quantity,
        "timestamp": timestamp
    }

    if type == "LIMIT":  # 仅限价单需要价格
        params["price"] = price
        params["timeInForce"] = "GTC" # 默认使用 GTC (Good Till Cancel) 策略,表示订单会一直有效,直到被完全执行或取消。

    signature = generate_signature(secret_key, params) # 使用私钥生成签名
    params["signature"] = signature

    headers = {
        "X-MEXC-APIKEY": api_key, # 在请求头中包含API Key
        "Content-Type": "application/" # 明确指定 Content-Type 为 application/
    }

    response = requests.post(endpoint, headers=headers, params=params)
    response.raise_for_status()  # 检查HTTP响应状态码,如果不是200,则抛出异常
    return response.()  # 将响应内容解析为JSON格式

重要提示:

  1. 安全 : 请务必保护好您的 API Key 和 Secret Key,不要泄露给任何人。
  2. 错误处理 : 上述代码仅为示例,实际使用中需要完善错误处理机制,例如处理网络错误、API 错误等。
  3. 限价 : MEXC API 有频率限制,请合理控制请求频率,避免触发限流。
  4. 最小交易数量 : 请注意每个交易对的最小交易数量限制。
  5. 签名生成 : generate_signature 函数的实现如下:

def generate_signature(secret_key, params):
    """
    生成 MEXC API 请求的签名。

    Args:
        secret_key (str): 您的 Secret Key。
        params (dict): 请求参数。

    Returns:
        str: 生成的签名。
    """
    query_string = urllib.parse.urlencode(params)
    signature = hmac.new(secret_key.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
    return signature

示例用法

要成功调用交易API,需要配置必要的API密钥和交易参数。以下代码展示了如何使用Python发起一个限价买单,你需要替换示例中的占位符信息。

api_key = "YOUR_API_KEY" # 你的API密钥,用于身份验证。
secret_key = "YOUR_SECRET_KEY" # 你的密钥,用于对请求进行签名。
symbol = "BTCUSDT" # 交易对,指定要交易的资产,这里是比特币兑美元。
side = "BUY" # 交易方向,指定是买入还是卖出。这里设置为买入。
type = "LIMIT" # 订单类型,这里设置为限价单,只有当市场价格达到指定价格时才会执行。
quantity = 0.001 # 交易数量,指定要买入的比特币数量。注意精度限制,不同交易所要求不同。
price = 25000 # 订单价格,指定你想买入比特币的价格。

以下代码演示了如何使用配置好的参数调用 create_order 函数并处理可能出现的异常。务必安装requests库,可以使用 pip install requests 命令进行安装。 create_order 函数具体实现需要根据交易所提供的API文档进行编写,通常涉及构建请求体、添加签名等步骤。

try:
order = create_order(api_key, secret_key, symbol, side, type, quantity, price) # 调用函数创建订单。
print(f"订单创建成功: {order}") # 如果订单创建成功,则打印订单信息。
except requests.exceptions.RequestException as e: # 捕获请求异常,例如网络错误、连接超时等。
print(f"订单创建失败: {e}") # 如果订单创建失败,则打印错误信息。

MEXC WebSocket API 详解

MEXC WebSocket API 允许开发者和交易者以高效且低延迟的方式接收实时的市场数据和账户状态更新。它基于 WebSocket 协议,该协议提供全双工通信通道,允许服务器主动推送数据到客户端,无需客户端重复请求,从而大幅降低网络延迟并提高数据传输效率。通过WebSocket API,用户可以实时获取包括但不限于以下信息:

  • 实时交易数据: 包括最新的交易价格、成交量、交易方向(买/卖)等。这对于高频交易者和算法交易者至关重要,他们需要快速响应市场变化。
  • 深度行情数据: 提供买单和卖单的详细信息,例如每个价格档位的挂单量。这有助于用户了解市场深度和流动性,从而做出更明智的交易决策。
  • K线数据: 提供不同时间周期的K线图数据,例如1分钟、5分钟、1小时、1天等。K线图是技术分析的重要工具,通过分析K线图,用户可以识别趋势、支撑位和阻力位。
  • 账户状态更新: 包括账户余额、持仓信息、委托单状态(已提交、已成交、已撤销)等。这允许用户实时监控自己的账户状态,并及时调整交易策略。

相比于传统的HTTP REST API,WebSocket API 的优势在于:

  • 实时性: 数据以推送方式实时更新,无需轮询,延迟更低。
  • 效率: 减少了不必要的HTTP请求头开销,提高了带宽利用率。
  • 连接持久性: 建立一次连接后可以持续接收数据,无需频繁建立和断开连接。

通过 MEXC WebSocket API, 用户可以构建各种应用,例如:

  • 自动化交易机器人: 基于实时市场数据和账户状态自动执行交易策略。
  • 实时行情监控工具: 实时展示市场数据和账户状态,帮助用户做出交易决策。
  • 数据分析平台: 收集历史市场数据,进行量化分析和回测。

连接

与MEXC WebSocket服务器建立稳定、高效的连接是实时获取市场数据和交易执行的基础。连接通过安全的WebSocket协议实现,其URL地址为 wss://wbs.mexc.com/ws wss:// 前缀表明连接是经过TLS加密的,确保数据传输的安全性。建立连接时,客户端(例如您的交易机器人或应用程序)需要向此URL发起WebSocket连接请求。成功建立连接后,服务器会保持连接打开,以便实时推送数据,无需客户端频繁发起新的请求。维护稳定的连接对于及时响应市场变化至关重要,尤其是在高频交易和量化交易场景下。强烈建议开发者实施心跳机制,定期向服务器发送消息以保持连接活跃,并实现自动重连逻辑,以便在连接中断时自动恢复连接,从而确保数据流的连续性和交易系统的可靠性。请务必检查您的防火墙设置和网络配置,确保 WebSocket 连接不会被阻止。

订阅

要接收实时数据更新,您需要向 WebSocket 服务器发送精心构造的订阅消息。订阅消息是基于 JSON 格式的对象,它指示服务器您希望接收哪些特定的数据流。务必确保 JSON 格式的正确性,避免出现语法错误,否则服务器可能无法正确解析您的请求。

订阅消息的核心在于清晰地表达您的订阅意图,它通常包含以下关键字段:

  • method :

    此字段定义了操作的类型,对于订阅而言,它通常被设置为 "SUBSCRIPTION" 。这个字段告诉服务器,您正在请求创建一个新的数据流订阅。不同的API可能使用不同的方法名称,请务必参考API文档。

  • params :

    params 字段包含一个数组,数组中的元素定义了具体的订阅参数。这些参数告诉服务器您希望订阅什么样的数据。例如, ["[email protected]:BTCUSDT"] 表示订阅 BTCUSDT 交易对的公共成交记录。 spot 通常表示现货市场, public.deals 指的是公开的成交信息,而 BTCUSDT 则指定了交易对。参数的格式和内容取决于不同的交易所和API,请务必查阅相关文档。

    不同的数据流类型可能需要不同的参数,例如,订阅深度数据可能需要指定深度级别,订阅K线数据可能需要指定时间周期。

  • id :

    id 字段是一个用于唯一标识消息的 ID。它可以是数字或字符串,用于区分不同的订阅请求。当服务器返回响应时,它会包含相同的 id 值,以便您将响应与相应的订阅请求关联起来。使用唯一的 id 值对于管理多个并发订阅至关重要,特别是当您需要取消订阅或跟踪订阅状态时。

在构建订阅消息时,请务必参考交易所或API提供商的官方文档,以确保您使用的参数和格式是正确的。错误的参数或格式可能导致订阅失败或接收到错误的数据。

常用订阅

以下是一些常用的 WebSocket 订阅,它们允许你实时接收市场数据和账户更新:

  • [email protected]: : 订阅特定交易对的成交记录。成交记录包含了该交易对每一笔成交订单的价格、数量和时间戳等信息,能够帮助你实时跟踪市场动态。例如,订阅 [email protected]:BTCUSDT 将会接收 BTCUSDT 交易对的实时成交数据。
  • [email protected]. : : 订阅特定交易对的 K 线数据。K 线图是技术分析中常用的工具,用于展示一段时间内的价格波动。 参数定义了 K 线的周期,可以是 "Min1" (1 分钟), "Min5" (5 分钟), "Min15" (15 分钟), "Min30" (30 分钟), "Min60" (1 小时), "Hour4" (4 小时), "Day1" (1 天), "Week1" (1 周), "Month1" (1 个月)。例如,订阅 [email protected]:ETHUSDT 将会接收 ETHUSDT 交易对的 5 分钟 K 线数据。
  • [email protected] : 订阅账户信息更新 (需要身份验证)。此订阅提供有关你的账户余额、可用资金和已冻结资金的实时更新。由于涉及个人账户信息,需要通过身份验证才能访问。
  • [email protected] : 订阅订单状态更新 (需要身份验证)。此订阅允许你实时跟踪订单的状态,包括订单的创建、成交、取消和部分成交等。同样,此订阅也需要身份验证,以确保账户安全。订单状态信息包含订单的详细信息,如订单类型、价格、数量和执行情况。

身份验证

为了访问私有频道,获取个性化的账户信息和实时的订单状态更新,您需要进行身份验证。身份验证机制旨在确保您的账户安全和数据隐私。以下是身份验证的详细步骤:

  1. 生成Listen Key: 您需要创建一个随机字符串,这个字符串将作为您的 listenKey listenKey 是一个唯一的标识符,用于跟踪和管理您的WebSocket连接。建议使用足够长度的随机字符串,以提高安全性,防止被猜测。
  2. 请求Listen Key: 接下来,您需要调用 REST API 的 POST /api/v3/userDataStream 端点。 在请求头中,您必须包含您的 API Key,这是验证您身份的关键凭证。 API Key 允许交易所识别并授权您的请求。 成功调用此端点后,您将收到一个 listenKey 作为响应。请务必妥善保管此 listenKey
  3. WebSocket 身份验证: 将您获取的 listenKey 作为参数发送到 WebSocket 服务器,以建立经过身份验证的连接。 具体来说,您需要在 WebSocket 连接的建立阶段,将 listenKey 包含在身份验证消息中。 通过这种方式,WebSocket 服务器可以验证您的身份,并授权您访问私有频道的数据流。 如果 listenKey 无效或已过期,连接将被拒绝。

请注意, listenKey 具有一定的有效期。您需要定期调用 PUT /api/v3/userDataStream 端点来保持 listenKey 的有效性。 如果 listenKey 过期,您的 WebSocket 连接将被断开,您需要重新生成并验证 listenKey

数据格式

WebSocket 服务器推送的数据采用 JSON(JavaScript Object Notation)格式,这是一种轻量级的数据交换格式,易于解析和生成。JSON 数据格式具备良好的可读性,方便开发者进行调试和集成。数据的具体结构和字段定义,会根据您所订阅的不同频道而变化。例如,订阅交易频道的 JSON 数据会包含交易价格、交易数量、交易时间等信息;而订阅深度图频道的 JSON 数据则会包含买单和卖单的价格和数量信息。因此,在使用 WebSocket API 之前,请务必查阅相关文档,了解每个频道推送的具体 JSON 数据格式和字段含义,以便正确解析和处理接收到的数据。

示例 (Python)

本示例展示如何使用Python的 websockets 库订阅MEXC交易所指定交易对的成交记录。需要预先安装 websockets asyncio 库,可通过 pip install websockets asyncio 命令完成安装。

async def subscribe_deals(symbol):

定义一个异步函数 subscribe_deals ,用于订阅指定交易对的成交记录。

import asyncio
import websockets
import 

async def subscribe_deals(symbol):
    """
    订阅某个交易对的成交记录。

    Args:
        symbol (str): 交易对,例如 "BTCUSDT"。
    """
    uri = "wss://wbs.mexc.com/ws"  # MEXC WebSocket API 地址
    async with websockets.connect(uri) as websocket:
        # 构造订阅消息
        subscribe_message = {
            "method": "SUBSCRIPTION",
            "params": [f"[email protected]:{symbol}"], # 订阅现货市场公共成交记录
            "id": 1
        }
        # 将订阅消息发送到 WebSocket 服务器
        await websocket.send(.dumps(subscribe_message))
        print(f"成功订阅 {symbol} 的成交记录")

        # 循环接收来自 WebSocket 服务器的数据
        while True:
            try:
                message = await websocket.recv() # 接收数据
                data = .loads(message) # 将 JSON 字符串转换为 Python 字典
                print(f"收到数据: {data}") # 打印收到的数据
            except websockets.exceptions.ConnectionClosedError as e:
                print(f"连接已关闭: {e}") # 打印连接关闭错误信息
                break # 退出循环
            except Exception as e:
                print(f"发生错误: {e}") # 打印其他错误信息
                break # 退出循环

以上代码段中, uri 变量定义了MEXC交易所的WebSocket API地址。 subscribe_message 字典构造了符合MEXC API规范的订阅消息,其中 method SUBSCRIPTION params 指定了要订阅的频道,格式为 [email protected]:{symbol} ,表示订阅现货市场的公共成交记录。 id 用于标识消息,可以自定义。

async def main():

定义一个异步函数 main ,用于启动订阅任务。

async def main():
    await subscribe_deals("BTCUSDT") # 订阅 BTCUSDT 交易对的成交记录

if __name__ == "__main__":

使用 asyncio.run 函数运行异步函数 main ,启动程序。

if __name__ == "__main__":
    asyncio.run(main()) # 运行 main 函数

错误处理

MEXC API 使用标准的 HTTP 状态码来指示请求处理的结果。开发者应熟悉这些状态码,以便快速诊断问题。以下是常见状态码及其含义:

  • 200 OK: 请求已成功处理。服务器已成功接收、理解并接受了请求。
  • 400 Bad Request: 这是一个通用客户端错误。表明请求存在问题,例如:请求参数不正确、缺少必需的参数、参数格式错误或参数值超出允许范围。详细的错误信息通常会在响应体中提供。
  • 401 Unauthorized: 请求未授权。通常是因为 API Key 无效、未激活或缺少执行特定操作所需的权限。也可能是签名错误,导致服务器无法验证请求的来源。检查 API Key 的配置以及签名算法的实现。
  • 429 Too Many Requests: 客户端发送的请求过于频繁,超过了 API 的速率限制。API 对每个 IP 地址或 API Key 都有请求频率限制。需要在请求头中查找速率限制信息(例如,`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`),并根据这些信息调整请求频率,避免触发此错误。可以使用指数退避算法来处理此错误。
  • 500 Internal Server Error: 服务器在处理请求时遇到了未预期的错误。这通常是服务器端的问题,与客户端请求无关。建议稍后重试请求。如果问题持续存在,请联系 MEXC 的技术支持团队。

除了 HTTP 状态码,MEXC API 响应通常包含一个 code 字段,用于提供更详细的错误信息。此 code 字段允许开发者区分不同类型的错误,并采取相应的纠正措施。 code 通常是一个字符串或数字,具有预定义的含义。仔细阅读 MEXC API 的文档,了解每个 code 的具体含义以及建议的解决方法。响应体中可能还包含一个 msg 字段,提供错误的详细描述信息,方便开发者调试。

速率限制

MEXC API 实施了速率限制机制,旨在防止恶意滥用行为,同时确保整个交易系统的稳定性和可靠性。每个API端点都可能设置不同的请求频率上限,具体限制取决于该端点的资源消耗和重要性。为了帮助开发者合理使用API,您应该仔细查阅官方API文档,其中详细列出了每个端点的具体速率限制参数,包括每分钟或每秒允许的请求次数。

当您的应用程序超过预设的速率限制时,MEXC API会返回一个HTTP状态码 429 Too Many Requests ,表明您的请求已被服务器拒绝。收到此错误代码后,您的应用程序应该暂停发送请求,并实施重试机制,在一段合理的等待时间之后再尝试重新发送请求。等待时间的长短取决于API文档中指定的恢复时间,或者根据您的经验进行调整。合理处理速率限制对于构建稳定和高效的交易机器人至关重要。

最佳实践

  • 严格保护您的 API Key 和 Secret Key。 将它们视为高度敏感信息,切勿以任何方式泄露给未经授权的第三方。 这包括避免在公共代码仓库、客户端代码或不安全的通信渠道中存储或传输它们。 可以考虑使用环境变量或专门的密钥管理系统来安全地存储这些凭据。
  • 始终使用安全的 HTTPS 连接发送 API 请求。 HTTPS 加密能够保护您的数据在传输过程中免受窃听和中间人攻击。 确保您的 API 客户端配置为强制执行 HTTPS 连接,并且验证服务器的 SSL/TLS 证书。
  • 透彻理解 MEXC API 文档。 在开始使用 API 之前,花时间仔细阅读官方文档, 深入了解每个端点的功能、所需的参数、返回的数据格式、错误代码以及任何特定的使用限制或要求。
  • 实施完善的错误处理机制。 API 请求可能会由于各种原因而失败,例如网络问题、无效的参数、服务器错误或速率限制。 您的应用程序应能够捕获并优雅地处理这些错误,提供有用的错误消息,并采取适当的补救措施,例如重试请求或通知用户。
  • 尊重 API 的速率限制。 为了确保所有用户的公平使用和防止滥用,MEXC API 对每个帐户或 IP 地址的请求频率设置了限制。 仔细规划您的 API 使用模式,避免超出这些限制。 实现速率限制处理逻辑,例如使用指数退避算法来重试被限制的请求。
  • 采用异步编程技术。 对于需要处理大量 API 请求或响应时间较长的操作,使用异步编程可以显著提高应用程序的性能和响应能力。 考虑使用 async/await 或其他并发模型来避免阻塞主线程。
  • 在部署到生产环境之前,务必在测试环境进行全面测试。 MEXC 通常会提供一个测试环境(也称为沙盒环境),允许您在不影响真实资金或数据的风险下测试您的 API 集成。 利用此环境验证您的代码是否按预期工作,并处理各种边缘情况。
  • 考虑使用 API 客户端库。 许多编程语言都有专门的 API 客户端库,可以简化与 MEXC API 的交互。 这些库通常提供诸如请求签名、数据序列化/反序列化和错误处理之类的功能,从而减少了您需要编写的样板代码量。
  • 定期审查和更新您的 API 集成。 MEXC API 可能会随着时间的推移而发生变化,例如添加新的端点、更新现有端点的参数或更改数据格式。 定期审查您的 API 集成,并根据需要进行更新,以确保其与最新的 API 版本兼容。
  • 监控 API 使用情况。 跟踪您的 API 请求数量、错误率和响应时间,以便及早发现潜在的问题并优化您的 API 使用模式。

本介绍旨在帮助您更好地理解和有效地利用 MEXC API。 为了获得最准确和最新的信息,以及更深入的了解,请务必查阅 MEXC 官方 API 文档。 其中包含了关于认证、端点、参数、数据格式、错误代码和使用条款的详细信息。