CAN SLIM Screener (FinBridge DB)
screen_canslimScreen KR and/or US stocks against William O'Neil's CAN SLIM checklist (as taught by David Ryan), joining the nightly valuation_latest (earnings/sales growth, ROE, PER) and indicators_latest (relative strength, distance from the 52-week high) snapshots. Returns fundamentally strong momentum leaders, sorted by RS by default.
Only C, A, N, S, L are coded as filters — I (institutional sponsorship) and M (market direction) require fund-flow and index-level data that cannot be evaluated from a single stock's snapshot, so they are intentionally omitted: C — Current quarterly earnings: latest-quarter diluted-EPS YoY >= c_min (default 25). Quarter codes compare like-for-like a year apart (1=Q1, 2=cumulative half, 3=Q3). A — Annual earnings & quality: latest annual diluted-EPS YoY >= a_min (default 25) AND ROE >= roe_min (default 17) N — New highs: price within near_high_pct% of the 52-week high (default 15) S — Sales: latest annual revenue YoY > 0 when require_sales is true (default true) L — Leader: RS rating (national percentile 1-99) >= rs_min (default 80) A metric that is NULL (e.g. growth base was a loss, so the sign-flipped percentage is dropped) fails its comparison and the stock is excluded.
Args:
market: 'kr' (DART/KOSPI+KOSDAQ), 'us' (EDGAR), or 'all' (default)
c_min: min latest-quarter EPS YoY %, CAN SLIM C (default 25)
a_min: min latest-annual EPS YoY %, CAN SLIM A (default 25)
roe_min: min ROE %, quality gate under A (default 17)
rs_min: min RS percentile 1-99, CAN SLIM L (default 80)
near_high_pct: max % below the 52-week high, CAN SLIM N (default 15; smaller = closer to the high)
require_sales: require positive annual revenue growth, CAN SLIM S (default true)
min_vol_avg20: optional min 20-day average volume (liquidity filter for illiquid microcaps)
min_price: optional min close price (O'Neil avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW)
sort_by: rs_pctile|eps_q_yoy|eps_a_yoy|sales_a_yoy|roe|pct_from_52w_hi|close (default rs_pctile)
order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json'
Returns: {count, market, criteria:{c_min, a_min, roe_min, rs_min, near_high_pct, require_sales}, rows:[{name, source, ticker|stock_code, as_of, close, eps_q_yoy, eps_a_yoy, sales_a_yoy, roe, rs_pctile, pct_from_52w_hi, per}]}. Growth/ROE values are percent; pct_from_52w_hi is <= 0.
Examples:
US CAN SLIM leaders with liquidity: {market:'us', min_vol_avg20: 500000}
Strict KR growth leaders near highs: {market:'kr', c_min: 40, a_min: 30, rs_min: 90, near_high_pct: 10}
Use when: finding CAN SLIM-style growth leaders combining earnings/sales acceleration with strong relative strength. Don't use for a single company's valuation detail (get_valuation), the Minervini price template (screen_minervini), or raw statements (get_dart_financials / get_edgar_financials). Notes: CAN SLIM's I (institutional sponsorship) and M (market direction) cannot be screened from single-stock data — only C, A, N, S, L are applied. Growth uses diluted-EPS/revenue YoY; a company whose prior-period base is non-positive (loss->profit sign flip) has a null metric and is excluded. KR fundamentals follow K-IFRS and US follow US-GAAP, so cross-market growth/ROE comparisons are approximate. KR/US/TW prices are adjusted for corporate actions but not dividends (indicators around dividend events may be slightly distorted); US history starts 2023-03-28 (volume from 2024-07-01) so long-window figures are shallower there. Snapshot from the nightly ingest, not real-time, and not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> the valuation/indicators ingest has not run.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| a_min | No | Min latest-annual EPS YoY % — CAN SLIM A (default 25) | |
| c_min | No | Min latest-quarter EPS YoY % — CAN SLIM C (default 25) | |
| limit | No | Max rows, 1-50 (default 20) | |
| order | No | Sort direction (default desc) | desc |
| market | No | Market: 'kr' (default), 'us', or 'all'. ⚠Taiwan is not offered here — TWSE publishes a cumulative snapshot with no quarterly EPS growth or ROE, so every row would fail C/A silently. | kr |
| rs_min | No | Min RS percentile 1-99 — CAN SLIM L (default 80) | |
| roe_min | No | Min ROE % — quality gate under CAN SLIM A (default 17) | |
| sort_by | No | Sort column (default rs_pctile) | rs_pctile |
| min_price | No | Min close price (O'Neil avoids low-priced stocks; e.g. 10 for US$, 5000 for KRW) | |
| min_vol_avg20 | No | Min 20-day average volume (liquidity filter) | |
| near_high_pct | No | Max % below the 52-week high — CAN SLIM N (default 15) | |
| require_sales | No | Require positive annual revenue growth — CAN SLIM S (default true) | |
| response_format | No | 'markdown' for a table, 'json' for compact machine-readable output | markdown |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| count | Yes | ||
| notes | No | ||
| order | No | ||
| market | Yes | ||
| signals | No | ||
| sort_by | No | ||
| us_note | No | ||
| criteria | No |