プライム市場を加えて銘柄評価を1日100件体制にする
銘柄評価を自動化するとき、対象市場を増やすだけなら簡単に見える。しかし実際には、選定ロジック、ランキング、ダッシュボード、通知、実行時間、テストのすべてに影響する。今回は、スタンダード市場を中心に動かしていた日次評価へプライム市場を追加し、1日100銘柄規模で扱えるようにした取り組みをまとめる。
> 本記事は自動化とデータ処理の実装記録です。特定銘柄の推奨や投資助言ではありません。投資判断には一次資料と人の確認が必要です。
実際に行ったことと確認できた結果
手元の記録では、評価対象を「スタンダード50件」から「スタンダード50件+プライム50件」へ拡張した。あわせて、スタンダード市場とプライム市場を独立して順位付けし、ダッシュボードを「スタンダード単体」「プライム単体」「両市場通し」の3ビューで見られるようにした。
この変更は、Slack通知のHermes経由化、テーマ株検出、LLMコスト安全弁などと混在していたが、後日、機能単位のコミットとして分離された。日次記録には、変更後のバッチで約98〜110件規模の1銘柄1セッション評価が実行され、全業種にわたる評価JSONが生成されたことが残っている。また、最終ツリーで全532テスト成功、ruffクリーンが確認された旨も記録されていた。
つまり、これは「対象を増やしたい」という構想ではなく、選定、集計、表示、通知、テストまで反映された運用機能として扱える。
仕組みまたは処理の流れ
処理は市場を混ぜてから順位付けするのではなく、市場ごとの母集団を保ったまま評価する設計にした。東京証券取引所は2022年に旧市場区分をPrime、Standard、Growthへ再編しており、同じ上場株式でも市場区分ごとに流動性や比較対象が異なる。そこで、対象選定とランキングでは市場区分を明示的な軸にした。
一般化すると、流れは次のようになる。
1. 実行日または評価基準日を決める。
2. スタンダード市場とプライム市場から、それぞれ上限件数を選ぶ。
3. 各銘柄を1セッションまたは1ジョブ単位で評価し、themes / catalysts / risks / competitors などをJSONへ保存する。
4. 市場別ランキングを作る。
5. ダッシュボードでは、市場別ビューと両市場通しビューを切り替えられるようにする。
6. Hermes cronや通知で、開始、終了、失敗を短く報告する。
ポイントは、評価件数の増加を単なるループ回数の増加として扱わないことだ。市場別の比較軸を残すと、プライムの大型銘柄とスタンダードの中小型銘柄を同じ前提で誤比較しにくくなる。
読者が再現できる手順
公開例では、実際のパス、通知先、DB名は置き換える。
“`bash
cd /path/to/project
uv sync
python -m pytest
ruff check .
“`
次に、市場別の取得件数を設定する。
“`bash
export STANDARD_DAILY_LIMIT=50
export PRIME_DAILY_LIMIT=50
export EVAL_OUTPUT_DB=/path/to/evaluation.sqlite3
python evaluation_batch.py –date 2026-08-20 –dry-run
“`
ドライランでは、スタンダードとプライムの候補件数、除外理由、想定セッション数、出力先を確認する。本番相当で少数件から試す場合は、各市場の上限を小さくして実行する。
“`bash
STANDARD_DAILY_LIMIT=3 PRIME_DAILY_LIMIT=3 \
python evaluation_batch.py –date 2026-08-20
“`
表示側では、市場フィルタを固定値ではなく列として扱う。たとえば `market_segment` に `standard` / `prime` を保存し、ダッシュボードで `standard only`、`prime only`、`all` を選べるようにする。
Hermes Agentで定期実行する場合は、公式ドキュメントにあるようにcron式または自然言語でジョブを作り、プロジェクト内で動かすなら `–workdir /path/to/project` を指定する。
“`bash
hermes cron create "0 8 * * 1-5" \
"Run the market-segmented stock evaluation batch and report failures" \
–name "stock evaluation 100 daily" \
–workdir /path/to/project
“`
失敗しやすい点、安全策、未完了事項
まず、件数を倍にするとAPI呼び出し、LLM使用量、実行時間も増える。評価対象を増やす前に、少数件、片市場のみ、両市場少数件、100件相当の順で広げると切り分けやすい。
次に、ランキングの混同に注意する。市場別ランキングと両市場通しランキングは意味が違うため、画面や通知では見出しを分ける。投資・会計判断に関わる出力は、自動スコアだけで確定せず、人が一次資料を確認する。
未完了事項として、日次記録では一部セッションが認証エラーで終わった可能性や、最終的な上位銘柄抽出の突合が別工程として残っている日があった。バッチがJSONを生成したことと、すべての評価が完全に採用可能であることは分けて確認する必要がある。
再現チェックリスト
- [ ] 市場区分を入力データの列として保持している。
- [ ] スタンダードとプライムを別々に上限管理している。
- [ ] 市場別ランキングと両市場通しビューを分けて表示している。
- [ ] 少数件ドライラン、テスト、lintをcron登録前に通している。
- [ ] 実行ログで成功件数、失敗件数、認証エラーを確認している。
- [ ] 投資判断に使う前に一次資料と人の確認を挟んでいる。
公式一次情報
- [Japan Exchange Group: Review of TSE Cash Equity Market Structure](https://www.jpx.co.jp/english/equities/improvements/market-structure/index.html)
- [Hermes Agent Scheduled Tasks (Cron)](https://hermes-agent.nousresearch.com/docs/user-guide/features/cron)
- [Hermes Agent CLI Commands Reference](https://hermes-agent.nousresearch.com/docs/reference/cli-commands)
