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

如何通过Binance API在不平仓的情况下调整持仓规模(Python实现)

Binance API 不平仓调整持仓规模方案

一、现货持仓调整(无需平仓)

现货本身没有“持仓方向”或“平仓”的概念,持有资产就是直接持有,调整规模直接通过买卖订单实现,不需要任何平仓操作:

  • 加仓:直接提交限价/市价买单,使用POST /api/v3/order端点,指定要购买的数量即可,会直接累加现有持仓量。
  • 减仓:直接提交限价/市价卖单,指定要卖出的数量,会直接减少现有持仓量,剩余持仓保留。

你之前使用的POST /api/v3/order其实就是正确的调整方式,可能是误解了现货的交易逻辑——现货不需要“平仓”,直接买卖对应数量就能完成持仓规模的动态调整。

Python示例(现货加仓):

import requests
import hmac
import hashlib
import time

API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.binance.com"

def create_spot_order(symbol, side, order_type, quantity):
    endpoint = "/api/v3/order"
    params = {
        "symbol": symbol,
        "side": side,  # BUY 对应加仓,SELL 对应减仓
        "type": order_type,  # 可选 LIMIT 或 MARKET
        "quantity": quantity,
        "timestamp": int(time.time() * 1000)
    }
    # 生成API签名
    query_string = "&".join([f"{k}={v}" for k, v in params.items()])
    signature = hmac.new(API_SECRET.encode(), query_string.encode(), hashlib.sha256).hexdigest()
    params["signature"] = signature
    
    response = requests.post(BASE_URL + endpoint, headers={"X-MBX-APIKEY": API_KEY}, params=params)
    return response.json()

# 示例:BTCUSDT现货加仓0.001 BTC(市价单)
result = create_spot_order("BTCUSDT", "BUY", "MARKET", "0.001")
print(result)

二、期货持仓调整(不平仓重开)

期货(U本位/fapi、币本位/dapi)的核心是利用单边持仓模式实现同方向加仓,或通过反向部分订单实现减仓,全程无需平仓重开:

1. 前提:切换到单边持仓模式

如果当前是双边持仓模式,先切换为单边模式(切换前需确保无未平仓持仓):

def set_futures_position_mode(dual_side_enabled):
    endpoint = "/fapi/v1/positionSide/dual"
    params = {
        "dualSidePosition": dual_side_enabled,  # False = 单边模式,True = 双边模式
        "timestamp": int(time.time() * 1000)
    }
    query_string = "&".join([f"{k}={v}" for k, v in params.items()])
    signature = hmac.new(API_SECRET.encode(), query_string.encode(), hashlib.sha256).hexdigest()
    params["signature"] = signature
    
    response = requests.post("https://fapi.binance.com" + endpoint, headers={"X-MBX-APIKEY": API_KEY}, params=params)
    return response.json()

# 切换为单边持仓模式
set_futures_position_mode(False)

2. 同方向加仓(无需平仓)

在单边模式下,直接提交同方向的期货订单即可完成加仓,持仓量会自动累加:

  • 多单加仓:提交BUY方向的期货订单(POST /fapi/v1/order)
  • 空单加仓:提交SELL方向的期货订单

Python示例(U本位期货多单加仓):

def create_futures_order(symbol, side, order_type, quantity):
    endpoint = "/fapi/v1/order"
    params = {
        "symbol": symbol,
        "side": side,  # BUY = 加多单,SELL = 加空单
        "type": order_type,
        "quantity": quantity,
        "timestamp": int(time.time() * 1000)
    }
    query_string = "&".join([f"{k}={v}" for k, v in params.items()])
    signature = hmac.new(API_SECRET.encode(), query_string.encode(), hashlib.sha256).hexdigest()
    params["signature"] = signature
    
    response = requests.post("https://fapi.binance.com" + endpoint, headers={"X-MBX-APIKEY": API_KEY}, params=params)
    return response.json()

# 示例:BTCUSDT U本位期货多单加仓10 USDT(市价单)
result = create_futures_order("BTCUSDT", "BUY", "MARKET", "10")
print(result)

3. 部分减仓(无需全平重开)

在单边模式下,提交反向方向但数量小于当前持仓量的订单,即可实现部分减仓,剩余持仓会保留:

  • 多单减仓:提交SELL方向订单,数量为想要减少的持仓量
  • 空单减仓:提交BUY方向订单,数量为想要减少的持仓量

比如当前持有100 USDT多单,提交SELL方向50 USDT的市价单,持仓会直接变为50 USDT多单,无需全平后重开。

4. 双边持仓模式下的调整(可选)

如果必须使用双边模式,也可以在对应方向下新订单加仓——双边模式下多空持仓分开计算,同方向下单同样无需平仓,直接累加持仓量即可。

关键注意事项

  • 期货操作前务必确保账户有足够保证金,避免触发爆仓机制。
  • 所有Binance API私有请求都需要进行HMAC签名认证,示例中已包含完整签名逻辑。
  • 可以通过GET /fapi/v2/positionRisk(U本位)或GET /dapi/v1/positionRisk(币本位)查询当前持仓情况,确认调整结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:53:10