Python Binance
最后修改于 2024 年 1 月 29 日
在本文中,我们将展示如何使用 python-binance 库在 Python 中操作 Binance 交易所。
python-binance 是 Binance 交易所 REST API v3 的非官方 Python 包装器。Binance 是一个流行的加密货币交易所。
Binance 提供公共 API 和私有 API。对于私有 API,我们需要提供 API 密钥。API 是异步的。
$ pip install python-binance
我们使用 pip 安装该库。
Python Binance 交易对列表
get_exchange_info 函数提供有关交易所的一些基本信息,包括费率限制和交易对列表。
交易对是交易品种。它由基础资产和计价资产组成。给定交易对 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'# of symbols: {len(res["symbols"])}')
for sym in res['symbols']:
print(f"{sym['symbol']}: base {sym['baseAsset']}, quote {sym['quoteAsset']}")
await client.close_connection()
asyncio.run(main())
该示例打印交易对的数量并列出所有可用的交易对。
from binance import AsyncClient
从模块中,我们导入 AsyncClient。
res = await client.get_exchange_info()
我们调用 get_exchange_info 函数。响应被翻译成 Python 字典。
print(f'# of symbols: {len(res["symbols"])}')
symbols 键包含 Binance 上可用交易对的列表。
for sym in res['symbols']:
print(f"{sym['symbol']}: base {sym['baseAsset']}, quote {sym['quoteAsset']}")
我们遍历列表并将它们打印到控制台。
$ ./symbols.py # of symbols: 2183 ETHBTC: base ETH, quote BTC LTCBTC: base LTC, quote BTC BNBBTC: base BNB, quote BTC NEOBTC: base NEO, quote BTC QTUMETH: base QTUM, quote ETH EOSETH: base EOS, quote ETH SNTETH: base SNT, quote ETH BNTETH: base BNT, quote ETH BCCBTC: base BCC, quote BTC GASBTC: base GAS, quote BTC BNBETH: base BNB, quote ETH BTCUSDT: base BTC, quote USDT ETHUSDT: base ETH, quote USDT ...
Python Binance 交易行情
交易行情是特定加密货币价格的报告,在整个交易时段内持续更新。要获取交易行情,我们使用 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))
print('--------------------')
res = await client.get_symbol_ticker(symbol='LTCBUSD')
print(json.dumps(res, indent=2))
await client.close_connection()
asyncio.run(main())
该示例检索 LTCBUSD 交易对的交易行情。
res = await client.get_ticker(symbol='LTCBUSD')
我们获取 LTCBUSD 的交易行情。
print(json.dumps(res, indent=2))
我们使用 json.dumps 美化打印输出。
$ ./get_ticker.py
{
"symbol": "LTCBUSD",
"priceChange": "-1.06000000",
"priceChangePercent": "-1.146",
"weightedAvgPrice": "92.12663737",
"prevClosePrice": "92.47000000",
"lastPrice": "91.45000000",
"lastQty": "0.05500000",
"bidPrice": "91.45000000",
"bidQty": "0.27400000",
"askPrice": "91.47000000",
"askQty": "4.38700000",
"openPrice": "92.51000000",
"highPrice": "93.58000000",
"lowPrice": "90.46000000",
"volume": "153099.54200000",
"quoteVolume": "14104545.98719000",
"openTime": 1680448413900,
"closeTime": 1680534813900,
"firstId": 38620441,
"lastId": 38681137,
"count": 60697
}
--------------------
{
"symbol": "LTCBUSD",
"price": "91.47000000"
}
Python Binance 充值地址
充值地址是在 Binance 上发送和接收加密货币的唯一地址。该地址不属于用户。
#!/usr/bin/python
import asyncio
import os
from binance import AsyncClient
async def main():
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = await AsyncClient.create(api_key, api_secret)
btc_address = await client.get_deposit_address(coin='BTC')
print(btc_address)
ltc_address = await client.get_deposit_address(coin='LTC')
print(ltc_address)
doge_address = await client.get_deposit_address(coin='DOGE')
print(doge_address)
await client.close_connection()
asyncio.run(main())
在示例中,我们打印 BTC、LTC 和 DOGE 币的三个充值地址。
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
要获取充值地址,我们需要使用 API 密钥。我们从环境变量中加载密钥。
btc_address = await client.get_deposit_address(coin='BTC') print(btc_address)
我们使用 get_deposit_address 获取 BTC 的地址并打印它。
Python Binance 资产余额
get_asset_balance 函数检索给定资产的余额。
#!/usr/bin/python
import asyncio
import os
from binance import AsyncClient
async def main():
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = await AsyncClient.create(api_key, api_secret)
ltc_balance = await client.get_asset_balance(asset='LTC')
print(f"Asset: {ltc_balance['asset']}")
print(f"Free: {ltc_balance['free']}")
print(f"Locked: {ltc_balance['locked']}")
await client.close_connection()
asyncio.run(main())
该示例检索 LTC 币的余额。
Python Binance 提现
使用 get_withdraw_history 函数,我们可以获取从 Binance 交易所提现的加密货币。
#!/usr/bin/python
import asyncio
import os
from binance import AsyncClient
async def main():
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = await AsyncClient.create(api_key, api_secret)
withdraws = await client.get_withdraw_history()
for e in withdraws:
print(f"{e['amount']} {e['transactionFee']} {e['coin']} {e['completeTime']}")
await client.close_connection()
asyncio.run(main())
在示例中,我们提取了过去九十天的所有提现记录。
withdraws = await client.get_withdraw_history()
我们提取提现记录。如果不指定开始时间,则默认应用最近 90 天。
for e in withdraws:
print(f"{e['amount']} {e['transactionFee']} {e['coin']} {e['completeTime']}")
从提现数据中,我们获取金额、交易费、币种名称和完成时间。
Python Binance 我的交易
get_my_trades 函数检索特定交易品种的交易记录。
$ pip install rich
为了将数据组织成一个漂亮的表格,我们使用了 rich 库。
#!/usr/bin/python
import asyncio
import os
from datetime import datetime
from binance import AsyncClient
from rich import box
from rich.console import Console
from rich.table import Table
async def main():
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = await AsyncClient.create(api_key, api_secret)
trades = await client.get_my_trades(symbol='SHIBBUSD')
now = f'{datetime.today()}'
table = Table(title='My SHIBA trades', box=box.ASCII,
caption=now, caption_justify='left')
table.add_column('Complete time', justify='center', style='steel_blue')
table.add_column('Price', justify='right', style='cadet_blue')
table.add_column('Quantity', justify='right')
table.add_column('Quote quantity', justify='right')
table.add_column('Commision fee', justify='right', style='indian_red')
table.add_column('Commision asset', justify='center')
for e in trades:
trade_time = datetime.utcfromtimestamp(e['time']/1000.0)
price = float(e["price"])
quantity = float(e["qty"])
quote_quantity = float(e["quoteQty"])
commision = float(e["commission"])
commission_asset = e["commissionAsset"]
table.add_row(f'{trade_time:%m/%d/%Y}', f'{price:.8f}', f'{quantity}',
f'{quote_quantity:.8f}', f'{commision:.2f}', f'{commission_asset}')
console = Console()
console.print(table)
await client.close_connection()
asyncio.run(main())
该示例检索 SHIBBUSD 交易品种的交易记录。数量是我们购买的基础资产数量;在我们的例子中,它是 SHIBA 代币的数量。计价数量是用以购买给定数量 SHIBA 代币所需的计价资产(BUSD)的数量。
trades = await client.get_my_trades(symbol='SHIBBUSD')
我们使用 get_my_trades 检索 SHIBBUSD 交易品种的交易记录。
table = Table(title='My SHIBA trades', box=box.ASCII,
caption=now, caption_justify='left')
table.add_column('Complete time', justify='center', style='steel_blue')
table.add_column('Price', justify='right', style='cadet_blue')
table.add_column('Quantity', justify='right')
table.add_column('Quote quantity', justify='right')
table.add_column('Commision fee', justify='right', style='indian_red')
table.add_column('Commision asset', justify='center')
我们创建了一个包含六列的表格。
for e in trades:
trade_time = datetime.utcfromtimestamp(e['time']/1000.0)
price = float(e["price"])
quantity = float(e["qty"])
quote_quantity = float(e["quoteQty"])
commision = float(e["commission"])
commission_asset = e["commissionAsset"]
table.add_row(f'{trade_time:%m/%d/%Y}', f'{price:.8f}', f'{quantity}',
f'{quote_quantity:.8f}', f'{commision:.2f}', f'{commission_asset}')
我们向表格添加行。
console = Console() console.print(table)
最后,我们将表格打印到控制台。
Python Binance 法币支付
要获取法币支付记录,我们使用 get_fiat_payments_history 函数。
#!/usr/bin/python
import asyncio
import os
from binance import AsyncClient
from binance.helpers import date_to_milliseconds
from datetime import datetime
from rich import box
from rich.console import Console
from rich.table import Table
async def main():
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
begin = '2023/01/01'
begin_ts = date_to_milliseconds(begin)
end = 'March 31, 2023'
end_ts = date_to_milliseconds(end)
client = await AsyncClient.create(api_key, api_secret)
fiat_history = await client.get_fiat_payments_history(transactionType=0,
beginTime=begin_ts, endTime=end_ts)
now = f'{datetime.today()}'
table = Table(title='Fiat payments', box=box.ASCII,
caption=now, caption_justify='left')
table.add_column('Create time', justify='right', style='cadet_blue')
table.add_column('Fiat amount', justify='center', style='steel_blue')
table.add_column('Fiat')
table.add_column('Crypto amount', justify='right', style='dark_slate_gray2')
table.add_column('Crypto')
table.add_column('Price', style='dark_sea_green4')
table.add_column('Fee', style='indian_red')
for e in fiat_history['data']:
d = datetime.utcfromtimestamp(e['createTime']/1000.0)
source_amount = float(e["sourceAmount"])
fiat_currency = e["fiatCurrency"]
obtain_amount = float(e["obtainAmount"])
crypto_currency = e["cryptoCurrency"]
price = float(e["price"])
total_fee = float(e["totalFee"])
table.add_row(f'{d:%m/%d/%Y}', f'{source_amount:.8f}', f'{fiat_currency}',
f'{obtain_amount:.8f}', f'{crypto_currency}',
f'{price:.8f}', f'{total_fee:.8f}')
console = Console()
console.print(table)
await client.close_connection()
asyncio.run(main())
在该程序中,我们列出了所有使用法币购买加密货币的交易。
begin = '2023/01/01' begin_ts = date_to_milliseconds(begin) end = 'March 31, 2023' end_ts = date_to_milliseconds(end)
我们指定了开始和结束日期。我们使用 date_to_milliseconds 辅助函数将日期字符串转换为毫秒。
fiat_history = await client.get_fiat_payments_history(transactionType=0,
beginTime=begin_ts, endTime=end_ts)
transactionType 0 表示买入,1 表示卖出。
source_amount = float(e["sourceAmount"]) fiat_currency = e["fiatCurrency"] obtain_amount = float(e["obtainAmount"]) crypto_currency = e["cryptoCurrency"] price = float(e["price"]) total_fee = float(e["totalFee"])
我们有六列。源金额是我们用于购买加密货币的法币金额。法币是法币的类型,例如 USD 或 EUR。获得金额是我们购买的加密货币数量。加密货币是我们收到的加密货币。价格是用法币表示的加密货币价格。最后,总费用是我们为交易支付的费用。
来源
在本文中,我们使用 python-binance 模块在 Python 中操作了 Binance 交易所。
作者
列出所有 Python 教程。