コンテンツにスキップ

UWダマシ検知(Flow Validator)

概要

Flow Validator は、Unusual Whalesのフローが「攻め(Speculation)」なのか「守り(Hedge)」なのかを判別するモジュールです。

問題の背景

機関投資家が「現物買い+プット買い(プロテクティブ・プット)」のヘッジとして行うケースが多々あり、これをそのまま「弱気」と捉えると痛い目を見る。


Geminiからの提言

フローだけでは「ダマシ(大口のヘッジや誤情報のフロー)」に巻き込まれるリスクがあります。 Unusual Whalesで異常値を検知した後、即エントリーするのではなく、テクニカル条件を満たすまで待機するロジックを組み込むことを提案します。


判定基準

1. Ask/Bid Side判定

アグレッサー判定: 積極的な買いかどうかを判定

def is_aggressive_order(flow: OptionFlow) -> bool:
    """
    Ask(売り板)を叩いて買っているか?
    → 急いで買いたい = 攻め
    """
    return flow.side in ['ASK', 'ABOVE_ASK']
Side 意味 判定
ASK 売り板で約定 ✅ 攻め
ABOVE_ASK 売り板より高く約定 ✅ 強い攻め
BID 買い板で約定 ❌ 受動的
BELOW_BID 買い板より安く約定 ❌ 投げ売り

2. Spot Confirmation(株価連動確認)

フロー発生後の株価変動を確認

def check_spot_confirmation(
    flow: OptionFlow,
    current_price: float,
    threshold: float = 0.0005  # 0.05%
) -> bool:
    """
    フロー発生からn分間の株価変動を確認
    - Callフロー後に株価上昇 → 確認OK
    - Callフロー後に株価下落 → ヘッジの可能性
    """
    price_change = (current_price - flow.underlying_price) / flow.underlying_price

    if flow.put_call == 'CALL':
        return price_change > -threshold  # 下落していない
    else:  # PUT
        return price_change < threshold   # 上昇していない

待機時間

Gemini推奨: 5〜15分が妥当。フロー発生時の現物価格を基準とし、5分後の価格が「フロー方向」に動いているかを確認。

3. Vol/OI比率(建玉変化推測)

新規ポジションか既存ポジションの決済かを推測

def estimate_oi_change(flow: OptionFlow) -> str:
    """
    Vol/OI比率でOI変化を推測
    - Vol/OI > 1.0 → 新規ポジション確実
    - Vol/OI < 0.3 → 既存ポジションの決済可能性
    """
    if flow.volume and flow.open_interest:
        ratio = flow.volume / flow.open_interest
        if ratio > 1.0:
            return "OPENING"  # 新規
        elif ratio < 0.3:
            return "CLOSING"  # 決済
    return "UNKNOWN"

4. GEX整合性チェック

GEXレジームとフロー方向の整合性

def check_gex_alignment(flow: OptionFlow, gex_data: dict) -> bool:
    """
    GEXとフロー方向の整合性をチェック
    - Put買いの場合、強力なPut Wall付近ならエントリー見送り
    """
    if flow.put_call == 'PUT':
        nearest_support = gex_data.get('major_negative_gamma_levels')
        if nearest_support:
            distance = abs(flow.underlying_price - nearest_support) / flow.underlying_price
            if distance < 0.005:  # サポートまで0.5%以内
                return False  # 突っ込み売り禁止
    return True

総合判定ロジック

def validate_flow_quality(
    flow: OptionFlow,
    current_price: float,
    gex_data: dict
) -> tuple[bool, str]:
    """
    フロー品質を総合判定

    Returns:
        (is_valid, reason)
    """
    # 1. プレミアムフィルター($50k未満は無視)
    if flow.premium < 50000:
        return False, "PREMIUM_TOO_SMALL"

    # 2. アグレッサー判定
    if not is_aggressive_order(flow):
        return False, "PASSIVE_ORDER"

    # 3. Spot Confirmation
    if not check_spot_confirmation(flow, current_price):
        return False, "SPOT_DIVERGENCE"

    # 4. GEX整合性
    if not check_gex_alignment(flow, gex_data):
        return False, "GEX_CONFLICT"

    return True, "VALIDATED"

ヘッジの典型パターン

カバードコール

現物大量保有 + OTM Call売り
→ UW上は「Call売り(Bearish)」に見えるが、実際はニュートラル〜やや強気

判別法: OI(建玉)推移を確認 - OIが増加していない(Closing)→ 利確か損切り - OIが増加(Opening)→ 新規

プロテクティブ・プット

現物買い + ATM/OTM Put買い
→ UW上は「Put買い(Bearish)」に見えるが、実際はヘッジ目的

判別法: Spot Confirmation - Put買いフロー後に株価上昇 → ヘッジの可能性大


実装ファイル

core/flow_validator.py

class FlowValidator:
    """UWフロー品質検証エンジン"""

    def __init__(self, config: FlowValidatorConfig = None):
        self.config = config or FlowValidatorConfig()
        self._flow_cache: Dict[str, List[OptionFlow]] = {}

    def validate(
        self,
        flow: OptionFlow,
        market_data: MarketSnapshot,
        gex_data: GammaProfile
    ) -> FlowValidationResult:
        """フロー品質を検証"""

        checks = []

        # 1. プレミアムチェック
        premium_ok = flow.premium >= self.config.min_premium
        checks.append(("PREMIUM", premium_ok))

        # 2. アグレッサーチェック
        aggressive_ok = self._is_aggressive(flow)
        checks.append(("AGGRESSIVE", aggressive_ok))

        # 3. Spot Confirmation
        spot_ok = self._check_spot(flow, market_data.price)
        checks.append(("SPOT", spot_ok))

        # 4. GEX整合性
        gex_ok = self._check_gex(flow, gex_data)
        checks.append(("GEX", gex_ok))

        is_valid = all(ok for _, ok in checks)

        return FlowValidationResult(
            is_valid=is_valid,
            checks=checks,
            confidence=sum(1 for _, ok in checks if ok) / len(checks)
        )

ダッシュボードでの表示

Filter Analyticsセクションでフロー検証結果を表示:

検証項目 通過率 説明
PREMIUM 85% $50k以上のフロー
AGGRESSIVE 72% Ask Side約定
SPOT 68% 株価連動確認
GEX 91% GEX整合性

バックテストでの使用

# バックテストサマリーに追加される統計
{
    "flow_validation_stats": {
        "total_flows": 1250,
        "validated": 456,
        "rejected": 794,
        "rejection_reasons": {
            "PREMIUM_TOO_SMALL": 312,
            "PASSIVE_ORDER": 245,
            "SPOT_DIVERGENCE": 187,
            "GEX_CONFLICT": 50
        }
    }
}

ログ出力例

[TSLA] フロー検証:
  プレミアム: $125,000 ✅
  Side: ABOVE_ASK ✅
  Spot Confirmation: +0.12% ✅
  GEX整合性: ✅
  結果: VALIDATED (信頼度: 100%)
[NVDA] フロー検証:
  プレミアム: $85,000 ✅
  Side: BID ❌ (受動的注文)
  結果: REJECTED (理由: PASSIVE_ORDER)

関連ファイル

ファイル 役割
core/flow_validator.py フロー検証エンジン
core/unusual_whales.py UW APIクライアント
core/scanner.py DynamicScanner統合
scripts/run_paper_trading.py ペーパートレード統合

更新履歴

日付 変更内容
2025-11-29 Gemini分析に基づき実装
2025-11-29 プレミアムフィルター追加($50k)
2025-11-29 Spot Confirmation閾値調整(0.1% → 0.05%)