Rulebook v2.2 · Engines v10
The specification is written first. The code implements it second.
Most screeners are a pile of filters with a story attached afterwards. StockFaves works the other way round: the rulebook is written and argued over, every rule is given an identifier and an evidence grade, and only then is an engine built to execute it. When code and rulebook disagree, the rulebook wins and the code gets fixed.
5rule engines in production
~750NSE & BSE names scored
4independent decision axes
0discretionary overrides
🧭
1. One decision, four separate answers
A single blended number is the most common failure in retail stock tools. It quietly lets a beautiful balance sheet pay for an untradeable chart, and it lets conviction creep into position size. StockFaves keeps four answers apart and combines them only at the very end, in a fixed order.
Quality
Is this worth owning or trading at all?
The business, or the setup. Scored 0–100, against sector peers and against an absolute standard.
Timing
Is now a reasonable moment to act?
Trend, structure, relative strength and participation. Scored 0–100, entirely separately from quality.
Risk
Can being wrong be defined and survived?
Not a score — a gate. It returns pass, conditional or fail, and a fail stops everything downstream.
Size
Given all of the above, how much?
Set by the risk engine alone, from volatility, liquidity and the distance to invalidation.
The order is not negotiable. Each step can only ever reduce what the next one is allowed to do:
- 1
Eligibility gateFail here and no score is computed at all. The stock is Not Rated — a different statement from a low score, and the interface is required to keep it different.
- 2
Risk gateFail here and the answer is No Trade or Hold, however good the quality and timing scores are.
- 3
Quality scoreThe "what".
- 4
Timing scoreThe "when".
- 5
Decision matrixQuality × Timing → a named action, from a published table. The same table for every user, every day.
- 6
ConfidenceDerived from how much of the model actually had fresh, complete data. It can only downgrade the action, never upgrade it.
- 7
SizeFrom the risk engine only.
A high quality score can never override a failed risk gate, and size is never a function of conviction. That decoupling is the single thing that stops a scoring system from turning into a leverage machine on its own opinions.
🛡️
2. Nine principles every engine obeys
These are not per-strategy preferences. They are shared foundations, implemented once, and every engine on the platform inherits them.
1
Point-in-time only
A score for a past date uses only what was published by that date. Today's restated financials never rewrite yesterday's verdict.
2
Missing data never passes
A rule that cannot be evaluated counts as failed, never as passed. Stale data is treated as absent. A gap can never manufacture a buy.
3
No compensation
Critical factors carry floors. Fall below one and the total is capped, not merely reduced — a strong average can never hide a fatal weakness.
4
Confidence is coverage, not conviction
It measures how much of the model had fresh data. Thin coverage caps the permitted action; very thin coverage suppresses the score entirely.
5
Costs live inside the model
Brokerage, STT, exchange and stamp charges, GST, spread and market impact are modelled up front. A signal must clear a multiple of its own round-trip cost to qualify.
6
Relative and absolute, together
Every factor is scored both against its peer group and against a fixed standard, so the engine never calls the best of a bad universe "exceptional".
7
Not Rated is not zero
"We could not judge this" and "we judged this and it is poor" are different answers. Collapsing them is how missing data becomes a fake verdict.
8
Regime before everything
A market-state layer is computed once and applied to every engine, cutting the risk budget when volatility is elevated. It never increases size because "the move is bigger".
9
No probability language
A score is a rule match, shown beside its rank in today's universe. It is never rendered as "85% chance of success" or as an accuracy figure, because it is neither.
⚙️
3. The engines
Each horizon gets its own engine, its own factor set and its own vetoes — because "is this a good business?" and "is this a good trade at 10:45 this morning?" have almost nothing in common. What they share is the architecture above.
Built risk-first, and deliberately reluctant. SEBI's own published research finds that the large majority of individual intraday traders lose money after costs. This engine is designed around that finding rather than in denial of it: it is measured on selectivity, not on how many ideas it produces. A day with zero signals is a correct outcome, not a failure.
What it weighs
- Regime and context — index direction, breadth, volatility and sector participation all have to agree with the trade
- Setup quality — structural clarity, location against the day's key levels, and how tight the invalidation is
- Participation — relative volume normalised for time of day, because raw volume comparisons across a session are meaningless
- Risk and execution — spread, order-book depth against the intended size, and whether the reward justifies the defined risk
What it refuses
- Any setup without a pre-defined invalidation level — it scores zero, not "less"
- Single-indicator triggers. "Oversold", a crossover, a line crossing a line — hard no trade
- Entries in the opening minutes. The first print is not information
- Chasing — no entry once price has run past its trigger without a fresh base forming
- Fading a confirmed trend day. And averaging down, ever
Named setups only. A finite list of setups is recognised, and each one must define a trigger, an invalidation and a required confirmation before it can score at all. Anything that does not match a named setup is No Trade by definition — not a low-confidence buy.
Session-structure aware. Indian market timings changed in August 2026 with the introduction of the closing auction. Resting stop-losses no longer behave the same way into that window, and the closing price is no longer computed the way it used to be. The engine reads session structure from the exchange feed rather than hard-coding a clock, and any plan that depends on a stop which will not survive the auction is treated as invalid.
Discipline is part of the signal. Risk per trade, a daily loss limit that ends the session, a mandatory pause after consecutive losses, a cap on trades per day, a time stop, and a hard exit time — enforced by the engine rather than left to willpower at the worst possible moment.
Trend and structure first, with a fundamental sanity filter behind them — the objective is to ride a move that is already working, not to be early to one that is not. No signal is issued without a completed event map: results date, board meeting, ex-date, index change, lock-in expiry. A setup that has not been checked against the calendar is downgraded to Watch, however good the chart looks.
What it weighs
- Trend structure — the largest single weight, and it carries a floor: fail it and the total is capped regardless of everything else
- Momentum and relative strength — against the index, not in isolation
- Setup and base quality — a confirmed base or a controlled pullback, versus an accelerating breakdown
- Catalyst and earnings quality, a fundamental sanity filter, and risk, liquidity and event exposure — each with its own floor
What it refuses
- Anything in Liquidity Tier C, or under ₹500 crore market cap, or under ₹20
- Long-term ASM, GSM, ESM, T2T and SME scrips — no exceptions
- A signal with no completed event map — it becomes Watch, not Buy
- A high total that clears the line while a floor underneath it has failed
- A short signal without a RISK-OFF or NEUTRAL-CAUTION regime and verified shortability
Floors beat totals. Reaching the Buy threshold is not sufficient on its own. Trend, setup, fundamental sanity and risk each carry a minimum, and any one of them failing turns the result into a Watch with the failing condition named — never a quiet downgrade.
Weights are measured, not chosen. In v2.3.0 the volume weight was cut from 10 points to 5 because an ablation over 400 symbols and 15 years measured its marginal contribution at −0.24% — it was subtracting from the composite. It was reduced rather than removed, because one measurement is not enough to delete a factor outright. The revised weights scored +1.08% cross-validated against the previous +0.81%.
Exits are part of the rule, not an afterthought. A held position whose thesis is intact but whose score has slipped to 60–74 is a Hold with a tightened trail. Below 50, or with the structure broken, it is an Exit.
The objective is stated plainly: own businesses whose economics can compound, bought at a valuation that leaves an acceptable margin for error. Quality and entry timing are computed separately and meet only at the decision matrix — so a great business with a broken chart keeps its high quality score and receives a Hold. Not a buy, and not a rejection.
What quality means here
- Returns on capital — the multi-year median, and how stable it has been. One brilliant year does not count
- Growth — its magnitude, its consistency, and crucially its source
- Cash conversion and capital allocation — does reported profit actually become cash
- Valuation across several lenses, never a single multiple
- Industry structure and moat
- Management, governance and risk
What entry timing means here
- The primary trend and its slope, read on weekly structure
- Base quality — a confirmed base or a controlled pullback, versus an accelerating breakdown
- Relative strength against the broad market and against the sector
- Drawdown context — whether a decline is orderly or accelerating
- Volume signature — accumulation or distribution over recent months
Forensic red flags are gates, not deductions. Auditor resignation or an adverse opinion; restatement of prior financials; years of accounting profit without matching cash; heavy or sharply rising promoter pledging; receivables outrunning revenue with no explanation; contingent liabilities beyond net worth; repeated related-party lending; surveillance escalation; repeated late filings. Any one of these forces Avoid or Sell regardless of every other number. A company can be a wonderful business on every metric and still be uninvestable on one of them.
Special cases are handled explicitly, not fudged. Cyclicals are scored on mid-cycle economics — a low P/E on peak earnings is more often a sell signal than a buy one. Turnarounds stay capped until the specific thing that broke is demonstrably repaired. Holding companies are scored on look-through earnings with the discount stated. Recent listings are capped for want of audited public history.
No thesis, no buy. Every long-term buy stores a written thesis with falsifiable conditions attached — because there are exactly four legitimate reasons to sell (the thesis breaks, the business structurally deteriorates, valuation reaches an extremity, or the capital has a materially better use) and three of them are unenforceable unless you wrote down what you originally believed. "The price fell" is not on the list. Neither is "the price rose".
"Is this a good business at a fair price?" and "should I own more of it than I already do?" are two different questions, and StockFaves refuses to collapse them into one badge. The overlay answers the second, and shows its reasoning beside — never instead of — the first.
What it adds
- A target weight per holding, set by conviction band, then adjusted for the stock's own volatility, its liquidity tier and the market regime
- Add / Hold / Reduce / Exit, with every condition that had to hold stated on screen
- Rebalance guidance driven by drift bands, executed only when the trade is large enough to be worth its own cost
- Portfolio beta, factor tilt, and an opportunity-cost ranking of each holding against the current best candidates
- Cash treated as a deliberate position, sized by regime rather than by mood
The caps that actually bind
- Single stock, at cost and separately at market — winners may run, but not indefinitely
- Single sector, and single theme — themes cut across sector labels, which is why this is usually the limit that binds first
- Top five positions combined
- Correlation buckets — five highly correlated stocks are one bet, and are counted as one
- A micro and small-cap sleeve limit, and a cash band
The same score, never a re-derivation. The overlay reads the long-term engine's frozen, versioned score record — read-only, enforced in code rather than by convention. If a stock shows 82% on the Long Term screen, it shows 82% in Portfolio. Always. Any difference in the recommended action is a difference in position context, and it is spelled out.
Downgrade only. The overlay may make an action less aggressive — block an add, turn a hold into a reduce. It can never upgrade one, and no portfolio reason may turn a Sell into a Hold. That path is precisely how people rationalise not cutting losers, so it does not exist in the code. Governance red flags bypass the overlay entirely: concentration limits, tax timing and opportunity cost never delay a red-flag exit.
When the two layers disagree, you see both — with the reason
Long TermSample Ltd — Quality 82% · Timing 71% · BUY
PortfolioREDUCE — position 11.4% against a 6% target; sector exposure 31% against a 25% cap
Illustrative only. Collapsing these into a single verdict would destroy the information that matters most — why they differ. The interface never resolves the disagreement on your behalf.
Two further engines run alongside these: a short-term swing engine covering roughly two to sixty trading days, built on the same foundations, and a self-contained BTST engine which sits deliberately outside the rulebook and is documented as its own thing rather than pretending to a lineage it does not have.
🎛️
4. The decision matrix is the product
Scores are inputs. The output is a named action, and it comes from a published table rather than from judgement. This is the long-term matrix in shape — the exact band boundaries are ours, but the logic is no secret, and it is the same table for every user on every day.
| Business quality ↓ / Entry timing → |
Timing strong |
Timing mixed |
Timing broken |
| Exceptional |
Buy — full tranche |
Buy — staged in thirds |
Accumulate slowly, reduced size |
| Strong |
Buy — standard size |
Reduced size, or watch for confirmation |
Hold — no new capital |
| Good |
Watch |
Watch |
Avoid |
| Neutral |
Avoid |
Avoid |
Avoid |
| Poor |
Avoid / Sell |
Sell |
Sell |
| Any forensic red flag |
Avoid / Sell — the score is not displayed as investable |
Note the top-right cell. A high-quality business in a downtrend is neither a buy nor a rejection — it is a slow accumulation candidate at reduced size, and the interface is required to say exactly that rather than round it to a green tick. Note the bottom-left too: a strong chart on a mediocre business is a short-term signal, and the long-term engine will not pretend otherwise.
🏦
5. A bank is not a factory
Applying a generic industrial template to a lender is the single most common analytical error in retail stock tools, and it is why so many screeners quietly rank banks, insurers, utilities, commodity producers and asset-light platforms as though they were the same kind of object.
StockFaves classifies the sector before computing any fundamental score, and a sector adapter then redistributes what matters. Financials are never scored on EBITDA margin or inventory turnover. Commodity producers are read across the cycle rather than at a point in it. Regulated utilities are judged against their return framework. The weight a factor carries is a property of the sector, not a global constant.
🧪
6. How a rule earns its place
A rule does not enter an engine because it sounds sensible or because a chart of it looks good. It has to survive a protocol written down in advance — and the protocol is designed to kill rules, not to bless them.
713NSE symbols in the test universe
~62,900stock-days sampled
3 yrswalk-forward, out-of-sample
±20%threshold sensitivity band
- Walk-forward and out-of-sample. Rules are formed on one window and judged on a later one they never saw. The final out-of-sample test is run once — never quietly re-run after a tweak.
- Costs and slippage included. Every result is after full Indian transaction costs and a modelled market impact, because a gross edge that disappears at the broker was never an edge.
- A plateau, not a peak. Expectancy must stay positive when every threshold is moved by ±20%. A rule that only works at one exact number is a curve fit wearing a rule's clothing.
- Multiple regimes. A rule has to hold up across distinct market conditions, not merely in the bull run it was discovered in.
- Naive baselines must be beaten after costs — against the index, and against buying at random. Surprisingly many popular screens do not clear that bar.
- Minimum sample sizes before anything is permitted to be described as validated at all.
- Failing one criterion means removal, not re-tuning. Re-tuning a failed rule until it passes is how backtests get fabricated, and the rulebook forbids it in writing.
Negative results are recorded, not buried. Two widely-used conditions — the kind that appear in nearly every retail screen — tested negative on our own Indian data and were dropped despite being obvious candidates. Separately, one liquidity gate measurably reduced returns in testing and was kept anyway, because a backtest fills at the printed price and a real order does not. Executability is a precondition, not an edge. Both decisions live in the evidence log rather than being quietly reversed.
What we will not do is turn any of this into a promise. Backtested results are never presented as expected future returns — the rulebook prohibits it, and so does honesty. We publish the method and the standard of evidence, not a performance claim.
🚫
7. What the rulebook forbids outright
A framework is defined as much by what it refuses to do as by what it does. These are written as absolute prohibitions, not preferences.
- Never optimise dozens of thresholds until the equity curve looks attractive.
- Never change a rule because one particular stock produced an inconvenient result — the most corrosive habit in systematic investing.
- Never present backtested results as expected future returns.
- Never re-run a final out-of-sample test after a tweak.
- Never remove an unflattering period from the sample.
- Never render a rule-match score as a probability of profit or as an accuracy figure.
- Never let a missing input default to a pass.
- Never let position size become a function of conviction.
🔢
8. Versioned, so results stay comparable
Every rule carries an identifier, and every change to the rulebook is versioned and dated in a changelog kept separately from release notes. This matters more than it sounds: a signal recorded under one set of rules is not comparable with one recorded under another, and a platform that silently re-tunes itself has no honest track record at all — only a moving target.
When rules change, the changelog states what changed, why, and whether the change is significant enough that earlier signals must be treated as a separate series. The engines currently implement Rulebook v2.2.
🔒
9. What this page deliberately does not publish
Absent by design: the exact thresholds, the factor weights, the scoring formulas, the decision cut-offs, the specific setup definitions and the contents of the evidence log. Those are the work.
What is published is the architecture, the guardrails, the vetoes and the standard of evidence — enough to judge whether the method is sound, and enough to hold us to it. Anyone can copy a number. The discipline is the product.
See the rules applied to today's market
Every verdict on the screener shows which criteria passed, which failed, and any red flag that fired.
Launch Screener ⚡
Not investment advice. StockFaves is a rules-based research and education tool. Redmondsoft Technologies is not registered with SEBI as an Investment Adviser or Research Analyst. Nothing on this page or on the platform is a recommendation to buy or sell any security, and a rule-match score is not a forecast. See the full
disclaimer and risk notice.