canslim-screener について
William O'Neil の CANSLIM を構成する7項目すべてで米国株をスクリーニングし、順位付けするスキルです。ファンダメンタルズ、値動き、機関投資家の保有状況、市場動向を評価し、詳細な Markdown と JSON のレポートを生成します。
主な機能
- 01CANSLIMの7項目すべてに対応
- 02加重合成スコア
- 03保有データのFinvizフォールバック
- 04市場動向による判定制御
- 05順位付きMarkdown・JSONレポート
活用シーン
- 01銘柄群からCANSLIM候補を抽出
- 02成長株を業績とモメンタムで順位付け
- 03個別銘柄の項目別スコアを確認
- 04市場動向と銘柄順位を併せて確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tradermonty/ claude-trading-skills --skill canslim-screenerインストール後、Claude Code で/canslim-screenerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
requirements.txtreferences/canslim_methodology.mdfmp_api_endpoints.mdinterpretation_guide.mdscoring_system.mdscripts/check_institutional_endpoint.pyfinviz_stock_client.pyfmp_client.pyreport_generator.pyscorer.pyscreen_canslim.pyscripts/calculators/earnings_calculator.pygrowth_calculator.pyinstitutional_calculator.pyleadership_calculator.pymarket_calculator.pynew_highs_calculator.pysupply_demand_calculator.pyscripts/tests/conftest.pytest_canslim_calculators_coverage.pytest_canslim_coverage.pytest_canslim_fixes.pytest_fmp_fallback.pytest_fmp_stable_migration.pytest_institutional_fallback.pytest_leadership_rs.py詳細
CANSLIM 株式スクリーナー - フェーズ 3(完全版 CANSLIM)
概要
このスキルは、William O'Neil が確立した実証済みの CANSLIM 手法を使用して米国株をスクリーニングします。CANSLIM は、優れたファンダメンタルズと株価モメンタムを持つ成長株を特定するための体系的なアプローチです。CANSLIM では、7 つの主要要素を分析します。Current Earnings(直近の利益)、Annual Growth(年間成長率)、Newness/New Highs(新しさ/新高値)、Supply/Demand(需給)、Leadership/RS Rank(リーダーシップ/RS ランク)、Institutional Sponsorship(機関投資家の保有)、Market Direction(市場の方向性)です。
フェーズ 3 では、7 つの要素すべて(C、A、N、S、L、I、M)を実装し、完全版の手法の 100% を網羅しています。
2 段階のアプローチ:
- ステージ 1(FMP API + Finviz):7 つすべての CANSLIM 要素で銘柄ユニバースを分析します
- ステージ 2(レポート作成):複合スコアで順位付けし、実用的なレポートを生成します
主な機能:
- 加重要素を用いた複合スコアリング(0~100 スケール)
- 機関投資家保有データのFinviz フォールバック(FMP データが不完全な場合に自動実行)
- API 使用量を最適化する段階的フィルタリング
- JSON + Markdown 出力形式
- 評価区分:非常に優秀+(90 以上)、非常に優秀(80~89)、強い(70~79)、平均以上(60~69)
- 弱気相場への保護(M 要素によるゲーティング)
フェーズ 3.1 の要素ウェイト(O'Neil のオリジナルウェイト):
- C(直近の利益):15%
- A(年間成長率):20%
- N(新しさ):15%
- S(需給):15%
- L(リーダーシップ/RS ランク):20% — 複数期間の加重 RS(設定可能なベンチマークと比較した 3m/6m/12m)
- I(機関投資家):10%
- M(市場の方向性):5%
加重 RS の計算式:
Weighted RS = 0.40 × rel_3m + 0.30 × rel_6m + 0.30 × rel_12m
一部の期間が欠けている場合、利用可能な期間のウェイトを再正規化します。デフォルトのベンチマークは ^GSPC です。
--rs-benchmark SPY/QQQ/IWM/... で変更できます。
複数期間データが不完全な場合のフォールバック階層:
- ベンチマークがない場合 → 絶対株価パフォーマンスの加重値を使用し、20% のペナルティを適用します。
- すべての複数期間ウィンドウのデータが欠けていても、株価履歴が 50 本以上ある場合 → スコアリング入力として従来の 365 日間の全期間絶対リターンにフォールバックします(ベンチマークがない場合は 20% のペナルティを適用します)。
- 株価履歴が 50 本未満の場合 →
errorを設定してスコアを 0 にします。
今後のフェーズ:
- フェーズ 4:FINVIZ Elite 統合 → 実行を 10 倍高速化
このスキルを使用するタイミング
明示的なトリガー:
- 「CANSLIM 銘柄を探して」
- 「O'Neil の手法で成長株をスクリーニングして」
- 「利益とモメンタムが強い銘柄はどれ?」
- 「利益が加速し、52 週高値に近い銘柄を特定して」
- 「[sector/universe] で CANSLIM スクリーナーを実行して」
暗黙的なトリガー:
- ユーザーが大化け候補の特定を希望している
- ユーザーが実証済みのファンダメンタルズを持つ成長株を探している
- ユーザーが過去の勝ち組銘柄に基づく体系的な銘柄選択を希望している
- ユーザーが O'Neil の基準を満たす銘柄のランキングを必要としている
使用しない場合:
- バリュー投資を重視する場合(代わりに value-dividend-screener を使用してください)
- インカム/配当を重視する場合(代わりに dividend-growth-pullback-screener を使用してください)
- 弱気相場の状況(M 要素が警告を出します。現金比率を高めることを検討してください)
前提条件
API の要件:
- FMP API キー(無料プラン:1 日あたり 250 回の呼び出し。35 銘柄に十分です。Starter プランは月額 $29.99 で 40 銘柄以上に対応します)
- 登録先:https://site.financialmodelingprep.com/developer/docs
- 環境変数で設定します:
export FMP_API_KEY=your_key_here
Python の依存関係:
- Python 3.9+
requests(FMP API 呼び出し)beautifulsoup4(Finviz のウェブスクレイピング)lxml(HTML 解析)
インストール:
pip install requests beautifulsoup4 lxml
出力
出力ディレクトリ: reports/(デフォルト)または --output-dir で指定したディレクトリ
生成ファイル:
canslim_screener_YYYY-MM-DD_HHMMSS.json- プログラムで使用するための構造化データcanslim_screener_YYYY-MM-DD_HHMMSS.md- 人が読みやすいレポート
レポートの内容:
- 市場状況の概要(トレンド、M スコア、警告)
- CANSLIM 候補の上位 N 件(総合スコア順)
- 各銘柄の構成要素の内訳(C、A、N、S、L、I、M の各スコアと詳細)
- 評価の解釈(Exceptional+/Exceptional/Strong/Above Average)
- 品質に関する警告とデータソースに関する注記
- 要約統計(評価の分布)
評価区分:
- Exceptional+(90~100): すべての構成要素がほぼ完璧で、積極的な買い
- Exceptional(80~89): 卓越したファンダメンタルズとモメンタムがあり、強い買い
- Strong(70~79): すべての構成要素が堅調で、標準的な買い
- Above Average(60~69): 軽微な弱点はあるものの基準を満たしており、押し目での買い
ワークフロー
ステップ 1:API アクセスと要件を確認する
ユーザーに FMP API キーが設定されているか確認します:
# Check environment variable
echo $FMP_API_KEY
# If not set, prompt user to provide it
要件:
- FMP API キー(無料プラン:1 日 250 回の呼び出し。40 銘柄には十分です)
- 必要なライブラリを含む Python 3.9 以降:
requests(FMP API 呼び出し)beautifulsoup4(Finviz のウェブスクレイピング)lxml(HTML 解析)
インストール:
pip install requests beautifulsoup4 lxml
API キーがない場合は、ユーザーに次の手順を案内します:
- https://site.financialmodelingprep.com/developer/docs で登録します
- 無料の API キーを取得します(1 日 250 回の呼び出し)
- 環境変数を設定します:
export FMP_API_KEY=your_key_here
ステップ 2:銘柄ユニバースを決定する
オプション A:デフォルトのユニバース(推奨) スクリプトに定義済みの、時価総額上位 40 銘柄の S&P 500 株を使用します:
python3 skills/canslim-screener/scripts/screen_canslim.py
オプション B:カスタムユニバース ユーザーが特定の銘柄シンボルまたはセクターを指定します:
python3 skills/canslim-screener/scripts/screen_canslim.py \
--universe AAPL MSFT GOOGL AMZN NVDA META TSLA
オプション C:セクター別 ユーザーはセクターに特化したリスト(テクノロジー、ヘルスケアなど)を指定できます
API 使用量の考慮事項(フェーズ 3):
- 40 銘柄 × 1 銘柄あたり 7 回の FMP 呼び出し = 280 回の API 呼び出し
- FMP:1 銘柄あたり 7 回(profile、quote、income×2、historical_90d、historical_365d、institutional)
- Finviz:1 銘柄あたり約 1.8 回(機関投資家保有率のフォールバック、レート制限は 2 秒、FMP の使用量には含まれません)
- 市場データ(^GSPC quote、^VIX quote、^GSPC 52-week history):FMP の呼び出し 3 回
- 合計:スクリーニング 1 回につき FMP を約 283 回呼び出し(無料プランの上限 250 回を超過)
- 推奨: 無料プランでは
--max-candidates 35を使用します(35 × 7 + 3 = 248 回)。または、FMP Starter プラン(月額 $29.99、1 日 750 回の呼び出し)にアップグレードして、40 銘柄すべてをスクリーニングします
ステップ 3:CANSLIM スクリーニングスクリプトを実行する
適切なパラメーターを指定して、メインのスクリーニングスクリプトを実行します。
cd skills/canslim-screener/scripts
# Basic run (40 stocks, top 20 in report)
python3 screen_canslim.py --api-key $FMP_API_KEY
# Custom parameters
python3 screen_canslim.py \
--api-key $FMP_API_KEY \
--max-candidates 40 \
--top 20 \
--output-dir ../../../
# Custom RS benchmark (Phase 3.1)
python3 screen_canslim.py --rs-benchmark SPY
# Disable L component (saves per-stock 365-day fetch; L fixed at neutral 50)
python3 screen_canslim.py --disable-rs
スクリプトのワークフロー(フェーズ 3 - 完全版 CANSLIM):
- 市場の方向(M):S&P 500 のトレンドを 50 日 EMA と比較して分析します(正確な EMA 算出には実際の過去データを使用します)。
- 弱気相場が検出された場合(M=0)、現金比率を高めるようユーザーに警告します。
- S&P 500 の過去データ:M コンポーネントの EMA と L コンポーネントの RS 算出のため、52 週間分のデータを取得します。
- 銘柄分析:各銘柄について、次の項目を算出します。
- C コンポーネント:四半期 EPS/売上高の成長率(前年同期比)
- A コンポーネント:3 年間の EPS CAGR と安定性
- N コンポーネント:52 週間高値からの距離、ブレイクアウトの検出
- S コンポーネント:出来高に基づく蓄積/分配(上昇日の出来高と下落日の出来高)
- L コンポーネント:S&P 500 と比較した 52 週間の相対強度
- I コンポーネント:機関投資家の保有者数と保有率(Finviz によるフォールバックあり)
- 総合スコアの算出:7 つのコンポーネントすべての内訳を含む加重平均
- ランキング:総合スコアの高い順に並べ替えます。
- レポート作成:JSON と Markdown の出力を生成します。
予想実行時間(フェーズ 3):
- 40 銘柄:約 2 分(L コンポーネント用に各銘柄の 52 週間分の履歴データを追加取得)
- Finviz のフォールバックが発生すると、銘柄あたり約 2 秒追加されます(レート制限によるものです)。
- L コンポーネントには、各銘柄の 365 日分の過去データが必要です。
Finviz のフォールバック動作:
- FMP の
sharesOutstandingが利用できない場合に自動的に実行されます。 - Finviz.com から機関投資家の保有率をスクレイピングします(無料、API キー不要)。
- I コンポーネントの精度が 35/100(データ不完全)から 60-100/100(データ完全)に向上します。
- ユーザーには次のように表示されます:
✅ Using Finviz institutional ownership for NVDA: 68.3%
ステップ 4:スクリーニング結果を読み取って解析する
スクリプトは 2 つの出力ファイルを生成します。
canslim_screener_YYYY-MM-DD_HHMMSS.json- 構造化データcanslim_screener_YYYY-MM-DD_HHMMSS.md- 人が読みやすいレポート
上位候補を特定するには、Markdown レポートを読み取ります。
# Find the latest report
ls -lt canslim_screener_*.md | head -1
# Read the report
cat canslim_screener_YYYY-MM-DD_HHMMSS.md
レポートの構成(フェーズ 3 - 完全版 CANSLIM):
- 市場状況の概要(トレンド、M スコア、警告)
- CANSLIM の上位候補(順位順、N = --top パラメーター)
- 各銘柄の詳細:
- 総合スコアと評価(Exceptional+/Exceptional/Strong など)
- コンポーネントの内訳(C、A、N、S、L、I、M の各スコアと詳細)
- 解釈(評価の説明、ガイダンス、最も弱いコンポーネント)
- 警告(品質上の問題、市場状況、データソースに関する注記)
- 統計の概要(評価の分布)
- 手法に関する注記(フェーズ 3:7 コンポーネント、カバー率 100%)
レポート内のコンポーネントの詳細:
- S コンポーネント:「上昇/下落出来高比:1.06 ✓ 蓄積」
- L コンポーネント(フェーズ 3.1):「3m/6m/12m:+12.4%/+18.7%/+44.1%(相対 +5.2%/+8.3%/+22.0%) | RS:88(Strong)」
- I コンポーネント:「保有者 6199 人、保有率 68.3% ⭐ スーパー投資家」
フェーズ 3.1 のレポートでは、候補一覧の上に新しい概要テーブルが表示されます。すばやく確認できるよう、順位、銘柄コード、総合スコア、評価、RS 評価、RS パーセンタイルが記載されます。
ステップ 5:有力候補を分析し、推奨を提示する
上位にランク付けされた銘柄を確認し、ナレッジベースと照合します。
参照するドキュメント:
references/interpretation_guide.md- 評価区分とポートフォリオの配分を理解するreferences/canslim_methodology.md- 各要素の意味を詳しく確認する(S と I を追加済み)references/scoring_system.md- スコアリングの計算式を理解する(フェーズ 3 の重み付け)
分析の枠組み:
**Exceptional+ 銘柄(90~100 ポイント)**の場合:
- すべての要素がほぼ完璧(C≥85、A≥85、N≥85、S≥80、L≥85、I≥80、M≥80)
- 推奨:ただちに買い、積極的なポジション配分(ポートフォリオの 15~20%)
- 例:「NVDA のスコアは 97.2。四半期利益は急伸(100)、3 年間の成長は堅調(95)、高値を更新(98)、出来高は買い集めを示す(85)、RS はリーダー水準(92)、機関投資家の支援は強い(90)、市場は上昇トレンド(100)」
**Exceptional 銘柄(80~89 ポイント)**の場合:
- 卓越したファンダメンタルズに強いモメンタムを備えています
- 推奨:強く買い、標準的なポジション配分(ポートフォリオの 10~15%)
**Strong 銘柄(70~79 ポイント)**の場合:
- すべての要素が堅調で、弱点はわずかです
- 推奨:買い、標準的なポジション配分(ポートフォリオの 8~12%)
- フェーズ 3 の例:「銘柄のスコアは 77.5。利益は堅調(85)、成長は安定(80)、高値に近い(70)、買い集めは中程度(60)、RS はリーダー水準(75)、機関投資家の保有状況は良好(60)、市場は上昇トレンド(90)」
**Above Average 銘柄(60~69 ポイント)**の場合:
- 基準を満たしており、弱い要素は 1 つです
- 推奨:押し目で買い、保守的なポジション配分(ポートフォリオの 5~8%)
弱気相場での例外ルール:
- M 要素が 0 の場合(弱気相場を検出)、ほかのスコアにかかわらず、買ってはいけません
- 推奨:現金比率を 80~100%に引き上げ、市場の回復を待ちます
- 弱気相場では CANSLIM は機能しません(4 銘柄中 3 銘柄は市場のトレンドに従います)
ステップ 6:ユーザー向けレポートを作成する
簡潔で、実行に移せる要約をユーザー向けに作成します。
レポート形式:
# CANSLIM Stock Screening Results (Phase 3 - Full CANSLIM)
**Date:** YYYY-MM-DD
**Market Condition:** [Trend] - M Score: [X]/100
**Stocks Analyzed:** [N]
**Components:** C, A, N, S, L, I, M (7 of 7, 100% coverage)
## Market Summary
[2-3 sentences on current market environment based on M component]
[If bear market: WARNING - Consider raising cash allocation]
## Top 5 CANSLIM Candidates
### 1. [SYMBOL] - [Company Name] ⭐⭐⭐
**Score:** [X.X]/100 ([Rating])
**Price:** $[XXX.XX] | **Sector:** [Sector]
**Component Breakdown:**
- C (Earnings): [X]/100 - [EPS growth]% QoQ, [Revenue growth]% revenue
- A (Growth): [X]/100 - [CAGR]% 3yr EPS CAGR
- N (Newness): [X]/100 - [Distance]% from 52wk high
- S (Supply/Demand): [X]/100 - Up/Down Volume Ratio: [X.XX]
- L (Leadership): [X]/100 - 52wk: [+X.X]% ([+X.X]% vs S&P) RS: [XX]
- I (Institutional): [X]/100 - [N] holders, [X.X]% ownership [⭐ Superinvestor if present]
- M (Market): [X]/100 - [Trend]
**Interpretation:** [Rating description and guidance]
**Weakest Component:** [X] ([score])
**Data Source Note:** [If Finviz used: "Institutional data from Finviz"]
[Repeat for top 5 stocks]
## Investment Recommendations
**Immediate Buy List (90+ score):**
- [List stocks with exceptional+ ratings]
- Position sizing: 15-20% each
**Strong Buy List (80-89 score):**
- [List stocks with exceptional ratings]
- Position sizing: 10-15% each
**Watchlist (70-79 score):**
- [List stocks with strong ratings]
- Buy on pullback
## Risk Factors
- [Identify any quality warnings from components]
- [Market condition warnings]
- [Sector concentration risks if applicable]
- [Data source reliability notes if Finviz heavily used]
## Next Steps
1. Conduct detailed fundamental analysis on top 3 candidates
2. Check earnings calendars for upcoming reports
3. Review technical charts for entry timing
4. [If bear market: Wait for market recovery before deploying capital]
---
**Note:** This is Phase 3 (Full CANSLIM: C, A, N, S, L, I, M - 100% coverage).
リソース
スクリプトディレクトリ(scripts/)
主なスクリプト:
-
screen_canslim.py- メインのオーケストレータースクリプト- スクリーニングワークフローのエントリーポイント
- 引数の解析、API の調整、ランキング、レポート作成を処理します
- 使用方法:
python3 screen_canslim.py --api-key KEY [options]
-
fmp_client.py- FMP API クライアントラッパー- レート制限(呼び出し間隔は 0.3 秒)
- 429 エラーの処理(60 秒後に再試行)
- セッションベースのキャッシュ
- メソッド:
get_income_statement()、get_quote()、get_historical_prices()、get_institutional_holders()
-
finviz_stock_client.py- Finviz のウェブスクレイピングクライアント ← 新規- BeautifulSoup ベースの HTML 解析
- Finviz.com から機関投資家の保有率を取得します
- レート制限(呼び出し間隔は 2.0 秒)
- API キー不要(無料のウェブスクレイピング)
- メソッド:
get_institutional_ownership()、get_stock_data()
計算モジュール(scripts/calculators/):
-
earnings_calculator.py- C コンポーネント(当期利益)- 四半期 EPS/売上高の前年比成長率
- スコア:50%以上 = 100 点、30~49% = 80 点、18~29% = 60 点
-
growth_calculator.py- A コンポーネント(年間成長率)- 3 年間の EPS CAGR を計算
- 安定性チェック(マイナス成長の年がないこと)
- スコア:40%以上 = 90 点、30~39% = 70 点、25~29% = 50 点
-
new_highs_calculator.py- N コンポーネント(新高値)- 52 週高値からの距離
- 出来高で確認されたブレイクアウトの検出
- スコア:高値の 5%以内+ブレイクアウト = 100 点、高値の 10%以内+ブレイクアウト = 80 点
-
supply_demand_calculator.py- S コンポーネント(需給) ← 新規- 出来高に基づく買い集め/売り分布の分析
- 上昇日の出来高と下落日の出来高の比率(過去 60 日間)
- スコア:比率 2.0 以上 = 100 点、1.5~2.0 = 80 点、1.0~1.5 = 60 点
-
leadership_calculator.py- L コンポーネント(リーダーシップ/相対強度)- S&P 500 をベンチマークとした 52 週間の株価パフォーマンス
- RS ランクの推定(1~99 のスケール、O'Neil 方式)
- スコア:RS 90 以上で市場を上回る = 100 点、RS 80~89 = 80 点
-
institutional_calculator.py- I コンポーネント(機関投資家)- 機関投資家の保有者数(FMP から取得)
- 保有率(FMP または Finviz をフォールバックとして使用)
- スーパーインベスターの検出(Berkshire Hathaway、Baupost など)
- スコア:保有者数 50~100 人+保有率 30~60% = 100 点
-
market_calculator.py- M コンポーネント(市場の方向性)- 50 日 EMA に対する S&P 500 の状況
- VIX による調整済みスコア
- スコア:強い上昇トレンド = 100 点、上昇トレンド = 80 点、弱気相場 = 0 点
サポートモジュール:
-
scorer.py- 複合スコアの計算- フェーズ 3 の加重平均:C×15% + A×20% + N×15% + S×15% + L×20% + I×10% + M×5%
- 評価の解釈(例外的/非常に優秀/強い、など)
- 最低基準の検証(7 つすべてのコンポーネントが基準を満たす必要があります)
-
report_generator.py- 出力の生成- JSON エクスポート(プログラムでの利用向け)
- Markdown エクスポート(人が読みやすい形式)
- フェーズ 3 のコンポーネント内訳テーブル(7 つすべてのコンポーネント)
- 要約統計の計算
References Directory(references/)
ナレッジベース:
-
references/canslim_methodology.md(27KB)- CANSLIMの完全な解説- O'Neilによる元のしきい値を含む7つの全要素
- S要素(出来高の蓄積/分配)の詳細な解説
- L要素(リーダーシップ/相対的強さ)の詳細な解説
- I要素(機関投資家の支援)の詳細な解説
- 歴史的な事例(AAPL 2009、NFLX 2013、TSLA 2019、NVDA 2023)
-
references/scoring_system.md(21KB)- 技術的なスコアリング仕様(Phase 3)- Phase 3の要素ごとの重みと計算式(7つの全要素)
- 評価区分(90-100、80-89など)
- 7つの全要素の最小しきい値
- 総合スコアの計算例
-
references/fmp_api_endpoints.md(18KB)- API統合ガイド(Phase 3)- 7つの全要素に必要なエンドポイント
- L要素:52週間の過去株価エンドポイント
- 機関投資家保有者エンドポイントのドキュメント
- Finvizフォールバック戦略の説明
- レート制限戦略
- コスト分析(Phase 3:40銘柄で約283回のFMP呼び出しとなり、無料プランの上限250回を超過)
-
references/interpretation_guide.md(18KB)- ユーザー向けガイダンス- ポートフォリオ構築ルール
- 評価別のポジションサイズ
- エントリー/エグジット戦略
- 弱気相場への対策ルール
Referencesの使用方法:
- O'Neilのシステムを理解するため、まず
references/canslim_methodology.mdを読んでください(SとIも追加されています) - 結果を分析する際は
references/interpretation_guide.mdを参照してください - スコアが予想外の場合は
references/scoring_system.mdを参照してください - APIのトラブルシューティングやFinvizのフォールバックに関する問題は
references/fmp_api_endpoints.mdを確認してください
トラブルシューティング
問題1:FMP APIのレート制限超過
症状:
ERROR: 429 Too Many Requests - Rate limit exceeded
Retrying in 60 seconds...
原因:
- 短時間に複数のスクリーニングを実行している
- 1日あたり250回(無料プランの上限)を超過している
- 同じAPIキーを他のアプリケーションが使用している
解決策:
- 待ってから再試行:スクリプトは60秒後に自動で再試行します
- 対象銘柄を減らす:
--max-candidates 30を使用してAPIの使用量を減らします - 1日の使用量を確認:無料プランはUTCの午前0時にリセットされます
- プランをアップグレード:FMP Starter($29.99/月)では1日750回の呼び出しが可能です
問題2:必要なライブラリが見つからない
症状:
ERROR: required libraries not found. Install with: pip install beautifulsoup4 requests lxml
解決策:
# Install all required libraries
pip install requests beautifulsoup4 lxml
# Or install individually
pip install beautifulsoup4
pip install requests
pip install lxml
問題3:Finvizフォールバックの実行が遅い
症状:
Execution time: 2 minutes 30 seconds for 40 stocks (slower than expected)
原因:
- Finvizによるレート制限(リクエストごとに2.0秒)
- FMPのデータ不足により、すべての銘柄でフォールバックが発生している
解決策:
- 待ち時間を許容する:Finvizフォールバックを使用する場合、40銘柄で1~2分かかるのは通常です
- フォールバックの使用状況を確認する:ログで「Using Finviz institutional ownership」メッセージを確認してください
- レート制限を下げる(上級者向け):
finviz_stock_client.pyを編集し、rate_limit_seconds=2.0を1.5に変更します(リスク:IPがブロックされる可能性があります)
注: Finvizのフォールバックでは銘柄ごとに約2秒追加されますが、I要素の精度が大幅に向上します(35 → 60-100ポイント)。
問題4:Finvizのウェブスクレイピングに失敗する
症状:
WARNING: Finviz request failed with status 403 for NVDA
⚠️ Using Finviz institutional ownership data - FMP shares outstanding unavailable. Finviz fallback also unavailable. Score reduced by 50%.
原因:
- Finvizがスクレイピングのリクエストをブロックしている(User-Agentの検出)
- レート制限を超過している(リクエストが多すぎる)
- ネットワークの問題またはFinvizの停止
解決策:
- 待ってから再試行する:レート制限は数分後にリセットされます
- インターネット接続を確認する:finviz.comへのネットワークアクセスを確認してください
- フォールバックを受け入れる:スクリプトはFMPの保有者数のみを使用して続行します(Iスコアは70/100が上限)
- 手動で確認する:IPがブロックされていないか、Finvizのウェブサイトで手動で確認してください
グレースフル・デグラデーション:
- Finvizの問題によってスクリプトが失敗することはありません
- FMPの保有者数のみを使用するフォールバックに切り替わります
- レポートに品質に関する警告が表示されます
問題 5:最低基準を満たす銘柄がない
症状:
✓ Successfully analyzed 40 stocks
Top 5 Stocks:
1. AAPL - 58.3 (Average)
2. MSFT - 55.1 (Average)
...
原因:
- 弱気相場の状況(M コンポーネントが低い)
- 選択したユニバースに成長株が含まれていない
- 成長株から市場の関心が移っている
解決策:
- M コンポーネントを確認する:M=0(弱気相場)の場合は、CANSLIM のルールに従って現金比率を高めます
- ユニバースを拡大する:別のセクターや時価総額の範囲を試します
- 期待値を下げる:弱い市場では、平均スコア(55~65)でも売買の判断材料になる場合があります
- より良いセットアップを待つ:CANSLIM は強気相場で最も効果を発揮します
問題 6:データ品質に関する警告
症状:
⚠️ Revenue declining despite EPS growth (possible buyback distortion)
⚠️ Using Finviz institutional ownership data (68.3%) - FMP shares outstanding unavailable.
解釈:
- これらはエラーではありません。計算ツールによる品質フラグです
- 売上高の警告:EPS 成長は、オーガニック成長ではなく自社株買いによる可能性があります
- Finviz の警告:データソースが FMP から Finviz に切り替わりました(精度は引き続き保たれます)
対応:
- 完全なレポートでコンポーネントの詳細を確認します
- ファンダメンタル分析で照合します
- リスクレベルに応じてポジションサイズを調整します
- Finviz のデータは信頼できます。データソースの警告に対する対応は不要です
重要な注意事項
フェーズ 3 の実装状況
これは、7 つすべての CANSLIM コンポーネントを実装するフェーズ 3です。
- ✅ C(現在の収益)- 実装済み
- ✅ A(年間成長率)- 実装済み
- ✅ N(新しさ)- 実装済み
- ✅ S(需給)- 実装済み
- ✅ L(リーダーシップ/RS ランク)- 実装済み
- ✅ I(機関投資家)- 実装済み
- ✅ M(市場の方向性)- 実装済み
意味するところ:
- 合成スコアは、CANSLIM の完全な手法の**100%**を反映します
- O'Neil の元のコンポーネントの重みを使用します(C 15%、A 20%、N 15%、S 15%、L 20%、I 10%、M 5%)
- L コンポーネント(重み 20%)は、A と並んで個別要因として最も大きく、相対的な強さを伴うリーダーシップを重視します
- M コンポーネントは、推定値で代用せず、過去のデータに基づく実際の 50 日 EMA を使用します
Finviz 統合のメリット
自動フォールバックシステム:
- FMP API が
sharesOutstandingを提供しない場合、Finviz が自動的に有効になります - Finviz.com から機関投資家の保有比率をスクレイピングします(無料、API キー不要)
- I コンポーネントの精度が 35/100(部分データ)から 60~100/100(完全データ)に向上します
データソースの優先順位:
- FMP API(プライマリ):機関投資家の保有者数と発行済み株式数による計算
- Finviz(フォールバック):ウェブページから取得する機関投資家の直接保有比率
- 部分データ(最後の手段):保有者数のみを使用し、50% のペナルティを適用
テスト済みの信頼性:
- 39/39 銘柄で Finviz 経由の保有比率取得に成功(成功率 100%)
- 平均実行時間:1 銘柄あたり 2.54 秒
- テスト中にエラーや IP ブロックは発生していません
今後の機能強化
フェーズ 4(計画中):
- FINVIZ Elite を統合して事前スクリーニングを実施
- 実行時間:2 分 → 10~15 秒
- FMP API の使用量を 90% 削減
- より大きなユニバースに対応可能(100 銘柄以上)
データソースの帰属
- FMP API:損益計算書、株価、過去の価格、主要指標、機関投資家の保有者情報
- Finviz:機関投資家の保有比率(フォールバック)、市場データ
- 手法:William O'Neil 著『How to Make Money in Stocks』(第 4 版)
- スコアリングシステム:IBD MarketSmith の独自システムを基に採用
免責事項
このスクリーナーは、教育および情報提供のみを目的としています。
- 投資助言ではありません
- 過去の実績は、将来の成果を保証するものではありません
- CANSLIM の手法は、強気相場で最も効果を発揮します(M の要素がそれを確認します)
- 投資判断を行う前に、ご自身で調査し、ファイナンシャルアドバイザーに相談してください
- オニールが挙げた過去の勝ち銘柄には AAPL(2009年:+1,200%)、NFLX(2013年:+800%)がありますが、業績が振るわない銘柄も多くあります
バージョン: Phase 3.1(複数期間の RS)
最終更新日: 2026-05-03
API の要件: FMP API(無料プラン:最大35銘柄。40銘柄の場合は Starter プランを推奨)+ Finviz 用の BeautifulSoup/requests/lxml
実行時間: 40銘柄で約2分
出力形式: JSON + Markdown(Summary Table と schema_version: "3.1" が追加されました)
実装済みコンポーネント: C、A、N、S、L、I、M(7項目中7項目、カバレッジ100%)
Phase 3.1 の追加機能: 複数期間の RS(3か月/6か月/12か月)、--rs-benchmark、--disable-rs、
新しい RS フィールド(rs_rating、rs_rank_percentile、rs_3m_return、rs_6m_return、
rs_12m_return、rs_benchmark、rs_benchmark_relative_return、rs_component_score、
benchmark_52w_performance)。