1. Data sources
Every chart, signal, and table on Nepse Signal traces back to publicly-available sources. We never invent prices and we don't paywall the underlying numbers. Specifically:
- Live prices & indices — synced from the Nepal Stock Exchange (NEPSE) official api.
- Daily floorsheet — every executed contract (~30,000–80,000 rows per session) ingested from the Nepal Stock Exchange (NEPSE) official api, indexed by business_date + buyer_member_id + seller_member_id.
- Fundamentals — EPS, P/E, P/B, ROE, BVPS, market cap, paid-up capital, dividends are calculated in realtime in system using formula from the Nepal Stock Exchange (NEPSE) official website and stored as time-stamped snapshots so historical analysis uses the data that was available at the time, not the retrospectively-revised version.
- News — Nepali financial reports are synced from trusted sources in realtime
- Corporate actions — dividends, bonus issues, rights, splits captured from official NEPSE filings; used to compute adjusted price histories.
2. Local-first architecture
All analytics run against our own PostgreSQL store, not against live API calls. This matters for two reasons: consistency (we can reproduce yesterday's signals on demand) and resilience (third-party outages don't take our site down).
The same architecture lets us serve broker analysis, hot stocks, and per-symbol leaderboards from SQL aggregations instead of scraping on every request — typical p95 latency on these endpoints is under 200 milliseconds.
3. Factor scoring (T / F / M / S / R)
Our deterministic quant score combines five factor families into a single 0–1 number per stock:
- T — Technical — moving-average alignment, RSI, MACD divergence, volume-confirmed breakouts. Weighted 40% by default because Nepali retail flow is momentum-heavy.
- F — Fundamental — P/E and P/B relative to sector median, ROE trend, EPS growth. Weighted 20%.
- M — Momentum — risk-adjusted return over 1/3/6 months. Weighted 15%.
- S — Sentiment — FinBERT-tuned sentiment score over recent news mentioning the symbol. .
- R — Risk — realised volatility, drawdown depth, beta to NEPSE.
The blended score maps to a five-bucket recommendation: Strong Sell (≤0.2), Sell (≤0.4), Hold (≤0.6), Buy (≤0.8), Strong Buy (>0.8). Weights and thresholds are documented in code; they are not opaque magic numbers.
4. Walk-forward backtesting
Static backtests are the easiest way to fool yourself. We use purged walk-forward cross-validation instead: the model trains on data up to day T-1, predicts for day T, then rolls forward one day. Predictions never see data that wasn't available at the time. The purge window between train and test prevents short-term leakage from autocorrelation.
Reported metrics are always out-of-sample: Sharpe ratio, hit rate, maximum drawdown, and average return per signal type. Where a strategy has a positive in-sample Sharpe but negative OOS, we publish that — quietly killing the strategy rather than dressing it up.
5. Probability calibration
A raw classifier might report "70% probability of upside" but actually only be right 55% of the time at that confidence — overconfident. We apply isotonic regression calibration on a held-out validation set so the published probabilities track empirical hit rates. A 70% probability in our system should be right roughly 70% of the time over a meaningful sample.
6. Multi-agent AI advisor
For any stock you ask about, four specialist agents run in parallel via asyncio.gather: a technical analyst, a fundamental analyst, a sentiment analyst, and a risk analyst. Each agent reads from the local data store, forms an opinion, and returns a structured recommendation with rationale. An orchestrator agent then weighs the four opinions and produces a final consensus.
The reasoning of each agent is visible to you — not buried. Disagreement among agents is itself a signal: a stock where the technical agent is bullish but the fundamental agent is bearish demands a closer look, not an automated trade.
7. Broker-flow analytics
For every trading day we compute, per broker: total buy and sell amount, contract count, market share, and per-symbol concentration. The "leaderboard" page is two GROUP BY queries; the "popular stocks" panel is a window function over broker-symbol pairs. Tier-clustered broker labels (institutional vs retail-dominant) are derived weekly from a K-means clustering on historical trade size distributions.
8. What we don't claim
- We are not a SEBON-registered investment adviser. None of our output is personalised investment advice.
- Backtested performance is not a guarantee of future results. Markets evolve; models decay.
- Our data is best-effort but sourced from third parties. Always cross-check time-sensitive decisions against your broker's terminal.
- The AI agents are deliberately conservative on microcaps and illiquid names where their training distribution is thin.
9. Update cadence
Intraday
Prices, indices, top-movers: every 60 s during trading hours.
Daily
Floorsheet, broker analysis, news: end-of-session at 3:00 PM NPT.
Quarterly
Fundamentals, model retraining, factor weights review.
Continuous
Methodology page itself is reviewed and updated when anything material changes.
10. Editorial process
Long-form research articles (the pieces under /research) are drafted by one analyst, reviewed by a second for factual claims, and signed off by the founder before publication. Numbers cited in any article tie back to a primary disclosure (NEPSE filing, NRB directive, audited quarterly) — we don't paraphrase commentary as fact.
Honest about what works, honest about what doesn't.
If you spot a methodological error, please reach out — we'll review, correct, and credit you on the change-log section above.
Research
Long-form NEPSE guides →
About
Why Nepse Signal exists →