Every result, read before it lands. Judged after.
Sign in

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.

Edit as

Universe

NIFTY 500 uses the list on file for the session where there is one. F&O and sectors are today's lists - the run says so.

0 for no liquidity floor. 100 = ₹1 crore a day over 20 sessions.

Conditions

Match of these groups.

Group 1: match of
×

A name with no value yet for a feature (a new listing without 200 sessions, say) does not pass that condition. Crossings compare this session - or candle - with the one before. Each condition reads daily data unless you pick 5-minute, 15-minute or hourly candles; intraday conditions cover the names whose candles are captured (watched and called names), from the latest candle.

1 to 500. Ties are broken by symbol, so the order is always the same.

Shows the rules as last loaded or run - edits made in the form since then are not copied here. The same format the form writes. Groups are {"all": [...]} or {"any": [...]} and nest up to four deep; a condition is {"left": "rsi_14", "op": "<", "right": {"value": 35}} or "right": {"feature": "sma_200", "times": 1}.

Every feature, and how it is calculated

FeatureIdUnitFormula
Closeclose₹Adjusted close of the session.
Openopen₹Adjusted open of the session.
Highhigh₹Adjusted high of the session.
Lowlow₹Adjusted low of the session.
Change on the daychange_pct%(close / previous close − 1) × 100.
Gap at the opengap_pct%(open / previous close − 1) × 100.
Return, 5 sessionsret_5d%(close / close 5 sessions back − 1) × 100.
Return, 20 sessionsret_20d%(close / close 20 sessions back − 1) × 100.
Return, 60 sessionsret_60d%(close / close 60 sessions back − 1) × 100.
Return, 250 sessionsret_250d%(close / close 250 sessions back − 1) × 100.
52-week highhigh_52w₹Highest high of the last 250 sessions, this one included.
52-week lowlow_52w₹Lowest low of the last 250 sessions, this one included.
Distance from 52-week highdist_52w_high_pct%(close / 52-week high − 1) × 100; 0 at the high, negative below it.
Distance from 52-week lowdist_52w_low_pct%(close / 52-week low − 1) × 100.
20-session breakoutbreakout_20d0/11 when the close is above the highest high of the 20 sessions before this one.
20-session breakdownbreakdown_20d0/11 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_140–100Wilder's ADX: smoothed DX of +DI(14) and −DI(14).
+DI(14)plus_di_140–100100 × Wilder sum of +DM / Wilder sum of TR, 14.
−DI(14)minus_di_140–100100 × 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 directionsupertrend_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_140–100Wilder'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 histogrammacd_hist₹MACD − signal.
ROC(12)roc_12%(close / close 12 sessions back − 1) × 100.
Stochastic %K(14)stoch_k_140–100(close − lowest low of 14) / (highest high of 14 − lowest low of 14) × 100.
Stochastic %D(3)stoch_d_30–100SMA(3) of %K(14).
Relative strength vs NIFTY 50, 60 sessionsrs_nifty_60ptsReturn over 60 sessions minus NIFTY 50's over the same sessions, in percentage points.
Relative strength vs sector index, 60 sessionsrs_sector_60ptsReturn 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 closeatr_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%/yrSample SD of 20 daily log returns × √252 × 100.
VolumevolumesharesAdjusted shares traded in the session.
Average volume(20)avg_volume_20sharesMean 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₹ lakhMean turnover of the last 20 sessions, unadjusted rupees lakh - the liquidity filter.
Revenue growth YoYrevenue_yoy_pct%Latest filed quarter's revenue vs the same quarter a year before, as filed on or before the session.
Profit growth YoYpat_yoy_pct%Latest filed quarter's PAT vs the same quarter a year before.
Revenue growth QoQrevenue_qoq_pct%Latest filed quarter's revenue vs the quarter before.
Profit growth QoQpat_qoq_pct%Latest filed quarter's PAT vs the quarter before.
Net marginnet_margin_pct%Latest filed quarter's PAT / revenue × 100.
Days since the last filingdays_since_resultdaysCalendar days from the latest filing's filed date to the session.
Pre-tax marginpbt_margin_pct%Latest filed quarter's profit before tax / revenue × 100.
Other income shareother_income_pct%Latest filed quarter's other income / total income × 100 - how much of the income is not from operations.
Days to the next resultdays_to_resultdaysCalendar 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 dayresult_today0/11 when a results board meeting on the calendar falls on the session.
Headlines, 5 daysnews_count_5dcountHeadlines tagged with the company published in the five calendar days up to the session's close.
Daily readmarket_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 indexsectorThe company's sector index (e.g. NIFTY IT), as classified today - not point-in-time.
IndustryindustryThe company's industry, as classified today - not point-in-time.
N consecutive rising candlespat_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 candlespat_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 lowspat_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 lowspat_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 openpat_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 candlespat_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 breakoutpat_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 crosspat_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 spikepat_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 / oversoldpat_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 breakpat_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, strengthpat_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 engulfingpat_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 engulfingpat_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 starpat_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 starpat_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 soldierspat_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 crowspat_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.
Dojipat_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.
Hammerpat_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 starpat_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.
Marubozupat_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.