Call Options Screener - Part I

May 2025

The Problem

My dad is an avid options trader — he's been doing it for 30+ years.

When he walks me through his strategy and shows me the volume of positions he manually analyzes, my mind immediately goes to how can this be automated. There are plenty of online screeners (e.g. ThinkOrSwim, StreetSmartEdge 🪦) for this sort of thing, but I've found them to be… not terribly flexible.

In keeping with the theme of this site – I'm just going to build the tool I want.

The Objective

He's trying to achieve a steady annualized return of 8-10%, with a 20-30% downside protection — so, more conservative than investing in the S&P, but more aggressive than investing in bonds.

The Strategy

One of his strategies is a variation of a deep in the money covered call — where you buy a stock and sell a call option expiring at some point in the future.

He's looking for stocks that:

  1. He wouldn't mind holding for a long period of time
  2. Pays an attractive qualified dividend

And a call option that:

  1. Has an expiration at least 12 months into the future
  2. Provides a 20-30% insurance

Simple enough. The complexity arises when he tries to impose his own expected return calculation under different scenarios which involve some datetime math.

The Example

Let's follow an example* to help demonstrate the idea using NextEra Energy (NEE) covered with NEE260116C00055000:

*Note: Data is as of Monday, 5/26/25. For simplicity, I chose a contract that expires within 12 months.

Equity details
Call Option details

Here comes the crux of the issue—in order to calculate our expected return at different intervals, we need to know when the ex-dividend dates will be. Only a single ex-dividend date is announced at a time so we need to project forward based on their frequency (i.e. quarterly, bi-annually, etc).

The Timeline

Keeping that in mind, our projections would lead to the following timeline:

Given this information—we can now calculate the expected return if the options were to be exercised around each event date, colored in pink.

The Math

Before we get into the return calculation, let's look at pieces that will stay constant:

         ----------------------------------------------------------------------
         Market details for covered call using NEE260116C00055000
         ----------------------------------------------------------------------
         Today:                         2025-05-26
         Expiration date:               2026-01-16
         Upcoming ex dividend:          2025-06-02
         Option mid point:              $15.14
         Equity price:                  $67.75
         Strike price:                  $55.00
         Equity yearly dividend:        $2.27
         ----------------------------------------------------------------------
         Derived details for covered call using NEE260116C00055000
         ----------------------------------------------------------------------
         Call option intrinsic value:   $12.75
         Call option time value:        $2.39
         Covered call cost basis:       $52.61
         Covered call insurance:        22.35%
        ----------------------------------------------------------------------
    

The calculations that don't change here are:

$$\text{Option premium} = \frac{(\text{Contract Ask} + \text{Contract Bid})}{\text{2}} = \text{Option intrinsic value} + \text{Option time value}$$
The call contract mid point — provided by your brokerage.
$$\text{Cost Basis} = (\text{Equity Price} - \mathbf{\text{Option premium}})$$
Since you are both buying the stock and selling an option's contract within the same position, the cost basis is lower than it would be on a naked position.
$$\text{Insurance} = \frac{(\text{Equity Price} - \mathbf{\text{Cost Basis}})}{\text{Equity Price}}$$
This tells us what the downside protection is from the current stock price.
$$\text{Time Value} = (\text{Strike Price} - \mathbf{\text{Cost Basis}})$$
Also known as the extrinsic value of the covered call. It represents the amount a trader is willing to pay for the option based on the possibility of favorable market movements before expiration.

Now that that's covered…🥁… let's jump into the expected return calculation. The only values that are fixed across events in this calculation are the Cost Basis and the Time Value.

$$\text{Expected Annualized Return} = \frac{\frac{\text{Captured Dividends} + \text{Time Value}}{\text{Cost Basis}}}{\text{Days Until Next Event}}\times\text{365}$$
The expected return calculation factors in both dividend income and option's time value, normalized to an annual rate.

Here's a breakdown of the numbers for each event date.

                ----------------------------------------------------------------------
                Calculating return for NEE   260116C00055000 after 1 dividend
                ----------------------------------------------------------------------
                Last dividend date:       2025-06-02 (In 7 days)
                Next event date:          2025-09-02 (In 99 days)
                Captured dividend:        $0.57
                Return after 1 dividends: 20.72%
                ----------------------------------------------------------------------
                Calculating return for NEE   260116C00055000 after 2 dividends
                ----------------------------------------------------------------------
                Last dividend date:       2025-09-02 (In 99 days)
                Next event date:          2025-12-02 (In 190 days)
                Captured dividend:        $1.13
                Return after 2 dividends: 12.86%
                ----------------------------------------------------------------------
                Calculating return for NEE   260116C00055000 after 3 dividends
                ----------------------------------------------------------------------
                Last dividend date:       2025-12-02 (In 190 days)
                Next event date:          2026-01-16 (In 235 days)
                Captured dividend:        $1.70
                Return after 3 dividends: 12.07%
                ----------------------------------------------------------------------
            

The Caveats

All of this sounds great, but there are a few caveats to keep in mind:

  1. Our projected ex-dividend date could be off
  2. The dividend amount could change
  3. The call option could be exercised at any point, not just around events

The Data

Now that we know how to calculate that for a single contract, we can apply the same idea across many contracts. To more easily compare different contracts and their expected returns, we can compare them assuming we're going to hold each position until expiration.

Here you can see the expected returns for different strike prices (differentiated by color) — hover over the points to see more details.


Of course, we can slice this however we want. For example, instead of looking at the annualized return vs. time, we might be interested in the annualized return vs. the insurance provided by the position.


For larger groups the best way to consume this information is probably in a spreadsheet format. I'm currently loading output for all tickers into a private Google Sheet, but plan on putting a UI on top of it.

In a future post I'll cover the technical details of my implementation.