NIFTY Lens
Experimental analysis
A bounded analysis experiment focused on explainable evaluation rather than trading automation.
The problem
Discretionary chart notes drift. The same trader reads the same structure differently on different days, the reasoning lives nowhere, and “I’d wait here” is impossible to audit a week later.
The experiment: if the observations are made explicit — structure, moving-average alignment, VWAP, RSI, ADX, volume, break state, levels — can a fixed set of rules produce a consistent, fully explainable review of the chart? Not a prediction. A review.
The approach
NIFTY Lens is a browser side-panel companion backed by a local FastAPI service. The user supplies observations (typed by hand, or proposed from an uploaded chart image by a local vision model), confirms them, and a deterministic rules engine — a pure function with zero randomness, zero I/O and zero clock reads — evaluates them into a verdict with an itemized reasons ledger.
The division of labor is structural, not stylistic: the optional model may only fill in observation fields, and the analysis runs exclusively on user-confirmed inputs. There is no code path from model output to a verdict.
My role — Workflow and evaluation-model exploration. The tool does not connect to brokers, place orders, scrape any platform or promise returns.
How it works, step by step
From observations to an explainable verdict
All values shown are illustrative dummies. Verdicts describe chart conditions — they are not instructions to place a trade.
01Bring observations
The user uploads a chart image or types what they see — structure, indicators, levels — into one structured form.
Select any node in the diagram to inspect it.
- Person
- Connected system
- Internal layer
- This project
- Data at rest
- Info
- Success
Example output
A result, as the data model sees it
- Verdict
- WAIT — conditions incomplete
- Evidence score
- +18 of ±100 (ledger sums exactly)
- Strongest evidence
- +10 · 5m structure: higher highs / higher lows
- Conflict
- −10 · 15m disagrees with 5m direction
- Invalidation
- close below the 5m higher-low
- Confidence
- low — 9 of 16 fields provided (not a probability)
Illustrative dummy review — not live market data, not advice.
Architecture
Architecture
Two processes on one machine. Every arrow that leaves a box stays on 127.0.0.1.
- Connected system
- This project
- Internal layer
- Data at rest
- Connected system
- This project
- Internal layer
- Data at rest
There is no market-data feed, no broker connection, no order placement and no scraping of any platform — confirmed by the dependency list as much as the code: the only outbound calls in the entire system are loopback.
Key engineering decisions
- Market-structure review
- Levels
- Invalidation
- Confidence
- Reasons
Switch to the technical view for the engineering trade-offs behind these.
Challenges & limitations
- Verdicts describe chart conditions using the user’s own confirmed observations — they are not trade instructions, and the tool makes no accuracy, profit or backtest claims anywhere.
- Result quality is bounded by input quality: the engine scores what it’s told, and its missing-information penalties can only soften that, not fix it.
- Confidence expresses score magnitude and form completeness — explicitly not a probability of anything happening.
- Single-machine, personal-lab software: no live data, no broker, no cloud, no multi-user story.
What I learned
A bounded tool becomes more useful, not less, when it makes uncertainty first-class: hard gates that refuse to answer, penalties for missing evidence, and a ledger where every point carries its reason — instead of a prediction pretending to be sure.
Project status
FastAPI backend with 17/17 tests passing and built Chrome + Firefox extension bundles on disk. Runs entirely on one machine; deliberately unconnected to any market, broker or cloud service.