免責事項
本記事は投資助言を目的としたものではなく、技術・分析手法の紹介です。記事中の CAN-SLIM の各要素・閾値は教育目的であり、特定の銘柄・金融商品の売買を推奨するものではありません。投資判断はご自身の責任で行ってください。本記事中に J-Quants API・FMP(Financial Modeling Prep)・SEC EDGAR から取得した実データは掲載していません(利用規約に基づく方針)。CAN-SLIM はオニール(William J. O’Neil)著「How to Make Money in Stocks」で提唱された手法を基に、エンジニア視点で再構築する形で扱います。
前回の記事#20で応用編シリーズ(#11〜#20、計10記事)が完結しました。「両学長スクリーニング基準を Python で再現する高配当株自動化パイプライン」の雛形が再現可能な状態になりました。本記事から発展編(記事#21〜#30、計10記事)に入ります。発展編シリーズの入門として、応用編から発展編への切替を整理する回です。
発展編のテーマは 「オニールの CAN-SLIM をエンジニア視点で深化させる」。応用編が「インカム重視(高配当株)」だったのに対し、発展編は 「キャピタルゲイン重視(成長株)」 を扱います。両者は異なる投資戦略であり、応用編 + 発展編の両方を経ることで、配当株 × 成長株のハイブリッド戦略が可能になります(応用編 #20 で予告、発展編 #29 で本格設計)。
多くの読者がぶつかる壁は次の3つです:
- CAN-SLIM の7要素の役割理解: C/A/N/S/L/I/M がそれぞれ何を意味し、どう組み合わさって成長株を選定するのか
- 応用編との戦略的差別化: 高配当株(インカム)と成長株(キャピタルゲイン)は別ロジック、別評価軸が必要。同じ判定器を使い回せない
- 応用編パイプラインの再利用範囲: 取得層・統合層・並列処理の枠組みは流用可能だが、判定ロジック(spec_sheet_judge)と業種別補正は成長株版に拡張する必要がある
筆者は製造業の開発現場で、製品アーキテクト(製品の全体構造・要素間関係を設計する役割)として「成長フェーズの製品 vs 安定フェーズの製品」の評価軸の違いを多く経験してきました。安定製品では「不良率・原価率・在庫回転」が主要 KPI なのに対し、新規成長製品では「市場獲得スピード・技術ロードマップ・競合優位性」が見るべき指標になります。投資の高配当株(安定)vs 成長株(新規)の評価軸の違いも、構造的に同型の問題です。
本記事で扱う専門用語の予習
- CAN-SLIM: William J. O’Neil(米 IBD = Investor’s Business Daily 創業者)が提唱した成長株選定基準。Current Quarterly EPS、Annual EPS Growth、New product/service/management/52-week high、Supply & demand、Leader or Laggard、Institutional sponsorship、Market direction の7要素
- ハイブリッド戦略: 高配当株(インカム)+ 成長株(キャピタルゲイン)を組み合わせるポートフォリオ戦略。リスク分散と複合リターンを目指す
- インカム vs キャピタルゲイン: 配当による現金収入(インカム)と、株価上昇による評価益(キャピタルゲイン)。両者は税制も時間軸も異なる
- FMP(Financial Modeling Prep): 米国株データ提供 API。CAN-SLIM の M(市場全体トレンド)や米国上場銘柄の取得に使用(料金プランは2026年5月時点で月額10〜30 ドル前後の幅、最新は公式参照)
- SEC EDGAR: 米国版 EDINET、米国上場企業の財務報告書(10-K, 10-Q)が無料で取得可能
- NLP(Natural Language Processing、自然言語処理): 発展編 #28 で N 要素に応用
- MVO(Mean-Variance Optimization、平均分散最適化): マルコビッツのポートフォリオ理論、発展編 #29 で導入検討
- E資格: 日本ディープラーニング協会の認定資格、発展編で扱う統計学・機械学習の前提知識として有用
- 製品アーキテクト: 製品の全体構造・要素間関係を設計する役割、本業エピソードでの肩書き
「実装したくない読者」向け代替案
「CAN-SLIM の7要素全てを自分で実装するのは大変」という読者には、米国 IBD(Investor’s Business Daily)の有料サービスまたは マネックス証券・楽天証券の米国株スクリーニングで CAN-SLIM 系の銘柄絞り込みが可能です。本シリーズの自動化は「7要素を自分の閾値でカスタマイズしたい」「日米両市場で同じパイプラインを動かしたい」用途で、IBD/証券会社のツールで結果だけ見たい読者には不要です。
本記事の前提と難易度
- 応用編 #11〜#20 のパイプラインを動かしたことがあると進めやすい(必須ではない)
- 本記事は思想編のため、コードは概念的なスケルトン2本のみ。本格実装は #22 以降のサンプルコード入門で
- 動作環境: Python 3.11+ / pandas 2.x / duckdb 1.0+ / matplotlib 3.9+
- データソース: 日本株は応用編から継承(J-Quants + EDINET)、米国株は FMP + SEC EDGAR を発展編から追加
- 本記事を読むと CAN-SLIM 7要素の役割と、発展編シリーズで扱う10記事のロードマップが見える入門
CAN-SLIM をはじめて学ぶ方へ(手順・ステップ・初心者向けチュートリアル)
CAN-SLIM 初心者の方には、次の手順で読み進めるのがおすすめです:
- ステップ1(本記事): CAN-SLIM 7要素の概要把握 + 高配当株との戦略的差別化を理解
- ステップ2(オニール原典): 「How to Make Money in Stocks」(日本語訳「オニールの成長株発掘法」)で原典の意図を確認
- ステップ3(発展編 #22 から順次): 各要素を Python サンプルコードで実装するチュートリアル形式
- ステップ4(発展編 #29 ハイブリッド戦略): 高配当株 × 成長株の組合せポートフォリオを構築
継続運用コスト試算(応用編から発展編まで通しの想定、年間約5.5万円)
- J-Quants Light(1,650円/月): 日本株データ、応用編から継続。年間 19,800円
- EDINET API: 完全無料
- FMP(米国株、約20ドル/月): 発展編から追加。為替次第だが年間 約30,000-36,000円
- SEC EDGAR: 完全無料
- LINE Messaging API: 週次運用なら無料枠内(応用編 #15 参照)
- GitHub Actions: プライベート無料枠で十分
- 合計(年間目安): 約 50,000〜56,000 円(プラン・為替により変動)
応用編単独(年2万円)から発展編込み(年5.5万円)に約2.7倍。米国株データソースの追加が主因です。
結論:高配当株(応用編)と成長株(発展編)は、インカム vs キャピタルゲインという異なる戦略を担う。CAN-SLIM の7要素は「四半期EPS急成長 × 年間EPS成長率 × 新製品 × 需給 × 業界リーダー × 機関投資家動向 × 市場全体トレンド」で構成され、応用編で構築したパイプライン基盤の主要要素を流用しつつ成長株版判定ロジックを載せることで、ハイブリッド戦略の実装が可能になる。本記事は発展編シリーズの入口として、CAN-SLIM の役割理解と発展編 #21〜#30 のロードマップを整理する。
高配当株(応用編)と成長株(発展編)の戦略的差別化
応用編で扱った高配当株と、発展編で扱う成長株は、同じ「個別株投資」でも狙うリターン源と評価軸が大きく異なります。両者を混同すると、片方の判定基準でもう片方を評価して「全銘柄FAIL」になる事故が起きます。
| 項目 | 高配当株(応用編) | 成長株(発展編) |
|---|---|---|
| 主要リターン源 | 配当(インカム) | 株価上昇(キャピタルゲイン) |
| 狙う期間 | 長期保有・累進配当 | 急成長期間(2-5年) |
| 主要評価軸 | 配当利回り・自己資本比率・連続増配 | 四半期EPS成長率・新製品・市場リーダー性 |
| 業績の見方 | 安定性重視(CV 0.3未満) | 急成長重視(前年比 +25% 以上) |
| 業種特性 | 成熟業種(公共・消費財・銀行) | 新興業種(IT・ヘルスケア・新素材) |
| 判定器の考え方 | USL/LSL の規格範囲内 | USL を上回る「規格を超える優秀さ」 |
| FMEA リスク観点 | 減配・倒産・業種ショック | 成長失速・テクノロジー陳腐化・競合参入 |
| 税制 | 配当課税(20.315%、NISA非課税枠あり) | 譲渡益課税(20.315%、NISA成長投資枠で非課税、売却まで繰り延べ) |
税制の非対称性とライフステージ別配置
- インカム(配当): 受取時に毎年20.315%課税。NISA枠で非課税化可能。現役期は税負担を意識、リタイア後はキャッシュフロー源として価値が高い
- キャピタルゲイン(譲渡益): 売却時まで課税繰り延べ。長期保有することで複利効果を最大化、再投資効率がインカムより高い
- ライフステージ別配置の目安: 30-40代は成長株(複利効果重視)、50-60代は高配当株(キャッシュフロー重視)への徐々のシフトが定石(個人差あり、自分の収入・支出構造で判断)
成長株が高配当株より明確に負う5つのリスク
応用編 #19 でポートフォリオ分散リスクを扱いましたが、成長株には個別銘柄レベルで以下の固有リスクがあります:
- 成長失速リスク: 急成長期間(2-5年)は限定的、終わると株価が大幅下落するケースが多い
- バリュエーション過熱リスク: PER 50-100倍以上で取引される銘柄は、業績鈍化で短期間に半値以下になりうる
- 業種集中リスク: 成長株は IT・ヘルスケアなど特定業種に偏りやすく、セクターショック時のダメージが大きい
- 為替リスク: 米国成長株への投資は円安局面で為替差益、円高局面で為替差損
- 情報優位性のなさ: 機関投資家・アナリストの分析が深く入る分野で、個人が情報優位を取りにくい
これらは応用編の高配当株では相対的に小さいリスクで、成長株固有の警戒事項です。
エンジニア的に言い換えると(製品ライフサイクルの差)
応用編 vs 発展編の差は、製造業 DX で言う 「成熟製品 vs 新規成長製品の評価軸の差」と構造的に同型です:
- 成熟製品(高配当株): 不良率・原価率・在庫回転・安定供給能力 = 「品質保証の徹底」
- 新規成長製品(成長株): 市場獲得スピード・技術ロードマップ・競合優位性・新規顧客獲得率 = 「市場立ち上げの加速」
同じ「製品評価」でも、ライフサイクル段階で見るべき KPI が大きく異なる。投資でも同じです。
CAN-SLIM 7要素の概要(オニールの成長株選定基準とは)
CAN-SLIM は1980年代に William J. O’Neil(米 IBD = Investor’s Business Daily 創業者)が提唱した成長株選定の7要素フレームワークです。米国市場で成功した成長株500銘柄の共通特性を分析して導出された基準で、現在も多くの成長株投資家が参照しています。各要素を整理します。
| 記号 | 名称 | 意味 | 典型的な閾値 | 発展編記事 |
|---|---|---|---|---|
| C | Current Quarterly EPS | 当期 四半期 EPS の前年同期比成長率 | +25% 以上 | #22 |
| A | Annual EPS Growth | 過去3-5年の年間 EPS 成長率 | 年平均 +25% 以上 | #23 |
| N | New Product/Service/Management/52-week High | 新製品・新サービス・新経営陣・52週高値更新 | 定性判定(NLP で深化、#28) | #28 |
| S | Supply & Demand | 需給バランス(自社株買い・出来高急増) | 出来高 +40% 以上の上昇日 | #24 |
| L | Leader or Laggard | 業界リーダー or 追従者か(RS Rating で判定) | RS Rating 80 以上 | #26 (PCA) |
| I | Institutional Sponsorship | 機関投資家の保有動向(保有比率 + 保有機関数の増加) | 機関保有比率の上昇トレンド | #27 (情報理論) |
| M | Market Direction | 市場全体(指数)のトレンド | 主要指数が上昇トレンド | #22-24 で随時 |
CAN-SLIM 閾値(+25%/RS80/+40%)の出典と現代市場での妥当性
- +25%(C/A): オニール原典「How to Make Money in Stocks」で提示された基準。1953-1985年の米国成長株500銘柄分析がベース。現代米国市場でも引き続き参照されるが、市場環境(金利・テクノロジー陳腐化速度)の変化で「+25%」の意味する競争優位性は当時より相対的に低下している可能性
- RS Rating 80(L): IBD が提供する銘柄相対強度ランキング(0-99)。過去12ヶ月の株価パフォーマンスを市場全体と比較した値。原典で「80以上」が提示
- +40%(S): 出来高の前日比急増の閾値。需給逼迫のシグナルとして機能
- 注意: これらの閾値は原典準拠の参考値で、現代市場で機械適用するとPASS銘柄が極端に絞られる可能性。発展編 #22 以降で各要素ごとに「閾値の現代妥当性」と「自分の運用での調整方針」を別途検討します
CAN-SLIM の本質:「全要素クリアの少数精鋭」
CAN-SLIM の特徴は、「7要素すべてをクリアする銘柄は市場全体の数%しか存在しない」という設計思想にあります。応用編の両学長基準が「6基準を業種補正で柔軟に判定」だったのに対し、CAN-SLIM は「全要素を厳格に通過した極めて少数の銘柄に集中する」方向性です。スクリーニング結果が応用編の数十〜百件から、発展編では数件〜十数件に絞られる前提で運用します。
スニペット1:CAN-SLIM 判定器のサンプルコード入門(成長株版判定器の予告)
応用編の spec_sheet_judge_v2 を成長株版に拡張する設計を予告します。本記事では概念的なスケルトンのみで、各要素の本格的なサンプルコード実装は発展編 #22-#28 で順次扱います。
# can_slim_judge.py — CAN-SLIM 7要素の判定器スケルトン入門(発展編 #22 から本格実装)
# 動作環境: Python 3.11+ / pandas 2.x / duckdb 1.0+
from typing import TypedDict, Literal, NotRequired
Verdict = Literal["PASS", "CAUTION", "FAIL"]
class CanSlimMetrics(TypedDict, total=False):
"""CAN-SLIM 7要素の入力(total=False + NotRequired で取得失敗時の欠落表現)
各要素の取得・計算は発展編 #22-#28 で実装。本記事はスケルトンのみ。
"""
quarterly_eps_yoy: NotRequired[float | None] # C: 四半期 EPS 前年同期比 (%)
annual_eps_growth_3y: NotRequired[float | None] # A: 過去3年の年間 EPS 成長率 (%)
new_factors_score: NotRequired[int | None] # N: 新製品/新経営/新サービス/52週高値の定性スコア (0-4)
supply_demand_score: NotRequired[float | None] # S: 需給スコア(出来高急増 + 自社株買い)
rs_rating: NotRequired[int | None] # L: 相対強度レーティング (0-99)
institutional_score: NotRequired[float | None] # I: 機関投資家保有比率の変化率 + 保有機関数増加
market_direction: NotRequired[Literal["UP", "FLAT", "DOWN"] | None] # M: 市場トレンド
def judge_can_slim(metrics: CanSlimMetrics) -> dict[str, Verdict | str]:
"""CAN-SLIM 7要素を機械的に判定する(発展編 #29 のハイブリッド戦略まで本格化)
各要素の閾値は発展編で個別に深掘り:
- C (#22): quarterly_eps_yoy >= 25% で PASS
- A (#23): annual_eps_growth_3y >= 25% で PASS
- N (#28): NLP で決算短信から「新規性」を抽出(定性 → 定量変換)
- S (#24): 出来高 +40% 以上 + 自社株買い
- L (#26): PCA で RS Rating 上位20%(80以上)
- I (#27): 情報理論で機関投資家保有変化と保有機関数増加の影響度
- M (#22-24 随時): 主要指数の200日移動平均上方
"""
per_element: dict[str, Verdict] = {}
# C: Current Quarterly EPS
c = metrics.get("quarterly_eps_yoy")
per_element["C"] = "CAUTION" if c is None else \
"PASS" if c >= 25 else \
"CAUTION" if c >= 10 else "FAIL"
# A: Annual EPS Growth
a = metrics.get("annual_eps_growth_3y")
per_element["A"] = "CAUTION" if a is None else \
"PASS" if a >= 25 else \
"CAUTION" if a >= 10 else "FAIL"
# N/S/L/I/M は発展編 #24-#28 で個別実装
for key in ("N", "S", "L", "I", "M"):
per_element[key] = "CAUTION" # 発展編で本格判定に置換
overall: Verdict = "FAIL" if "FAIL" in per_element.values() else \
"CAUTION" if "CAUTION" in per_element.values() else "PASS"
return {"per_element": per_element, "overall": overall}
# 使用例(架空の銘柄、サンプルコード入門レベル)
# m: CanSlimMetrics = {
# "quarterly_eps_yoy": 35.0, "annual_eps_growth_3y": 28.0,
# "new_factors_score": 2, "supply_demand_score": 0.5,
# "rs_rating": 85, "institutional_score": 0.05, "market_direction": "UP",
# }
# print(judge_can_slim(m))
# # CAUTION(C/A は PASS だが N/S/L/I/M は発展編で実装、暫定 CAUTION)
エンジニア的に言い換えると(応用編判定器との対応)
CAN-SLIM 判定器は、応用編 #15 の spec_sheet_judge_v2 と構造的に同型で、判定要素の入れ替えを行ったものです:
- 応用編 6基準(配当利回り・配当性向・自己資本比率・EPS・連続増配・営業CF)→ 発展編 7要素(C/A/N/S/L/I/M)
- 判定方式(PASS/CAUTION/FAIL の3段階)は同じ
- 業種別補正テーブル(応用編 #18)も発展編で「業種別の成長閾値」として再利用
応用編で構築した判定器のフレームワークの主要要素が、成長株版に転用可能。これが応用編 + 発展編をシリーズとして一貫させる設計の核心です。
スニペット2:高配当 vs 成長株のスクリーニング基準を1表で比較するサンプルコード
応用編の両学長6基準と発展編の CAN-SLIM 7要素を、1テーブルで管理する設計を予告します。これにより、ハイブリッド戦略(応用編 + 発展編)の実装時に、両方の基準を1ビューで参照可能になります(発展編 #29 で本格設計)。
# strategy_criteria_compare.py — 高配当 vs 成長株の判定基準を1表で管理(v2: 応用編6基準 + CAN-SLIM 7要素を完全網羅)
# 動作環境: Python 3.11+ / duckdb 1.0+ / pandas 2.x
import duckdb
import pandas as pd
from pathlib import Path
DB_PATH = Path("data/stocks.duckdb")
DDL_STRATEGY_CRITERIA = """
CREATE TABLE IF NOT EXISTS strategy_criteria (
strategy VARCHAR NOT NULL,
indicator VARCHAR NOT NULL,
threshold_pass DOUBLE,
threshold_pass_high DOUBLE, -- range 用の上限(v2追加: yield_pct 4-8% など)
threshold_caution DOUBLE,
direction VARCHAR, -- higher_better / lower_better / range / categorical
description VARCHAR,
source VARCHAR,
PRIMARY KEY (strategy, indicator)
);
"""
# 応用編6基準 + CAN-SLIM 7要素を全て登録(v1 で 4+3=7行だった整合性問題を解消)
SEED_CRITERIA = pd.DataFrame([
# 応用編(high_dividend、両学長6基準、応用編 #12 で確定)
{"strategy": "high_dividend", "indicator": "yield_pct",
"threshold_pass": 4.0, "threshold_pass_high": 8.0, "threshold_caution": 3.0, "direction": "range",
"description": "配当利回り 4-8% で PASS(税引前)", "source": "両学長スクリーニング基準"},
{"strategy": "high_dividend", "indicator": "payout",
"threshold_pass": 60.0, "threshold_pass_high": None, "threshold_caution": 80.0, "direction": "lower_better",
"description": "配当性向 60% 以下で PASS", "source": "両学長基準(業種補正あり)"},
{"strategy": "high_dividend", "indicator": "equity_ratio",
"threshold_pass": 40.0, "threshold_pass_high": None, "threshold_caution": 30.0, "direction": "higher_better",
"description": "自己資本比率 40% 以上で PASS", "source": "両学長基準(業種補正あり)"},
{"strategy": "high_dividend", "indicator": "eps_trend",
"threshold_pass": None, "threshold_pass_high": None, "threshold_caution": None, "direction": "categorical",
"description": "EPS トレンドが growing/stable で PASS(応用編 #16 の時系列分析で算出)",
"source": "両学長基準 + CV/線形回帰"},
{"strategy": "high_dividend", "indicator": "consec_inc_years",
"threshold_pass": 10.0, "threshold_pass_high": None, "threshold_caution": 5.0, "direction": "higher_better",
"description": "連続非減少年数 10年以上で PASS", "source": "両学長基準"},
{"strategy": "high_dividend", "indicator": "ocf_positive_years",
"threshold_pass": 5.0, "threshold_pass_high": None, "threshold_caution": 3.0, "direction": "higher_better",
"description": "過去5年で営業CFプラスが5年フルで PASS", "source": "両学長基準(業種補正あり)"},
# 発展編(growth_can_slim、CAN-SLIM 7要素、発展編 #22-#28 で本格化)
{"strategy": "growth_can_slim", "indicator": "quarterly_eps_yoy",
"threshold_pass": 25.0, "threshold_pass_high": None, "threshold_caution": 10.0, "direction": "higher_better",
"description": "C: 四半期EPS 前年比 +25% 以上", "source": "オニール CAN-SLIM"},
{"strategy": "growth_can_slim", "indicator": "annual_eps_growth_3y",
"threshold_pass": 25.0, "threshold_pass_high": None, "threshold_caution": 10.0, "direction": "higher_better",
"description": "A: 年間EPS成長率 3年平均 +25% 以上", "source": "オニール CAN-SLIM"},
{"strategy": "growth_can_slim", "indicator": "new_factors_score",
"threshold_pass": None, "threshold_pass_high": None, "threshold_caution": None, "direction": "categorical",
"description": "N: 新製品/新経営/52週高値(NLP で発展編 #28 で定量化)", "source": "オニール CAN-SLIM + NLP"},
{"strategy": "growth_can_slim", "indicator": "supply_demand_score",
"threshold_pass": 0.4, "threshold_pass_high": None, "threshold_caution": 0.2, "direction": "higher_better",
"description": "S: 出来高 +40% 以上の上昇日 + 自社株買い", "source": "オニール CAN-SLIM"},
{"strategy": "growth_can_slim", "indicator": "rs_rating",
"threshold_pass": 80.0, "threshold_pass_high": None, "threshold_caution": 60.0, "direction": "higher_better",
"description": "L: RS Rating 80以上で業界リーダー", "source": "オニール CAN-SLIM + IBD"},
{"strategy": "growth_can_slim", "indicator": "institutional_score",
"threshold_pass": None, "threshold_pass_high": None, "threshold_caution": None, "direction": "categorical",
"description": "I: 機関投資家保有比率と保有機関数の増加(情報理論で #27 で定量化)",
"source": "オニール CAN-SLIM + 情報理論"},
{"strategy": "growth_can_slim", "indicator": "market_direction",
"threshold_pass": None, "threshold_pass_high": None, "threshold_caution": None, "direction": "categorical",
"description": "M: 主要指数200日移動平均が上昇トレンドで PASS", "source": "オニール CAN-SLIM"},
])
INSERT_COLUMNS = "(strategy, indicator, threshold_pass, threshold_pass_high, threshold_caution, direction, description, source)"
def setup_strategy_criteria() -> None:
DB_PATH.parent.mkdir(parents=True, exist_ok=True) # data/ 不存在を補正
with duckdb.connect(str(DB_PATH)) as conn:
conn.execute(DDL_STRATEGY_CRITERIA)
conn.register("seed_df", SEED_CRITERIA)
conn.execute("BEGIN")
try:
conn.execute("DELETE FROM strategy_criteria")
conn.execute(f"""
INSERT INTO strategy_criteria {INSERT_COLUMNS}
SELECT strategy, indicator, threshold_pass, threshold_pass_high,
threshold_caution, direction, description, source FROM seed_df
""")
conn.execute("COMMIT")
except Exception:
conn.execute("ROLLBACK")
raise
finally:
conn.unregister("seed_df")
n = conn.execute("SELECT COUNT(*) FROM strategy_criteria").fetchone()[0]
print(f"strategy_criteria rows: {n} (high_dividend 6 + growth_can_slim 7 = 13)")
if __name__ == "__main__":
setup_strategy_criteria()
エンジニア的に言い換えると(製品ファミリー横断のスペックシート管理 + スキーマ進化系譜)
strategy_criteria テーブルは、製造業 DX で言う 「製品ファミリー横断のスペックシート管理マスタ」に相当します。
応用編 → 発展編のスキーマ進化系譜は5段階で整理できます:
- 応用編 #14
industry_indicator_map: 業種別補正の最初の形 - 応用編 #16
persistence_metrics: 時系列指標の追加 - 応用編 #17
value_trap_flags: 異常値検知フラグの追加 - 応用編 #19
portfolio_scores: ポートフォリオ単位スコアの追加 - 発展編 #21
strategy_criteria: 戦略横断(高配当 + 成長)の統合
応用編の industry_indicator_map と発展編の strategy_criteria を組み合わせることで、ハイブリッド戦略(#29)が実装可能になります。
発展編 #21〜#30 のロードマップ
発展編シリーズ全10記事を、4フェーズ + まとめに分けて整理します。応用編で構築した自動化基盤の上に CAN-SLIM 各要素を載せていく流れです。
| 記事 | タイトル | スタイル | テーマ |
|---|---|---|---|
| #21 | 本記事: なぜ成長株か(CAN-SLIM 概要) | 💭思想 | 発展編入口、応用編との戦略的差別化 |
| #22 | CAN-SLIM C — 当期EPS急成長を Python で自動判定 | 🛠️実装 | 四半期 EPS 前年同期比 +25% 以上の自動抽出 |
| #23 | CAN-SLIM A — 年間EPS成長率の3-5年トレンド可視化 | 🛠️実装 | 過去3-5年の EPS 成長を pandas で時系列化 |
| #24 | CAN-SLIM C×A — 短期急成長 × 長期安定の複合判定 | 🛠️実装 | 2要素を組み合わせたスクリーニング |
| #25 | 製品アーキテクトの事業構造分析 | 💭思想 | セグメント分析・収益構造の分解 |
| #26 | 固有値分解で銘柄クラスタリング(PCA) | 🔬分析 | L 要素の発展、業種間相関を PCA で次元削減 |
| #27 | 情報理論(エントロピー・相互情報量) | 🔬分析 | I 要素、機関投資家動向の指標重要度評価 |
| #28 | CAN-SLIM N — NLP で新製品情報を定量化 | 💭🔬 | 決算短信テキストから「新規性」を抽出 |
| #29 | 高配当 × 成長 ハイブリッド戦略 | 💭🛠️ | 応用編 + 発展編の判定器を1パイプラインで運用、マルコビッツ MVO もここで導入検討 |
| #30 | シリーズ総括(30記事全体) | 💭 | 3段階モデル(基礎→応用→発展)の集約 |
発展編で扱う技術は、応用編より機械学習・統計学的手法(PCA、エントロピー、NLP)の比重が高くなります。応用編が「両学長スクリーニングの再現」だったのに対し、発展編は「CAN-SLIM をエンジニアリング視点で拡張する」フェーズで、E資格・統計学の知識が活かせる構成です。
設計判断の記録:発展編入口の3判断(フラット6要素フレーム + 応用編全体俯瞰表)
判断0:発展編入口で記録すべき3判断
本記事は発展編シリーズの入口として、シリーズ全体の方針に関わる設計判断を3つ記録します。判断1(CAN-SLIM 採用)は分析手法の方向性、判断2(応用編パイプライン再利用)は実装効率、判断3(日米両市場対応)はカバレッジ範囲を左右します。各判断は「採用理由 / 失うもの / トリガー条件 / 残メリット / 対処 / 本業 DX 同型対応」の6要素フラットフレームで記述します。
判断1:CAN-SLIM を採用するか別の成長株フレームワーク(バフェット・グラハム等)にするか
- 採用理由: CAN-SLIM は7要素中 6要素が定量化可能で(N のみ NLP で定量化、発展編 #28)、Python 自動化に向く。バフェット型(バリュー投資)は質的判定が中心で機械化が困難、グラハム型(ディープバリュー)は応用編の高配当戦略と重複
- 採用したことで失うもの: 「定量化困難な質的判断」(経営陣の質、競争優位の堀の深さ等)を主軸にする選択肢
- トリガー条件: 投資スタイルが「経営者の人物分析重視」「事業内容の深い理解重視」の場合、CAN-SLIM は十分でない可能性
- 残るメリット: 7要素ごとの実装が独立しており、応用編の判定器フレームワークが転用可能。1要素ずつ実装を進められる
- 対処: 質的判断は CAN-SLIM の N 要素(NLP で発展編 #28 で取り込み)で部分的に対応。バフェット型の質的判断要素を補完したい場合は、外部レポート(Morningstar、IBD 等)を参照する運用
- 本業 DX 同型対応: 製造業の新規成長製品評価でも「定量化可能な KPI(市場獲得率等)」と「定性判断(技術ロードマップ評価等)」のバランスは同じ課題。完全な定量化を目指さず、定性判断を「補強指標」として残す設計が現実的
判断2:応用編パイプラインを再利用するか発展編で別パイプラインを作るか
- 採用理由: 応用編の取得層・統合層・並列処理・通知層の主要要素を流用。判定層(spec_sheet_judge)と業種別補正のみ成長株版に拡張
- 採用したことで失うもの: 成長株固有の最適化(IBD のような専門的データソースの取得最適化等)の機会
- トリガー条件: 成長株投資の専門度が高まり、応用編の枠組みでは取り回しにくい高度な分析(リアルタイム機関投資家動向、ティック単位の出来高解析等)が必要になった段階
- 残るメリット: 配当株 × 成長株のハイブリッド戦略(#29)が同一パイプライン上で実装可能。実装コストを大幅削減
- 対処: 成長株固有データ(FMP、SEC EDGAR、IBD 系)の取得層は別モジュールで追加(#22-#28 で順次)
- 本業 DX 同型対応: 製造業でも「既存検査ラインに新製品ファミリー対応の検査機を追加」する形で、ライン全体を作り直さない設計が定石
判断3:日米両市場対応にするか日本株に絞るか
- 採用理由: 成長株分野は米国市場のデータが広範囲(成長株500社の母集団、機関投資家動向データ等)。両市場対応で発展編シリーズの実用性が大幅に向上
- 採用したことで失うもの: 日本株単独パイプラインの単純さ、為替換算の手間ゼロ
- トリガー条件: 米国株データソース(FMP $20/月程度、SEC EDGAR 無料)の取得・取扱いコスト(米国会計基準の理解、為替換算等)が許容できない場合
- 残るメリット: 両学長フォロワーの「米国成長株にも分散したい」ニーズに対応。発展編 #29 のハイブリッド戦略で日米両市場をカバー
- 対処: 米国株データソースを発展編 #22 から段階的に取り込み、日米併用パイプラインを構築
- 本業 DX 同型対応: 製造業の海外市場展開でも「国内既存システム + 海外向けモジュール」の併用設計が一般的
応用編 #13〜#20 + 発展編 #21 の主要設計判断 俯瞰表(24件)
応用編 #17 から指摘されてきた「応用編全体の判断俯瞰表」を、本記事で初めて実装します。応用編+発展編で記録した主要判断を一覧化:
| 記事 | 主要判断 | 採用 |
|---|---|---|
| #13 | データソース選定 | J-Quants + EDINET(公式 API 優先) |
| #14 | DB / アーキテクチャ | DuckDB + ELT パターン + マスタ駆動 |
| #14 | 業種別補正設計 | industry_indicator_map テーブル駆動 + direction カラム |
| #15 | 並列化技術 | multiprocessing(CPU bound、initializer パターン) |
| #15 | 通知メディア | LINE Messaging API(CLAUDE.md 最優先) |
| #15 | スケジューラ | cron → GitHub Actions(Phase 移行) |
| #16 | 連続増配判定 | 連続非減少(同額据え置きOK) |
| #16 | EPS 安定性指標 | 変動係数 CV + 線形回帰の組合せ |
| #16 | 新規上場銘柄の扱い | 5期未満は CAUTION 強制 |
| #17 | 異常値検知の組合せ | IQR + Z + SPC + WER の3-4層フィルタ |
| #17 | 市場全体ショック対応 | 絶対値 + #20 で TOPIX 相対値併用 |
| #18 | 業種粒度 | 10業種 → #19 で15 → #20 で25業種 |
| #18 | 業種別主指標数 | 1業種1主指標(payout は横断) |
| #18 | マスタ更新サイクル | 四半期レビュー |
| #18 | テーブル PK 設計 | industry_indicator_map: 複合PK / industry_cv_threshold: 単列PK |
| #19 | 集中度指標 | HHI(投資視点閾値 2000/3000) |
| #19 | 相関分析期間 | 過去24ヶ月(月次) + 直近6ヶ月併用 |
| #19 | FMEA RPN 重み | 等倍積(S × O × D) |
| #19 | ポートフォリオテーブル | 個別銘柄評価とは別テーブル(portfolio_scores) |
| #20 | master_runner 方式 | NotImplementedError による委譲 |
| #20 | 業種カバレッジ | 25業種で東証時価総額の概ね9割 |
| #20 | 市場ベースライン | TOPIX 相対変動率(Premium プラン要、別ソース対応も) |
| #21 | 成長株フレームワーク | CAN-SLIM(7要素中6要素が定量化可能) |
| #21 | パイプライン再利用 | 応用編の主要要素を流用、判定層のみ拡張 |
| #21 | 市場カバレッジ | 日米両市場対応(FMP + SEC EDGAR 追加) |
エンジニア的に言い換えると(次元爆発と次元削減)
24件の判断を俯瞰すると、応用編シリーズの本質的な作業は「投資判断の次元爆発を、テーブル駆動で次元削減する」ことだったと整理できます。両学長6基準 → 業種補正で実質40-50項目 → FMEA で銘柄数×業種で爆発 → ポートフォリオスコアで1次元に集約。発展編は CAN-SLIM 7要素を加えてさらに次元爆発しますが、同じくテーブル駆動で次元削減するアプローチを継承します。
本業の話:成熟製品 vs 新規成長製品で評価軸が大きく違う経験
筆者が製造業の開発部門で製品アーキテクト(製品の全体構造・要素間関係を設計する役割)として、社内の新規事業向け成長製品の評価会議に参加していたときのこと。それまで担当していた成熟製品(量産家電)の評価指標(不良率・原価率・在庫回転)をそのまま新規成長製品に適用したところ、「すべての評価軸で平凡な数値」と判定され、社内予算が削られかけました。
レビュー会議で経営層から指摘されたのが次の点でした:
- 「新規成長製品を成熟製品の指標で測るな。立ち上げ2年目で不良率0.5%は『高い』のではなく『改善中』。成熟製品の0.05%基準を当てはめるのが間違い」
- 「新規成長製品で見るべきは”市場立ち上げの加速度”。前年比 +50% の出荷成長率、新規顧客獲得数、技術ロードマップの進捗、これらは成熟製品では見ない指標」
- 「製品ファミリー別のスペックシートとは別に、ライフサイクル別の評価基準テーブルを作れ。同じ製品でも、立ち上げ期・成長期・成熟期・衰退期で見るべきKPIが違う」
具体的な業務インパクトと3年スパンの中間マイルストーン:
- 初年度 Q4(経営層指摘): 初稿の評価で予算30%削減寸前。経営層から成熟製品 KPI と成長製品 KPI の混同を指摘される
- 2年目 Q1-Q2(評価軸追加): 成長期 KPI(市場獲得スピード・技術ロードマップ進捗)を追加した結果、評価が一転し追加投資が承認
- 2年目 Q3-3年目 Q1(量産準備): 評価軸見直しで把握できた強みを基に量産化準備を加速、製造ライン構築・品質保証スキーム整備
- 3年目 Q2 以降(主力事業化): 売上規模が当初予測の3-4倍に成長、社内の主力事業として認知される
- 「ライフサイクル別評価基準テーブル」が部内で標準化され、新規事業評価の標準作法に。立ち上げ期・成長期・成熟期で見る KPI を分けたテーブル管理が、それまでの「全製品同一基準」より大きく妥当な評価を生む
- この経験から「同じ”投資対象”でも、ライフサイクル段階で見るべき軸が大きく違う」という思考が定着
応用編 vs 発展編の戦略的差別化(高配当株 vs 成長株)は、本業のこの経験と構造的に同型の発想です:
- 高配当株 = 成熟製品: 安定性・健全性・継続性の指標で評価(応用編6基準)
- 成長株 = 新規成長製品: 急成長・市場リーダー性・新規性の指標で評価(CAN-SLIM 7要素)
- ハイブリッド戦略 = 製品ポートフォリオ: 成熟製品 + 新規製品の組合せで企業のリターンを最適化(発展編 #29)
逆方向の転移:投資の CAN-SLIM 学習が本業の新規製品評価を強化する見込み
発展編シリーズで CAN-SLIM の各要素を実装することで、本業の新規成長製品評価にも逆輸入が予想されます。例えば、CAN-SLIM の S(Supply & Demand、需給バランス)の発想は、新製品の「市場での需給シグナル」(受注残高の伸び・販売店在庫の動向等)の評価軸として転用可能です。応用編で確立した双方向の知識循環構造は、発展編でも継続する見込みです。
まとめ:発展編は応用編パイプラインの上に CAN-SLIM を載せる + 次回 #22 への移行宣言
- 応用編(高配当株、インカム)と発展編(成長株、キャピタルゲイン)は別戦略。両者は評価軸・期待リターン・税制が異なり、判定基準も別ロジック。ハイブリッド戦略(発展編 #29)で組み合わせる前提で設計
- CAN-SLIM 7要素は「定量化可能な成長株選定基準」として、Python 自動化に向く。C/A から実装し、N/S/L/I/M を発展編 #22-#28 で順次本格化。応用編の判定器フレームワークの主要要素が転用可能
- 発展編は機械学習・統計学的手法(PCA・エントロピー・NLP)の比重が高い。E資格・統計学の知識が活かせる構成で、Chelsea-Labs シリーズの DX 横展開の集約。日米両市場対応で実用性も向上。次回 #22 から CAN-SLIM の C(当期 EPS 急成長)の本格的なサンプルコード入門に進みます
今日からできる3つのアクション
- 本記事の「高配当 vs 成長株 の8項目比較表」を見直し、自分の投資スタイルがどちらに寄っているかを確認。米国株口座(マネックス・楽天・SBI 等)の開設がまだなら、発展編 #22 の CAN-SLIM 実装に向けて口座開設を検討。インカム重視なら応用編に専念、キャピタルゲイン重視なら発展編に進むのが現実的。両方狙うなら #29 のハイブリッド戦略まで読み進める
- オニール「How to Make Money in Stocks」(または日本語訳「オニールの成長株発掘法」)を入手し、CAN-SLIM 7要素の原典を一通り目を通す。発展編の各記事は原典を補完する形で進める想定。米国成長株 ETF(QQQ・VUG 等)の少額試し買いで米国成長株市場に慣れておくのも、発展編の理解を深める実践的なステップ
- スニペット2 の
strategy_criteriaテーブルをdata/stocks.duckdbに投入し、応用編6基準(6行)と CAN-SLIM 7要素(7行)= 計13行が1表で並ぶ状態を確認。同時に既存ポートフォリオに成長株要素が含まれているかもチェック(証券会社のセクター比率画面で IT・ヘルスケア・新興セクターの構成比を確認)
次回予告:CAN-SLIM の C — 当期 EPS 急成長を Python で自動判定する
次回(記事#22)から、CAN-SLIM の各要素を Python で個別に実装していきます。最初は C(Current Quarterly EPS、当期四半期 EPS の前年同期比成長率)。+25% 以上を機械的に抽出するスクリーニング実装と、応用編パイプラインへの統合方法を扱います。
- 四半期 EPS データの取得(J-Quants 四半期決算 + FMP for 米国株)
- 前年同期比成長率の計算ロジック
- 応用編 #15 の screen_parallel に CAN-SLIM 版判定を追加
「製品開発DXエンジニアの投資術」シリーズ全体像
本記事は 発展編(記事#21〜#30、計10記事)の第1回 です。シリーズ全体の進捗:
- 基礎編(#01〜#10): 完了(インデックス投資 × DX思想)
- 応用編(#11〜#20): 完了 ✅(高配当株 × データパイプライン)
- 発展編(#21〜#30): ▶ イマココ #21 本記事スタート(CAN-SLIM × 成長株分析)
発展編 ロードマップ(全10回):
- 導入:#21 なぜ成長株か(本記事)
- CAN-SLIM 実装1:#22 C 当期EPS → #23 A 年間EPS成長 → #24 C×A 複合
- 事業構造:#25 製品アーキテクト視点
- 機械学習・統計:#26 PCA → #27 エントロピー → #28 NLP(N要素)
- ハイブリッド + 総括:#29 配当 × 成長 戦略 → #30 シリーズ総括
▶ 応用編まとめ #20 | 本記事 #21 発展編スタート | 次回 #22(CAN-SLIM の C、公開予定)
関連記事(基礎編から): #03 複利のPython可視化 | #08 リスクとリターン | #09 NISA・iDeCoの設計
免責事項(再掲)
本記事は投資助言を目的としたものではなく、技術・分析手法の紹介です。CAN-SLIM の各要素・閾値は教育目的であり、特定の銘柄・金融商品の売買を推奨するものではありません。投資判断はご自身の責任で行ってください。J-Quants API・FMP・SEC EDGAR の利用規約は変更される可能性があるため、実装時は各サービスの公式ドキュメント・利用規約を必ず確認してください。本記事中に J-Quants/FMP/SEC EDGAR から取得した実データは掲載していません。CAN-SLIM はオニール(William J. O’Neil)著「How to Make Money in Stocks」で提唱された手法を基にエンジニア視点で再構築しています。

コメント