Introducing Income Workflows

Applying the volatility lens to Income workflows

The Income Workflow prices covered calls and cash-secured puts across the names you follow, and normalizes every write to roughly the same assignment risk so the premiums are actually comparable. It sits in the sidebar under Workflows → Income.

The page has three panels, meant to be used top to bottom: Discover (find candidates visually), Screen (rank and filter them in a grid), Evaluate (price one name's full menu).

Scope controls

Three controls at the top right govern every panel on the page:

  • Ticker selector — the universe being scored. Defaults to the names you've populated.
  • Liquidity — restricts to High / Medium / Low option-liquidity tiers.
  • Exclude earnings weeks — drops names with earnings inside the window.

Change any of them and all three panels re-price.

1. Discover

A scatter of your universe. The X axis is always the sell-vol score. The Y axis is yours to pick from eight measures: 25d call-skew percentile, 25d put-skew percentile, VRP, SD from 200MA, weekly return (z), IV 30d weekly change, correlation to SPY, and RV trend.

Dots are colored by sector, and the legend is a filter — click a sector to drop it from the plot, click again to bring it back. Clicking any dot loads that name into the Evaluate panel below.

The point of the panel is intersections: names that are high on the sell-vol score and extreme on whichever second axis you care about.

2. Screen

The grid. Chips across the top set what's being priced:

  • Covered call / Cash-secured put — which side you're writing.
  • Vol / Yield — Vol ranks by sell-vol score with skew as the tiebreak; Yield ranks by the richest premium.
  • Tenor — 1m, 3m, 6m, 12m.

Every name is struck at approximately 0.25 delta. That's the whole idea: same assignment risk on every ticker, so the premium column measures something comparable instead of rewarding whoever's strike happens to sit closest to spot.

Clicking a row loads that name and that mode into Evaluate.

Default columns for covered calls: Name, Sector, Price, Sell vol score, Strike, Δ, Mark, Yield, Ann. yield, Call skew %tile, VRP, Liq, plus RV Trend, Corr SPY and SD from 200MA. Cash-secured puts show the same set with Put skew %tile leading.

3. Evaluate — the yield menu

From the screener, click any cell to load it into the spotlight card underneath, which shows the spot price, the strike, the mark, delta, and the yield — then annualized and if-called for covered calls, or max gain / max loss and the effective entry price for cash-secured puts.

The sell vol score

The screeners leverage our "Sell Vol" Scores using the same algorithm which ranks Moontower Trade Ideas — implied vol, VRP, realized vol and term-structure steepness, weighted and signed so that richer vol scores higher. The Income Workflow marries investor intent with the "volatility lens" for distinguishing whether an option price is expensive versus merely being high. The score conveys a sense of value.

Two properties matter in this tool. The score is cross-sectional: every name is ranked against the others rather than against an absolute standard. And it is recomputed against whatever is currently in scope. Narrow your ticker list or tighten the liquidity filter and every score on the page moves — a name that looks unremarkable across the full universe can top your own watchlist. That's deliberate, but it means a score is only meaningful next to the other scores you're looking at right now.

It's the X-axis on Discover and the primary sort in the Screener's Vol View, which makes it the natural first axis for an intersection: sell vol score against skew, against VRP, against correlation.

Metrics specific to this tool

Everything else in the column roster — VRP, steepness, the IV and RV percentiles, RV trend, correlation to SPY, SD from 200MA, the weekly return and IV-change fields — is the same metric it is everywhere else in the app. It's carried into the screener so you can build intersections without leaving the page.

Screening with the grid

The screener is a full data grid, not a fixed table:

  • Filter on any column. Numeric columns get range filters, Name gets a text filter, Sector and Liq get checkbox filters. Filters stack.
  • Group by any column. Drag a header into the group bar at the top to collapse the screen into sector buckets, liquidity tiers, or anything else.
  • Choose your columns. Everything the tool computes is available in the Columns panel, not just the defaults. Both skew wings are always available — only which one is shown by default changes with the mode chip.
  • Sort on anything, including columns you've added yourself.

Your column and filter choices persist between visits.

Example screens

Each of these is a filter combination on the screener — set the filters from the column menus, then sort. Columns that are hidden by default are one click away in the Columns panel.

Oversold, with premium bid. Cash-secured put mode. 1W Z-Score < −1 (or SD from 200MA < 0), IV %tile 1Y > 60, VRP > 0. Sort by Yield. Surfaces names that have just sold off hard while implied vol sits high against its own year — the entry discounts you're being paid the most to name. Sort on Yield rather than annualized: cash-secured put mode doesn't carry an annualized column.

Extended, with the call wing bid. Covered call mode. 1W Z-Score > +1.5 (or SD from 200MA > 2), Call skew %tile > 70. Names that have run, where the upside you'd be capping is the part of the surface that's bid. Group by Sector to see whether it's one hot theme or broad.

Implied rich against a cooling realized. VRP above a threshold you pick, RV Trend < 0.8. Realized vol over the past week is running below its own 30-day, while implied still carries a premium. Inverting it — RV Trend > 1.2 — gives you the screen for names where realized is accelerating into the implied.

Carry that isn't secret beta. Corr SPY (1M) < 0.3, VRP > 0, grouped by Sector. A short-premium book concentrated in high-correlation names behaves like one position in a drawdown; this is the screen that finds the names that don't move together.