Reigraph Research

Study 13: Two Filters, One Near-Market-Neutral Strategy

We swept every IV rank threshold from 0 to 60 with and without earnings avoidance across 7 years and 56 liquid large-caps. The optimal combination — IVR≥30, no earnings window — achieves Sharpe 3.612, wins every year including 2018 and 2022, and has a SPY daily correlation of 0.001.

optionsbull put spreadIV rankearningsvolatilitybacktestingquantitative researchmarket neutral

Where This Came From

Study 11 tested value-screened bull put spreads — positive margin of safety, growing earnings — and found the value screen made things worse. Sharpe 1.980 vs 2.782 unscreened. The screen was concentrating the portfolio in financial stocks that are directly exposed to rising rates, which is the worst possible concentration for a put-selling strategy during a rate tightening cycle.

Study 12 tested two entry filters: IV rank and a 50-day moving average. IV rank added 0.378 Sharpe points. The MA filter slightly hurt. The mechanism for IV rank was clear: you collect more premium when options are priced for elevated vol relative to the stock’s own history, and that extra premium buffers against losses.

Study 12 ended with a hypothesis: earnings avoidance should also add alpha. Binary events create unpriced gap risk that blows through strikes. We also had an open question on the right IV rank threshold — the clean runs only tested IVR≥30.

This study answers both.


What We Tested

Two independent dimensions:

  1. IV rank threshold — the minimum IV rank a stock must have to qualify for a spread entry. IV rank is computed as:
IV_rank = (HV30_today − HV30_52wk_low) / (HV30_52wk_high − HV30_52wk_low) × 100

where HV30 is the 30-day realized volatility of the stock’s daily log returns. We use HV30 as an IV proxy (IV = HV30 × 1.20). IV rank of 0 means vol is at a 52-week low; 100 means it’s at a 52-week high. A minimum IV rank threshold requires at least 252 trading days of history before any position is entered on a given stock.

We tested thresholds: 0, 10, 20, 30, 40, 50, 60.

  1. Earnings avoidance — skip any entry where the expiry window (entry_date, expiry_date] contains a known earnings date. Earnings dates were fetched from FMP’s historical earnings calendar endpoint for all 56 tickers, covering 2018–2024. Every ticker reported exactly 28 earnings events (28 quarterly reports across 7 years), totaling 1,568 earnings events across the universe.

This is a strict filter: if any earnings date falls between today and the option’s expiry, no spread is entered on that ticker today. Even if the earnings is 29 days away and the spread expires in 30 days, the entry is blocked.

The full experiment: 14 combinations — 7 IV rank thresholds × 2 (earnings on/off). Each was a clean independent run where the threshold was applied before the MAX_POSITIONS cap (30), so that position selection was consistent with the filter rather than post-filtering an already-capped set.

Fixed strategy mechanics throughout:

  • Universe: 56 liquid large-caps (same as Studies 11–12)
  • Structure: sell 5% OTM put, buy 10% OTM put, same expiry
  • DTE target: ~30 calendar days, minimum 20 days to expiry
  • IV proxy: HV30 × 1.20
  • Exit: 50% profit target — close when mark-to-model spread value ≤ 50% of entry credit
  • Otherwise hold to expiry, evaluate intrinsic value at expiry date
  • Max concurrent positions: 30, sorted by max loss ascending
  • Commission: $1.30/leg × 4 legs = $5.20/contract
  • Period: 2018-01-01 to 2024-12-31, 1,761 trading days

Part 1: IV Rank Threshold Sweep (No Earnings Filter)

IVR minTradesSharpeWinKurtosis20182022
0 (none)52,1332.78289.6%5.21−0.066−0.027
1048,6613.18990.0%5.43+0.426+0.206
2041,4523.18189.3%4.79+0.549+0.068
3034,1973.16088.8%4.28+1.033+0.176
4027,0312.93687.7%3.49+1.333+0.277
5021,2462.97086.9%3.04+1.716+0.500
6016,7063.09986.6%2.81+2.212+0.518

Two clean trends emerge:

Sharpe peaks at IVR≥10–30 then dips in the 40–50 range and partially recovers at 60. The dip is a trade-count effect: fewer qualifying tickers per day means higher variance in daily and monthly P&L, which widens the return distribution faster than the mean rises.

Kurtosis falls monotonically as the threshold rises — from 5.21 with no filter to 2.81 at IVR≥60. This is the fat-tail reduction at work. At IVR≥60, the distribution is close to normal. At IVR≥0, there’s meaningful left skew and a fat left tail.

Both losing years turn positive above IVR≥10. With any IV rank filter at all, 2018 (Fed tightening, Q4 selloff) and 2022 (aggressive rate hike cycle) are profitable. The mechanism: when the stock’s HV30 is elevated relative to its own history, you collect more credit, which provides more cushion before the position starts losing. In a rate-shock selloff, individual stock vol rises, which means more stocks qualify at high IV rank — and you’re collecting premium at the precise moment markets are overpaying for protection.


Part 2: Earnings Avoidance Alone

Earnings avoidance applied without any IV rank filter:

VariantTradesSharpeWinKurtosis20182022
No filter, no screen52,1332.78289.6%5.21−0.066−0.027
Earnings avoided only38,9883.36690.6%6.12+1.049+0.725

Earnings avoidance adds +0.584 Sharpe with no IV rank condition at all. Both losing years turn sharply positive: 2018 goes from −0.066 to +1.049, 2022 from −0.027 to +0.725.

Notably, kurtosis rises slightly (5.21 → 6.12). The earnings filter removes 35,369 potential entries — 68% of all possible trades in the unscreened universe. What it removes is not random. It removes entries on the large, liquid tickers (AAPL, MSFT, GOOGL, NVDA) which have the most options activity and report quarterly. These tickers also have the most mean-reverting behavior post-earnings when the event passes without a catastrophic surprise. What’s left in the filtered set is a mix of periods before and after earnings that don’t overlap with the 30-day window — often the quieter stretches that have lower vol and thinner premium. The higher kurtosis reflects this concentration in fewer, slightly less liquid periods.

The Sharpe improvement, however, dominates. A +0.584 lift from a single rule applied at entry — purely by checking a calendar — is substantial. It works because earnings events create a specific, identifiable type of risk that options are not consistently overpricing. The stock can move ±5–15% on earnings and there’s no reliable way to predict the direction. Avoiding that binary risk improves the strategy’s expected return per unit of risk.


Part 3: Full Sweep — Both Dimensions Together

VariantTradesSharpeWinKurtosis201820212022OOS EarlyOOS Late
A: No filter52,1332.78289.6%5.21−0.07+3.64−0.033.0532.567
C: IVR≥30 only34,1973.16088.8%4.28+1.03+3.76+0.183.5452.804
F: No filter + no earn38,9883.36690.6%6.12+1.05+3.18+0.733.4463.295
IVR≥10 + no earn35,6683.55490.4%5.88+1.05+3.14+0.713.6733.436
IVR≥20 + no earn30,6073.61090.0%5.35+1.31+3.58+0.633.7513.469
★ IVR≥30 + no earn25,3513.61289.5%4.83+1.80+2.82+0.793.7583.463
IVR≥40 + no earn20,1733.40288.4%3.99+1.95+0.25+0.893.4763.324
IVR≥50 + no earn15,8773.32087.5%3.43+2.21−1.21+1.053.3703.266
IVR≥60 + no earn12,5113.41487.1%3.20+2.71−2.13+1.213.6083.203

OOS Early = 2018–2020 Sharpe. OOS Late = 2021–2024 Sharpe.

The IVR≥30 Peak

IVR≥30 + earnings avoidance peaks at Sharpe 3.612 — the highest in the sweep. Moving to IVR≥20 gets within 0.002 (3.610). Moving to IVR≥10 gives 3.554. This is not a sharp cliff — the 20–30 range is broadly optimal.

More importantly: every year is positive at IVR≥30. The minimum annual Sharpe is 2021 at +2.821. That’s the year VIX averaged ~17, options were cheapest, and the bull market was strongest. Even in the least favorable regime for put selling, the strategy was solidly profitable.

The IVR≥40+ Breakdown

Above IVR≥40, the 2021 Sharpe collapses: +0.25 at IVR≥40, −1.21 at IVR≥50, −2.13 at IVR≥60.

The cause is pure trade-count concentration. In 2021, an average of 8.9 tickers per day qualify at IVR≥30. At IVR≥60, that drops to 4.6 tickers per day. With fewer than 5 simultaneous positions, individual outcomes dominate monthly returns. A single bad expiry hold at $−267 average loss can flip an entire month negative when there are only 4–5 other trades to absorb it. The aggregate Sharpe is driven negative not by the strategy failing but by insufficient diversification at high thresholds in low-vol regimes.

At IVR≥30, the minimum daily qualifying count stays above 8–9 tickers across all years. That’s enough diversification to prevent any single position from dominating a period’s returns.

Out-of-Sample Stability

Both OOS halves are near-identical for the optimal variant:

PeriodSharpeTradesWin Rate
2018–20203.75812,79690.4%
2021–20243.46312,55588.6%

The first half covers the 2018 Fed tightening, the 2019 vol recovery, and the COVID crash. The second covers the post-COVID bull market, the 2022 rate shock cycle, and the 2023–2024 recovery. Both are strongly positive and within 0.3 of each other. The strategy doesn’t rely on any single macro regime.


Part 4: The SPY Correlation Finding

SPY daily return correlation for IVR≥30 + earnings avoidance: 0.001.

The strategy has essentially zero beta to the S&P 500. This deserves attention.

The baseline (no filter) had SPY correlation 0.346. That correlation was the mechanism behind the losing years: broad selloffs hit all positions simultaneously, spreads went wrong in concert, and the strategy’s losses were correlated with the market’s losses. A strategy with 0.35 SPY correlation is not market-neutral — it’s long equity beta by another name.

Applying IV rank and earnings avoidance nearly eliminates that correlation. The reason is selection effect: the filters choose positions precisely during periods of elevated vol and away from binary events. Elevated vol periods are often choppy, mean-reverting, and less directionally correlated with the index. Avoiding earnings windows removes the specific mechanism (post-earnings gap) that produces the largest correlated drops. What remains is idiosyncratic premium capture — individual stocks’ options priced for vol that doesn’t materialize, independent of what the market does.

A strategy with Sharpe 3.612 and SPY correlation 0.001 is not capturing a risk premium that’s been available in index funds. It’s capturing something orthogonal.


Part 5: What Earnings Avoidance Is Actually Removing

The earnings filter blocks 8,846 trades in the IVR≥30 universe — 25.9% of all IVR≥30-qualifying entries. The blocked trades have an implied average P&L of $5.03/trade, which is close to zero (vs $63.05 average for the trades that pass).

This is the core finding on earnings avoidance: it’s not removing losers. It’s removing low-quality winners with high variance. The blocked earnings-window trades have:

  • Near-zero average return
  • High variance (binary outcomes: either the earnings event is benign and the trade expires fine, or there’s a gap and the loss is large)
  • Fat left tail contribution

By removing them, the mean per-trade P&L of the remaining trades rises ($63.05 vs implied $5.03 on blocked), and the overall variance decreases because the fat-tail contributors (earnings gaps) are gone. Sharpe improves because both the numerator rises and the denominator shrinks.

The practical implication: there is no edge in selling puts through earnings. These positions are essentially a coin flip with a fat left tail. The 50% profit target doesn’t save them because the binary event happens overnight and the spread jumps to near-maximum loss before you can exit. Systematically avoiding them is the rational choice.


Part 6: The Self-Timing Mechanism

One of the most valuable properties of an IV rank filter is that it self-adjusts position size without any active intervention.

Average qualifying tickers per day by year (IVR≥30):

YearAvg tickers/dayAnnual Sharpe
201828.4+1.797
201922.4+11.277
202015.6+3.181
20218.9+2.821
202228.9+0.787
202312.4+8.270
202421.5+8.715

The strategy runs at near-full capacity (28–29 tickers/day) in 2018 and 2022 — both rate-shock selloff years when individual stocks had elevated HV30. This is the counterintuitive property of vol-selling with an IV rank gate: you put on more trades when the market is most fearful, because that’s when options are most expensive relative to realized vol.

In 2021, the calmest year, only 8.9 tickers per day qualify. Capital is naturally deployed less aggressively in the environment where put selling has the worst expected return (low premium, strong trend, low reversion pressure). The strategy reduces its own exposure without any macro overlay or regime gate.

This is not a designed feature — it’s an emergent property of requiring that each stock’s vol be elevated relative to its own history before taking on short-vol exposure.


IVR≥30 + earnings avoidance:

MetricValue
Sharpe (2018–2024)3.612
Win rate89.5%
Mean return per trade7.95% on max risk
Profit-target exits89.1%
Avg profit-target hold~14 days
Avg expiry hold~34 days
Expiry exits win rate3.4%
Expiry exit avg loss−$267
Kurtosis4.83
Skew−2.31
SPY correlation0.001
OOS 2018–2020 Sharpe3.758
OOS 2021–2024 Sharpe3.463
Worst year (2022)+0.787
Best year (2019)+11.277

Every calendar year from 2018 to 2024 is profitable. The worst year produced a Sharpe above 0.75. The strategy has near-zero correlation with the S&P 500.


Implementation Details

Step 1 — Universe: Confine to liquid large-caps where options bid-ask is $0.01–0.05 per contract. Our 56-ticker list provides adequate diversification even in low-vol regimes (minimum 8.9 qualifying tickers/day).

Step 2 — Daily screen: Each morning, for each ticker:

  • Compute HV30 (30-day realized vol from daily log returns)
  • Compute IV rank from 252-day rolling window of HV30
  • Skip if IV rank < 30
  • Check if any earnings date falls in the window (today, next monthly expiry]. Skip if yes.
  • Compute spread value using BS put pricing: IV = HV30 × 1.20

Step 3 — Entry: If spread credit ≥ $0.10/share, add to candidate list. Sort candidates by max loss ascending (smallest risk first). Enter up to 30 concurrent positions.

Step 4 — Daily MTM: Each day, check mark-to-model value of each open spread. Close immediately when (entry_credit − current_value) / entry_credit ≥ 0.50. Don’t wait for end of day.

Step 5 — Expiry: Any position not closed by profit target is evaluated at intrinsic value on expiry date. Payout = entry_credit − max(K_short − S_T, 0) + max(K_long − S_T, 0).

Capital requirement: At $385 average max loss per contract × 30 positions = ~$11,550 margin committed at maximum concurrency. In practice, the average number of simultaneous positions is 15–22 tickers/day depending on the year, so typical capital at risk is $5,775–$8,470.


Known Limitations

Survivorship bias: The universe is today’s large-cap survivors. Companies removed from the S&P 500 during 2018–2024 due to bankruptcy, merger, or downgrade are excluded. Estimated win-rate inflation: 3–8%.

IV proxy: We use HV30 × 1.20 as IV. Real markets trade options at a vol surface — puts at 5% OTM carry a skew premium that makes them more expensive than the flat-IV model suggests. This means our entry credits are likely understated, and real-world P&L would be modestly better than modeled.

Earnings dates: FMP earnings calendar may miss some dates or have slight date discrepancies (some companies report after market close, showing a different “date” depending on the source). The filter is applied strictly; in practice, a 1-day buffer around earnings dates would be prudent.

Execution: The model assumes fills at mid-price. On a 5-contract spread with $0.01 bid-ask, the real entry credit is $0.005/share lower than modeled. On 30 concurrent spreads this is immaterial, but on larger positions it accumulates.

2022 context: Even with both filters, 2022 Sharpe is +0.787 — the weakest year. The 2022 rate shock was unusually severe: 425bps of hikes in 12 months with no reversal. The strategy survived it because elevated HV30 meant high IV rank (many qualifying entries) and more credit collected per spread. But it was the hardest environment for the strategy by a significant margin.


What the Study Series Has Found

StudyConfigurationSharpe
11Value screen (MOS + EPS growth)1.980
11No filter baseline2.782
1250-day MA filter2.658
12IV rank ≥ 303.160
13Earnings avoidance only3.366
13IV rank ≥ 30 + earnings avoidance3.612

The progression is clear. Fundamental analysis does not add alpha to a short-options strategy. The mechanism that adds alpha is selling expensive volatility (IV rank) and avoiding unpriced binary risk (earnings). Each filter adds independent value and they compound.

The fundamental insight is simple: put selling makes money when options are overpriced relative to what the stock actually does. The IV rank filter ensures you’re selling when options are expensive. The earnings filter removes the one event type where options pricing is justified — because nobody knows what earnings will be.


Methodology: 2018–2024, 56 liquid large-cap tickers. Black-Scholes put pricing via put-call parity, HV30 × 1.20 IV proxy. Bull put spread: sell 5% OTM put, buy 10% OTM put, ~30-DTE monthly expiry, 50% profit target. Max 30 concurrent positions sorted by max loss ascending. Commission $5.20/contract (4 legs × $1.30). IV rank: rolling 252-day percentile of HV30. Earnings dates: FMP historical earnings calendar, 28 events per ticker × 56 tickers = 1,568 events. Full sweep: 14 combinations (7 IVR thresholds × earnings on/off), each run independently with filter applied before position cap. SPY correlation computed on daily mean per-trade returns vs SPY daily log returns. Survivorship bias: unresolved, documented.