New scanner
Pick a universe, write the conditions, choose how to rank. Run tries it on the latest session without saving; Save keeps it as a new version - earlier versions and their runs stay as they were.
Sign in to run and save your own rules. The presets on the scanners page run for everyone.
Every feature, and how it is calculated
| Feature | Id | Unit | Formula |
|---|---|---|---|
| Close | close | ₹ | Adjusted close of the session. |
| Open | open | ₹ | Adjusted open of the session. |
| High | high | ₹ | Adjusted high of the session. |
| Low | low | ₹ | Adjusted low of the session. |
| Change on the day | change_pct | % | (close / previous close − 1) × 100. |
| Gap at the open | gap_pct | % | (open / previous close − 1) × 100. |
| Return, 5 sessions | ret_5d | % | (close / close 5 sessions back − 1) × 100. |
| Return, 20 sessions | ret_20d | % | (close / close 20 sessions back − 1) × 100. |
| Return, 60 sessions | ret_60d | % | (close / close 60 sessions back − 1) × 100. |
| Return, 250 sessions | ret_250d | % | (close / close 250 sessions back − 1) × 100. |
| 52-week high | high_52w | ₹ | Highest high of the last 250 sessions, this one included. |
| 52-week low | low_52w | ₹ | Lowest low of the last 250 sessions, this one included. |
| Distance from 52-week high | dist_52w_high_pct | % | (close / 52-week high − 1) × 100; 0 at the high, negative below it. |
| Distance from 52-week low | dist_52w_low_pct | % | (close / 52-week low − 1) × 100. |
| 20-session breakout | breakout_20d | 0/1 | 1 when the close is above the highest high of the 20 sessions before this one. |
| 20-session breakdown | breakdown_20d | 0/1 | 1 when the close is below the lowest low of the 20 sessions before this one. |
| SMA(20) | sma_20 | ₹ | Mean of the last 20 closes. |
| SMA(50) | sma_50 | ₹ | Mean of the last 50 closes. |
| SMA(200) | sma_200 | ₹ | Mean of the last 200 closes. |
| EMA(20) | ema_20 | ₹ | EMA seeded with SMA(20), k = 2/21. |
| EMA(50) | ema_50 | ₹ | EMA seeded with SMA(50), k = 2/51. |
| ADX(14) | adx_14 | 0–100 | Wilder's ADX: smoothed DX of +DI(14) and −DI(14). |
| +DI(14) | plus_di_14 | 0–100 | 100 × Wilder sum of +DM / Wilder sum of TR, 14. |
| −DI(14) | minus_di_14 | 0–100 | 100 × Wilder sum of −DM / Wilder sum of TR, 14. |
| Supertrend(10, 3) | supertrend_10_3 | ₹ | The band in force: (high+low)/2 ± 3 × ATR(10), ratcheting; see methodology. |
| Supertrend direction | supertrend_dir | +1/−1 | +1 while the close holds above the lower band, −1 after it closes below; flips back above the upper band. |
| RSI(14) | rsi_14 | 0–100 | Wilder's RSI: 100 − 100 / (1 + average gain / average loss), 14 sessions. |
| MACD(12, 26) | macd | ₹ | EMA(12) − EMA(26) of the close. |
| MACD signal(9) | macd_signal | ₹ | EMA(9) of the MACD line. |
| MACD histogram | macd_hist | ₹ | MACD − signal. |
| ROC(12) | roc_12 | % | (close / close 12 sessions back − 1) × 100. |
| Stochastic %K(14) | stoch_k_14 | 0–100 | (close − lowest low of 14) / (highest high of 14 − lowest low of 14) × 100. |
| Stochastic %D(3) | stoch_d_3 | 0–100 | SMA(3) of %K(14). |
| Relative strength vs NIFTY 50, 60 sessions | rs_nifty_60 | pts | Return over 60 sessions minus NIFTY 50's over the same sessions, in percentage points. |
| Relative strength vs sector index, 60 sessions | rs_sector_60 | pts | Return over 60 sessions minus the company's sector index over the same sessions. |
| ATR(14) | atr_14 | ₹ | Wilder-smoothed true range, 14 sessions. |
| ATR as % of close | atr_pct | % | ATR(14) / close × 100. |
| Bollinger width(20, 2) | bb_width_20 | % | (upper − lower) / middle × 100, bands SMA(20) ± 2 population SD. |
| Historical volatility(20) | hv_20 | %/yr | Sample SD of 20 daily log returns × √252 × 100. |
| Volume | volume | shares | Adjusted shares traded in the session. |
| Average volume(20) | avg_volume_20 | shares | Mean volume of the 20 sessions before this one. |
| Volume ratio(20) | volume_ratio_20 | × | Volume / average volume of the 20 sessions before this one. |
| Delivery % | delivery_pct | % | Share of traded quantity marked for delivery (NSE). |
| Average delivery %(20) | delivery_avg_20 | % | Mean delivery % of the 20 sessions before this one. |
| Average turnover(20) | turnover_avg_20 | ₹ lakh | Mean turnover of the last 20 sessions, unadjusted rupees lakh - the liquidity filter. |
| Revenue growth YoY | revenue_yoy_pct | % | Latest filed quarter's revenue vs the same quarter a year before, as filed on or before the session. |
| Profit growth YoY | pat_yoy_pct | % | Latest filed quarter's PAT vs the same quarter a year before. |
| Revenue growth QoQ | revenue_qoq_pct | % | Latest filed quarter's revenue vs the quarter before. |
| Profit growth QoQ | pat_qoq_pct | % | Latest filed quarter's PAT vs the quarter before. |
| Net margin | net_margin_pct | % | Latest filed quarter's PAT / revenue × 100. |
| Days since the last filing | days_since_result | days | Calendar days from the latest filing's filed date to the session. |
| Pre-tax margin | pbt_margin_pct | % | Latest filed quarter's profit before tax / revenue × 100. |
| Other income share | other_income_pct | % | Latest filed quarter's other income / total income × 100 - how much of the income is not from operations. |
| Days to the next result | days_to_result | days | Calendar days from the session to the next board meeting on the results calendar. The calendar as it stands today: for past sessions it may include dates that were not yet announced then - backtests that use it are flagged. |
| Result day | result_today | 0/1 | 1 when a results board meeting on the calendar falls on the session. |
| Headlines, 5 days | news_count_5d | count | Headlines tagged with the company published in the five calendar days up to the session's close. |
| Daily read | market_read_lean | +1/−1/0 | +1 when the site's daily read of this close named the stock as one to look at, −1 as one to stay away from, 0 otherwise. Recorded that evening, never rewritten. |
| Sector index | sector | The company's sector index (e.g. NIFTY IT), as classified today - not point-in-time. | |
| Industry | industry | The company's industry, as classified today - not point-in-time. | |
| N consecutive rising candles | pat_rising_run | +1/−1/0 | +1 when 'N consecutive rising candles' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Walk the candles in order. Count a streak: +1 when this close is above the previous close, back to 0 otherwise. The pattern completes on the candle where the streak first reaches N. Report the move from the close before the run to the close that completed it. Progress: how long the current streak is against N, and whether the last close is still rising. Parameters (daily defaults): n=5. |
| N consecutive falling candles | pat_falling_run | +1/−1/0 | +1 when 'N consecutive falling candles' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Walk the candles in order. Count a streak: +1 when this close is below the previous close, back to 0 otherwise. The pattern completes on the candle where the streak first reaches N. Report the move from the close before the run to the close that completed it. Progress: the current streak against N. Parameters (daily defaults): n=5. |
| Higher highs and higher lows | pat_higher_highs_lows | +1/−1/0 | +1 when 'Higher highs and higher lows' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Find swing highs and lows with the zigzag: a pivot is confirmed once price has moved swing_pct against it. Take every window of 2×swings+1 consecutive confirmed pivots. Require each swing high in the window above the previous swing high, and each swing low above the previous swing low. The pattern completes on the candle where the last pivot in the window was confirmed. The last swing low is reported as the level the structure stands on. Parameters (daily defaults): swing_pct=3.0, swings=2. |
| Lower highs and lower lows | pat_lower_highs_lows | +1/−1/0 | +1 when 'Lower highs and lower lows' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Find swing highs and lows with the zigzag (pivot confirmed after a swing_pct move against it). Take every window of 2×swings+1 consecutive confirmed pivots. Require each swing high below the previous swing high, and each swing low below the previous swing low. The pattern completes on the candle where the last pivot was confirmed. The last swing high is reported as the level the structure hangs from. Parameters (daily defaults): swing_pct=3.0, swings=2. |
| Gap at the open | pat_gap | +1/−1/0 | +1 when 'Gap at the open' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: At the first candle of each session, compare its open with the last close of the previous session. Gap % = open / previous close − 1. The pattern completes when |gap %| ≥ pct; direction is the gap's sign. On daily candles this is simply open vs the previous day's close. Parameters (daily defaults): pct=1.0. |
| Move of X% within M candles | pat_spike | +1/−1/0 | +1 when 'Move of X% within M candles' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: For each candle, take the close M candles earlier. Move % = close now / close then − 1. The pattern completes when |move %| ≥ pct; direction is the sign. Consecutive candles that all qualify in the same direction count once, at the first of them. Parameters (daily defaults): candles=3, pct=2.0. |
| Inside bar, then a breakout | pat_inside_break | +1/−1/0 | +1 when 'Inside bar, then a breakout' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take three consecutive candles: mother, inside, break. Inside: its high ≤ mother high and its low ≥ mother low. The pattern completes when the third candle closes above the mother high (up) or below the mother low (down). Parameters (daily defaults): none. |
| Moving-average cross | pat_ma_cross | +1/−1/0 | +1 when 'Moving-average cross' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Compute SMA(fast) and SMA(slow) of the closes. The pattern completes on a candle where fast was ≤ slow on the previous candle and is > slow now (up), or ≥ before and < now (down). fast must be smaller than slow, else nothing is reported. Parameters (daily defaults): fast=9, slow=21. |
| Volume spike | pat_volume_spike | +1/−1/0 | +1 when 'Volume spike' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Average the volume of the previous M candles (those that reported one). The pattern completes when this candle's volume ≥ times × that average. Direction is the candle's own: up if it closed above its open, down if below, neutral if flat. Parameters (daily defaults): candles=20, times=3.0. |
| RSI into overbought / oversold | pat_rsi_level | +1/−1/0 | +1 when 'RSI into overbought / oversold' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Compute RSI(n) from the closes (Wilder smoothing). The pattern completes when RSI moves from below `high` to at or above it (overbought → down), or from above `low` to at or below it (oversold → up). Only the crossing candle is a hit, not every candle spent inside the zone. Parameters (daily defaults): high=70, low=30, n=14. |
| Bollinger squeeze, then a break | pat_bollinger_break | +1/−1/0 | +1 when 'Bollinger squeeze, then a break' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Compute Bollinger bands: SMA(n) ± k × standard deviation of the last n closes; bandwidth = (upper − lower) / middle. Squeeze: the smallest bandwidth in the last 6 candles is within 5% of the smallest over the last `squeeze` candles. The pattern completes on a candle that closes above the upper band having been at or below it the candle before (up), or the mirror below the lower band (down), while squeezed. Parameters (daily defaults): k=2.0, n=20, squeeze=60. |
| Trend line: slope, length, strength | pat_trend_run | +1/−1/0 | +1 when 'Trend line: slope, length, strength' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Fit a least-squares line through the last N closes (x = candle index). Slope % = slope / mean close × 100, per candle. R² = share of the variance the line explains (1 = a ruler, 0 = chop). Length = candles since the window's low (for a rising line) or high (falling). Magnitude = % from that extreme to the last close. Continuing = the last close is on the slope's side of the fitted line, or the last three closes all moved with the slope. The pattern completes when |slope %| ≥ min_slope_pct and R² ≥ min_r2; consecutive qualifying candles count once, at the first. Progress always reports the current slope, R², length, magnitude and whether it is continuing. Parameters (daily defaults): min_r2=0.8, min_slope_pct=0.25, n=20. |
| Impulse wave (five swings, Elliott-style) | pat_impulse_wave | +1/−1/0 | +1 when 'Impulse wave (five swings, Elliott-style)' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Find swings with the zigzag at swing_pct. Take six consecutive confirmed pivots L-H-L-H-L-H (up) or H-L-H-L-H-L (down). Rule 1: wave 2 does not retrace past the start of wave 1. Rule 2: wave 3 is not the shortest of waves 1, 3 and 5. Rule 3: wave 4 does not enter the price territory of wave 1. Each wave must make progress: 3 beyond 1, 5 beyond 3. The pattern completes when the sixth pivot is confirmed. Progress reports 'wave 5 under way' when the first five pivots hold and the live swing is the fifth wave. Parameters (daily defaults): swing_pct=4.0. |
| Bullish engulfing | pat_bullish_engulfing | +1/−1/0 | +1 when 'Bullish engulfing' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take two consecutive candles. First closes below its open; second closes above its open. Second's open ≤ first's close and second's close ≥ first's open (its body covers the first's body). Context: the net move over the `context` candles before the pair is negative (set 0 to skip). Parameters (daily defaults): context=5. |
| Bearish engulfing | pat_bearish_engulfing | +1/−1/0 | +1 when 'Bearish engulfing' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take two consecutive candles. First closes above its open; second closes below its open. Second's open ≥ first's close and second's close ≤ first's open. Context: the net move over the `context` candles before the pair is positive (set 0 to skip). Parameters (daily defaults): context=5. |
| Morning star | pat_morning_star | +1/−1/0 | +1 when 'Morning star' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take three consecutive candles. First: a down candle with a body at least the average body of the ten candles before it. Second: a body no bigger than small_pct of the first's body. Third: an up candle closing above the midpoint of the first candle's body. Parameters (daily defaults): small_pct=30. |
| Evening star | pat_evening_star | +1/−1/0 | +1 when 'Evening star' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take three consecutive candles. First: an up candle with a body at least the average body of the ten candles before it. Second: a body no bigger than small_pct of the first's body. Third: a down candle closing below the midpoint of the first candle's body. Parameters (daily defaults): small_pct=30. |
| Three white soldiers | pat_three_soldiers | +1/−1/0 | +1 when 'Three white soldiers' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take three consecutive candles, all closing above their opens. Each close above the previous close. Each open inside the previous candle's body. Each upper wick no more than wick_pct of its body. Parameters (daily defaults): wick_pct=30. |
| Three black crows | pat_three_crows | +1/−1/0 | +1 when 'Three black crows' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Take three consecutive candles, all closing below their opens. Each close below the previous close. Each open inside the previous candle's body. Each lower wick no more than wick_pct of its body. Parameters (daily defaults): wick_pct=30. |
| Doji | pat_doji | +1/−1/0 | +1 when 'Doji' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Body = |close − open|; range = high − low. The pattern completes when range > 0 and body ≤ body_pct of the range. Parameters (daily defaults): body_pct=10. |
| Hammer | pat_hammer | +1/−1/0 | +1 when 'Hammer' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Lower wick ≥ wick_times × body. Upper wick ≤ other_wick_pct of the range. Context: the net move over the `context` candles before is negative (set 0 to skip). The wick's low is reported as the level rejected. Parameters (daily defaults): context=5, other_wick_pct=15, wick_times=2.0. |
| Shooting star | pat_shooting_star | +1/−1/0 | +1 when 'Shooting star' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Upper wick ≥ wick_times × body. Lower wick ≤ other_wick_pct of the range. Context: the net move over the `context` candles before is positive (set 0 to skip). The wick's high is reported as the level rejected. Parameters (daily defaults): context=5, other_wick_pct=15, wick_times=2.0. |
| Marubozu | pat_marubozu | +1/−1/0 | +1 when 'Marubozu' completes on this session going up (or is neutral), −1 going down, 0 otherwise. Rule: Body = |close − open|; range = high − low. The pattern completes when range > 0 and body ≥ body_pct of the range. Direction is the candle's colour. Parameters (daily defaults): body_pct=90. |