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

如何通过Binance API获取Bid/Ask订单数据计算K线Delta值?

获取Binance Bid/Ask成交数据并计算K线Delta值

要获取Binance的买单(Bid)和卖单(Ask)成交数据,核心是利用Binance API返回的逐笔成交记录中的isBuyerMaker字段区分成交方向,再按K线时间分组计算Delta值。以下是具体实现步骤:

一、核心逻辑说明

Binance逐笔成交数据中的isBuyerMaker字段直接对应成交方向:

  • isBuyerMaker=False:买家为主动成交方(Taker),吃了卖家的挂单,属于Bid买单成交
  • isBuyerMaker=True:卖家为主动成交方(Taker),吃了买家的挂单,属于Ask卖单成交

Delta值计算:Delta = Ask成交总成交量 - Bid成交总成交量

二、使用REST API获取历史成交数据

1. 依赖准备

先安装Binance官方Python SDK:

pip install python-binance

2. 初始化API客户端

替换为你的Binance API密钥(仅需读取权限):

from binance.client import Client
import pandas as pd

api_key = "你的API密钥"
api_secret = "你的API密钥密码"
client = Client(api_key, api_secret)

3. 获取并解析成交数据

# 获取BTCUSDT最近1000笔逐笔成交记录
trades = client.get_trades(symbol="BTCUSDT", limit=1000)
df = pd.DataFrame(trades)

# 转换时间戳为可读格式
df["time"] = pd.to_datetime(df["time"], unit="ms")

# 转换成交量为数值类型(API返回为字符串)
df["qty"] = pd.to_numeric(df["qty"])

# 标记订单类型:Bid/Ask
df["order_type"] = df["isBuyerMaker"].apply(lambda x: "Ask" if x else "Bid")

4. 按K线分组计算Delta值

以1分钟K线为例:

# 按1分钟时间粒度分组
df["kline_time"] = df["time"].dt.floor("1min")

# 分组统计Ask/Bid总成交量,计算Delta
delta_df = df.groupby("kline_time").agg(
    ask_volume=("qty", lambda x: x[df.loc[x.index, "order_type"] == "Ask"].sum()),
    bid_volume=("qty", lambda x: x[df.loc[x.index, "order_type"] == "Bid"].sum())
).fillna(0)

delta_df["delta"] = delta_df["ask_volume"] - delta_df["bid_volume"]

# 查看结果
print(delta_df.head())

5. 获取更早的历史数据

由于get_trades接口单次最多返回1000条数据,可通过循环分页获取更早的记录:

def fetch_all_historical_trades(symbol, start_id=0):
    all_trades = []
    while True:
        batch_trades = client.get_trades(symbol=symbol, limit=1000, fromId=start_id)
        if not batch_trades:
            break
        all_trades.extend(batch_trades)
        start_id = batch_trades[-1]["id"] + 1
    return pd.DataFrame(all_trades)

# 获取BTCUSDT所有历史成交数据(数据量极大,谨慎调用)
full_trade_df = fetch_all_historical_trades("BTCUSDT")

三、使用WebSocket获取实时成交数据

如果需要实时计算Delta值,可通过WebSocket订阅实时成交频道:

from binance.websockets import BinanceSocketManager

# 存储实时成交数据的列表
real_time_data = []

def handle_real_time_trade(msg):
    if msg["e"] == "trade":
        # 解析实时成交数据
        trade_info = {
            "time": pd.to_datetime(msg["T"], unit="ms"),
            "qty": float(msg["q"]),
            "isBuyerMaker": msg["m"]
        }
        real_time_data.append(trade_info)
        
        # 实时计算当前1分钟K线的Delta
        rt_df = pd.DataFrame(real_time_data)
        rt_df["kline_time"] = rt_df["time"].dt.floor("1min")
        current_kline = rt_df[rt_df["kline_time"] == rt_df["kline_time"].max()]
        
        ask_total = current_kline[current_kline["isBuyerMaker"]]["qty"].sum()
        bid_total = current_kline[~current_kline["isBuyerMaker"]]["qty"].sum()
        current_delta = ask_total - bid_total
        
        print(f"当前1分钟K线Delta值: {current_delta:.2f}")

# 启动WebSocket连接
bm = BinanceSocketManager(client)
conn_key = bm.start_trade_socket("BTCUSDT", handle_real_time_trade)
bm.start()

注意事项

  • API密钥仅需开启读取权限即可,无需交易权限
  • 遵守Binance API调用频率限制,避免触发限流
  • 若需计算成交额(成交量×价格)的Delta,可将qty替换为quoteQty(API返回的成交金额字段)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:55:18