この記事は投資の助言ではありません

過去のデータをどう測ったらどう出たかという記録です。お金の扱い方を勧めるものではありません。数値はすべて2026年9月時点の実測で、将来を予測するものでもありません。

きっかけは「寝ている間に稼ぐ」という投稿

SNSに、こんな趣旨の投稿がありました。クラウドに置いたAIが、本人が寝ている間に自動で売買を回している。危ない銘柄はフィルターで捨て、勢いのあるものだけ拾う。設定にかかったのは一晩。維持するものは何もない。

この文章を疑う手がかりは、実は本文の中にあります。まず、成績を確認できる情報が一つも書かれていません。取引記録が公開されている仕組みなら、その所在を一行書くだけで誰でも検証できるのに、それをせず「管理画面のスクリーンショット」という検証できない形の話をしています。そして文末が「フォローと通知オン」で終わります。売られているのは仕組みそのものではなく、仕組みで儲かるという話のほうだと考えると、文章の作りが自然に説明できます。

ただし「怪しい」で終わらせては何も分かりません。実際に儲かるかどうかは、データで確かめられます。

確かめ方を、結果を見る前に決める

検証で最初にやるべきなのは、計算ではなく確かめ方を決めることです。結果を見てから条件を変えると、都合のよい数字が必ず作れてしまいます。今回は次の4つを、データを見る前に決めました。

  • 比較対象を必ず置く。「この条件で買ったら平均で利益が出た」だけでは意味がありません。市場が上がっていれば、どの日に買っても利益は出るからです。全営業日を無条件で買った場合を並べ、その差だけを条件の効果とみなします。
  • 費用を先に引く。手数料と、注文が思った値段からずれるぶん(スリッページ)を合わせて往復0.3%として、必ず引いた後の数字で判断します。
  • 未来を見ない。判断に使ってよいのはその日の終値までで、売買が成立するのは翌営業日の始値とします。当日の終値を見てから当日の終値で買えるようにしてしまうと、成績はいくらでも良くなります。
  • 対象を人が選ばない。東証の4桁コードを無作為に叩いて、返ってきた150社をそのまま対象にします。有名企業を人間が選ぶと、その時点で結果が歪みます。

この4つ目が、後で効いてきます。最初の検証では、AIが自分で「トヨタ、ソニー、NTT、レーザーテック、楽天、三菱UFJ」の6社を選んでいました。その結果がどうなったかは後で書きます。

短くするほど不利になる

まず「どんな条件で買うと利益が出やすいか」を、無作為抽出した150社の10年分(1社あたり2,464営業日)で総当たりに調べました。最も効いたのは前日比3%以上の急落を買うという条件で、20営業日持った場合、無条件で買った場合を0.79ポイント上回りました。逆に20日高値の更新を買うのは、どの保有期間でも無条件を下回りました。高値を追いかけるのは分が悪い、という結果です。

問題はここからです。この「急落を買う」条件の優位性を、保有期間ごとに年率へ引き直し、その期間で1年間回し続けた場合の費用と並べました。

保有期間ごとの、優位性の年率と売買コストの年率
保有期間 年間の売買回数 優位性の年率 コストの年率 差引
1日245回+16.4%-73.5%-57.1%
3日82回+11.1%-24.5%-13.4%
5日49回+12.4%-14.7%-2.3%
10日25回+11.7%-7.3%+4.4%
20日12回+9.7%-3.7%+6.0%
60日4回+5.0%-1.2%+3.8%

注目してほしいのは「優位性の年率」の列がほとんど変わらないことです。1日でも60日でも、年率にすればおおむね10%前後で並んでいます。変わるのはコストの列だけで、こちらは売買回数に正比例して増えます。差引がプラスに転じるのは10日で、損益分岐は5日と10日の間にありました。

つまり「短期のほうが読みにくいから難しい」のではありません。短くしても取り分は増えないのに、支払いだけが回数ぶん増えるという構造です。そして支払った手数料や値幅は消えてなくなるのではなく、その反対側にいる誰かの収入になります。売買を速くするほど、その相手に渡す回数が増えるという関係です。

利益が出ていたのは、取引できない時間帯だった

次に、株価の動きを2つに分けました。夜(前日の終値から当日の始値まで)と、日中(当日の始値から終値まで)です。日中は、市場が開いていて実際に売買できる時間帯にあたります。

夜と日中に分けたときの、10年間の値動きの比較
区分 10年の複利(中央値) 1日平均 効率(シャープ比)
夜(持ち越し)+355%+7.9bp0.83
日中(売買できる時間)-53%-1.9bp-0.15
合計(持ちっぱなし)+111%+5.8bp0.38

10年ぶんの上昇は、ほぼすべて夜のあいだに起きていました。日中だけを取り出すと、費用を無視してすら中央値でマイナスです。日中に売買を繰り返す方法は、追い風の吹いていない時間帯で勝負しながら、毎日往復の費用を払うことになります。1日あたりで見ると、-1.9bpの傾きに対して費用が30bpです。

5分ごとの値動きも調べました。1日の値動きを100とすると、最初の5分で17%、最初の30分で43%が終わっています。そして5分間に動く幅は中央値で0.11%です。往復0.3%の費用を上回るには、5分足で3本ぶん続けて方向を当て続ける必要があります。

ニュースは、読めたときにはもう終わっている

「AIにニュース検索を許可したら勝てるのでは」という疑問も検証できます。決算などの材料は市場が閉じているあいだに出て、翌日の始値の跳ね(ギャップ)として価格に入ります。検索して読めるのは、早くても市場が開いた後です。問題は「ニュースを知っているか」ではなく、「価格に入った後にまだ取り分が残っているか」です。

始値の跳ねの大きさ別に見た、その後の値動き
始値の跳ね 件数 跳ねの平均 始値→終値 始値→20日後
好材料(+5%超)2,456+9.22%-1.16%+1.47%
材料なし(±1%以内)264,639+0.03%-0.01%+1.02%
悪材料(-5%超)1,940-7.94%+0.35%+3.20%

好材料が出た日は始値までに平均+9.22%動き切り、そこから終値までは-1.16%と、むしろ戻しています。ニュースを見つけて買いに行っても、値動きはもう終わっています。逆に、悪材料で大きく売られた銘柄のほうが、20日後までで+3.20%と伸びていました。検索が役に立つとすれば「良い知らせに乗る」側ではなく「悪い知らせで投げ売られたものを拾う」側で、しかも短期ではありません。

もう一つ、数字にならないリスクがあります。株の話題を検索すると、上位に来るのは読んだ人に買わせたい人が書いた文章です。読んだ内容をそのまま根拠に発注させる設計は、外部の書き手に注文ボタンを渡すのと同じ形になります。

AIは自分の数字を4回訂正した

ここがこの記事でいちばん大事な部分です。上の数字は一度で出たものではありません。AIは検証の途中で、自分が出した数字を4回訂正しています。どれも、指摘されて直したのではなく、確かめ方を厳しくしていく過程で自分の誤りが露出したものです。

1. 対象を自分で選んでいた(選択バイアス)

最初の検証で、AIは有名な6社を自分で選びました。その結果「急落を買う条件は11年中11年でプラス、頑健」と報告しています。対象を無作為抽出の150社に入れ替えて測り直したところ、優位性は半分以下になり、プラスだったのは11年中8年でした。10年の成績も、選んだ6社が+510%だったのに対し、無作為150社は+111%です。人が選んだ時点で、結果は倍近く良く見えていました。

2. 集計期間がずれていた(自分のプログラムの不具合)

「分散する銘柄数を増やすほど年率が上がる」という表を出しました。しかし150社がそろうのは途中の年からで、銘柄数を増やすほど集計期間が短く新しい側に寄る作りになっていました。全期間そろう129社に限定して測り直すと、年率はほぼ横ばいで、上がって見えていたのは不具合による見せかけでした。

3. 片側だけ都合よく処理していた(不公平な比較)

「大当たりに依存した成績ではないか」を調べるとき、条件に当てはまった側からだけ上位10%を除いて比較していました。これでは比較になりません。両側から同じ割合を除く形に直してから、あらためて判断し直しています。

4. 売買単位を100倍間違えた

分散に必要な金額を計算したとき、対象に混ざっていた4件の不動産投資信託を、普通株と同じ100株単位として計算していました。これらは1口単位で売買します。結果、必要額を24億円という現実離れした値で出しています。指摘を受ける前に数字の不自然さから気づき、判定方法を直しました。

この4件は失敗談としてではなく、検証の一部として読んでほしい部分です。もっともらしい数字が出た時点で止めていれば、4回とも間違ったまま公開されていました。止めなかったから直せた、というだけの話です。検証結果を読むときは、「この人はどこで自分を疑ったか」を探すと、信頼していい範囲が見えます。

なお、この記事の数字にも偏りが残っています。検証した10年が上昇局面だったこと、株価データの取得先が今も上場している会社しか返さないため倒産・上場廃止で消えた会社が最初から対象に入っていないこと(生存バイアス)、扱ったのが日本株だけであること。いずれも、結果を実際より良く見せる方向に働きます。

AIは、自分が出した結論で負けている

検証と並行して、AIに実際の売買判断をやらせました。ただし普通にやらせても意味がありません。AIは過去の相場をある程度は知っているため、銘柄名と日付が見えていると、判断力を測っているのか記憶を測っているのか区別がつかないからです。

そこで、銘柄名も日付も伏せ、株価を「初日を100とした指数」に変換して渡しました。AIは自分が何をいつ売買しているのか分からないまま、その時点までの値動きだけで判断します。正解は別のファイルに分けて置き、終わるまで開きません。この方法を盲検といいます。

48回の判断で最後まで走らせた結果です。比較のため、同じ期間に「初日に買って持ち続けた場合」と、「同じ判断機会でコインを投げた場合(乱数の種を変えて200回)」を並べています。

盲検テストの結果。AIとバイ&ホールドとランダムの比較
判断のしかた 最終資産 損益率
AI372,157円-25.57%
初日に買って持ち続ける366,039円-26.79%
コイン投げ(200回の中央値)435,279円-12.94%
コイン投げ(下位10%)348,219円-30.36%

持ち続けた場合は1.2ポイントだけ上回りましたが、支払った手数料が1,331円なので、この差は誤差です。はっきり負けたのはコイン投げに対してで、12.6ポイントの差がつきました。売買を決済したのは3回で、勝ちは0回。資産が最も減った時点で-44.9%でした。

答え合わせをすると、対象は2017年5月から2018年11月の、ある1銘柄でした。株価は指数にすると100から74.8まで下げ、途中では55.8まで落ちています。つまり下落局面です。

ここに、この記事でいちばん痛い失敗があります。コイン投げが勝った理由は、半分の確率で現金に戻っていたからです。下げ相場では、市場から離れている時間が長いほど有利になります。一方AIは「現金で待つな」という自分の結論を守り続けました。その結論は上げ相場だった10年間から導いたもので、下げ相場に当てはめる根拠はどこにもありません。

しかもAIは、自分の検証結果に「この10年は上昇局面だった。下げ相場では逆転しうる」と書いていました。自分で書いた注意書きを、自分で踏んでいます。途中で「以後は損切りを一切しない」と方針を固定し、そこから30回ぶんは機械的に保有を続けました。その方針を決めた根拠が、目の前の相場に当てはまらないものだった、という失敗です。

検証で「短期売買は不利」という結論を出せることと、実際に売買してうまくやれることは、別の能力です。分析ができることと、運用がうまいことは違います。そして、正しい検証結果を持っていても、それが成り立つ条件を確かめずに当てはめれば、持っていないのと同じか、それより悪くなります。

偶然だったのか、500件で確かめる

1案件48回の判断では「たまたま負けただけ」の可能性が消せません。そこでAIが宣言した方針をそのままプログラムにして、無作為に選んだ500の期間(129社から1社ずつ、各400営業日=約1年半)で回しました。測っているのはその場の判断力ではなく、方針そのものの成績です。

500件の期間で方針を比べた結果を、相場の向きで分けたもの
方針 上げ相場(268件) 下げ相場(232件) 在庫率
買って持ち続ける+19.4%-12.3%100%
AIの最終方針(損切りなし)+17.7%-12.1%96%
AIの初期方針(損切りあり)+17.8%-14.6%94%
コイン投げ+6.6%-8.4%44%
何もしない(現金のまま)0.0%0.0%0%
コイン投げが「持ち続ける」に勝った割合4%73%

相場の向きで、全部が反転します。上げ相場では市場に居ることが正しく、コイン投げは4%しか勝てません。下げ相場では離れていることが正しく、コイン投げが73%、何もしない場合に至っては87%の確率で「持ち続ける」に勝ちます。

つまり盲検で負けたのは不運ではありませんでした。あの期間は下げ相場で、下げ相場ならコイン投げが73%勝ちます。起きたのは典型例です。乱数の種を変えても73〜79%で安定していました。

もう一つ、はっきりした結果があります。損切りをする方針は、成績を下げたうえに、ドローダウンを浅くもしませんでした。500件のうち「持ち続ける」に勝てたのは32%だけで、資産が最も減る幅の中央値も-27.3%と、持ち続けた場合(-26.9%)より悪くなっています。安値で売って高値で買い直す往復が積み上がるためです。損切りをやめた最終方針のほうは勝率50%、つまりコイン投げと区別がつきません。方針としての価値はありませんでした。

結局、成績を決めていたのは「どれだけ市場に居たか」と「相場がどちらを向いていたか」の掛け算だけでした。そして相場の向きは事前には分かりません。だから「常に市場に居ろ」も「下がったら逃げろ」も、単独では方針になりません。分散が効くのは、この当てられない部分を減らすからです。

同じテストは配布しているツールで誰でも回せます。1案件を手で判断するのが tools/blind.mjs、方針を固定して多数回まわすのが tools/policystudy.mjs です。

能力の問題ではなく、構造の問題

ここまでを整理すると、AIだけで確実に儲ける自動売買の仕組みが現時点で作れない理由は、AIの賢さとは別のところにあります。

  • 費用が取引回数に比例する。取り分は短くしても増えないのに、支払いだけが増えます。1日単位で回すと年73.5%ぶんの費用がかかる計算になります。
  • 追い風が吹いているのは、売買できない時間帯。10年の上昇はほぼ夜のあいだに起きていて、日中だけを取り出すとマイナスでした。
  • 情報は、読めるようになった時点で価格に入っている。好材料は始値までに動き切り、その後はむしろ戻します。
  • 速さの勝負には、すでに機械がいる。1日の値動きの43%は最初の30分で終わります。検索して読んで考える方式は、この土俵に乗れません。

どれも「AIの判断が甘い」ことが原因ではありません。市場という仕組みが、そもそもそういう形をしているということです。だから性能が上がっても、この4つは同じように残ります。

そして、この検証でAIが果たした役割は「勝つ方法を見つけること」ではありませんでした。儲かるという話を、儲からないという数字で否定し、その過程で自分の誤りを4回さらし、最後に自分の結論で負けたことまで記録に残したことです。都合のいい結果だけを出してこないという性質は、一緒に何かを調べる相手として、いちばん大事な部分だと思います。

最初のSNS投稿に戻ると、あの文章が売っていたのは仕組みではなく話でした。同じことは、この記事にも当てはまります。ここに書いた数字も、読んだだけでは検証されていません。だから最後に、確かめる手段のほうを置いておきます。

自分の手元で確かめる

検証に使ったプログラムを公開しています。GitHubでコードを読むか、zipでまとめてダウンロード(約86KB)。Node.js 22以降があれば、追加のインストールなしで動きます。株価は無料で公開されているデータを取得するので、有料の情報源もAPIキーも要りません。

このプログラムは実際のお金を1円も動かしません。証券会社にも取引所にも接続せず、書き換えるのは手元のファイルだけです。同梱の README.md に動かし方、FINDINGS.md にこの記事の全数値と、記事に載せきれなかった検証(空売り、配当、必要資金の逆算)が入っています。

  • tools/universe.mjs — 東証の4桁コードを無作為に叩いて対象を集める
  • tools/eventstudy.mjs — 条件ごと・保有期間ごとの成績を、無条件の場合と並べる
  • tools/turnover.mjs — 優位性の年率と、売買回数ぶんの費用を突き合わせる
  • tools/daynight.mjs — 値動きを夜と日中に分ける
  • tools/newsgap.mjs — 始値の跳ねの大きさ別に、その後の値動きを見る
  • tools/robust.mjs — 年別・銘柄別に分解して、結果が特定の年に依存していないか調べる
  • tools/blind.mjs — 銘柄名と日付を伏せた盲検テストを1件つくって手で判断する
  • tools/policystudy.mjs — 方針を固定して、無作為な期間で何百回も回す

試してほしいのは、記事と同じ数字が出るかの確認より、条件を変えたら結論が変わるかのほうです。対象を100社にしたら、費用を0.1%にしたら、期間を5年に区切ったら、どこで結論がひっくり返るか。ひっくり返る条件が見つかれば、それは記事の弱点です。見つからなければ、そのぶん結論は確からしくなります。

検証というのは、正しい答えを出す作業ではなく、自分の主張が壊れる条件を先に探しておく作業です。この記事で紹介した4つの訂正は、全部そうやって出てきました。