Data to 5 October 2026

Methods

Valuation: P/E, CAPE, dividend yield and yield gaps

Code: pipeline/tipsheet/compute/valuation.py, publish/valuation.py.

Bundles: valuation/*.

Coverage: 22 indices, listed in CORE_INDICES.

Inputs

CAPE

  1. Implied earnings per share: close ÷ P/E.
  2. Real earnings: each month’s EPS is restated in today’s rupees using CPI.
  3. CAPE: today’s real price ÷ the average real EPS over the 120 complete months before this one. It needs 10 years of P/E history, so Nifty 50’s CAPE starts in 2009.

NSE’s 2021 switch from standalone to consolidated earnings

Check against IIMA

The comparison is with Jacob and Raju’s CAPE at IIM Ahmedabad, capeindia.iima.ac.in (cite: Jacob and Raju 2024, SSRN 4911989).

Dividend yield

Yield gaps

MeasureDefinition
Earnings yield100 ÷ P/E on the consolidated basis (since 2026-10-03; NSE’s raw figure is kept as earnings_yield_nse_pct, which steps up about 20% on 2021-03-31)
Nominal yield gapEarnings yield − 10-year G-sec yield
Real yield gapCAPE earnings yield (100 ÷ CAPE) − real 10-year G-sec yield
Real G-sec yield (CPI)10-year G-sec yield − CPI inflation, year on year
Real G-sec yield (survey)10-year G-sec yield − households’ 12-month inflation expectation

Percentiles

Audit notes (2026-10-03)

Index return decomposition (2026-10-04)

Code: compute/return_decomposition.py; published with the valuation step. Bundles: valuation/returns/<index>_monthly, valuation/returns_snapshot.

For same-date positive price index P, published P/E M, and total-return index T, index-implied earnings E = P/M. Between two observations:

100 × Δln(T) = 100 × Δln(E) + 100 × Δln(M) + 100 × Δln(T/P).

These are cumulative log-return points, not ordinary percentage-point shares. The ordinary return is 100 × (exp(total_log/100) − 1) and is shown separately. The three components reconcile before rounding. No index levels are published.

Company-level earnings attribution, constant-membership comparisons, and splits between margin, revenue, dilution and buybacks remain dependent on missing inputs listed in docs/plans/DATA_REQUIREMENTS_2026-10-04.md (DR01–DR04).

Country equity risk premium (2026-10-05)

The valuation page reproduces Damodaran’s rating-based country ERP from his July 2026 workbook. Edition date: 1 July 2026; the workbook explicitly records default-spread corrections on 9 July. Retrieval is recorded separately. This corrected edition must not be treated as information available on 1 July in a backtest. No daily or historical ERP series is inferred from this snapshot.

ERP = mature-market ERP + rating-based default spread × equity/bond volatility multiplier. India: 4.20% + 1.7498812238% × 1.5544955263 ≈ 6.9202%. The published country component is approximately 2.7202%. The exact workbook multiplier and spread, rather than their rounded display values, drive all calculations. All 156 rows in the rating-based country table reconcile to cached source ERP and country-premium results within 0.001 percentage point. The US is excluded from this calculation universe because its ERP is estimated directly from market cash flows; its separate 4.42% benchmark is retained in the bundle. The separate PRS table for unrated countries is outside this implementation.

This premium measures country-adjusted required compensation above a default-free rate. It is not a Nifty-price-implied return, a yield gap, a rupee cost of equity, or a realised-return forecast. Company country exposure depends on operations rather than incorporation alone. No G-sec yield or restricted bond-yield transformation is published by this feature.

Source: https://pages.stern.nyu.edu/~adamodar/pc/datasets/ctrypremJuly26.xlsx Method: https://pages.stern.nyu.edu/~adamodar/New_Home_Page/datafile/ctryprem.html Captured workbook and provenance: docs/reference/damodaran/. The SHA-256 is verified before extraction. Excel cached results, shared strings, table headers and the workbook’s 1904 date epoch are respected. Computation performs no network fetch. To update, capture the author’s next dated workbook unchanged, record its URL, retrieval time and SHA in latest.json, and run the country_erp step. The parser rejects disabled adjustments, changed table headers, bad checksums, invalid inputs and unreconciled results. Preserve earlier captures and source correction notes; do not mix vintages.

This note is the repository file docs/methods/valuation.md, rendered as-is.