メインコンテンツまでスキップ

🗄️ 歴史的文書(アーカイブ) — この文書は過去の研究フェーズの記録であり、現在の結論・手法を反映していません。現在の研究状況は解説セクションを参照してください。

このシリーズは未完の下書き(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.2M12 GB2021-05-01 → 2026-02-15append-only / 月単位の穴なし
market_stream_trades(live WS)9,582,166 / 1,205,0271.46 GB2026-02-17 → 2026-04-20(63 日連続)健全
market_stream_ticker(live WS bid/ask/last)4,126,844 / 521,269803 MB2026-02-17 → 2026-04-20、2026-04-17 完全欠損 / 2026-04-08 は 3 行のみ部分欠損あり
market_stream_orderbooks(live WS L2 snapshot)167,038,320 / ≈10M327 GB2026-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

SourceEventsMedian gap (s)p95 gap (s)p99 gap (s)Max gap (s)
stream_trades15,1420.00032.97106.85467.67
stream_ticker6,2191.45870.33155.36467.67
stream_orderbooks173,8550.5030.681.01209.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 から)

MetricValue (JPY)
min367,166
p01367,629
p25369,278
median (p50)370,786
mean371,058.40
p75372,008.5
p99377,913
max379,500
stddev (sample)2,307.55
平均 bid-ask spread229.52 JPY(≈6.2 bps on 370k)

日中レンジ ≈ 12,334 JPY(中央値の ~3.3%)。標準偏差/平均 = 62 bps。代表的な「通常の上昇トレンド日」。

日次行数 — ETH_JPY、2026-03-15 → 現在

Datestream_tradesstream_tickerstream_orderbooksFlags
2026-03-1514,1946,924164,851low trade count, Sunday
2026-03-1643,01421,033176,300
2026-03-1724,86412,005176,750
2026-03-1821,0109,504175,583
2026-03-1925,41711,364173,389
2026-03-2012,3695,297171,328
2026-03-218,5044,044135,831low (Saturday)
2026-03-2216,7067,432166,687
2026-03-2334,60015,112177,013
2026-03-2417,2947,571175,939
2026-03-2516,0487,034176,220
2026-03-2616,8987,153174,224
2026-03-2717,9387,625174,466
2026-03-289,9304,164152,830low (Saturday)
2026-03-299,1184,002165,321Sunday
2026-03-3020,8059,067175,192
2026-03-3121,5909,401175,010
2026-04-0115,8606,844173,693
2026-04-0220,2028,653171,083
2026-04-039,4314,106168,009
2026-04-045,5272,448143,522low (Saturday)
2026-04-058,3073,605160,339Sunday
2026-04-0617,6717,616175,060
2026-04-0717,9547,175171,997
2026-04-0825,9183175,953TICKER OUTAGE
2026-04-0917,0245,843172,335
2026-04-1015,9586,500169,961
2026-04-1111,1284,62529,461ORDERBOOK PARTIAL(00–01 UTC 帯欠損)
2026-04-1216,2896,533168,220
2026-04-1315,9666,802172,584
2026-04-1426,76410,737173,112
2026-04-1515,1436,220173,856reference day
2026-04-1618,3503,659173,409ticker low
2026-04-1722,8940172,519TICKER OUTAGE(full day)
2026-04-1814,8335,720154,161
2026-04-1913,2725,560171,108
2026-04-20410(途中)1,953n/apartial 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)。

データ品質に関する懸念事項

  1. 2026-02-16 — 完全ブラックアウト: historical CSV も stream もデータなし。この境界を跨ぐバックテストはスキップまたは補間必須。
  2. 2026-04-08 — ticker outage: trades と orderbooks は正常稼働下で ticker が 3 行のみ。TICKER イベントを消費する戦略はフラットラインを見ることになる。orderbook トップから mid を導出するフォールバック推奨。
  3. 2026-04-11 — orderbook partial: 約 170k 期待に対し 29,461 スナップショットのみ。時間別検査では 2026-04-11 00:00 〜 01:00 UTC(日本朝)に欠損。Ingest worker 再起動と推定。Trade ストリームには影響なし。
  4. 2026-04-17 — ticker outage(full day): ticker 行ゼロ。緩和策は 04-08 と同様。
  5. Historical market_trade_events の source path に pytest tmp dir が混入: 一部行の source_file_path/private/var/folders/.../pytest-of-shion/... となっている。テストが本番 DB に書き込んでいないか要検証(プレフィックス一致行の COUNT(*) を実施推奨)。
  6. Orderbook の index が symbol-selective ではない(business_date_jst) のみ、(symbol, business_date_jst) なし)。単日 ETH_JPY 集計に ~8.5s/日。推奨: (symbol, business_date_jst) index を追加する、または対象期間の partitioned/daily Parquet キャッシュを作る(大規模 ML スイープ前に対応)。
  7. 長寿命の psql セッションが観測: 本レポート作成時、11 件の先行セッションが 8〜22 分間 market_stream_orderbooks スキャンを継続中だった。SET statement_timeout の不足、または cleanup 漏れの可能性。
  8. 週末のサプレッションは実在(土 ~ 平日の 50%)が、JP リテール中心の取引所の特性として想定内。バグではない。
  9. business_date_jst の境界は 06:00 JST / 21:00 UTC: 2026-02-14 21:00:37 UTCbusiness_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

関連ページ