이 페이지는 Jong Invest의 세 평가 시스템이 실제로 어떻게 계산되는지를 라이브 코드 기준으로 전부 공개합니다. 공식·상수·임계값·점수 구간표·거부 조건을 사용자가 직접 검증할 수 있게 하는 것이 목적입니다.
기준 소스:
public/index.html — 메인 대시보드 "Stock Valuation Dashboard"public/jong-formula.html — JONG Formula 페이지 (채점 로직은 전부 이 파일의 calc() 함수 안에 있다)api/intrinsic-value.js — JONG Value 서버 APIapi/stock-data.js — 공통 입력 데이터 프록시 (POST /api/stock-data)JONG_FORMULA.md (불일치는 §5 참조)세 시스템 중 대시보드와 JONG Formula는 이 API가 돌려주는 값을 입력으로 쓴다 (JONG Value는 별도로 Yahoo를 직접 조회한다 — §3 참조). 반환 필드와 출처는 다음과 같다.
| 반환 필드 | 정의 | 출처 |
|---|---|---|
price | 최근 체결가. 없으면 전일 종가로 대체 | CNBC quote API (last → previous_day_closing) |
name | 회사명 | CNBC (name → shortName) |
epsTTM | TTM 희석 EPS | CNBC (eps) |
peTTM | TTM P/E | CNBC (pe) |
forwardPE | 선행 P/E | CNBC (fpe) |
forwardEPS | 선행 EPS (애널리스트 추정치) | CNBC (feps) |
roe | TTM ROE (%) | CNBC (ROETTM) |
debtEquity | 부채비율 (비율, 0.15 = 15%). CNBC가 %로 주는 값을 100으로 나눔 | CNBC (DEBTEQTYQ ÷ 100), MRQ(최근 분기) 기준 |
revGrowthFwd | 선행 매출 성장률 (%) = (선행 매출 − TTM 매출) ÷ TTM 매출 × 100 | CNBC (fsales, revenuettm에서 계산) |
sharesOutB | 발행주식수 (10억 주 단위) | CNBC (sharesout) |
sector / industry | 섹터 / 업종명. 섹터 라벨은 내부 벤치마크 키로 변환 (Health Care→Healthcare, Finance→Financials, Basic Materials→Materials, Telecommunications→Communication Services, Consumer Goods→Consumer Staples, 그 외는 원문 그대로) | Nasdaq summary API (assetclass=stocks, 실패 시 etf로 재시도) |
epsAnnual | 연간 희석 EPS 이력 [{d: 회계연도 종료일, eps}], 오래된 순 → 최신 순 | 1순위 Alpha Vantage EARNINGS (annualEarnings[].reportedEPS, 키 있을 때), 2개 미만이면 Yahoo timeseries annualDilutedEPS (최근 10년 창) |
epsSource | EPS 이력의 실제 출처: alphavantage / yahoo / none | — |
ncavPerShare | 청산가치/주 = (최근 연간 유동자산 − 총부채) ÷ 현재 발행주식수. 표시 전용, 점수 미반영 | Alpha Vantage BALANCE_SHEET 최신 연간의 totalCurrentAssets, totalLiabilities + CNBC 주식수 |
sharesAnnual | 연도별 발행주식수 [{d, shares}], 스플릿 보정 완료 (각 연도 말 이후 발생한 모든 스플릿 비율을 곱해 현재 기준으로 환산) | Alpha Vantage BALANCE_SHEET (commonStockSharesOutstanding) + SPLITS |
insiderPct | 내부자(임원·이사) 보유율 (%) | Yahoo quoteSummary defaultKeyStatistics.heldPercentInsiders × 100 |
currency | USD | 고정 |
캐시 규칙: EPS 이력 24시간 (Alpha Vantage 한도 초과로 Yahoo로 폴백한 경우만 1시간), 재무제표 연간 데이터 24시간 (빈 결과는 1시간), 내부자 지분 24시간 (실패 시 1시간), Yahoo crumb(인증 쿠키) 30분.
데이터 결측 시 동작: Alpha Vantage 키가 없거나 한도 초과면 epsAnnual은 Yahoo(약 4개년)로 폴백하고, ncavPerShare·sharesAnnual은 빈 값이 된다 (이 경우 Formula의 주주환원 점수는 중립 처리 — §2.4).
미국 소스가 한국 종목을 커버하지 못하므로 .KS(코스피)를 먼저 조회하고 가격이 없으면 .KQ(코스닥)를 조회한다. 통화는 KRW.
| 반환 필드 | 정의 / 미국 경로와의 차이 |
|---|---|
price | Yahoo price.regularMarketPrice |
epsTTM | 최근 연간 희석 EPS (진짜 TTM이 아니라 연간값으로 대체 — 코드 주석에 "TTM proxy"로 명시) |
forwardEPS | Yahoo earningsTrend의 당해연도(period === '0y') EPS 추정치 평균 (epsTrend.current) |
revGrowthFwd | 같은 0y 구간의 매출 추정치 성장률 (소수 → %로 변환) |
forwardPE | 원칙: price ÷ forwardEPS로 직접 계산해 내부 정합성 유지. forwardEPS가 없으면 Yahoo defaultKeyStatistics.forwardPE를 쓰되, 그것이 암시하는 forward EPS가 TTM EPS의 3배를 넘으면 무효(null) 처리 |
roe | Yahoo financialData.returnOnEquity (소수) × 100 |
debtEquity | Yahoo financialData.debtToEquity (%) ÷ 100 |
insiderPct | Yahoo heldPercentInsiders × 100 |
epsAnnual | Yahoo timeseries만 사용 (Alpha Vantage 미사용) |
sharesAnnual | Yahoo annualOrdinarySharesNumber. 단, 최신 연간 주식수가 현재 sharesOutstanding과 5% 넘게 다르면 최신값을 현재 주식수로 교체 (주식 클래스 혼합 오류 방지 앵커링) |
ncavPerShare | (최근 연간 유동자산 − 총부채) ÷ 현재 주식수. 부채는 annualTotalLiabilitiesNetMinorityInterest 사용 |
sector | Yahoo assetProfile.sector를 변환 (Consumer Cyclical→Consumer Discretionary, Consumer Defensive→Consumer Staples, Financial Services→Financials, Basic Materials→Materials 등) |
forwardDataNote: 'inconsistent'를 반환한다 (Formula 페이지는 이 경우 경고를 띄우고 해당 항목을 측정 불가로 처리한다).
캐시: 종목(심볼)당 24시간.
티커 하나의 PER·EPS CAGR·PEG·ROE/PEG를 계산하고 PEG 기준 신호(저평가/적정/고평가)를 표시하는 단일 화면 도구. 적정가(달러 금액)를 산출하는 모델은 이 페이지에 존재하지 않는다 (§5 불일치 1 참조).
| 항목 | 정의 | 출처 |
|---|---|---|
| Price | 현재가 | /api/stock-data 자동 입력 (사용자 수정 가능) |
| Current EPS (TTM) | TTM EPS (한국 종목은 최근 연간 EPS) | /api/stock-data 자동 입력 (수정 가능) |
| Future EPS Estimate | 미래 EPS 추정치 | /api/stock-data의 forwardEPS 자동 입력 (수정 가능) |
| In (years) | Future EPS까지의 기간. 1~5년 선택, 기본값 3년 | 사용자 선택 |
| ROE (%) | 자기자본이익률 | /api/stock-data 자동 입력 (수정 가능) |
| Sector | 섹터 (벤치마크 조회용) | /api/stock-data의 섹터로 자동 선택 (수정 가능) |
forwardEPS는 통상 "다음 회계연도" 추정치인데, 대시보드는 이를 사용자가 고른 N년(기본 3년) 뒤의 EPS로 간주하고 CAGR을 계산한다. 검증 시 이 가정을 감안해야 한다.
—, 신호 없음).| 조건 | 신호 |
|---|---|
| PEG < 1.0 | 🟢 Undervalued |
| 1.0 ≤ PEG ≤ 2.0 | 🟡 Fair Value |
| PEG > 2.0 | 🔴 Overvalued |
| 섹터 | Avg PER | Avg EPS($) | Avg PEG |
|---|---|---|---|
| Technology | 28.5 | 8.2 | 1.8 |
| Healthcare | 22.1 | 5.1 | 1.9 |
| Financials | 13.4 | 6.8 | 1.2 |
| Consumer Discretionary | 24.7 | 4.3 | 2.1 |
| Consumer Staples | 19.8 | 3.2 | 2.8 |
| Industrials | 21.3 | 4.9 | 1.7 |
| Energy | 11.2 | 7.4 | 0.9 |
| Materials | 17.6 | 3.8 | 1.5 |
| Real Estate | 35.1 | 2.1 | 3.2 |
| Utilities | 16.4 | 2.4 | 2.4 |
| Communication Services | 19.2 | 5.6 | 1.6 |
PER/CAGR/PEG/ROE-PEG 4개 지표 + 섹터 평균 PER·PEG + PEG 신호. 워치리스트는 브라우저 localStorage(ji_wl2)에만 저장되며 서버로 전송되지 않는다.
"싸고(VALUE) + 성장 대비 싸고(GARP) + 좋은 사업이고(QUALITY) + 안 망하는(SAFETY)" 종목을 100점 기계식 점수로 거르는 스크리너. 점수에 주관 입력이 들어가지 않도록, 부채비율·매출성장률·EPS 이력·주식수 추이·내부자 지분은 API 자동값만 쓰고 화면에서 수정할 수 없게 잠겨 있다.
| 항목 | 성격 | 출처 |
|---|---|---|
| Price, EPS TTM, Forward P/E, Forward EPS, ROE | 자동 로드 후 수정 가능 (수동 보정 허용) | /api/stock-data (§0) |
| 섹터 벤치마크 P/E | 섹터로 자동 선택, 직접 입력 칸이 우선 | 페이지 내장 상수표 (§2.3) 또는 사용자 직접 입력 |
| Debt/Equity, Forward revenue growth | 자동 전용 (readonly) | debtEquity, revGrowthFwd |
| 연간 EPS 이력 | 자동 전용 | epsAnnual (출처는 epsSource) |
| 주식수 이력 (스플릿 보정) | 자동 전용 | sharesAnnual |
| 내부자 보유율 | 자동 전용 | insiderPct |
| NCAV/주 | 자동 전용, 표시만 | ncavPerShare |
| 성장 윈도우 N (1/3/5년) | 사용자 선택, 기본 3년. EPS 이력이 N+1개 미만인 윈도우는 버튼 비활성 | 사용자 |
| 함정 체크 3개 | 수동 체크박스 (유일한 주관 입력, 점수가 아닌 판정 상한에만 작용) | 사용자 |
성장 윈도우 폴백 규칙: 현재 선택된 윈도우가 데이터 부족으로 비활성화되면 3년을 우선 적용하고, 3년도 불가능하면 사용 가능한 가장 긴 윈도우로 자동 전환한다. 5년 윈도우는 연간 EPS가 6개 이상 필요하다. EPS 이력이 6개 미만이고 출처가 Yahoo면 "5Y unavailable" 안내가 표시된다.
| 섹터 | P/E |
|---|---|
| Technology | 28.5 |
| Healthcare | 22.1 |
| Financials | 13.4 |
| Consumer Discretionary | 24.7 |
| Consumer Staples | 19.8 |
| Industrials | 21.5 (대시보드 표의 21.3과 다름 — §5 불일치 2) |
이 6개 외 섹터(Energy, Materials 등)는 벤치마크가 없어, 직접 입력하지 않으면 아래 "절대 기준"으로 채점된다. 한국 종목은 섹터가 매핑돼도 미국 벤치마크가 적용되며, 직접 입력값이 없을 때 "한국 섹터 배수는 구조적으로 낮아 VALUE가 후하게 나올 수 있다"는 안내 플래그가 뜬다.
섹터 벤치마크가 있을 때: r = Forward P/E ÷ 섹터 평균 P/E
| 조건 | 점수 |
|---|---|
| r < 0.6 | 25 |
| 0.6 ≤ r < 0.8 | 19 |
| 0.8 ≤ r < 1.0 | 13 |
| 1.0 ≤ r < 1.3 | 7 |
| r ≥ 1.3 | 0 |
벤치마크가 없을 때 (절대 기준, Forward P/E 단독):
| 조건 | 점수 |
|---|---|
| < 10 | 25 |
| < 15 | 19 |
| < 20 | 13 |
| < 25 | 7 |
| ≥ 25 | 0 |
전제 조건: EPS TTM > 0, Forward EPS > 0, Forward P/E > 0. 하나라도 아니면 0점 + "No TTM profit — PEG not applicable" 플래그.
성장률 g의 결정 (우선순위 순):
epsAnnual[길이 − N] (최신 연간 EPS에서 N−1년 전 값 = Forward 연도 기준 N년 전).
g(%) = (Forward EPS − EPS TTM) ÷ EPS TTM × 100 + "EPS history unavailable" 플래그.| 조건 | 점수 |
|---|---|
| g ≤ 0 | 0 ("no growth") |
| PEG < 1.0 | 25 |
| 1.0 ≤ PEG < 1.5 | 19 |
| 1.5 ≤ PEG < 2.0 | 12 |
| 2.0 ≤ PEG < 3.0 | 5 |
| PEG ≥ 3.0 | 0 |
ROE 점수:
| ROE (%) | 점수 |
|---|---|
| ≥ 20 | 10 |
| ≥ 15 | 8 |
| ≥ 10 | 5 |
| ≥ 5 | 2 |
| < 5 | 0 |
이익 모멘텀:
| 조건 | 점수 |
|---|---|
| EPS TTM > 0 이고 Forward EPS > EPS TTM | 5 |
| (TTM ≤ 0이어도) Forward EPS > EPS TTM | 3 |
| 그 외 | 0 |
주주환원 (발행주식수 추이, 스플릿 보정 후, 선택 윈도우 N년):
pct = (최신 주식수 − 기준 주식수) ÷ 기준 주식수 × 100. 기준 주식수는 이력이 N+1개 이상이면 N년 전 값, 부족하면 가장 오래된 값을 쓰고 기간 라벨에 *를 붙인다 (예: 2Y*).| pct | 점수 |
|---|---|
| ≤ −5% (자사주 매입) | 10 |
| ≤ 0% | 7 |
| ≤ +5% | 3 |
| > +5% (희석) | 0 |
레버리지 (Debt/Equity, 비율):
| 조건 | 점수 |
|---|---|
| D/E < 0 (자본잠식) | 0 + "Negative equity" 플래그 |
| < 0.2 | 10 |
| < 0.5 | 7 |
| < 1.0 | 4 |
| < 2.0 | 1 |
| ≥ 2.0 | 0 |
전망 (선행 매출 성장률 %):
| 조건 | 점수 |
|---|---|
| > 20 | 5 |
| ≥ 10 | 4 |
| ≥ 5 | 2 |
| > 0 | 1 |
| ≤ 0 | 0 |
내부자 지분 (%):
| 조건 | 점수 |
|---|---|
| ≥ 15 | 10 |
| ≥ 8 | 7 |
| ≥ 3 | 4 |
| ≥ 1 | 2 |
| < 1 | 0 (+ "기관 중심 대형주에서는 정상" 안내 플래그) |
수익기준 안전마진: GARP의 g가 양수일 때만 계산.
안전마진 < 0이면 "Price above PEG-1.0 fair value" 플래그.
청산가치: NCAV/주를 표시하고 현재가 대비 괴리율 = (NCAV − 현재가) ÷ 현재가 × 100을 함께 보여준다. 재무제표 데이터가 없으면 "balance-sheet data unavailable"로 표시.
| 총점 | 판정 |
|---|---|
| 80 이상 | 🟢 Strong candidate — dig deeper |
| 60–79 | 🟡 Watchlist |
| 40–59 | 🟠 On hold — pass unless special |
| 40 미만 | 🔴 Reject |
총점 100점 만점 = 4기둥 합. 결측 항목은 대부분 0점 처리되므로, 데이터가 빈약한 종목(특히 Alpha Vantage 미커버 종목)은 실력보다 낮게 나올 수 있다. 중립 처리는 주주환원(5점)과 내부자 지분(5점) 두 곳뿐이다.
티커만 넣으면 고정 규칙 DCF로 주당 내재가치를 산출하는 도구. 종목별 가정 조정은 일절 없으며, 숫자가 믿을 수 없는 상황에서는 값을 찍지 않고 거부(refuse) 한다. 비교용으로 현재가가 내포하는 성장률(역계산)도 함께 내놓는다.
| 항목 | 정의 | Yahoo 소스 |
|---|---|---|
| 현재가, 회사명, 통화 | quoteSummary price 모듈 | regularMarketPrice 등 |
| 섹터 / 업종 | 버킷 판정용 문자열 | assetProfile.sector / .industry |
| 매출 성장률 (TTM 전년비, 소수) | 축소 게이트용 | financialData.revenueGrowth |
| 발행주식수 | 주당 환산용. 없으면 최근 연간 주식수로 대체 | defaultKeyStatistics.sharesOutstanding → annualOrdinarySharesNumber |
| 연간 FCF | 기본 현금흐름 | timeseries annualFreeCashFlow |
| 연간 희석 EPS | 폴백 현금흐름 + 게이트용 | timeseries annualDilutedEPS |
| TTM 희석 EPS | 최신성 게이트용 | timeseries trailingDilutedEPS |
| 현금 | 순현금 계산용 (단기투자 포함 시리즈 우선, 없으면 현금 단독 시리즈) | annualCashCashEquivalentsAndShortTermInvestments → annualCashAndCashEquivalents |
| 부채 | 차입금 = 장기부채 + 유동부채 (둘 다 있을 때). 하나라도 없으면 총부채로 대체 | annualLongTermDebt + annualCurrentDebt → annualTotalDebt |
| 연간 매출 | 최신 현금흐름 마진(%) 표시용 | annualTotalRevenue |
timeseries 조회 창은 최근 12년. 한국 종목은 6자리 코드 정규식 매칭 후 .KS → .KQ 순으로 시도해 가격이 잡히는 쪽을 채택한다. 결과(거부 포함)는 심볼당 1시간 캐시.
| 상수 | 값 |
|---|---|
| 할인율 | 10% (연말 할인). 민감도로 9% / 11% 값도 병기 |
| 예측 기간 | 10년 |
| 성장률 캡 / 하한 | +15% / −10% |
| 감쇠 | 1~5년차는 g, 6~10년차는 g ÷ 2 |
| 터미널 배수 | A 버킷 ×19 / B 버킷 ×13 / C 버킷 ×10 (10년차 현금흐름에 곱함) |
판정 순서:
financial 포함 (또는 섹터가 정확히 financials) 이면서 업종에 credit services가 없을 때.credit services 또는 software 포함. 또는 업종에 internet이 포함되고 동시에 content 또는 retail 포함.utilities·energy·materials 중 하나 포함. 또는 업종에 auto·oil·steel·waste management·telecom·chemical 중 하나 포함.insufficient-data).financial).shrinking-revenue). 성장률이 null이면 게이트를 건너뛴다.현금·부채 중 하나라도 없으면 순현금 = 0으로 두고 netCashKnown: false 플래그를 단다 (거부는 아님).
준비값 (전부 "최근 5개 연간" 기준, 베이스는 "최근 3개 평균"):
FCF 베이스 = 최근 3개년 연간 FCF 평균 (연간 데이터 3개 미만이면 null)FCF 음수연도 수 = 최근 5개년 중 FCF < 0인 해의 수EPS 베이스(주당) = 최근 3개년 연간 희석 EPS 평균어닝파워 = EPS 베이스(주당) × 현재 발행주식수 (회사 전체 이익 규모로 환산)EPS 음수연도 수 = 최근 5개년 중 EPS < 0인 해의 수판정 플래그:
epsContaminated): FCF 베이스 > 0 이고 어닝파워 > FCF 베이스 × 2.5fcfDistorted): EPS 오염이 아니고, FCF 베이스 > 0, 어닝파워 > 0, EPS 음수연도 ≤ 1, 그리고 FCF 베이스 < 어닝파워 × 0.6선택 규칙:
EPS × 현재 주식수로 회사 전체 금액으로 환산한 시계열.contaminated-earnings / FCF 데이터 3년 이상인데 FCF 베이스 ≤ 0 → negative-stream / FCF 데이터 3년 이상인데 음수연도 ≥ 2 → volatile-stream / 그 외 → insufficient-data).negative-earnings).earnings-collapse).gRaw: 스트림 최근 6개년의 양 끝점만으로 계산하는 CAGR.
g = min(+15%, max(−10%, gRaw)). 캡/하한에 걸리면 노트로 표시.같은 구조(감쇠·할인율·배수·순현금 고정)에서 내재가치 = 현재가가 되는 g를 [−30%, +80%] 구간에서 이분 탐색 60회로 찾는다.
| 코드 | 조건 요약 |
|---|---|
insufficient-data | 주식수 불명 / 깨끗한 FCF·EPS 이력 3년 미만 |
financial | 은행·보험·종합금융 (credit services 제외) |
shrinking-revenue | TTM 매출 성장률 < −10% |
contaminated-earnings | 어닝파워 > FCF × 2.5 (일회성 이익 오염)인데 FCF도 깨끗하지 않음 |
negative-stream | 최근 3년 평균 FCF ≤ 0 |
volatile-stream | 최근 5년 중 FCF 음수연도 ≥ 2 |
negative-earnings | FCF는 양수이나 3년 평균 GAAP 이익 ≤ 0 |
earnings-collapse | TTM EPS가 최근 연간 EPS의 절반 미만으로 붕괴 |
intrinsicPerShare: 위 고정 규칙 전체를 적용한 보수적 바닥값 성격의 추정치. 가정을 종목마다 바꾸지 않으므로 종목 간 비교(잣대 통일)가 본래 용도다.| ① 대시보드 Valuation | ② JONG Formula | ③ JONG Value | |
|---|---|---|---|
| 위치 | public/index.html | public/jong-formula.html | api/intrinsic-value.js |
| 출력 | PER·CAGR·PEG·ROE/PEG + PEG 신호 | 100점 점수 + 판정 등급 | 주당 내재가치 + 안전마진% + 내포 성장률 |
| 핵심 식 | PEG = (가/EPS) ÷ CAGR | 4기둥 구간표 합산 | 10년 DCF + 터미널 배수 |
| 성장률 | forwardEPS를 N년 후로 간주한 CAGR | forwardEPS ÷ N년 전 연간 EPS의 CAGR | 실현 FCF/EPS CAGR (최근 6년 양끝점), 캡 +15/−10% |
| 데이터 | /api/stock-data | /api/stock-data | Yahoo 직접 조회 |
| 거부 개념 | 없음 (값 없으면 표시만 생략) | 없음 (결측은 0점 또는 중립) | 있음 (8개 사유 코드) |
대조 대상: JONG_FORMULA.md (이하 "기존 문서") 및 3관문 운영 정의(워치리스트에 기록된 통과 기준). 전부 코드가 진실이다.
index.html은 적정가 금액을 계산하는 모델을 하나도 갖고 있지 않다. 있는 것은 PER·CAGR·PEG·ROE/PEG 지표와 PEG 구간 신호(<1 / 1~2 / >2)뿐이다. 따라서 1관문 "할인" 판정은 현재 코드로는 PEG < 1 (Undervalued 신호)로 해석할 수밖에 없으며, 문서상의 "3가지 적정가" 서술은 코드와 불일치한다. → 2026-10-22 운영 정의 확정: 1관문은 대시보드 PEG < 1.0 (자동 입력값·기본 기간 3년 기준)으로 고정됐고, 3관문 프로세스 문서와 전시장 스캔 절차도 이 정의로 갱신됐다.BENCH는 21.3이다. 같은 종목을 두 페이지에서 평가하면 VALUE 점수/벤치마크 표시가 달라질 수 있다. 나머지 5개 공통 섹터(Technology 28.5, Healthcare 22.1, Financials 13.4, Consumer Discretionary 24.7, Consumer Staples 19.8)는 일치한다.*를 붙인다.Educational tool. 이 페이지는 계산 방식의 투명성을 위한 문서이며 투자 조언이 아닙니다. 세 시스템의 출력은 고정된 규칙과 공개 데이터 소스에 기반한 추정치로, 다른 모델 및 시장 가격과 다를 수 있습니다.