「月1%」が「月0.6%」に。バックテストの数字を26年でならしたら
こんにちは、クロンです。僕はふだんインフラエンジニアの管理職をしていて、その横で、AI(Claude Code)と一緒に日本株のスイングBot(数日〜数週間だけ株を持つ、半自動の売買プログラム)を自作しています。プログラミングもデイトレも素人。いずれ投資で食べていけたらいいな、くらいの温度で始めました。
いきなりですが、きょうの結論から言います。
過去のデータを使った成績テスト(バックテスト)で良い数字が出ても、その数字は「話半分」で見てください。 理由は3つあります。
期間の切り取り方しだいで、数字は簡単に化ける
パラメータをいじって成績を上げる作業は、たいてい「過去に答えを合わせているだけ」
そもそも「勝った銘柄」しか見ていないことが多い
ぜんぶ、僕が自分のBotで実際にやらかした話です。順番に書きます。
そもそも「バックテスト」って?
バックテストは、「もし過去にこの作戦で売り買いしていたら、いくら儲かった(損した)か」を計算することです。
たとえば「短期と長期、2本の移動平均線が交わったところで売り買いする」みたいな作戦を決めて、10年ぶんの株価データに当てはめて成績を出す。プログラムを書けば数秒で「年利◯◯%」「最大でこれだけ下がった」みたいな数字が出ます。
ここで良い数字が出ると、めちゃくちゃ嬉しいんですよ。「これ、いけるんじゃない?」って。いや、この高揚感がいちばん危ない。きょうはその話です。
罠① 期間を切り取ると、数字は化ける
僕の作戦の1つを、景気が良かった時期(アベノミクス以降の上げ相場)だけで測ったら、1ヶ月あたり平均で+1%くらいの成績が出ました。年利にするとふた桁。めちゃめちゃ興奮しましたね。しかもこれ、Claude Codeを触りはじめた初日の話です。「AIと組んだら初日でこれ? 簡単にいけるじゃん!」って本気で思いました。
ところが、同じ作戦・同じパラメータのまま、2000年から2026年までの26年間でならして測り直すと、月+0.6%(年+7%くらい)まで落ちました。
さらに「失われた10年」と呼ばれる停滞期を含めると、月+0.3%、高値からの下落は最大でマイナス34%、9ヶ月連続で負けた時期もありました。
いや、作戦は1文字も変えてないんだよね。変えたのは「どこからどこまでで測るか」だけ。それだけで数字はこれだけ動きます。良い数字を見たら、まず「これ、どの期間で測った数字だっけ?」と自分に聞いてください。
罠② パラメータいじりは「過去に答えを合わせる」作業になりがち
移動平均を何日にするか、みたいな「パラメータ」を少しずつ変えていくと、成績が上がる組み合わせが見つかります。いや、これが楽しいんだよね。数字がどんどん良くなる。気づいたら3時間くらい溶けてました。夢中になってて、ほんとあっという間。
でもこれ、専門用語でカーブフィッティング(過剰最適化)と呼ばれる罠です。過去の相場に作戦を合わせすぎて、株価のただの"ノイズ"(意味のないブレ)までパラメータが覚えてしまい、未来の相場では通用しなくなる現象です(出典:OANDA証券ラボ)。
見分け方はシンプルで、パラメータをちょっと変えたら成績がガクッと落ちるなら、あやしい。逆に、少し変えても成績があまり動かないなら、まだマシです(出典:ぷろぐらむFX)。
僕も総当たりで組み合わせを試しました。景気の良い時期を含む短い期間だと「月0.6〜1.2%」とバラける中に1%超えがちらほら出ます。でも26年通しで総当たりすると、1%に届く組み合わせは1つも無かった。短い期間の"1%"は、実力じゃなく期間の切り取りに助けられていたわけです。
もっと怖い話もあります。本人にその気がなくても、「どの指標を使うか」「どんなルールにするか」を、過去の結果を見ながら選んでいる。その時点でテストはもう汚れている、というんです(出典:holaprime)。いや、耳が痛い。
罠③ 「勝った銘柄」しか見ていない
僕のBotは、対象にしている銘柄が「いまの日本の主力株」ばかりでした。
これ、よく考えると当たり前にズルいんです。いま主力で残っている=過去を勝ち抜いた銘柄なので、そこだけで過去をテストしたら、成績は実際より良く出ます。過去に上場廃止になった会社や、落ちぶれた会社が最初から入っていない。
これを生存者バイアスと言います。「合格者だけに勉強法を聞いて、それを万能だと思う」のと同じ構造です。対策は、上場廃止になった銘柄も含んだデータに差し替えること。僕はまだできていなくて、宿題になっています。
ついでに:手数料を甘く見ていた
もう1つ。売買のたびにかかる手数料と、「思った値段では買えないズレ」(スリッページ)を、最初はざっくりとしか入れていませんでした。
きちんと入れて計算し直したら、売買回数の多い作戦は、10万円くらいの規模だと手数料に食われてマイナスになりました。バックテストの「儲かった額」は、手数料の入れ方ひとつでかなり変わるんだよね。
じゃあ、どう疑えばいい?
僕がいまやっている「疑い方」は3つです。
期間を前半・後半で割る。両方でそこそこ成績が続くか見る。後半だけ極端に悪いなら、前半に合わせただけ。
年ごとの成績を並べる。特定の1〜2年だけで全体を稼いでいないか見る。
パラメータを総当たりする。その1点だけ飛び抜けて強いのか(=もろい)、まわりの組み合わせも同じくらい強いのか(=それなりに頑丈)を見る。
そのうえで、いちばん大事なのは「これからのデータ」で試すこと(フォワードテスト)。過去をいくらいじっても答えを知っているカンニングになるので、今日から先の相場でどうなるかを、時間をかけて記録していくしかありません。
目安として「パラメータ1個につき最低30回は売買が発生していないと、統計的に頼りない」という考え方もあります(出典:fortraders)。3個いじるなら90回。意外とハードルは高いです。
「過去で勝てた」と「これから勝てる」は別モノ
まとめます。
バックテストで良い数字が出たとき、見るべきは数字の大きさじゃなくて、「この数字、どうやって出したっけ?」です。期間を選んでいないか。パラメータを過去に合わせていないか。勝った銘柄だけ見ていないか。手数料を甘くしていないか。
僕はこれで「月1%いける!」から「26年ならすと月0.6%が現実」まで、期待値を下方修正しました。テンションは下がりますが、この修正をやっておかないと、本番でお金を入れてから同じことに気づくことになります。
次回は、この「フォワードテスト」を実際にどう記録しているか、証券口座の開設を待っている今なにをやっているか、を書きます。
※この記事は僕の開発記録です。特定の銘柄や手法をすすめるものではありません。投資は自己判断で。
いいなと思ったら応援しよう!
この記事は noteマネー にピックアップされました

