AIを使って株式投資をするためのツールを作っています。
前回の記事では、銘柄コードを変更したときに買いシグナルの表示が更新されない問題を修正しました。
銘柄を変更しても前の結果が残ってしまう問題や、シグナル取得エラーが出る問題をAIと一緒に直していきました。
その結果、銘柄コードを入力すれば、その銘柄が買いタイミングかどうかを確認できる状態までは作ることができました。

ただ、一つ一つ銘柄コードを入力していくのはとても大変です。
そもそも買い対象になりそうな銘柄を自分で探して入力しなければいけません。
これだと、使いづらいです。
そこで今回は、買い対象になっている銘柄を自動で探す機能をAIに作ってもらいました。
実装機能
今までは、私が銘柄コードを入力して、その銘柄が買い対象かどうかを確認していました。
しかし、それだと毎回自分で銘柄を探す必要があります。
そこで、ボタンを押すと対象銘柄を順番にチェックして、買いタイミングと判定された銘柄だけを一覧で表示するようにしたいと考えました。
具体的には、以下のような機能です。
・買い対象銘柄を検索するボタンを追加する
・対象となる銘柄コードを順番にチェックする
・現在実装している買いタイミング判定ロジックを使う
・買い対象に該当した銘柄だけを一覧表示する
・処理中は検索中とわかるようにする
・途中でエラーが出た銘柄があっても、全体の処理は止めない
これができれば、自分で一つずつ銘柄コードを入力しなくても、AIに候補を探してもらえるようになります。
AIへの指示内容
今回、最初にAIへ伝えた内容は以下です。
次の機能追加をお願いします。
現在は、銘柄コードを入力しないと、その銘柄が買い対象かどうかを確認できません。
しかし、この状態だと、そもそもどの銘柄コードを入力すればよいのかわかりません。
そこで、最初にボタンを押すと、対象となるすべての銘柄コードを調べて、買い対象に該当する銘柄コードの一覧を出力できるようにしてください。
やりたいことは以下です。
・フロント画面に「買い対象銘柄を検索する」ボタンを追加する
・ボタンを押すと、日本株の対象銘柄コードを順番にチェックする
・各銘柄について、現在実装されている買いタイミング判定ロジックを使って判定する
・買い対象に該当した銘柄コードだけを一覧で表示する
・処理中は「検索中」などの表示を出して、ユーザーが処理中だとわかるようにする
・エラーが出た銘柄があっても、全体の処理が止まらないようにする
かなり自然文に近い指示ですが、やりたいことは明確に伝えました。
特に意識したのは、
- どの操作をしたいのか
- 何を判定したいのか
- どのように表示してほしいのか
- エラー時にどう動いてほしいのか
を入れたことです。
AIに丸投げするというより、使う側として必要な条件を整理して伝えるイメージです。
一括スキャン機能の実装
最初にAIが実装したのは、ウォッチリストを使った一括スキャン機能でした。
具体的には、あらかじめ用意した銘柄リストを順番にチェックして、買いタイミングと判定された銘柄だけを表示する機能です。
この段階では、対象銘柄として代表的な日本株18銘柄が設定されていました。
トヨタ、ソニー、任天堂、NTT、三菱UFJなど、よく知られている大型株が中心です。
実装としては、バックエンド側にウォッチリストを返すAPIを作り、フロントエンド側でその銘柄リストを受け取って、既存の買いタイミング判定APIを順番に呼び出す形でした。
18銘柄では少なすぎる問題
なぜか18銘柄が勝手に選ばれていましたが、正直18銘柄だけでは少なすぎます。
投資対象を探すためのツールなのに、最初から18銘柄しか見ないのであれば、候補がかなり限定されてしまいます。
次の改善方針として、もっと広い銘柄群を対象にするようにAIに指示しました
方針としては、TOPIX500などの大きなインデックスを使い、より多くの日本株を対象にすることにしました。
TOPIX500の銘柄を対象にしてと指示したにも関わらず、今回の実装では、最終的に生成された銘柄リストは225銘柄でした、、、
ここは今後の改善ポイントとして後ほど、対応しようと思っています。
ただ、18銘柄から225銘柄に広がっただけでも、かなり実用性は上がりました。
判定開始と結果を見る機能を分ける
もう一つ改善したかったのが、画面の使い方です。
最初の実装では、スキャン中に買い対象銘柄が見つかるたびに、同じ画面に順次表示される形でした。
ただ、対象銘柄数が増えると、この表示方法は少し使いにくくなります。
スキャン中は進捗だけ見えればよくて、結果はあとでまとめて見たい。
そこで、次のような画面構成に変更してもらいました。
・メイン画面に「判定開始」ボタンを置く
・判定中は別ページで進捗だけ表示する
・結果は「結果を見る」ボタンから別ページで確認する
・買い対象銘柄の一覧をクリックすると、その銘柄のチャート画面に遷移する
これにより、スキャン処理と結果確認を分けることができました。
実際の投資ツールとして考えると、こちらの方が自然だと思います。
スクリーニングを実行する画面と、結果を見る画面が分かれています。
実装結果
実装された機能
・判定開始ボタンの追加
・結果を見るボタンの追加
・スキャン進捗ページの追加
・買い対象銘柄一覧ページの追加
・銘柄をクリックするとメイン画面に戻ってチャート表示する機能
・スキャン状態を画面遷移後も保持する仕組み
最終的には、かなりアプリらしい構成になってきました。
実際の動き
実装後の動きは、以下のようになります。
まず、メイン画面で「判定開始」ボタンを押します。
すると、買いタイミング判定のページに移動し、現在何銘柄目までチェックしているかが表示されます。
このとき、買い対象になった銘柄はまだ画面には表示されません。
判定が完了すると、「結果を見る」ボタンから買い対象銘柄の一覧ページに移動できます。
結果ページでは、買いタイミングと判定された銘柄だけが表示されます。
そして、銘柄の「チャートを見る」ボタンを押すと、メイン画面に戻り、その銘柄コードを入力したときと同じ状態でチャートとシグナルが表示されます。
この結果を見ると、今の買いルールだと、カップウィズハンドルのチャートパターンを抽出できるものになっていませんね。
今後の課題
今回の実装で、買い対象銘柄を自動で探す流れは作ることができました。
ただ、実際に使ってみると、まだいくつか課題があります。
1つ目は、銘柄リストです。
今回は225銘柄を使っていますが、本来はTOPIX500など、もっと広い範囲から探したいです。
そのためには、銘柄リストの取得方法を整える必要があります。
2つ目は、結果の保存です。
現状では、スキャン結果はその場で表示されるだけで、後から見返すことはできません。
そのため、毎回スキャンし直す必要があります。
ここは、判定日時と一緒に結果を保存して、あとから確認できるようにしたいと考えています。
例えば、夜にスキャンを実行しておいて、翌日に候補銘柄をチェックする、という使い方もできるようになります。
このあたりが、次に改善していきたいポイントになります。
まとめ
今回は、買い対象銘柄を自動で探す機能を追加しました。
これまでは、銘柄コードを入力して確認する形でしたが、
どの銘柄を見ればいいのか分からないという問題がありました。
そこで、複数銘柄をまとめてチェックして、
買いタイミングの銘柄だけを表示するようにしました。
また、処理と結果を分けることで、使いやすさも改善しました。
まだ改善点はありますが、
自分で探す → 入力する → 確認する
から
AIに探させる → 結果を見る → チャート確認する
という流れに変わりました。
かなり実用に近づいてきたと感じています。

