暗号通貨の流動性供給(マーケットメイク)で安定した利益を出すには、正確な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.1Claude Sonnet 4.5Gemini 2.5 FlashDeepSeek 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という破格の料金で利用可能。财务分析のような长いプロンプトを高频で送るユースケースでは、月额コストが大きく異なります。

向いている人・向いていない人

✅ 向いている人

❌ 向いていない人

価格と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を選ぶ理由

  1. 業界最安水準の料金:GPT-4.1 $8/MTok、DeepSeek V3.2 $0.42/MTok(公式¥7.3=$1比85%節約)
  2. 多彩多様なモデル対応:GPT-4.1、Claude Sonnet 4.5、Gemini 2.5 Flash、DeepSeek V3.2を一つのAPIで利用
  3. 中国本土決済対応:WeChat Pay、Alipayで日本円建て決済可能(円建て¥7.3=$1)
  4. <50ms の低遅延:リアルタイム分析に十分な响应速度
  5. 登録で無料クレジット今すぐ登録して無料クレジット获取

よくあるエラーと対処法

エラー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

次のステップ:実践的なアクションプラン

  1. HolySheep AI に登録今すぐ登録して$5の無料クレジット获取
  2. Tardis でデモデータ取得:無料ティアで BTC/USDT perpetual の過去データをダウンロード
  3. -simple なPnL計算から開始:初めに実現损益のみ的计算부터実装
  4. リスクを可視化:本記事のInventoryRiskModelを使ってリアルタイム監視
  5. 自动最適化へ进化:HolySheep AI 分析结果を基に注文パラメータ自动調整

結論

マーケットメイクの利益分析は、spread収益と在庫リスクの両面を数値化することが成功的要因です。本記事の方法论を使えば、

が可能になります。HolySheep AI のDeepSeek V3.2なら$0.42/MTokという破格の料金で高频分析ができ、投资対效果は极高です。


始めは怖いですが、小的リスクから始めて徐々に規模を拡大してください。マーケットメイクは数学的に收益率を 计算できる戦略であり、リスク管理を徹底すれば安定した収入源になります。

👉 HolySheep AI に登録して無料クレジットを獲得