Walk-forward 2016 → 2026 · 369 stocks · real costs

Machine learning that ranks NEPSE stocks, tested honestly.

A gradient-boosted model scores every listed company on the Nepal Stock Exchange each day. Its ranking is statistically strong. But once you trade at the next day's open and pay commission, slippage and tax, it does not beat simply holding the market. This site shows both halves of that story.

Ranking skill (mean daily IC)
0.093t = 6.2
Strong 3× a pure momentum signal (0.032)
Top vs bottom decile, per 20 days
+2.55%t = 5.1
Returns rise steadily across all 10 deciles
Strategy CAGR 2016–2026
6.4%vs 17.9%
Below equal-weight buy & hold
Strategy CAGR 2021–2026
9.0%vs 7.8%
Ahead, with a smaller worst fall; not significant

See the app

What you get when you run it on your own computer. Real market data, with a demo portfolio filled in to show how tracking works.

Backtest dashboard

Every year is predicted by a model trained only on earlier years. Trades fill at the next open with 0.9% cost per side and 7.5% capital-gains tax. Hover or tap any chart for exact values.

Growth of Rs 1

Weekly, after costs and tax, log scale. Top-3 model with market filter vs equal-weight buy & hold.

  • Model (top 3, market filter)
  • Buy & hold
  • Model without filter

Loading chart…

Calendar-year returns

The model holds cash in 2016 (not enough training data yet).

  • Model
  • Buy & hold

Strategy summary

CAGR by period and worst fall (MDD).

Strategy16–2021–26MDD
Model, filter2.5%9.0%−41.7%
Model, no filter5.1%−6.0%−63.4%
Momentum, filter6.9%1.8%−53.1%
Buy & hold30.0%7.8%−48.2%

177 trades · 42.9% profitable · winners +13.8% vs losers −7.2% on average.

Forward return by score decile

Average 20-day return from the next open. The ranking clearly works.

Information coefficient by year

Daily Spearman correlation of score with 20-day forward return.

  • Model
  • 60-day momentum

Costs decide the outcome

2016–2026 CAGR as commission + slippage per side rises. Baseline is 0.90%.

How many stocks to hold?

CAGR by number of holdings. No setting beats buy & hold over the full period.

  • 2016–2020
  • 2021–2026

Tradable universe

Average liquid stocks per day (turnover ≥ Rs 5M, price ≥ Rs 100). Early years rest on very few names.

How it works

The same pipeline runs every trading day inside the local app.

01 · Data

15 years of prices

Daily OHLCV for ~370 companies since 2011, adjusted for bonus and rights issues using NEPSE's daily price limit.

02 · Features

35 signals per stock

Returns, trend, volatility, liquidity, 52-week range, market breadth and cross-sectional ranks.

03 · Model

3-model ensemble

Gradient-boosted trees predict market-relative returns; their daily ranks are averaged into one score.

04 · Strategy

Top 3, every 2 weeks

Hold the 3 best-ranked stocks, sell below rank 30, and go to cash when market breadth is weak.

Not financial advice. The edge is real but small, and costs absorb most of it. The model cannot see news, NRB policy, dividends or manipulation, and the panel has some survivorship bias. Past results don't guarantee the future.

Run it yourself

The full app (daily signals, portfolio tracker with real fees and tax, stock explorer) runs privately on your own computer.

git clone https://github.com/prashantbhandary/nepse-quant-desk.git
cd nepse-quant-desk
./start.sh
View source on GitHub

Read the full study

Data cleaning, the bonus/rights adjustment, walk-forward design, robustness checks (random ranking, costs, tree settings, feature importance) and limitations.

Open the research report