WebSocket APIリファレンス
ホエールポジション、資金調達レート、清算、AI確認スコアのリアルタイムデータストリーミング。サブ秒レベルの遅延、自動再接続、効率的なデータ圧縮、マルチストリームサブスクリプションを実現。
概要
WebSocket APIは、リアルタイムの暗号通貨デリバティブデータ向けに低遅延の双方向通信を提供します。5〜30秒ごとにRESTエンドポイントをポーリングする代わりに、WebSocket接続は市場状況が変化した瞬間に更新を配信します。トレーディングボット、アラートシステム、リアルタイムダッシュボードに最適です。
RESTと比較したWebSocketの主な利点:
市場を動かすイベント(清算、ホエールの動き)に対するサブ秒レベルの遅延
差分エンコードによる効率的な帯域幅使用
単一接続での複数同時サブスクリプション
サーバーサイドフィルタリングと集計
自動ハートビートと再接続処理
クォータに対するAPIリクエスト数の削減
WebSocket接続はすべてのAPIティアで利用可能です。無料ティアユーザーは資金調達レートと清算ストリームを購読できます。トレーダーおよびプロティアでは、ホエールポジション、オープンインタレスト、確認スコアが利用可能になります。
認証
WebSocket接続はRESTエンドポイントと同じ認証を使用します。APIキーをクエリパラメータとして渡すか、接続後の最初のメッセージで送信してください。
接続URL
基本WebSocket URL: wss://ws.smartmoneyapi.com/stream
接続URLにAPIキーを含める:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
接続ライフサイクル
初期接続
WebSocketエンドポイントに接続すると、サーバーは認証トークンを検証し、接続確認を送信します。
{
"type": "connection_ack",
"connection_id": "conn_1a2b3c4d5e6f7g8h",
"server_version": "1.2.4",
"timestamp": "2026-03-21T14:35:22Z",
"api_tier": "pro",
"max_subscriptions": 50,
"max_symbols_per_sub": 100
}
ハートビート (Ping/Pong)
サーバーは30秒ごとに定期的なハートビートpingを送信します。クライアントは接続を維持するためにpongメッセージで応答する必要があります。サーバーが10秒以内にpong応答を受信しない場合、接続は閉じられます。
const ws = new WebSocket("wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789");
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
// pingにpongで応答
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("WebSocketに接続");
};
サブスクリプション
接続後、サブスクリプションメッセージを使用してデータストリームを購読します。各サブスクリプションは、市場データが変更されるたびに更新を生成します。
サブスクリプションメッセージ形式
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
アンサブスクリプションメッセージ形式
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
ホエールポジションストリーム
追跡対象のすべてのシンボルと取引所における大規模なホエールポジションのリアルタイム更新。ホエールがポジションを開く、閉じる、または変更する際に更新が送信されます。エントリー価格、現在価格、P&L、レバレッジ、清算リスクが含まれます。
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
更新メッセージ
{
"type": "data",
"channel": "whale_positions",
"symbol": "BTCUSDT",
"data": {
"wallet_address": "0x1234...",
"exchange": "bybit",
"direction": "long",
"position_size": 25.3,
"entry_price": 41200.0,
"current_price": 43200.5,
"pnl": 50701.50,
"pnl_percent": 4.86,
"leverage": 8,
"liquidation_price": 33760.0,
"timestamp": "2026-03-21T14:35:45Z"
}
}
資金調達レートストリーム
Bybit、Binance、Hyperliquidにおけるリアルタイムの資金調達レート更新。1分ごと、またはレートが大幅に変化した際に更新されます。個別取引所のレートと集計メトリクスを含みます。
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
更新メッセージ
{
"type": "data",
"channel": "funding_rates",
"symbol": "BTCUSDT",
"data": {
"timestamp": "2026-03-21T14:00:00Z",
"bybit": {
"rate": 0.000120,
"next_rate": 0.000145
},
"binance": {
"rate": 0.000098,
"next_rate": 0.000115
},
"hyperliquid": {
"rate": 0.000140,
"next_rate": 0.000160
},
"aggregated": {
"mean": 0.000119,
"median": 0.000120,
"spread": 0.000062
}
}
}
清算ストリーム
レバレッジポジションの強制決済を表示するリアルタイムフィード。ポジションサイズ、清算価格、方向(ロング/ショート)、取引所が含まれます。清算連鎖と高影響力の市場動きを特定するのに有用です。
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
更新メッセージ
{
"type": "data",
"channel": "liquidations",
"data": {
"exchange": "binance",
"symbol": "BTCUSDT",
"direction": "long",
"position_size": 12.5,
"liquidation_price": 41000.0,
"size_usd": 512500.0,
"timestamp": "2026-03-21T14:35:12Z"
}
}
オープンインタレストストリーム
各シンボルにおけるすべてのレバレッジトレーダーの総合オープンインタレスト。OIの増加(レバレッジへの資金流入)と減少(ポジション決済)を追跡します。価格動向からのOIの乖離は、隠れた強気/弱気の枯渇を識別します。
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
確認スコアストリーム
ホエールポジション、オンチェーンシグナル、資金調達レート、センチメントデータを組み合わせたリアルタイムAI確認スコア。基礎となるシグナルが変化するたびにスコアが更新され、トレーディングアルゴリズム向けのライブエントリー/エグジットシグナルを提供します。
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
自動再接続ロジック
ネットワーク問題やサーバーメンテナンスにより接続が切断される可能性があります。サーバー負荷を考慮しながら、障害から自動的に回復するための指数バックオフ再接続ロジックを実装してください。
推奨再接続戦略
class SmartMoneyWebSocket {
constructor(token, options = {}) {
this.token = token;
this.maxReconnectDelay = options.maxReconnectDelay || 30000;
this.reconnectDelay = 1000;
this.subscriptions = new Map();
this.connect();
}
connect() {
this.ws = new WebSocket(
`wss://ws.smartmoneyapi.com/stream?token=${this.token}`
);
this.ws.onopen = () => {
console.log("接続完了");
this.reconnectDelay = 1000; // バックオフリセット
this.resubscribe(); // 再接続後に再購読
};
this.ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
this.ws.send(JSON.stringify({ type: "pong", id: msg.id }));
}
this.onMessage(msg);
};
this.ws.onclose = () => this.reconnect();
this.ws.onerror = (err) => console.error("WebSocketエラー:", err);
}
reconnect() {
console.log(`再接続まで${this.reconnectDelay}ms待機`);
setTimeout(() => {
this.connect();
this.reconnectDelay = Math.min(
this.reconnectDelay * 1.5,
this.maxReconnectDelay
);
}, this.reconnectDelay);
}
subscribe(channel, symbols, params) {
const key = `${channel}:${symbols.join(",")}`;
this.subscriptions.set(key, { channel, symbols, params });
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
resubscribe() {
for (const { channel, symbols, params } of this.subscriptions.values()) {
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
}
onMessage(msg) {
if (msg.type === "data") {
console.log(`更新: ${msg.channel}/${msg.symbol}`, msg.data);
}
}
}
const client = new SmartMoneyWebSocket("sk_live_abc123xyz789");
client.subscribe("whale_positions", ["BTCUSDT", "ETHUSDT"]);
client.subscribe("funding_rates", ["BTCUSDT"]);
client.subscribe("liquidations", [], { min_size_usd: 100000 });
コード例
Python WebSocketクライアント
import asyncio
import json
import websockets
async def stream_whale_positions():
uri = "wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789"
async with websockets.connect(uri) as websocket:
# 接続確認を待機
ack = await websocket.recv()
print(f"接続完了: {ack}")
# ホエールポジションを購読
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# 更新を監視
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# pingに応答
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"新しいポジション: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("接続が閉じられました、再接続中...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
購読時にフィルタリング: アプリケーション内でフィルタリングする代わりに、paramsオブジェクトを使用してサーバーサイドでデータをフィルタリングします(min_position_size、min_size_usd)。
バッチサブスクリプション: シンボルごとに個別に購読するのではなく、単一メッセージで複数シンボルを購読します。
未使用の場合はアンサブスクライブ: ストリームが不要になったら、帯域幅とメッセージ量を節約するためにアンサブスクライブします。
gzip圧縮を使用: 帯域幅節約(20-40%削減)のためにWebSocketクライアントでメッセージ圧縮を有効にします。
接続状態を監視: ping/pongの遅延と自動再接続を追跡してネットワーク問題を診断します。
切断中にメッセージをバッファリング: 接続が切断された場合、戦略シグナルをキューに入れ、再接続時に実行します。
今すぐストリーミングを開始
APIキーを取得し、リアルタイム取引システムの構築を開始しましょう。WebSocketストリーミングは全プランで利用可能です。
APIキーを取得
リアルタイム取引システムを構築
クジラのポジション、資金調達レート、AI確認スコアをサブ秒レイテンシーでストリーミング。
プランを確認