Oliver Kell Cycle Screener — approximation (FinBridge DB)
screen_kellScreen KR, US and/or TW stocks for an Oliver Kell "Cycle of Price Action" long setup, evaluated on the nightly indicators_latest snapshot (daily corporate-action-adjusted KR prices).
APPROXIMATION: Oliver Kell's method is discretionary — his full cycle (reversal extension, EMA crossback, wedge pop, base-n-break, exhaustion) is a chart read, not a formula. This screener only proxies ONE phase: "a relative-strength leader in an uptrend, riding its short-term EMAs and not over-extended". It will miss real Kell setups and flag stocks that are not.
Conditions (all required):
close > 20-day EMA (uptrend, holding the 20EMA)
price is 0..'max_ext_pct'% above the 10-day EMA (above support but not exhausted)
RS percentile >= 'rs_min' (a leader)
if require_ema_stack: 10-day EMA > 20-day EMA (rising short-term stack)
Args:
market: 'kr', 'us', or 'all' (default)
rs_min: minimum RS percentile 1-99 (default 80; Kell trades leaders)
max_ext_pct: max % above the 10-day EMA before treating it as over-extended (default 15)
require_ema_stack: require 10EMA > 20EMA (default true)
min_vol_avg20: optional minimum 20-day average volume (liquidity filter)
min_price: optional minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW)
sort_by: rs_pctile|pct_from_ema10|ret_20d|ret_5d|macd_hist|close (default rs_pctile)
order: 'asc'|'desc' (default 'desc'); limit: 1-50 (default 20); response_format: 'markdown'|'json'
Returns: {count, market, criteria:{rs_min, max_ext_pct, require_ema_stack}, rows:[{name, source, ticker|stock_code, as_of, close, ema10, ema20, pct_from_ema10, macd_hist, rs_pctile, ret_20d}]}.
Examples:
US leaders on EMA support: {market:'us', min_vol_avg20: 500000}
Tighter KR leaders near the 10EMA: {market:'kr', rs_min: 85, max_ext_pct: 8, min_vol_avg20: 100000}
Use when: shortlisting momentum leaders riding short-term EMAs (Kell style, approximate). Don't treat a pass as a Kell "buy" — the cycle phase and chart context are discretionary. For the 8-point trend template use screen_minervini; for arbitrary technicals use screen_technical. Notes: 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. This is an approximation of a discretionary method, not a faithful reproduction. Market data, not investment advice. Errors: an empty result is not an error (count 0 = nothing passed today); 'database has not been built yet' -> ingest/indicators has not run.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows, 1-50 (default 20) | |
| order | No | Sort direction (default desc) | desc |
| market | No | Market: 'kr' (default), 'us', 'tw', or 'all'. Japan has no redistributable price source, so it is not screenable. | kr |
| rs_min | No | Minimum RS percentile (default 80) | |
| sort_by | No | Sort column (default rs_pctile) | rs_pctile |
| min_price | No | Minimum close price (avoid low-priced stocks; e.g. 10 for US$, 5000 for KRW) | |
| max_ext_pct | No | Max % above the 10-day EMA before over-extended (default 15) | |
| min_vol_avg20 | No | Minimum 20-day average volume (liquidity filter) | |
| response_format | No | 'markdown' for a table, 'json' for compact machine-readable output | markdown |
| require_ema_stack | No | Require 10-day EMA > 20-day EMA (default true) |
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 |