mcpField
C
canslim-screener

canslim-screener

github.com/mphinanceその他3287 回インストール3 日前に更新
リポジトリ

canslim-screener について

William O'Neil の7項目からなる CANSLIM 手法で米国株をスクリーニングする Python スキルです。市場、業績、成長、株価、機関投資家のデータを採点・順位付けし、JSON と Markdown のレポートを生成します。

主な機能

  1. 017つの CANSLIM 項目を採点
  2. 02加重総合スコアで銘柄を順位付け
  3. 03機関投資家データ不足時に Finviz を利用
  4. 04候補を段階的に絞り込み
  5. 05JSON と Markdown のレポート生成
  6. 06弱気相場の状況を警告

活用シーン

  1. 01指定した米国株リストの選別
  2. 02成長株候補の順位付け
  3. 03銘柄ごとの項目別スコアの確認

インストール

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

$npx skills add https://github.com/mphinance/alpha-skills --skill canslim-screener

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

同梱ファイル

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

README.md
references/
canslim_methodology.md
fmp_api_endpoints.md
interpretation_guide.md
scoring_system.md
scripts/
check_institutional_endpoint.py
finviz_stock_client.py
fmp_client.py
report_generator.py
scorer.py
screen_canslim.py
scripts/calculators/
earnings_calculator.py
growth_calculator.py
institutional_calculator.py
leadership_calculator.py
market_calculator.py
new_highs_calculator.py
supply_demand_calculator.py
scripts/tests/
conftest.py
test_canslim_fixes.py
test_fmp_fallback.py

詳細

CANSLIM 株式スクリーナー - フェーズ 3(完全版 CANSLIM)

概要

このスキルは、ウィリアム・オニールの実績ある CANSLIM 手法を用いて米国株をスクリーニングします。これは、強固なファンダメンタルズと価格モメンタムを備えた成長株を特定するための体系的なアプローチです。CANSLIM は 7 つの主要コンポーネントを分析します:Current Earnings(当期利益)、Annual Growth(年間成長率)、Newness/New Highs(新規性/新高値)、Supply/Demand(需給)、Leadership/RS Rank(リーダーシップ/RS ランク)、Institutional Sponsorship(機関投資家の支援)、Market Direction(市場の方向性)です。

フェーズ 3 は 7 つのコンポーネントのうち 7 つすべて(C、A、N、S、L、I、M)を実装しており、完全な手法の 100% を表します。

2 段階アプローチ:

  1. ステージ 1(FMP API + Finviz):7 つの CANSLIM コンポーネントすべてで銘柄ユニバースを分析
  2. ステージ 2(レポーティング):総合スコアでランク付けし、実用的なレポートを生成

主な機能:

  • 重み付けされたコンポーネントによる総合スコアリング(0~100 スケール)
  • 機関投資家保有データのための Finviz フォールバック(FMP データが不完全な場合に自動実行)
  • API 使用量を最適化する段階的フィルタリング
  • JSON + Markdown 出力形式
  • 評価バンド:Exceptional+(90+)、Exceptional(80~89)、Strong(70~79)、Above Average(60~69)
  • 弱気市場の保護(M コンポーネントによるゲーティング)

フェーズ 3 のコンポーネント重み(オニールのオリジナル重み):

  • C(当期利益):15%
  • A(年間成長率):20%
  • N(新規性):15%
  • S(需給):15%
  • L(リーダーシップ/RS ランク):20%
  • I(機関投資家):10%
  • M(市場の方向性):5%

今後のフェーズ:

  • フェーズ 4:FINVIZ Elite 統合 → 実行速度が 10 倍

このスキルを使用する場面

明示的なトリガー:

  • 「CANSLIM 株を探して」
  • 「オニールの手法で成長株をスクリーニングして」
  • 「強い利益とモメンタムを持つ株はどれ?」
  • 「利益が加速している 52 週高値付近の株を特定して」
  • 「[セクター/ユニバース] で CANSLIM スクリーナーを実行して」

暗黙的なトリガー:

  • ユーザーがテンバガー候補を特定したい
  • ユーザーが実績あるファンダメンタルズを持つ成長株を探している
  • ユーザーが過去の勝ち馬に基づく体系的な銘柄選定を求めている
  • ユーザーがオニールの基準を満たす銘柄のランク付けされたリストを必要としている

使用すべきでない場合:

  • バリュー投資が中心(代わりに value-dividend-screener を使用)
  • インカム/配当が中心(代わりに dividend-growth-pullback-screener を使用)
  • 弱気市場の状況(M コンポーネントが警告を発します - 現金比率を高めることを検討してください)

前提条件

API 要件:

  • FMP API キー(無料枠:1 日 250 コール、35 銘柄には十分。Starter 枠は月額 $29.99 で 40 銘柄以上に対応)

Python 依存関係:

  • Python 3.7+
  • 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 スコア、警告)
  • 上位 N 件の CANSLIM 候補(総合スコアでランク付け)
  • 各銘柄のコンポーネント内訳(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.7+ と必要なライブラリ:
    • requests(FMP API 呼び出し)
    • beautifulsoup4(Finviz の Web スクレイピング)
    • lxml(HTML パース)

インストール:

pip install requests beautifulsoup4 lxml

API キーが存在しない場合は、ユーザーを次のように案内します:

  1. https://site.financialmodelingprep.com/developer/docs でサインアップする
  2. 無料の API キーを取得する(1 日 250 コール)
  3. 環境変数を設定する: 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 銘柄 × 7 FMP コール/銘柄 = 280 API コール
    • FMP: 7 コール/銘柄(profile、quote、income×2、historical_90d、historical_365d、institutional)
    • Finviz: 約 1.8 コール/銘柄(機関保有比率のフォールバック、2 秒のレート制限、FMP 予算にはカウントされません)
  • 市場データ(^GSPC クォート、^VIX クォート、^GSPC 52 週ヒストリー): 3 FMP コール
  • 合計: 1 回のスクリーニング実行あたり約 283 FMP コール(無料枠の 250 を超過)
  • 推奨: 無料枠では --max-candidates 35 を使用する(35 × 7 + 3 = 248 コール)、または 40 銘柄の完全なスクリーニングのために FMP Starter 枠(月額 $29.99、1 日 750 コール)にアップグレードする
ステップ 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 ../../../

スクリプトのワークフロー(フェーズ 3 - 完全な CANSLIM):

  1. 市場の方向性(M): S&P 500 のトレンドを 50 日 EMA と比較して分析します(正確な EMA のために実際のヒストリカルデータを使用)
    • 弱気市場が検出された場合(M=0)、ユーザーに現金比率を高めるよう警告します
  2. S&P 500 ヒストリカルデータ: M コンポーネントの EMA と L コンポーネントの RS 計算のために 52 週データを取得します
  3. 銘柄分析: 各銘柄について以下を計算します:
    • C コンポーネント: 四半期 EPS/売上の成長率(前年比)
    • A コンポーネント: 3 年間の EPS CAGR と安定性
    • N コンポーネント: 52 週高値からの距離、ブレイクアウトの検出
    • S コンポーネント: 出来高ベースの買い集め/売り抜け(上昇日と下落日の出来高)
    • L コンポーネント: S&P 500 に対する 52 週相対強度
    • I コンポーネント: 機関投資家の保有者数 + 保有比率(Finviz フォールバック付き)
  4. 複合スコアリング: 7 つのコンポーネントすべての内訳を含む加重平均
  5. ランキング: 複合スコアで並べ替え(高い順)
  6. レポート: 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 スコア、警告)
  • 上位 N 件の CANSLIM 候補 (ランク付け、N = --top パラメータ)
  • 各銘柄について:
    • 総合スコアと評価 (Exceptional+/Exceptional/Strong など)
    • コンポーネントの内訳 (C、A、N、S、L、I、M スコアと詳細)
    • 解釈 (評価の説明、ガイダンス、最も弱いコンポーネント)
    • 警告 (品質上の問題、市場環境、データソースに関する注記)
  • 集計統計 (評価の分布)
  • 方法論の注記 (フェーズ 3: 7 つのコンポーネント、100% のカバレッジ)

レポート内のコンポーネントの詳細:

  • S コンポーネント: "Up/Down Volume Ratio: 1.06 ✓ Accumulation"
  • L コンポーネント: "52wk: +45.2% (+22.1% vs S&P) RS: 88"
  • I コンポーネント: "6199 holders, 68.3% ownership ⭐ Superinvestor"
ステップ 5: 上位候補を分析して推奨事項を提示する

上位にランク付けされた銘柄を確認し、ナレッジベースと照合します:

参照すべきドキュメント:

  1. references/interpretation_guide.md - 評価の区分とポートフォリオ配分を理解する
  2. references/canslim_methodology.md - コンポーネントの意味を深く掘り下げる (現在は S と I を含む)
  3. 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/)

ナレッジベース:

  • 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) - テクニカルスコアリング仕様(フェーズ 3)

    • フェーズ 3 のコンポーネントの重みと計算式(全 7 コンポーネント)
    • 解釈の区分(90-100、80-89 など)
    • 全 7 コンポーネントの最小しきい値
    • 総合スコアの計算例
  • references/fmp_api_endpoints.md (18KB) - API 統合ガイド(フェーズ 3)

    • 全 7 コンポーネントに必要なエンドポイント
    • L コンポーネント: 52 週間の過去株価エンドポイント
    • 機関投資家保有者エンドポイントのドキュメント
    • Finviz フォールバック戦略の説明
    • レート制限戦略
    • コスト分析(フェーズ 3: 40 銘柄で約 283 回の FMP 呼び出し、無料枠の 250 回を超過)
  • references/interpretation_guide.md (18KB) - ユーザーガイダンス

    • ポートフォリオ構築ルール
    • 評価別のポジションサイジング
    • エントリー/エグジット戦略
    • 弱気相場の保護ルール

リファレンスの使用方法:

  • まず references/canslim_methodology.md を読んで O'Neil のシステムを理解してください(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 キーを使用している

解決策:

  1. 待機して再試行: スクリプトは 60 秒後に自動的に再試行します
  2. 対象ユニバースを縮小: --max-candidates 30 を使用して API 使用量を減らします
  3. 1 日の使用量を確認: 無料枠は UTC の午前 0 時にリセットされます
  4. プランをアップグレード: 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 データの欠落により、すべての銘柄でフォールバックが発生している

解決策:

  1. 遅延を受け入れる: Finviz フォールバックでは 40 銘柄で 1〜2 分かかるのは正常です
  2. フォールバックの使用状況を監視: ログで「Using Finviz institutional ownership」というメッセージを確認してください
  3. レート制限を下げる(上級者向け): finviz_stock_client.py を編集し、rate_limit_seconds=2.0 を 1.5 に変更します(リスク: IP ブロック)

注意: Finviz フォールバックは銘柄ごとに約 2 秒を追加しますが、I コンポーネントの精度を大幅に向上させます(35 → 60-100 点)。

問題 4: Finviz の Web スクレイピングの失敗

症状:

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 のダウンタイム

解決策:

  1. 待機して再試行: レート制限は数分後にリセットされます
  2. インターネット接続を確認: finviz.com へのネットワークアクセスを確認してください
  3. フォールバックを受け入れる: スクリプトは FMP の保有者数のみで続行します(I スコアは 70/100 が上限)
  4. 手動で確認: IP がブロックされている場合は Finviz のウェブサイトを手動で確認してください

グレースフルデグラデーション:

  • スクリプトが Finviz の問題で失敗することはありません
  • FMP の保有者数のみにフォールバックします
  • ユーザーにはレポートで品質警告が表示されます
問題 5: 最低基準を満たす銘柄がない

症状:

✓ Successfully analyzed 40 stocks
Top 5 Stocks:
  1. AAPL  -  58.3 (Average)
  2. MSFT  -  55.1 (Average)
  ...

原因:

  • 弱気相場の状況(M コンポーネントが低い)
  • 選択したユニバースに成長株が不足している
  • 市場が成長からローテーションしている

解決策:

  1. M コンポーネントを確認する: M=0(弱気相場)の場合、CANSLIM のルールに従って現金比率を高めます
  2. ユニバースを拡大する: 別のセクターや時価総額レンジを試します
  3. 期待値を下げる: 平均スコア(55〜65)でも弱い市場では実行可能な場合があります
  4. より良いセットアップを待つ: 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 に切り替わりました(依然として正確です)

対応:

  1. 完全なレポートでコンポーネントの詳細を確認します
  2. ファンダメンタルズ分析とクロスチェックします
  3. リスクレベルに基づいてポジションサイズを調整します
  4. Finviz のデータは信頼できます — データソースの警告に対して対応は不要です

重要な注意事項

フェーズ 3 の実装状況

これは CANSLIM の 7 コンポーネントすべて(7 中 7)を実装したフェーズ 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(完全)に改善します

データソースの優先順位:

  1. FMP API(プライマリ): 機関投資家の保有者数 + 発行済み株式数の計算
  2. Finviz(フォールバック): Web ページからの直接的な機関投資家保有比率 %
  3. 部分的なデータ(最終手段): 保有者数のみ、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 コンポーネントが確認します)
  • 投資判断を行う前に、ご自身で調査を行い、ファイナンシャルアドバイザーに相談してください
  • O'Neil の過去の勝ち銘柄には AAPL(2009 年: +1,200%)、NFLX(2013 年: +800%)がありますが、多くの銘柄は成果を上げられません

バージョン: フェーズ 3 最終更新: 2026-02-20 API 要件: FMP API(無料枠: 最大 35 銘柄、40 銘柄には Starter 枠を推奨)+ Finviz 用の BeautifulSoup/requests/lxml 実行時間: 40 銘柄で約 2 分 出力形式: JSON + Markdown 実装済みコンポーネント: C、A、N、S、L、I、M(7 中 7、カバレッジ 100%)

コメント