Methodology

This page states exactly how every number in Aurex is produced, so the analysis can be reproduced and audited independently. The same definitions are implemented in three places, and they are tested against each other: the Python pipeline that builds the dataset, the TypeScript module that recomputes everything in the browser, and the live formulas inside the exported workbook.

Loading dataset provenance...

Data source and tickers

  • Prices come from Yahoo Finance through the unofficial yfinance library.
  • Companies are NSE equities tickered with the .NS suffix.
  • The benchmark is the Nifty 50 index, ^NSEI.
  • The download uses auto_adjust=False, so Yahoo applies split and bonus adjustments but not dividend adjustments.
  • The Close field is used for every calculation. Adj Close is stored for a future total-return mode but is not used anywhere in v1.
  • Dividends are excluded. Returns in Aurex are price returns.

Period and the two datasets

The window is fixed: financial years FY16 to FY26, and calendar months March 2016 to March 2026. Two separate datasets are produced, and they are never mixed.

Dataset separation, enforced by the pipeline
DatasetObservationsUsed for
FY-end11 (FY16 to FY26)FY-end price table, absolute return, CAGR
Monthly121 prices, 120 returnsmonthly returns, mean, variance, standard deviation, covariance, beta, indexed growth, return distribution

Risk statistics computed from the 11 FY-end observations would be a defect, and a unit test guards against that path. Prices are stored rounded to four decimal places, and every metric is computed from those stored prices, never from the higher-precision values Yahoo returned.

FY-end price selection

For financial year FYyy ending March 20yy, the target date is 31 March 20yy. The FY-end price is the close on the last available trading day on or before that target date. Both dates are recorded, so the rule can be verified row by row.

  • 31 March is frequently not a trading day, and the rule handles weekends and holidays.
  • The gap between the target date and the date actually used must be between 0 and 7 days. Anything else stops the build.
  • A price from after 31 March is never used, even if it is the next price in the series.

Monthly price selection

For each calendar month from March 2016 to March 2026, the monthly price is the close on the last available trading day in that month. The real trading date is kept; calendar month-end labels are never substituted for them. Exactly 121 monthly prices are required.

The March observation of each year must equal the FY-end observation for the same year, in both date and price. The pipeline checks this and fails the build if it does not hold.

Returns

Aurex uses simple (arithmetic) returns, not log returns. With P_0 the March 2016 price andP_t the price t months later:

Return and growth formulas
QuantityFormulaNotes
Monthly returnR_t = P_t / P_(t-1) - 1t = 1 to 120. The base month March 2016 has no return.
Absolute return(P_FY26 - P_FY16) / P_FY16Stored as a decimal, e.g. 1.5937 for 159.37%.
CAGR(P_FY26 / P_FY16) ^ (1/10) - 1Ten years between the FY16 and FY26 observations.
Indexed growthIndex_t = 100 x P_t / P_0Charts only. Base value 100 at March 2016.

Sample statistics

Variance, standard deviation and covariance all use the sample definition, dividing by n - 1. Population statistics are never used anywhere in the pipeline, the browser or the workbook, and a unit test proves the sample and population results differ.

Statistical definitions, n = 120 monthly returns
QuantityFormulaExcel equivalent
Mean monthly returnR = (Σ R_t) / nAVERAGE
Sample variances² = Σ (R_t - R)² / (n - 1)VAR.S
Sample standard deviations = √s²STDEV.S
Annualised standard deviations_annual = s x √12STDEV.S(...) * SQRT(12)
Sample covarianceCov(R_s, R_m) = Σ (R_s,t - R_s)(R_m,t - R_m) / (n - 1)COVARIANCE.S
Betaβ = Cov(R_s, R_m) / Var(R_m)SLOPE cross-check

Monthly standard deviation is the primary risk figure. The annualised figure is the monthly value multiplied by √12 and is always labelled as annualised.

Beta and the benchmark

  • Beta uses exactly the 120 aligned monthly return observations. It is never computed from the FY-end observations.
  • Stock and benchmark are aligned on a YYYY-MM calendar-month key. A missing or duplicated month is a hard failure; nothing is forward-filled, interpolated or invented.
  • Beta is a raw-return beta. There is no risk-free-rate adjustment, because no risk-free series is in scope.
  • Because covariance and variance both use the sample definition, beta also equals the slope of the ordinary least squares fit of stock returns on benchmark returns. The workbook computes both and checks that they agree.
  • A benchmark beta against itself is 1, and the pipeline checks that too.

Charts

  • Indexed growth of ₹100. Base value 100 at the March 2016 close, monthly, for each selected company and the Nifty 50.
  • CAGR comparison. One bar per selected company, with a reference line for the Nifty 50.
  • Risk and return. Annualised standard deviation on the x axis against CAGR on the y axis, with the Nifty 50 marked. Descriptive only.
  • Beta comparison. One bar per company with a reference line at 1.00.
  • Monthly return distribution. Histogram with a bin width of 2.5 percentage points, edges at multiples of 2.5 points spanning all plotted series, for one company at a time with the Nifty 50 as an outline. Bin membership is lower ≤ r < upper, and the final bin includes its upper edge. The y axis counts months.
  • Beta scatter. Each point is one month: the Nifty 50 return on x, the company return on y, with the least squares line drawn through them.

Every chart can be replaced by a table of the same numbers through its “View data” control, and no chart animates in a way that delays access to the data.

Interpretation

The interpretation is produced by fixed templates driven by the metrics. There is no generative text, no model, and no randomness. All threshold comparisons use unrounded values; rounding happens afterwards for display only.

  • Return is compared against the benchmark CAGR in percentage points, banded at ±0.5 points.
  • Volatility is compared as a ratio of annualised standard deviations, banded below 0.90, within 0.90 to 1.10, and above 1.10.
  • Beta is banded at below 0, below 0.80, 0.80 to 1.20, and above 1.20.
  • Return per unit of volatility is CAGR divided by annualised standard deviation. It is not a Sharpe ratio, because no risk-free rate is used.

Aurex does not use advisory or predictive language. It does not rank, recommend, predict or attach target prices, and an automated test asserts that the generated text is free of that vocabulary.

Data integrity and eligibility

  • A company is eligible only if all 11 FY-end and all 121 monthly observations exist.
  • Every stored price must be positive.
  • Every FY-end date must fall within the 0 to 7 day window before 31 March.
  • Stock and benchmark month keys must match exactly.
  • Every metric must be finite, and must recompute exactly from the stored prices.

An ineligible company is never emitted as a selectable company, so a partially-populated company can never appear in the interface. Missing observations are an error, not something to fill in.

Limitations

  • Historical only. Everything here describes a fixed past window. It is not a forecast.
  • Source errors. The data comes from Yahoo Finance through an unofficial library and may contain errors or be revised.
  • Split adjustment. Closes are adjusted for splits and bonuses, so they can differ from the price actually traded on that date. Returns are unaffected by that adjustment.
  • No dividends. Returns are price returns. A total-return view is out of scope for v1.
  • Price-only beta. No risk-free rate, no alpha, no rolling windows, no drawdown.
  • Short windows. Beta and volatility over a single ten-year window are point estimates, not stable parameters.
  • Not advice. Nothing in Aurex is investment advice, a recommendation or a prediction.

Runtime architecture

  • The dataset is generated offline and committed as static JSON files.
  • The browser loads those files from this site and recomputes every metric from the stored prices.
  • There is no backend, no database, no authentication, and no runtime market-data request.
  • The Excel workbook is generated in the browser. No selected-company data ever leaves the device.