首页 > 编程问答 >Binance API:自动化机器人批量大小问题

Binance API:自动化机器人批量大小问题

时间:2024-08-01 15:16:30浏览次数:9  
标签:python binance cryptocurrency binance-api-client

我正在尝试在 Python 上可用的 Binance API 上构建自己的机器人。

我目前正在尝试的是根据我的 Binance 账户中可用的金额/BTC 来下订单购买/出售 BTC。

然后,代码应该将这笔现金转换为 BTC 并发出买入/卖出订单:

  if order_book[-1]=="BUY":
    for balance in account_info['balances']:
      if float(balance['free']) > 0 and balance['asset']=="BTC":
        total_btc += float(balance['free'])
        
    
  for balance in account_info['balances']:
    if float(balance['free']) > 0 and balance['asset']=="USDT":
      total_balance += float(balance['free'])
  
    

因此,根据上面的循环,total_balance 给出了我当前拥有的现金数量。 基于此,我可以发出购买订单:

client.create_order(
symbol='BTCUSDT',
side='BUY',
type='MARKET',
quantity=float(round(float(total_balance)/float(client.get_ticker(symbol='BTCUSDT')['lastPrice']),8)))

这里的主要困难是,在这里我尝试在“数量”参数中转换为 BTC 或任何加密货币,并且最常见的是以下错误:| ||BinanceAPIException: APIError(code=-1013): Filter failure: LOT_SIZE

如何让此代码每次运行而不会出现手数错误,即如何将我拥有的现金数量精确地转换为 BTC 并进行购买订单?

非常感谢

Thank you a lot


遇到的 LOT_SIZE 错误是由于尝试交易的 BTC 数量不符合 Binance 为 BTCUSDT 交易对设定的最小交易量限制。

为了解决这个问题,需要在的代码中实现以下逻辑:

  1. 获取交易对的交易规则:

在发出订单之前,需要使用 client.get_symbol_info('BTCUSDT') 获取 BTCUSDT 交易对的交易规则。 这将返回一个包含交易规则信息的字典,包括最小交易量( LOT_SIZE )、最小报价精度( PRICE_FILTER )、最小订单金额等等。

python info = client.get_symbol_info('BTCUSDT') lot_size = float(next(filter(lambda x: x['filterType'] == 'LOT_SIZE', info['filters']) )['stepSize'])

  1. 根据最小交易量调整的订单数量:

需要将计算的 BTC 数量向下舍入到最接近的 LOT_SIZE 倍数。 可以使用以下代码实现:

```python import math

# ... (的现有代码)

# 获取 BTCUSDT 的最小交易量 info = client.get_symbol_info('BTCUSDT') lot_size = float(next(filter(lambda x: x['filterType'] == 'LOT_SIZE', info['filters']) )['stepSize'])

# 计算可以购买的最大BTC数量 quantity_btc = float(total_balance) / float(client.get_ticker(symbol='BTCUSDT')['lastPrice'])

# 将数量向下舍入到最接近的 LOT_SIZE 倍数 quantity_btc = lot_size * math.floor(quantity_btc / lot_size)

# ... (使用调整后的 quantity_btc 发出订单) client.create_order( symbol='BTCUSDT', side='BUY', type='MARKET', quantity=quantity_btc) ```

通过添加此逻辑,的代码将始终遵守 Binance 的交易规则,并且将不再遇到 LOT_SIZE 错误。

其他注意事项:

  • 还需要考虑其他交易规则,例如 MIN_NOTIONAL (最小订单金额)和 PRICE_FILTER (最小报价精度),以确保的订单有效。
  • 使用市场订单( MARKET ) 时,只需指定交易数量,无需指定价格。 但是,请注意,市场订单的价格可能会波动,并且最终可能会以高于预期价格的价格买入或低于预期价格的价格卖出。

希望这些信息能够帮助解决问题!

标签:python,binance,cryptocurrency,binance-api-client
From: 78819582

相关文章

  • C++11 中的 python 海象运算符 (:=) 等效吗?
    最近我在Python中经常使用:=运算符,这样:ifmy_object:=SomeClass.function_that_returns_object():#dosomethingwiththisobjectifitexistsprint(my_object.some_attribute)问题有没有办法在c++11中做到这一点而不使用stdlib?例如......
  • Python 自动创建阿里云 OSS 桶并配置静态网站托管
    在本文中,我们将介绍如何使用Python和阿里云OSSSDK自动创建OSS桶(如果不存在),并为新创建的桶配置静态网站托管。这对于自动化部署和管理静态网站非常有用。前提条件安装阿里云OSSSDK:pipinstalloss2准备好阿里云OSS的访问密钥(AccessKeyID和AccessKeySecret......
  • visual studio 2019下Python的开发环境搭建
    Python的开发环境有各种各样的,在Windows下可以通过各种IDE(IIntegratedDevelopmentEnvironment)来进行开发,比如Pycharm,Spyder,Thonny,Eclipse+PyDev等等一些琳琅满目的编辑器,当然还有我的选择VisualStudio。之所以会选择VS,是因为VS本身就是一个功能非常强大的集成开发环境,其优......
  • 用Python编写你的网络监控系统详解
    概要在现代网络管理中,实时监控网络流量和状态是保证网络正常运行的关键。使用Python编写网络监控工具可以帮助管理员及时发现和解决网络问题。本文将详细介绍如何使用Python编写网络监控工具,包括基本概念、常用库及其应用场景,并提供相应的示例代码。网络监控的基本概念网......
  • Python WSGI服务器库之gunicorn使用详解
    概要在部署PythonWeb应用程序时,选择合适的WSGI服务器是关键的一步。Gunicorn(GreenUnicorn)是一个高性能、易于使用的PythonWSGIHTTP服务器,适用于各种应用部署场景。Gunicorn设计简洁,支持多种工作模式,能够有效地管理和处理大量并发请求。本文将详细介绍Gunicorn......
  • 基于python电影播放平台的设计与实现【源码+文档+PPT】
    ......
  • Python中FastAPI项目使用 Annotated的参数设计
    在FastAPI中,你可以使用PEP593中的Annotated类型来添加元数据到类型提示中。这个功能非常有用,因为它允许你在类型提示中添加更多的上下文信息,例如描述、默认值或其他自定义元数据。FastAPI支持Annotated类型,这使得你可以为路径操作函数的参数提供额外的元数据,例如依赖项、查询参......
  • 三种语言实现计算二进制中1的个数(C++/Python/Java)
    题目给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第i个数表示数列中的第i个数的二进制表示中1的个数。数据范围1≤n≤100000,0≤数列中......
  • 三种语言实现双指针判断子序列(C++/Python/Java)
    题目给定一个长度为n的整数序列a1,a2,…,an以及一个长度为m的整数序列b1,b2,…,bm。请你判断a序列是否为b序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列{a1,a3,a5}是序列{a1,a2,a3,a4,a5}的一个子序列。输入格式第一行包含两个整数......
  • 三种语言实现双指针解决数组元素的目标和(C++/Python/Java)
    题目给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i]+B[j]=x的数对(i,j)。数据保证有唯一解。输入格式第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数......