CoolFace
Datasetpublic

AnkitSanjyal/nepse-market-data

NEPSE Market Data Daily and tick-level data from the Nepal Stock Exchange, captured by an open-source pipeline and validated at every layer boundary. Daily prices reach back to 1995-07-20. Tick data starts 2026-08-19. That gap is a property of the source, not a backlog - see Coverage below. Tables Path Grain Source Coverage eod_history_ext/ symbol x day ShareSansar (second source) 1995-07-20 -> present, 653 symbols eod_price/ symbol x day NEPSE… See the full description on the dataset page: https://huggingface.co/datasets/AnkitSanjyal/nepse-market-data.

sourceHugging Faceotherupdated 1mo agoView on Hugging Face
0likes366downloads
Dataset Card

NEPSE Market Data

Daily and tick-level data from the Nepal Stock Exchange, captured by an open-source pipeline and validated at every layer boundary.

Daily prices reach back to 1995-07-20. Tick data starts 2026-08-19. That gap is a property of the source, not a backlog - see Coverage below.

Tables

PathGrainSourceCoverage
eod_history_ext/symbol x dayShareSansar (second source)1995-07-20 -> present, 653 symbols
eod_price/symbol x dayNEPSE (authoritative)rolling 365 days, richer columns
floorsheet/one executed contractNEPSE (authoritative)from 2026-08-19, accumulating
bars_1m/symbol x minutederived from floorsheetfrom 2026-08-19
broker_flow_daily/symbol x broker x dayderived from floorsheetfrom 2026-08-19
daily_stats/symbol x dayderived from floorsheetfrom 2026-08-19

floorsheet names both counterparty brokers on every trade with a microsecond timestamp - something most exchanges never expose.

Worked examples

Three analyses with committed outputs — read them without running anything:

NotebookFinding
Who is actually trading this stock?Large broker positions repeat direction 71.8% of the time next session
The corporate actions trapNEPSE's ~10% circuit limit doubles as a corporate-action detector; 747 candidates found from prices alone
The symbols that disappeared36% of symbols are delisted; survivorship bias measured at +0.74 pts/year

Load it

python
import duckdb

# 31 years of daily bars
duckdb.sql("SELECT * FROM 'hf://datasets/AnkitSanjyal/nepse-market-data/eod_history_ext/*.parquet'")

# tick-level contracts
duckdb.sql("SELECT * FROM 'hf://datasets/AnkitSanjyal/nepse-market-data/floorsheet/**/*.parquet'")

Provenance - read this before combining tables

The two daily tables are deliberately not merged, and eod_history_ext carries a source column on every row so it always identifies itself.

  • —eod_price is NEPSE's own end-of-day board. Authoritative, but NEPSE's API clamps every history endpoint to a rolling 365 days. Verified 2026-08-21: an explicit startDate=2010-01-01 on the per-security route returns exactly 365 days, totalPages=1. There is no deeper authoritative source.
  • —eod_history_ext is compiled by ShareSansar and is the only route to pre-2025 data. Credit for that compilation is theirs.

How far to trust the second source. On the 226-day window where both exist:

CheckResult
Overlapping rows75,671 (every NEPSE row matched)
Traded volume identical75,671 / 75,671 - 100.00%
Close price identical75,657 / 75,671 - 99.98%

The 14 close disagreements are 4 debentures already flagged close_outside_range plus 10 single-session differences under 1%. Volume agreeing on every row is the strong signal: both sources describe the same trades. This validates the mechanism; nothing independently verifies the pre-2025 portion.

What will bite you when modelling

  • —Corporate actions are not adjusted. Bonus shares and rights issues are common on NEPSE and leave artificial overnight gaps in any raw price series. Returns computed on the raw close will contain those artefacts.
  • —Tick history cannot be backfilled by anyone. NEPSE's floorsheet endpoint serves only the current session and ignores the date requested. It accumulates one session at a time and a missed day is gone permanently.
  • —The trading week changed. NEPSE traded Sunday-Thursday until roughly 2026-04-06, then Monday-Friday. A naive weekday filter drops real sessions.
  • —The early years are thin. 1995-2002 is a single symbol. The market only becomes broadly observable from 2011 (93 symbols); 125 symbols carry 10+ years.
  • —Every published session passed a completeness gate against upstream's own row count, plus uniqueness, null, and qty * rate = amount checks.

Licence and use

NEPSE publishes its data free to any browser and ShareSansar's robots.txt permits crawling. This dataset is provided for research and educational use. Commercial redistribution may require a licence from NEPSE. If you are ShareSansar or NEPSE and want this changed, open a discussion on this repo.

Pipeline source: https://github.com/ANKITSANJYAL/nepse-pipeline