AI株システムをコード化して分かった「動く」と「勝てる」の違い

AIにコードを書かせて、テストが全部通って、決めた時間に処理が最後まで走る。

そこまでできれば、私は「だいぶ完成に近い」と思っていました。

でも実際にAI株システムを作って検証していくと、途中で大きな勘違いに気づきました。

プログラムが正しく動くこと。

検証に使うデータが正しいこと。

売買ルールそのものに価値があること。

この3つは、まったく別です。

この記事では、私がAI株システムを作る中で「動いた=勝てる」ではないと分かった過程を、実際に起きた修正とDaily Replayの記録をもとに残します。

最初は「コードが動くか」を見ていた

開発を始めたころ、私が一番気にしていたのは単純でした。

エラーが出ないか。

シグナルを計算できるか。

バックテストが最後まで走るか。

自動テストに通るか。

AIにコードを書かせると、ここはかなり速く進みます。

しかし、コードが止まらず動いているからといって、その計算が現実に使える条件になっているとは限りませんでした。

「シグナルが出た足の終値で買う」は使えなかった

実際に見つかった問題の一つが、エントリー価格です。

以前の検証では、シグナルが確定した5分足の終値を、そのままエントリー価格として使う部分がありました。

一見すると自然です。

でも、シグナルはその5分足が完成してから初めて確定します。

つまり「この足でシグナルが出た」と分かった時点で、その足の終値はすでに過去の価格です。

そこで現行のReplayでは、シグナル確定後の「次の5分足の始値」を、最短で監査できるエントリー価格として使うように修正しました。

次の足が同じ取引時間内に存在しなければ、無理に価格を作らず未完了として扱います。

この修正でコードは少し厳しくなりました。

でも、都合のいい価格で入ったことにするより、こちらの方が実際の検証としては大事でした。

次に止まったのは「データの時刻」だった

エントリー条件を直しても、別の問題が出ました。

2026年8月24日のAI株システム確認画面
2026年8月24日にオーナーが実際に撮った確認画面。14:15のシグナル1件が表示されていますが、データ遅延によりRealtime取引の前提が不成立だったと判明したため、本稿の検証成績からは完全に除外・無効化しています。

取引終了後に5分足を取り直して検証するDaily Replayで、想定していた09:00の足が取得データに存在しない日がありました。

最初は、取得時刻を遅らせれば解決する可能性を検討しました。

しかし問題は「待ち時間」だけではありませんでした。

取得された09:05の行が、本当に09:00〜09:05の値動きを表しているのか。

それが独立して証明できていないのに、こちらの都合で09:05を09:00へ読み替えると、未来の情報を過去の時刻に置いてしまう可能性があります。

そこで、09:05を09:00へずらす修正は採用しませんでした。

分からないものは、分からないまま止める。

欠けた足を補間したり、架空の5分足を作ったりもしない。

AI株システムを作っているのに、開発の途中で一番増えたのは「動かさないためのルール」だった気がします。

無理に65本にせず、「64本の別実験」にした

最終的に、元の条件を都合よく修復するのではなく、取得できるデータの意味に合わせて別の実験を作りました。

現在動かしているのは、Realtime Paper Tradeとは別の「64-bar retrospective Daily Paper Replay」です。

固定している条件は次の通りです。

  • 午前:09:05〜11:25の29本
  • 午後:12:30〜15:20の35本
  • 合計:64本
  • シグナル判定開始:09:30
  • エントリー:シグナル確定後の次の5分足Open
  • 欠損・時刻ずらし・補間・架空データ作成:禁止

ここで大事なのは、09:05を09:00と見なしたわけではないことです。

09:05から始まる64本を、そのまま別の実験条件として固定しました。

元のRealtime Paper Tradeは、今も別物として凍結しています。

64本そろって「シグナル0件」だった

この64本の条件で、2026年8月26日のデータを使ったE2E検証を行いました。

結果は、

64 bars
signals = 0
incomplete = 0
workflow = SUCCESS

でした。

「0件なら何も起きていないだけでは?」

最初はそう見えます。

でも、この0件には意味があります。

64本すべての入力がそろったうえで、固定したルールに該当するシグナルが0件だった。

これは「データが足りなくて判定できなかった0件」とは違います。

以前なら、必要な足が欠けていればINVALID / INCOMPLETEとして止めていました。

今回は必要な64本がそろったので、「正常に判定した結果、シグナルがなかった」と記録できます。

システムとしては成功です。

ただし、戦略が勝てることを示したわけではありません。

「動く」「測れる」「勝てる」は3段階だった

ここまで作って、私はAI株システムを3段階に分けて考えるようになりました。

1つ目は「動く」。

コードが壊れていない。

自動テストに通る。

同じ条件なら同じ処理ができる。

2つ目は「測れる」。

その時点で使えたデータだけを使う。

分からない時刻を勝手に直さない。

欠損を0件に見せかけない。

エントリー価格に未来の情報を混ぜない。

3つ目が、ようやく「勝てるか」です。

バックテストやOOS、Daily Replayを重ねた結果として、売買ルールそのものに価値があるのか。

ここは、コードのテストが何百件通っても証明できません。

AIに作らせるほど「止める判断」が重要になった

AIはコードを書くのが速いです。

条件を変えるのも速い。

だから結果が悪かったときに、

この条件を少し変えよう。

この時間だけ除外しよう。

このデータだけ補正しよう。

と修正するのも簡単です。

でも、それを繰り返すほど「過去の結果に合わせただけのシステム」に近づく危険があります。

そこで今は、結果を見てから都合よく条件を変更するのではなく、先に実験条件を固定して記録を積み上げる方を優先しています。

0シグナルの日も残す。

欠損した日は失敗として残す。

分からないデータは止める。

勝てるかどうかを調べる前に、「正しく負けられる、正しく0件を出せる」状態を作る必要がありました。

まだ「勝てる」とは言えない

現時点で、私はこのAI株システムが勝てるとは考えていません。

確認できたのは、64本の5分足を使った別実験を、固定した契約で最後まで検証できるようになったことです。

1日分でシグナルが0件だったことから、戦略の良し悪しを判断することもできません。

ここから複数日の結果を積み上げて、ようやく戦略側の評価材料が増えていきます。

AIに株システムを作らせて分かったのは、「動くプログラム」を作ることより、「その結果を信用していい条件を作ること」の方が難しいということでした。

関連記事

AI株システムを止めた理由。yfinanceの5分足をリアルタイム前提で使ったら、初日の検証が成立しなかった

AI株システムは何を見て「買い候補」を出す?現在の検証戦略を初心者向けに分解

※この記事は、AIを使った株システム開発・検証の個人的な実験記録です。特定銘柄の推奨、投資助言、利益の保証を目的としたものではありません。Daily Replayは取引終了後のデータを使うretrospectiveな検証であり、リアルタイム取引の実績ではありません。

類似投稿