前回は、Cronで毎日回す運用にした話を書きました。

手動で気が向いた日に動かすのではなく、決まった時間に市況データを集めて、AIに判断させて、結果を保存する。
こうすることで、株シミュレーターは少しずつ「毎日観察する仕組み」になっていきました。

ただ、実際に運用してみると、ひとつ大きな違和感が出てきました。

それは、売買の想定タイミングです。

最初のモデルでは、朝に市況データを集めて、AIに観察対象を出してもらう形にしていました。

その日の朝に判断する。
その日の最初の観測価格を買値として扱う。
その日の前場あたりの価格を売値として扱う。

検証の仕組みとしては、これでも動きます。

AIが何を選んだか。
その後、価格がどうなったか。
勝ち、負け、見送りを記録する。

こういうログは残せます。

でも、運用しているうちに、だんだん気になってきました。

これ、本当に現実の売買タイミングに近いのか。

朝の時点でAIが判断しているのに、買値として使っている価格が、その時点で本当に注文できる価格なのか。
市況データがそろうタイミングと、実際に売買できるタイミングがずれていないか。
あとから見たときに、都合のいい価格を使っているように見えないか。

もちろん、これはあくまで個人の検証用シミュレーターです。
実際の約定を再現しているわけではありません。

それでも、検証ログとして見るなら、できるだけ現実の流れに近づけたいと思いました。

そこで考え直したのが、
「いつAIに判断させて、いつ買った想定にして、いつ売った想定にするか」
という部分です。

最終的に、新しいモデルではこういう流れにしました。

その日の午後に、市況データやランキング情報を確認する。
AIに観察対象を出してもらう。
その日の大引け付近で買った想定にする。
翌営業日の前場で売った想定にする。

つまり、朝に判断して同じ日の前場で完結させるのではなく、
大引け付近で買って、翌営業日の前場で結果を見る形です。

この方が、かなり自然に感じました。

日中の動きをある程度見たうえで、午後にAIが判断する。
その日の終値付近で買った想定にする。
翌営業日の前場でどうなったかを見る。

短期の検証としては、こちらの方が実際の行動に近いです。

この変更は、見た目以上に大きな変更でした。

まず、買値と売値の日付が分かれます。

以前は、同じ日の中で買値と売値を見ていました。
でも新しいモデルでは、買う想定の日と、売る想定の日が別になります。

そのため、日次ログの見せ方も変える必要がありました。

その日はまだ売値が確定していない。
翌営業日になってから売値が入る。
損益も翌営業日の前場後に確定する。

つまり、AIが観察対象を出した日には、まだ結果が出ていない状態になります。

これは少し面倒ですが、検証としては自然です。

実際の売買でも、買った瞬間に結果が確定するわけではありません。
保有して、翌日の価格を見て、そこで初めて結果が分かります。

なので、画面にも「未確定」の状態を出せるようにしました。

買付日は分かる。
売却予定日も分かる。
でも、まだ売値と結果は未確定。

翌営業日の処理が走ると、売値が入り、損益が確定します。

この状態を残せるようにしたことで、検証ログがより現実の流れに近づきました。

もうひとつ見直したのが、価格の取り方です。

買値や売値に使う価格が曖昧だと、結果の信頼性が弱くなります。

どの時点の価格なのか。
対象日と合っているのか。
古い価格を使っていないか。
価格が取れなかったときにどう扱うのか。

ここを整理しないと、勝ち負けだけ見ても意味が薄くなります。

そこで、新しいモデルでは、買値と売値の基準時刻を分けて考えるようにしました。

買値は、その日の大引け付近。
売値は、翌営業日の前場付近。

もし価格が取れない場合は、無理に結果を作らず、未確定として残す方針にしました。

この「無理に埋めない」というのも大事でした。

シミュレーターを作っていると、どうしても空欄を埋めたくなります。
結果がない日があると気持ち悪いです。

でも、取れていない価格をそれっぽく埋めてしまうと、検証がゆがみます。

分からないものは分からない。
未確定のものは未確定。
データが足りない日は、足りないと残す。

この方が、あとから見たときに正直です。

今回の変更で、古い仕様の資料も整理しました。

前のモデルをなかったことにするのではなく、旧仕様としてアーカイブに残す。
新しい仕様を正本として分ける。
画面の文言も、古い「朝に判断して同日中に結果を見る」前提が残らないように直す。

こういう整理をしておかないと、後から自分で見ても混乱します。

開発していると、仕様は少しずつ変わります。
でも、古い前提がドキュメントや画面に残っていると、どれが今の正しい仕様なのか分からなくなります。

今回の変更は、単なる機能追加ではなく、検証の前提を見直す作業でした。

作り始めたころは、まずAIが銘柄を選んで、結果が残ればいいと思っていました。

でも、毎日動かしてみると、
「その買値は本当に自然なのか」
「その売値はどの時点の価格なのか」
「その日の判断として見ていいのか」
という部分が気になってきます。

これは、実際に運用ログを積み上げたから見えてきたことでした。

最初から完璧な仕様を作るのは難しいです。

まず動くものを作る。
毎日回してみる。
ログを見る。
違和感が出たところを直す。
検証としてより自然な形に寄せていく。

この流れで、株シミュレーターは「朝買い・同日前場売り」から「大引け買い・翌日前場売り」へ変わりました。

今回で、株シミュレーター開発日記の一区切りです。

市況データを集めるところから始めて、
AIに渡す形を作り、
結果を保存し、
複数モデルで比較し、
Cronで毎日回し、
最後に売買想定の時間軸を見直しました。

作ってみて一番感じたのは、AIそのものよりも、周りの仕組みが大事だということです。

どんなデータを渡すか。
いつ判断させるか。
結果をどう保存するか。
失敗や未確定をどう扱うか。
あとからどう検証するか。

このあたりを整えて、ようやくAIの判断を観察できるようになります。

まだ改善したいところはたくさんあります。
祝日の扱い、価格データの精度、出来高や流動性の見方、モデルごとの比較方法など、見直したい点は残っています。

でも、最初に作りたかった「AIの判断を毎日記録して、あとから検証する仕組み」としては、かなり形になってきました。

しばらくは、この大引け買い・翌日前場売りモデルで運用ログを積み上げて、また気づいたことがあれば続きを書いてみようと思います。

※この記事は、個人開発している株価シミュレーターの作業記録です。
公開されている市況情報を、個人の検証用に整理している内容です。
特定の銘柄の売買を推奨・勧誘するものではありません。
実際の投資判断は、ご自身の責任でお願いします。