使用 Python 操作币安交易所的完整指南

·

本文将详细介绍如何利用 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)

👉 获取实时行情工具与 API 指南


充值地址与资产余额查询

充值地址是交易所生成的唯一加密货币接收地址。查询示例如下:

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使用条款,合理设置风控措施。