暗号通貨取引において、
Order Book 分析とは
Order Bookとは、特定の取引ペアにおける未約定の買い注文(ビッド)と売り注文(アスク)の累積量を価格帯ごとに記録したデータ構造です。深度データには以下が含まれています:
- ビッド深度(Bid Depth):買い注文の累積量と価格分布
- アスク深度(Ask Depth):売り注文の累積量と価格分布
- スプレッド:最良買値と最良売値の価格差
- 注文フロー:時間経過に伴う注文量の変化
HolySheep vs 公式API vs 他のリレーサービスの比較
| 比較項目 | HolySheep AI | Binance公式API | Coinbase API | 他社リレーサービス |
|---|---|---|---|---|
| 為替レート | ¥1=$1(85%割引) | ¥7.3=$1(正規料金) | ¥7.3=$1 | ¥5-6=$1 |
| レイテンシ | <50ms | 100-200ms | 150-300ms | 80-150ms |
| 対応通貨 | WeChat Pay / Alipay | 銀行振込みのみ | 海外カード | 限定的 |
| 初期コスト | 登録で無料クレジット | 有料のみ | 有料のみ | 月額制 |
| Order Book解析 | リアルタイム対応 | 対応 | 対応 | 限定的 |
| 日本語サポート | 完全対応 | 限定的 | 非対応 | 混合 |
Order Book 深度データの収集と前処理
実際の分析始める前に、WebSocket接続によるリアルタイムOrder Bookデータの取得方法を確認しましょう。
リアルタイム Order Book ストリーミング
import websocket
import json
import pandas as pd
from datetime import datetime
class OrderBookCollector:
def __init__(self, api_key, symbol="btcusdt"):
self.api_key = api_key
self.symbol = symbol
self.bids = []
self.asks = []
self.update_history = []
def on_message(self, ws, message):
data = json.loads(message)
# Binance WebSocketフォーマット
if "b" in data and "a" in data:
self.bids = [[float(p), float(q)] for p, q in data["b"]]
self.asks = [[float(p), float(q)] for p, q in data["a"]]
# 深度データの特徴量抽出
features = self.extract_features()
self.update_history.append({
"timestamp": datetime.now(),
"features": features
})
def extract_features(self):
"""Order Bookから特徴量を抽出"""
bid_volumes = [q for _, q in self.bids[:20]]
ask_volumes = [q for _, q in self.asks[:20]]
bid_total = sum(bid_volumes)
ask_total = sum(ask_volumes)
# 売買圧力比率
pressure_ratio = bid_total / ask_total if ask_total > 0 else 0
# VWAP計算(加重平均価格)
bid_vwap = sum(p * q for p, q in self.bids[:10]) / sum(q for _, q in self.bids[:10])
ask_vwap = sum(p * q for p, q in self.asks[:10]) / sum(q for _, q in self.asks[:10])
return {
"bid_volume_20": bid_total,
"ask_volume_20": ask_total,
"pressure_ratio": pressure_ratio,
"bid_vwap": bid_vwap,
"ask_vwap": ask_vwap,
"spread": self.asks[0][0] - self.bids[0][0] if self.asks and self.bids else 0
}
def connect(self):
ws_url = f"wss://stream.binance.com:9443/ws/{self.symbol}@depth20@100ms"
ws = websocket.WebSocketApp(
ws_url,
on_message=self.on_message
)
ws.run_forever()
利用例
collector = OrderBookCollector(
api_key="YOUR_HOLYSHEEP_API_KEY",
symbol="btcusdt"
)
collector.connect()
深度データの分析と価格予測モデル
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
class OrderBookPredictor:
def __init__(self, model=None):
self.model = model or RandomForestRegressor(n_estimators=100)
self.scaler = StandardScaler()
self.feature_columns = [
"bid_volume_20", "ask_volume_20", "pressure_ratio",
"bid_vwap", "ask_vwap", "spread",
"bid_imbalance", "ask_imbalance", "depth_ratio"
]
def prepare_features(self, order_book_data):
"""Order Bookから予測用特徴量を生成"""
features = []
for snapshot in order_book_data:
bids = snapshot["bids"]
asks = snapshot["asks"]
# 深度カーブの傾き
bid_prices = [float(b[0]) for b in bids[:10]]
bid_qty = [float(b[1]) for b in bids[:10]]
ask_prices = [float(a[0]) for a in asks[: