AIに株で勝つ方法を4つ作らせて、全部捨てた話
「Claude Codeで株の自動売買を作った」という記事をいくつか読んだ。勝率82%、2日で+10%。すごい。ただ、肝心の検証結果は有料部分に隠れていて、証拠として出ているのは1回の売買だけだった。証券会社の取引明細は出てこない。
嘘だと言いたいわけではない。ただ、ああいう記事を10本読んでも、自分が同じことをやって儲かるかは分からない。分からないものを増やしても仕方ないので、逆のものを作ることにした。
その戦略が儲からないことを、お金を出す前に確かめる装置である。
AI(Claude Code)に書かせて、日本株を過去データで試すためのプログラムができた。動作を保証するテストが139本ついている。以下は、その上で「勝てそうな方法」を4つ試して、全部捨てるまでの記録になる。
そもそも「過去データで試す」は簡単に嘘をつく
過去の株価データを使って「この方法なら儲かったはず」を計算することを、バックテストという。ここで一番よくある失敗は、手数料の計算ミスではない。
未来のデータをうっかり覗いてしまうことである。
たとえば「その日の終値を見てから、その日の朝に買ったことにする」。書いてしまえば当たり前におかしいのだが、プログラムが複雑になると、こういう混入は簡単に起きる。しかもタチが悪いことに、未来を覗くと成績が良く出る。だから自分では気づけない。「すごい戦略を見つけた」と思ったまま実際のお金を入れて、そこで初めて気づくことになる。
これは「気をつけて書く」で防げるものではないと思った。なので、戦略に渡すデータそのものを、その日までしか取り出せない形にした。
class History:
"""今日の終値まで確定した状態のデータ。
返す配列は必ず今日までの長さしかなく、書き換えもできない。
明日以降のデータはそもそも存在しないので、覗きようがない。
"""
さらに、1日の中の処理の順番を固定した。朝の寄り付きで前日出した注文を約定させる → 配当を受け取る → その日の終値で資産を評価する → そのあとで戦略に「今日はどうする?」と聞く。戦略が出した注文は翌営業日の朝まで実行されない。この1日のズレが唯一の防波堤なので、絶対に動かさない。
そのうえで、決定的なテストを1本置いた。
あとから未来のデータを追加しても、過去の結果は1円も変わってはならない。
2020年までのデータで計算した結果と、2026年までのデータで計算した結果の「2020年までの部分」が、完全に一致するかを確かめる。もしどこかで未来を覗いていたら、データを足した瞬間に過去の成績が変わるので、必ずバレる。
このテストがあるおかげで、あとから機能を足すときに手が止まらなかった。実際、あとで「その日の終値で売る注文」を追加して1日の処理順をいじったときも、これが通ったことで安心して進められた。
1つ目:移動平均クロス
短期の平均株価が長期の平均株価を上に抜いたら買う、という有名な方法。パラメータ(何日平均を使うか)を24通り試して、一番成績が良かったものを選んだ。
結果は年利14.17%。悪くなさそうに見える。
でもこれは成績ではない。24通り試して一番良かったものを選んだのだから、その数字は「たまたま当たったもの」を選んだ結果になっている。宝くじを24枚買って、一番当たった1枚だけ見せているのと同じだ。
正しくは、その時点までの情報だけでパラメータを決めて、その先の期間で試す。これを期間をずらしながら繰り返す。
24通りから選んだ年利 14.17% ← 自分に都合よく計算した数字
正しく計算した年利 10.46% ← 実際に手に入ったはずの数字
何もしなかった場合 18.43% ← ただ買って持っていただけ
選び方をズルするだけで3.71%も上乗せされる。 そして上乗せしてもなお、何もしない場合に7.97%も負けている。
しかも、期間ごとに「その時点でのベストなパラメータ」を並べてみると、毎回バラバラだった。同じ値が選ばれた割合は21.4%。つまりこの方法に、これが正解と言える設定は存在しない。
2つ目:上がっている株を買う
次は、複数の銘柄を比べて、直近1年で一番上がったものを買う方法。「勢いのある株についていく」という発想で、これも教科書に載っている。
結果は年利9.90%。やはり負けた。
面白かったのは中身のほうで、勝率は75.34%あった。169回売買して、4回に3回は勝っている。それでもトータルで負ける。
理由は、負ける少数の回が大きく負けるから。実際、-18.79%と-15.53%の年が全体を打ち消していた。勝率と儲けは別物、というのは知識としては知っていたけれど、自分のデータで見ると納得の仕方が違う。
一番高かった時点からどれだけ減ったかを見ると、-45.80%。何もしない場合は-31.26%だった。リターンは低くて、減り方は大きい。 一番いらないやつだ。
3つ目:デイトレは、試すことすらできなかった
ここでデイトレを試そうとして、データの壁にぶつかった。
デイトレをちゃんと検証するには、1分ごとの値動きデータが要る。無料で取れる場所があるので取ってみたのだが、中身を検査したら使い物にならなかった。
7203.T(トヨタ)
日付 本数 開始 終了 出来高の欠け 朝の値のズレ 終わりの値のズレ
2026-08-05 321 09:05 15:24 31.8% -0.55% 0.12%
2026-08-12 321 09:05 15:24 42.0% -0.13% -0.23%
2026-08-14 321 09:05 15:24 34.1% 0.13% 0.13%
東京証券取引所は9時から15時半まで開いているのに、データは9時5分から15時24分までしかない。取引が一番多い朝一と大引けが、まるごと抜けている。 その結果、その日に取引された株数の13.8%〜42.0%がデータから消えていた。
一番効くのは右の2列で、1分足から計算した「その日の始値・終値」が、正しい値と最大0.55%ずれている。デイトレで売り買いする値段そのものが違うということになる。
このズレがどれくらい致命的かというと、あとで測るのだが、狙っているもうけ幅は1週間で0.08%程度しかない。誤差のほうが10倍大きい。 この上で何を計算しても、測っているのは誤差である。
それでも1つだけ、日足のデータで表現できるデイトレがある。「前日に大きく下げた株を、翌朝の寄り付きで買って、その日の終値で売る」だ。これは朝の値段と終わりの値段しか使わないので検証できる。プログラムに「終値で売る注文」を追加して試した。
結果は年利-4.38%。300万円が164万円に減る。
一応、コストを変えて何度か試した。売買のたびに引かれるコストをゼロにすると、どうなるか。
| 売買コスト | 年利 |
|---|---|
| ゼロ(現実にはありえない) | +0.85% |
| 少なめ | -0.24% |
| 標準的な想定 | -1.67% |
| 多め | -4.39% |
手数料もコストも一切ないという不可能な条件で、ようやく+0.85%。 コストに食われて負けているのではなく、もうけの種そのものが存在しない。
ちゃんとした1分足データは有料で買える(月7,150円)。ただし過去2年分しか手に入らない。2年のデータで「この戦略は本物だ」と言い切るには、かなり優秀な成績が必要になる。目安は計算できて、2年分だと「何もしない場合の約2倍の効率」がないと、運と区別がつかない。それが分かった時点で買うのをやめた。
寄り道:「10万円を1週間でいくらにできる?」
途中で、この質問を測ってみた。この手の問いに「○円になります」と答えるのは無理なので、過去に実際どうだったかの散らばりを出すことにした。
まず10万円だと、そもそも買えるものがない。日本株は100株単位でしか買えないので、株価1,000円の会社を買うのに10万円かかる。試している10銘柄のうち9銘柄は買えなかった。買えた1銘柄も1単元16,270円なので、残りの83,730円は現金のまま置いておくことになる。戦略以前の問題だ。
その1銘柄を1週間持った場合の、2010年以降の全4,079パターンがこれ。
| 真ん中の結果 | -0.06% |
| 勝った割合 | 49.0%(コイン投げ) |
| 9割はこの範囲に入る | -4.35% 〜 +4.53% |
| 一番ひどかった1週間 | -16.09% |
平均するとわずかにプラスなのだが、そのプラスが「たまたま」ではないと言い切るには、2,544年分のデータが必要だった。1週間の結果は、増えても減っても運である。
100万円に増やすと少しマシになる。3銘柄に分けられて(それでも31%は現金のまま)、真ん中の結果は+800円、9割が-37,800円〜+40,500円に収まる。運と区別するのに必要な年数は124年に縮む。それでも人生より長い。
持つ期間を変えると数字が動くのが面白かった。1週間なら2,544年、1ヶ月なら23年、1年なら11年。増やしたいなら、期間を短くするより長くするほうが理屈に合っている。
4つ目:銘柄を224に増やしたら、初めて勝った
3つとも負けた原因は、方法ではなく選べる銘柄が少なすぎることかもしれないと思った。10銘柄しかないと、その中で「一番上がっているもの」を選ぶことに意味が出にくい。
そこで銘柄を224に増やした。日経平均に入っている会社を全部持ってきて、データがおかしいものを検査で弾く。ここで面白いものが引っかかった。
日本航空(9201)2012年9月19日 1円 → 1,915円
2010年の経営破綻、上場廃止、2012年の再上場が、1本の株価データとしてつながっていた。「1日でこんなに動くのは制度上ありえない」という検査に引っかかって弾かれた。
224銘柄で計算し直すと、ついに勝った。年利17.77%。何もしない場合が11.71%、日経平均が14.30%。3,000万円が2億7,507万円になる計算になる。
ここで喜ばずに、3つ確かめた。
確認1:もうけ方が効率的か。
年利だけ見ても意味がない。値動きの荒さ(=どれだけヒヤヒヤするか)で割って比べる。
| 年利 | 値動きの荒さ | 効率(年利÷荒さ) | |
|---|---|---|---|
| 224銘柄の戦略 | 17.77% | 27.25% | 0.73 |
| ただ買って持つ | 11.71% | 14.64% | 0.83 |
荒さを倍近く引き受けて、もうけを1.5倍にしただけだった。 効率ではむしろ負けている。同じことは、お金を借りて日経平均を買っても実現できる。つまりこれは腕ではない。
確認2:たまたまの1回に頼っていないか。
14回に分けて検証したうち、2025年4月からの1年だけが**+103.93%だった。この1回を除いて計算し直すと、資産が9.17倍から4.50倍**に落ちる。何もしなかった場合が4.48倍なので、ほぼぴったり同じになる。
13年半のうち、日経平均を上回った分は、ほぼ全部が直近1年の当たり1回だった。
確認3:そもそも銘柄の選び方は公平か。
使ったのは「2026年4月時点で日経平均に入っている会社」である。つまり、過去に伸びて今も生き残っている会社しか入っていない。倒産した会社も、消えた会社も最初からいない。
「上がっている株を買う」という戦略にとって、これは決定的に有利な条件だ。破綻した日本航空は、検査で弾かれる以前に、そもそも224社のリストに載っていない。
3つとも引っかかったので、この17.77%は保留にした。銘柄の選び方を公平に直すまで、成績として扱わないことにしている。
AIに戦略を考えさせること自体の落とし穴
作りながら気づいたことで、これは書いておく価値があると思う。
さんざん「未来を覗かない」仕組みを作ったが、あれが保証しているのは「プログラムが動くときに未来のデータを読まない」ことだけである。「戦略を考えた人(AI)が未来を知らない」ことは、まったく保証していない。
使ったデータは16.6年分で、そのうち約16.4年はAIの学習期間に含まれている。「この期間の日本株では、この手法は効かなかった」と知っている状態で戦略を選べば、それは結果を見てから答えを書いているのと同じだ。そして私が書いたどのテストでも、それは検出できない。
これは研究でも指摘されている。AIを使った投資エージェントの好成績は、実は過去の株価を記憶していることによるもので、記憶を使えない条件にすると「ただ買って持つ」に勝てなくなる、という論文がある(Profit Mirage)。GPT-4oは学習期間中のアメリカ株の終値を、誤差1%未満で言い当てられるらしい。
対策として決めたのは2つ。誰でも知っている古典的な手法から試すこと。そして、AIが提案した戦略が good な成績を出したときこそ疑うこと。今回4つとも負けたのは、その意味ではむしろ健全な結果だった。
身も蓋もない結論
4つ試して0勝だった。しかも相手が強い。何もせずただ買って持っていた場合が、同じ期間で年11.7%〜18.4%出ている。2013年以降の日本株は歴史的に強い時期で、何もしない人が一番強かった。
日経平均をどれだけ上回れたかで並べると、こうなる。
| 戦略 | 日経平均を上回った分 |
|---|---|
| 移動平均クロス | -1.83% |
| 上がっている株を買う(10銘柄) | -2.38% |
| デイトレ | 論外 |
| 上がっている株を買う(224銘柄) | +3.47%(ただし効率では負け) |
上回った分がゼロなら、資金をいくら増やしても意味がない。1億円運用しても、日経平均と同じ成績なら、上回った分は0円である。「大きく稼ぐ」以前に、そもそも上回れていない。
では作った意味がなかったかというと、そうは思っていない。この装置が生んだのは利益ではなく、張らずに済んだ損だ。
デイトレの戦略を300万円でそのまま運用していたら、実際の損が13万円、それに加えて「日経平均を買っていれば得られたはずの43万円」を逃すことになる。合わせて年56万円のマイナス。これを、1円も使う前に潰せた。
もう1つ、年利17.77%という「勝ったように見えるもの」を3つの確認で潰せたのも大きい。あれを信じて実際のお金を入れていたら、最大で資産が半分近くまで減るリスクを引き受けて、日経平均と同じかそれ以下のリターンを取りに行っていたことになる。
5つ目はやらない
まだ試していない道はある。決算書類が公表日時つきで手に入る金融庁のEDINETとか、1分ごとのデータを月7,150円で買うとか。株価と出来高だけで勝てないのは、考えてみれば当然で、誰でも無料で手に入るデータだからだ。他の情報を足せば違う結果になるかもしれない。
それでもやめることにした。
理由は単純で、4つ試して0勝という結果は、5つ目で急に変わるものではないからだ。そして相手が強すぎる。何もしないだけで年11.7%〜18.4%出ている相手に、探す手間とリスクを足して勝ちに行く。上回った分がゼロなら、資金をいくら積んでも1円にもならない。かけた時間はなおさら戻ってこない。
これは「株はダメだ」という話ではない。何もせず持っていた人が一番強かったという話である。自分のデータがそう言っているのに、それを無視して探し続けるのは、この装置を作った意味がない。
ただ、得たものはあった。人の書いた「この手法で勝てます」を読んだときに、何を聞けばいいかが分かるようになった。
- 同じ期間、ただ買って持っていたらいくらだったのか
- 値動きの荒さで割っても勝っているのか
- 成績の大半が、たまたま当たった1回に乗っていないか
- 銘柄はどう選んだのか。今生き残っている会社だけを見ていないか
- パラメータは、その時点の情報だけで決められたのか
この5つを聞いて全部答えられる記事に、まだ出会っていない。自分で作ってみて分かったのは、答えられないのが普通だということだった。
儲けは出なかった。ただ、儲からないと自分のデータで言えるようになった。そのために作った装置なので、これで完成ということにしておく。