08EXPERIMENTALBUILT2025

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.

Rule-based evaluationStructured inputsDeterministic output

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.

UserObservation form16 fields · editableLocal vision assistoptional · proposes onlyFastAPI backend127.0.0.1 onlyHard gatesNO TRADE checksDeterministic enginepure functionExplainable resultverdict · reasons · levelsSQLiteconfirmed reviews onlyobserve

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.

Browser side panelReact 19 · MV3FastAPI servicePydantic v2analysis.pypure rules engineSQLitechart_reviewsLocal model (optional)Ollama · loopback-guarded127.0.0.1image → fields
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

Built — Sprint 1, local-only

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.