1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに株で勝つ方法を4つ作らせて、全部捨てた話

1
Posted at

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つを聞いて全部答えられる記事に、まだ出会っていない。自分で作ってみて分かったのは、答えられないのが普通だということだった。

儲けは出なかった。ただ、儲からないと自分のデータで言えるようになった。そのために作った装置なので、これで完成ということにしておく。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?