# Data specification and alignment

売買・バックテスト対象はMNQ。MESはSMT判定の参照市場であり、MESの約定損益は計算しない。取得状況の公開用集計は `results/summary/data_inventory.json` に保存し、元の価格バーは配布しない。

SMTの分析可能期間は両系列の共通時刻のみ。欠損バーは補間しない。

## 現行データ（2026-09-28更新）

| 用途 | 系列 | 本数 | NY現地時間の終点 |
|---|---|---:|---|
| MNQ売買・バックテスト | Databento 5m | 122,577 | 2026-09-25 16:55 |
| MNQ追加分の原資料 | Databento 1m（9/18以降のみ） | 7,360 | 2026-09-25 16:59 |
| MES SMT参照 | Databento 1m | 611,239 | 2026-09-25 16:59 |
| MES SMT参照 | 完全な1分足5本から集約した5m | 122,110 | 2026-09-25 16:55 |

- 分析終点は完了済みの2026-09-25 NY取引日。MNQ/MESの時刻一致5分足は121,858本、MNQのみ719本、MESのみ252本。全取得状況とSHA256は `results/summary/data_inventory.json` と `data/raw/manifest.json`。
- MNQは旧2026-09-18 09:25までの実限月コード付き5分足に、Databento `MNQ.c.0` と満期金曜の `MNQ.c.1` から集約した1,470本を連結。旧ファイルは保持し、新系列は `data/raw/mnq_5m_databento_2025-01-01_2026-09-26.csv`。ローダーは実限月の切替点から先にのみ価格差を加算する。
- MESは旧2026-09-23 19:59までの1分足に9/25まで2,640本を追加。9/18満期金曜09:30〜16:59は `MES.c.1` の450本を補い、以後の12月限に `MESZ6` を付した。最終系列は `data/raw/MES/mes_1m_databento_20250101_20260926_expiryfill.csv` とその5分足。9/18以前のMESには実限月コードがないため、それ以前のロールは復元していない。
- 追加API見積額は初回MNQ/MES約$0.0365、MES限月補完約$0.0016。MNQの保存前検証で列形式不一致が起き、追加MNQ照会を1回行ったため、実請求は見積額合計より高くなり得る。価格CSVはサイトやGitへ公開しない。
- MNQの全期間1分足は未保存のため、全期間の3分足SMTは引き続き計算しない。旧TradingView MESは比較資料専用で、現行主パイプラインはDatabento MESを使用する。

以下の旧スナップショット節は取得履歴として残す。現在のソースと期間は上記および設定ファイルを参照。

## 旧スナップショット: TradingView MES系列

| Field | MNQ | MES |
|---|---|---|
| Source | Databento GLBX.MDP3 | TradingView export |
| Continuous | True `MNQ.c.0` | unknown |
| Local SMT-source interval | 5m | 5m |
| Rollover | vendor continuous mapping, local forward-only gap adjustment | unknown |
| Back adjustment | vendor none; local forward-only | unknown |
| Contract column | symbol | missing |
| Timezone | America/New_York, DST-aware | America/New_York, DST-aware |
| Session | ETH | unknown |
| Coverage | 2025-01-01 18:00:00-05:00 .. 2026-09-18 09:25:00-04:00 | 2026-04-05 18:00:00-04:00 .. 2026-09-15 21:15:00-04:00 |
| Missing volume bars | 0 | 32140 |
| Duplicate bars | 0 (loader rejects duplicates) | 0 (loader rejects duplicates) |

## Alignment quality

- MNQ-only bars in overlap: 0
- MES-only bars in overlap: 276
- Exact matched bars: 31864
- Timestamp mismatches / unmatched bars: 276
- Missing ratio (union denominator): 0.8587%
- Overlap UTC: 2026-04-05T22:00:00+00:00 .. 2026-09-16T01:15:00+00:00

## SMT availability

Computed: 5m, 10m, 15m, 30m, 60m, 90m, 4h, 1d, 1w.
Unavailable: {'3m': 'requires source bars dividing 3m; current=5m'}. 5m系列から3mを再構成しない。

追加取得済みMESの仕様と感度分析は以下に記録。
元データ・Pine本文はライセンスによりGit管理外。

Data source docs: https://databento.com/docs/examples/symbology/continuous

## 旧スナップショット: 2026-09-25取得のMES Databento系列

- 取得日: 2026-09-25。取得元: Databento `GLBX.MDP3`、`ohlcv-1m`、継続シンボル `MES.c.0`。期間: `2025-01-01` 以上、`2026-09-24` 未満（UTC）。実際のバーは `2025-01-01 23:00`〜`2026-09-23 23:59` UTC。
- 保存先: `data/raw/MES/mes_1m_databento_20250101_20260924.csv`（608,149本）、完全な5本からのみ集約した `data/raw/MES/mes_5m_databento_20250101_20260924.csv`（121,492本）。SHA256とAPI見積額 $2.220220938325 は `data/raw/manifest.json` に記録。
- 時刻は `America/New_York`（DST対応）。取得対象は継続先物の全取引時間帯（ETH相当）で、RTHへの限定はしていない。Databentoの期近継続先物マッピングを使用し、ベンダー側のバックアジャストは指定していない。ロール基準の詳細は未検証。
- `symbol` と `contract` 列には `MES.c.0` が入る。**実限月コードではない**ため、このファイル単独で限月切替時刻を復元・検証できない。MNQ既存ファイルとはこの点が異なる。
- 1分足の重複時刻、欠損値、OHLC不整合、非正出来高は各0件。取得時、Databentoは一部日付の品質低下を警告（例: 2025-09-17、2025-09-24、2025-11-28。全対象日リストは未照会）。欠損バーの補間は行っていない。
- 既存MNQ 5分足との共通期間 `2025-01-01 23:00`〜`2026-09-18 13:25` UTCでは、時刻一致120,388本、MNQのみ719本、MESのみ252本、union欠損率0.8001%。旧TradingView MESとの上記分析結果には混ぜていない。
- 当時の旧MESとの感度比較は `reports/mes_source_comparison.md` に保存。現行主パイプラインには上記の更新済みDatabento MESを採用した。3m SMTにはMNQ側の全期間1分足も必要。

## 確定SMT後の最初のシグナル検証

- `scripts/run_first_signal_after_smt.py` の更新版はNY現地日付2025-01-01〜2026-09-25を対象にする。Discoveryは2025年通年、retrospective Validationは2026年1月〜9月25日。MESは両期間でDatabentoの同一系列を使用し、旧TradingView MESと混ぜない。5m/15m/60m SMTを使用し、15m/60mは対応する5分足が全て揃い、その上位足が閉じた時刻にのみ確定する。
- 同方向のSMTが続く間を1イベントとし、`none`・逆方向・ペアの5分超ギャップで区切る。確定時刻と同時のシグナルは除外し、それより後の最初のインジケーターシグナルがイベントを消費する。方向一致はその最初のシグナルの部分集合。
- 売買シグナルは5分足終値で確定し、隣接する次の5分足始値にEntry。日付境界とH007の90分窓は共通約定エンジンに合わせNY現地時刻で区分する。
- 監査列 `event_confirmed_at`、`signal_at`、`direction_matched`、`entry_gap_ok` は `results/features/first_smt_signals.csv` に保存。MNQ・Databento MESのSHA256と一致バー数は `results/summary/first_signal_after_smt_provenance.json`。2026年9月25日16:55 NYの完了済み最終5分足までを対象とする。
- 現行SMTの参照高安値は過去の上位足から求める。過去側の上位足に欠損5分足があれば、その期間の高安値は観測値だけから計算される。MESの9月18日以降のみ実限月を確認済みで、それ以前のロール近辺の判定は追加確認が必要。
- 追加の4h検証は `--four-hour` で別出力する。NY 18:00を起点に4時間を区切り、MNQ・MES両方の5分足48本が全て一致する期間だけ、その4時間足終値でSMTを確定する。取引時間末尾や欠損による未完成の4時間足は確定イベントにしない。結果は `reports/first_signal_after_smt_4h.md`、監査は `results/features/first_smt_signals_4h.csv`。

## Session Framework 4分類

- `config/session_frameworks.yaml` が今回の唯一のセッション境界と閾値の正本。既存の4セッション×90分AMDXとは別定義で、Asia 18:00–01:00、London 01:00–08:00、NY 08:00–16:00、NY AM 08:00–12:00。全て `America/New_York` の壁時計で判定し、18:00以降のバーは翌NYカレンダー日付のセッションへ割り当てる。09:30 Cash Openは価格参照であり、Framework判定の取引禁止条件ではない。
- MNQ 5分足に対してF1〜F4のSweep・Reclaim・Expansionの各時刻を保存。Sweepは基準高安を最低1 tick越え、既定では3本以内に内側でClose。ExpansionはReclaim後の別の足で、セッション開始時点のATR14×1以上の順方向移動に初めて到達した足のCloseで確定する。幅のtick、ATR、Session Range、固定Pointは設定とイベント列で追試できる。複数FrameworkとNO_FRAMEWORKを許可する。日次集計は後から見た全日の構造であり、エントリー判定には `confirmed_at <= entry_time` だけを使用する。
- F1のKey Levelは前の完了したNY取引日高安。F2の明確なAsia Rangeは同RangeとLondon開始時の5分足ATR比で判定。F3のHTF Targetは前日高安または01:00以前に完成した7時間足のSwing高安/FVGの直近候補。7時間足はNY 18:00起点の420分窓で、完全な84本が必要。LondonのProtractionはNet距離/ATR、効率、最大Retracementを別々に記録してから合成判定する。F4はLondon高安のNY AM Sweep/Reclaim/Expansion。目視ICTラベルの完全再現とは主張しない。
- SMTは2025年から使えるDatabento MESとMNQの時刻一致5分足で計算。5m/15m/60m/90m/4hは対象足に必要な一致バーが全て揃った時だけ、1d/1wは通常ETHバー数の99%以上を条件にし、最後の完成足の状態を次のEntryに結合する。欠損を補間せず、許容時刻を超えた状態は`unknown`。HTF Biasは前の完了日Closeと5日平均の比較。ボラティリティは確定5分足のATRに基づく既存の高・低ラベル。AMDは価格構造ではなく既存のNY AM時間区分。
- `session_framework_daily.csv` は日次のOHLCと成立フラグ、`session_framework_events.csv` は候補・確定時刻・基準Level・HTF Target、`session_framework_trades.csv` は約定時点のContext、R損益、MAE/MFEを保持する。サイトには同じ全件CSVの圧縮版 `session_framework_trades.csv.gz` を掲載する。MAE/MFEはEntryからExitを含む5分足高安によるUSDの可能範囲で、同一足の先後・スリッページの細部は判定できない。`session_framework_filter_backtests.csv` はFramework確定時点以降のEntry制限を実際に再実行し、F4のみ09:30–10:00許可・禁止の両方を保存する。
- 2025-01〜08、2025-09〜12、2026-01〜09/25を別集計する。いずれも過去研究で閲覧済みの可能性がある期間で、独立Holdoutではない。Frameworkは単独で注文を出さず、単独PFを定義しない。記述的コホートの最大DDは抽出約定のExit順損益で、複数戦略を一口座で運用した際のDDではない。
- `scripts/session_framework_expansion_sensitivity.py` はExpansion閾値0.5/1.0/1.5/2.0×ATRのみを変更して全日を再分類し、成立頻度と既存約定の件数・PF・平均R・期待値を `session_framework_expansion_sensitivity.csv` に保存する。感度表はEntry制限の再実行ではなく記述的比較であり、閾値の事後選択は将来成績を保証しない。
- `scripts/build_framework_amdx_matrix.py` はEntry時点でF1〜F4の確定フラグがあるMNQ約定だけを、インジケーター×AMDX窓で記述的に再集計する。窓の時刻はEntry直前の5分足シグナルバーの開始時刻で決める。`session_amdx_matrix.yaml` の4セッション×90分（NY AM D 09:00–10:30）と`amdx.yaml`のNY AM専用区分（D 09:30–10:30）は`scheme`で区別し、同一約定に両方のラベルを付ける。Frameworkも重複可能なため、行同士を合算しない。結果CSVは `results/summary/framework_amdx_matrix.csv`。
- 同スクリプトは90m・4h SMTのEntry時点の確定状態を `results/summary/framework_amdx_smt_matrix.csv` に別集計する。`present` はbullish+bearish、`direction_matched` は買い×bullishまたは売り×bearish。`none` は確定した非乖離、`unknown` はデータ不足。各行のbaselineは同じ期間・インジケーター・窓・SMT条件でFramework指定だけを外す。重複するSMT条件やFramework行の件数・PnLは合算しない。既存約定の分割であり、SMT確定後の最初のシグナル検証や条件付き再約定ではない。
- 3枚版は `scripts/run_framework_scaleout_matrix.py` と `config/framework_scaleout_targets.yaml` に定義する。シグナル確定の次の連続5分足始値に3枚、各TPに1枚、TP1約定後の残りSLは次の足から建値へ。SqueezeはATR14×1・3R/5R/7Rでシグナル決済なし。他14本は既存の初期SL（未定義ならATR14×2）・利用者指定の2R/3R/4Rで既存シグナル決済を維持する。3段階TPが原インジにあると見なさない。同一足でSLとTPに触れたらSL優先、片道1tick不利約定と片道1枚$0.62を含む。各戦略独立口座モデルでNY日の開始残高から−$1,000に達したら決済・当日新規停止。ただし5分足始値ギャップとシグナル決済により、モデル値の日内損失が$1,000を超える場合がある。2025年末・2026年9月25日の未完了ポジションは成績から除外し件数をprovenanceへ記録する。最大DDは3枚セット完了約定のExit順PnLによるコホート値で、口座全体の含み損DDではない。MAE/MFEは3枚の初期数量を全保有期間に掛けた可能範囲で、部分利確後の実際の時系列エクスポージャーではない。
