Python交易bot如何计算给定现金可购入的最大加密货币数量
Python 计算最大可购买加密货币数量实现方案
核心逻辑
要满足最小购买单位0.0001、现金不为负的要求,核心是把理论可购买数量向下取整到最小单位的整数倍,同时额外做浮点数精度兼容避免误差导致的超额支出。
实现代码
def calculate_max_buy_amount(available_cash: float, coin_price: float, min_unit: float = 0.0001) -> float: """ 计算可购买的最大加密货币数量 :param available_cash: 可用于买币的现金总金额(已扣除手续费等预留金额) :param coin_price: 加密货币当前单价,与现金为同计价币种 :param min_unit: 加密货币最小购买单位,默认0.0001 :return: 最大可购买数量,买不起最小单位时返回0 """ # 预减极小值避免浮点数精度误差导致计算值偏大 theoretical_max = available_cash / coin_price - 1e-12 # 向下取整到最小单位的整数倍 max_amount = (theoretical_max // min_unit) * min_unit # 二次校验避免超支 if max_amount * coin_price > available_cash: max_amount -= min_unit # 过滤负数值,买不起最小单位返回0 return max(max_amount, 0.0)
使用示例
# 示例:持有100 USDT,BTC当前单价30000 USDT/枚,计算最大可买BTC数量 max_buy_btc = calculate_max_buy_amount(available_cash=100, coin_price=30000) print(max_buy_btc) # 输出结果:0.0033 # 校验支出:0.0033 * 30000 = 99 USDT < 100 USDT,满足现金不为负要求,资金利用率最大化
兼容说明
- 如果有交易手续费需求,可提前在
available_cash参数中扣除预留手续费,例如手续费率0.1%时,传参为available_cash=总现金 * (1 - 0.001)即可 - 要修改最小购买单位时直接调整
min_unit参数即可,无需修改核心逻辑
内容的提问来源于stack exchange,提问作者Niklas Kampe
相关产品推荐
相关产品推荐

