{
  "pillar": "lookahead-bug",
  "repository": "fx-longhistory-lab",
  "commit": "072c4b849ef23e331cb0d79d6eb9dbe3950fda1e",
  "claims": [
    {
      "key": "post_fix_mtfdow_m1",
      "claim": "修正後、MTF ダウ合流ショート (mtfdow) を M1 の時間軸に載せて測ると、GBPJPY 24 年・保有 500 分で母集団平均との差は +1.9892bp (n=1,417、t=+1.375、80% 検出限界 4.05bp) だった。",
      "value": "+1.9892bp, n=1417, t=1.375, mde80=4.0525bp, net_after_cost=+0.7752bp",
      "conditions": null,
      "source": {
        "file": "domains/gbpjpy_bo/RESULT_EMA200_FILTER_EFFECT.json",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "m5_grid_reference",
      "claim": "M1 に載せ替えず M5 の時間軸のまま測った mtfdow は +2.3299bp (n=1,413、t=+1.605) で、修正後の M1 版 +1.9892bp と近い。",
      "value": "+2.3299bp, n=1413, t=1.605, mde80=4.067bp",
      "conditions": null,
      "source": {
        "file": "domains/gbpjpy_bo/RESULT_RESCORE_HOLDING_NONOVERLAP.json",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "bar_start_vs_close_timing",
      "claim": "M5 の 10:00 の足は 10:00〜10:04 の 5 本の 1 分足から成り、終値が決まるのは 10:05。修正前はその足のシグナルを 10:00 の 1 分足から有効にしていたので最初の建玉は 10:01 (4 分早い)、修正後は 10:05 の 1 分足から有効で最初の建玉は 10:06 になる。",
      "value": "修正前: 有効 10:00-10:05 / 最初の建玉 10:01。修正後: 有効 10:05-10:10 / 最初の建玉 10:06。確定 10:05。",
      "conditions": "修正後は本物の関数、修正前は docstring の説明どおり +5 分を外した複製で、合成した時刻列に対して実行して確認 (市場データは読んでいない)。1 分足の時刻はバー開始時刻という前提 (signal_mtfdow.py L139-141 が close_time = 開始 + 5 分 としている)。",
      "source": {
        "file": "domains/gbpjpy_bo/confluence_and_batch.py L73-85 (修正: datetime_est + 5 分、merge_asof backward、tolerance 5 分) / rescore_all_holding_return.py L101 (entry = 次の 1 分足の始値)",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "confirm_time_rule_propagated",
      "claim": "同じ研究の上位足フィルタ (4 時間足・日足・週足の 200EMA、4 時間足 RSI) は、どれも『足の開始時刻 + 足の長さ』(confirm_time) 以降にだけ使う形で 1 分足に結合している。",
      "value": "confirm_time = datetime_est + length、merge_asof direction=backward",
      "conditions": "fx-longhistory-lab/ax4_filter_test.py (未 commit) はこれらの関数を skeptic から import して使っている (L40-41)。",
      "source": {
        "file": "domains/gbpjpy_bo/filter_axis_2x2.py L60-100 / ema200_filter_effect.py L65,L83-86 / gbpjpy_grid_search.py L84-90",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "ema200_filter_k3",
      "claim": "上位足 200EMA フィルタ (週足・日足・4 時間足のうち 3 本がトレード方向と同じ側) を 12 戦略に掛けると、10 戦略で成績が上がり、平均改善 +0.5657bp・t=+3.399 だった (GBPJPY 24 年、探索段階)。",
      "value": "k=3: 10/12, mean_delta=+0.5657bp, se=0.1664, t=3.399, sign p=0.0386",
      "conditions": "k=3 は事前に決めた主判定ではなく感度分析。修正後のコードで計算された値。",
      "source": {
        "file": "domains/gbpjpy_bo/RESULT_EMA200_FILTER_EFFECT.json",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "ema200_filter_k2_primary",
      "claim": "事前に主判定と決めていた k=2 (3 本中 2 本以上が同じ側) では、改善は 12 戦略中 9、平均 +0.2945bp、t=+1.724、符号検定 p=0.146 で有意ではなかった。",
      "value": "k=2: 9/12, mean_delta=+0.2945bp, t=1.724, sign p=0.146 (is_primary=true)",
      "conditions": "GBPJPY 24 年、保有 500 分、12 独立定義。",
      "source": {
        "file": "domains/gbpjpy_bo/RESULT_EMA200_FILTER_EFFECT.json",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    },
    {
      "key": "no_unit_test_for_mapping",
      "claim": "バグのあった関数 m5_signal_to_m1 (M5 シグナルを 1 分足に載せる処理) には単体テストが無い。既存の先読みテスト (データを途中で切っても過去の値が変わらないか) は、スイングの判定 structure_bias だけを対象にしている。",
      "value": "test_mtfdow.py L93-112 は structure_bias のみ。m5_signal_to_m1 の参照は confluence_and_batch.py と filter_axis_2x2.py の注記のみ",
      "conditions": "grep で m5_signal_to_m1 を検索した結果。",
      "source": {
        "file": "domains/gbpjpy_bo/test_mtfdow.py",
        "commit": "0cf7fa0f3753355a3a26a589492c69f4fb8da5d3"
      }
    }
  ],
  "figures": [
    {
      "name": "mtfdow の成績: 修正後 (足の確定後から有効) と 5 分足のまま測った値 (GBPJPY 24 年・保有 500 分)",
      "unit": "bp (母集団平均との差)",
      "rows": [
        {
          "label": "修正後 (M1・足の確定後から有効)",
          "value": 1.9892
        },
        {
          "label": "参考: M5 のまま測定",
          "value": 2.3299
        }
      ],
      "id": "results",
      "note_ja": "修正前の値は結果ファイルが無く再現できていないため載せない"
    },
    {
      "name": "M5 の 10:00 の足のシグナルが 1 分足で使われ始める時刻",
      "unit": "分 (10:00 からの経過)",
      "rows": [
        {
          "label": "M5 足の開始",
          "value": 0
        },
        {
          "label": "修正前の最初の建玉 (10:01)",
          "value": 1
        },
        {
          "label": "M5 足の終値が決まる (10:05)",
          "value": 5
        },
        {
          "label": "修正後の最初の建玉 (10:06)",
          "value": 6
        }
      ],
      "id": "timing"
    },
    {
      "name": "上位足 200EMA フィルタの平均改善 (12 戦略、GBPJPY)",
      "unit": "bp",
      "rows": [
        {
          "label": "k=1 (10/12 改善, t=2.505)",
          "value": 0.3009
        },
        {
          "label": "k=2 主判定 (9/12, t=1.724, p=0.146)",
          "value": 0.2945
        },
        {
          "label": "k=3 (10/12, t=3.399)",
          "value": 0.5657
        }
      ],
      "id": "ema200-filter"
    }
  ],
  "caveats": [
    "修正前の取引数 (n)・t 値・勝率は記録が無い。",
    "『最大 4 分』は注記の表現。重複建玉の排除は最も早い足を優先するので、多くの取引では 4 分早い建玉になっていたとコードからは読める (未測定)。一方、修正後は終値確定の 1 分後に建てる実装で、1 分ぶん保守側にずれている。",
    "修正前の挙動は docstring の説明 (+5 分のずらしが無い) から再構成して合成データで確かめたもので、元のコードそのものではない。",
    "RESULT_CONFLUENCE_AND.json (ファイル時刻 2026-07-28 16:10) は、修正済みの値を持つ RESULT_EMA200_FILTER_EFFECT.json (16:49) より前に書かれ、confluence_and_batch.py の最終更新 (17:05) よりも前。修正前と修正後のどちらのコードで作られたかは記録から判定できない。",
    "ファイル時刻は 2026-07-28 (JST) で、docstring の『BUG FIXED 2026-07-27』と 1 日ずれる。時差の可能性があり判定しない。",
    "別件・未検証の疑い: fx-longhistory-lab の fx_data.resample は label='right', closed='right' で集約している。1 分足の時刻がバー開始時刻なら、ラベル時刻 t の足に t〜t+1 分の 1 分足が含まれる可能性がある。本件 (ax4_filter_test.py) はこの関数を使っていないが、run_stage_a.py 側は使う。確認していない。"
  ],
  "not_claimed": [
    "修正前の取引数・t 値・勝率を言わない (記録が無い)。",
    "『先読みのせいで 200EMA フィルタの結論が変わった』とは言えない。フィルタの集計は修正後のコードで計算されており、修正前の集計は存在しない。",
    "『このバグを見つけたのは fx-longhistory-lab』と言わない。修正と証拠は skeptic リポジトリ (domains/gbpjpy_bo) にある。",
    "『この研究にもう先読みは無い』と言わない。バグのあった関数には単体テストが無い。",
    "『Pine Script でも同じ大きさのずれが出る』と言わない。Pine では一切検証していない。"
  ]
}
