API連携

バイナンスの Futures と Spot API の違いは?エンドポイント・パラメータ・ウェイトの比較

バイナンスの Futures(先物・レバレッジ)API と Spot(現物)API の完全比較:ベース URL、署名メカニズム、注文パラメータ、レバレッジ設定、ポジション照会、資金調達率、ウェイトルールの違いを詳しく解説。Spot と Futures の並列呼び出しの実戦コード付き。

バイナンスの Futures(先物)API と Spot(現物)API の根本的な違いは、ベースドメインパラメータセットにあります。現物(Spot)は api.binance.com/api/v3/* を使用し、先物(Futures)のU本位(USDT/USDC-M)は fapi.binance.com/fapi/v1/*、币本位(Coin-M)は dapi.binance.com/dapi/v1/* を使用します。署名アルゴリズムはどちらも HMAC-SHA256 ですが、先物では reduceOnly(リデュースオンリー)、positionSide(ポジションサイド)、leverage(レバレッジ)などの追加パラメータが必要となり、ウェイト(負荷)ルールも異なります。本記事では、10の観点から比較表と実戦コードを提示し、现物向けの量化戦略をスムーズに先物へ移行する方法を解説します。バイナンスアカウントをお持ちでない方は、まずバイナンス公式サイトで登録を完了してください。新規ユーザーの方は 無料登録 から口座を開設できます。

一、基礎比較一覧表

項目 Spot(現物) Futures(U本位) Futures(币本位)
ベース URL api.binance.com fapi.binance.com dapi.binance.com
パス接頭辞 /api/v3/ /fapi/v1/ および /fapi/v2/ /dapi/v1/
証拠金通貨 USDT, USDC BTC, ETH, BNB 等
最大レバレッジ 非対応(マージン取引のみ) 125x 125x
ヘッジモード 非対応 対応(HEDGE モード) 対応
WebSocket URL stream.binance.com:9443 fstream.binance.com dstream.binance.com
最小注文額 5 USDT (MIN_NOTIONAL) 5 USDT 名目価値ベース
資金調達率 なし 8時間ごと 8時間ごと
1分間ウェイト 6000 2400 2400
listenKey 有効期限 60分 60分 60分

重要なポイント:U本位のエンドポイントは常に fapi で始まり、币本位は dapi で始まります。現物のコードのURLを書き換えるだけでは動作しません。

二、署名メカニズムの細かな違い

署名アルゴリズム自体は同一(HMAC-SHA256)ですが、以下の2点に注意が必要です。

1. recvWindow のデフォルト値

  • Spot:デフォルト 5000ms、最大 60000ms
  • Futures:デフォルト 5000ms、最大 60000ms(ただし公式は 5000ms 以内を強く推奨)

2. 数値パラメータは文字列を推奨

Futures API は数値の精度に非常に敏感です。注文時の pricequantity は、浮動小数点の精度エラー(-1111 Precision)を避けるため、文字列形式で渡すことが推奨されます。

# 非推奨
{"price": 60000.123456789, "quantity": 0.001}

# 推奨
{"price": "60000.12", "quantity": "0.001"}

三、残高・ポジション照会のインターフェースの違い

Spot(現物)残高

# Spot: GET /api/v3/account
# balances 配列が返されます
{
  "balances": [{"asset": "USDT", "free": "1000", "locked": "0"}]
}

Futures(U本位)ポジション照会

import hmac, hashlib, time, requests
from urllib.parse import urlencode

API_KEY = "YOUR_KEY"
SECRET_KEY = "YOUR_SECRET"
FAPI = "https://fapi.binance.com"

def _sign(params):
    params["timestamp"] = int(time.time() * 1000)
    query = urlencode(params)
    params["signature"] = hmac.new(SECRET_KEY.encode(), query.encode(), hashlib.sha256).hexdigest()
    return params

def get_positions():
    """V2 ポジション照会:保有中のポジションのみを返す"""
    params = _sign({})
    r = requests.get(f"{FAPI}/fapi/v2/positionRisk", params=params,
                     headers={"X-MBX-APIKEY": API_KEY})
    return [p for p in r.json() if float(p["positionAmt"]) != 0]

def get_futures_balance():
    """V2 先物アカウント残高"""
    params = _sign({})
    r = requests.get(f"{FAPI}/fapi/v2/balance", params=params,
                     headers={"X-MBX-APIKEY": API_KEY})
    return r.json()

positions = get_positions()
for p in positions:
    print(f"{p['symbol']}: 数量 {p['positionAmt']}, 参入価格 {p['entryPrice']}, 未実現損益 {p['unRealizedProfit']}")

四、注文パラメータの比較

现物注文には4〜5個のパラメータで済みますが、先物注文にはポジションの方向リデュースオンリー(減倉のみ)セルフトレード防止などのフィールドが追加されます。

パラメータ Spot Futures
symbol 必須 必須
side BUY / SELL BUY / SELL
type LIMIT/MARKET/... LIMIT/MARKET/STOP/TAKE_PROFIT/TRAILING_STOP_MARKET
quantity 必須 必須(または closePosition を使用)
positionSide BOTH(ワンウェイ)/ LONG / SHORT(ヘッジモード)
reduceOnly true の場合、ポジション減少のみ許可
closePosition true で一括決済
workingType MARK_PRICE(マーク価格) / CONTRACT_PRICE(最新価格)
newOrderRespType ACK/RESULT/FULL ACK/RESULT

Futures 限価注文の例

def place_futures_limit(symbol, side, quantity, price, position_side="BOTH"):
    params = _sign({
        "symbol": symbol,
        "side": side,
        "type": "LIMIT",
        "timeInForce": "GTC",
        "quantity": str(quantity),
        "price": str(price),
        "positionSide": position_side,
    })
    r = requests.post(f"{FAPI}/fapi/v1/order", params=params,
                      headers={"X-MBX-APIKEY": API_KEY})
    return r.json()

# ロング 0.01 BTC、指値 60000
order = place_futures_limit("BTCUSDT", "BUY", 0.01, 60000)
print(order["orderId"])

五、レバレッジと証拠金モードの設定

Futures 固有の設定インターフェースです。

# レバレッジ倍率の設定
def set_leverage(symbol: str, leverage: int):
    params = _sign({"symbol": symbol, "leverage": leverage})
    r = requests.post(f"{FAPI}/fapi/v1/leverage", params=params,
                      headers={"X-MBX-APIKEY": API_KEY})
    return r.json()

set_leverage("BTCUSDT", 10)  # 10倍レバレッジに設定

# 証拠金モードの設定:ISOLATED(隔離)または CROSSED(交差)
def set_margin_type(symbol: str, margin_type: str):
    params = _sign({"symbol": symbol, "marginType": margin_type})
    r = requests.post(f"{FAPI}/fapi/v1/marginType", params=params,
                      headers={"X-MBX-APIKEY": API_KEY})
    return r.json()

set_margin_type("BTCUSDT", "ISOLATED")

注意:該当ペアにポジションがある場合は証拠金モードを変更できません。決済後に変更する必要があります。

六、資金調達率(Funding Rate)

Funding Rate は先物特有の概念で、8時間ごとに決済されます。

# 最新の資金調達率を取得
def get_funding_rate(symbol="BTCUSDT"):
    r = requests.get(f"{FAPI}/fapi/v1/premiumIndex",
                     params={"symbol": symbol})
    data = r.json()
    return {
        "markPrice": data["markPrice"],
        "fundingRate": data["lastFundingRate"],
        "nextFundingTime": data["nextFundingTime"]
    }

# 履歴の取得
def funding_history(symbol, limit=100):
    r = requests.get(f"{FAPI}/fapi/v1/fundingRate",
                     params={"symbol": symbol, "limit": limit})
    return r.json()

アービトラージのヒントfundingRate がプラスならロングがショートに支払い、マイナスならその逆です。高いプラス金利が続く際の「U本位ショート + 現物ロング」は定番の金利アービトラージ戦略です。

七、ウェイトとリミットの違い

# Spot レスポンスヘッダー
X-MBX-USED-WEIGHT-1m: 45
X-MBX-ORDER-COUNT-10s: 3

# Futures レスポンスヘッダー
X-MBX-USED-WEIGHT-1m: 12
X-MBX-ORDER-COUNT-1m: 5
X-MBX-ORDER-COUNT-10s: 3

先物 API には、現物にはない**「1分間あたりの注文数上限」**(デフォルト 1200回/分)があります。高頻度取引(HFT)戦略では、この監視が重要になります。

八、WebSocket の違い

# Spot 市場データの購読
import websocket, json

def on_message(ws, msg):
    data = json.loads(msg)
    print(data["s"], data["c"])  # symbol, close price

# Spot
ws_spot = websocket.WebSocketApp(
    "wss://stream.binance.com:9443/ws/btcusdt@ticker",
    on_message=on_message)

# Futures U本位
ws_fut = websocket.WebSocketApp(
    "wss://fstream.binance.com/ws/btcusdt@markPrice",  # マーク価格の配信
    on_message=on_message)

先物固有の購読トピックとして、@markPrice(マーク価格)、@forceOrder(強制決済通知)、@liquidation があります。

九、Spot + Futures 並列操作のコード例

ヘッジ戦略など、現物の買い + 先物の売りを同時に行う場合の実装例です。

import asyncio, aiohttp

async def spot_buy(session, symbol, qty):
    # 簡略化:実際には署名が必要
    async with session.post("https://api.binance.com/api/v3/order",
                            params={"symbol": symbol, "side": "BUY",
                                    "type": "MARKET", "quantity": qty}) as r:
        return await r.json()

async def futures_short(session, symbol, qty):
    async with session.post("https://fapi.binance.com/fapi/v1/order",
                            params={"symbol": symbol, "side": "SELL",
                                    "type": "MARKET", "quantity": qty}) as r:
        return await r.json()

async def hedge():
    async with aiohttp.ClientSession() as s:
        results = await asyncio.gather(
            spot_buy(s, "BTCUSDT", 0.01),
            futures_short(s, "BTCUSDT", 0.01)
        )
        print(results)

asyncio.run(hedge())

十、よくある質問 FAQ

Q1: 1つの API Key で Spot と Futures の両方を操作できますか?

A: はい。API Key 設定で Enable Spot & Margin TradingEnable Futures の両方にチェックを入れれば可能です。ただし、先物アカウントは Web 上で別途開設(クイズに回答)しておく必要があります。そうでないと API 呼び出しで -2015 Invalid API-key, IP, or permissions エラーが発生します。

Q2: fapi.binance.com と dapi.binance.com は残高が分かれていますか?

A: はい。U本位先物は USDT/USDC ウォレット、币本位先物は BTC/ETH 等の個別ウォレットを使用し、現物ウォレットとは完全に独立しています。資金を移動させるには、/sapi/v1/futures/transfer エンドポイントを使用して振替を行う必要があります。

Q3: 先物の v1 と v2 の違いは何ですか?

A: v2 は強化版で、主に精度とフィールド命名が最適化されています。残高やポジション照会には v2/fapi/v2/positionRisk, /fapi/v2/balance)を使用し、注文系は v1(/fapi/v1/order)を使用するのが現在の標準です。

Q4: 統合アカウント(Portfolio Margin)の場合はコードを変える必要がありますか?

A: 統合アカウントは papi.binance.com/papi/v1/* という独立したドメインを使用し、エンドポイントは fapi に似ていますがパラメータが若干異なります。VIP または超大口アカウント専用の機能です。

Q5: 先物 API の最小注文額は?

A: U本位では原則として 5 USDT 相当の名目価値 です。具体的なフィルター値は GET /fapi/v1/exchangeInfoMIN_NOTIONAL フィルターで確認できます。

API 連携に関するより詳細なガイドは、カテゴリナビに戻り、「API連携」カテゴリをご覧ください。

引き続き閲覧

バイナンスの利用でまだ疑問がありますか?カテゴリページに戻って同じテーマの他のガイドを探しましょう。

カテゴリナビ

関連ガイド

バイナンスAPIの申請方法:APIキー取得と署名生成の完全ガイド 2026-04-14 バイナンス現物API(Spot API)の使い方:ゼロから最初の注文まで、実行可能なサンプルコード 2026-04-14 バイナンスAPIでIP制限を避けるには?レート制限とウェイト計算の仕組みを解説 2026-04-14 バイナンスのWebSocketで相場を購読する方法は?単一/混合ストリームのプロダクション級コード 2026-04-14