market-microstructure について
オーダーブックではなくAMMプールを使うSolana DEXの取引フローを分析するスキルです。取引分類、出来高や売買圧力の指標、モメンタム、トークンの回転率、仮装取引の検出を扱います。
主な機能
- 01スワップを買い・売りに分類
- 02時間別・規模別の出来高分析
- 03買い圧力と売り圧力の測定
- 04モメンタムと回転率の指標化
- 05仮装取引の疑いを検出
活用シーン
- 01トークンの売買フローを評価
- 02大口取引と小口取引を区別
- 03出来高急増や仮装取引の疑いを調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill market-microstructureインストール後、Claude Code で/market-microstructureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/flow_signals.mdtrade_classification.mdwash_trading.mdscripts/trade_flow_analysis.pyvolume_profile.py詳細
マーケットマイクロストラクチャ — DEX のオーダーフロー分析
概要
Solana DEX のマーケットマイクロストラクチャは、従来の金融とは根本的に異なります。 AMM にオーダーブックはなく、すべての取引は流動性プールとのスワップです。それでも、 取引フロー分析は有効です。スワップの順序、規模、方向から、蓄積、分配、クジラの活動、 ウォッシュトレードのパターンを把握できます。
このスキルでは、以下について説明します。
- 取引の分類 — スワップの方向から買いと売りを特定する
- 出来高プロファイル — 時間別および規模別の内訳
- 買い手/売り手の圧力 — 比率指標、ネットフロー、取引件数の非対称性
- 取引規模の分布 — クジラの検出、個人投資家と機関投資家のフロー
- フローモメンタムシグナル — 加速、出来高急増、複合スコア
- トークンの回転率 — センチメントの代替指標としての売買回転率
- ウォッシュトレードの検出 — 偽の出来高やボットのパターンを見つける
DEX でマイクロストラクチャが重要な理由
CEX では、マイクロストラクチャとはオーダーブックの厚み、ビッド・アスク・スプレッド、 および注文の優先順位を指します。AMM では、流動性はプールの価格曲線に存在するため、 スプレッドも注文の優先順位もありません。しかし、取引テープ(時系列順に並んだスワップの一覧) には豊富なシグナルが含まれています。
- 誰が取引しているか? — クジラのウォレットか個人投資家か、スマートマネーかボットか
- どのように取引しているか? — 大口の単発スワップか、DCA 形式の分割取引か
- いつ取引しているか? — イベントやタイムゾーンに関連した出来高の集中
- どちらの方向か? — ローリングウィンドウにおける買い圧力と売り圧力の差し引き
これらのシグナルは、エントリー/エグジットのタイミング、ポジションサイズ、トークン品質のスコアリングに役立ちます。
取引の分類
買いと売りの特定
Solana DEX では、すべてのスワップに入力トークンと出力トークンがあります。
| スワップの方向 | 分類 | 意味 |
|---|---|---|
| SOL → Token | 買い | トレーダーが SOL を使ってトークンを取得 |
| USDC → Token | 買い | トレーダーがステーブルコインを使ってトークンを取得 |
| Token → SOL | 売り | トレーダーがトークンを SOL に戻す |
| Token → USDC | 売り | トレーダーがトークンをステーブルコインに戻す |
| Token A → Token B | 状況による | 分析対象のトークンに基づいて分類 |
API データソースからの取得
Birdeye Trade History(/defi/txs/token):
sideフィールドを返します。値は"buy"または"sell"です。from(入力トークン)とto(出力トークン)の数量を含みます。
DexScreener Pair Trades:
- ペアに対するスワップの方向を示す
typeフィールドを返します。
Helius Parsed Transactions:
- スワップの命令を解析して、入力/出力のミントと数量を抽出します。
- どのミントが対象のトークンと一致するかに基づいて分類します。
詳しい分類ロジックとサイズ区分については、references/trade_classification.md を参照してください。
出来高プロファイル
時間別プロファイル
取引出来高を固定の時間区分に集計し、パターンを特定します。
# Hourly volume profile
hourly_volume = {}
for trade in trades:
hour = trade["timestamp"] // 3600 * 3600
hourly_volume.setdefault(hour, {"buy_vol": 0, "sell_vol": 0})
if trade["side"] == "buy":
hourly_volume[hour]["buy_vol"] += trade["volume_usd"]
else:
hourly_volume[hour]["sell_vol"] += trade["volume_usd"]
時間別プロファイルから得られる主な指標:
- ピーク時間帯 — トークンの取引が最も活発な時間帯
- 出来高のトレンド — 出来高が増加、減少、または安定しているか
- 出来高の異常 — ローリング平均の 3 倍を超える急増
規模別プロファイル
取引を規模ごとに分類し、クジラの活動と個人投資家の活動を区別します。
| 区分 | SOL の範囲 | 主な取引主体 |
|---|---|---|
| 極小 | < 0.1 SOL | 端数/テスト取引 |
| 小 | 0.1 – 1 SOL | 個人投資家 |
| 中 | 1 – 10 SOL | 活発なトレーダー |
| 大 | 10 – 50 SOL | 本格的なポジション |
| クジラ | 50+ SOL | クジラ/機関投資家 |
買い手/売り手の圧力指標
基本比率
def compute_pressure(trades: list[dict], period_seconds: int = 3600) -> dict:
"""Compute buy/sell pressure metrics over a time period."""
buy_vol = sum(t["volume_usd"] for t in trades if t["side"] == "buy")
sell_vol = sum(t["volume_usd"] for t in trades if t["side"] == "sell")
total_vol = buy_vol + sell_vol
buy_trades = sum(1 for t in trades if t["side"] == "buy")
sell_trades = sum(1 for t in trades if t["side"] == "sell")
total_trades = buy_trades + sell_trades
return {
"buy_sell_ratio": buy_vol / sell_vol if sell_vol > 0 else float("inf"),
"buy_volume_pct": buy_vol / total_vol if total_vol > 0 else 0.5,
"net_flow_usd": buy_vol - sell_vol,
"trade_count_ratio": buy_trades / total_trades if total_trades > 0 else 0.5,
}
シグナルの解釈
| 指標 | 強気 | 中立 | 弱気 |
|---|---|---|---|
| 買い出来高比率 | > 60% | 40–60% | < 40% |
| ネットフロー | プラスで増加中 | ゼロ付近 | マイナスで増加中 |
| 取引件数比率 | > 0.55 | 0.45–0.55 | < 0.45 |
| 大口取引比率 | 買い側が優勢 | 均衡 | 売り側が優勢 |
シグナルの一覧と複合スコアの詳細については、references/flow_signals.md を参照してください。
取引サイズの分布
取引サイズの分布を分析すると、市場構造が明らかになります。
import statistics
def analyze_trade_sizes(trades: list[dict]) -> dict:
"""Analyze trade size distribution."""
sizes = [t["volume_usd"] for t in trades]
if not sizes:
return {}
return {
"mean": statistics.mean(sizes),
"median": statistics.median(sizes),
"stdev": statistics.stdev(sizes) if len(sizes) > 1 else 0,
"skew_indicator": statistics.mean(sizes) / statistics.median(sizes),
"max_trade": max(sizes),
"whale_pct": sum(s for s in sizes if s > 5000) / sum(sizes),
}
歪度の解釈: skew_indicator(平均値/中央値)が 1.0 を大きく上回る場合、裾の厚い分布を示しており、少数の大口取引が支配的です。これはクジラの関心が高いトークンでは一般的ですが、相場操縦の兆候である可能性もあります。
取引フローから得られるモメンタムシグナル
出来高の加速
現在の期間の出来高を前の期間と比較します。
acceleration = current_volume / previous_volume if previous_volume > 0 else 0
- acceleration > 2.0 — 出来高急増。ブレイクアウトまたは急落の可能性があります
- acceleration 0.8–1.2 — 活動が安定しています
- acceleration < 0.5 — 関心が薄れています
買い圧力の加速
買い比率の経時変化を追跡します。
current_buy_ratio = current_buy_vol / current_total_vol
previous_buy_ratio = prev_buy_vol / prev_total_vol
buy_momentum = current_buy_ratio - previous_buy_ratio
出来高の増加を伴う正の buy_momentum は、強い買い集めのシグナルです。
トークンの流通速度
トークンの流通速度は、トークンがどれくらい頻繁に持ち主を変えるかを測定します。
velocity = daily_volume / circulating_supply
| 流通速度 | 解釈 |
|---|---|
| < 0.01 | 活動が低調、流動性が低い、または強固な保有者がいる |
| 0.01–0.05 | 通常の取引活動 |
| 0.05–0.20 | 活発な取引。投機の可能性があります |
| > 0.20 | 非常に高い回転率。ウォッシュトレードの可能性があります |
ユニークなトレーダー数が少ないにもかかわらず流通速度が高い場合、ウォッシュトレードの危険信号です。
ウォッシュトレードの検出
ウォッシュトレードは、トークンを実際以上に活発に見せるために出来高を水増しします。 主な検出シグナルは次のとおりです。
- ユニークなトレーダーの比率が低い —
unique_wallets / trade_count < 0.3 - 出来高/TVL の異常 —
daily_volume / tvl > 10(出来高が流動性を大幅に上回る) - 取引サイズが均一 — 取引サイズ分布のエントロピーが低い
- 自己取引 — 短い時間枠内で同じウォレットが両側に存在する
- 同時に資金提供されたクラスター — 複数のウォレットが同じ送金元から資金提供されている
詳細な検出方法とスコアリングについては、references/wash_trading.md を参照してください。
データソース
Birdeye API
Solana トークンの取引履歴を取得する主なデータソースです。
GET /defi/txs/token— トークンの最近の取引GET /defi/ohlcv— 出来高を含むローソク足データGET /defi/price/volume— 集計された出来高データ
API キーが必要です。エンドポイントの詳細については、birdeye-api スキルを参照してください。
DexScreener API
ペア単位のデータを取得できる、無料で認証不要の代替手段です。
GET /latest/dex/tokens/{address}— 出来高を含むトークンペアGET /latest/dex/pairs/solana/{pairAddress}— ペアの詳細
Helius API
ウォレット単位の取引分析やパース済みトランザクションに使用します。
- スワップトランザクションをパースして取引の詳細を抽出します
- 取引を特定のウォレットに帰属させます
- トランザクションのパースについては、
helius-apiスキルを参照してください
複合モメンタムスコア
複数のフローシグナルを単一のスコア(範囲:-100~+100)にまとめます。
def compute_momentum_score(
buy_ratio: float,
volume_accel: float,
whale_buy_pct: float,
unique_trader_trend: float,
) -> float:
"""Compute composite momentum score from flow signals.
Args:
buy_ratio: Buy volume / total volume (0 to 1).
volume_accel: Current vol / previous vol.
whale_buy_pct: Whale buy volume / total whale volume (0 to 1).
unique_trader_trend: Change in unique traders vs previous period.
Returns:
Score from -100 (strong sell pressure) to +100 (strong buy pressure).
"""
# Buy ratio component: 0.5 = neutral, maps to [-40, +40]
buy_component = (buy_ratio - 0.5) * 80
# Volume acceleration: >1 = growing, maps to [-20, +20]
vol_component = min(max((volume_accel - 1.0) * 20, -20), 20)
# Whale direction: 0.5 = neutral, maps to [-25, +25]
whale_component = (whale_buy_pct - 0.5) * 50
# Unique trader growth: positive = healthy, maps to [-15, +15]
trader_component = min(max(unique_trader_trend * 15, -15), 15)
score = buy_component + vol_component + whale_component + trader_component
return max(-100, min(100, score))
| スコア範囲 | 解釈 |
|---|---|
| +60 to +100 | 強い買い集め — 強い買い圧力 |
| +20 to +60 | 緩やかな買い — 慎重な買い集め |
| -20 to +20 | 中立/均衡したフロー |
| -60 to -20 | 緩やかな売り — 分配が進行中 |
| -100 to -60 | 強い分配 — 強い売り圧力 |
他のスキルとの連携
| スキル | 連携方法 |
|---|---|
birdeye-api | 取引履歴と出来高の主なデータソース |
helius-api | パース済みトランザクションから取得する、ウォレットに帰属した取引データ |
liquidity-analysis | 出来高/TVL 比率、およびフローシグナルを解釈するための流動性の状況 |
whale-tracking | 大口取引の帰属先となるクジラのウォレットを特定 |
token-holder-analysis | 流通速度指標を解釈するための供給量分布の状況 |
position-sizing | フローシグナルを利用してエントリーサイズを調整 |
regime-detection | フローモメンタムとレジーム分類を組み合わせる |
ファイル
リファレンス
references/trade_classification.md— 買い/売りの分類ロジック、サイズ区分、集計references/flow_signals.md— 数式と解釈を含むシグナルの完全な一覧references/wash_trading.md— 検出方法、指標、リスクスコアリング
スクリプト
scripts/trade_flow_analysis.py— 取引を取得して分類し、フローシグナルとモメンタムを計算しますscripts/volume_profile.py— 時間ごとの出来高プロファイル、トレンド検出、異常の特定