tipsheet.markets
Market data to 30 Sept 2026 · Data status

Methods

World markets: method

Code: pipeline/tipsheet/compute/world.py (build) and publish/world.py (bundles). Tests: pipeline/tests/test_world.py. Data bank adapters: src/databank/connectors/kite_global.py and ecb_exr.py in the Data bank.

The licence rule

Kite Connect data is licensed to the account holder for personal use (PLAN.md, decision 2), and index levels belong to their providers (S&P, Dow Jones, Nasdaq, FTSE Russell, Deutsche Börse, Euronext, Nikkei, Hang Seng Indexes, SSE, ASX). So this section publishes only derived statistics:

No index level, price, quote or rebased growth curve is published for any index here. A growth-of-100 curve is a level series in disguise, so there is none. Every bundle repeats the rule in meta.licence_rule, and the licence gate (publish/licence_gate.py) refuses any world/ column whose name suggests a level, close, price or rebased value. The Data bank contract for the Kite dataset carries licence.redistribution: internal_only.

What is measured

For Nifty 50 and 11 overseas indices (S&P 500, Dow Jones Industrial Average, Nasdaq Composite, Nasdaq-100, FTSE 100, DAX, CAC 40, Nikkei 225, Hang Seng, Shanghai Composite, S&P/ASX 200):

Sources

WhatDataset (Data bank warehouse)FromLicence
Overseas indiceskite_global_index_history (Kite GLOBAL daily candles, 12 instruments)2004 (US100 and US10YRYIELD 2024-11)internal only
S&P 500, officialfred_series SP5002016-05-31 (FRED carries 10 years)derived only
Nasdaq Composite and Nasdaq-100, officialnasdaq_giw_index_history COMP, NDX1990derived only
Nifty 50nifty_index_history NIFTY_50, price return1990derived only
FX for rupee terms and the euro, pound and yen rowsecb_exr_daily (ECB euro reference rates, 14:15 CET)1999; INR and CNY from 2000-01-13public, attribute the ECB
USD/INR row and Brent in rupeesindia_data_hub_series FMFXUSDINR11D (CCIL)2000derived only
Dollar indexindia_data_hub_series FMFXDXYIDX11D (ICE)2001% moves only
Fed broad dollar, Brentfred_series DTWEXBGS, DCOILBRENTEU2006, 1987public
Goldgoldhub_gold_price (USD; domestic INR via compute/assets.gold_inr)1978; INR 2005% moves only

Where an official public series exists it replaces Kite: the S&P 500 uses FRED from 2016-05-31 and Kite before (Kite equals the official close on all 2,125 overlapping days before the break), and both Nasdaq indices use Nasdaq’s own history throughout. The other eight overseas indices are Kite only.

Nifty 50 is the price index, not the total-return index, so it compares like for like with the overseas price indices. The DAX is the exception among those: it is a total-return index by construction, so its returns include dividends.

Rupee terms. Rupee return = (1 + local return) × (1 + change in rupees per unit of the local currency) − 1. Rupees per unit come from ECB reference rates: (INR per euro) ÷ (currency per euro), taking the rate on or before each close, within 4 days. ECB-derived USD/INR agrees with CCIL’s: median gap 0.04% over 5,136 days, 99th percentile 0.56%. The ECB fixing is at 14:15 CET, so for Asian and US closes the FX rate is a few hours off the close. That matters only for 1-week figures and only at the margin.

Kite: access, storage and cleaning

Access. The Data bank adapter reads the Kite session from the Aftermarket Report’s .env (pointed to by KITE_ENV_FILE in the Data bank .env), so both projects share one set of tokens. The daily access token expires around 06:00 IST. Before each fetch the adapter checks it and, if expired, renews it from the stored long-lived refresh token and writes the new token back. This runs unattended. Verified on 2026-10-01: the stored token had expired and was renewed without a login. If the refresh token is ever revoked, renewal fails, only this dataset fails in the 06:00 Data bank run, the warehouse keeps the previous snapshot, and this section keeps publishing from it with stale flags set. Fix: run amr login once in the Aftermarket Report.

Storage. Data bank dataset kite_global_index_history: raw JSON artifacts, contract, audit, a daily update policy (10-day look-back, ending yesterday because today’s candle is still forming), and the 2004 backfill. The authorization header is redacted from stored metadata and is not part of any fingerprint.

Cleaning (counts from the 2026-10-01 build, 59,000 rows):

  1. Weekend rows dropped (918). None of these markets trades on a weekend. Most are US30’s forward-filled weekends from 2004-12; others are stray quotes, such as JAPAN225 Sundays in 2017 and a HANGSENG Sunday print 26% above the Friday close in 2008.
  2. Rows on exchange holidays dropped, using each exchange’s own session calendar (exchange_calendars: NYSE, LSE, Xetra, Euronext Paris, Tokyo, HKEX, Shanghai, ASX). Before the break this removes only real closures (Hong Kong typhoon days, Whit Monday on Xetra). After it, it removes holiday quotes, 1 to 42 per instrument.
  3. Forward-filled bars dropped (open = high = low = close = the previous close).
  4. Bars dated on or after the day they were fetched (IST) dropped: the candle is still forming.

Two source bars whose high-low range excluded the close (UK100 2011-08-05, USCOMPOSITE 2023-08-04) keep their close; the Data bank nulls their range and flags range_nulled.

The series break

Kite’s GLOBAL series changed character on 2024-11-07, the day US100 and US10YRYIELD first appear. The date is found from the data: the first run of five days on which Kite’s US500 departs from the official S&P 500 by more than 0.01%. KITE_AUDIT.md put the change at 2025-03; the data shows it starts in November 2024.

Since then the values are provider quotes, at times CFD prices on a fixed tick grid, not official closes. Measured where an official close is public:

Kite series vs officialDaysMedian gap90th pctMax1-week return error, median (90th pct)1-month return error, median (90th pct)
US500 vs S&P 500 (FRED)4660.32%0.95%1.80%0.05 pp (0.45)0.29 pp (0.70)
USCOMPOSITE vs Nasdaq Composite4660.10%1.04%2.59%0.05 pp (0.58)0.11 pp (1.13)
US100 vs Nasdaq-1004660.49%0.98%3.09%0.17 pp (0.80)0.45 pp (0.84)

Before the break, US500 matches the official close on 100% of 2,125 days and USCOMPOSITE on 97.4% of 5,246 days.

The three US series above use the official closes, so this error does not reach them. For the eight Kite-only markets (Dow, FTSE 100, DAX, CAC 40, Nikkei, Hang Seng, Shanghai, ASX 200), every current figure carries an error of about this size. Their rows are marked basis: provider_quote. The share of closes on a 0.25 tick grid shows where the quotes are clearly CFD-like: US500 59% of the time since the break against 9.5% before, Hang Seng 41% against 4%, Nasdaq-100 always, and the DAX in some recent months. The other markets look like official closes on this test, but the Nikkei check below shows they can still drift.

Checks

Calendar-year returns against the providers’ published figures (price returns; the DAX is total return):

S&P 500DowNasdaq CompNasdaq-100FTSE 100DAXCAC 40Nikkei 225Hang SengShanghaiASX 200Nifty 50
2023 published24.2313.7043.4253.813.7820.3116.5228.24−13.82−3.707.8420.03
2023 ours24.2313.7043.4253.813.7820.3116.5228.24−13.82−3.707.8420.03
2024 published23.3112.8828.6424.885.6918.85−2.1519.2217.6712.677.498.80
2024 ours23.3112.9528.6424.885.6918.85−2.1519.3917.6713.337.498.80

2023 matches exactly everywhere. In 2024 the year-end close falls after the break: the Dow is 0.07 pp off, the Nikkei 0.17 pp and Shanghai 0.66 pp, because Kite’s last 2024 bar is a provider quote (Shanghai 3,371.56 against the official 3,351.76; Nikkei 39,951.90 against 39,894.54). The others match. These comparisons run on every build and are stored in world/returns_grid under meta.checks.

Other checks: ECB-derived USD/INR against CCIL (above); the pipeline-wide licence gate; strict JSON (every bundle is serialised with NaN and infinity forbidden).

Caveats

Global proxies: Indian international funds’ NAVs

Added 2026-10-01. Code: build_proxies and its helpers in compute/world.py, _publish_proxies in publish/world.py.

Why fund NAVs, not ETF quotes

Kite has no overseas ETFs. The instrument dump of 2026-10-01 (109,396 instruments) has 12 rows on the GLOBAL exchange, all index CFDs already used above (US500 to US10YRYIELD), plus GIFT NIFTY on NSEIX. There are no US-, Hong Kong- or Europe-listed ETFs and no overseas bonds or commodities ETFs. Kite does carry the six Indian-listed international ETFs on NSE (MON100, MONQ50, MAFANG, MASPTOP50, MAHKTECH, HNGSNGBEES). Their exchange quotes are not market proxies, because the industry-wide overseas investment limit has pushed them far above NAV. From the ETF desk’s data (bhavcopy close against AMFI NAV), the median premiums in 2026 are 17.5% for MON100, 19.8% for MAFANG, 19.6% for MASPTOP50, 20.0% for MAHKTECH and 13.3% for HNGSNGBEES, with peaks of 26% to 57%. So basis: etf_quote is reserved and unused, and every proxy is basis: fund_nav.

AMFI NAVs are public. AMFI publishes every scheme’s daily NAV openly, so returns computed from them can be published. Only percentage returns, calendar-year returns, drawdown in percent and correlations are published; no NAV, index level or rebased curve. The indices used to check the proxies (FRED, Nasdaq, and Kite’s Hang Seng and Nikkei) are internal and only their return gaps appear.

The proxies

One scheme per market. Each is the direct growth plan, or the ETF itself for ETFs, which have a single plan. Where several funds cover a market, the choice favours a passive fund and the longest clean history. Source: Data bank amfi_nav_history (all eras).

KeyMarketFund (AMFI codes)StyleFromLocal terms
us_sp500US large caps (S&P 500)Motilal Oswal S&P 500 Index Fund (148381)passive2020-04USD
us_nasdaq100Nasdaq-100Motilal Oswal Nasdaq 100 ETF (114984)passive2011-03USD
us_fangUS mega-cap tech (NYSE FANG+)Mirae Asset NYSE FANG+ ETF (148927)passive2021-05USD
developed_worldDeveloped markets (MSCI World)HDFC Developed World Overseas Equity Passive FoF (149180)passive2021-10USD
europeEuropeInvesco India Pan European Equity FoF (126353)active2014-02EUR
japanJapanNippon India Japan Equity Fund (130860)active2014-08JPY
hong_kongHong Kong (Hang Seng)Nippon India ETF Hang Seng BeES (112395 > 115751 > 140095)passive2010-03HKD
china_techChina tech (Hang Seng TECH)Mirae Asset Hang Seng TECH ETF (149379)passive2021-12HKD
greater_chinaGreater ChinaEdelweiss Greater China Equity Off-shore (119872 > 140243)active2013-01USD
taiwanTaiwanNippon India Taiwan Equity Fund (149329)active2021-12none
aseanSouth-east AsiaEdelweiss ASEAN Equity Off-shore (119878 > 140256)active2013-01USD
brazilBrazilHSBC Brazil Fund (120035)active2013-01none
emergingEmerging marketsKotak Global Emerging Market Overseas Equity Active FoF (119779)active2013-01USD
us_treasuriesUS Treasuries, 3-10 yearsABSL US Treasury 3-10 Year Bond ETFs FoF (152150)passive2023-11USD
global_reitsGlobal listed real estatePGIM India Global Select Real Estate Securities FoF (149298)active2021-12USD
gold_minersGold-mining stocksDSP World Gold Mining Overseas Equity Omni FoF (119277)active2013-01USD
miningMining stocksDSP World Mining Overseas Equity Omni FoF (119279)active2013-01USD

Chained codes. Hang Seng BeES moved from Benchmark to Goldman Sachs (2011) and then to Reliance and Nippon (2016), and the JPMorgan offshore funds became Edelweiss’s in November 2016. Each move opened a new AMFI code for the same scheme. Codes are joined only when the gap is at most 7 days and the NAV moves less than 10% across the junction. All five junctions pass, and each move is close to the reference market’s move over the same days (Hang Seng BeES −2.77% against the Hang Seng’s −2.87% in rupees, and +0.46% against +0.53%).

Cleaning. Weekend rows are dropped. Clean 1:k unit splits are undone: MON100 1:10 on 2021-06-21 and Hang Seng BeES 1:10 on 2019-12-23. Isolated bad prints, meaning a step of more than 15% that reverts within five days, are dropped: two days in DSP World Gold Mining in March 2020. The only gaps longer than a week are Lunar New Year closures in the Taiwan and Greater China funds, of 10 to 12 days.

An Indian fund’s NAV for day T is struck on either the same day’s overseas closes or the previous session’s, and funds have switched between the two. The pipeline measures this rather than assuming it. Quarter by quarter, it correlates the fund’s daily NAV returns with a reference market’s returns on the same session and on the previous one. The reference is the matching index, gold for the gold miners, or the FTSE 100 for the miners. A quarter counts as decided when the better lag correlates at least 0.40 and beats the other by 0.15. A timing regime needs two consecutive decided quarters, and each switch day is placed by a changepoint search. Every NAV is then re-dated to the overseas session it prices.

What the data shows:

Without re-dating, the S&P 500 fund’s daily correlation with the index is 0.36, and its monthly tracking error is 4.3%. Re-dated, they become 0.997 (monthly) and 1.15%.

The US Treasuries fund has no usable reference, so its timing is unresolved (timing_resolved: false, nav_timing: unknown) and its NAV dates are kept. Its daily moves are small (the largest is 1.5%), so a one-day offset barely matters. A switch that shows up in only the latest quarter is ignored until a second quarter confirms it.

Validation against the index, in rupees

Each index is converted to rupees with ECB reference rates. Each fund’s re-dated NAV is then compared with it. The indices are price returns while the NAVs include dividends, so a passive fund should run ahead by the dividend yield, net of withholding tax and costs.

Proxy vs indexMonthsMonthly corrTracking error (ann.)Gap 1yGap 3y ann.Gap 5y ann.Calendar-year gaps
Nasdaq-100 ETF vs Nasdaq-1001850.99930.63%+0.12 pp+0.03 pp+0.02 ppwithin ±1.1 pp except 2017 (−2.0)
S&P 500 index fund vs S&P 500760.99711.15%+0.25 pp+0.28 pp+0.51 pp−0.06 to +0.93 pp
Hang Seng BeES vs Hang Seng1970.99751.35%+2.0 pp+3.0 pp+2.7 pp+1.4 to +3.9 pp every year: the dividend yield
Nippon Japan Equity vs Nikkei 2251440.8668.4%−21.5 pp−8.7 pp−4.7 pp−12.9 to +11.6 pp: an active fund

The passive proxies track their indices closely. The Japan fund is a proxy for Japanese equities only in a loose sense. It is active and differs widely from the price-weighted Nikkei, so read it as “a diversified Japan fund”, not “the Nikkei”. The other active proxies have no public index to check against in the warehouse, and the same caution applies to them. These numbers are rebuilt on every run and stored in world/proxies_grid under meta.checks, along with each fund’s timing regimes and continuity record.

What the bundles hold

Caveats

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