D03-F04-A06 / Complete engineering topic

Currency-Converted Index

A production-minded guide to Currency-Converted Index.

D03 · INDEX AND BENCHMARK ENGINEERI…
D03-F04-A06Canonical / Tested / Open
D03 / D03-F04
Key concepts

The governed definitions this build depends on. Read them first if a term is unfamiliar.

Currency-Converted Index helps practitioners trust what an index level means and helps builders combine local-market performance with spot-currency movement for a base-currency investor. The useful outcome is not merely a smooth chart—it is a value whose inputs, methodology version, time boundary, calculation, and invariant can all be audited.

Why this matters

Indices sit beneath funds, derivatives, mandates, performance reports, and market commentary. Yet the same securities can produce different valid indices because weighting, dividends, taxes, FX, capping, rebalancing, and governance differ. A benchmark engineer must therefore preserve both the market observation and the rule that transformed it.

Currency-Converted Index methodology overview

The diagram keeps the headline outcome below the title and learning promise, then gives the numerical marks their own stage. Nothing crosses the text region, and every shape represents canonical output rather than decoration.

Intuition before notation

Think of the index as a versioned calculation ledger. First freeze what was eligible and knowable. Then validate units and constraints. Only then calculate the level, weights, return, or membership state. Finally recompute the invariant independently. If continuity, feasibility, weight sum, or timing fails, publication stops.

Rendering system map…

Contract and formula

The canonical relationship is:

1+rtbase=(1+rtlocal)(1+rtFX)1+r_t^{base}=(1+r_t^{local})(1+r_t^{FX})
SymbolMeaningUnit and timing
ItI_tPublished index or strategy levelIndex points at timestamp tt
DtD_tDivisor or scale stateEffective at the same calculation boundary
MtM_tMethodology-defined numeratorBase currency value
Pi,Qi,Fi,XiP_i,Q_i,F_i,X_iPrice, index shares, factor, and FXAligned point-in-time constituent state
wi,riw_i,r_iWeight and returnDecimal fraction using the declared return variant

The shared fixture defines any additional topic-specific fields. Values must be finite; denominators and index levels must remain positive; factors, caps, and tax rates must satisfy their declared bounds; and arrays must align.

Step-by-step method

  1. Freeze the constituent or time-series state at the decision cutoff.
  2. Retain methodology version, source timestamp, currency, calendar, and return variant.
  3. Validate dimensions, bounds, ordering, and constraint feasibility.
  4. Run currency_converted using only current and prior state.
  5. Recompute continuity, weight sum, positive level, or selection constraints.
  6. Publish the result with diagnostics—or reject it with a specific reason.

Worked numerical example

The canonical fixture returns:

JSON
{
  "baseCurrencyReturns": [
    0.01202,
    -0.003004,
    0.002982,
    0.006008,
    -0.003997
  ],
  "levels": [
    1000,
    1012.02,
    1008.979892,
    1011.98867,
    1018.068698,
    1013.999477
  ],
  "endingLevel": 1013.999477,
  "quote": "base currency per local currency"
}

Canonical Currency-Converted Index values

Those are the exact rounded values asserted by both implementations. Rounding occurs only at the public boundary so iterative state and recursive levels do not accumulate display precision as calculation error.

Explore the methodology state

Open the guided light playground. It retains the full synthetic dataset and starts at a populated state. Choose the boundary scenario, change the constraint, step across the effective line, inspect the audit rows, then choose the rejected state. Reset always returns to the same observation and parameter.

The lab teaches one decision: what changed, why the rule changed state, and whether an output may be published. It does not imply that the illustrated method will outperform an alternative.

Implementation walkthrough

The Python implementation and TypeScript implementation expose the same calculate contract. A shared domain engine centralizes validated matrix, weight, capping, return, and rounding primitives, while each topic wrapper fixes the catalog calculation kind. The shared JSON fixture prevents language-specific examples from drifting.

The implementation deliberately favors explicit loops and diagnostics. Production administrators may use decimal arithmetic, distributed price engines, solver libraries, and exception workflows, but they should preserve the same visible invariants.

Compare nearby variants

Return variantIncludes price movementIncludes distributionsOther state
Price returnYesNo
Gross total returnYesGrossReinvestment convention
Net total returnYesAfter assumed taxTax matrix
Excess returnTotal-return inputAs inheritedFinancing subtraction
Currency hedgedBase-currency inputAs inheritedForward hedge and roll

The table shows why a nearby method cannot be substituted silently. A different tax assumption, cap sequence, covariance constraint, or review buffer changes the index definition even when the final numbers appear close.

Testing and validation

Topic tests verify canonical output, invalid-input rejection, input immutability, JSON finiteness, and cross-language parity. Domain checks additionally validate all package files, Mermaid source, SVG XML and bounds, data density, lab controls, keyboard behavior, deterministic reset, reduced motion, responsive layouts, embedded article behavior, links, and production builds.

Passing those checks establishes definition-level correctness for the educational convention. It does not establish tracking capacity, market impact, predictive value, administrator authorization, or compliance with every jurisdiction.

Failure modes

The central guard is to declare the FX quote direction and synchronize market and currency cutoffs. Common failures include stale divisor or FX state, infeasible caps, singular covariance, missing dividends, future review data, mismatched calendars, excessive rounding, silent corrections, and exceptional corporate events handled with the wrong provider rule.

Currency-Converted Index publish-or-block guard

A rejected calculation should retain the raw inputs, methodology version, failed invariant, and time of decision. That evidence is more valuable than a plausible number with unknown provenance.

Evidence, governance, and scope

This topic belongs to Return Variants. The S&P DJI mathematics guide distinguishes price, gross, net, excess, dividend-point, currency, and currency-hedged return series. Benchmark governance also requires transparent methodology quality, conflicts management, change procedures, complaints, auditability, and cessation planning. The package uses synthetic data and does not reproduce a branded provider index.

Summary and next topic

You can now calculate, implement, and audit Currency-Converted Index. Freeze dated state, make constraints explicit, recompute the invariant, and block unsafe output. Continue with Currency-Hedged Index to extend the benchmark-engineering chain.

Asset map

AssetArticle placementVideo sceneSourceStatic fallbackStatus
Methodology overviewOpening1–2visuals/static/article-hero.svgSame assetReady
Calculation flowIntuition3visuals/mermaid/calculation-flow.mdArticle stepsReady
Canonical valuesWorked example5visuals/static/worked-example.svgFixture JSONReady
Guided labExploration4–7visuals/animated/playground.htmlWorked-example SVGReady
Failure guardFailure modes7visuals/static/failure-guard.svgText rejection ruleReady

Full source records are in ../REFERENCES.md, and the canonical factual package is ../README.md.

Currency-Converted Index calculation flow

This diagram separates the dated methodology state from calculation and invariant checks.

Rendering system map…

Takeaway: currency_converted is publishable only after feasibility and post-calculation invariants agree.

Currency-Converted Index methodology state

This state machine makes review, calculation, exception, and publication boundaries visible.

Rendering system map…

Takeaway: Declare the fx quote direction and synchronize market and currency cutoffs; a revision creates a new version instead of silently overwriting history.

References13 primary sources and evidence notes

Expand the source trail, evidence role, and limitations behind the engineering choices.

Accessed 2026-07-21. Examples and datasets are synthetic; no vendor index levels or constituent data are redistributed.

R1 — S&P Dow Jones Indices Index Mathematics Methodology

  • Organization or authors: S&P Dow Jones Indices
  • Source type: Official index mathematics methodology
  • Publication or effective date: 2026 accessed edition
  • URL or DOI: https://www.spglobal.com/spdji/en/documents/methodologies/methodology-index-math.pdf
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Divisors, price and capitalization weighting, capping, return variants, currency, strategy, risk-control, decrement, and index-of-indices mathematics
  • Limitations: Provider conventions are authoritative for S&P DJI indices, not universal defaults

R2 — S&P DJI Equity Indices Policies & Practices

R3 — FTSE Russell Capping Methodology

R4 — FTSE Russell Index Policy and Methodology Library

  • Organization or authors: FTSE Russell, LSEG
  • Source type: Official methodology library
  • Publication or effective date: Current accessed edition
  • URL or DOI: https://www.lseg.com/en/ftse-russell/governance/index-policy-and-methodology
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Calculation, liquidity, free float, review, governance, and recalculation source hierarchy
  • Limitations: The library links multiple documents whose effective dates must be checked separately

R5 — MSCI Global Investable Market Indexes Methodology Library

  • Organization or authors: MSCI
  • Source type: Official methodology library
  • Publication or effective date: May 2026 calculation and GIMI editions
  • URL or DOI: https://www.msci.com/eqb/gimi/stdindex/methodology.html
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Investability, free float, size and liquidity segmentation, reviews, corporate events, and index calculation
  • Limitations: MSCI data and branded production calculations can require licenses

R6 — MSCI Minimum Volatility Indexes Methodology

  • Organization or authors: MSCI
  • Source type: Official minimum-volatility methodology page
  • Publication or effective date: June 2026 accessed edition
  • URL or DOI: https://www.msci.com/msci-minimum-volatility-indexes
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Optimization-based minimum-volatility construction and constraints
  • Limitations: The educational implementation demonstrates the mathematical core and does not reproduce proprietary production constraints

R7 — S&P Risk Control 2.0 Indices Methodology

  • Organization or authors: S&P Dow Jones Indices
  • Source type: Official strategy-index methodology
  • Publication or effective date: 2025 accessed edition
  • URL or DOI: https://www.spglobal.com/spdji/en/documents/methodologies/methodology-sp-risk-control-2-indices.pdf
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Volatility-target exposure, dampening assets, rebalancing, and realized-volatility state
  • Limitations: This package uses a transparent cash implementation, not every Risk Control 2.0 variant

R8 — Principles for Financial Benchmarks

  • Organization or authors: International Organization of Securities Commissions
  • Source type: International benchmark-governance principles
  • Publication or effective date: Final report FR07/13, July 2013
  • URL or DOI: https://www.iosco.org/library/pubdocs/pdf/ioscopd415.pdf
  • Accessed: 2026-07-21
  • Jurisdiction: Global
  • Supports: Governance, methodology quality, accountability, conflicts, changes, and cessation
  • Limitations: Principles are not a substitute for applicable law or administrator procedures

R9 — Regulation (EU) 2016/1011

  • Organization or authors: European Union
  • Source type: Official consolidated regulation
  • Publication or effective date: Consolidated 1 January 2026
  • URL or DOI: https://eur-lex.europa.eu/eli/reg/2016/1011
  • Accessed: 2026-07-21
  • Jurisdiction: European Union
  • Supports: Accuracy, integrity, administration, input data, methodology, and use of regulated benchmarks
  • Limitations: Legal applicability depends on benchmark type, administrator, use, and jurisdiction

R10 — Portfolio Selection

  • Organization or authors: Harry Markowitz
  • Source type: Original peer-reviewed paper
  • Publication or effective date: 1952
  • URL or DOI: https://doi.org/10.1111/j.1540-6261.1952.tb01525.x
  • Accessed: 2026-07-21
  • Jurisdiction: General
  • Supports: Mean-variance foundations used by the minimum-variance topic
  • Limitations: Index-provider constraints and estimation choices are later implementation layers

R11 — On the Properties of Equally-Weighted Risk Contributions Portfolios

  • Organization or authors: Sébastien Maillard, Thierry Roncalli, and Jérôme Teïletche
  • Source type: Original peer-reviewed research
  • Publication or effective date: 2010
  • URL or DOI: https://doi.org/10.3905/jpm.2010.36.4.060
  • Accessed: 2026-07-21
  • Jurisdiction: General
  • Supports: Equal-risk-contribution definition and portfolio properties
  • Limitations: Convergence and covariance estimation remain implementation choices

R12 — Fundamental Indexation

  • Organization or authors: Robert Arnott, Jason Hsu, and Philip Moore
  • Source type: Original peer-reviewed research
  • Publication or effective date: 2005
  • URL or DOI: https://www.researchaffiliates.com/documents/FAJ_Mar_Apr_2005_Fundamental_Indexation.pdf
  • Accessed: 2026-07-21
  • Jurisdiction: General
  • Supports: Economic-scale weighting independent of current market price
  • Limitations: Metric selection, normalization, and data lags must be declared

R13 — FTSE Currency Hedging Methodology Overview

currency_converted_index.ts
/** Currency-Converted Index (D03-F04-A06) reference implementation. */
import { calculateIndexTopic } from "../../../../shared/typescript/indexEngine.ts";

const KIND = "currency_converted";

export function calculate(data) {
  if (data === null || typeof data !== "object" || Array.isArray(data)) throw new TypeError("data must be an object");
  return calculateIndexTopic(KIND, structuredClone(data));
}
Full-height labplaygroundOpen full screen