株投資 × Access!? 株投資を効率化するシステムを作るシリーズ① 要件定義編

「株投資×Access? なんじゃそれ?」と感じた方も、この記事をご覧いただきありがとうございます。
私は2年ほど前から積立投資を始め、最近では高配当株投資に興味を持つようになりました。
そんな中、
長期株式投資さん著の『【超完全版】フルオートモードで月に31.5万円が入ってくる「強配当」株投資 経営戦略から“ほぼ永遠に儲かる企業”を探す方法』
を拝見し、「高配当株へ適切なタイミングで投資できるシステムがあれば、初心者でもリスクを抑えて取り組めるのでは?」と考えるようになりました。
そこで、「①業績が安定している(EPSが複数年安定推移)、②高配当の銘柄を、③PER・PBRレンジの低いところで買う」というコンセプトを軸に、Access をフロントエンドとして SQL Server、Python、API を組み合わせたシステムを構築しようとしています。
本記事はシリーズ第1弾:要件定義編です。今後はテーブル設計やフォーム作成、Python 連携などを順次紹介し、最終的には完成したシステムを公開する予定です。
※2025年2月28日時点の構想での要件定義です。
随時開発しながらブラッシュアップしています。
以降続編記事とは内容が異なる場合があります。
1. システム概要
1.1 目的
- 高配当株を中心に「EPS安定性」「PER・PBRによる割安度」「配当利回り」などを総合評価し、買い時・売り時(損切り含む)を可視化する
- 保有銘柄および監視銘柄の管理を行い、ポートフォリオをリアルタイムに把握できる
- 最新ニュースやマーケット情報を自動取得し、ChatGPTとの連携による要約・分析・アラート機能を提供
1.2 特徴
- Access + SQL Server を利用し、データ管理・集計は基本的に SQL Server 側で行う
- EPS・PER・PBR・配当利回り等の指標に加え、相関分析や過去データ比較などの機能を実装
- ChatGPT APIを用いてニュースや財務データの要約やコメントを自動生成
- Slackやメールを使ったアラート通知機能を実装
1.3 想定利用者
- 長期投資家やインカムゲイン(配当収入)を重視する個人投資家
- 中小規模の投資顧問業者や投資クラブなど
2. 機能要件
2.1 銘柄管理機能
銘柄マスタ管理
- 日本株・米国株のティッカーシンボル、銘柄名、セクター分類などを登録・編集・削除
- 必須項目(ティッカーシンボル、銘柄名等)は登録時に NULLチェック
- 登録完了後は入力フォームをクリア
保有銘柄管理
- 取得単価・取得日・保有数量・損益などの管理を行う
- 取得時点の配当利回り(見込み)やPERなども一緒に記録
- 必須項目(銘柄ID、取得単価、保有数量 等)を NULLチェック し、登録後にフォームをクリア
監視銘柄管理
- 将来購入を検討している銘柄のリストを管理(監視開始日などを記録)
- 必須項目の NULLチェック 後、登録完了でフォームをクリア
2.2 市場データ・財務データ取得機能
価格・指標データ取得
- Yahoo Finance APIから株価やPER、PBR、EPS、配当利回りなどを取得
- Python を用いて API 経由で SQL Server へ連携
- SQL Server に履歴テーブルを用意し、日次や任意タイミングでデータ更新可能
ニュース取得
- Yahooファイナンスや RSS フィード等から新着ニュースを取得・格納
- 米国株ニュース(英語)も必要に応じてテーブルを分割し管理
- タイトルやURLを使い、重複ニュースを判定して除外
2.3 分析・評価機能
EPS安定性評価
- 5〜10年分のEPS推移を時系列で比較し、変動幅・平均成長率・標準偏差を算出
- 安定度指標として、変動の小さい銘柄をスコア化
PER・PBRによる割安度判定
- 過去の PER・PBR レンジを記録し、現在値が過去レンジ下限付近かどうかを判定
- 業種平均と比較して割安かどうかを評価
配当利回り分析
- 配当利回りが過去平均より大きく乖離している場合、「割安」フラグを表示
- 株価急落時の利回り急上昇や、逆に利回りが高すぎる(減配リスク)場合などを判定
ポートフォリオ評価
- 保有銘柄(取得単価・数量・現在株価)から時価総額・含み損益・平均利回りを算出
- 業種別や国別のアセットアロケーションをグラフ表示
相関分析・過去市場比較
- 金利や為替レートとの相関係数を計算しヒートマップなどで可視化
- リーマンショックやコロナショックなど 過去暴落時のドローダウン を銘柄ごとに比較
2.4 アラート・通知機能
買い/損切りシグナル通知
- 配当利回りが一定以上、PER が業種平均比で一定以下などの条件を満たした時に通知
- 株価が1日で5%以上下落などの急落を検知した場合のアラート
Slack・メール通知
- Slack Webhook や SMTPメールを用いて通知を送信
- 緊急度に応じて Slack チャンネルを分けたり、メールと併用するなどの設定が可能
頻度制御
- 同一条件のアラートが連続しないよう、一定期間は再通知を抑止
2.5 ChatGPT連携機能
ニュース要約・コメント生成
- 取得したニュース本文を ChatGPT API に送信し、要約や分析コメントを取得
- 要約結果は SQL Server に格納し、Access フォーム上で閲覧・検索可能
個別銘柄分析
- 「銘柄の過去EPS」「業種平均PER」「直近ニュース」などをまとめたプロンプトを ChatGPT に投げ、投資判断の参考コメントを自動生成
- Access 上からユーザー質問を送信し、ChatGPT からの回答を表示する対話画面も用意
レポート自動生成
- 毎朝9時など定時実行や手動トリガーにより、主要銘柄の動向や重要ニュースを ChatGPT に要約させ、メールやSlackへレポート送信
- ChatGPTの“幻覚”対策として、情報ソースを併記するなどの仕組みを検討
3. 画面要件
3.1 メインメニュー画面
- 「保有銘柄管理」「監視銘柄管理」「分析レポート」「アラート設定」「ChatGPT連携画面」などへのボタン配置
3.2 銘柄管理画面
- 銘柄マスタを一覧表示し、編集フォームを備える
- 業種・国・銘柄名などで検索フィルタ可能
- 新規登録・編集時には NULLチェックを実施
3.3 保有銘柄一覧画面
- 保有銘柄を一覧表示し、現在株価や評価損益・利回りを表示
- 明細クリックで詳細分析画面へ遷移
- 新規登録時に必須項目の NULLチェック、登録後フォームクリア
3.4 監視銘柄一覧画面
- 監視中の銘柄、現在株価、目標買い水準などを一覧表示
- 指定条件を満たした際に買い判断シグナルをアイコン等で表示
3.5 分析・レポート画面
- 過去EPS推移、PER/PBR、配当利回り等のチャートを銘柄別に表示
- ポートフォリオ全体の資産配分やセクター比率をグラフ化
- 相関分析の結果を散布図やヒートマップで表示
3.6 ChatGPT連携画面
- ニュースリストを選択すると、要約結果が表示される
- ユーザーが銘柄名や質問を入力し、ChatGPTの回答をテキストエリアに表示
3.7 アラート設定画面
- 配当利回り、PER/PBR、株価変動率などの条件・閾値を設定
- 通知方法(メール/Slack)や送信先の設定を管理
4. インターフェース要件
4.1 データベース接続
vbコピーするCall データベース接続() '←ADO接続用コード呼び出し
'例: 下記のような接続情報を使う
Public cn As ADODB.Connection
Public strcn As String
Public Sub データベース接続()
Set cn = CreateObject("ADODB.Connection")
strcn = "Provider=SQLOLEDB.1" & _
";Persist Security Info=False;Data Source=○○\SQLEXPRESS" & _
";Initial Catalog=KABU" & _
";password=P@ssXXXXX" & _
";persist security info=True" & _
";user id=Admin;"
cn.Open strcn
End Sub
- フロントエンド(Access)からSQL Serverにアクセスし、主要な処理はSQL Serverで実施
4.2 外部API連携
- 株価・財務情報取得: Yahoo Finance API(JSON/CSV)
- ニュース取得: RSSフィードや NewsAPI、Finnhub等
- ChatGPT API: OpenAI API(REST)。APIキー管理を含むセキュリティ配慮が必要
4.3 通知インターフェース
- メール送信(SMTP): CDOやOutlook.Applicationを利用
- Slack通知: Incoming Webhook に JSONをPOST
5. 非機能要件
5.1 性能要件
レスポンス
- 通常操作(銘柄検索やポートフォリオ表示)は 2秒以内 を目標
- 大量データ集計の分析処理は SQL Server側で実施 し、5秒以内に完了を目指す
スケーラビリティ
- 米国株など件数が増える可能性があるため、テーブル設計やインデックスを最適化
- 将来的なクラウド移行やデータ増大時に対応できるよう、SQL Server のスケールアップ/アウトを視野に入れる
5.2 セキュリティ要件
SQLインジェクション対策
- 入力値のバリデーションを徹底し、文字列結合によるクエリ作成を避ける
- VBA+パススルークエリやストアドプロシージャを利用し、外部入力の取り扱いに注意
認証・認可
- システムログインとDBログインを分離し、SQL Serverは最小限の権限で運用
- ユーザー管理やAPIキーなど機密情報は暗号化して保存
APIキー管理
- ChatGPT やニュースAPIのキーは設定ファイルや環境変数を使って安全に保管
- Access フロントエンドに直書きしないように注意
5.3 運用・保守要件
ログ管理
- 株価更新・ニュース取得・アラート通知などの実行ログを記録し、異常終了時の原因分析を行いやすくする
バックアップ
- SQL Server データベースのバックアップ方針(フル/差分)を策定
- Access フロントエンドのバージョン管理も実施
可用性
- オンプレ前提でも、災害時用のデータ退避先を用意するなど対策を検討
- トラブル対応やメンテナンス手順を明確化しておく
本記事では主に要件定義の内容をまとめました。次回は テーブル設計編 など、もう少し踏み込んだ内容を紹介する予定です。Access と SQL Server を組み合わせることで、個人投資家でも比較的低コストでデータ管理・分析が可能になります。
長期株式投資さん著の『【超完全版】フルオートモードで月に31.5万円が入ってくる「強配当」株投資 経営戦略から“ほぼ永遠に儲かる企業”を探す方法』を参考に仕様設計していきますのでこちらも是非ご一読ください。
最終的には、株価やニュースの自動取得、ChatGPTによる要約・助言、Slackアラートといった機能を備えたシステムを完成させたいと思います。次回もどうぞお楽しみに!