fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Equal-Weight Index

Install and import#

bash
npm install fintech-algorithms
ts
import { 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#

NameTypeNotes
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#

data
{
  "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#

Equal-Weight Index — article hero
Equal-Weight Index — failure guard
Equal-Weight Index — worked example

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.

Read the article →

References#

The rest of the Weighting and Capping family#