想用 Python 快速对接全球领先的 加密货币交易所 Binance,却苦于没有官方文档参考?这份实战指南用完全异步的 python-binance 库,手把手带你完成 行情查询、充值地址生成、资产余额读取、交易与法币流水 等高频场景。1080+ 字干货,满足 2025 年的开发者需求。
环境准备:一条命令搞定依赖
pip install python-binance若项目还在测试阶段,可先阅读 流畅上手异步交易接口的关键技巧 预热思路,再回到本文实战不掉坑 🚀
基础概念速览
| 关键词 | 含义 |
|---|---|
| symbol | 交易对,例:BTCUSDT 中 BTC 为基础资产,USDT 为计价资产 |
| ticker | 该交易对的实时价格快照,包括最新价、24h 涨跌幅等 |
| deposit address | 你的专属充值地址,可在链上互转 |
| API Key/Secret | 通过 Binance API 管理 申请,务必设置最小权限 |
| transactionType=0 | 法币购买数字资产;=1 代表卖出为法币 |
获取所有交易对 list of symbols
代码面前无废话。先拉取完整符号表,为后续环节铺垫。
import asyncio
from binance import AsyncClient
async def list_symbols():
client = await AsyncClient.create()
info = await client.get_exchange_info()
print(f'# of symbols: {len(info["symbols"])}')
for s in info['symbols']:
print(f'{s["symbol"]}: base {s["baseAsset"]}, quote {s["quoteAsset"]}')
await client.close_connection()
asyncio.run(list_symbols())运行结果(节选):
# of symbols: 2183
BTCUSDT: base BTC, quote USDT
ETHUSDT: base ETH, quote USDT
BNBUSDT: base BNB, quote USDT实时行情询问器 — ticker
两种接口:
get_ticker:返回完整 24h 行情get_symbol_ticker:仅返回最新价格快照
import asyncio, json
from binance import AsyncClient
async def print_tick():
client = await AsyncClient.create()
full = await client.get_ticker(symbol='LTCBUSD')
snap = await client.get_symbol_ticker(symbol='LTCBUSD')
print(json.dumps(full, indent=2))
print('---- latest ----')
print(json.dumps(snap, indent=2))
await client.close_connection()
asyncio.run(print_tick())在终端里即可实时跟踪 LTC/BUSD 的价、量、深度三要素。
专属充值地址:一步搞定
注意:以下脚本需要设置环境变量 BINANCE_API_KEY 和 BINANCE_SECRET_KEY。
import asyncio, os
from binance import AsyncClient
async def show_addresses():
client = await AsyncClient.create(os.getenv('BINANCE_API_KEY'),
os.getenv('BINANCE_SECRET_KEY'))
for coin in ['BTC', 'LTC', 'DOGE']:
print(await client.get_deposit_address(coin=coin))
await client.close_connection()
asyncio.run(show_addresses())一句话获得链上地址,再也不用手动复制粘贴。
余额 & 提现记录:资产一目了然
通过同样的 crypto balance 接口,可分别读取 可用余额、锁定余额;再通过 withdraw_history 弄清最近 90 天资金流向。
async def my_assets():
client = await AsyncClient.create(os.getenv('BINANCE_API_KEY'),
os.getenv('BINANCE_SECRET_KEY'))
ltc_balance = await client.get_asset_balance(asset='LTC')
print(f'💰 余额:{ltc_balance["free"]} 可用,{ltc_balance["locked"]} 锁定')
wd = await client.get_withdraw_history()
for w in wd:
print(f'提现 {w["amount"]} {w["coin"]} 手续费 {w["transactionFee"]} 完成时间 {w["completeTime"]}')
await client.close_connection()
asyncio.run(my_assets())交易回显:个人订单可视化
用 rich 打印美观的彩色表格,一行不漏展示 我的交易记录:
pip install richimport asyncio, os
from datetime import datetime
from rich.table import Table
from rich.console import Console
from binance import AsyncClient
async def pretty_trades():
client = await AsyncClient.create(os.getenv('BINANCE_API_KEY'),
os.getenv('BINANCE_SECRET_KEY'))
rows = await client.get_my_trades(symbol='SHIBBUSD')
table = Table(title='SHIBA 交易流水')
table.add_column('成交日期')
table.add_column('成交价', justify='right')
table.add_column('数量', justify='right')
table.add_column('交易额', justify='right')
table.add_column('手续费', justify='right')
for r in rows:
trade_time = datetime.utcfromtimestamp(r['time']/1000.0)
table.add_row(trade_time.strftime('%Y-%m-%d'), r['price'],
r['qty'], r['quoteQty'], f"{r['commission']} {r['commissionAsset']}")
Console().print(table)
await client.close_connection()
asyncio.run(pretty_trades())法币通道:接入历史买币记录
把 法币支付历史 拉成表格,方便做回测或税务申报。
from binance.helpers import date_to_milliseconds
async def fiat_payments():
client = await AsyncClient.create(os.getenv('BINANCE_API_KEY'),
os.getenv('BINANCE_SECRET_KEY'))
begin = '2023-01-01'
end = '2023-03-31'
history = await client.get_fiat_payments_history(
transactionType=0,
beginTime=date_to_milliseconds(begin),
endTime=date_to_milliseconds(end)
)
table = Table(title='法币买入明细')
table.add_column('日期')
table.add_column('法币金额')
table.add_column('法币币种')
table.add_column('获得币种')
table.add_column('买入单价')
table.add_column('手续费')
for row in history['data']:
d = datetime.utcfromtimestamp(row['createTime']/1000.0)
table.add_row(d.strftime('%Y-%m-%d'), str(row['sourceAmount']),
row['fiatCurrency'], row['cryptoCurrency'],
str(row['price']), str(row['totalFee']))
Console().print(table)
await client.close_connection()
asyncio.run(fiat_payments())易犯坑汇总 & 安全锦囊
- 公钥私钥千万别写进源码,用环境变量或者专门的 密钥管理服务。
- API 权限选 只读(读取信息) 或最小必要集,降低风险面。
- 请求频繁会触发 限速,善用官方
x-mbx-used-weight响应头。 - 生产部署务必启用 IP 白名单 和 双重验证。
常见问题与解答
Q1:我只想获取 BTC 最新价格,需要登录 API 吗?
不需要。get_symbol_ticker(symbol='BTCUSDT') 是公开接口,无 API Key 亦可。
Q2:异步写法会不会比同步慢?
恰恰相反。异步可以一次性并发十几个请求,练熟 asyncio.gather,效率爆炸提。
Q3:对公链充值地址格式不熟,如何确认打错链? get_deposit_address 返回本身就包含 network 字段,与 Coin 地址一一对应即可。
Q4:提现记录为何才 90 天?
官方默认窗口。想拉更长历史,可循环分页或使用 历史数据下载中心。
Q5:法币充值接口不报手续费?
在参数里加上 transactFeeFlag=True 即可获得。
Q6:初学者如何快速测试行情订阅?
用 WebSocket 边读边写。点赞收藏,后续专门出一篇深度教程 🤫
到此,你已经拥有 Python 自动化炒币 所需的完整工具箱。 👉 点击继续探索高频交易策略的另一扇大门