이어 가기
- Scan
engines.scan - Scan - 스크리닝
engines.scan.screen - Scan - 밸류에이션
engines.scan.valuation - Scan - 비율
engines.scan.ratio - Quality + Value 횡단 스크리닝 (Novy-Marx GP/A 기반)
engines.recipe.qualityValueScreen - Altman-lite 부도 위험 회피 필터 (역방향 블랙리스트)
engines.recipe.distressFilter - Compounder 후보 — ROE/매출/마진 5 년 일관성 스크리닝
engines.recipe.compounderCandidates - Analysis - 가치평가
engines.analysis.valuation
절차
실행 순서
- 1
**PEG ratio** = PER / 이익성장률 (%). PEG ≤ 1 = 시장이 성장률을 미반영.
- 2
핵심 발견: PER 단독 또는 성장률 단독 보다 두 결합이 sharpe ratio 우월.
- 3
Lynch Magellan Fund (1977-1990): 연 29% 수익률 — 본 framework 의 실증.
- 4
`stockCode`, `corpName`
- 5
`finance.ratio.netProfitGrowth : float` — 순이익 YoY (%)
- 6
`finance.ratio.revenueGrowth : float` — 매출 YoY (%)
- 7
`finance.ratio.debtRatio : float` — 부채비율 (%)
- 8
`per`, `pbr : float`
- 9
`grade : str` — valuation grade
- 10
`pegApprox : float` — PEG 근사 (낮을수록 저평가)
- 11
**EPS 성장률 → netProfitGrowth 근사** — 자사주 매입 비중 큰 미국 기업에서 EPS 성장률 > netProfitGrowth (주식수 감소). 한국에서는 자사주 소각 부재로 두 값 거의 동일.
- 12
**단일 연도 성장률 의존** — Lynch 원전은 5 년 평균 EPS 성장률 사용. 본 recipe 는 YoY 1 년 (분기/연간) 만. 5 년 일관성은 `engines.recipe.compounderCandidates` 로 보완.
학술 근거
Peter Lynch, One Up On Wall Street (1989): GARP (Growth at Reasonable Price) — 가치투자 한정 저PER + 성장투자 한정 고성장 의 절충.
- PEG ratio = PER / 이익성장률 (%). PEG ≤ 1 = 시장이 성장률을 미반영.
- 핵심 발견: PER 단독 또는 성장률 단독 보다 두 결합이 sharpe ratio 우월.
- Lynch Magellan Fund (1977-1990): 연 29% 수익률 — 본 framework 의 실증.
학술적 후속: Easton (2004) — implied growth rate 와 PER 결합. Bradshaw (2004) — 애널리스트 LTG (long-term growth) + PER 결합 모델 우월성.
dartlab 한계: EPS 직접 컬럼 X → netProfitGrowth 로 근사. EPS 성장률 ≈ 순이익 성장률 (자사주 매입·신주발행 비중 작은 시기) 이므로 합리적 근사.
공개 호출 방식
import dartlab
import polars as pl
# 1) 성장 게이트 — netProfitGrowth ≥ 15% + revenueGrowth ≥ 10% + debtRatio ≤ 100%
growth = dartlab.scan("screen", spec={"where": [
{"field": "finance.ratio.netProfitGrowth", "op": ">=", "value": 15},
{"field": "finance.ratio.revenueGrowth", "op": ">=", "value": 10},
{"field": "finance.ratio.debtRatio", "op": "<=", "value": 100},
{"field": "finance.ratio.netMargin", "op": ">", "value": 0},
]})
# 2) Valuation snapshot
value = dartlab.scan("valuation")
# 3) PEG 근사 = PER / netProfitGrowth, ≤ 1.5 추출
candidates = (
growth.join(value.select(["stockCode", "per", "pbr", "grade"]), on="stockCode")
.filter(pl.col("per") > 0)
.with_columns(
(pl.col("per") / pl.col("finance.ratio.netProfitGrowth")).alias("pegApprox")
)
.filter(pl.col("pegApprox") <= 1.5)
.sort("pegApprox")
) 호출 동작
scan("screen", spec=...)— 4 게이트 (이익성장 15%, 매출성장 10%, 부채 100%, 흑자) 동시 통과.scan("valuation")— KR snapshot.- PEG 근사 =
per / netProfitGrowth계산. - PEG ≤ 1.5 (Lynch 의 1.0 보다 약간 완화) 만 추출.
- PEG 오름차순 정렬 — 가장 저평가된 성장주 우선.
대표 반환 형태
candidates : pl.DataFrame — 컬럼:
stockCode,corpNamefinance.ratio.netProfitGrowth : float— 순이익 YoY (%)finance.ratio.revenueGrowth : float— 매출 YoY (%)finance.ratio.debtRatio : float— 부채비율 (%)per,pbr : floatgrade : str— valuation gradepegApprox : float— PEG 근사 (낮을수록 저평가)
한계
- EPS 성장률 → netProfitGrowth 근사 — 자사주 매입 비중 큰 미국 기업에서 EPS 성장률 > netProfitGrowth (주식수 감소). 한국에서는 자사주 소각 부재로 두 값 거의 동일.
- 단일 연도 성장률 의존 — Lynch 원전은 5 년 평균 EPS 성장률 사용. 본 recipe 는 YoY 1 년 (분기/연간) 만. 5 년 일관성은
engines.recipe.compounderCandidates로 보완. - PEG 1.5 임계는 한국 KOSPI 분포 기반 — 미국은 1.0 표준. 시장별 조정 필요.
- 성장률 음수 종목 자동 제외 — netProfitGrowth ≤ 0 이면 PEG 음수 → 무의미. 흑자 게이트 (
netMargin > 0) 필수. - 고성장 + 고PER 조합도 통과 — 예: PER 50, growth 40 → PEG 1.25. 절대 PER 게이트 추가 권장 (PER ≤ 30).
한국 / 미국 시장 차이
- 한국: 자사주 매입·소각 미발달로 EPS 성장률 ≈ netProfitGrowth. 단 한국 IPO·주식분할 빈도 낮아 분모 안정. KOSPI 성장주 풀 작아 임계 (15%/10%) 달성 종목 수 100~200 개.
- 미국: 자사주 매입 비중 커 EPS > 순이익 성장률 (1-3%p). 본 recipe 보수적 근사. S&P 500 성장 임계 보통 10%/5% 정도로 완화.
연계 절차
- 본 recipe 로 후보 발굴 →
tableRef에 PEG 분포. - PEG ≤ 1.0 종목 (강한 신호) 에 대해
engines.recipe.compounderCandidates로 5 년 일관성 추가 검증. engines.recipe.distressFilter로 부도 위험 종목 제외 (성장률 통과해도 부채 급증 종목 위험).engines.analysis.valuation— DCF + valuation band 단일 회사 심층.engines.story로 narrative 생성 — 성장 동력 (제품·시장점유·신규사업) 까지 묶어 보고.
기본 검증
- 후보 수 — 30~80 개가 정상 (KOSPI 1-3%). 200 개 초과 = 게이트 너무 느슨.
- PEG 분포 — 중앙값 0.8-1.2, 하위 25 percentile 0.5 미만이어야 강한 신호 군집.
- 단일 연도 성장률은 base effect (전년 일회성 손실 등) 영향 큼 — 분기 시계열 추가 점검 필수.
- 성장 catalyst 명시 — 단순 숫자 통과 X. 신규 제품·M&A·시장점유 변화 등 정성 근거 함께.
- “PEG = 0.5 = 매수” 단정 X — 성장 지속 가능성 (moat·산업 사이클) 별도 검증.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | — |
| Server | supported | — |
| MCP | unknown | — |
| Web AI | unknown | — |
| Pyodide | limited |
|