SCREENER
Every ratio, defined
112 ratios, 104 of them usable in a screen condition. Each definition is the one the engine computes, word for word. Thresholds are written in the unit shown, and converted on the server — see units.
In a query, use the Screener.in name in the default dialect or the DalalOS id in either. Every value is a raw disclosed figure or a mechanically-computed ratio.
Price & market
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| 100-day simple moving averageScreen on this → | sma_100 | ₹ per share | Arithmetic mean of the last 100 split/bonus-adjusted daily closes, in rupees per share. None until 100 bars exist -- never an average over whatever history happens to be cached.Computed on a different basis from Screener.in. Answers Screener's "DMA 100", whose phrase currently resolves to 'ema_100' (the DalalOS basis, deliberately unchanged). The comparator labels its line DMA and computes it EXPONENTIALLY; this one is a plain arithmetic mean, so the two cross a price at different moments. Adopting the DMA name for it would hide a real method difference, so the phrase stays with `ema_100` and this keeps its honest name. |
| 200-day exponential moving averageScreen on this → | DMA 200ema_200 | ₹ per share | Exponentially weighted mean of the daily adjusted closes with a 200-bar span, in rupees per share, seeded by the simple mean of the first window (the standard warm-up). None until 200 bars exist.The comparator's DMA line is EXPONENTIAL despite the label, so this is the line a ported 'Current price > DMA 200' should compare against. DalalOS's own `sma_200` stands beside it under its honest name. |
| 200-day simple moving averageScreen on this → | sma_200 | ₹ per share | Arithmetic mean of the last 200 split/bonus-adjusted daily closes, in rupees per share. None until 200 bars exist -- never an average over whatever history happens to be cached.Computed on a different basis from Screener.in. Answers Screener's "DMA 200", whose phrase currently resolves to 'ema_200' (the DalalOS basis, deliberately unchanged). The comparator labels its line DMA and computes it EXPONENTIALLY; this one is a plain arithmetic mean, so the two cross a price at different moments. Adopting the DMA name for it would hide a real method difference, so the phrase stays with `ema_200` and this keeps its honest name. |
| 50-day exponential moving averageScreen on this → | DMA 50ema_50 | ₹ per share | Exponentially weighted mean of the daily adjusted closes with a 50-bar span, in rupees per share, seeded by the simple mean of the first window (the standard warm-up). None until 50 bars exist.The comparator's DMA line is EXPONENTIAL despite the label, so this is the line a ported 'Current price > DMA 50' should compare against. DalalOS's own `sma_50` stands beside it under its honest name. |
| 50-day simple moving averageScreen on this → | sma_50 | ₹ per share | Arithmetic mean of the last 50 split/bonus-adjusted daily closes, in rupees per share. None until 50 bars exist -- never an average over whatever history happens to be cached.Computed on a different basis from Screener.in. Answers Screener's "DMA 50", whose phrase currently resolves to 'ema_50' (the DalalOS basis, deliberately unchanged). The comparator labels its line DMA and computes it EXPONENTIALLY; this one is a plain arithmetic mean, so the two cross a price at different moments. Adopting the DMA name for it would hide a real method difference, so the phrase stays with `ema_50` and this keeps its honest name. |
| 52-week highScreen on this → | High priceweek52_high | ₹ per share | Split/bonus-adjusted highest price over the trailing 52 weeks. |
| 52-week lowScreen on this → | Low priceweek52_low | ₹ per share | Split/bonus-adjusted lowest price over the trailing 52 weeks. |
| Beta (1 year)Screen on this → | beta_1y | Number | Covariance of daily adjusted-close returns against NSE's Nifty 50 daily close series, divided by that index's return variance, over the trailing ~252 PAIRED trading days. None below 61 paired bars, or where the index series has not been backfilled. BSE-only securities are regressed against the same benchmark -- Nifty is the standard broad market for Indian equities regardless of listing venue.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Current priceScreen on this → | Current priceprice | ₹ per share | Latest end-of-day close price per share. |
| Delivery percentageScreen on this → | deliv_pct | Percent | Latest-day delivered quantity as a percentage of traded quantity (50.0 == 50%).Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Is SMEScreen on this → | Is SMEis_sme | Yes / no | 1 when the resolved listing segment is sme, 0 when it is mainboard, NULL when membership is unverified or the exchanges conflict. Three-valued on purpose: an unknown segment must not answer either an 'Is SME' or an 'Is not SME' filter.Partially matches Screener.in. NSE Emerge membership is an official CSV and is EXACT for any NSE-listed security. BSE SME membership has no official machine-readable list (docs/research/BSE_SME_SOURCE_PROBE.md), so a BSE-only security stays NULL rather than being guessed from its group code. |
| MACD histogramScreen on this → | macd_histogram | ₹ per share | MACD line minus its signal line, in rupees per share.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| MACD lineScreen on this → | MACDmacd | ₹ per share | The 12/26 exponential moving-average difference, in RUPEES PER SHARE -- it is a price difference, not an index, however conventionally it is printed bare. None until 35 bars exist. |
| MACD signal lineScreen on this → | MACD Signalmacd_signal | ₹ per share | The 9-period exponential moving average of the MACD line, in rupees per share. |
| Market capScreen on this → | Market Capitalizationmarket_cap | ₹ crore | Latest close price multiplied by derived shares outstanding, in absolute rupees. |
| Number of tradesScreen on this → | num_trades | Count | Latest-day count of executed trades (NSE bhavcopy TtlNbOfTxsExctd).Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Relative strength index (14)Screen on this → | RSIrsi_14 | Number | Wilder-smoothed 14-period relative strength index over the adjusted close series, on the conventional 0-100 scale. None until 15 bars exist. |
| TurnoverScreen on this → | turnover | ₹ crore | Latest-day traded value in rupees (NSE bhavcopy TtlTrfVal).Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Up from 52-week lowScreen on this → | Up from 52w lowpct_off_52w_low | Percent | (price - week52_low) / week52_low -- how far above its 52-week low the price sits, as a fraction. |
| Company type | company_type | Text | Reporting template class: general, bank, nbfc or insurer.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Index membership | index | Text | Exact membership of a named index. Not a scalar comparison: the security's index membership is a JSON array, pre-filtered in SQL and re-checked for exact membership in Python.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Industry | industry | Text | Industry classification from the securities master.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Industry group | igroup | Text | Industry group classification from the securities master.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Industry sub-group | isubgroup | Text | Industry sub-group classification from the securities master.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Listing segment | listing_segment | Text | Which exchange platform the security is listed on: mainboard, sme, or unknown. Resolved from per-exchange official membership evidence, never inferred from market cap, market lot, company age or a group code.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Sector | sector | Text | Broad sector classification from the securities master.Shown as a result column; not usable in a condition. Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
Profit & loss
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| Earnings per share (TTM)Screen on this → | EPSeps_ttm | ₹ per share | Trailing-twelve-month statutory basic EPS in RUPEES PER SHARE, each quarter restated into current share terms before summing (Ind-AS 33), so a split or bonus inside the window does not deflate the figure.The STATUTORY total, matching the comparator's reported figure. DalalOS's own `pe` denominates on a continuing-operations-preferred EPS instead, which is a valuation choice rather than a reporting one; the two bases coexist deliberately. |
| Net income CAGR (3 years)Screen on this → | Profit growth 3Yearsnet_income_cagr_3y | Percent | Compound annual growth rate of annual net income over the ~3 years to the latest annual period, as a fraction. Sign-aware: a loss at either endpoint yields NULL, and a loss-to-larger-loss window yields a signed magnitude CAGR.Partially matches Screener.in. Same 3-year profit CAGR concept; sign handling and end-period selection are DalalOS's own until a golden corpus proves parity (parity LLD 02). |
| Net income CAGR (5 years)Screen on this → | Profit growth 5Yearsnet_income_cagr_5y | Percent | Compound annual growth rate of annual net income over the ~5 years to the latest annual period, as a fraction. Almost universally NULL today for the same local-depth reason as revenue_cagr_5y.Partially matches Screener.in. Concept matches; local annual depth does not yet reach five years for essentially the whole universe, so this is NULL rather than wrong. |
| Net income growth (annual YoY)Screen on this → | net_income_growth | Percent | Newest annual net income over prior annual net income minus one, as a fraction.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Operating margin (excluding other income)Screen on this → | opm_ex_other_income | Percent | TTM Schedule-III operating profit divided by TTM revenue from operations, as a fraction. The numerator is Sales minus operating Expenses, so it EXCLUDES other income and share of associate profit and sits before depreciation and interest. DalalOS's own operating_margin keeps its EBIT basis (PBT + finance costs), which includes both -- the gap between the two is largest for treasury-heavy balance sheets and holding companies. GENERAL-ONLY: the Schedule-III total-expenses concept exists only in that template.Computed on a different basis from Screener.in. Answers Screener's "OPM", whose phrase currently resolves to 'operating_margin' (the DalalOS basis, deliberately unchanged). Same Sales-minus-Expenses subtotal, computed from the filer's own disclosed RevenueFromOperations / Expenses / FinanceCosts / Depreciation. Not EXACT: the comparator's expense classification comes from its annual-report ingestion and DalalOS's from the SEBI in-capmkt XBRL. Applies to companies only. |
| Profit after tax (last year)Screen on this → | Profit after tax last yearprofit_after_tax_last_year | ₹ crore | Statutory profit after tax as filed at the newest annual period, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Profit after tax (latest quarter)Screen on this → | Profit after tax latest quarterprofit_after_tax_latest_quarter | ₹ crore | Statutory profit after tax as filed at the newest quarterly period, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does not disclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Profit after tax (preceding quarter)Screen on this → | Profit after tax preceding quarterprofit_after_tax_preceding_quarter | ₹ crore | Statutory profit after tax as filed at the quarter immediately before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Profit after tax (preceding year)Screen on this → | Profit after tax preceding yearprofit_after_tax_preceding_year | ₹ crore | Statutory profit after tax as filed at the annual period one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Profit after tax (same quarter last year)Screen on this → | Profit after tax preceding year quarterprofit_after_tax_preceding_year_quarter | ₹ crore | Statutory profit after tax as filed at the same fiscal quarter one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Profit after tax (TTM)Screen on this → | Profit after taxprofit_after_tax_ttm | ₹ crore | Trailing-twelve-month statutory profit after tax in ABSOLUTE RUPEES -- the same statutory net-income line the TTM margins and `profit_growth_ttm` are computed from. The exceptional-item-normalised basis is a separate metric (parity LLD 09). |
| Profit growth (TTM vs preceding TTM)Screen on this → | Profit growthprofit_growth_ttm | Percent | Last four quarters' statutory net income against the four before them, as a fraction. The trailing-window companion to net_income_growth, which keeps its annual basis. Sign-aware: a non-positive base window yields NULL rather than a nonsense percentage.Computed on a different basis from Screener.in. Same trailing-window definition; DalalOS uses the statutory total net income, while the comparator's profit line excludes extraordinary items (see pe_ex_exceptional for the separately-published normalised basis). |
| Quarterly net income growth (YoY)Screen on this → | YOY Quarterly profit growthquarterly_net_income_growth_yoy | Percent | Latest quarter net income versus the same quarter a year ago, as a fraction. |
| Quarterly net margin change (YoY)Screen on this → | quarterly_net_margin_delta_yoy | Percent | Latest quarter net margin minus the same quarter a year ago's, as a fraction delta.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Quarterly revenue growth (YoY)Screen on this → | YOY Quarterly sales growthquarterly_revenue_growth_yoy | Percent | Latest quarter revenue versus the same quarter a year ago, as a fraction. |
| Revenue CAGR (3 years)Screen on this → | Sales growth 3Yearsrevenue_cagr_3y | Percent | Compound annual growth rate of annual revenue over the ~3 years to the latest annual period, as a fraction. NULL when the history is shorter than the window or an endpoint is non-positive.Partially matches Screener.in. Same 3-year sales CAGR concept, but the end-period selection and consolidated-vs-standalone scope rule are DalalOS's own and are not yet reconciled against a Screener golden corpus (parity LLD 02). |
| Revenue CAGR (5 years)Screen on this → | Sales growth 5Yearsrevenue_cagr_5y | Percent | Compound annual growth rate of annual revenue over the ~5 years to the latest annual period, as a fraction. Almost universally NULL today: the cached annual history is capped by refresh_financials' ~20-filing ingestion window (see docs/research/FINANCIAL_HISTORY_DEPTH_AUDIT.md).Partially matches Screener.in. Concept matches; local annual depth does not yet reach five years for essentially the whole universe, so this is NULL rather than wrong. |
| Revenue growth (annual YoY)Screen on this → | revenue_growth | Percent | Newest annual revenue over prior annual revenue minus one, as a fraction.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Sales (last year)Screen on this → | Sales last yearsales_last_year | ₹ crore | Top line as filed at the newest annual period, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does not disclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Sales (latest quarter)Screen on this → | Sales latest quartersales_latest_quarter | ₹ crore | Top line as filed at the newest quarterly period, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does not disclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Sales (preceding quarter)Screen on this → | Sales preceding quartersales_preceding_quarter | ₹ crore | Top line as filed at the quarter immediately before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does not disclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Sales (preceding year)Screen on this → | Sales preceding yearsales_preceding_year | ₹ crore | Top line as filed at the annual period one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does not disclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Sales (same quarter last year)Screen on this → | Sales preceding year quartersales_preceding_year_quarter | ₹ crore | Top line as filed at the same fiscal quarter one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Sales (TTM)Screen on this → | Salessales_ttm | ₹ crore | Trailing-twelve-month top line in ABSOLUTE RUPEES, summed from the last four discrete quarters. Total revenue preferred, operating revenue as the fallback -- the same set `price_to_sales` divides by, so the published level and the multiple computed from it are the same number.Computed on a different basis from Screener.in. The comparator's Sales is revenue FROM OPERATIONS; this leads with total revenue, which includes other income. The narrower label resolves for the general template only, so preferring it would drop the field entirely for banks and insurers -- the same trade-off `sales_growth_ttm` records. |
| Sales growth (TTM vs preceding TTM)Screen on this → | Sales growthsales_growth_ttm | Percent | Last four quarters' revenue against the four before them, as a fraction. Reacts one quarter after results; DalalOS's own revenue_growth compares annual periods and so reacts once a year. Needs eight clean quarters of one statement scope.Computed on a different basis from Screener.in. Same trailing-window-over-preceding-window definition. Two named differences: the top line is total revenue (other income included) rather than the comparator's revenue-from-operations Sales, so that this metric differs from DalalOS's own revenue_growth in the WINDOW and nothing else and so that banks/insurers keep it; and the window is built from DalalOS's consolidated-preferred quarterly scope, where a restated comparative updates its period in place. |
Balance sheet
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| Days inventory outstanding (material-cost basis)Screen on this → | Days Inventory Outstandinginventory_days_material_cost | Days | Annual inventory divided by annual cost of materials consumed, times 365. DalalOS's own inventory_days denominates on cost of goods sold (materials + stock-in-trade purchases + inventory movement), which is strictly the larger figure, so the COGS-denominated count reads LOWER. GENERAL-ONLY.Computed on a different basis from Screener.in. Denominator now matches the comparator's (annual material cost). The inventory and material-cost figures still come from the SEBI XBRL rather than the comparator's annual-report ingestion. Applies to companies only. |
| Days payable outstanding (material-cost basis)Screen on this → | Days Payable Outstandingpayable_days_material_cost | Days | Annual trade payables divided by annual cost of materials consumed, times 365. The material-cost twin of payable_days, which keeps its cost-of-goods-sold denominator. Debtor days are NOT duplicated -- both systems denominate them on sales already. GENERAL-ONLY.Computed on a different basis from Screener.in. Denominator now matches the comparator's (annual material cost); the source of the underlying figures still differs. Applies to companies only. |
| Net worth (latest)Screen on this → | Net worthequity_latest | ₹ crore | Stockholders equity (net worth) as filed at the newest substantive balance sheet, whichever period type carries it, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Total assets (latest)Screen on this → | Total Assetstotal_assets_latestAlso: Balance sheet total | ₹ crore | Balance-sheet total as filed at the newest substantive balance sheet, whichever period type carries it, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Total debt (3 years back)Screen on this → | Debt 3Years backtotal_debt_3y_back | ₹ crore | Current plus non-current borrowings as filed at the annual period three years before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Total debt (5 years back)Screen on this → | Debt 5Years backtotal_debt_5y_back | ₹ crore | Current plus non-current borrowings as filed at the annual period five years before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Total debt (latest)Screen on this → | Debttotal_debt_latest | ₹ crore | Current plus non-current borrowings as filed at the newest substantive balance sheet, whichever period type carries it, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Total debt (preceding year)Screen on this → | Debt preceding yeartotal_debt_preceding_year | ₹ crore | Current plus non-current borrowings as filed at the annual period one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Working capital (excluding short-term borrowings)Screen on this → | Working capitalworking_capital_ex_st_borrowings | ₹ crore | Current assets minus current liabilities minus short-term borrowings, in ABSOLUTE RUPEES as filed. A plain current-assets-minus-current-liabilities figure OVERSTATES working capital for anything funded on a working-capital line -- most manufacturing. NULL unless all three lines are disclosed on the same sheet: a filer that tags no borrowings concept is indistinguishable from one with genuinely nil short-term borrowings, and assuming zero would reproduce the very overstatement this removes.Computed on a different basis from Screener.in. Same three-term definition the comparator uses. Stored in ABSOLUTE RUPEES; the comparator's surface is Rs crore, hence the 1e-7 factor -- the same convention market_cap and ev carry. |
Cash flow
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| Dividend yieldScreen on this → | Dividend yielddividend_yield | Percent | Trailing-12-month realized cash dividends divided by the live quote price, as a fraction (0.02 == 2%).Computed on a different basis from Screener.in. DalalOS uses trailing-12m REALIZED cash dividends; Screener's definition excludes special dividends. |
| Earnings yieldScreen on this → | Earnings yieldearnings_yield | Percent | TTM EBIT divided by enterprise value (the Greenblatt form), as a fraction.Applies to companies only. |
| Free cash flow yieldScreen on this → | fcf_yield | Percent | Latest annual free cash flow divided by market cap, as a fraction.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Operating cash flow (last year)Screen on this → | Cash from operations last yearoperating_cash_flow_last_year | ₹ crore | Net cash from operating activities as filed at the newest annual period, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
| Operating cash flow (preceding year)Screen on this → | Cash from operations preceding yearoperating_cash_flow_preceding_year | ₹ crore | Net cash from operating activities as filed at the annual period one year before the newest one, in ABSOLUTE RUPEES. NULL when no period matches within the selector's tolerance, or when the matched period does notdisclose the line -- never zero-filled, and never taken from the neighbouring period. |
Ratios
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| Average return on capital employed (3 years)Screen on this → | Average return on capital employed 3Yearsroce_weighted_avg_3y | Percent | Sum of the last 3 annual EBIT figures divided by the sum of those years' average capital employed (debt + equity), as a fraction. GENERAL-ONLY, reached mechanically: bank/NBFC/insurer templates carry no EBIT concept.Partially matches Screener.in. Denominator-weighted as the parity inventory describes; DalalOS's capital employed is debt + equity (not assets - current liabilities), and the window end-period is unverified against a golden corpus (parity LLD 02). Applies to companies only. |
| Average return on capital employed (5 years)Screen on this → | Average return on capital employed 5Yearsroce_weighted_avg_5y | Percent | The 5-year form of roce_weighted_avg_3y, needing six annual periods -- almost never available locally today.Partially matches Screener.in. Concept and weighting match the parity inventory; local annual depth does not yet reach six annual periods for essentially the whole universe. Applies to companies only. |
| Average return on equity (3 years)Screen on this → | Average return on equity 3Yearsroe_weighted_avg_3y | Percent | Sum of the last 3 annual owners-attributable profits divided by the sum of those years' average shareholders' equity, as a fraction. A RATIO OF AGGREGATES, not the arithmetic mean of the yearly ROEs -- the two diverge whenever the equity base moved.Partially matches Screener.in. Denominator-weighted as the parity inventory describes, but Screener's exact weighting and window end-period are unverified against a golden corpus (parity LLD 02). |
| Average return on equity (5 years)Screen on this → | Average return on equity 5Yearsroe_weighted_avg_5y | Percent | The 5-year form of roe_weighted_avg_3y. Requires five annual ratio years, each pairing its own and the prior year's balance sheet, so it needs six annual periods -- almost never available locally today.Partially matches Screener.in. Concept and weighting match the parity inventory; local annual depth does not yet reach six annual periods for essentially the whole universe. |
| Current ratioScreen on this → | Current ratiocurrent_ratio | Multiple (×) | Current assets divided by current liabilities, from the newest balance sheet disclosing BOTH -- never one leg forward-filled from an older sheet. GENERAL-ONLY: a bank, NBFC or insurer does not split its balance sheet into current and non-current at all, so the ratio has no meaning there. Computed today INSIDE the Piotroski score and nowhere published, which is why the parity catalogue lists it as buildable.Applies to companies only. |
| Debt to equityScreen on this → | Debt to equitydebt_to_equity | Multiple (×) | Latest total debt divided by stockholders equity.Computed on a different basis from Screener.in. DalalOS excludes lease liabilities and bank deposits from total debt. |
| EBITDA marginScreen on this → | ebitda_margin | Percent | TTM EBITDA divided by TTM revenue, as a fraction.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). Applies to companies only. |
| Enterprise valueScreen on this → | Enterprise Valueev | ₹ crore | Market cap plus net debt (total debt minus cash), in absolute rupees.Applies to companies only. |
| EV / EBITScreen on this → | Enterprise Value to EBITev_to_ebit | Multiple (×) | Enterprise value divided by TTM EBIT.Applies to companies only. |
| EV / EBITDAScreen on this → | EVEBITDAev_to_ebitda | Multiple (×) | Enterprise value divided by TTM EBITDA; non-positive denominators suppressed.Applies to companies only. |
| Historical P/B median (5 years)Screen on this → | Historical PB 5Yearshistorical_pb_median_5y | Multiple (×) | Median of month-end point-in-time P/B observations over the trailing 5 years, as a multiple. Each observation divides that session's raw close by the book value per share disclosed on the newest balance sheet public by that close, rescaled onto the session's own share basis. Same month-end sampling and 48-observation floor as the P/E median.Partially matches Screener.in. Sampling rule is one observation per calendar month (the last session in each YYYY-MM bucket at which the metric was computable) with a 48-observation floor -- the same unreconciled rule as historical_pe_median_5y, hence PARTIAL, not EXACT (parity gate G7). Coverage is additionally bounded because the underlying point-in-time series only carries a session where a P/E was also computable, so a loss-maker currently has no P/B history at all -- see docs/handoffs/pit-valuation-expansion.md. |
| Historical P/E median (5 years)Screen on this → | Historical PE 5Yearshistorical_pe_median_5y | Multiple (×) | Median of month-end point-in-time P/E observations over the trailing 5 years, as a multiple. One observation per calendar month -- the last trading session in each YYYY-MM bucket at which a P/E was computable -- so a month with more sessions does not carry more weight. NULL below 48 monthly observations: a '5-year median' from 17 months is a differently-shaped number wearing the same label, and a filter cannot tell the two apart.Partially matches Screener.in. Sampling rule is one observation per calendar month (the last session in each YYYY-MM bucket at which the metric was computable) with a 48-observation floor. That rule is documented and stable but has NOT been reconciled against the comparator's, and a median is determined entirely by which observations enter it -- hence PARTIAL, not EXACT (parity gate G7). Coverage is further bounded by the source series: a session whose P/E was suppressed contributes nothing, so a loss-making or very expensive name reaches the floor later. |
| Industry price to earningsScreen on this → | Industry PEindustry_pe | Multiple (×) | The median cached quote P/E of this security's SEBI classification group, the security itself included. The group is its `isubgroup` when that holds at least the existing peer minimum of other securities, else its broader `igroup` -- the same grain rule the peer table applies, and the same eligibility rule `get_sector_overview` aggregates on, both shared as functions so the screen filter and the sector page cannot report different medians for one group. Broad `sector` is deliberately NOT the grain.Computed on a different basis from Screener.in. Grouped by SEBI industry classification (isubgroup, widening to igroup for a thin group); the comparator uses its own industry taxonomy, so the constituent set differs even where the definition agrees. |
| Interest coverageScreen on this → | Interest Coverage Ratiointerest_coverageAlso: Interest Coverage | Multiple (×) | TTM EBIT divided by TTM interest expense.Applies to companies only. |
| Net marginScreen on this → | net_margin | Percent | TTM net income divided by TTM revenue, as a fraction (0.12 == 12%).Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Operating marginScreen on this → | OPMoperating_margin | Percent | TTM EBIT divided by TTM revenue, as a fraction.Computed on a different basis from Screener.in. DalalOS EBIT includes other income, so the numerator diverges from Screener's operating profit. Applies to companies only. |
| PEG ratio (3-year growth)Screen on this → | PEG Ratiopeg_ratio_3y | Multiple (×) | Price/earnings divided by three-year profit CAGR expressed in PERCENTAGE POINTS. The unit conversion is the trap: DalalOS stores growth as a FRACTION, so dividing by the stored 0.20 rather than 20 would report a PEG a hundred times too large. NULL when either leg is non-positive -- a negative quotient sorts like a bargain while describing a shrinking company.Partially matches Screener.in. The numerator is DalalOS's headline `pe` (price over consolidated, owners-attributable, continuing-operations-preferred TTM EPS), NOT the exceptional-item-normalised `pe_ex_exceptional` parity LLD 09 added. That variant is NULL for any filer disclosing an exceptional item without the tax lines needed to normalise it, so denominating on it would empty this column across much of the universe; switching bases is a deliberate decision, taken once, not a side effect. |
| Piotroski F-ScoreScreen on this → | Piotroski scorepiotroski_f_score | Count | Piotroski F-Score, an integer count of satisfied criteria from 0 to 9.Applies to companies only. |
| Price return CAGR (3 years)Screen on this → | Return over 3yearsreturn_cagr_3y | Percent | Annualised split/bonus-adjusted price return over ~3 years, as a FRACTION (0.15 == 15% a year), compounded over the ACTUAL elapsed days between the two bars rather than an assumed three years. NULL when the window spans a rights issue, demerger, spinoff or merger -- part of such a move is a mechanical value transfer, and annualising it would smear that transfer across every year of the window. |
| Price return CAGR (5 years)Screen on this → | Return over 5yearsreturn_cagr_5y | Percent | The five-year horizon of `return_cagr_3y`, identical in every other respect. |
| Price to bookScreen on this → | Price to book valuepb | Multiple (×) | Price divided by book value per share (owners equity over derived shares). |
| Price to cash flowScreen on this → | Price to Cash Flowprice_to_cash_flowAlso: Market Capt to Cash Flow | Multiple (×) | Market cap divided by latest annual operating cash flow. |
| Price to earningsScreen on this → | Price to Earningpe | Multiple (×) | Price divided by TTM EPS; loss-making and otherwise invalid values are suppressed. |
| Price to earnings (excluding exceptional items)Screen on this → | pe_ex_exceptional | Multiple (×) | Market capitalisation divided by TTM profit after tax with the AFTER-TAX exceptional item removed, as a multiple. Each quarter's exceptional item is grossed down by that quarter's own (current + deferred tax) / pre-tax profit; a quarter that discloses an exceptional item but not those inputs makes the whole figure NULL. DalalOS's headline pe keeps its own basis (price over consolidated, owners-attributable, continuing-operations-preferred TTM EPS).Partially matches Screener.in. Answers Screener's "Price to Earning", whose phrase currently resolves to 'pe' (the DalalOS basis, deliberately unchanged). The documented exceptional-item tax formula is implemented, but the comparator applies NO tax adjustment to exceptional items it classifies as fixed-asset sales and DalalOS has no source classifier for that case, so a name carrying such an item still differs -- PARTIAL until that classifier exists. RATIOS_EDGE_CASES.md SS B1a remains the reconciliation baseline for the headline pe, which this metric does not change. |
| Price to free cash flowScreen on this → | Price to Free Cash Flowprice_to_fcf | Multiple (×) | Market cap divided by latest annual free cash flow (operating cash flow minus capex).Computed on a different basis from Screener.in. DalalOS uses latest-annual FCF; Screener uses average 3-year FCF per share. |
| Price to free cash flow (3-year average)Screen on this → | price_to_fcf_3y_avg | Multiple (×) | Market capitalisation divided by the AVERAGE free cash flow (operating cash flow minus capex) of the last three annual periods, as a multiple. DalalOS's own price_to_fcf keeps its single-latest-year basis, which swings by a factor on one capex-heavy year. NULL unless three annual periods each disclose both legs and the average is positive.Computed on a different basis from Screener.in. Answers Screener's "Price to Free Cash Flow", whose phrase currently resolves to 'price_to_fcf' (the DalalOS basis, deliberately unchanged). Same three-year-average smoothing. The comparator states it per share; this is market cap over total free cash flow, which is the same ratio wherever the share count is constant across the window and differs where it is not. |
| Price to salesScreen on this → | Price to Salesprice_to_salesAlso: Market Cap to Sales | Multiple (×) | Market cap divided by TTM revenue. |
| Return on assetsScreen on this → | Return on assetsroa | Percent | TTM net income divided by average total assets, as a fraction.Computed on a different basis from Screener.in. DalalOS uses TTM net income over AVERAGE assets; Screener uses last-year net profit. |
| Return on assets (last year)Screen on this → | roa_last_year | Percent | Latest ANNUAL statutory net income divided by average total assets, as a fraction. Identical to DalalOS's roa in every respect except the window: roa uses the trailing twelve months and is up to three quarters fresher, which is where the two diverge most right after an unusual quarter.Computed on a different basis from Screener.in. Answers Screener's "Return on assets", whose phrase currently resolves to 'roa' (the DalalOS basis, deliberately unchanged). Same last-year-profit-over-average-assets definition. The numerator is the group-scope statutory total (matching the group-scope asset base); the denominator averages DalalOS's two most recent annual balance sheets. |
| Return on capital employedScreen on this → | Return on capital employedroce | Percent | TTM EBIT divided by average capital employed (debt + equity), as a fraction.Applies to companies only. |
| Return on capital employed (excluding exceptional items)Screen on this → | roce_ex_exceptional | Percent | TTM EBIT with the PRE-TAX exceptional item removed, divided by average capital employed (debt + equity), as a fraction. Identical to DalalOS's roce except for the exceptional-item removal, so the two are directly comparable and the difference is attributable to exactly one line. GENERAL-ONLY through the same mechanical EBIT gate.Partially matches Screener.in. Answers Screener's "Return on capital employed", whose phrase currently resolves to 'roce' (the DalalOS basis, deliberately unchanged). Exceptional-item normalisation matches the documented basis, but DalalOS's capital employed is debt + equity rather than assets minus current liabilities, and the numerator remains trailing-twelve-month rather than annual. Two named, unreconciled differences, hence PARTIAL. Applies to companies only. |
| Return on equityScreen on this → | Return on equityroe | Percent | TTM owners net income divided by average equity, as a fraction (0.15 == 15%). |
| Return over 1 dayScreen on this → | Return over 1dayreturn_1d | Percent | Split/bonus-adjusted price return over one day, as a fraction. |
| Return over 1 monthScreen on this → | Return over 1monthreturn_1m | Percent | Split/bonus-adjusted price return over one month, as a fraction. |
| Return over 1 weekScreen on this → | Return over 1weekreturn_1w | Percent | Split/bonus-adjusted price return over one week, as a fraction. |
| Return over 1 yearScreen on this → | Return over 1yearreturn_1y | Percent | Split/bonus-adjusted price return over one year, as a fraction. |
| Return over 3 monthsScreen on this → | Return over 3monthsreturn_3m | Percent | Split/bonus-adjusted price return over three months, as a fraction. |
| Return over 6 monthsScreen on this → | Return over 6monthsreturn_6m | Percent | Split/bonus-adjusted price return over six months, as a fraction. |
| Altman Z-Score | Altman Z Scorealtman_z_score | Number | Altman Z-Score for general-template filers. Genuinely computed and materialized by the nightly metrics pipeline, but deliberately not wired as a screen filter or sort key (see src/tools/screen.py's module docstring).Computed nightly; not screenable yet. Not yet implemented. Computed and surfaced by get_financials / get_peer_comparison, but not reachable from screen_stocks. Applies to companies only. |
Ownership
| Ratio | Write it as | Unit | Definition |
|---|---|---|---|
| Change in DII holdingScreen on this → | Change in DII holdingdii_holding_change_qoq | Percent | Percentage-POINT change in domestic institutional holding between the latest two available shareholding filings. NULL, never 0, when either period is missing.Partially matches Screener.in. Same latest-two-FILED-periods caveat as Change in promoter holding. |
| Change in FII holdingScreen on this → | Change in FII holdingfii_holding_change_qoq | Percent | Percentage-POINT change in foreign institutional holding between the latest two available shareholding filings. NULL, never 0, when either period is missing.Partially matches Screener.in. Same latest-two-FILED-periods caveat as Change in promoter holding. |
| num_shareholders_change_qoq | Count | Plain integer change in the company-wide shareholder count between the latest two available shareholding filings. NULL, never 0, when either period is missing the count -- which is common, because shareholding detail coverage lags.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). | |
| Change in promoter holdingScreen on this → | Change in promoter holdingpromoter_holding_change_qoq | Percent | Percentage-POINT change in promoter holding between the latest two available shareholding filings (50 -> 55 is 5.0, not 10). NULL, never 0, when either period is missing the value.Partially matches Screener.in. Screener says 'versus previous quarter'; DalalOS compares the latest two FILED periods, which coincide only when no quarter was skipped. Not reconciled against a Screener golden corpus (parity LLD 02). |
| Change in public holdingScreen on this → | public_holding_change_qoq | Percent | Percentage-POINT change in public holding between the latest two available shareholding filings. NULL, never 0, when either period is missing.Not yet implemented. No Screener.in gallery ratio maps onto this field (parity catalogue, PR 6 fixture). |
| Number of Shareholdersnum_shareholders | Count | Company-wide shareholder count from the shareholding-pattern grand-total row, as a plain count. Sourced from the newest filing that reported one, which can be older than the newest percentage filing because the detail table is backfilled separately.Partially matches Screener.in. Same disclosed grand-total count. Screener reads it from the latest filing; DalalOS falls back to the newest filing that carried one, because shareholding detail coverage lags the headline percentages. | |
| Pledged percentageScreen on this → | Pledged percentagepledged_pct | Percent | Promoter shares pledged, in PERCENTAGE POINTS (50.0 == 50%). |
| Promoter holdingScreen on this → | Promoter holdingpromoter_pct | Percent | Promoter shareholding from the latest filed pattern, in PERCENTAGE POINTS (50.0 == 50%). |
KEEP EXPLORING