# BTC VWAP on Hyperliquid for one day -- mcp side ## Question What was the volume-weighted average price of the BTC perpetual on Hyperliquid on 2026-09-27 (UTC day)? One number. ## System prompt You are an agent assisting a quantitative researcher. Work the question end to end: find the data, compute, check your own numbers, and make the judgement calls a careful quant would make. You have a Bash tool; Python 3 with duckdb, pandas, pyarrow and numpy is at /tmp/peerfeed-a21/venv/bin/python. Work inside your current directory. When you are done, end with a section headed FINAL ANSWER that gives every number asked for and states each judgement call you made. Your only source of market data is PeerFeed's market-data MCP server (the tools named mcp__peerfeed__*). There is no market data on local disk. ## [tool call 1] mcp__peerfeed__describe_environment {} ## [tool call 2] mcp__peerfeed__describe_dataset { "instrument": "hyperliquid/trades:BTC" } ## [tool result] { "call_id": "726472e24c674f52", "datasets": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "apex/trades", "aster/usdm/trades", "bybit/liquidations", "derive/auctions", "derive/margin", "derive/trades", "dydx/orderbook", "dydx/trades", "edgex/depth", "edgex/ticker", "edgex/trades", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "grvt/trades", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_events", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_positions", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "hyperliquid/trades", "kalshi/orderbook_delta", "kalshi/ticker", "kalshi/trade", "lighter/market_stats", "lighter/trades", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "nado/liquidation", "nado/trades", "pacifica/book", "pacifica/prices", "pacifica/trades", "paradex/bbo", "paradex/trades", "polymarket/book", "polymarket/last_trade_price", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker", "rho/trades" ], "feed_defaults": { "kind": "trades", "serves_bars": true, "clock": "exchange (the venue's own timestamp)", "direction_measured": true, "note": "Everything not listed in feed_exceptions follows these. Call describe_dataset('') for one dataset's full declaration — it takes a bare name, no symbol needed." }, "feed_exceptions": { "state_no_bars": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "derive/auctions", "derive/margin", "dydx/orderbook", "edgex/depth", "edgex/ticker", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "kalshi/orderbook_delta", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "pacifica/book", "pacifica/prices", "paradex/bbo", "polymarket/book", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "observation_clock": [ "aevo/orderbook", "apex/orderbook", "dydx/orderbook", "edgex/depth", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "hyperliquid/activeAssetCtx", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/book_depth", "nado/trades", "paradex/bbo", "polymarket/book", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "direction_unmeasured": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "bybit/liquidations", "derive/auctions", "derive/margin", "dydx/orderbook", "edgex/depth", "edgex/ticker", "edgex/trades", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "grvt/trades", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_positions", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "kalshi/orderbook_delta", "kalshi/ticker", "lighter/market_stats", "lighter/trades", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "nado/liquidation", "pacifica/book", "pacifica/prices", "pacifica/trades", "paradex/bbo", "polymarket/book", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "what_these_mean": "state_no_bars: snapshots, not events — no price/size column, get_ohlcv and get_activity_bars refuse them, use run_query. observation_clock: served on our recorded_at because the venue timestamp is a state epoch that does not advance while the state is unchanged. direction_unmeasured: canonical `side` reads 'unknown'; do NOT infer direction from the raw column — coinbase reports the MAKER's side, so the obvious reading is backwards there." }, "access_mode": "public", "catalog_ready": true, "data_quality": { "catalog_built": true, "mean_shard_coverage": 0.442, "dataset_days_measured": 9405, "dataset_days_below_threshold": 7603, "unreadable_days": 0, "warning": "PARTIAL DATA: shards in this range hold only ~44% of their 2-hour windows on average (known upstream issue: shards built from only their first ~31 minutes of data). Bars at 1h and coarser are computed from a fraction of the trades, so their high, low, volume and close are not representative. Gaps are real missing data, not quiet markets.", "what_this_means": "Shards exist for every window, but each holds only part of it, and the missing part is systematically the later portion of each 2-hour window — not a random sample. Bars at 1h and coarser are computed from a fraction of the trades. Treat volume, VWAP and any time-of-day analysis as unreliable until this is resolved upstream." }, "excluded_datasets": [ { "dataset": "binance/coinm/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "binance/spot/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bingx/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bitget/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bitget/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bybit/tickers", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bybit/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "coinbase/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "coinbase/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/option_ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/option_trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/perpetual", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "htx/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "htx/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kraken/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kraken/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/instrument", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "mexc/tickers", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "mexc/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "okx/spot/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "okx/swap/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "weather_asos/asos_metar", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_ecmwf/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_gefs/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_gfs/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_hrrr/forecast", "category": "other", "reason": "other venue: not cleared for public access." } ], "instrument_id_format": "dataset:symbol", "observation_timed_datasets": [ "aevo/orderbook", "apex/orderbook", "dydx/orderbook", "edgex/depth", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "hyperliquid/activeAssetCtx", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/book_depth", "nado/trades", "paradex/bbo", "polymarket/book", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "run_query_table_t": { "contents": "1-minute OHLCV bars (raw trades are not reachable)", "columns": { "instrument": "VARCHAR", "ts": "TIMESTAMPTZ (UTC), bar start", "open": "DOUBLE", "high": "DOUBLE", "low": "DOUBLE", "close": "DOUBLE", "volume": "DOUBLE", "trades": "BIGINT", "vwap": "DOUBLE" }, "min_trades_per_bar": 3 }, "granularities": [ "1m", "5m", "15m", "1h", "4h", "1d" ], "funding": { "tool": "get_funding", "datasets": { "edgex/ticker": { "interval_hours": 4 }, "extended/funding": { "interval_hours": 1 }, "hyperliquid/activeAssetCtx": { "interval_hours": 1 }, "nado/funding_rate": { "interval_hours": 24 }, "pacifica/prices": { "interval_hours": 1 } }, "note": "Rates are served with their interval and normalised to per-hour, per-8h and APR; never compare raw rates across venues." }, "limits": { "max_bars_per_call": 5000, "max_query_rows": 5000, "max_shards_per_call": 400, "shard_hours": 2, "calls_per_minute": 60 }, "sql_dialect": "DuckDB (read-only, single SELECT/WITH statement, must read from `t`)", "coverage_scope": "this host only — reflects what this machine aggregated" } ## [tool result] { "call_id": "31ea392823594345", "instrument": "hyperliquid/trades:BTC", "dataset": "hyperliquid/trades", "kind": "trades", "columns": { "instrument": "coin", "timestamp": "time", "price": "px", "size": "sz", "side": "side" }, "canonical_columns": [ "instrument", "ts", "price", "size", "side" ], "side_encoding": { "canonical": "buy | sell | unknown — the AGGRESSOR's direction", "venue_value_kept_as": "side_raw", "measured": true, "note": "Mapped from this venue's own encoding, measured with the tick rule rather than read off the word: coinbase reports the MAKER's side, so its 'BUY' rows are taker sells." }, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "first_ts": "2025-10-25T19:24:44.919000+00:00", "last_ts": "2026-09-29T15:58:59.152000+00:00", "days_covered": 321, "total_rows": 50731192, "avg_rows_per_day": 158041, "native_granularity": "tick (individual trades)", "derived_granularities": [ "1m", "5m", "15m", "1h", "4h", "1d" ], "days_with_missing_shards": [ { "day": "2025-10-25", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-10-26", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-10-27", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-10-28", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-10-31", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-01", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-06", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-07", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-08", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-09", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-11", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-12", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-13", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-14", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-15", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-16", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-17", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-18", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-19", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-20", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-21", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-22", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-23", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-24", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-25", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-26", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-27", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-28", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-29", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-11-30", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-01", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-02", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-03", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-04", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-05", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-06", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-07", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-08", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-09", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-10", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-11", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-12", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-13", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-14", "shards_present": 1, "shards_expected": 12 }, { "day": "2025-12-15", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-04-03", "shards_present": 7, "shards_expected": 12 }, { "day": "2026-04-06", "shards_present": 5, "shards_expected": 12 }, { "day": "2026-07-27", "shards_present": 11, "shards_expected": 12 }, { "day": "2026-07-28", "shards_present": 9, "shards_expected": 12 }, { "day": "2026-07-31", "shards_present": 11, "shards_expected": 12 } ], "days_with_no_data_for_instrument": [], "mean_shard_coverage": 0.468, "low_coverage_days": [ { "day": "2025-11-14", "shard_coverage": 0.653 }, { "day": "2025-11-18", "shard_coverage": 0.44 }, { "day": "2025-12-05", "shard_coverage": 0.562 }, { "day": "2025-12-06", "shard_coverage": 0.736 }, { "day": "2025-12-07", "shard_coverage": 0.84 }, { "day": "2025-12-08", "shard_coverage": 0.764 }, { "day": "2025-12-19", "shard_coverage": 0.257 }, { "day": "2025-12-20", "shard_coverage": 0.319 }, { "day": "2025-12-21", "shard_coverage": 0.256 }, { "day": "2025-12-22", "shard_coverage": 0.258 }, { "day": "2025-12-23", "shard_coverage": 0.258 }, { "day": "2025-12-24", "shard_coverage": 0.258 }, { "day": "2025-12-25", "shard_coverage": 0.661 }, { "day": "2025-12-28", "shard_coverage": 0.869 }, { "day": "2025-12-29", "shard_coverage": 0.258 }, { "day": "2025-12-30", "shard_coverage": 0.259 }, { "day": "2025-12-31", "shard_coverage": 0.56 }, { "day": "2026-01-01", "shard_coverage": 0.255 }, { "day": "2026-01-02", "shard_coverage": 0.26 }, { "day": "2026-01-03", "shard_coverage": 0.26 }, { "day": "2026-01-04", "shard_coverage": 0.259 }, { "day": "2026-01-05", "shard_coverage": 0.257 }, { "day": "2026-01-06", "shard_coverage": 0.258 }, { "day": "2026-01-07", "shard_coverage": 0.261 }, { "day": "2026-01-08", "shard_coverage": 0.26 }, { "day": "2026-01-09", "shard_coverage": 0.26 }, { "day": "2026-01-10", "shard_coverage": 0.261 }, { "day": "2026-01-11", "shard_coverage": 0.259 }, { "day": "2026-01-12", "shard_coverage": 0.313 }, { "day": "2026-01-13", "shard_coverage": 0.258 }, { "day": "2026-01-14", "shard_coverage": 0.26 }, { "day": "2026-01-15", "shard_coverage": 0.259 }, { "day": "2026-01-16", "shard_coverage": 0.258 }, { "day": "2026-01-17", "shard_coverage": 0.258 }, { "day": "2026-01-18", "shard_coverage": 0.255 }, { "day": "2026-01-19", "shard_coverage": 0.255 }, { "day": "2026-01-20", "shard_coverage": 0.315 }, { "day": "2026-01-21", "shard_coverage": 0.258 }, { "day": "2026-01-22", "shard_coverage": 0.258 }, { "day": "2026-01-23", "shard_coverage": 0.317 }, { "day": "2026-01-24", "shard_coverage": 0.257 }, { "day": "2026-01-25", "shard_coverage": 0.251 }, { "day": "2026-01-26", "shard_coverage": 0.255 }, { "day": "2026-01-27", "shard_coverage": 0.492 }, { "day": "2026-01-28", "shard_coverage": 0.253 }, { "day": "2026-01-29", "shard_coverage": 0.254 }, { "day": "2026-01-30", "shard_coverage": 0.254 }, { "day": "2026-02-01", "shard_coverage": 0.316 }, { "day": "2026-02-02", "shard_coverage": 0.315 }, { "day": "2026-02-03", "shard_coverage": 0.254 } ], "coverage_warning": "PARTIAL DATA: shards in this range span ~47% of their 2-hour windows, against ~99% for healthy shards of this feed, i.e. 47% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 41, "kinds": { "absent": 6, "not_archived": 5, "partial_window": 30 }, "permanent": 36, "lowest_coverage_fraction": 0.26, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labelled_days": { "from": "2026-08-08", "to": "2026-09-17", "count": 12 }, "labels_omitted": "41 per-day record(s) not inlined; query a window with run_query to get the ones that apply to it, or read the files named in label_source" }, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes_omitted": "Scope notes for biased_subset, census_incomplete, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null, "scope_notes_available_for": [ "absent", "not_archived", "partial_window" ], "scope_notes_omitted_here": "3 per-kind scope note(s) omitted to keep this response small; run_query returns them in full for the kinds your window matches. They say how far each kind's claim extends -- no kind is exhaustive, so absence of a label never means a defect did not happen." }, "coverage_method": "fraction of each 2h shard's window its data actually spans; shard presence alone does not detect a partially written shard" } ## [agent] Check coverage for that day specifically. ## [tool call 3] mcp__peerfeed__run_query { "dataset": "hyperliquid/trades", "instrument": "BTC", "start": "2026-09-27T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "SELECT (hour(ts)//2)*2 AS shard, count(*) AS bars, sum(trades) tr, sum(volume) vol, sum(vwap*volume)/sum(volume) vwap, min(ts), max(ts) FROM t GROUP BY 1 UNION ALL SELECT 99, count(*), sum(trades), sum(volume), sum(vwap*volume)/sum(volume), min(ts), max(ts) FROM t ORDER BY 1" } ## [tool result] { "call_id": "648a395e30604e6c", "shard_presence": { "shards_present": 12, "shards_expected": 12, "days_indexed": 1, "days_requested": 1, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 1, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "shard", "bars", "tr", "vol", "vwap", "min(ts)", "max(ts)" ], "rows": [ [ 0, 120, 9759, 547.61921, 84334.17937245118, "2026-09-27T00:00:00Z", "2026-09-27T01:59:00Z" ], [ 2, 120, 8981, 481.32998, 84431.68548289886, "2026-09-27T02:00:00Z", "2026-09-27T03:59:00Z" ], [ 4, 120, 10101, 481.33571000000006, 84444.28821040514, "2026-09-27T04:00:00Z", "2026-09-27T05:59:00Z" ], [ 6, 120, 11393, 670.0201400000001, 84570.21603993874, "2026-09-27T06:00:00Z", "2026-09-27T07:59:00Z" ], [ 8, 120, 19178, 2134.3006000000005, 84773.15610667023, "2026-09-27T08:00:00Z", "2026-09-27T09:59:00Z" ], [ 10, 120, 15129, 1423.9852899999994, 84896.51142288136, "2026-09-27T10:00:00Z", "2026-09-27T11:59:00Z" ], [ 12, 120, 19255, 1502.0072800000003, 84861.05882301049, "2026-09-27T12:00:00Z", "2026-09-27T13:59:00Z" ], [ 14, 120, 23395, 1606.6549000000005, 84574.5632974636, "2026-09-27T14:00:00Z", "2026-09-27T15:59:00Z" ], [ 16, 120, 11283, 578.5799400000001, 84474.27169160062, "2026-09-27T16:00:00Z", "2026-09-27T17:59:00Z" ], [ 18, 120, 12386, 962.8763900000004, 84704.7999041704, "2026-09-27T18:00:00Z", "2026-09-27T19:59:00Z" ], [ 20, 120, 12017, 1224.2127899999998, 84622.1218903374, "2026-09-27T20:00:00Z", "2026-09-27T21:59:00Z" ], [ 22, 120, 22923, 2916.848259999999, 84302.92711173467, "2026-09-27T22:00:00Z", "2026-09-27T23:59:00Z" ], [ 99, 1440, 175800, 14529.770489999992, 84600.70760744627, "2026-09-27T00:00:00Z", "2026-09-27T23:59:00Z" ] ], "row_count": 13, "truncated": false, "shards_bound": 13, "rows_estimated": 508242, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 0, "trades": 0, "volume": null, "min_trades": 3, "note": "Nothing was withheld: every bar in this window met the floor." }, "extremum_warning": null, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 4] mcp__peerfeed__data_quality { "dataset": "hyperliquid/trades" } ## [tool result] { "call_id": "5e5bb6fa252e4795", "findings": [ { "check": "window_coverage", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 224, "worst_value": 0.0916, "healthy_value": 0.9916116666666666, "first_day": "2025-11-18", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 12222, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "timestamp_plausibility", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 57, "worst_value": 655.973, "healthy_value": 0.0, "first_day": "2025-10-25", "last_day": "2025-12-31", "message": "timestamps reach 656.0 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2024-03-15 01:38:51.897000+01:00", "latest": "2025-12-31 23:29:59.680000+01:00", "days_before_window": 655.973, "days_after_window": 0.0 } }, { "check": "volume_anomaly", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 17, "worst_value": 0.0005, "healthy_value": 1.0, "first_day": "2025-10-31", "last_day": "2026-08-16", "message": "0% of the 4,616,750 row median for the preceding days", "detail": { "rows": 2435, "baseline_median": 4616750 } }, { "check": "shard_completeness", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 9, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-04-06", "last_day": "2026-09-17", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 6514 } }, { "check": "day_continuity", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 1, "worst_value": 19.0, "healthy_value": 0.0, "first_day": null, "last_day": null, "message": "19 day(s) missing, longest run 4 day(s)", "detail": { "first_day": "2025-10-25", "last_day": "2026-09-29", "days_present": 321, "longest_gap_days": 4, "gaps": [ [ "2025-10-29", "2025-10-30" ], [ "2025-11-02", "2025-11-05" ], [ "2025-11-10", "2025-11-10" ], [ "2025-12-16", "2025-12-16" ], [ "2026-04-04", "2026-04-05" ] ] } }, { "check": "catalog_staleness", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 1, "worst_value": 1.0, "healthy_value": 0.0, "first_day": null, "last_day": null, "message": "1 of 9 indexed days have files that changed after they were measured (newest 2026-09-21); everything reported about them describes the previous version of those files. Re-index to re-measure.", "detail": { "days_measured": 9, "stale_days": 1, "recent_days_being_written": 0, "newest_stale_day": "2026-09-21", "note": "files changed after this day was indexed; re-index to re-measure", "days_examined_this_run": 800, "catalog_days_total": 10429, "coverage_note": "NEWEST 800 of 10,429 indexed dataset-days were examined; older days were not looked at, so a count of zero here is a lower bound rather than an all-clear" } }, { "check": "volume_anomaly", "dataset": "hyperliquid/trades", "severity": "warn", "days_affected": 29, "worst_value": 204.8159, "healthy_value": 1.0, "first_day": "2025-10-26", "last_day": "2026-09-21", "message": "204.8x the recent median — possible duplication", "detail": { "rows": 1757525, "baseline_median": 8581 } }, { "check": "window_coverage", "dataset": "hyperliquid/trades", "severity": "warn", "days_affected": 23, "worst_value": 0.5006, "healthy_value": 0.9916116666666666, "first_day": "2025-11-14", "last_day": "2026-08-27", "message": "holds ~50% of its window, 50% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 2844117, "files": 12, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "shard_completeness", "dataset": "hyperliquid/trades", "severity": "warn", "days_affected": 6, "worst_value": 0.5, "healthy_value": 1.0, "first_day": "2026-04-03", "last_day": "2026-08-27", "message": "6 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 6, "shards_expected": 12, "rows": 2071875 } } ], "counts_by_severity": { "critical": 6, "warn": 3 }, "checks_run": [ "catalog_staleness", "day_continuity", "instrument_scope", "shard_completeness", "staleness", "timestamp_plausibility", "volume_anomaly", "window_coverage" ], "checks_not_run": null, "scope_note": "Every check ran.", "note": "Magnitudes are measured, not asserted: each finding reports the value and the value it would take if healthy." } ## [agent thinking] ## [agent] **FINAL ANSWER** The volume-weighted average price of the Hyperliquid BTC perpetual on 2026-09-27 (UTC) was **≈ 84,600.71 USD**. **How I got it:** This PeerFeed host only serves 1-minute bars, not individual trades. So I multiplied each minute's VWAP by its volume, added those up for the day, and divided by the day's total volume. That gives the same result as a VWAP computed from every trade. The day covers 00:00:00 to 23:59:59 UTC, with 1,440 one-minute bars, 175,800 trades and about 14,529.77 BTC traded. **Data check:** This feed has had serious coverage problems in the past: shards were often built from only part of their 2-hour window, some shards were missing, and one day's files changed after they were measured. I checked this day specifically: - All 12 of its 12 two-hour shards are present. - Shards cover 0.992 of their windows, which is this feed's normal level. - There are no data-quality labels for the day. - No minute bars were dropped for having too few trades; all 1,440 minutes are there. - The file that changed after measurement belongs to 2026-09-21, not this day. I treated the day as complete and didn't add a caveat to the number. **Judgement calls:** 1. I took "BTC perpetual on Hyperliquid" to mean the `hyperliquid/trades:BTC` series, which is Hyperliquid's BTC-USD perpetual. 2. The day is the UTC calendar day, midnight to midnight, with the end excluded. 3. The price is weighted by volume in BTC, not by USD value. ## [run ended] subtype=success turns=5 duration_ms=15125