:2026-03-06 15:48 点击:5
从零开始:全面解析如何调用币安(Binance)API接口进行交易与数据获取
币安(Binance)作为全球领先的加密货币交易所,为用户提供了功能强大的API接口,通过调用这些接口,开发者可以自动化交易、获取市场数据、管理账户资产等,本文将详细介绍如何调用币安API接口,从准备工作到具体代码示例,助您快速上手。
在开始调用API之前,您需要先在币安账户中创建API。
币安API主要分为两大类:现货API和U本位合约API / 币本位合约API,它们的基础URL和认证方式略有不同,但核心原理一致。
基础URL:
https://testnet.binance.vision (部分接口可用,具体参考官方文档)https://api.binance.comhttps://fapi.binance.comhttps://dapi.binance.com认证机制: 币安API使用HMAC SHA256进行签名认证,大部分需要权限的接口(如账户信息、交易)都需要在请求头中添加认证信息。
X-MBX-APIKEY:您的API Key,用于标识身份。signature添加到请求中。Python是调用API的常用语言,我们将使用requests库来演示。
pip install requests
公共接口不需要认证,可以获取市场数据等。
示例:获取服务器时间
import requests
import hashlib
import hmac
import time
import urllib.parse
BASE_URL = "https://api.binance.com"
def get_server_time():
url = f"{BASE_URL}/api/v3/time"
response = requests.get(url)
data = response.json()
if data['code'] == 0:
print(f"服务器时间: {data['serverTime']}")
else:
print(f"获取服务器时间失败: {data['msg']}")
get_server_time()
这是需要API Key和签名的典型示例。
步骤:
a. 构建请求参数(包括timestamp,部分接口还需要recvWindow)。
b. 将所有参数(除了signature)按key的字典序排序,然后使用&连接成字符串。
c. 将上一步得到的字符串与您的Secret Key拼接,使用HMAC SHA256进行加密,得到签名。
d. 将签名作为signature参数添加到请求参数中。
e. 发送GET或POST请求,并在请求头中添加X-MBX-APIKEY。
示例:获取账户余额
API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
def get_account_balance():
url = f"{BASE_URL}/api/v3/account"
# 1. 构建参数
params = {
'timestamp': int(time.time() * 1000), # 时间戳(毫秒)
'recvWindow': 5000 # 允许请求的时间窗口(毫秒),可选但推荐
}
# 2. 对参数进行URL编码并排序
query_string = urllib.parse.urlencode(params)
# 或者手动排序:sorted_params = '&'.join([f"{k}={params[k]}" for k in sorted(params.keys())])
# 3. 生成签名
signature = hmac.new(
SECRET_KEY.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
# 4. 添加签名到参数
params['signature'] = signature
# 5. 发送请求
headers = {
'X-MBX-APIKEY': API_KEY
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if 'balances' in data:
print("账户余额:")
for balance in data['balances']:
if float(balance['free']) > 0 or float(balance['locked']) > 0:
print(f"{balance['asset']}: 可用 {balance['free']}, 锁定 {balance['locked']}")
else:
print(f"获取账户信息失败: {data.get('msg', '未知错误')}")
# 注意:首次调用前请确保API Key有读取权限
# get_account_balance()
下单同样需要认证,并且通常需要POST请求。
示例:限价买单(现货)
def place_limit_order(symbol, quantity, price):
url = f"{BASE_URL}/api/v3/order"
params = {
'symbol': symbol,
'side': 'BUY', # BUY 或 SELL
'type': 'LIMIT', # MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT
'timeInForce': 'GTC', # GTC (Good Till Canceled), IOC (Immediate or Cancel), FOK (Fill or Kill)
'quantity': quantity,
'price': price,
'timestamp': int(time.time() * 1000),
'recvWindow': 5000
}
query_string = urllib.parse.urlencode(params)
signature = hmac.new(
SECRET_KEY.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
params['signature'] = signature
headers = {
'X-MBX-APIKEY': API_KEY
}
response = requests.post(url, params=params, headers=headers)
data = response.json()
if data.get('orderId'):
print(f"下单成功!订单ID: {data['orderId']}")
else:
print(f"下单失败: {data.get('msg', '未知错误')}")
# 注意:此API需要交易权限,并且确保账户有足够余额和交易对存在
# place_limit_order('BTCUSDT', 0.001, 30000) # 示例:买入0.001 BTCUSDT,价格30000 USDT
code和msg字段,处理可能出现的错误(如参数错误、权限不足、频率限制等)。本文由用户投稿上传,若侵权请提供版权资料并联系删除!