解锁 MEXC API:5分钟上手交易机器人 | 2024 最新指南
Mexc币API接口使用
在蓬勃发展的加密货币交易生态系统中,应用程序编程接口(API)是不可或缺的基础设施。它们如同数字桥梁,连接着交易所的核心系统和开发者构建的各种创新应用,极大地提升了交易效率和数据可访问性。API允许开发者无需手动操作,即可自动化执行交易、实时获取市场数据、管理账户信息,以及整合其他服务。从高频交易机器人到复杂的投资组合管理工具,API的应用范围十分广泛。
Mexc交易所,作为全球领先的数字资产交易平台,深知API对于构建一个活跃且高效的交易生态系统的重要性。因此,Mexc提供了一套全面且功能强大的API接口,旨在满足不同层次开发者的需求。无论是经验丰富的机构交易者,还是刚入门的个人开发者,都可以通过Mexc API访问丰富的交易功能和数据资源。
本文档将深入探讨Mexc币API接口的使用方法,提供详尽的指南和实用示例,旨在帮助开发者充分理解和高效运用这些接口。我们将涵盖API的认证方式、数据格式、常用端点、以及最佳实践,确保开发者能够快速上手并构建出可靠且高性能的加密货币交易应用程序。本文档致力于为开发者提供清晰、准确、且实用的信息,助力他们在Mexc平台上取得成功。
API概述
MEXC API 为开发者提供了一个强大的接口,使其能够通过代码与 MEXC 交易所进行交互,实现自动化交易、数据分析以及集成到第三方应用等功能。该 API 采用 RESTful 架构设计,易于理解和使用,并支持多种流行的编程语言,例如 Python、Java、Node.js 等。通过 MEXC API,用户可以获取实时市场数据,执行交易指令,管理账户信息,极大地提升了交易效率和策略执行的灵活性。
MEXC API 主要划分为两个关键类别,以满足不同用户和应用场景的需求:
- 公共API (Public API): 此类 API 提供无需身份验证即可访问的公共市场数据。用户可以免费获取包括但不限于以下信息:各类交易对的实时价格、订单簿深度(买单和卖单)、历史成交记录(交易时间、价格、数量)、以及其他市场统计数据。公共 API 对于数据分析师、量化交易研究者以及希望构建信息展示平台的开发者来说,是不可或缺的数据来源。
- 私有API (Private API): 此类 API 需要进行身份验证(通过 API 密钥和签名)后才能访问。私有 API 允许用户执行诸如创建、取消订单,查询订单状态,获取账户余额,进行资金划转等涉及账户安全和资产管理的操作。由于涉及敏感操作,私有 API 必须妥善保管 API 密钥,并采取必要的安全措施,防止泄露和滥用。
身份验证
访问私有API需要进行身份验证,以确保只有授权用户才能访问敏感数据和执行交易操作。身份验证过程基于API密钥和请求签名机制,能够有效防止未经授权的访问和恶意攻击。
- 获取API密钥: 你需要登录你的MEXC账户,导航至API管理页面。在此页面,你可以创建新的API密钥对。务必为你的API密钥设置适当的权限,例如只读或交易权限,以限制其潜在风险。创建完成后,系统将为你提供一个API密钥(API Key)和一个密钥(Secret Key)。 请务必妥善保管你的API密钥和密钥,切勿将其泄露给任何第三方。 一旦泄露,他人可能利用你的密钥进行非法操作。
- 生成签名: 为了验证请求的完整性和来源,你需要使用HMAC-SHA256算法对请求参数进行签名。签名过程涉及使用你的密钥(Secret Key)作为密钥,将请求参数按照预定义的顺序拼接成一个字符串,然后使用HMAC-SHA256算法对该字符串进行哈希运算。生成的哈希值即为请求签名。这个签名需要包含在你的API请求中,以便MEXC服务器验证请求的真实性。不同的API端点可能对请求参数的顺序有不同的要求,请务必查阅MEXC的API文档以获取准确的参数排序规则。
以下是一个使用Python生成签名的示例代码,展示了如何使用
hmac
和
hashlib
库来生成符合MEXC交易所要求的API签名:
import hashlib
import hmac
import time
import urllib.parse
def generate_signature(api_secret, params):
"""生成MEXC交易所API签名。
Args:
api_secret (str): 你的MEXC API密钥(Secret Key)。
params (dict): 包含请求参数的字典。
Returns:
str: 生成的API签名。
"""
# 1. 将参数字典按照键名进行排序(字典序)。
sorted_params = dict(sorted(params.items()))
# 2. 将排序后的参数键值对拼接成查询字符串。
# 使用urllib.parse.urlencode进行URL编码,以确保参数值中的特殊字符被正确处理。
query_string = urllib.parse.urlencode(sorted_params)
# 3. 使用HMAC-SHA256算法计算签名。
# api_secret用于密钥,query_string用于消息。
signature = hmac.new(
api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
示例参数
api_secret = "YOUR_API_SECRET"
# 请务必将此处的
YOUR_API_SECRET
替换为您在MEXC交易所申请到的真实API密钥。该密钥用于对您的请求进行签名,确保交易的安全性。妥善保管您的API密钥,切勿泄露给任何第三方,以免造成资金损失。
params = {
"symbol": "BTC_USDT",
# 交易对,例如BTC/USDT,代表使用USDT购买比特币。不同的交易所支持的交易对可能有所不同,请根据实际情况选择。
"side": "BUY",
# 交易方向,可以是"BUY"(买入)或"SELL"(卖出)。"BUY"表示买入指定数量的加密货币,"SELL"表示卖出指定数量的加密货币。
"type": "LIMIT",
# 订单类型,此处为限价单。"LIMIT"代表限价单,表示您希望以指定的价格进行交易。其他常见的订单类型包括市价单("MARKET")等。
"quantity": 0.01,
# 交易数量,表示您希望买入或卖出的加密货币数量。请注意,交易所通常对最小交易数量有限制,请参考交易所的API文档。
"price": 50000,
# 委托价格,只有当市场价格达到或优于此价格时,限价单才会成交。委托价格需要根据当前市场行情进行合理设置,过高的价格可能无法成交,过低的价格可能导致亏损。
"timestamp": int(time.time() * 1000)
# 时间戳,表示请求发送的时间。时间戳必须是毫秒级别的整数,并且需要在服务器允许的时间范围内。时间戳用于防止重放攻击,提高交易的安全性。
}
signature = generate_signature(api_secret, params)
print(f"签名: {signature}")
在发送私有API请求时,需要将API密钥添加到
X-MEXC-APIKEY
请求头中。例如,在Python中,可以使用requests库设置header:
headers = {'X-MEXC-APIKEY': 'YOUR_API_KEY'}
。同时,需要将生成的签名添加到
signature
参数中,作为请求的一部分。例如:
params['signature'] = signature
。正确的签名能够验证请求的合法性,保证交易安全。
公共API接口
以下是一些常用的公共API接口,它们允许开发者无需身份验证即可访问市场数据和其他公开信息。 这些接口对于构建交易机器人、数据分析工具和信息聚合平台至关重要。 请注意,过度使用公共API可能会导致IP被限制,因此建议在生产环境中使用速率限制策略。
-
获取服务器时间:
GET /api/v3/time
- 返回交易所服务器当前时间戳(Unix 时间,毫秒)。此接口用于同步客户端与服务器时间,确保后续请求的时间有效性,特别是在处理需要时间戳签名的私有 API 时。 时间同步对于避免因时间偏差导致的请求失败至关重要。 -
获取交易对信息:
GET /api/v3/exchangeInfo
- 返回所有交易对的详细信息,包括交易对名称(symbol)、计价货币(quoteAsset)、基础货币(baseAsset)、交易对状态(status)、价格精度(quotePrecision)、数量精度(baseAssetPrecision)以及各种过滤器(filters),例如价格限制、数量限制和市场订单的最小交易量。 这些信息对于了解交易所支持的交易对以及交易规则至关重要。 过滤器定义了交易的有效范围,例如最小交易数量和价格变动步长。 -
获取订单簿:
GET /api/v3/depth
- 返回指定交易对的订单簿信息,提供当前市场买单(出价)和卖单(要价)的价格和数量。 订单簿数据按照价格排序,可以用来分析市场深度和流动性。-
symbol
(必选): 交易对名称,例如 "BTC_USDT"。 必须使用交易所支持的有效交易对名称。 -
limit
(可选): 返回的订单数量,默认为100,最大为1000。 调整此参数可以控制返回的订单簿深度,从而影响对市场流动性的分析。 更高的限制值提供更全面的市场概览。
-
-
获取近期成交记录:
GET /api/v3/trades
- 返回指定交易对的近期成交记录,包括成交时间、价格、数量以及买卖方向。 通过分析成交记录,可以了解市场的交易活跃度和价格趋势。-
symbol
(必选): 交易对名称,例如 "BTC_USDT"。 确保交易对名称与交易所支持的名称一致。 -
limit
(可选): 返回的成交记录数量,默认为500,最大为1000。 增加限制值可以获取更长时间段内的成交数据,从而更准确地分析市场趋势。
-
-
获取K线数据:
GET /api/v3/klines
- 返回指定交易对的K线数据,K线图(也称为烛台图)是表示一段时间内价格变动的常用方法。 每个K线包含开盘价(open)、最高价(high)、最低价(low)和收盘价(close),以及成交量。-
symbol
(必选): 交易对名称,例如 "BTC_USDT"。 指定要获取K线数据的交易对。 -
interval
(必选): K线周期,例如 "1m" (1分钟), "5m" (5分钟), "1h" (1小时), "1d" (1天) 等。 K线周期决定了每个K线代表的时间段。 -
startTime
(可选): 起始时间戳(毫秒)。 用于指定K线数据的起始时间,不指定则返回最近的数据。 -
endTime
(可选): 结束时间戳(毫秒)。 用于指定K线数据的结束时间,不指定则返回到当前时间的K线数据。 -
limit
(可选): 返回的K线数量,默认为500,最大为1000。 可以调整返回的K线数量,以满足不同的分析需求。
-
私有API接口
以下是一些常用的私有API接口,用于访问账户信息、进行交易和管理订单。这些接口需要身份验证才能访问。
-
查询账户信息:
GET /api/v3/account
- 返回账户的详细资产信息,包括可用余额、冻结余额、总余额以及其他相关的账户属性。账户信息对于监控资金状况和制定交易策略至关重要。-
需要在请求头中包含
X-MEXC-APIKEY
和signature
,并使用timestamp
作为参数,以确保请求的安全性。X-MEXC-APIKEY
是你的API密钥,signature
是使用你的密钥对请求参数进行加密签名后的结果,timestamp
是请求发送时的时间戳。
-
需要在请求头中包含
-
下单:
POST /api/v3/order
- 创建一个新的交易订单,允许用户买入或卖出特定的加密货币。-
symbol
(必选): 交易对名称,指定要交易的加密货币对,例如 "BTC_USDT",表示比特币兑换USDT。 -
side
(必选): 订单方向,指示是买入还是卖出,"BUY" (买入) 或 "SELL" (卖出)。 -
type
(必选): 订单类型,指定订单的执行方式,"LIMIT" (限价单) 指以指定价格成交,"MARKET" (市价单) 指以当前市场最优价格立即成交。 -
quantity
(必选): 订单数量,表示要买入或卖出的加密货币数量。 -
price
(仅限价单必选): 订单价格,仅在限价单中需要指定,表示期望的成交价格。 -
timeInForce
(可选,仅限价单): 订单有效期,指定订单在未成交情况下的有效时间。"GTC" (Good Till Cancelled) 表示订单会一直有效,直到被取消。"IOC" (Immediate Or Cancel) 表示订单会尝试立即以指定价格成交,未成交部分会被立即取消。"FOK" (Fill Or Kill) 表示订单必须全部以指定价格成交,否则会被立即取消。 -
timestamp
(必选): 当前时间戳(毫秒),用于验证请求的有效性。 -
需要在请求头中包含
X-MEXC-APIKEY
和signature
,以验证请求的身份和确保安全性。签名是通过API密钥对请求参数进行加密生成的。
-
-
撤销订单:
DELETE /api/v3/order
- 撤销一个尚未完全成交的订单,允许用户取消未执行的交易指令。-
symbol
(必选): 交易对名称,指定要撤销订单的交易对,例如 "BTC_USDT"。 -
orderId
(必选): 订单ID,指定要撤销的订单的唯一标识符。 -
timestamp
(必选): 当前时间戳(毫秒),用于验证请求的有效性。 -
需要在请求头中包含
X-MEXC-APIKEY
和signature
,以验证请求的身份和确保安全性。
-
-
查询订单状态:
GET /api/v3/order
- 查询指定订单的当前状态,包括订单是否已成交、部分成交或已取消等信息。-
symbol
(必选): 交易对名称,指定要查询订单的交易对,例如 "BTC_USDT"。 -
orderId
(必选): 订单ID,指定要查询的订单的唯一标识符。 -
timestamp
(必选): 当前时间戳(毫秒),用于验证请求的有效性。 -
需要在请求头中包含
X-MEXC-APIKEY
和signature
,以验证请求的身份和确保安全性。
-
-
查询所有未完成订单:
GET /api/v3/openOrders
- 获取所有尚未完全成交的订单列表,方便用户监控和管理未完成的交易。-
symbol
(可选): 交易对名称,例如 "BTC_USDT"。如果不填则查询所有交易对的未完成订单,返回所有交易对上未完成的订单。-
timestamp
(必选): 当前时间戳(毫秒),用于验证请求的有效性。 -
需要在请求头中包含
X-MEXC-APIKEY
和signature
,以验证请求的身份和确保安全性。
-
-
错误处理
当与MEXC API交互时发生错误,服务器将返回一个包含详细错误信息的JSON对象。这个JSON对象中包含了
code
(错误代码)和
msg
(错误信息)字段。开发者应仔细解析这些字段,并根据不同的错误代码采取相应的措施,以确保应用程序的稳定性和可靠性。
MEXC API使用HTTP状态码来指示请求的总体状态。200状态码表示请求成功,而4XX和5XX状态码则表示客户端或服务器端发生了错误。即使HTTP状态码为200,也需要检查返回的JSON对象中的
code
字段,以确认请求是否真正成功执行。API返回的错误信息可能包含更详细的描述,有助于开发者诊断和解决问题。
常见的错误代码及其详细解释包括:
-
1000
: 无效的API密钥。这意味着提供的API密钥不正确或已过期。请检查API密钥是否正确,并确保已正确配置API密钥权限。 -
1001
: 无效的签名。签名是用于验证请求完整性和身份的重要机制。此错误表示签名计算不正确,或者提供的参数与签名不匹配。请仔细检查签名算法和参数,确保签名计算过程无误。 -
1002
: 请求参数错误。这表示请求中包含无效或缺失的参数。请仔细检查所有请求参数,确保它们符合API文档中定义的格式和要求。参数错误可能包括数据类型错误、参数值超出范围或缺少必需参数等。 -
1003
: 接口请求频率过高。为了保护系统资源,MEXC API对请求频率进行了限制。当请求频率超过限制时,会返回此错误。开发者应实施适当的速率限制策略,例如使用指数退避算法,以避免超出API的请求频率限制。 -
1004
: 账户余额不足。执行交易或下单时,账户余额不足以支付交易费用或购买所需的数量。请检查账户余额,并确保有足够的资金来完成操作。 -
1005
: 订单不存在。尝试取消或查询一个不存在的订单时会返回此错误。请检查订单ID是否正确。 -
1006
: 交易对不存在。请求的交易对未在MEXC交易所上市。请检查交易对名称是否正确,或确认交易所是否支持该交易对。 -
1007
: 订单数量小于最小允许数量。每个交易对都有最小的订单数量限制。请检查订单数量是否满足该交易对的最小订单数量要求。 -
1008
: 订单价格超出允许范围。订单价格可能高于或低于交易所允许的范围。请检查订单价格是否合理。
请求频率限制
为了保障Mexc API服务的稳定性和可用性,并防止恶意滥用行为,Mexc API实施了严格的请求频率限制机制。这意味着每个API接口都有其预设的请求次数上限,开发者在使用API时必须严格遵守这些限制,以确保服务的正常运行,并避免因超出频率限制而被暂时或永久禁止访问。
不同类型的API接口,由于其功能复杂性和服务器资源消耗不同,因此具有不同的请求频率限制。例如,交易相关的API接口可能具有比行情数据查询接口更为严格的限制。开发者在集成Mexc API时,应务必详细查阅官方文档中关于各个API接口的请求频率限制说明。官方文档会明确列出每个接口允许的每分钟、每秒或每日最大请求次数,以及超出限制后的处理方式。
违反请求频率限制可能导致API请求失败,并返回特定的错误代码,表明您的账户已被暂时限制访问。为了避免这种情况,建议开发者实施以下策略:使用批量请求功能(如果API支持),将多个操作合并到一个请求中;采用缓存机制,减少对API的重复调用;使用WebSocket或其他实时数据推送技术,避免频繁轮询;以及实施重试机制,当遇到频率限制错误时,延迟一段时间后自动重试。通过这些方法,可以有效地降低API请求频率,确保应用程序的稳定性和可靠性,同时遵守Mexc API的使用条款。
示例代码 (Python)
以下是一个使用Python通过MEXC交易所API进行下单操作的示例代码,展示了如何构建请求、生成签名以及发送订单。
import requests
import hashlib
import hmac
import time
import urllib.parse
def generate_signature(api_secret, params):
"""
生成MEXC交易所API请求所需的签名。
Args:
api_secret (str): 用户的API Secret Key.
params (dict): 包含所有请求参数的字典.
Returns:
str: 生成的HMAC-SHA256签名.
"""
query_string = urllib.parse.urlencode(params)
signature = hmac.new(api_secret.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
return signature
def create_order(api_key, api_secret, symbol, side, type, quantity, price=None, client_order_id=None):
"""
创建MEXC交易所的订单。
Args:
api_key (str): 用户的API Key.
api_secret (str): 用户的API Secret Key.
symbol (str): 交易对,例如 "BTCUSDT".
side (str): 订单方向,"BUY" 或 "SELL".
type (str): 订单类型,例如 "LIMIT", "MARKET", "STOP_LOSS_LIMIT".
quantity (float): 订单数量.
price (float, optional): 订单价格,仅在限价单时需要. Defaults to None.
client_order_id (str, optional): 用户自定义订单ID,可选. Defaults to None.
Returns:
dict: MEXC API返回的JSON响应.
Raises:
requests.exceptions.RequestException: 如果请求发生错误.
"""
endpoint = "https://api.mexc.com/api/v3/order"
timestamp = int(time.time() * 1000) # MEXC API需要毫秒级时间戳
params = {
"symbol": symbol,
"side": side,
"type": type,
"quantity": quantity,
"timestamp": timestamp
}
if price:
params["price"] = price
if client_order_id:
params["newClientOrderId"] = client_order_id # 客户端自定义订单ID
signature = generate_signature(api_secret, params)
params["signature"] = signature
headers = {"X-MEXC-APIKEY": api_key}
try:
response = requests.post(endpoint, headers=headers, params=params)
response.raise_for_status() # 检查HTTP状态码是否为200 OK
return response.()
except requests.exceptions.RequestException as e:
print(f"API Request Error: {e}")
return None
替换成你的API密钥和交易参数
api_key = "YOUR_API_KEY"
# 替换成你的API key,这是访问交易所API的凭证,务必妥善保管,切勿泄露。API key通常与特定的权限关联,请确保权限设置符合你的交易策略。
api_secret = "YOUR_API_SECRET"
# 替换成你的API secret,也称为私钥。这是用于签名API请求的密钥,绝对不能共享。API secret与API key配对使用,用于验证请求的真实性和完整性。
symbol = "BTC_USDT"
# 交易对,例如比特币兑美元稳定币。不同的交易所可能使用不同的符号表示相同的交易对,请仔细核对交易所的文档。例如,ETH_BTC 表示以太坊兑比特币。
side = "BUY"
# 交易方向,买入或卖出。在加密货币交易中,买入通常被称为做多,卖出被称为做空。选择正确的交易方向是交易成功的关键。
type = "LIMIT"
# 订单类型,例如限价单。限价单允许你指定交易的价格,只有当市场价格达到或优于你指定的价格时,订单才会成交。其他常见的订单类型包括市价单、止损单等。
quantity = 0.001
# 交易数量,以交易对的基础货币单位计。例如,如果交易对是BTC_USDT,那么数量就是比特币的数量。务必仔细检查数量,避免输入错误导致不必要的损失。
price = 30000
# 委托价格,只有当市场价格达到或低于此价格时,买单才会成交。卖单则相反,只有当市场价格达到或高于此价格时才会成交。委托价格是限价单的核心参数。
创建限价单
在加密货币交易中,限价单是一种指定买入或卖出价格的订单类型。它允许交易者设定他们愿意接受的最高买入价或最低卖出价。只有当市场价格达到或超过该指定价格时,订单才会被执行。使用编程方式创建限价单,可以自动化交易策略,并在特定价格水平上执行交易。
order_result = create_order(api_key, api_secret, symbol, side, type, quantity, price)
上述代码展示了创建限价单的函数调用。
create_order
函数接受多个参数,这些参数定义了限价单的各个方面。
api_key
和
api_secret
是用于身份验证的 API 密钥和密钥。这些密钥允许程序访问交易平台提供的 API 并执行交易。务必安全存储和管理这些密钥,避免泄露。
symbol
指定要交易的加密货币交易对,例如 "BTCUSDT" (比特币/美元)。不同的交易所使用不同的符号表示相同的交易对。
side
指示订单的方向,即买入 (
"buy"
) 或卖出 (
"sell"
)。
type
设置订单类型为限价单,通常使用
"limit"
表示。有些交易所可能使用不同的字符串。
quantity
指定要交易的加密货币数量。确保数量满足交易所的最小交易量要求。
price
是限价单的关键参数,指定买入或卖出的价格。对于买单,这是愿意支付的最高价格;对于卖单,这是愿意接受的最低价格。
函数调用返回的
order_result
包含了订单的详细信息,例如订单 ID、订单状态和交易时间戳。
print(.dumps(order_result, indent=4))
这行代码使用
.dumps
函数将
order_result
对象转换为格式化的 JSON 字符串,并将其打印到控制台。
indent=4
参数使 JSON 输出更具可读性,方便调试和分析订单信息。JSON 格式允许开发者轻松地读取和处理返回的订单信息。
请参考Mexc官方API文档获取最准确和最新的信息。