Methodology

How Argus estimates fair value, in plain language. This is the canonical, version-controlled description of the actual method — written from the current code, not from memory. When the code changes, this file changes with it.

The whole system produces one number per company — the Estimated Price — from a three-level waterfall, and surrounds it with separate lenses (solvency, technicals, a cross-lens synthesis) that are shown beside the price but never folded into it. Every input is the company's own disclosed data plus a short list of owner-set macro assumptions. There is no black box and no live "target price" feed.

A guiding rule runs through everything below: "no estimate" only ever means "no data", never a judgement call. If the numbers can be computed, a number is shown — with its caveats — rather than withheld.


The three-level waterfall

Estimated Price = Level 1 (DCF) → Level 2 (peer check + distress haircut) → Level 3 (the owner's edits). Each level adjusts the one before it. The same pure calculation runs on the server (to show the price everywhere) and live in the Level-3 editor as you change assumptions, so the two can never disagree.

Level 1 — the DCF core (intrinsic value)

A discounted-cash-flow model built entirely from the company's own three-statement history. It projects free cash flow for an explicit number of years, then a terminal value, and discounts everything back at the company's own cost of capital.

The discount rate (WACC). Built from the company's own numbers plus the macro assumptions — never an external cost-of-capital feed:

  • Cost of equity uses CAPM: risk-free rate + beta × equity risk premium. The risk-free rate and ERP are owner-set macro inputs (see Macro assumptions below); beta is the category default, with an optional per-company override.
  • Cost of debt is the company's own real borrowing cost: trailing interest expense ÷ total debt, then taxed (after-tax). It is bounded to a sane 0.5%–25% range. If interest expense hasn't been ingested yet, it falls back to risk-free + 2% and says so.
  • Weights blend the two: equity at market value (shares × price), debt at book. Crucially, the equity weight is floored at 60%. Without that floor, a company whose share price has collapsed would get a cheaper discount rate (its tiny market cap makes debt dominate the blend), which would inflate its DCF exactly when it should be discounted harder. Medtech/pharma are equity-financed businesses; the floor binds only for collapsed-equity names and leaves healthy ones untouched.

The growth-fade mechanism. Revenue growth is not a single guessed number — it fades from a starting rate down to a terminal rate:

  • Starting growth is the company's own trailing revenue CAGR, clamped to 0%–25%. The floor (0%) stops a recent revenue collapse being projected forward as perpetual decline; the cap (25%) stops an unsustainable hyper-growth rate being extrapolated for years. Where no multi-period history is stored yet (the HK/CN names today), it falls back to a disclosed 8% default — and the app says so, visibly.
  • Fade rate: growth steps down toward the terminal rate at no more than 2.5 percentage points per year, so a genuine compounder isn't snapped down to the terminal rate inside five years.
  • Terminal cap: the terminal growth rate is hard-capped at the GDP ceiling (4.0%) — enforced in the math, not just the UI. A mature company cannot grow faster than the economy forever.

Margin recovery, and the distress-gate exception. EBITDA margin also fades — but upward, from the company's trailing margin toward a disclosed category-normal margin (RadTech 18%, MedTech 28%, Pharma 30%), at no more than 5 percentage points per year. This is deliberately generous: it assumes a scaling company reaches normal industry margins. The exception: when a distress/reliability rule is actually firing for the company (high leverage and thin/negative margins), the margin holds flat at trailing instead of climbing. Crediting a distressed company with the same recovery as a healthy one is what previously over-valued names like ARAY. This is rule-driven, not a per-company opinion.

The dynamic horizon. The explicit forecast period is not a fixed 5 years — it is derived per company as the longer of two needs: the years its margin needs to climb to the category norm (at 5pp/yr), and the years its growth needs to fade to terminal (at 2.5pp/yr). Bounded to 5–10 years. A company already at its margin norm and near the terminal growth rate simply gets the 5-year minimum; a recovering compounder gets the runway it actually needs.

Terminal value never runs on a negative final year. A single-scenario DCF ends in Gordon-growth on the final explicit year's cash flow. If that were negative, the model would imply a company with revenue is "worth less than nothing" — which is never a real outcome. The margin-recovery-plus-extended-horizon rules exist precisely so the terminal formula runs on a normalized, positive-margin year. If a DCF still ends on a negative final-year cash flow or a negative enterprise value, it is flagged "not meaningful" and does not become the headline (see the peer fallback below).

Level 2 — peer cross-check and the distress haircut

Same-market peer cross-check. A mechanical peer-multiple valuation is shown beside the DCF: the category's peer EV/EBITDA multiple applied to the company's trailing EBITDA, giving a peer-implied price, with the DCF-vs-peer divergence stated explicitly. This is a same-market check only. The peer table is US-market (GE HealthCare, Philips, Bruker, etc.), so it is deliberately not applicable to the Hong Kong / China names — they show "no same-market peer set" rather than being compared against unrelated-market multiples, and that stays true even if their EBITDA later turns positive.

The peer number plays two distinct roles:

  • As a cross-check (the normal case): shown next to a valid DCF, with the divergence surfaced, so an out-of-line DCF is visible. It does not move the headline here.
  • As a fallback headline (only when the DCF is "not meaningful"): if the DCF broke down (negative terminal-year cash flow or negative enterprise value) and a same-market peer set exists, the headline falls back to the peer-implied price, and a caveat says so. The broken DCF figures are still shown, struck through, for transparency. If there is no same-market peer set, the DCF is kept but flagged hard.

The reliability / distress haircut. A resolved "reliability" rule declares a distress condition: high net leverage (net debt ÷ EBITDA above ~4.5×) and thin or negative margins (EBITDA margin below ~8%, or negative trailing net income). A company holding net cash is never flagged, whatever its EBITDA does. When it fires, Level 2 applies a severity-scaled haircut on top of the Level-1 DCF: 35% plus 5 percentage points per turn of leverage over the threshold, capped at 60%, with the rule's reasons stated. Only this reliability kind of rule moves the price; general monitoring rules stay pure flags.

Level 3 — the owner's edits

Manual override. One editable surface per company recomputes the same waterfall live. You can edit the per-year DCF assumptions (growth and margin, plus the scalars), and you can apply a manual Level-2 override — a signed percentage haircut or premium on the DCF that supersedes the automatic reliability haircut. The owner's saved assumptions always win over the tier defaults. Nothing is a stored price; the composed number always derives from these edits plus live data.

The forecast-recalibration agent. A pending, human-gated assistant that drafts a full per-year growth-and-margin curve for you to accept or edit:

  • Evidence sources are official only. It draws on the company's own filings and on primary-source signals that are approved or auto-approved (exchange/company disclosures). Third-party press, and any queued or rejected signal, are excluded by construction — it can never recalibrate off unofficial noise.
  • Auto-triggered on qualifying new data. It (re)drafts a company only when a fresh piece of that official evidence has landed since its last draft.
  • Always pending, never silent. It writes a proposal — the drafted curve, the cited reasoning, and the evidence — and stops. The live Estimated Price does not move until you approve the whole draft, edit specific years first, or dismiss it. Approval writes through the exact same save path a manual Level-3 edit uses.

Scenario bands (Bear / Base / Bull)

The single Estimated Price is shown with a range built from the company's own growth volatility — the same DCF run three times, never a separate model:

  • Base is the headline DCF.
  • Bear / Bull re-run the DCF from a starting growth shifted down / up by one standard deviation (1σ) of the company's historical year-on-year revenue growth, re-fading to the same terminal rate.

Two honest consequences follow directly from the mechanism:

  • Some names show no band. The band needs at least three years of revenue history (two year-on-year growth observations) to have a volatility figure at all, and it needs a meaningful base DCF. Names with thinner history (the HK names today) correctly show no band rather than a fabricated spread.
  • Some names show a one-sided or collapsed band. The shifted starting growth is still clamped to the same 0%–25% band as the base case. For a hypergrowth name already pinned at the 25% cap, shifting up by 1σ changes nothing — the upside is capped — so the band can be one-sided. A name with zero historical growth volatility collapses to Bear = Base = Bull (an honest flat band, not an invented one).

The solvency lens (interest coverage)

A separate serviceability view, explicitly never part of the price. It asks a different question from the distress haircut: not "does the DCF overstate value?" but "can the company pay its interest bill out of operating profit?" — measured as EBIT ÷ interest expense, both from the company's own filings. Below 3× is a "watch"; below 1.5× (and especially below 1×, where operating profit doesn't cover interest at all) is critical. It is surfaced beside the valuation as its own flag and never moves the Estimated Price.

Technical / market signals

Moving-average trend, RSI, and a volume trend, computed from price history for the owner's own read of market timing. These are deliberately walled off from valuation and never touch the Estimated Price. They are shown in their own panel, labelled as timing-only.

The cross-lens synthesis view

A read-only reading of the numbers already computed — it invents no new number and can override nothing. It looks across the lenses (DCF, peer cross-check, scenario-band width, solvency, any firing distress rule, and technicals) and reports, in plain language:

  • Agreement: do the two value lenses (DCF and peer) point the same way — aligned, mixed (only one is usable), conflicted (they disagree on direction), or insufficient?
  • A confidence-calibrated characterization, never a bare buy/sell. It downgrades its own confidence for every honest reason to trust the read less: the value lenses conflict, the scenario band is wide, a distress rule is firing, debt serviceability is thin, the DCF is invalid, or a lens is missing. Every statement traces back to a specific lens value.
  • The technical lens is timing-only and is excluded from the value verdict — it never moves the direction or the confidence, exactly as it never moves the price.

Currency / FX handling

Two of the holdings report their financials in CNY but trade in HKD, so a per-share figure from their statements is in a different currency from the price it's compared against. The rule is that a conversion is never invisible:

  • The whole waterfall is computed in the company's reporting currency, so the WACC's market-cap-vs-debt weighting is never a mix of two currencies.
  • The per-share outputs are converted into the trading currency once, at the very end.
  • The rate and its as-of date are printed beside any converted figure. If no rate is stored, the app shows "cannot compare" and withholds the estimate rather than printing an unconverted number that looks converted. Portfolio aggregates are USD-only by construction.

Macro assumptions (live, revisitable inputs — not constants)

These are the only non-company inputs to the model. They live in a single macro_assumptions row edited by hand on the /rules page — never a live external feed — so each is a deliberate, dated choice, stated here with its source:

Input Value Source Last set
Risk-free rate 4.20% Owner-set proxy for the US 10-year Treasury yield 2026-07-23 (valuation seed)
Equity risk premium (ERP) 4.23% Pegged directly to Damodaran's published implied ERP for the S&P 500 (Jan 2026 update), not a house premium 2026-07-31
GDP / terminal-growth ceiling 4.00% Hard cap on DCF terminal growth; nominal GDP ≈ the risk-free rate, so the cap sits just below it — a company can't outgrow the economy forever 2026-07-31
Beta — bottom-up, per company computed Damodaran, Betas by Sector (Global), Jan 2026 — industry unlevered beta corrected for cash, relevered at each company's own market D/E (Hamada). Healthcare Products 1.12 (842 firms) · Drugs (Biotechnology) 1.18 (1,193) · Machinery 1.33 (1,553) · Aerospace/Defense 1.17 (319) 2026-09-11
Category beta — RadTech / MedTech / Pharma 1.15 / 0.95 / 1.35 Superseded. Owner-set and unsourced; retained only as the mock-mode fallback and as the editable row on /rules. The live discount rate uses the bottom-up beta above 2026-07-23 (valuation seed)
Country risk premium — China 0.91% Damodaran, Country Default Spreads and Risk Premiums, 5 Jan 2026 update (Moody's A1; total ERP 5.14%). Added to the CAPM cost of equity, incremental over the mature-market base 2026-09-11
Country risk premium — Hong Kong 0.78% Damodaran, same table and update (Moody's Aa3; total ERP 5.01%) 2026-09-11
Country risk premium — United States 0.00% Not configurable. The US is the mature market the ERP above is measured against, so its premium is zero by construction —

Cost of equity is risk-free + β × ERP + country risk premium. The country premium is additive and applied to equity only — never to the cost of debt, which is already the company's own interest expense over its own debt and therefore already prices its credit risk; adding a sovereign premium there would count the same risk twice. The premia and the ERP share one author, one vintage and one update, so the mature-market base in Damodaran's country table (4.23%) is byte-identical to the ERP above. A July 2026 update exists (mature 4.17%, US 4.45%) and is deliberately not mixed in: re-pegging the base and the country premia is one decision taken together.

There is deliberately NO size premium. Damodaran — the same source these country figures come from — argues the size effect is not real and should not be added to CAPM: the historical evidence has become ambiguous, forward-looking premiums show none, and the intuition double-counts risk that is either diversifiable or belongs in the cash flows. The mainstream alternative — Kroll's CRSP decile premiums — sits behind a subscription and so cannot be cited here, and its smallest deciles are documented as contaminated by distressed sub-$5 stocks. So this closes the COUNTRY half of the uniform-discount-rate problem and not the SIZE half: 迈瑞 (CNY 43bn) and 688277.SH (CNY 1.2bn) are both CN listings and therefore still receive the same cost of equity, 9.13%. Company-level risk differentiation belongs in a per-company beta override (analysis_rules.metadata.beta, resolved by resolveBeta) — CAPM-consistent, disclosed, already built, and currently used by no company.

Why bottom-up and not a regression. A regression beta needs a price history and a market index to regress it against. This project has neither: every company carries 29–57 daily bars — six weeks to three months — against Damodaran's own 2-years-weekly / 5-years-monthly standard, and the prices table holds exactly the 15 watchlist tickers, with no index series ingested. A regression is therefore unavailable for every company here, not merely the thinly-traded ones. Bottom-up is also Damodaran's preferred method for precisely this case. The Global table is used rather than the US-only one: the watchlist spans three markets, these are genuinely global industries, the samples are 3–15× larger, and country risk is already a separate additive term, so taking it from the beta too would double-count it.

Distress guard. Relevering uses market D/E, which explodes when equity collapses. ARAY — a $0.03bn market cap against $148m of debt, a 496% D/E — releveres to 5.51, a ~28% cost of equity that measures the collapse rather than the business. Following Damodaran's guidance for distressed firms, any company with a firing reliability rule is relevered at the industry average D/E instead, and the caveat says so. ARAY: 5.51 → 1.24.

Computed live, never stored. The bottom-up beta is recomputed each time, not written into analysis_rules — a stored copy would be a snapshot of a figure that moves whenever the market cap moves, and would go stale silently. metadata.beta keeps its original meaning: the owner's manual override, which still wins over the computed value.

⚠️ This does not differentiate companies by SIZE — an open question, recorded

The work that produced the bottom-up beta was motivated by a specific complaint: 迈瑞 (CNY 197bn market cap) and 688277.SH (CNY 7bn, pre-profit) received an identical discount rate. Bottom-up beta does not fix that, and the numbers say so plainly:

market cap D/E relevered β cost of equity
迈瑞 300760.SZ ¥197.3bn 0.1% 1.12 9.90%
688277.SH ¥7.1bn 2.7% 1.14 10.00%

0.02 of beta, 0.10pp of cost of equity. Relevering captures financial leverage, and both companies are near-debt-free, so there is almost nothing to separate. The honest justification for this tier is narrower and different: it removed the last unsourced, invented numbers from the discount rate.

The size complaint stays open. There are exactly two defensible options, and neither is implemented:

  1. Accept it. Damodaran — the source behind the ERP, the country premia and these betas — argues no defensible size premium exists: the historical evidence is ambiguous, forward-looking premiums show none, and the intuition double-counts risk that is either diversifiable or belongs in the cash flows.
  2. Set per-company betas by explicit owner judgement, via the existing metadata.beta rule mechanism — which already resolves correctly and is used by no company. This is a judgement call the owner makes and discloses, not a number that can be sourced.

Beta resolves through a three-tier hierarchy: the bottom-up computed value above, overridden by a company-specific beta if a rule carries one. The ERP is the clearest example of why these are revisitable: it was 5.00% until 2026-07-31, when it was re-pegged to Damodaran's 4.23% — a real external number that should be re-pegged again whenever his next annual update publishes, not left to ossify.


Known conservatism and limitations

Stated honestly, because some of the biggest gaps between the Estimated Price and the market price are deliberate, not errors:

  • The growth clamp is blind to hypergrowth — by design. Starting growth is capped at 25%. For names whose own trailing revenue CAGR is far higher — LEGN (~84%), 2252.HK / MicroPort MedBot (~130%), 2675.HK / Edge Medical (~185%) — the DCF cannot price the growth the market is paying for, and reads 40–80% below price. This is intentional conservatism: extrapolating 100%+ growth for years is dangerous. For these names, lean on the peer check (where applicable), the Level-3 editor, and the synthesis view, which flags exactly this — "the market prices growth the DCF won't underwrite." It is honest signal, not a bug to engineer away.
  • A richly-priced market reads as "below price" even for quality compounders. Names like ISRG and MIR use their real (un-clamped) growth and produce reasonable but conservative multiples that still sit below what a premium market pays. That is a legitimate methodology stance, not an input error.
  • China A-share fundamentals are blocked. United Imaging (688271.SH) and Mindray (300760.SZ) have no computable estimate because the Tushare account tier denies the financial-statement interfaces (a verified account-access wall, not a code bug). They are kept as price-only placeholders pending an owner decision (upgrade the tier, or build CNINFO PDF extraction with a 万元 ×10,000 scale guard).
  • LEGN's narrative extraction is incomplete. LEGN's facts now ingest correctly (revenue, cash, equity, multi-year history → a real DCF), but its forward-looking narrative (MD&A / outlook) is not yet extracted, because foreign-private-issuer forms (20-F / 6-K) aren't in the tracked set for qualitative extraction. The number is real; the qualitative colour is thin.
  • The HK names need more history for bands. Their scenario bands are gated off until at least three years of revenue history is stored — correct behaviour (no fabricated spread), but it means the range is not yet shown for them.

Rendered from METHODOLOGY.md at the repo root — the canonical, version-controlled record. Editing that file updates this page.