SuperAPI AI Directory

valuation

Data & analytics

View repository

Updated 10-27 21:27

About this skill

Growth-stock valuation framework (valuation)

This skill is the framework specification for Phase 4 (valuation) of the company-research SOP, and also applies to any discussion of "is this company expensive". Principles:Numbers come from calc, interpretation comes from this manual, conclusions stop at "scenario / decision point"(Research Constitution §0 Articles 2 and 3).

0. Four iron rules

  1. Every PE / CAGR / PEG / years must be the output of one calc/cli.py call (with calculation_id and input evidence id); if there is no corresponding evidence, write "not obtained: reason", and do not substitute memory or another framework.
  2. Do not output price anchors(target price / fair price / buy price / stop-loss price). The "anchor" for digestion years is the PE multiple scenario, not price; the report only gives the "scenario → years" table and decision points.
  3. Low PEG ≠ safe: the denominator of PEG (forward CAGR) is the only forecast in the entire calculation; when the cycle turns, E gets revised down and PEG jumps. Any PEG interpretation must simultaneously give "whether the forward vs TTM facts match up".
  4. Units and reporting periods are carried into calc as-is from the evidence, and normalized by calc; do not convert to ten-thousands / hundred-millions in the prompt, and do not annualize yourself.

1. Numerator: the three PE frameworks (report side by side, primarily use the first)

Framework Formula (calc function) Use Known pitfalls
Non-recurring ×4 annualized PE(primary) Total market cap ÷ (latest single-quarter non-recurring net profit × 4) → pe_deducted_annualized(total_market_cap, cap_unit, latest_quarter_deducted_profit, profit_unit) Captures the "current run rate", less lagging than TTM for fast-growing stocks Must use non-recurring, not attributable to parent(single quarter ×4 amplifies investment income / subsidies / impairments and other one-off gains and losses by 4x);Seasonality: off-season single quarter ×4 overstates PE, peak-season single quarter ×4 understates it — the off/peak-season direction can only be judged fromthe company's own single-quarter series(earnings-analysis §3), and industry impressions must not be applied; when interpreting, you must state which quarter the latest single quarter is and the directional bias
Forward PE Current price ÷ consensus EPS (FY T mean) → forward_pe(price, eps_forecast) Analysts have already handled seasonality; compare with non-recurring ×4 to see "which year the market is pricing" Depends on consensus quality (number of institutions ≥ 3; see §3)
TTM PE + historical percentile Total market cap ÷ sum of net profit over the last 4 quarters → pe_ttm_from_parts(...), and cross-check with the data source pe_ttm; percentile percentile_rank(history={"history_csv": {"raw_ref": <PE 历史 raw 文件>, "column": "peTTM", "where": {"tradestatus": "1"}, "date_column": "date"}}, current=pe_ttm)(for the CLI series input form see calc/SPEC.md §3; do not treat history_csv / where as top-level parameters) Historical position reference; percentile < 20 valid samples → not_meaningful For fast-growing stockslagging and too high(includes old quarters with low profit); use only as a reference column, not as the main judgment

Definition of T: T = current fiscal year (the year of the current date in Asia/Shanghai).

2. Denominator: sustainable growth rate (primarily use forward CAGR, mandatory cross-validation)

  • Forward CAGR = (consensus FY T+2 EPS ÷ FY T EPS)^(1/2) − 1 → forward_cagr(eps_t, eps_t_plus_n, years=2). Smoothest, removes base effects and seasonality; but it is thesoftest link: sell-side is systematically optimistic about hot tracks, far-year samples are thin, dispersion is wide, and it will be continuously revised.must report min / max and number of institutions simultaneously(consensus_dispersion(low, mean, high), look at max ÷ min and (max − min) ÷ mean).
  • TTM YoY(fact, deseasonalized and single-quarter base removed) = sum of net profit for last 4 quarters ÷ sum of net profit for prior 4 quarters − 1 → ttm_yoy(single_quarters, end_period, unit, money=true);primarily use the attributable-to-parent basis(same basis as consensus EPS), with the non-recurring-adjusted basis shown alongside for cross-check.
  • Cross-validation interpretation → forward_vs_ttm_judgement(forward_cagr_value, ttm_yoy_value, tolerance_pp=10):approx(forward ≈ TTM: growth already realized, forward is credible) / forward_below(forward far below TTM: market is betting on a sharp slowdown, ask why) / forward_above(forward far above TTM: analysts are painting a rosy picture, highest risk of PEG distortion).
  • Two prohibited items: ❌ single-quarter YoY as denominator (last year's low base will falsely inflate it); ❌ QoQ as denominator (seasonality turns growth companies into negative, and annualization is even more explosive). ✅ QoQ (qoq) only as an "inflection / momentum" thermometer, marked in the report as a signal rather than a growth rate.

3. Credibility of consensus expectations

Scenario Handling
Number of institutions ≥ 3, min / max complete Normally proceed to forward_cagr, report lists "number of institutions · range"
Number of institutions < 3 Mark "consensus unreliable", can still calculate but interpretation is downgraded, write "wait for more coverage" in the verdict points
Only per-report forecasts (Eastmoney backup source) Can only be called "per-report forecasts",must not masquerade as consensus, must not enter forward_cagr
Dispersion max ÷ min ≥ 2 Explicitly state "far-year EPS dispersion ≥ 2x, PEG / year-count range should be calculated once each at min–max rather than only looking at the mean"

4. Interpretation table

PEG (non-recurring-adjusted × 4 ÷ forward CAGR) Initial judgment Must be overlaid with
< 1 Growth can digest valuation Only when forward vs TTM = approx can it count as "cheap"; when forward_above, write "cheap is given by forecasts"
≈ 1 Reasonable Same as above
> 1.5–2 Expensive See whether "the harder the chokepoint, the more expensive" (irreplaceability has been priced in), see industry-chain

PEG is a high-incidence area for the "cheap trap" in cyclical growth stocks: PE is lowest before the cycle peaks (E is at the top). Any conclusion of PEG < 1 must be accompanied by a counterargument (catalyst-risk §2).

5. Four-anchor PE digestion years and the "30x anchor three iron rules"

pe_digestion_years(pe, cagr, anchor) = ln(PE ÷ anchor) ÷ ln(1 + CAGR); PE ≤ anchor → 0 years (details.below_anchor).pe_digestion_scenarios(pe, cagr) Calculate four anchors at once:Boom continuation 30 / neutral deceleration 25 / cyclical re-rating upper bound 22 / lower bound 18(x).

  • The four anchors arescenarios, not forecasts: the report must give all four together and state the verdict data corresponding to each scenario (e.g., downstream capex guidance, price / rent thermometer, monthly production scheduling data).
  • 30x anchor three iron rules: ① 30x only multiplies "locked / near-locked" profit (earnings previews, orders in hand for the current year),never multiply far-term (T+2) consensus to make a judgment——That is the mathematical form of "paying a perpetual premium for a permanent shortfall"; ② Anchor and adjudication data switching: use 30 for continued prosperity, 25 for deceleration, and 18–22 for re-rating; write the switching conditions into the adjudication point; ③ State conclusions separately by scenario: "a certain conclusion holds only in the 30x scenario / a certain conclusion also holds in the 25x scenario"——describe only the conditions under which the scenario holds,do not translate into position sizing or buy/sell recommendations。
  • Historical center: this skill does not give any company's or industry's PE center value; whenever a "historical position" is needed, always use fetch_pe_history 's measured series through percentile_rank to derive the percentile, and state the sample period.

6. Standard output columns (consistent with the valuation stage in SOP §1)

扣非×4 PE | 前瞻 PE | TTM PE(分位) | ★PEG(扣非×4 ÷ 前瞻 CAGR) | 前瞻 CAGR(机构数 · 区间) | TTM 同比(交叉验证) | 环比(拐点) | 四锚消化年数 | 前瞻 vs TTM 判读

Each cell: calculation_id, or "not obtained: reason" (follow the structured gaps in SOP §2), or not_meaningful (truthfully state the meaningless domain: PE ≤ 0 / CAGR ≤ 0 / insufficient sample).

7. Calibration for cyclical growth stocks (when the cycle turns, E changes before P)

  • A high PE is not necessarily expensive (E is compressed at the cycle bottom), and a low PE is not necessarily cheap (E is at its peak at the cycle top)——first judge the cycle position (industry capacity / price / downstream capital expenditure), then look at PE.
  • Forward CAGR is systematically optimistic near the cycle top; use TTM year-over-year + quarter-over-quarter inflection points + industry monthly data together to see whether it is "accelerating or decelerating."
  • The "valuation" section in the report must clearly state: which single quarter's PE is currently being used, the seasonal direction, the number of institutions and range for the forward CAGR, the interpretive conclusion and the premises under which it holds.

8. Common error checklist (self-check)

  1. Using net profit attributable to the parent for a single quarter × 4 as non-recurring profit × 4 (one-off gains and losses are magnified).
  2. Using single-quarter year-over-year / quarter-over-quarter as the PEG denominator.
  3. Looking only at the consensus mean and not at the range and number of institutions.
  4. Treating forecasts from individual research reports as consensus expectations.
  5. Giving only one anchor for the number of digestion years; or multiplying the long-term consensus by 30x.
  6. Giving a price anchor, target price, or "reasonable market capitalization."
  7. Converting units or annualizing on your own (should be handed to calc).
  8. Reporting a percentile when the percentile sample is < 20.