本文将详细介绍如何利用 Python 与币安交易所进行交互,重点使用 python-binance 这一非官方库。币安作为全球领先的加密货币交易平台,提供了丰富的 REST API 接口,允许开发者进行市场数据查询、账户管理及交易操作。
环境准备与库安装
python-binance 是一个针对币安交易所 REST API v3 的异步 Python 封装库,支持公开和私密接口的调用。私密接口需提供 API 密钥进行身份验证。
通过以下命令安装库:
pip install python-binance如需美化数据输出,可额外安装 rich 库:
pip install rich获取交易对信息
交易对(Symbol)由基础资产(Base Asset)和报价资产(Quote Asset)组成,例如 BTCBUSD 中,BTC 是基础资产,BUSD 是报价资产。
以下代码列出所有可用交易对:
#!/usr/bin/python
import asyncio
from binance import AsyncClient
async def main():
client = await AsyncClient.create()
res = await client.get_exchange_info()
print(f'交易对数量: {len(res["symbols"])}')
for sym in res['symbols']:
print(f"{sym['symbol']}: 基础资产 {sym['baseAsset']}, 报价资产 {sym['quoteAsset']}")
await client.close_connection()
asyncio.run(main())get_exchange_info 返回包含交易对列表的字典,其中 symbols 键存储所有交易对信息。
实时行情数据获取
Ticker 提供指定交易对的实时价格信息。使用 get_ticker 可获取详细行情,包括价格变动、成交量等:
#!/usr/bin/python
import asyncio
import json
from binance import AsyncClient
async def main():
client = await AsyncClient.create()
res = await client.get_ticker(symbol='LTCBUSD')
print(json.dumps(res, indent=2))
await client.close_connection()
asyncio.run(main())若仅需最新价格,可使用 get_symbol_ticker。
安全管理与 API 密钥
操作私密接口需提前在币安账户中生成 API 密钥,并通过环境变量管理:
import os
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = await AsyncClient.create(api_key, api_secret)充值地址与资产余额查询
充值地址是交易所生成的唯一加密货币接收地址。查询示例如下:
async def main():
client = await AsyncClient.create(api_key, api_secret)
btc_address = await client.get_deposit_address(coin='BTC')
print(btc_address)获取特定资产余额:
ltc_balance = await client.get_asset_balance(asset='LTC')
print(f"资产: {ltc_balance['asset']}, 可用: {ltc_balance['free']}, 锁定: {ltc_balance['locked']}")提现历史与交易记录
获取最近90天的提现记录:
withdraws = await client.get_withdraw_history()
for e in withdraws:
print(f"{e['amount']} {e['coin']} 手续费: {e['transactionFee']} 完成时间: {e['completeTime']}")查询特定交易对的个人成交记录:
trades = await client.get_my_trades(symbol='SHIBBUSD')
for trade in trades:
print(f"价格: {trade['price']}, 数量: {trade['qty']}, 手续费: {trade['commission']} {trade['commissionAsset']}")使用 rich 库可美化输出表格。
法币交易记录查询
法币购买加密货币的记录可通过以下代码获取:
from binance.helpers import date_to_milliseconds
begin_ts = date_to_milliseconds('2023/01/01')
end_ts = date_to_milliseconds('2023/03/31')
fiat_history = await client.get_fiat_payments_history(
transactionType=0, # 0 表示买入,1 表示卖出
beginTime=begin_ts,
endTime=end_ts
)返回数据包含法币金额、加密货币数量、价格及手续费等关键信息。
常见问题
1. 如何申请币安 API 密钥?
登录币安账户,进入「API管理」页面,创建新密钥并设置IP访问限制以增强安全性。
2. 为什么私密接口调用失败?
常见原因包括密钥权限不足、IP未绑定或系统时间不同步。请检查密钥权限并同步服务器时间。
3. 如何避免 API 速率限制?
币安对接口调用有频率限制。建议添加延时控制或使用 Websocket 接口接收实时数据。
4. 如何处理异步编程模式?
所有 python-binance 接口均为异步调用,需使用 asyncio.run() 或事件循环启动程序。
5. 支持哪些加密货币提现?
可通过 get_deposit_address 测试具体币种是否支持,常见主流币种均可用。
6. 法币交易记录的时间格式如何转换?
使用 datetime.utcfromtimestamp(timestamp/1000.0) 将毫秒时间戳转换为可读时间。
通过本文介绍的方法,您可以高效地使用 Python 管理币安账户、查询市场数据并执行自动化交易策略。请务必遵守交易所API使用条款,合理设置风控措施。