You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Binance API获取套利交易对价格计算结果异常求助

三角套利计算结果异常问题解决

问题背景

通过Binance API获取交易对价格用于三角套利,但计算结果远偏离预期(实际输出23.52、16.47,预期为0.909、0.929),尝试多种方法未解决。

原代码

last_data = [["ETHBTC", "BTCPAX", "PAXETH"],["ETHBTC", "BTCTUSD", "TUSDETH"],... ...]
for a in last_data:
  az = 1.0
  for y in a:
    response = requests.get(f"https://api.binance.com/api/v3/ticker/price?symbol={y}")
    az *= float(response.json()["price"])
    print(y)
  print(az)

实际输出

ETHBTC
BTCPAX
PAXETH
23.520797834005702

ETHBTC
BTCTUSD
TUSDETH
16.47345165311804

预期结果

first avg: 0,909
second avg: 0,929

问题原因

  1. 价格方向理解错误:Binance api/v3/ticker/price返回的是1个基础币可兑换的计价币数量,原代码直接相乘未匹配套利循环的正确方向,导致结果异常放大。
  2. 使用错误的价格类型:用最新成交价而非盘口挂单的买/卖价,无法模拟真实交易的成交成本,结果偏离实际套利空间。
  3. 未扣除交易手续费:套利需扣除每笔交易的手续费,预期结果是扣除手续费后的合理数值,原计算未考虑这一点。
  4. 交易对有效性问题:PAX已被Binance替换为USDP,PAXETH交易可能已下线,导致获取的价格异常。

修正后的代码

import requests

# 手续费率,根据你的Binance VIP等级调整,默认0.1%
FEE_RATE = 0.001
last_data = [["ETHBTC", "BTCPAX", "PAXETH"], ["ETHBTC", "BTCTUSD", "TUSDETH"]]

for pair_group in last_data:
    arbitrage_result = 1.0
    for pair in pair_group:
        # 获取盘口买卖价,替代最新成交价
        response = requests.get(f"https://api.binance.com/api/v3/ticker/bookTicker?symbol={pair}")
        ticker_data = response.json()
        # 此处用bidPrice模拟卖出基础币的成交价,若套利方向相反需改用askPrice
        price = float(ticker_data["bidPrice"])
        arbitrage_result *= price
        print(pair)
    # 扣除三次交易的手续费
    arbitrage_result *= (1 - FEE_RATE) ** 3
    print(f"计算结果: {arbitrage_result:.3f}\n")

说明

  • 改用bookTicker接口获取盘口买/卖价,能更准确模拟真实交易的成交价格。
  • 加入手续费计算,结果会更接近预期的扣除成本后的数值。
  • 需确认交易对的有效性,建议将PAX相关交易对替换为USDP对应交易对(如USDPETH)。

内容的提问来源于stack exchange,提问作者eymentakak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:00:39