Equal-Weight Index
Install and import#
npm install fintech-algorithmsimport { calculate } from "fintech-algorithms/index-and-benchmark-engineering/weighting-and-capping/equal-weight-index";Signature#
calculate(data)Every constituent counts the same: each eligible name receives the target weight 1/N at the rebalance date. Realised weights then drift with relative prices until the next scheduled rebalance, and restoring the equal target is what creates turnover. The construction does not imply continuous rebalancing; the rebalance calendar is a separate methodology choice that this function does not model.
Parameters#
| Name | Type | Notes |
|---|---|---|
data | { ids: string[]; returns: number[] } | Constituent ids and their period returns. The returns are applied to the 1/N target weights of a single period; no rebalance calendar, drifted weight, or trade is taken as input. |
Returns#
{ ids, weights, portfolioReturn }
The 1/N target weights and the resulting single-period portfolio return. No turnover or trade list is produced.
Errors#
- When ids and returns differ in length — throws
Complexity: time O(n),
space O(n).
Worked example#
verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.
Input#
{
"ids": ["A", "B", "C", "D", "E"],
"returns": [0.02, -0.01, 0.015, 0.005, -0.004]
}Call#
calculate(data)Returns#
object with 3 fields: ids, weights, portfolioReturn
{
"ids": ["A", "B", "C", "D", "E"],
"weights": [0.2, 0.2, 0.2, 0.2, 0.2],
"portfolioReturn": 0.0052
}Diagrams#
Calculation flow#
Equal-Weight Index calculation flow
flowchart LR
A["Point-in-time inputs"] --> B["Validate units and timing"]
B --> C{"Contract feasible?"}
C -->|No| D["Reject with reason"]
C -->|Yes| E["Calculate Equal-Weight Index"]
E --> F["Recompute invariants"]
F --> G{"Checks pass?"}
G -->|No| D
G -->|Yes| H["Publish audited output"]
Equal-Weight Index methodology state
stateDiagram-v2
[*] --> FrozenInputs
FrozenInputs --> Validated: contract passes
FrozenInputs --> Rejected: missing or infeasible
Validated --> Calculated: apply named rule
Calculated --> Audited: invariants pass
Calculated --> Rejected: invariant fails
Audited --> Published: version and timestamp recorded
Published --> Revised: approved correction
Revised --> FrozenInputs: rebuild from retained source state
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- S&P Dow Jones Indices Index Mathematics Methodology — S&P Dow Jones Indices
- S&P DJI Equity Indices Policies & Practices — S&P Dow Jones Indices
- FTSE Russell Capping Methodology — FTSE Russell, LSEG
- FTSE Russell Index Policy and Methodology Library — FTSE Russell, LSEG
- MSCI Global Investable Market Indexes Methodology Library — MSCI
- MSCI Minimum Volatility Indexes Methodology — MSCI
- S&P Risk Control 2.0 Indices Methodology — S&P Dow Jones Indices
- Principles for Financial Benchmarks — International Organization of Securities Commissions
- Regulation (EU) 2016/1011 — European Union
- Portfolio Selection — Harry Markowitz
- On the Properties of Equally-Weighted Risk Contributions Portfolios — Sébastien Maillard, Thierry Roncalli, and Jérôme Teïletche
- Fundamental Indexation — Robert Arnott, Jason Hsu, and Philip Moore
- FTSE Currency Hedging Methodology Overview — FTSE Russell, LSEG