CANSLIM Screener
William O’NeilのCANSLIM手法で米国成長株を7コンポーネントスコアリングするスキルです。
FMP必須
スキルパッケージをダウンロード (.skill) GitHubでソースを見る
目次
1. 概要
CANSLIM Screenerは、William O’Neilが著書「How to Make Money in Stocks」で体系化した成長株選定手法を実装したスキルです。過去数十年の歴史的大化け銘柄に共通する7つの特徴を定量的にスコアリングし、次のマルチバガー候補を識別します。
Phase 3(現行バージョン) では7コンポーネント全てを実装しており、CANSLIM手法の100%カバレッジを達成しています。
7つのCANSLIMコンポーネント
| コンポーネント | 説明 | ウェイト |
|---|---|---|
| C - Current Earnings | 四半期EPS/売上成長(前年同期比) | 15% |
| A - Annual Growth | 3年間のEPS CAGR(複合年間成長率) | 20% |
| N - Newness | 52週高値からの距離、ブレイクアウト検出 | 15% |
| S - Supply/Demand | 出来高ベースの蓄積/分配分析 | 15% |
| L - Leadership | 52週リラティブストレングス(vs S&P 500) | 20% |
| I - Institutional | 機関投資家保有率、スーパーインベスター検出 | 10% |
| M - Market Direction | S&P 500 vs 50日EMAのトレンド判定 | 5% |
解決する問題:
- O’NeilのCANSLIM条件を手動でチェックする手間を自動化
- 主観を排除した定量的スコアリングで成長株を客観的に評価
- ベアマーケット保護(Mコンポーネント)により不適切なタイミングでの買いを防止
2. 前提条件
FMP APIキーが必須です。無料ティア(250回/日)で35銘柄のスクリーニングが可能です。40銘柄フルスクリーニングにはStarterティア($29.99/月)が推奨されます。
| 項目 | 要否 | 説明 |
|---|---|---|
| FMP APIキー | 必須 | 決算データ、株価、機関投資家データの取得 |
| Python 3.7+ | 必須 | スクリプト実行用 |
requests |
必須 | FMP API通信 |
beautifulsoup4 |
必須 | Finviz機関投資家データのフォールバック取得 |
lxml |
必須 | HTML解析 |
インストール:
pip install requests beautifulsoup4 lxml
APIキー設定:
export FMP_API_KEY=your_key_here
APIコール予算
| 対象銘柄数 | FMPコール数 | 無料ティア対応 |
|---|---|---|
| 35銘柄 | 約248回 | 対応(250回/日制限内) |
| 40銘柄 | 約283回 | 超過(Starterティア推奨) |
1銘柄あたり7回のFMP APIコール(profile, quote, income x2, historical_90d, historical_365d, institutional)に加え、マーケットデータ3回(S&P 500 quote, VIX quote, S&P 500 52週履歴)が必要です。
3. クイックスタート
最小限の実行
# デフォルト設定(S&P 500 トップ40銘柄、上位20件をレポート)
python3 skills/canslim-screener/scripts/screen_canslim.py
カスタム設定
# 無料ティア向け(35銘柄、上位10件)
python3 skills/canslim-screener/scripts/screen_canslim.py \
--max-candidates 35 --top 10 --output-dir reports/
Claudeへの自然言語
CANSLIM手法で成長株をスクリーニングして。S&P 500のトップ銘柄を分析してほしい。
4. 仕組み
3ステージパイプライン
Stage 1: データ取得(FMP API + Finviz)
↓
Stage 2: 7コンポーネント計算
↓
Stage 3: 複合スコアリング・ランキング・レポート生成
Stage 1: データ取得
- FMP APIから決算データ(四半期・年次)、株価履歴、機関投資家データを取得
- FMPで
sharesOutstandingが未取得の場合、Finvizから機関投資家保有率をフォールバック取得
Stage 2: 7コンポーネント計算
各コンポーネントは0-100のスコアで評価されます:
- C (Current Earnings): EPS YoY成長率50%以上=100点、30-49%=80点、18-29%=60点
- A (Annual Growth): 3年EPS CAGR 40%以上=90点、30-39%=70点、25-29%=50点
- N (Newness): 52週高値から5%以内+ブレイクアウト=100点
- S (Supply/Demand): 上昇日出来高/下落日出来高比率 2.0以上=100点
- L (Leadership): 52週リラティブストレングス RS 90以上=100点
- I (Institutional): 50-100機関+30-60%保有率=100点
- M (Market Direction): 強い上昇トレンド=100点、ベアマーケット=0点
Stage 3: 複合スコアリング
複合スコア = C×15% + A×20% + N×15% + S×15% + L×20% + I×10% + M×5%
Finvizフォールバック
FMP APIで機関投資家データが不完全な場合、自動的にFinviz.comから保有率を取得します。これにより Iコンポーネントの精度が大幅に向上します(35点→60-100点)。
5. 使用例
例1: デフォルトS&P 500スクリーニング
プロンプト:
CANSLIM手法でS&P 500銘柄をスクリーニングして
Claudeの動作:
- デフォルトユニバース(S&P 500トップ40銘柄)を使用
- 全7コンポーネントを計算し複合スコアでランキング
- Markdown + JSONレポートを
reports/に保存
期待される出力: 上位20銘柄のスコアと各コンポーネント詳細の一覧
例2: 半導体セクター特化
プロンプト:
半導体セクターの銘柄でCANSLIMスクリーニングをして。
NVDA, AVGO, AMD, INTC, QCOM, MRVL, TXN, AMAT, LRCX, KLAC を分析して。
Claudeの動作:
python3 skills/canslim-screener/scripts/screen_canslim.py \
--universe NVDA AVGO AMD INTC QCOM MRVL TXN AMAT LRCX KLAC \
--output-dir reports/
なぜ有用か: 特定セクター内でCANSLIM基準を満たすリーダー銘柄を識別できます。
例3: 無料枠の最適化
プロンプト:
FMPの無料枠(250コール/日)に収まるようにCANSLIMスクリーニングしたい
Claudeの動作:
python3 skills/canslim-screener/scripts/screen_canslim.py \
--max-candidates 35 --top 10 --output-dir reports/
なぜ有用か: 35銘柄×7コール+マーケットデータ3コール=248コールで、無料ティアの250回制限内に収まります。
例4: コンポーネント詳細の解読
プロンプト:
NVDAのCANSLIMスコアの各コンポーネントを詳しく解説して
Claudeの動作:
- レポートからNVDAのエントリを抽出し、各コンポーネントの意味と評価基準を解説
- 例: 「C=100は四半期EPS成長率50%超を意味し、AI需要の爆発的な成長を反映しています」
なぜ有用か: スコアの背景にある投資判断の根拠を理解できます。
例5: ベアマーケットシナリオ
プロンプト:
Mコンポーネントが0(ベアマーケット)のとき、CANSLIMスクリーニングはどう解釈すべき?
Claudeの動作:
- M=0の場合の明確な警告を出力
- O’Neilの教え: 「4銘柄中3銘柄は市場トレンドに従う」を引用
- 推奨: 80-100%のキャッシュポジション、買い推奨なし
なぜ有用か: ベアマーケットでの過大なリスクテイクを防止できます。
例6: スコア解釈とポジションサイジング
プロンプト:
CANSLIMスコアが85の銘柄と72の銘柄、それぞれどれくらいのポジションで買うべき?
Claudeの動作:
- レーティングバンドに基づく推奨を提示:
- Exceptional (80-89): 強い買い推奨、ポートフォリオの10-15%
- Strong (70-79): 買い推奨、ポートフォリオの8-12%
- 最も弱いコンポーネントのリスク要因も解説
なぜ有用か: スコアに応じた適切なポジションサイズの指針を得られます。
6. 出力の読み方
レーティングバンド
| レーティング | スコア範囲 | 意味 | 推奨アクション |
|---|---|---|---|
| Exceptional+ | 90-100 | 全コンポーネント近完璧 | 即時買い、積極的サイジング(15-20%) |
| Exceptional | 80-89 | 優れたファンダメンタル + モメンタム | 強い買い、標準サイジング(10-15%) |
| Strong | 70-79 | 全コンポーネント堅実 | 買い、標準サイジング(8-12%) |
| Above Average | 60-69 | 最低基準クリア、一部弱み | プルバック買い、保守的サイジング(5-8%) |
レポート構造
# CANSLIM Stock Screening Results
├── Market Condition Summary(市場環境サマリー)
├── Top N CANSLIM Candidates(上位銘柄一覧)
│ ├── 各銘柄のComposite Score & Rating
│ ├── Component Breakdown(C, A, N, S, L, I, M)
│ ├── Interpretation(解釈・推奨)
│ └── Warnings(品質警告)
└── Summary Statistics(レーティング分布)
注意すべき品質警告
| 警告メッセージ | 意味 |
|---|---|
Revenue declining despite EPS growth |
EPS成長が自社株買いに依存している可能性 |
Using Finviz institutional ownership |
FMPデータ不足でFinvizフォールバック使用(精度は問題なし) |
Bear market detected (M=0) |
全銘柄の買い推奨を停止すべき |
7. Tips & ベストプラクティス
効果的なユニバース選定
- デフォルト(S&P 500トップ40) は安定した結果を得られますが、大型株に偏ります
- セクター特化 で半導体やバイオテク等のハイグロースセクターに集中すると、より高スコアの候補が見つかりやすいです
- カスタムユニバース で他のスクリーナー(FinViz等)の出力を入力として使えます
API予算の管理
- 1日に複数回実行する場合は
--max-candidatesを小さく設定 - 最初に少数銘柄でテスト実行し、結果を確認してからフルスクリーニング
- FMP無料ティアのリセットはUTC午前0時
ベアマーケットでの使い方
- M=0の場合、スコアが高い銘柄でも買わないのがO’Neilの鉄則
- ウォッチリストとして保存し、市場回復後にエントリーを検討
- 市場回復の確認には FTD Detector スキルが有用
8. 他スキルとの連携
CANSLIM → VCP Screener
CANSLIMで高スコアの銘柄群をVCP Screenerに渡し、ブレイクアウトタイミングを評価:
1. CANSLIM: 上位10銘柄を取得
2. VCP: --universe で銘柄を指定、VCPパターンの有無とピボットポイントを分析
CANSLIM → Technical Analyst
CANSLIMスコア80以上の銘柄について、週足チャートのテクニカル分析を実施:
1. CANSLIM: Exceptional以上の銘柄を特定
2. Technical Analyst: チャートパターン、サポート/レジスタンス、エントリータイミングを評価
FinViz → CANSLIM(プレスクリーニング)
FinVizで粗い絞り込みを行い、CANSLIM用のカスタムユニバースを構築:
1. FinViz: fa_epsqoq_o25,ta_sma200_pa で候補リスト取得
2. CANSLIM: --universe で渡して7コンポーネント詳細分析
決算モメンタムパイプライン
1. Earnings Trade Analyzer: 直近決算の反応をスコアリング
2. CANSLIM: 高グレード銘柄のファンダメンタル検証
3. PEAD Screener: プルバック→ブレイクアウトパターンを監視
9. トラブルシューティング
FMP APIレートリミット
ERROR: 429 Too Many Requests - Rate limit exceeded
対処:
- スクリプトは自動で60秒後にリトライ
--max-candidates 35で無料ティア内に収める- 毎日のリセットはUTC午前0時
依存パッケージ不足
ERROR: required libraries not found. Install with: pip install beautifulsoup4 requests lxml
対処:
pip install requests beautifulsoup4 lxml
Finviz 403 エラー
WARNING: Finviz request failed with status 403 for NVDA
対処:
- 一時的なレートリミット。数分後に再試行
- スクリプトはFMPデータのみで継続(Iスコアは上限70/100に制限)
- Finviz障害時も完全に失敗することはなく、品質警告付きで結果を出力
スコアが全体的に低い
原因: ベアマーケット(M=0)か、ユニバースに成長株が少ない
対処:
- Mコンポーネントを確認 → 0ならベアマーケットで正常動作
- グロースセクター(Technology, Healthcare)の銘柄でリトライ
- CANSLIM手法はブルマーケットで最も効果を発揮
10. リファレンス
CLIオプション一覧
python3 skills/canslim-screener/scripts/screen_canslim.py [OPTIONS]
| オプション | 説明 | デフォルト |
|---|---|---|
--api-key |
FMP APIキー | $FMP_API_KEY 環境変数 |
--max-candidates |
分析する最大銘柄数 | 40 |
--top |
レポートに含める上位件数 | 20 |
--output-dir |
レポート出力ディレクトリ | カレントディレクトリ |
--universe |
カスタム銘柄リスト(スペース区切り) | S&P 500トップ40 |
コンポーネントスコア基準
| コンポーネント | 100点 | 80点 | 60点 | 40点 | 0点 |
|---|---|---|---|---|---|
| C | EPS≥50%, Rev≥25% | EPS≥30%, Rev≥15% | EPS≥18%, Rev≥10% | EPS≥10% | EPS<10% |
| A | CAGR≥40%, 安定 | - | CAGR≥30% | CAGR≥25% | CAGR<25% |
| N | 高値5%以内+BO | 高値5%以内 | 高値10%以内+BO | 高値10%以内 | 高値25%超 |
| S | Vol比≥2.0 | Vol比≥1.5 | Vol比≥1.0 | Vol比≥0.8 | Vol比<0.8 |
| L | RS≥90+outperf | RS≥80 | RS≥70 | RS≥60 | RS<60 |
| I | 50-100機関+30-60%保有 | 条件一部 | 条件一部 | 少数 | データなし |
| M | 強い上昇トレンド | 上昇トレンド | 横ばい | 弱い | ベアマーケット |
出力ファイル
| ファイル | 形式 | 用途 |
|---|---|---|
canslim_screener_YYYY-MM-DD_HHMMSS.json |
JSON | プログラマティック利用 |
canslim_screener_YYYY-MM-DD_HHMMSS.md |
Markdown | 人間向けレポート |
関連ファイル
| ファイル | 説明 |
|---|---|
skills/canslim-screener/SKILL.md |
スキル定義 |
skills/canslim-screener/references/canslim_methodology.md |
CANSLIM手法の完全解説(27KB) |
skills/canslim-screener/references/scoring_system.md |
スコアリング仕様(21KB) |
skills/canslim-screener/references/interpretation_guide.md |
結果解釈ガイド(18KB) |
skills/canslim-screener/references/fmp_api_endpoints.md |
API統合ガイド(18KB) |
skills/canslim-screener/scripts/screen_canslim.py |
メインスクリプト |
skills/canslim-screener/scripts/calculators/ |
各コンポーネント計算モジュール |