Stock screener
The stock screener under Research → Stock screener filters the fundamentals DB (mainly S&P-500) for candidates matching your wheel criteria. It applies no additional filter and makes no suggestion — the app only shows what fits the conditions you set.
Filters
- Price min/max: NULL prices (missing in the DB) are filtered out.
Min=10 / Max=200 are the desktop defaults.
- Dividend yield min/max: Min=0 means "no lower bound". NULL is
treated as "no dividend" and does not fall through the max bound.
- P/E min/max: NULL tolerated (loss quarters). Min=0 = no lower
bound.
- Min market cap: empty = no lower bound.
- Exclude earnings (days): symbols with earnings within X days are
hidden (premium spike plus assignment risk).
- Sectors: picking a single sector is enough as a filter. Empty =
all sectors.
- Only symbols with upcoming dividend: exact existence check against
the dividend calendar.
- Show all S&P-500: raises the hit limit to 500. The numeric bounds
keep applying.
Sort order
Default is PRS score descending (Put-Ready score, 0..100). The five components are:
- Dividend max 25
- Price sweet spot 30..150 USD max 20
- Wheel bonus (beta + market cap) max 15
- IV share max 40 — comes with the option-chain integration; until
then the slot stays empty and 60 points is the practical maximum.
Result row
Each row shows symbol, company name, sector, market cap, price, beta, P/E, dividend yield, next earnings and ex-div dates plus a watchlist star and a jump into the option chain.
Price freshness
Next to the price a small ⟳ button appears. Clicking it pulls the current price via your user gateway (yfinance snapshot) and updates the cell right away. Below the price the app prints the age of the value ("3h ago").
Data source note: the price comes from Fundamentals.price, i.e. the last yfinance refresh of the fundamentals DB. The company tab (Research → Companies → {symbol}) shows the same value in the header and adds a market-data card with market_metrics.last_close below it. Both stay identical until a manual refresh is triggered.
Capital binding + traffic light
The Capital binding column gives a rough estimate of the capital a single contract would tie up:
Capital binding = Price × 100
NLV share = Capital binding ÷ Net-Liquidation-ValueThe chip colour comes from your strategy fields. The chip uses a compact short form (↑ X % / Y %, ~ X % / Y %, ✓ X % / Y %) so the "Chain" column on the right stays visible. Hover any chip (or the header info badge) for the full-length explanation:
- green (
✓) – NLV share below half ofper_symbol_cap_pct
("Within strategy cap").
- yellow (
~) – NLV share between half and full
per_symbol_cap_pct ("Near symbol cap").
- red (
↑) – NLV share ≥per_symbol_cap_pct("Capital exceeds
symbol cap").
- red with extra line – additionally above
post_assignment_symbol_cap_pct ("+ post-assign Z %").
Additional sector-concentration line (phase 2, 02.08.2026):
The chip shows a second warning when the hypothetical capital binding would push the sector weight above your sector warn / hard limits. Basis: current sector share from your portfolio (getPositions -> shares x price + short PUTs x strike x 100) plus the percentage in the current row.
- yellow – hypothetical sector concentration >=
sector_warn_pct
(default 20 %).
- red – hypothetical sector concentration >=
sector_max_pct
(default 30 %).
Both values come from your strategy profile ("Strategy" panel in the cockpit).
If NLV is missing (no linked account, gateway offline), the cell only shows the absolute binding plus the note "NLV share unavailable" — without a red flag, so no false alarms.
The chip is purely informational: no filtering, no blocking. Rows with a red chip stay in the result list for further inspection.
Empty state
After the first click on Start screening, the backend returns hits from the fundamentals DB. If the result set is empty, the current filter combination is listed below the table with price, P/E, dividend and earnings limits — the most common cause is a too-narrow price range or a search that has not yet been expanded to the full S&P-500.