前回は、Cronで毎日回す運用にした話を書きました。
手動で気が向いた日に動かすのではなく、決まった時間に市況データを集めて、AIに判断させて、結果を保存する。
こうすることで、株シミュレーターは少しずつ「毎日観察する仕組み」になっていきました。
ただ、実際に運用してみると、ひとつ大きな違和感が出てきました。
それは、売買の想定タイミングです。
最初のモデルでは、朝に市況データを集めて、AIに観察対象を出してもらう形にしていました。
その日の朝に判断する。
その日の最初の観測価格を買値として扱う。
その日の前場あたりの価格を売値として扱う。
検証の仕組みとしては、これでも動きます。
AIが何を選んだか。
その後、価格がどうなったか。
勝ち、負け、見送りを記録する。
こういうログは残せます。
でも、運用しているうちに、だんだん気になってきました。
これ、本当に現実の売買タイミングに近いのか。
朝の時点でAIが判断しているのに、買値として使っている価格が、その時点で本当に注文できる価格なのか。
市況データがそろうタイミングと、実際に売買できるタイミングがずれていないか。
あとから見たときに、都合のいい価格を使っているように見えないか。
もちろん、これはあくまで個人の検証用シミュレーターです。
実際の約定を再現しているわけではありません。
それでも、検証ログとして見るなら、できるだけ現実の流れに近づけたいと思いました。
そこで考え直したのが、
「いつAIに判断させて、いつ買った想定にして、いつ売った想定にするか」
という部分です。
最終的に、新しいモデルではこういう流れにしました。
その日の午後に、市況データやランキング情報を確認する。
AIに観察対象を出してもらう。
その日の大引け付近で買った想定にする。
翌営業日の前場で売った想定にする。
つまり、朝に判断して同じ日の前場で完結させるのではなく、
大引け付近で買って、翌営業日の前場で結果を見る形です。
この方が、かなり自然に感じました。
日中の動きをある程度見たうえで、午後にAIが判断する。
その日の終値付近で買った想定にする。
翌営業日の前場でどうなったかを見る。
短期の検証としては、こちらの方が実際の行動に近いです。
この変更は、見た目以上に大きな変更でした。
まず、買値と売値の日付が分かれます。
以前は、同じ日の中で買値と売値を見ていました。
でも新しいモデルでは、買う想定の日と、売る想定の日が別になります。
そのため、日次ログの見せ方も変える必要がありました。
その日はまだ売値が確定していない。
翌営業日になってから売値が入る。
損益も翌営業日の前場後に確定する。
つまり、AIが観察対象を出した日には、まだ結果が出ていない状態になります。
これは少し面倒ですが、検証としては自然です。
実際の売買でも、買った瞬間に結果が確定するわけではありません。
保有して、翌日の価格を見て、そこで初めて結果が分かります。
なので、画面にも「未確定」の状態を出せるようにしました。
買付日は分かる。
売却予定日も分かる。
でも、まだ売値と結果は未確定。
翌営業日の処理が走ると、売値が入り、損益が確定します。
この状態を残せるようにしたことで、検証ログがより現実の流れに近づきました。
もうひとつ見直したのが、価格の取り方です。
買値や売値に使う価格が曖昧だと、結果の信頼性が弱くなります。
どの時点の価格なのか。
対象日と合っているのか。
古い価格を使っていないか。
価格が取れなかったときにどう扱うのか。
ここを整理しないと、勝ち負けだけ見ても意味が薄くなります。
そこで、新しいモデルでは、買値と売値の基準時刻を分けて考えるようにしました。
買値は、その日の大引け付近。
売値は、翌営業日の前場付近。
もし価格が取れない場合は、無理に結果を作らず、未確定として残す方針にしました。
この「無理に埋めない」というのも大事でした。
シミュレーターを作っていると、どうしても空欄を埋めたくなります。
結果がない日があると気持ち悪いです。
でも、取れていない価格をそれっぽく埋めてしまうと、検証がゆがみます。
分からないものは分からない。
未確定のものは未確定。
データが足りない日は、足りないと残す。
この方が、あとから見たときに正直です。
今回の変更で、古い仕様の資料も整理しました。
前のモデルをなかったことにするのではなく、旧仕様としてアーカイブに残す。
新しい仕様を正本として分ける。
画面の文言も、古い「朝に判断して同日中に結果を見る」前提が残らないように直す。
こういう整理をしておかないと、後から自分で見ても混乱します。
開発していると、仕様は少しずつ変わります。
でも、古い前提がドキュメントや画面に残っていると、どれが今の正しい仕様なのか分からなくなります。
今回の変更は、単なる機能追加ではなく、検証の前提を見直す作業でした。
作り始めたころは、まずAIが銘柄を選んで、結果が残ればいいと思っていました。
でも、毎日動かしてみると、
「その買値は本当に自然なのか」
「その売値はどの時点の価格なのか」
「その日の判断として見ていいのか」
という部分が気になってきます。
これは、実際に運用ログを積み上げたから見えてきたことでした。
最初から完璧な仕様を作るのは難しいです。
まず動くものを作る。
毎日回してみる。
ログを見る。
違和感が出たところを直す。
検証としてより自然な形に寄せていく。
この流れで、株シミュレーターは「朝買い・同日前場売り」から「大引け買い・翌日前場売り」へ変わりました。
今回で、株シミュレーター開発日記の一区切りです。
市況データを集めるところから始めて、
AIに渡す形を作り、
結果を保存し、
複数モデルで比較し、
Cronで毎日回し、
最後に売買想定の時間軸を見直しました。
作ってみて一番感じたのは、AIそのものよりも、周りの仕組みが大事だということです。
どんなデータを渡すか。
いつ判断させるか。
結果をどう保存するか。
失敗や未確定をどう扱うか。
あとからどう検証するか。
このあたりを整えて、ようやくAIの判断を観察できるようになります。
まだ改善したいところはたくさんあります。
祝日の扱い、価格データの精度、出来高や流動性の見方、モデルごとの比較方法など、見直したい点は残っています。
でも、最初に作りたかった「AIの判断を毎日記録して、あとから検証する仕組み」としては、かなり形になってきました。
しばらくは、この大引け買い・翌日前場売りモデルで運用ログを積み上げて、また気づいたことがあれば続きを書いてみようと思います。
※この記事は、個人開発している株価シミュレーターの作業記録です。
公開されている市況情報を、個人の検証用に整理している内容です。
特定の銘柄の売買を推奨・勧誘するものではありません。
実際の投資判断は、ご自身の責任でお願いします。