メインコンテンツへスキップ
← FXの正体SHOTAI · 第4部 · 第15章
第4部 · 検証する 第15章 約12分で読む Tags: バックテスト · オーバーフィット · 先読み · データスヌーピング

SHOTAI · 第4部 · 第15章 機械的バックテスト入門と罠 過去に100点を取る方法は、過去を見ながらカンニングすることだ。

機械的バックテストは「過去に勝てたか」を測る道具ではない。自分が自分を騙していないかを測る道具だ。 過去データにルールを回すと、ほぼ必ず「光る数字」が出る。だがその光の大半は、過去への合わせ込み・先読み・ 試行回数のごまかし——3つの錯覚で出来ている。そしてコストを引いた瞬間、その光は消える。

この記事のサマリ

区分内容
🎯 学べること ① 機械的バックテストの正しい手順=仮説→ルール化→過去データ→コスト込み評価
② 3つの罠=オーバーフィット(過学習)・先読み(look-ahead)・データスヌーピングの正体と見分け方
IS/OOS分割(イン・サンプル/アウト・オブ・サンプル)がなぜ最低限の防壁なのか
gross(コスト前)の優位はほぼ嘘=主役は常に「コスト後に残ったもの」
⑤ 当デスクの1,360セル横断検証の作法(フィデリティ照合・no-lookahead・実コスト+2倍感応・full-period net棄却)
🛠 実技で体験 ① 単純な移動平均クロスを1本だけ過去データで回し、gross→コスト込みで優位性がほぼ消えることを自分の目で確認する
② 同じ戦略をIS/OOSに割り、ISで良くてもOOSで崩れる(または逆)を体験する
✅ 持ち帰り ① 覚える式は1本:net期待値 = gross期待値 − コスト/合否は net+OOS でのみ判定
② 裁量が効かない時の保険(予備)として、体系的検証の型(IS/OOS分割・コスト控除)を手に持つ
③「目視で良さそう」「ISで光った」は仮説であって証拠でないを体に入れる

この章を一言で

機械的バックテストは「過去に勝てたか」を測る道具ではない。「自分が自分を騙していないか」を測る道具だ。 過去データにルールを回すと、ほぼ必ず「光る数字」が出てくる。だがその光の大半は、(1) 過去に合わせ込んだだけ (オーバーフィット)、(2) 未来の情報を覗いていた(先読み)、(3) たくさん試して当たりを拾っただけ (データスヌーピング)——という3つの錯覚で出来ている。そしてコストを引いた瞬間、その光は消える。

本シリーズの本線は裁量マクロ(圧力差レジームを読む)だ。だがその裁量が効かない局面に備え、 システマティックな検証作法を「予備(保険)」として持っておくのがこの章の目的。 この章で覚えるのは、たった一個の式だ。

   net期待値 = gross期待値 − コスト(スプレッド+スワップ+スリッページ)

   そして検証の「合否」は、次の2点を両方満たした時だけ:
       ① net(コスト後)でプラスが残る
       ② OOS(見ていない期間)でも残る
   ── どちらか欠けたら、それは「過去への合わせ込み」

gross(コスト前)の派手な数字は、検証の主役ではない。主役はコスト後に、見ていない期間でも残ったもの。 順に解剖する。

01なぜ裁量主体のデスクが「機械検証」を予備に持つのか

第13章(予測日記)・第14章(意思決定ログ)で見たとおり、本線は裁量マクロだ。圧力差レジームを読み、 織り込みとのズレに賭ける。これは機械では検証しきれない(だから意思決定の質を採点する)。ではなぜ、わざわざ 機械的バックテストを学ぶのか。理由は3つ。

裁量が効かない局面の保険 レジームが読めない・自信が無い時、機械的なルールが「最低限の床」になり得る 自分の裁量ルールを“事後に殴る”道具 「俺の手法は効く気がする」を過去データで冷たく検算し、思い込みを潰す 検証リテラシーそのもの(最大の防御) 人の手法・商材・SNSの“バックテスト”の嘘を見抜く目が身につく
図 15-1 裁量主体のデスクが機械検証を「予備(保険)」に持つ3つの理由。最大の効用は、他人の宣伝の嘘を見抜くリテラシー。
立場機械検証の使い方
本線(裁量マクロ)主役は意思決定ログ。機械検証は補助・反証ツール
予備(システマティック)裁量が止まった時の「床」候補。ただしコスト後OOSで残れば、の話
防御(リテラシー)他人の「勝率90%!」を、罠の3点で即座に疑える
機械検証は「勝つための道具」より先に「騙されないための道具」。自分の思い込みにも、他人の宣伝にも効く。

02正しい手順 ― 仮説→ルール化→過去データ→コスト込み評価

機械的バックテストには「順番」がある。順番を守らないと、後述の罠に必ず落ちる。

検証手順フロー(この順を崩さない) 仮説 効く理由を先に書く ルール化 迷い無く定義 過去データ IS/OOSに分割 コスト込み 実コスト+2倍感応 判定 net+OOSで合否
図 15-2 機械検証の手順は固定。①仮説を先に書くことが、後段の罠(特にデータスヌーピング)を構造的に防ぐ。
手順やることやってはいけないこと(=罠への扉)
① 仮説「効く理由」を先に文章化先に数字を探し、後から理由をでっち上げる
② ルール化完全に機械化(再現可能に)「ここは裁量で」と曖昧さを残す
③ 過去データIS/OOSに分け、OOSを封印全期間でパラメータを最適化する
④ コスト実コストを控除+2倍感応gross(コスト前)のまま判定する
⑤ 判定net+OOSで合否ISのgrossだけ見て「勝てる」と結論

ポイントは、①仮説を先に書くこと。理由のないパターン探しは、次節「データスヌーピング」そのものになる。 「効く理由」を先に固定すれば、試行回数が爆発せず、後付けの言い訳もできなくなる。

033つの罠 ― オーバーフィット・先読み・データスヌーピング

バックテストの数字が嘘をつく経路は、突き詰めると3つに集約される。

罠① オーバーフィット(過学習) 過去の値動きに“合わせ込み”すぎて、未来で外れる 症状: パラメータを細かく刻むほど成績が上がる 例:「移動平均を 23 と 71 にしたら最強」→ 過去のノイズに最適化されただけ 罠② 先読み(look-ahead bias) その時点で“まだ知り得ない情報”を使ってしまう 症状: 妙に綺麗な右肩上がり、現実離れした勝率 例: 当日終値で計算した線を当日中に使う/確定前の高安をピボットに 罠③ データスヌーピング(多重検定) たくさん試して“偶然の当たり”を拾ってしまう 症状: 1000通り試して1番を自慢する 例:「最良の組合せはPF2.2!」→ 1000回くじを引けば大当たりも混じる
図 15-3 数字が嘘をつく経路は3つ。プロは数字の大きさより先に「どの罠を潰したか」を確かめる。

3つの罠は、それぞれ違う「自己欺瞞」だ。

一言でいうと主な対策
① オーバーフィット過去に合わせすぎOOSで検証/パラメータを増やしすぎない/単純さを保つ
② 先読み未来を覗いているno-lookahead処理(後述)/確定足のみ使用
③ データスヌーピング試行回数のごまかし仮説を先に固定/試行回数を記録/多重検定の補正
「過去にこれだけ効いた」は、ほぼ全て、この3つのどれか(または全部)で水増しされている。だからプロは数字の大きさより先に「どの罠を潰したか」を聞く。

罠②をもう一段:先読みは「気づかないうちに」起きる

先読みは悪意がなくても混入する。代表的なのが——

当日の確定前データを使う:まだ確定していない当日の高値/安値/終値を、その日のシグナルに使ってしまう。 未来の確定値で過去を塗る:上位足(HTF)の値を、その足が確定する前のタイミングで参照してしまう。 生存バイアス:途中で消えた通貨・銘柄・期間を除外し、生き残ったものだけで検証する。

対策はシンプルで強力——「その瞬間に本当に手に入った情報だけ」を使う。当デスクの実装(§06)では、 ピボットは前足の確定値、上位足は確定後にのみ参照する。これを「no-lookahead処理」と呼ぶ。

04IS/OOS分割 ― 最低限の防壁

オーバーフィットを潰す最初の一手が、期間を2つに割ることだ。

過去データ全体を2つに割る IS(イン・サンプル) 学習・調整に使う期間 ― ここでルールを組む 約 70% OOS(封印) 最後まで見ない = 本番の判定 約 30%
図 15-4 期間を IS(約70%)と OOS(約30%)に割り、OOS は封印する。実力は「見ていない期間」にしか出ない。
   手順:
   1. ISだけでルール/パラメータを決める
   2. OOSは“一度も見ずに”取っておく
   3. 最後にOOSへ一回だけ適用 → net で残るか判定
   4. OOSを見て調整し直したら、それはもうOOSではない(汚染)

なぜこれが効くのか。ISで作ったルールは、定義上ISに最適化されている(過去に合っているのは当たり前)。 本当に知りたいのは「見ていない期間でも通用するか」。それを測るのがOOSだ。

比較IS(イン・サンプル)OOS(アウト・オブ・サンプル)
役割ルール・パラメータを作る作ったルールを“初見”で試す
数字の信頼度低い(出来すぎて当然)高い(騙しにくい)
よくある誤用ここの好成績を実力と誤認OOSを見て微調整=汚染
当デスクの扱い参考値こちらが本番の判定

第19章(フォワード検証)でさらに踏み込むが、OOSの究極形が「まだ起きていない未来=フォワード」だ。 過去のOOSすら騙される余地があるので、低頻度のスイングは結局「前向きに貯める」しかない(第18章)。

ルールを作った期間の数字は、実力ではない。実力は、見ていない期間に出る。IS/OOSは、その当たり前を強制する仕掛け。

05コスト込み評価 ― gross は嘘をつく

ここが第1章「マイナスサム」と直結する、本章の心臓部だ。gross(コスト前)でプラスでも、コストを引くと 消える戦略がほとんど。

コスト控除で優位が消える(イメージ・数値は例) 0 gross(コスト前) +0.8 pip − コスト 往復0.4pip +α net −0.2 pip 実は負け 高頻度なほどコスト控除の打撃は大きい(第1章「年間失血」と同じ構造)
図 15-5 gross(コスト前)で +0.8pip でも、往復コストを引くと net は −0.2pip。「勝てそう」が「実は負け」に反転する。
評価方法出てくる数字信用してよいか
gross・IS・全期間最適派手(PF2超もザラ)❌ ほぼ嘘。罠の合成物
net(実コスト控除)・IS大幅に縮む△ まだIS。参考
net・OOSさらに縮む/消える✅ ここで残れば本物候補
net・OOS・2倍コストでも残る最も保守的✅✅ 堅牢性が高い

最後の「2倍コスト感応」が、当デスクの作法の肝だ。スプレッドやスリッページは将来広がり得る (指標時・流動性枯渇時)。だから「実コストの2倍を払っても、まだプラスか?」を試す。ここで消える戦略は、 現実の悪条件で確実に死ぬ。

検証の主役は、コスト後に、見ていない期間で、しかも悪条件(2倍コスト)でも残ったもの。gross の大きさを自慢するのは、罠を1つも潰していない証拠。

体験 ― 今すぐ手を動かす

ここから手を動かす。世界一有名な機械戦略「移動平均クロス」を1本だけ回し、gross→コスト込みで 優位性がほぼ消えることを、自分の目で確かめる。

① 戦略の定義(完全機械化)

  戦略: 移動平均(MA)ゴールデン/デッドクロス
  ・短期MA(例:25) が 長期MA(例:75) を上抜け → 翌足始値で買い
  ・短期MA が 長期MA を下抜け → 翌足始値で決済&ドテン売り
  ・シグナルは「確定足」のみ(no-lookahead)
  ・対象: ドル円 日足、期間は IS:OOS = 7:3 に分割

② 結果イメージ表(あなた自身の数字で埋める)

下表は「典型的にこうなる」という形。実際の数字は自分の口座コスト・期間で必ず変わるので、空欄を自分で埋める。

指標gross(コスト前)net(コスト後)net・OOS
取引回数____________
勝率(%)____________
平均損益(pip)____________
PF(総益÷総損)____(しばしば1超)____(1付近へ低下)____(1割れも多い)
期待値(pip/回)____________

多くの場合、grossでは「ちょっと勝てそう」に見え、コストを引いてOOSに出すと、優位性はほぼ消える。 これがMAクロス単体の現実。「単純な機械ルールで楽に勝てる」が幻想である理由を、ここで体で知る。

③ 記入式:自分で確かめるチェックリスト

確認項目あなたの記録
仮説を先に書いたか(後付けでないか)____
シグナルは確定足のみか(先読みしていないか)____
OOSを見て微調整していないか(汚染チェック)____
コストは実額で控除したか____
2倍コストでも残るか____
パラメータを何通り試したか(試行回数の記録)____

試行回数を記録するのが地味に重要。「25/75が良かった」の裏で、何十通り試したかを書けば、 それがデータスヌーピング(罠③)かどうか、自分で判定できる。

06ここでしか ― 当デスクの1,360セル横断検証の作法

「正しい検証はこう組む」を、当デスクの実例で見せる。本線は裁量だが、その裁量を支える特徴量・サインを、 システマティックに1,360通り(セル)横断検証している。その時の作法が、本章の手順をそのまま体現している。

作法1 フィデリティ照合 自前結果を TradingView と照合し、 計算ロジックのズレ(隠れた先読み等)を検出 作法2 no-lookahead 処理 ピボット=前足、上位足=確定後のみ参照 → 罠②(先読み)を構造的に封じる 作法3 実コスト + 2倍感応 実OANDAコストで控除し、さらに2倍でも生存するか → 潜り抜けた gross 優位をここで殺す 作法4 full-period net 棄却 「全期間で一番良いセル」は採用しない → 罠③(スヌーピング)への防御
図 15-6 1,360セル横断検証で罠を潰す4作法。これを通すと、コスト後に残ったのは金・株価指数のトレンドフォローだけだった。
作法潰す罠中身
フィデリティ照合②先読み等の計算バグTradingViewと結果を照合し、自前計算のズレを検出
no-lookahead②先読みピボット=前足、HTF=確定後のみ参照
実コスト+2倍感応(gross水増し全般)実OANDAコスト控除、さらに2倍でも残るか
full-period net棄却③データスヌーピング「全期間で一番良いセル」は選択バイアスとして採らない

そしてこの作法を通した結論が、誠実さの核だ——

1,360セルのうち、gross/イン・サンプルではPF2を超えるセルもあった。だが、実コスト+OOS+2倍コストを通すと、残ったのは「金(ゴールド)と株価指数のトレンドフォロー」だけ。FXの大半は、スプレッドで消えた。

これが「イン・サンプルは嘘をつく」の実教材だ。派手な数字(gross PF2超)を主役にせず、 コスト後に残った僅かなものを主役にする。商業的な手法紹介がこれを書けないのは、買い手を持ち上げないと 売れないから。中立・無料のデスクだからこそ、自己否定(「FXのほとんどは残らなかった」)を出せる。

段階見える数字当デスクの扱い
gross・ISPF2超のセルが複数「嘘の候補」として疑う
+実コスト大半が1付近へ縮むFXの多くがここで脱落
+OOSさらに脱落生存セルが激減
+2倍コスト金・指数トレンドのみ生存これだけを「残った」と認める

アクション ― 次の一歩

MAクロスを「1本だけ」自分で回す。対象=ドル円 日足、最低でも5〜10年分 (出典:Twelve Data/各ブローカーのヒストリカル)。IS:OOS=7:3に分割し、体験節の結果イメージ表を 自分の数字で埋める

設定項目あなたの値
対象ペア・足____(例:ドル円 日足)
データ期間(何年分)____
IS / OOS の分割点____
短期MA / 長期MA____ / ____
控除した実コスト(pip往復)____

コストを「実額」と「2倍」の2通りで控除し、OOSでの net 期待値を比べる。優位性が消えたら、 それは「MAクロス単体では床にならない」という、あなた自身が出した一次結論だ。

デスクの作法を1つだけ自分の検証に移植する。まずは「OOSを見て微調整しない(凍結)」 だけでよい。これが第16章「独立検証→合議の規律」への橋になる。当デスクの1,360セル検証が、 本章の4作法が実際に回っている現場だ。

覚えるのは一個

net期待値 = gross − コスト/合否は net+OOS でのみ判定。そして「ISのgrossで光った数字は、 罠の合成物かもしれない」。これだけ持って次へ。

いまデスクで

この章の4作法(フィデリティ照合・no-lookahead・実コスト+2倍感応・full-period net棄却)が実際に回っている現場が、 当デスクのリサーチだ。1,360セルを横断検証し、gross/イン・サンプルの派手な数字でなく 「コスト後に残った僅かなもの」を主役にしている。派手な数字に騙されない目を、ここで養ってほしい。

→ リサーチ(1,360セル検証)を見る
出典・データ: Twelve Data / TradingView(フィデリティ照合)/ OANDA(実コスト)/ FRED(セントルイス連銀)。 本稿のバックテスト手順・数式(net期待値・IS/OOS)は教育目的の一般論であり、特定の戦略の収益性を保証するものではありません。 本稿は市場の仕組みを学ぶための教育・参考情報であり、特定銘柄の売買や投資助言ではありません。相場には損失リスクがあり、 過去の傾向は将来を保証しません。最終的な判断は読者自身の責任で行ってください。