AI株システムをコード化して分かった「動く」と「勝てる」の違い
AIにコードを書かせて、テストが全部通って、決めた時間に処理が最後まで走る。
そこまでできれば、私は「だいぶ完成に近い」と思っていました。
でも実際にAI株システムを作って検証していくと、途中で大きな勘違いに気づきました。
プログラムが正しく動くこと。
検証に使うデータが正しいこと。
売買ルールそのものに価値があること。
この3つは、まったく別です。
この記事では、私がAI株システムを作る中で「動いた=勝てる」ではないと分かった過程を、実際に起きた修正とDaily Replayの記録をもとに残します。
最初は「コードが動くか」を見ていた
開発を始めたころ、私が一番気にしていたのは単純でした。
エラーが出ないか。
シグナルを計算できるか。
バックテストが最後まで走るか。
自動テストに通るか。
AIにコードを書かせると、ここはかなり速く進みます。
しかし、コードが止まらず動いているからといって、その計算が現実に使える条件になっているとは限りませんでした。
「シグナルが出た足の終値で買う」は使えなかった
実際に見つかった問題の一つが、エントリー価格です。
以前の検証では、シグナルが確定した5分足の終値を、そのままエントリー価格として使う部分がありました。
一見すると自然です。
でも、シグナルはその5分足が完成してから初めて確定します。
つまり「この足でシグナルが出た」と分かった時点で、その足の終値はすでに過去の価格です。
そこで現行のReplayでは、シグナル確定後の「次の5分足の始値」を、最短で監査できるエントリー価格として使うように修正しました。
次の足が同じ取引時間内に存在しなければ、無理に価格を作らず未完了として扱います。
この修正でコードは少し厳しくなりました。
でも、都合のいい価格で入ったことにするより、こちらの方が実際の検証としては大事でした。
次に止まったのは「データの時刻」だった
エントリー条件を直しても、別の問題が出ました。

取引終了後に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な検証であり、リアルタイム取引の実績ではありません。