🗄️ 歴史的文書(アーカイブ) — この文書は過去の研究フェーズの記録であり、現在の結論・手法を反映していません。現在の研究状況は解説セクションを参照してください。
このシリーズは未完の下書き(draft)のまま凍結されています。
01. Data Landscape — ETH_JPY data coverage(2021-05 historical + 2026-02/04 stream)
本ページは Phase 0 の調査レポート research_reports/phase0_data_landscape.md を整理したもの。
プロジェクトの背景と前提コストモデルは 00-introduction.md を、戦略監査の結論は 02-baseline-audit.md を、新戦略仕様は 03-strategy-design.md を参照。
数値はすべて 2026-04-20 時点の本番 Postgres (ATC_DATABASE_URL) に対する集計結果である(当日は途中まで)。
TL;DR
- Historical → Stream の引き継ぎはほぼクリーンだが 1 日穴あり:
market_trade_eventsは ETH_JPY 2021-05-01 → 2026-02-15 をカバー、market_stream_*は 2026-02-17 から開始。2026-02-16 はどのテーブルにも 1 行もない(ingest 切り替え日)。 - ストリームレベルでバックテスト可能なウィンドウは ETH_JPY で 2026-02-17 → 2026-04-19(本日は途中まで)。日次の品質フラグは下表参照。
- Orderbook は 30 レベル(bids+asks)の JSONB スナップショットを ~2 Hz で取得(中央値ギャップ 0.5s, p99 ≈ 1s)。size は ETH 単位、price は JPY 単位、いずれも文字列。Trades / Ticker はもっと疎(trade 中央値 0s バースト, p95 ~33s; ticker 中央値 1.5s)。
- 3 つの品質ギャップを回避する必要あり: 2026-04-08 は ticker がほぼ空(3 行)、2026-04-11 は orderbook が 29k 行のみ(≈06–18 UTC 帯に欠損)、2026-04-17 は ticker が完全停止(trades + orderbooks は OK)。
テーブル別プロファイル
| テーブル | 行数 (全 symbol / ETH_JPY) | サイズ | ETH_JPY 期間 | 状況 |
|---|---|---|---|---|
market_trade_events(historical, CSV 起源) | 19,578,364 / ~10.2M | 12 GB | 2021-05-01 → 2026-02-15 | append-only / 月単位の穴なし |
market_stream_trades(live WS) | 9,582,166 / 1,205,027 | 1.46 GB | 2026-02-17 → 2026-04-20(63 日連続) | 健全 |
market_stream_ticker(live WS bid/ask/last) | 4,126,844 / 521,269 | 803 MB | 2026-02-17 → 2026-04-20、2026-04-17 完全欠損 / 2026-04-08 は 3 行のみ | 部分欠損あり |
market_stream_orderbooks(live WS L2 snapshot) | 167,038,320 / ≈10M | 327 GB | 2026-02-17 → 2026-04-19(2026-04-20 は途中まで) | 2026-04-11 partial(00–01 UTC 帯欠損) |
Orderbook の形状
- 30 bid レベル + 30 ask レベル(2026-04-15 の ETH_JPY 行は 100% この構造)。
- 各レベル:
{"size": "0.4", "price": "368127"}— 文字列、size は ETH、price は JPY。 - Index は
(symbol, recv_ts_utc DESC)と(business_date_jst)のみ。(symbol, business_date_jst)がないため、symbol を絞った日次集計は ~3.5M 行スキャン × フィルタで ~8.5s/日かかる。
参考: 2026-04-15 のトップオブブック例 — best bid 367,744 / best ask 368,127 → スプレッド 383 JPY、book は 367,300 〜 368,510 を覆う。
バックテスト可能ウィンドウの推奨
- プライマリ・ストリーム窓: 2026-02-17 → 2026-04-19(62 暦日)。3 ストリームすべてが揃う。
- 3 ストリームすべてクリーンな完全窓: 2026-02-17 → 2026-04-07(49 日) + 後続のクリーンな個別日。2026-04-08 以降は少なくとも 1 サブテーブルに欠損あり。
- 実務的推奨: 2026-02-18 → 2026-04-19 を採用しつつ、ticker/フル日 orderbook が必要な評価では
{2026-04-08, 2026-04-11, 2026-04-17}を除外。trade-only 戦略であれば全期間使用可能。 - Historical(trade-only)バックテスト: 2021-05-01 → 2026-02-15(58 ヶ月)を
market_trade_events経由で実行可能。2026-02-17 以前は book/ticker 文脈なし。
リファレンス日(2026-04-15)スナップショット
Inter-arrival statistics — ETH_JPY
| Source | Events | Median gap (s) | p95 gap (s) | p99 gap (s) | Max gap (s) |
|---|---|---|---|---|---|
| stream_trades | 15,142 | 0.000 | 32.97 | 106.85 | 467.67 |
| stream_ticker | 6,219 | 1.458 | 70.33 | 155.36 | 467.67 |
| stream_orderbooks | 173,855 | 0.503 | 0.68 | 1.01 | 209.75 |
メモ:
- trade の中央値 0s は レイテンシゼロではなく、同じ exchange タイムスタンプを共有する複数プリント(バースト約定)を意味する。サブミリ秒の順序は
idで決定。 - Orderbook ケイデンスは ~2 Hz と非常に規則的(p95 0.68s)。1 件の 210s max ギャップと trade/ticker の 467s max は、同じ WS 再接続ウィンドウに対応していると思われる。
- Ticker は book-diff ロジックを使わない戦略のループに最適な「ハートビート」(中央値 1.5s)。
価格レンジ・ボラティリティ — ETH_JPY(stream_ticker.last から)
| Metric | Value (JPY) |
|---|---|
| min | 367,166 |
| p01 | 367,629 |
| p25 | 369,278 |
| median (p50) | 370,786 |
| mean | 371,058.40 |
| p75 | 372,008.5 |
| p99 | 377,913 |
| max | 379,500 |
| stddev (sample) | 2,307.55 |
| 平均 bid-ask spread | 229.52 JPY(≈6.2 bps on 370k) |
日中レンジ ≈ 12,334 JPY(中央値の ~3.3%)。標準偏差/平均 = 62 bps。代表的な「通常の上昇トレンド日」。
日次行数 — ETH_JPY、2026-03-15 → 現在
| Date | stream_trades | stream_ticker | stream_orderbooks | Flags |
|---|---|---|---|---|
| 2026-03-15 | 14,194 | 6,924 | 164,851 | low trade count, Sunday |
| 2026-03-16 | 43,014 | 21,033 | 176,300 | |
| 2026-03-17 | 24,864 | 12,005 | 176,750 | |
| 2026-03-18 | 21,010 | 9,504 | 175,583 | |
| 2026-03-19 | 25,417 | 11,364 | 173,389 | |
| 2026-03-20 | 12,369 | 5,297 | 171,328 | |
| 2026-03-21 | 8,504 | 4,044 | 135,831 | low (Saturday) |
| 2026-03-22 | 16,706 | 7,432 | 166,687 | |
| 2026-03-23 | 34,600 | 15,112 | 177,013 | |
| 2026-03-24 | 17,294 | 7,571 | 175,939 | |
| 2026-03-25 | 16,048 | 7,034 | 176,220 | |
| 2026-03-26 | 16,898 | 7,153 | 174,224 | |
| 2026-03-27 | 17,938 | 7,625 | 174,466 | |
| 2026-03-28 | 9,930 | 4,164 | 152,830 | low (Saturday) |
| 2026-03-29 | 9,118 | 4,002 | 165,321 | Sunday |
| 2026-03-30 | 20,805 | 9,067 | 175,192 | |
| 2026-03-31 | 21,590 | 9,401 | 175,010 | |
| 2026-04-01 | 15,860 | 6,844 | 173,693 | |
| 2026-04-02 | 20,202 | 8,653 | 171,083 | |
| 2026-04-03 | 9,431 | 4,106 | 168,009 | |
| 2026-04-04 | 5,527 | 2,448 | 143,522 | low (Saturday) |
| 2026-04-05 | 8,307 | 3,605 | 160,339 | Sunday |
| 2026-04-06 | 17,671 | 7,616 | 175,060 | |
| 2026-04-07 | 17,954 | 7,175 | 171,997 | |
| 2026-04-08 | 25,918 | 3 | 175,953 | TICKER OUTAGE |
| 2026-04-09 | 17,024 | 5,843 | 172,335 | |
| 2026-04-10 | 15,958 | 6,500 | 169,961 | |
| 2026-04-11 | 11,128 | 4,625 | 29,461 | ORDERBOOK PARTIAL(00–01 UTC 帯欠損) |
| 2026-04-12 | 16,289 | 6,533 | 168,220 | |
| 2026-04-13 | 15,966 | 6,802 | 172,584 | |
| 2026-04-14 | 26,764 | 10,737 | 173,112 | |
| 2026-04-15 | 15,143 | 6,220 | 173,856 | reference day |
| 2026-04-16 | 18,350 | 3,659 | 173,409 | ticker low |
| 2026-04-17 | 22,894 | 0 | 172,519 | TICKER OUTAGE(full day) |
| 2026-04-18 | 14,833 | 5,720 | 154,161 | |
| 2026-04-19 | 13,272 | 5,560 | 171,108 | |
| 2026-04-20 | 410(途中) | 1,953 | n/a | partial day |
低取引日は週末と整合(クリプト自体は動くが JP 個人フローが減る)。Ticker / trades 比は通常 ~0.4 なので、2026-04-16(3,659 / 18,350 ≈ 0.20)はやや疑わしいが対応必要なレベルではない。
クロスシンボル密度(参考)
2026-04-15 の trade 数で並べた上位(全 31 シンボル)。
- BTC_JPY: 51,167(ETH_JPY の 3.4 倍)
- XRP_JPY: 21,602(ETH_JPY の 1.4 倍)
- ETH_JPY: 15,143
- BTC(外貨建て): 13,276
- ETH(外貨建て): 10,440
- XRP: 8,361
- DOGE_JPY: 3,406
- SOL: 2,726
- 以下、500 trades/日 を超えるのは合計 16 シンボル
_JPY が付かないシンボルは GMO の同フィード上の外貨ペア(USDT / BTC quoted)。
データ品質に関する懸念事項
- 2026-02-16 — 完全ブラックアウト: historical CSV も stream もデータなし。この境界を跨ぐバックテストはスキップまたは補間必須。
- 2026-04-08 — ticker outage: trades と orderbooks は正常稼働下で ticker が 3 行のみ。
TICKERイベントを消費する戦略はフラットラインを見ることになる。orderbook トップから mid を導出するフォールバック推奨。 - 2026-04-11 — orderbook partial: 約 170k 期待に対し 29,461 スナップショットのみ。時間別検査では 2026-04-11 00:00 〜 01:00 UTC(日本朝)に欠損。Ingest worker 再起動と推定。Trade ストリームには影響なし。
- 2026-04-17 — ticker outage(full day): ticker 行ゼロ。緩和策は 04-08 と同様。
- Historical
market_trade_eventsの source path に pytest tmp dir が混入: 一部行のsource_file_pathが/private/var/folders/.../pytest-of-shion/...となっている。テストが本番 DB に書き込んでいないか要検証(プレフィックス一致行のCOUNT(*)を実施推奨)。 - Orderbook の index が symbol-selective ではない(
(business_date_jst)のみ、(symbol, business_date_jst)なし)。単日 ETH_JPY 集計に ~8.5s/日。推奨:(symbol, business_date_jst)index を追加する、または対象期間の partitioned/daily Parquet キャッシュを作る(大規模 ML スイープ前に対応)。 - 長寿命の psql セッションが観測: 本レポート作成時、11 件の先行セッションが 8〜22 分間
market_stream_orderbooksスキャンを継続中だった。SET statement_timeoutの不足、または cleanup 漏れの可能性。 - 週末のサプレッションは実在(土 ~ 平日の 50%)が、JP リテール中心の取引所の特性として想定内。バグではない。
business_date_jstの境界は 06:00 JST / 21:00 UTC:2026-02-14 21:00:37 UTCがbusiness_date_jst = 2026-02-15にバケットされていることを確認済み。CLI ドキュメントに記載のとおり。
スキーマ・サマリ(クイック参照)
market_trade_events (historical)
PK id; UNIQUE(source_file_path, source_line_no)
symbol, side(BUY/SELL), size N(28,10), price N(28,10)
exchange_ts_utc TIMESTAMPTZ, business_date_jst DATE
payload_jsonb (historical_csv marker)
market_stream_trades (live)
symbol, side, size, price, exchange_ts_utc, recv_ts_utc, business_date_jst
market_stream_ticker (live)
symbol, bid, ask, last, high, low, volume, exchange_ts_utc, recv_ts_utc, business_date_jst
market_stream_orderbooks (live)
symbol, exchange_ts_utc (NULLable), recv_ts_utc, business_date_jst
bids_jsonb: [{size, price} x 30] strings
asks_jsonb: [{size, price} x 30] strings
関連ページ
00-introduction.md— プロジェクト前提・コストモデル02-baseline-audit.md— 既存戦略の現状性能棚卸し03-strategy-design.md— 新戦略 6 件の設計仕様