暗号通貨の流動性供給(マーケットメイク)で安定した利益を出すには、正確なPnL分析と在庫リスク管理が不可欠です。本記事では、オーダーブックデータの取得から、利益計算、リスクモデリングまで、ゼロから丁寧に解説します。
マーケットメイクとは?基本概念をわかりやすく解説
マーケットメイクとは、取引所にbid(買い注文)とask(売り注文)を同時に入れ、spread(買い値と売りの差額)から利益を得る戦略です。
Simple な原理
あなたが提示する価格:
Bid(買い): $99,000
Ask(売): $99,010
Spread = $99,010 - $99,000 = $10
取引が成立するたび $10 の利益(手数料差し引き前)
しかし、見かけのspread利益背后には、在庫リスク(価格が不利方向に動いた場合の実損)が隠れています。このリスクを数値化し、可視化することが本記事の目的です。
Tardis APIとは?リアルタイム オーダーブックデータの取得
Tardisは、複数の暗号通貨取引所のリアルタイム・ヒストリカルデータを統一形式で提供するAPIです。 Binance、Bybit、OKXなどの主要取引所のorder bookデータを同じスキーマで取得できます。
Tardis APIで先物取引所の オーダーブックを取得
import requests
Tardis Historical Market Data API
ドキュメント: https://tardis.dev/
TARDIS_API_KEY = "your_tardis_api_key"
def get_orderbook_snapshot(exchange, symbol, date):
"""
指定取引所・銘柄の日次のorder bookスナップショットを取得
"""
url = f"https://api.tardis.dev/v1/feeds/{exchange}:{symbol}"
params = {
"from": f"{date}T00:00:00Z",
"to": f"{date}T23:59:59Z",
"type": "book_snapshot", # オーダーブックスナップショット
"limit": 1000
}
headers = {
"Authorization": f"Bearer {TARDIS_API_KEY}"
}
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
return response.json()
使用例: Binance先物のBTC/USDT perpetuals
data = get_orderbook_snapshot(
exchange="binance-futures",
symbol="BTC-USDT-PERPETUAL",
date="2024-01-15"
)
print(f"取得レコード数: {len(data)}")
print(f"サンプルデータ: {data[0]}")
Tardis APIの主要エンドポイント
| エンドポイント | 用途 | 返り数据类型 |
|---|---|---|
| /v1/feeds/{exchange}:{symbol} | リアルタイム・過去データストリーム | JSON Lines |
| /v1/feeds | 利用可能な取引所・銘柄一覧 | JSON Array |
| /v1/exchanges | 対応取引所情報 | JSON Array |
| /v1/symbols/{symbol} | 銘柄の詳細情報 | JSON Object |
HolySheep AIでPnL分析を自動化する方法
取得したorder bookデータから、マーケットメイクのPnLを分析します。HolySheep AIは、GPT-4.1が$8/MTok、Gemini 2.5 Flashが$2.50/MTokという破格の料金でLLM分析を提供しており、複雑な財務分析に最適です。日本語対応も優れています。
Step 1: APIクライアントの設定
import openai
import json
HolySheep AI API設定
登録: https://www.holysheep.ai/register
openai.api_key = "YOUR_HOLYSHEEP_API_KEY"
openai.api_base = "https://api.holysheep.ai/v1" # 公式エンドポイント
def analyze_market_make_pnl(orderbook_data, trades_data, position_data):
"""
マーケットメイクのPnLを分析
Parameters:
- orderbook_data: オーダーブックデータ
- trades_data: 約定履歴
- position_data: 現在ポジション情報
"""
prompt = f"""
あなたは暗号通貨マーケットメイクの利益分析エキスパートです。
以下のデータからPnL分析を行ってください。
【オーダーブックデータ(直近100件)】
{json.dumps(orderbook_data[:100], indent=2)}
【約定履歴】
{json.dumps(trades_data, indent=2)}
【現在のポジション】
{json.dumps(position_data, indent=2)}
以下の項目をJSON形式で出力してください:
1. realized_pnl: 実現損益(USD)
2. unrealized_pnl: 未実現損益(USD)
3. gross_spread_profit: spread収益(USD)
4. total_fees: 支払手数料(USD)
5. inventory_risk_score: 在庫リスクスコア(0-100)
6. risk_factors: リスク要因(配列)
7. recommendations: 改善提案(配列)
"""
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "あなたは金融データ分析の専門家です。"},
{"role": "user", "content": prompt}
],
temperature=0.3, # 分析精度向上のため低めに設定
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
使用例
result = analyze_market_make_pnl(
orderbook_data=orderbook_snapshot,
trades_data=my_trades,
position_data=current_position
)
print("=== PnL 分析結果 ===")
print(f"実現損益: ${result['realized_pnl']:.2f}")
print(f"未実現損益: ${result['unrealized_pnl']:.2f}")
print(f"在庫リスクスコア: {result['inventory_risk_score']}/100")
在庫リスクモデリングの詳細
マーケットメイクの核心的なリスクは「一方的な価格変動」です。あなたが買い持ち过多の状态下で価格が下落すると、spread収益では弥补できない大きな損失が発生します。
シンプルな在庫リスクモデルの実装
import numpy as np
from dataclasses import dataclass
from typing import List, Dict
@dataclass
class InventoryState:
"""現在の在庫状態"""
base_asset: float # BTC等の基本資産数量
quote_asset: float # USDT等の建て玉
avg_entry_price: float # 平均参入価格
realized_pnl: float # 実現損益
unrealized_pnl: float # 未実現損益
class InventoryRiskModel:
"""
マーケットメイクの在庫リスクを модель化
"""
def __init__(self, target_inventory_ratio: float = 0.5):
"""
Args:
target_inventory_ratio: 目標在庫比率(0.5 = 中立)
"""
self.target_ratio = target_inventory_ratio
self.price_history = []
def calculate_var(self, returns: List[float], confidence: float = 0.95) -> float:
"""
VaR(バリューアットリスク)を計算
指定信頼区間での最大損失を見積もる
"""
if len(returns) < 30:
return 0.0
sorted_returns = sorted(returns)
index = int((1 - confidence) * len(sorted_returns))
return abs(sorted_returns[index])
def calculate_inventory_risk_score(
self,
current_state: InventoryState,
current_price: float,
volatility: float
) -> Dict:
"""
在庫リスクスコアを計算(0-100)
"""
# 1. 在庫偏りリスク(目標比率からのズレ)
current_ratio = current_state.base_asset / (
current_state.base_asset +
current_state.quote_asset / current_price
) if current_state.base_asset > 0 else 0
imbalance_penalty = abs(current_ratio - self.target_ratio) * 100
# 2. 価格変動リスク(VaRベース)
var_95 = self.calculate_var(self.price_history[-100:]) if len(self.price_history) > 0 else volatility
volatility_risk = min(var_95 * 1000, 50) # 上限50点
# 3. ポジションサイズリスク
total_exposure = abs(current_state.base_asset * current_price)
position_risk = min(total_exposure / 100000, 30) # $100kごとに1点、上限30点
# 合計リスクスコア
total_score = min(imbalance_penalty + volatility_risk + position_risk, 100)
return {
"total_risk_score": round(total_score, 1),
"components": {
"inventory_imbalance": round(imbalance_penalty, 1),
"volatility_risk": round(volatility_risk, 1),
"position_size_risk": round(position_risk, 1)
},
"risk_level": "低" if total_score < 30 else "中" if total_score < 60 else "高",
"recommendation": self._get_recommendation(total_score, current_ratio)
}
def _get_recommendation(self, risk_score: float, current_ratio: float) -> str:
"""リスクレベルに応じた推奨アクション"""
if risk_score < 30:
return "現行戦略を継続"
elif current_ratio > self.target_ratio:
return "ask側の流動性供给を減らし、bid側を強化"
else:
return "bid側の流動性供给を減らし、ask側を強化"
使用例
model = InventoryRiskModel(target_inventory_ratio=0.5)
current_state = InventoryState(
base_asset=1.5, # 1.5 BTC保有
quote_asset=65000, # 65,000 USDT保有
avg_entry_price=62000, # 平均参入価格
realized_pnl=1500, # 実現損益
unrealized_pnl=-200 # 含み損
)
risk_analysis = model.calculate_inventory_risk_score(
current_state=current_state,
current_price=61000, # 現在のBTC価格
volatility=0.02 # 2%日次ボラティリティ
)
print(f"在庫リスクスコア: {risk_analysis['total_risk_score']}/100")
print(f"リスクレベル: {risk_analysis['risk_level']}")
print(f"推奨アクション: {risk_analysis['recommendation']}")
HolySheep AI vs 他サービス:料金比較
| サービス | GPT-4.1 | Claude Sonnet 4.5 | Gemini 2.5 Flash | DeepSeek V3.2 | 日本語対応 |
|---|---|---|---|---|---|
| HolySheep AI | $8/MTok | $15/MTok | $2.50/MTok | $0.42/MTok | ✅ 優秀 |
| OpenAI 公式 | $15/MTok | - | - | - | △ |
| Anthropic 公式 | - | $18/MTok | - | - | △ |
| Google Vertex | - | - | $3.50/MTok | - | ○ |
HolySheep AIは、OpenAI公式比でGPT-4.1が47%安い一方、DeepSeek V3.2は$0.42/MTokという破格の料金で利用可能。财务分析のような长いプロンプトを高频で送るユースケースでは、月额コストが大きく異なります。
向いている人・向いていない人
✅ 向いている人
- 暗号通貨取引所でマーケットメイクを検討している個人・組織
- 既存の裁量トレードからシステムトレードへ移行したいトレーダー
- Tardis API で historial データ分析を学びたいエンジニア
- LLMを活用した自动的な财务分析に興味がある人
❌ 向いていない人
- 完全な投資初心者は、先に基礎知識(裁定取引、spread、ボラティリティ等)を学ぶ必要がある
- 高频取引所需的超低遅延環境(<10ms)は HolySheep では対応不可
- 現物取引のみを行うトレーダー(先物ベースの分析なので)
価格とROI
マーケットメイクのPnL分析に LLM を使う際のコスト試算:
| 月の分析回数 | 1回あたりコスト(DeepSeek V3.2) | 月费用(HolySheep) | 月费用(OpenAI比) |
|---|---|---|---|
| 100回 | $0.05 | $5 | $15(75%節約) |
| 1,000回 | $0.05 | $50 | $150(75%節約) |
| 10,000回 | $0.05 | $500 | $1,500(75%節約) |
1回の分析で$10のspread収益がある場合、月の分析コスト$50はわずか5取引で回収可能です。
HolySheepを選ぶ理由
- 業界最安水準の料金:GPT-4.1 $8/MTok、DeepSeek V3.2 $0.42/MTok(公式¥7.3=$1比85%節約)
- 多彩多様なモデル対応:GPT-4.1、Claude Sonnet 4.5、Gemini 2.5 Flash、DeepSeek V3.2を一つのAPIで利用
- 中国本土決済対応:WeChat Pay、Alipayで日本円建て決済可能(円建て¥7.3=$1)
- <50ms の低遅延:リアルタイム分析に十分な响应速度
- 登録で無料クレジット:今すぐ登録して無料クレジット获取
よくあるエラーと対処法
エラー1: 401 Unauthorized - API Key不正
# ❌ 誤り
openai.api_key = "YOUR_HOLYSHEEP_API_KEY" # プレースホルダーのまま
✅ 正しい(実際のキーに置き換える)
openai.api_key = "hs_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
APIキーは https://www.holysheep.ai/register から取得可能
エラー2: 429 Rate LimitExceeded
import time
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10)
)
def analyze_with_retry(messages, model="deepseek-v3.2"):
"""リトライ機能付きの分析関数"""
try:
response = openai.ChatCompletion.create(
model=model,
messages=messages,
max_tokens=2000
)
return response
except openai.error.RateLimitError as e:
print(f"レート制限発生: {e}")
raise # tenacityがリトライ
使用時:料金節約のため安いモデルから試す
try:
result = analyze_with_retry(messages, model="deepseek-v3.2")
except:
result = analyze_with_retry(messages, model="gpt-4.1")
エラー3: Tardis API のデータ欠落
def validate_orderbook_data(data):
"""
オーダーブックデータの完全性を検証
"""
required_fields = ["bids", "asks", "timestamp"]
if not data:
return False, "データ为空"
# 必須フィールドの存在チェック
for field in required_fields:
if field not in data:
return False, f"必須フィールド缺失: {field}"
# bids/asks が空でないことを確認
if len(data.get("bids", [])) == 0 or len(data.get("asks", [])) == 0:
return False, "bidsまたはasksが空"
# best_bid > best_ask になっていないことを確認(データの整合性)
if data["bids"][0][0] >= data["asks"][0][0]:
return False, "bid >= ask - データ不整合"
return True, "OK"
使用例
is_valid, message = validate_orderbook_data(orderbook_data[0])
if not is_valid:
print(f"データ警告: {message}")
# フォールバック: 次のスナップショットを使用
orderbook_data = get_orderbook_snapshot(...)
エラー4: 市場データとポジションの時刻整合
from datetime import datetime, timezone
def align_data_timestamps(orderbook_data, trades_data):
"""
オーダーブックデータと取引データの時刻を整合
(時刻がずれるとPnL計算に誤差が生じる)
"""
# UTCに変換
utc = timezone.utc
# 最新のorderbook時刻を取得
latest_ob_time = max(
datetime.fromisoformat(d["timestamp"].replace("Z", "+00:00"))
for d in orderbook_data
if "timestamp" in d
)
# その時刻 기준으로±1分の取引のみ抽出
aligned_trades = [
t for t in trades_data
if t.get("timestamp") and
abs(
(datetime.fromisoformat(t["timestamp"].replace("Z", "+00:00")) - latest_ob_time).total_seconds()
) <= 60
]
return aligned_trades
⚠️ 時刻整合なし →
過去の古いpriceで現在価値を计算 → 误ったPnL
✅ 時刻整合あり →
同時に发生したイベントを分析 → 正確なPnL
次のステップ:実践的なアクションプラン
- HolySheep AI に登録:今すぐ登録して$5の無料クレジット获取
- Tardis でデモデータ取得:無料ティアで BTC/USDT perpetual の過去データをダウンロード
- -simple なPnL計算から開始:初めに実現损益のみ的计算부터実装
- リスクを可視化:本記事のInventoryRiskModelを使ってリアルタイム監視
- 自动最適化へ进化:HolySheep AI 分析结果を基に注文パラメータ自动調整
結論
マーケットメイクの利益分析は、spread収益と在庫リスクの両面を数値化することが成功的要因です。本記事の方法论を使えば、
- Tardis API でリアルタイム オーダーブックデータを取得
- HolySheep AI で自然言語による高度なPnL分析を実現
- 独自リスクモデルを実装してリアルタイム监控
が可能になります。HolySheep AI のDeepSeek V3.2なら$0.42/MTokという破格の料金で高频分析ができ、投资対效果は极高です。
始めは怖いですが、小的リスクから始めて徐々に規模を拡大してください。マーケットメイクは数学的に收益率を 计算できる戦略であり、リスク管理を徹底すれば安定した収入源になります。
👉 HolySheep AI に登録して無料クレジットを獲得