1. Site map — what each page is for
Every page on this site is generated nightly from a local cache of market data and lives under /site/. Top navigation:
| Menu item | Page | Use it when… |
|---|---|---|
| Screens → Ready Screens | IND_Stock_Screener.html | You want a curated list (e.g. “low P/E”, “golden cross”). |
| Screens → Technical Screener | technical.html | You trade short-term and want hourly Buy / Sell signals. |
| Screens → Swing Screener | swing.html | You hold 2–20 days and want daily-chart setups with R:R ≥ 3. |
| Screens → Custom Screener | custom.html | You want to combine your own rules client-side. |
| All Stocks | stocks.html | Browse the full universe sorted by market cap. |
| News | news.html | Live RSS headlines from CNBC, Reuters, Bloomberg and more. |
| Learn | learn.html | Free curriculum (incl. this module). |
| Sectors | /sectors/<slug>.html | Drill into a single sector. |
| Per-stock | /stocks/<TICKER>.html | Full company profile. |
2. Universe toggle (All / NIFTY50)
Top-right of every page. Switches the visible rows between:
- All — all tracked India universe members.
- NIFTY50 — only NIFTY 50 members.
Your choice is saved in localStorage, so it persists across pages and visits. The little colored badges next to a ticker (e.g. NIFTY50) show membership.
3. Ready Screens (22 hand-curated)
Defined in screens.py. Grouped into six families:
| Group | Examples | What it answers |
|---|---|---|
| Valuation | Low P/E, High P/E, High Dividend, Low P/B, Low EV/EBITDA | Is it cheap or expensive? |
| Quality | High ROE, High Margin, Strong FCF, Low Debt | Is the business actually good? |
| Growth | High Revenue Growth, High Earnings Growth | Is it growing fast? |
| Price & Volume | Near 52w High/Low, Golden/Death Cross, RSI Oversold/Overbought | What is price doing right now? |
| Performance | Top YTD, Worst YTD, 3M Momentum Leaders | Who's winning lately? |
| Size | Mega Cap, Smallest in NIFTY50 | Filter by company size. |
Each screen card on the home page shows a live count for All / NIFTY50 based on the universe toggle.
4. Custom Screener
custom.html ships the entire stock dataset to the browser as JSON, so filters run instantly client-side. You add rules like "P/E < 25 AND ROE > 20% AND Revenue Growth > 10%". Useful when none of the 22 ready screens match exactly what you want.
5. Technical Screener (Hourly / 1H)
technical.html — intended for intraday to short-term traders. Computed from ~60 days of 1-hour candles per ticker (falls back to daily if a ticker has no intraday data).
| Column | Meaning |
|---|---|
| Trend | Strong Bullish → Strong Bearish (5 buckets), based on the trend score (next chapter). |
| Recommendation | Buy / Accumulate / Hold / Reduce / Avoid · Sell. |
| R:R | Reward ÷ risk based on Entry / Stoploss / Target. |
| Entry | Latest hourly close price. |
| Stoploss | Most recent swing low (long) or high (short), capped at EMA21, with a 1% buffer. |
| Target | Pattern measured-move if available, otherwise 2× risk. |
| Pattern | Murphy-style chart pattern detected on the hourly chart. |
| RSI | 14-period RSI on the hourly chart. |
Filter tabs at the top: All / Bullish / Bearish / Neutral / Breakouts / Breakdowns.
6. Swing Screener (Daily / 1D, R:R ≥ 3)
swing.html — intended for 2- to 20-day holds. Computed from the daily chart with stricter rules:
- EMAs: 20 / 50 / 200 alignment + slopes.
- Donchian breakouts: Close above the 20-day high (long) or below the 20-day low (short) flags an automatic breakout / breakdown setup.
- Pullback setups: In an uptrend (EMA20 > EMA50) with neutral RSI (40–55), a touch of EMA20 (±2%) or EMA50 (±3%) is flagged as a buyable pullback.
- Stops: max(last swing pivot, 2 × ATR away from price) with a 3% buffer.
- Targets: larger of pattern measured-move or 3R.
- Recommendation gate: "Buy" / "Sell" only when the trend is bullish/bearish AND R:R ≥ 3. Otherwise “Watch” / “Avoid”.
Filter tabs: All / Buy · Accumulate / Sell · Reduce / Breakouts / Breakdowns / Pullbacks.
7. Trend score, recommendation & R:R color logic
Trend is a single integer score built by summing votes from EMA alignment, EMA slope, price-vs-EMA, RSI level, and any detected pattern. Bucketing:
| Score | Technical (1H) | Swing (1D) |
|---|---|---|
| ≥ 5 / ≥ 6 | Strong Bullish | Strong Bullish |
| ≥ 2 / ≥ 3 | Bullish | Bullish |
| −1 to +1 / −2 to +2 | Neutral | Neutral |
| ≤ −2 / ≤ −3 | Bearish | Bearish |
| ≤ −5 / ≤ −6 | Strong Bearish | Strong Bearish |
R:R color rule (both screeners)
- ≥ 3.00 — high-quality setup; reward justifies risk.
- 1.00 – 2.99 — marginal; treat as Watch.
- < 1.00 — you risk more than you can win; skip.
Important: the Swing Screener will downgrade a "Buy" to "Watch" if R:R falls under 3. The Technical Screener does not gate the recommendation, but the R:R color tells you whether to size in.
8. Pattern detection — what we look for
Both screeners scan the last ~90 bars for fractal swing pivots (k=3, per Murphy) and then run pattern checks in priority order. Patterns supported:
- Head & Shoulders (top & inverse) — with neckline confirmation
- Double / Triple Top & Bottom — with neckline break
- Ascending / Descending / Symmetrical Triangles
- Rising / Falling Wedges
- Bull / Bear Flags & Pennants
- Cup & Handle
- Rectangles
- Up / Down Channels (HH+HL or LH+LL)
The pattern label includes its state, e.g. (forming), (confirmed), breakout, breakdown. Confirmed patterns contribute a measured-move target used as the screener Target.
9. Stock detail page — section by section
Visit any ticker (e.g. RELIANCE) and you get:
- Header — name, sector, index badges, latest price and 1Y return.
- Key Ratios tile — Mkt Cap, P/E, P/B, EV/EBITDA, ROCE, ROE, Op Margin, Debt/Equity, Beta.
- Pros / Cons — auto-generated (see chapter 11).
- Price Chart (1Y) — daily closes; a "Technical Trend" toggle shows hourly, daily & weekly verdicts side-by-side.
- Fundamental Growth chart — pick any metric to see its trajectory + CAGR.
- Peer comparison — same-sector names with side-by-side ratios.
- Quarterly Results, P&L, Balance Sheet, Cash Flows, Ratios — full annual / quarterly tables.
- Compounded Growth tiles — 5Y & 1Y for revenue and profit.
- Shareholding — insider / institutional / float plus top 10 institutional holders.
- Analyst View — mean target, recommendation key and implied upside.
10. Fundamental Growth chart & CAGR coloring
On every stock page below the price chart. Pick a metric from the dropdown; the legend shows the compound annual growth rate (CAGR) across the visible window.
- Green line/bars — positive CAGR (the metric is compounding upward).
- Red line/bars — negative CAGR (the metric is shrinking).
- Blue — CAGR cannot be computed (e.g. negative starting value).
Available metrics: Revenue, Gross Profit, Operating Income, EBITDA, Net Income, Operating Cash Flow, Free Cash Flow, CapEx, Total Assets / Equity / Debt, Cash, Diluted EPS, and ratio metrics (Gross / Operating / Net Margin %, ROE %, ROCE %).
Caveat: the chart automatically extends to whatever history is available from the underlying data source.
11. Pros & Cons auto-generation
Generated by make_pros_cons() in build.py. Thresholds:
| Flag | Pro if… | Con if… |
|---|---|---|
| ROE | > 20% | — |
| ROCE | > 20% | — |
| Profit Margin | > 20% | — |
| Revenue 5Y CAGR | > 10% | < 0% |
| Profit 5Y CAGR | > 10% | < 0% |
| Dividend Yield | > 2.5% | — |
| Free Cash Flow | > 0 | — |
| 50DMA vs 200DMA | 50 > 200 (uptrend) | 50 < 200 (downtrend) |
| P/E | — | > 50 |
| Debt / Equity | — | > 200 |
| Distance from 52w high | — | < −25% |
| RSI | — | > 75 (overbought) or < 25 (oversold) |
Up to 6 entries are shown per side.
12. Sector pages & peer comparison
Each sector has its own page (linked from the home page sector list). The peer table on a stock page shows the top sector siblings sorted by market cap, plus the stock itself highlighted at the top.
13. News, Learn and the chart icons
- News page pulls live RSS feeds from India-focused publishers entirely client-side — no server.
- Learn is the curriculum you are reading now.
- The two small icons next to every ticker open the live chart on Robinhood and TradingView (1H or 1D depending on the page).
14. Data sources, refresh and known limits
| Aspect | Detail |
|---|---|
| Source | Cached market data via the yfinance Python library. |
| Universe | NIFTY 50 (expandable with more India universes). |
| Daily history | 1 year of daily closes per ticker. |
| Hourly history | ~60 trading days of 1-hour candles per ticker (~414 bars). |
| Annual statements | Typically 4 years, sometimes 3. |
| Cache | data/cache/<TICKER>.json; refresh window 24h. |
| Refresh schedule | Run update.ps1 or the registered Windows task; calls fetch_data.py + build.py. |
| Force refresh | python fetch_data.py --force |
Known limits:
- Free yfinance gives only 4y of annual statements — the Fundamental Growth chart cannot show 10y today.
- Only 60d of intraday is available for free — the Technical Screener uses what is available.
- If the data feed rate-limits, run with the
curl_cffisession (already enabled). - This site is informational. Not investment advice. Confirm signals on a real charting platform before trading.
15. Glossary & FAQ
- EMA(n)
- Exponential moving average over n bars; weights recent prices more than SMA.
- RSI(14)
- Relative Strength Index over 14 bars (Wilder); 0–100 momentum oscillator.
- ATR(14)
- Average True Range over 14 bars; a volatility measure used to size stops on the swing screener.
- Donchian(20)
- Highest high / lowest low of the last 20 bars; a classic breakout boundary.
- Swing pivot
- A bar whose high (or low) is strictly more extreme than the k bars on each side.
- Measured move
- The pattern's height projected from the breakout point as a price target.
- R
- One unit of risk = entry − stoploss (long). 3R target = three times that distance.
- R:R
- Reward ÷ risk. We require ≥ 3 for the swing screener Buy/Sell rating.
- NIFTY50
- NIFTY 50 membership badge.
- CAGR
- Compound Annual Growth Rate.
(end/start)^(1/years) − 1. - Free Cash Flow
- Operating cash flow minus capital expenditure; what's left for shareholders.
- ROCE
- Return on Capital Employed = EBIT / (Total Assets − Current Liabilities).
FAQ
Q. Why does my favorite small-cap not appear?
The default universe is currently NIFTY50. Add it to tickers.py and re-run fetch_data.py.
Q. The screener says “Buy” — should I just buy?
No. Always confirm the signal on a real chart, check earnings dates, and respect position-sizing (see the Risk Management module).
Q. The Fundamental Growth chart only shows 4 bars. Where's 10 years?
The free feed only returns 4y of annuals. The chart auto-extends if you supply a longer-history source.
Q. Why are some tickers missing from the Technical Screener?
If a ticker has fewer than 40 bars of history (recent IPOs), the technical scoring returns None and the row is dropped.