▶ Full Post Text
**TL;DR:** PMCC is a cheap alternative to the covered call, but if you choose the wrong underlying, the strategy fails. I'll talk about what really matters when judging a candidate, show you how I score them, and give you the link to the full open-source code.
# What PMCC is and why the underlying choice is more important than people think
A Poor Man's Covered Call is a diagonal spread. You buy a deep ITM LEAPS call as a synthetic long position and then sell short-dated OTM calls against it to make money. It works a lot like a covered call, but it costs a lot less than buying 100 shares. The mechanics are easy. Choosing stocks is the hard part. When the underlying is bad, the strategy falls apart in a few ways:
* The LEAPS have wide bid-ask spreads, so as soon as you enter, you're already down 3–5%.
* If there is low open interest, you can't get filled at the mid. Instead, you have to pay the ask and sell the bid.
* If IV is too low, the short call premium barely covers commissions. If IV is too high, you're probably entering before earnings and the LEAPS could blow up.
* If the LEAPS delta is too low (for example, 0.50), the long side doesn't move fast enough when the stock goes up. This means that the short call can gain value against you faster than the LEAPS gains value for you, which makes your profit smaller even on winning trades.
# The five things I look at
# 1. LEAPS delta ~0.80
The LEAPS delta should be between 0.75 and 0.85. Below 0.70, the position doesn't go up enough to act like a covered call, so you're losing too much of that behavior. If you go above 0.90, you're paying too much for intrinsic value with very little leverage benefit.
The target strike isn't "ATM" or "10% ITM." Instead, it's the strike where Black-Scholes gives you a delta of about 0.80 based on the current IV. That strike changes with volatility, which is why a fixed moneyness rule doesn't work well.
# 2. Short call delta ~0.20–0.30
Delta 0.20–0.30 gives you a good chance of going out of business without making any money (about 70–80% OTM at expiry), but you can still make a lot of money. Going lower (0.10) seems safe, but the yield drops. If you go higher (0.40+), you have to keep an eye on your assignments all the time.
# 3. Bid-ask spreads
This is one of the most important things that people often forget about.
For the LEAPS, a spread of less than 5% of the middle is tight enough to get in cleanly. 5–10% is doable, but you'll lose a lot of your edge when you enter and exit. If it's more than 10%, think twice. Every time you change, you're paying a hidden tax.
For the short call, less than 10% is fine. These are low-cost options, so the dollar spread is small. However, it can still be large in percentage terms for illiquid names.
If you can't get filled within $0.05 of the middle on a $8 LEAPS, you should look for another name.
# 4. Liquidity (volume + open interest)
Volume and open interest (OI) are indicators of how easy it will be to close positions later. I put them together:
* For LEAPS, the minimum volume + OI is 100, and the comfortable level is 500.
* Short call: the least amount of volume and open interest is 500. If it's more than 1000, you'll almost never have problems filling.
The short call is the one you roll every 1–3 weeks, so the asymmetry matters. Every time you roll it, you lose a little more money if it's not liquid.
# 5. IV level
IV between 25% and 50% is the best range for selling premium. Short call premiums are low below 25%, so you're working hard for little reward. If you're over 50%, you're either close to making money or in a volatile name where the LEAPS carries a lot of event risk.
IV between 50% and 60% is a warning sign: it's okay to work, but keep an eye on your earnings dates. I usually pass if the score is above 60%, unless there is a good reason.
# How I turned this into a score
Each criterion maps to points. Max is 11:
|Criterion|Condition|Points|
|:-|:-|:-|
|LEAPS delta|within ±0.05 of target|2|
|LEAPS delta|within ±0.10 of target|1|
|Short delta|within ±0.05 of target|1|
|Short delta|within ±0.10 of target|0.5|
|LEAPS liquidity|vol + OI > 100|1|
|LEAPS liquidity|vol + OI > 20|0.5|
|Short liquidity|vol + OI > 500|1|
|Short liquidity|vol + OI > 100|0.5|
|LEAPS spread|< 5% of mid|1|
|LEAPS spread|< 10% of mid|0.5|
|Short spread|< 10% of mid|1|
|Short spread|< 20% of mid|0.5|
|IV range|0.25 – 0.50|2|
|IV range|0.20 – 0.60|1|
|Annual yield|\> 50%|2|
|Annual yield|\> 30%|1|
|Annual yield|\> 15%|0.5|
A score of 9+ is a clean setup. 7–8 is worth a closer look. Below 6, something important is off.
# How annual yield is estimated
The short call yield as a percentage of the LEAPS cost, annualized:
short_yield = short_mid / leaps_mid * 100 # premium as % of capital
annual_yield_est = short_yield * (365 / short_days) # annualized
This is naive because it assumes you can roll at the same yield every cycle (you can't — IV changes). But it's helpful for comparing candidates on the same day. If everything else is the same, a name that shows a 40% estimated annual yield is better than one that shows a 12% yield.
The scanner also uses Black-Scholes to guess the maximum profit by guessing how much the LEAPS will be worth when the short call expires if the stock stays at the short strike:
leaps_value_at_short_expiry = black_scholes_price(
S=short_strike, # stock pins at short strike (best case)
K=leaps_strike,
T=(leaps_days - short_days) / 365,
r=0.05,
sigma=avg_iv,
option_type="call"
)
max_profit = leaps_value_at_short_expiry + short_mid - leaps_mid
This isn't a prediction — it's a ceiling. Real performance will be lower. But it answers "how good can this get?" for comparison purposes.
# The code
The full scanner is a single Python file that uses `yfinance` and a small Black-Scholes implementation:
from trading_skills.scanner_pmcc import analyze_pmcc, format_scan_results
watchlist = ["AAPL", "MSFT", "NVDA", "GOOG", "META", "AMZN"]
results = []
for symbol in watchlist:
result = analyze_pmcc(
symbol,
min_leaps_days=270, # minimum DTE for LEAPS
short_days_range=(7, 21), # target DTE for short call
leaps_delta=0.80,
short_delta=0.20,
)
if result:
results.append(result)
output = format_scan_results(results)
for r in output["results"]:
print(f"{r['symbol']:6s} score={r['pmcc_score']:4.1f} "
f"IV={r['iv_pct']:4.1f}% "
f"yield≈{r['metrics']['annual_yield_est_pct']:5.1f}%/yr "
f"capital=${r['metrics']['capital_required']:,.0f}")
Sample output:
NVDA score=9.5 IV=42.3% yield≈38.2%/yr capital=$1,420
MSFT score=8.0 IV=28.1% yield≈21.4%/yr capital=$1,850
AAPL score=7.5 IV=24.8% yield≈18.9%/yr capital=$1,120
GOOG score=6.5 IV=31.4% yield≈24.1%/yr capital=$2,340
Full source: [scanner\_pmcc.py on GitHub](https://github.com/staskh/trading_skills/blob/main/src/trading_skills/scanner_pmcc.py) — no dependencies beyond `yfinance`, `pandas`, and standard library.
# Running it from Claude Desktop (or Claude Code)
The scanner is part of a [trading-skills](https://github.com/staskh/trading_skills) open-source project that wraps various market data tools for use with Claude.
If you use Claude Desktop, the scanner is available as an MCP tool. Just type "scan NVDA, AAPL, MSFT, and GOOG for PMCC suitability" in plain English and get a formatted breakdown. Claude Code can use it as "/scanner-pmcc" skill.
However, PMCC scanner is an independent module; you can also use just the standalone Python file without any of the rest.