mcpField
V
value-dividend-screener

value-dividend-screener

github.com/tradermontyその他3.4k3.8k 回インストール2 日前に更新
リポジトリ

value-dividend-screener について

value-dividend-screenerは、バリュー特性を持つ米国の配当株を探すスキルです。FINVIZ Eliteでの事前選別に続き、FMPでファンダメンタルズを詳しく分析し、総合スコアで順位付けできます。

主な機能

  1. 01米国の配当株のスクリーニング
  2. 02FINVIZ Eliteによる事前選別
  3. 03バリュエーション・成長・財務の分析
  4. 04配当の持続可能性の評価
  5. 05総合スコアで順位付けしJSON出力

活用シーン

  1. 01妥当な評価のインカム株探し
  2. 02増配候補銘柄のスクリーニング
  3. 03配当カバー率と財務健全性の比較
  4. 04追加検討用のスクリーニング結果作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tradermonty/claude-trading-skills --skill value-dividend-screener

インストール後、Claude Code で/value-dividend-screenerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

requirements.txt
references/
fmp_api_guide.md
screening_methodology.md
scripts/
fmp_client.py
screen_dividend_stocks.py
scripts/tests/
conftest.py
test_clients_and_pipeline.py
test_dividend_sustainability.py
test_fmp_stable.py
test_shared_fmp_transport.py

詳細

バリュー配当株スクリーナー

概要

このスキルでは、2段階のスクリーニング手法を用いて、バリュー特性、魅力的なインカム創出力、安定した成長を兼ね備えた高品質な配当株を特定します。

  1. FINVIZ Elite API(任意ですが推奨):基本的な条件で銘柄を事前スクリーニングします(高速かつコスト効率に優れています)。
  2. Financial Modeling Prep(FMP)API:候補銘柄を詳細にファンダメンタル分析します。

バリュエーション比率、配当指標、財務健全性、収益性などの定量的な基準に基づいて、米国株をスクリーニングします。包括的なレポートを作成し、詳細なファンダメンタル分析と複合品質スコアに基づいて銘柄を順位付けします。

効率面でのメリット:FINVIZによる事前スクリーニングを利用すると、FMP API の呼び出しを90%削減できるため、無料プランの API ユーザーに最適です。

使用する場面

ユーザーが次のような依頼をしたときに、このスキルを呼び出してください。

  • 「高品質な配当株を見つけて」
  • 「バリュー配当株の投資機会をスクリーニングして」
  • 「配当の成長が著しい銘柄を教えて」
  • 「妥当なバリュエーションで取引されているインカム株を見つけて」
  • 「持続可能な高利回り株をスクリーニングして」
  • 配当利回り、バリュエーション指標、ファンダメンタル分析を組み合わせた依頼

ワークフロー

ステップ1:API キーの有無を確認する

2段階スクリーニング(推奨)の場合:

両方の API キーが利用可能か確認します。

import os
fmp_api_key = os.environ.get('FMP_API_KEY')
finviz_api_key = os.environ.get('FINVIZ_API_KEY')

利用できない場合は、API キーを提供するか、環境変数を設定するようユーザーに依頼します。

export FMP_API_KEY=your_fmp_key_here
export FINVIZ_API_KEY=your_finviz_key_here

FMP のみでスクリーニングする場合:

FMP API キーが利用可能か確認します。

import os
api_key = os.environ.get('FMP_API_KEY')

利用できない場合は、API キーを提供するか、環境変数を設定するようユーザーに依頼します。

export FMP_API_KEY=your_key_here

FINVIZ Elite API キー:

  • FINVIZ Elite のサブスクリプションが必要です(月額約40ドル、または年額約330ドル)。
  • 事前スクリーニング結果を CSV 形式でエクスポートできます。
  • FMP API の使用量を削減できるため、強く推奨されます。

必要に応じて、references/fmp_api_guide.md の手順を案内してください。

ステップ2:スクリーニングスクリプトを実行する

適切なパラメーターを指定して、スクリーニングスクリプトを実行します。

2段階スクリーニング(推奨)

FINVIZ で事前スクリーニングを行い、その後 FMP で詳細に分析します。

デフォルト実行(上位20銘柄):

python3 scripts/screen_dividend_stocks.py --use-finviz

API キーを明示して実行:

python3 scripts/screen_dividend_stocks.py --use-finviz \
  --fmp-api-key $FMP_API_KEY \
  --finviz-api-key $FINVIZ_API_KEY

上位 N 件を指定:

python3 scripts/screen_dividend_stocks.py --use-finviz --top 50

出力先を指定:

python3 scripts/screen_dividend_stocks.py --use-finviz --output /path/to/results.json

スクリプトの動作(2段階):

  1. FINVIZ Elite による事前スクリーニング:
    • 時価総額:中型株以上
    • 配当利回り:3%以上
    • 配当成長率(3年間):5%以上
    • EPS 成長率(3年間):プラス
    • P/B:2未満
    • P/E:20未満
    • 売上高成長率(3年間):プラス
    • 地域:米国
  2. FINVIZ の結果を FMP で詳細に分析(通常20~50銘柄):
    • 配当成長率の算出(3年間の CAGR)
    • 売上高および EPS の推移分析
    • 配当の持続可能性評価(配当性向、FCF カバレッジ)
    • 財務健全性指標(負債資本比率、流動比率)
    • 品質スコアリング(ROE、利益率)
  3. 複合スコアを算出して順位付け
  4. 上位 N 銘柄を JSON ファイルに出力

予想実行時間(2段階): FINVIZ の候補銘柄30~50件で2~3分(FMP のみの場合より大幅に高速)

FMP のみのスクリーニング(従来の方法)

FMP Stock Screener API のみを使用します(API の使用量が増加します)。

デフォルト実行:

python3 scripts/screen_dividend_stocks.py

API キーを明示して実行:

python3 scripts/screen_dividend_stocks.py --fmp-api-key $FMP_API_KEY

スクリプトの動作(FMP のみ):

  1. FMP Stock Screener API を使用した初期スクリーニング(配当利回り >=3.0%、P/E <=20、P/B <=2)
  2. 候補銘柄の詳細分析(通常100~300銘柄):
    • 2段階の方法と同じ詳細分析
  3. 複合スコアを算出して順位付け
  4. 上位 N 銘柄を JSON ファイルに出力

予想実行時間(FMP のみ): 候補銘柄100~300件で5~15分(レート制限が適用されます)

API 使用量の比較:

  • 2段階:約50~100回の FMP API 呼び出し(FINVIZ による事前絞り込みで約30銘柄)
  • FMP のみ:約500~1500回の FMP API 呼び出し(スクリーナーの全結果を分析)
Step 3: 結果を解析して分析する

生成された JSON ファイルを読み込みます。

import json

with open('dividend_screener_results.json', 'r') as f:
    data = json.load(f)

metadata = data['metadata']
stocks = data['stocks']

銘柄ごとの主なデータ:

  • 基本情報:symbol、company_name、sector、market_cap、price
  • バリュエーション:dividend_yield、pe_ratio、pb_ratio
  • 成長指標:dividend_cagr_3y、revenue_cagr_3y、eps_cagr_3y
  • 持続可能性:payout_ratio、fcf_payout_ratio、fcf_amount、fcf_status、fcf_coverage_status、sustainability_basis、dividend_sustainable、sustainability_bonus、sustainability_note
  • 財務健全性:debt_to_equity、current_ratio、financially_healthy
  • 品質:roe、profit_margin、quality_score
  • 総合ランキング:composite_score
Step 4: Markdown レポートを生成する

次のセクションを含む、構成の整った Markdown レポートをユーザー向けに作成します。

レポートの構成
# Value Dividend Stock Screening Report

**Generated:** [Timestamp]
**Screening Criteria:**
- Dividend Yield: >= 3.5%
- P/E Ratio: <= 20
- P/B Ratio: <= 2
- Dividend Growth (3Y CAGR): >= 5%
- Revenue Trend: Positive over 3 years
- EPS Trend: Positive over 3 years

**Total Results:** [N] stocks

---

## Top 20 Stocks Ranked by Composite Score

| Rank | Symbol | Company | Yield | P/E | Div Growth | Score |
|------|--------|---------|-------|-----|------------|-------|
| 1 | [TICKER] | [Name] | [%] | [X.X] | [%] | [XX.X] |
| ... |

---

## Detailed Analysis

### 1. [SYMBOL] - [Company Name] (Score: XX.X)

**Sector:** [Sector Name]
**Market Cap:** $[X.XX]B
**Current Price:** $[XX.XX]

**Valuation Metrics:**
- Dividend Yield: [X.X]%
- P/E Ratio: [XX.X]
- P/B Ratio: [X.X]

**Growth Profile (3-Year):**
- Dividend CAGR: [X.X]% [✓ Consistent / ⚠ One cut]
- Revenue CAGR: [X.X]%
- EPS CAGR: [X.X]%

**Dividend Sustainability:**
- Payout Ratio: [XX]%
- FCF Payout Ratio: [XX]%
- FCF Observed: [amount or unavailable] ([POSITIVE / ZERO / NEGATIVE / MISSING_DATA])
- FCF Coverage: [COVERED / AT_LIMIT / INSUFFICIENT_FCF / ZERO_FCF / NEGATIVE_FCF / MISSING_DATA / NO_DIVIDEND]
- Decision Basis: [EARNINGS_AND_FCF / FFO]
- Status: [✓ Sustainable / ⚠ Not confirmed]; Bonus: [0 / 10] points
- Explanation: [sustainability_note]

**Financial Health:**
- Debt-to-Equity: [X.XX]
- Current Ratio: [X.XX]
- Status: [✓ Healthy / ⚠ Caution]

**Quality Metrics:**
- ROE: [XX]%
- Net Profit Margin: [XX]%
- Quality Score: [XX]/100

**Investment Considerations:**
- [Key strength 1]
- [Key strength 2]
- [Risk factor or consideration]

---

[Repeat for other top stocks]

---

## Portfolio Construction Guidance

**Diversification Recommendations:**
- Sector breakdown of top 20 results
- Suggested allocation strategy
- Concentration risk warnings

**Monitoring Recommendations:**
- Key metrics to track quarterly
- Warning signs for each position
- Rebalancing triggers

**Risk Considerations:**
- Market cap concentration
- Sector biases in results
- Economic sensitivity warnings

ユーザー向けレポートでは、観測された FCF と配当のカバー状況を分けて記載してください。FCF がマイナスの場合は、観測された不足を意味します。FCF がゼロの場合は、現金によるカバーがないことを意味します。MISSING_DATA は、参照元のフィールドが利用できなかったことを意味します。いずれも、将来の減配を示すものではありません。AT_LIMIT は、FCF が配当と同額で余裕がないことを意味し、ボーナスは付与されません。REIT であることが確認された場合は、FCF がマイナスであっても、FFO を判断基準として使用し、FCF の状況は参考情報として示してください。不動産セクターに属するという理由だけで、企業に FFO の扱いを適用しないでください。不明な状況を持続可能性に関する主張に置き換えるのではなく、説明文に sustainability_note をそのまま記載してください。

Step 5: 背景と方法論を説明する

結果を説明する際は、スクリーニングの方法論を参照してください。

説明する主な概念:

  • これらのしきい値(利回り 3.5%、P/E 20、P/B 2)を採用する理由
  • 配当成長が、成長のない高利回りと比べて重要である理由
  • 総合スコアがバリュー、成長、品質のバランスをどう取るか
  • 配当の持続可能性と配当トラップの違い
  • 財務健全性指標の重要性

references/screening_methodology.md を読み込み、次の詳細を説明してください。

  • フェーズ 1:初期の定量的フィルター
  • フェーズ 2:成長の質に関するフィルター
  • フェーズ 3:持続可能性と品質の分析
  • 総合スコアリングシステム
  • 投資哲学と制約事項
Step 6: 追加の質問に回答する

よくあるユーザーからの質問を想定します。

「[stock] がリストに入らなかったのはなぜですか?」

  • どの基準(利回り、バリュエーション、成長、持続可能性)を満たさなかったか確認します
  • 除外につながった具体的なフィルターを説明します

「特定のセクターに絞ってスクリーニングできますか?」

  • スクリプトにはフィルタリング機能があります(383~388 行目を変更)
  • セクターパラメーターを追加して再実行する方法を提案します

「利回りのしきい値を上げたり下げたりするにはどうすればよいですか?」

  • スクリプトのパラメーターは調整できます
  • 利回りと成長のトレードオフを説明します
  • 新しいパラメーターで再スクリーニングすることを推奨します

「このスクリーニングはどのくらいの頻度で再実行すればよいですか?」

  • 四半期ごとの実行を推奨します(決算サイクルに合わせます)
  • 長期保有者の場合は、半年ごとでも十分です
  • 市場環境によっては、より頻繁な確認が適切です

「何銘柄購入すればよいですか?」

  • 分散投資の目安:配当ポートフォリオでは最低 10~15 銘柄
  • セクターのバランスを考慮します
  • リスク許容度に応じてポジションサイズを決めます

リソース

scripts/screen_dividend_stocks.py

次の機能を備えた包括的なスクリーニングスクリプトです。

  • FMP API と連携してデータを取得します
  • 複数フェーズのフィルタリングロジックを実装します
  • 3 年間の成長率(CAGR)を算出します
  • 配当性向と FCF のカバー状況を通じて、配当の持続可能性を評価します
  • 財務健全性(負債資本比率、流動比率)を評価します
  • 品質スコア(ROE、利益率)を算出します
  • 総合スコアリングシステムで銘柄をランキングします
  • 構造化された JSON 結果を出力します

依存関係: requests ライブラリ(pip install requests でインストール)

レート制限: FMP API の制限(無料プランでは 1 日 250 リクエスト)を守るため、組み込みの待機時間を設けています

エラー処理: データ不足時の適切な処理、レート制限時の再試行、API エラーへの対応

references/screening_methodology.md

スクリーニング手法の包括的なドキュメント:

フェーズ 1:初期の定量的フィルター

  • 配当利回り >= 3.5% の根拠と計算方法
  • P/E 比率 <= 20 のしきい値の妥当性
  • P/B 比率 <= 2 のバリュエーションの考え方

フェーズ 2:成長の質に関するフィルター

  • 配当成長率(3年間の CAGR >= 5%)
  • 売上高のプラス傾向の分析
  • EPS のプラス傾向の分析

フェーズ 3:品質と持続可能性の分析

  • 配当の持続可能性指標(配当性向、FCF カバレッジ)
  • 財務健全性指標(D/E、流動比率)
  • 品質スコアリング手法(ROE、利益率)

複合スコアリングシステム(0~100ポイント)

  • スコア構成要素の内訳と重み付け
  • 解釈のガイドライン

投資理念

  • この手法が機能する理由
  • この戦略で避けられるもの(配当の罠、割安株の罠)
  • 理想的な候補銘柄のプロファイル

利用上の注意と制限事項

  • ポートフォリオ構築のベストプラクティス
  • 売却判断の基準
  • しきい値選定の歴史的背景
references/fmp_api_guide.md

Financial Modeling Prep API の完全ガイド:

API キーの設定

  • 無料 API キーの取得
  • 環境変数の設定
  • 無料プランの制限(1日あたり250リクエスト)

使用する主なエンドポイント

  • 株式スクリーナー API
  • 損益計算書 API
  • 貸借対照表 API
  • キャッシュフロー計算書 API
  • 主要指標 API
  • 過去の配当 API

レート制限への対応

  • スクリプトに組み込まれた保護機能
  • リクエスト予算の管理
  • 無料プランのベストプラクティス

エラー処理

  • よくあるエラーと解決方法
  • デバッグ手法

データ品質に関する考慮事項

  • データの鮮度と欠落
  • データ精度に関する注意事項
  • SEC 提出書類で確認すべき場合

高度な使い方

スクリーニング基準のカスタマイズ

scripts/screen_dividend_stocks.py のしきい値を変更します:

383~388行目 - 初期スクリーニングのパラメーター:

candidates = client.screen_stocks(
    dividend_yield_min=3.5,  # Adjust yield threshold
    pe_max=20,               # Adjust P/E threshold
    pb_max=2,                # Adjust P/B threshold
    market_cap_min=2_000_000_000  # Minimum $2B market cap
)

423行目 - 配当 CAGR のしきい値:

if not div_cagr or div_cagr < 5.0:  # Adjust growth threshold
セクター別スクリーニング

初期スクリーニングの後にセクターのフィルタリングを追加します:

# Filter for specific sectors
target_sectors = ['Consumer Defensive', 'Utilities', 'Healthcare']
candidates = [s for s in candidates if s.get('sector') in target_sectors]
REIT と金融株の除外

REIT と金融株は配当特性が異なります(配当性向が高く、指標も異なります):

# Exclude REITs and Financials
exclude_sectors = ['Real Estate', 'Financial Services']
candidates = [s for s in candidates if s.get('sector') not in exclude_sectors]
CSV へのエクスポート

JSON の結果を CSV に変換して Excel で分析します:

import json
import csv

with open('dividend_screener_results.json', 'r') as f:
    data = json.load(f)

stocks = data['stocks']

with open('screening_results.csv', 'w', newline='') as csvfile:
    if stocks:
        fieldnames = stocks[0].keys()
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(stocks)

トラブルシューティング

「ERROR: requests library not found」

解決方法: requests ライブラリをインストールします

pip install requests
「ERROR: FMP API key required」

解決方法: 環境変数を設定するか、コマンドラインから指定します

export FMP_API_KEY=your_key_here
# OR
python3 scripts/screen_dividend_stocks.py --fmp-api-key your_key_here
「ERROR: FINVIZ API key required when using --use-finviz」

解決方法: 環境変数を設定するか、コマンドラインから指定します

export FINVIZ_API_KEY=your_key_here
# OR
python3 scripts/screen_dividend_stocks.py --use-finviz --finviz-api-key your_key_here

注: FINVIZ Elite のサブスクリプションが必要です(約$40/月、または約$330/年)

「ERROR: FINVIZ API authentication failed」

考えられる原因:

  1. FINVIZ API キーが無効
  2. FINVIZ Elite のサブスクリプションの有効期限切れ
  3. API キーの形式が正しくない

解決方法:

  • FINVIZ Elite のサブスクリプションが有効であることを確認します
  • API キーに誤字がないか確認します(英数字の文字列である必要があります)
  • FINVIZ Elite アカウントにログインし、設定で API キーを確認します
  • FINVIZ Elite スクリーナーに手動でアクセスし、サブスクリプションを確認します
「ERROR: FINVIZ pre-screening failed or returned no results」

考えられる原因:

  1. FINVIZ API の接続問題
  2. スクリーニング基準が厳しすぎる(条件に合う銘柄がない)
  3. 市場環境(弱気相場では結果が少なくなる可能性があります)

解決方法:

  • インターネット接続を確認します
  • FINVIZ Elite のウェブサイトにアクセスできることを確認します
  • 代替手段として FMP のみを使う方法を試します:
    python3 scripts/screen_dividend_stocks.py
    
「WARNING: Rate limit exceeded」

解決方法: スクリプトは60秒後に自動的に再試行します。問題が続く場合:

  • 翌日まで待ちます(無料プランの制限は毎日リセットされます)
  • 分析する銘柄数を減らします(394行目の上限を変更します)
  • 有料の FMP プランへのアップグレードを検討します
「No stocks found matching all criteria」

解決方法: 基準が厳しすぎる可能性があります

  • P/E のしきい値を緩和します(20より大きくします)
  • 必要な配当利回りを引き下げます(3.5%より小さくします)
  • 必要な配当成長率を引き下げます(5%より小さくします)
  • 市場環境を確認します(弱気相場では条件を満たす銘柄が少なくなる可能性があります)
スクリプトの実行に時間がかかる

想定される動作: API 呼び出しのレート制限のため、スクリプトでは呼び出し間に 0.3 秒の遅延が入ります

  • 100 銘柄の分析には約 8~10 分かかります
  • 条件を満たす最初の 20~30 銘柄は、通常、最初の 50~70 銘柄を分析する間に見つかります

パフォーマンスとコストの最適化

API 呼び出しの比較

2 段階スクリーニング(FINVIZ + FMP):

  • FINVIZ:API 呼び出し 1 回
  • FMP Quote API:約 30~50 回(事前スクリーニングしたシンボルごとに 1 回)
  • FMP Financial Data:約 150~250 回(5 エンドポイント × 30~50 シンボル)
  • FMP の呼び出し合計:約 180~300 回

FMP のみのスクリーニング:

  • FMP Stock Screener:呼び出し 1 回(100~1000 銘柄を返します)
  • FMP Financial Data:約 500~5000 回(5 エンドポイント × 100~1000 シンボル)
  • FMP の呼び出し合計:約 500~5000 回

節約効果:FMP API の使用量を 60~94% 削減

コスト分析

FINVIZ Elite:

  • 月額:$39.50
  • 年額:$299.50(約 $24.96/月)

FMP API:

  • 無料プラン:1 日あたり 250 回(2 段階スクリーニングには十分です)
  • Starter プラン:1 日あたり 750 回で月額 $29.99
  • Professional プラン:1 日あたり 2000 回で月額 $79.99

おすすめ:

  • FMP の無料プランを利用する場合:2 段階スクリーニング(FINVIZ + FMP 無料プラン)を使用します
  • FMP の有料プランを利用する場合:どちらの方法も使用できます。2 段階方式のほうが高速です
  • 低予算の選択肢:無料プランで FMP のみを使用します(数日おきにスクリーニングを実行)
  • 最適な選択肢:FINVIZ Elite(年額 $330)+ FMP 無料プラン = 完全なソリューション

バージョン履歴

  • v1.1(2025年11月):2 段階スクリーニングに FINVIZ Elite の統合を追加
  • v1.0(2025年11月):包括的な複数フェーズのスクリーニングを備えた初回リリース

共通 FMP クライアント

FMP データへのアクセスには、同梱の生成済み scripts/fmp_client.py を使用します。既存の CLI キー/環境変数の優先順位、財務計算、および成功時の出力形式は維持されます。移行した処理では安定したエンドポイントのみを使用し、安定版リクエストが拒否または失敗した場合でも、廃止された v3 URL にはフォールバックしません。共通クライアントは、生のキーおよび URL エンコードされたキーが応答に含まれている場合にマスクし、不正な JSON が返された場合は 1 回再試行します。また、429 が返された場合は 60 秒待って 1 回再試行し、再度レート制限を受けると停止します。FINVIZ を使用する場合も、別のクライアントのままです。

コメント