投資を、組んで確かめる
開発記録

Claude Code でバックテストするとき、答えを先に見ないためにやっていること

この記事で分かること

  • バックテストで「答えを先に見てしまう」と何がまずいのか
  • データを分ける、実行を全部記録する、候補を先にコミットする、の3つを Claude Code でどう回しているか

分からないこと

  • これで過去のデータへの合わせすぎを完全に防げるか。防げるのは、自分で気づける範囲の見すぎだけです
目次
  1. なぜ必要か
  2. 確かめる用のデータを分けて、ルールに書く
  3. 実行を全部記録する
  4. 分けられないときは、候補を先にコミットする
  5. それでも一度、答えを先に見た
  6. まねするなら

僕は FX と長期投資の検証を Claude Code と一緒にやっています。そのときに決めているのは3つです。確かめる用のデータを分けておくこと、実行を全部記録すること、比べる候補を結果を見る前にコミットすること。それでも一度、答えを先に見てしまいました。

なぜ必要か

バックテストは、過去のデータで売買ルールを試すことです。結果を見てから「損切りをもう少し広く」「移動平均を30本に」と設定を変えていくと、成績はだんだん良くなります。でもそれは、そのデータの値動きにルールを合わせただけのことが多いです。別の期間で動かすと、たいてい崩れます。

AI に頼むと、これが簡単に起きます。「もっと成績が良くなる設定を探して」と一言書けば、Claude Code は何十通りも試して、いちばん良いものを持ってきてくれます。頼んだとおりの仕事ですが、その結果はほとんど当てになりません。

なので、AI が気を利かせても越えられない線を、先に決めておくことにしました。

確かめる用のデータを分けて、ルールに書く

FX の検証では、ドル円の1時間足を2025年7月1日で前後に分けています。前半はルールを選んだり設定を決めたりする用、後半は最後に確かめるだけの用です。

この決まりは、Claude Code が毎回読む CLAUDE.md に書いています。

- パラメータの調整は前半データ(--part train)だけで行う。後半データ(--part test)は検証専用で、その結果を見て調整し直さない
- 後半データでの検証は、パラメータを確定したときだけ行う

コマンドの側では、何も指定しなければ前半だけで動くようにしています。後半を使うときは、わざわざ --part test と打つことになります。

実行を全部記録する

分けただけでは、まだ抜け道があります。後半で試して、だめなら設定を変えて、また後半で試せてしまうからです。それを防ぐのが試行の記録です。

バックテストを1回動かすたびに、trials.csv というファイルに1行追記されます。いつ、どの戦略を、どの区間で、どの設定で動かして、成績はどうだったか。このファイルは git で管理しているので、あとから行を消せば履歴に残ります。

たとえば FX の記録には、こういう行が並んでいます(列を減らしています)。

実行日時 区間 戦略 総損益 メモ
2026-11-10 19:20 前半 RSI 逆張り −8,503円 RSI逆張り 初期設定(14, 30/70)
2026-11-10 19:25 前半 RSI 順張り −6,311円 RSI逆張りの結果を見てから立てた仮説。パラメータ調整なし
2026-11-10 19:25 後半 RSI 順張り −6,770円 後半データでの初回検証

後半だけで動かした実行は、今のところこの1回です(後半を含む全期間で動かした1回は、このあと書きます)。何回後半を見たかを、自分の記憶ではなく記録で数えられます。

メモの欄には、その実行がどういう立場のものかも書いています。たとえば「結果を見てから立てた仮説」です。前半の結果を見て思いついたルールは、前半で良く見えても当てになりません。それを未来の自分が読んで分かるようにしておくためです。

分けられないときは、候補を先にコミットする

長期投資の検証では、データを前後に分けられませんでした。10〜20年の積立を試したいのに、使えるデータは30年ほどしかありません。半分に分けると、確かめる用の期間がほとんど残りません。

そこで、別のやり方にしました。比べる候補と設定を、結果を見る前に CLAUDE.md に書いて、コミットしておきます。

  • 候補: 積立か一括か、株と債券の配分、リバランスのしかたの組み合わせで24通り
  • 設定: 積立額、コスト、税の扱い
  • 判断のしかた: 税引後の倍率の中央値と最悪値を見る

git のコミットには時刻が残ります。積立の検証では、候補を登録したコミットが 2026-11-12 02:48、最初の実行の記録が 03:01 でした。結果より先に候補を決めていたことが、あとから確かめられます。

結果を見たあとで候補を足したくなることもあります。取り崩しの検証では、最初の結果を見てから、NISA の扱いを実際の制度に近づけた計算を足しました。このときは、元の結果を消さずに並べて、足した方には「あとから追加」と明記しています。

それでも一度、答えを先に見た

ここまでの仕組みは、最初からあったわけではありません。

FX の検証を始めた日、試行の記録を作る前に、移動平均のクロスを後半も含む全期間で動かしていました。結果は −7,026円です。

なので移動平均のクロスについては、後半のデータを「まだ見ていないデータ」としては使えません。この実行も、あとから trials.csv に「後半データを含む全期間を一度見てしまった記録」として書き足しました。結果はドル円の3つの売買ルールを試した記事にまとめています。

まねするなら

自分の検証で同じことをするなら、CLAUDE.md にこのくらい書いておけば始められると思います。

- パラメータの調整は前半データだけで行う。後半データは検証専用で、その結果を見て調整し直さない
- バックテストを実行するたびに、条件と結果を trials.csv に1行追記する
- データを分けられない検証では、比べる候補と設定を、結果を見る前に書いてコミットする
- 結果を見たあとで足した候補には「あとから追加」と明記する

僕は、この仕組みを作る前に一度見てしまいました。なので、最初のバックテストを動かす前に書いておくのがいちばん効きます。