Python × Access

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

nanikatoaccess

「株投資×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アラートといった機能を備えたシステムを完成させたいと思います。次回もどうぞお楽しみに!

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました