本文聚焦 python-binance 0.2.0 中与账户(Account Endpoints)、订单(Orders)相关的核心 API,涵盖参数验证到资产分红的每一步操作,并给出可直接粘贴运行的 Python 代码示例。
一、下单前的权威门槛:Order Validation
在发送任何订单之前,Binance 设置了三道硬性过滤器:最小价格(minPrice)、最小下单数量(minQty)与最小总额(minNotional)。
这些数值通过 exchangeInfo 返回的字段实时更新。建议先拉取一次,缓存到本地字典,再与下列技巧结合:
直接格式化:
amount = 0.000234234 precision = 5 amt_str = "{:0.0{}f}".format(amount, precision)使用 python-binance 自带的 round_step_size:
from binance.helpers import round_step_size rounded_amount = round_step_size(0.000234234, 0.00001)只需把
tickSize或stepSize传进去,就能自动对齐。
💡【最佳实践】把这两种方法包装进自己的工具函数,能在整个 order validation 生命周期内复用,减少重复算力。
二、订单操作万字图鉴
1. 查询订单历史
orders = client.get_all_orders(symbol='BNBBTC', limit=10)2. 创建普通订单
标准方法(自由度最高)
from binance.enums import * order = client.create_order( symbol='BNBBTC', side=SIDE_BUY, type=ORDER_TYPE_LIMIT, timeInForce=TIME_IN_FORCE_GTC, quantity=100, price='0.00001')快捷函数(两行搞定):
限价买入
order = client.order_limit_buy(symbol='BNBBTC', quantity=100, price='0.00001')市价卖出
order = client.order_market_sell(symbol='BNBBTC', quantity=100)
OCO(止盈止损一键设)
order = client.create_oco_order( symbol='BNBBTC', side=SIDE_SELL, quantity=100, price='0.00002', stopPrice='0.00001', stopLimitTimeInForce=TIME_IN_FORCE_GTC)
3. 沙盒:测试订单不成交
client.create_test_order(
symbol='BNBBTC',
side=SIDE_BUY,
type=ORDER_TYPE_LIMIT,
timeInForce=TIME_IN_FORCE_GTC,
quantity=100,
price='0.00001')4. 查单、撤单、查当前挂单
查指定单
status:order = client.get_order(symbol='BNBBTC', orderId='12345678')取消单:
res = client.cancel_order(symbol='BNBBTC', orderId='12345678')查所有未成交单:
open_orders = client.get_open_orders(symbol='BNBBTC')
5. 高效读取海量历史
若需遍历全部订单,再加上 startTime 与 endTime 参数 分批拉取,可降低丢单率。
👉 实时收益率飞起来?点这里查看高阶策略沙盒示例。
三、账户总览与资金动作
1. 三步看清自己的家底
| 常用字段 | 一句话描述 |
|---|---|
| balances | 各币种在现货账户的 free 与 locked |
| updateTime | 最近一次变更时间戳 |
| permissions | 账户允许的交易/提币权限列表 |
获取:
account = client.get_account()2. 快速查余额 & 手续费
单币种余额:
btc_free = client.get_asset_balance(asset='BTC')['free']交易手续费:
# 查全部 fees = client.get_trade_fee() # 精确到某个标的 bnbbtc_fee = client.get_trade_fee(symbol='BNBBTC')[0]['makerCommission']
3. 资产详情 & 微尘转换
资产细节 列出提币最小额、充币是否启用:
details = client.get_asset_details()微尘日志 & 一键转换 BNB:
log = client.get_dust_log() client.transfer_dust(asset=['BNZ', 'USDT']) # 类似 list 亦可
FAQ:新手高频疑问解答
Q1:为什么下单一直报 LOT_SIZE 错误?
A1:验证数量是否满足 stepSize 精度,使用前文 round_step_size 即可优雅对齐。
Q2: create_order 和 order_limit_buy 有何区别?
A2:create_order 是万能接口,需要手动填入大量枚举值;而 order_limit_buy/order_limit_sell 在库内部帮你构建字段,写得更少、出错更低。
Q3:未成交的订单如何监听成交?
A3:WebSocket 订阅 !userDataStream,开启 listenKey,稍后在本地维护消息队列即可实时回调。
Q4:哪里查看 maker/taker 费率?
A4:client.get_trade_fee() 返回 makerCommission、takerCommission;需根据 VIP 等级整站决定最终扣减。
Q5:账户信息到底是缓存还是实时?
A5:get_account() 每 5 秒缓存一次,想拿最新余额,用 get_asset_balance 指定单次资产即可。
Q6:get_my_trades(symbol) 中的 id 和 orderId 不同,如何应对对账?
A6:数据库建立 双向索引,orderId 对应原单,id 是交易填充编号;可联合 time 字段去重。
四、小结与下一步
掌握以上 15 条 API 与 验证策略 后,你已经是 Binance Spot API 的“合格驾驶员”。
若想晋级量化玩家,下一步可以把 账户 API、市价单、OCO 单组合 编成循环,加上 WebSocket 成交推送,实现毫秒级自动止盈止损。
别忘了,库里封装的方法只是起点——把合理的风控与缓存逻辑嵌进来,收益才真正起飞。祝交易顺利,代码无 bug!