HomeLEAPS Opportunity Finder › Methodology

LEAPS Opportunity Finder — Methodology

This page documents exactly how the LEAPS Opportunity Finder scores contracts, weights each factor, filters for eligibility, incorporates the market regime, sizes positions, and validates itself via the paper trader. Nothing is hidden. Every weight is documented and every version bump is logged.

Short answer. The LEAPS Opportunity Finder ranks long-dated call and put options across a 200–300-name universe using a weighted composite of four sub-scores: technical (30%), contract quality (35%), fundamentals (10%), and risk (25%). The regime layer (SPY/QQQ/IWM trend + VIX state) adjusts the recommended side (call vs put) but never overrides the score. Every candidate a user opens via the Paper button is recorded with its full scoring_version tag; nightly grading marks positions to market and buckets closed trades into deciles so we can measure whether higher scores actually predicted higher realized P&L. That validation loop is public at /leaps/paper/ — no data is hidden.

Contents

  1. 1. What LEAPS are (and why they need their own scanner)
  2. 2. Universe & contract eligibility
  3. 3. The four sub-scores
  4. 4. Composite weights (call vs put)
  5. 5. Regime layer
  6. 6. Position sizing
  7. 7. Scenario grid (spot × time)
  8. 8. Walk-forward validation via paper trader
  9. 9. Watchlist & alerts (local-only)
  10. 10. Data sources & refresh cadence
  11. 11. Known limitations & caveats
  12. 12. Scoring-version history

1. What LEAPS are (and why they need their own scanner)

A LEAPS option (Long-term Equity AnticiPation Security) is a listed equity option with an expiration date more than one year out. Because they're deep-time contracts, the trade thesis is fundamentally different from short-dated options: theta bleed is slow, gamma is modest, delta is the dominant Greek, and the outcome is driven far more by the underlying's directional path over months than by short-term implied-volatility mean reversion.

Standard option screeners (like our Custom Screener) optimize for premium collection or spread structure. They rarely surface LEAPS because those contracts fail the usual short-DTE liquidity, delta, and yield filters. The LEAPS Opportunity Finder is purpose-built for the opposite problem: find the underlyings whose 6–24 month technical + fundamental setup best justifies a directional bet, and pick the contract on that name that gives you the cleanest leverage with acceptable liquidity.

2. Universe & contract eligibility

2.1 Universe

The scanner supports six universes and custom ticker lists:

2.2 Contract eligibility filter

For each ticker, we pull the full options chain and keep only contracts that pass:

3. The four sub-scores

Every eligible contract gets four sub-scores on a 0–100 scale. All formulas are deterministic and version-locked.

3.1 Technical score (weight varies by side)

Measures the underlying's directional setup. Components:

Directionality flips for puts: bearish trend, negative momentum, weak relative strength, proximity to 52-week low all score higher for puts.

3.2 Contract quality score

Measures how well the specific contract expresses the thesis. Components:

3.3 Fundamental score

Lightweight fundamentals from Polygon reference data + basic screens. Not a substitute for a full fundamental model — this is a sanity check.

Honest caveat. Fundamentals get only 10% of the composite because our data feed doesn't give us cash-flow statements, guidance, or analyst estimates. Users who want a fundamentals-first LEAPS screen should combine this tool with an outside fundamental filter.

3.4 Risk score

Penalizes contracts likely to blow up.

4. Composite weights (call vs put)

The overall score is a weighted linear combination of the four sub-scores, with different weights for calls vs puts:

Sub-score Call weight Put weight
Technical30%35%
Contract quality35%30%
Fundamental10%5%
Risk25%30%
Total100%100%

Why puts weight risk higher and fundamentals lower? A short-thesis LEAPS put is inherently more asymmetric: you're leaning into "this company/tape gets worse from here." Bad fundamentals are what you want for a put thesis, so scoring them positively muddies the signal — better to trust the technical breakdown + volatility context. Risk weight goes up because put losses can be sudden (short squeezes, buyouts, forced covering).

Weights are hand-set, not fit. These weights come from Van-Tharp-style expert priors, not backtest fitting. That means they'll be wrong. The paper-trader validation loop (§8) exists specifically to measure how wrong, on which sub-scores, and to guide the next re-weight.

5. Regime layer

Every scan runs the market regime calculator first. Inputs:

Output: a bull score from 0–100 plus a categorical state (bull, neutral, bear) and vol state (low, normal, high).

Alignment for each candidate

The regime chip is displayed on every scanner row so you can see at a glance whether a candidate is fighting the tape.

6. Position sizing

The candidate detail page includes a position-sizing calculator with three inputs:

Output: recommended number of contracts to buy, with warnings if the position would exceed liquidity constraints (more than 5% of open interest) or if the total capital deployed would exceed 20% of equity even at 2% risk (in which case the position is too concentrated).

7. Scenario grid (spot × time)

Every candidate detail page renders a 9-spot × 5-time-step BSM scenario matrix:

Three sliders let you shock the scenario:

Under each scenario, the P&L is color-coded (green = profit, red = loss) so you can eyeball breakeven and drawdown paths.

8. Walk-forward validation via paper trader

The scanner ranks contracts. But the honest question is: do higher-ranked contracts actually deliver better realized P&L?

8.1 How trades get opened

Every time a user clicks the Paper button on a scanner row (or from a detail page), the full contract + all four sub-scores + the regime state + the current scoring_version tag are persisted to a Cloudflare KV namespace. Users don't opt-in to sharing data — the paper trades are anonymous by design (only the position itself, not who opened it).

8.2 Nightly grading

A Workers cron job runs each night:

  1. Iterate every open paper trade.
  2. Fetch the current option mid price from Polygon.
  3. Compute mark-to-market P&L per contract and % change from entry.
  4. Close trades that are past expiration or that have been open ≥ 365 days.
  5. Assign a grade: big-win (>+50%), win (+10 to +50%), flat (−10 to +10%), loss (−10 to −50%), big-loss (<−50%).

8.3 Score-decile analysis

On /leaps/paper/, closed paper trades are bucketed into deciles by their overall opportunity score at entry. The page shows:

8.4 The re-weighting loop

Once enough trades have graded out (target: 30+ per decile, so ~300 closed trades total for a scoring version), we can:

  1. Regress realized P&L on each sub-score to identify which factors carry signal and which are noise.
  2. Re-weight the composite (e.g., if technical shows IC 0.35 and fundamental shows IC 0.02, shift weight from fundamental to technical).
  3. Bump the scoring_version tag. The next generation of paper trades will be graded against the new weights.

This is walk-forward validation, not in-sample fitting. Each version's trades are graded only against outcomes that came after the version was published. No look-ahead bias.

Fair warning. With fewer than ~50 settled trades total, decile buckets are dominated by noise. The chart won't stabilize until the paper trader has accumulated real volume — which requires users to actually click the Paper button on candidates they find promising. Until then, treat the composite score as an educated prior, not a validated signal.

9. Watchlist & alerts (local-only)

The Watchlist page lets users pin tickers and specific contracts, plus set rule-based alerts. All state lives in browser localStorage: no login, no server-side user data, no cross-device sync (users can export/import JSON to move between machines).

Three alert rule types:

Alerts are evaluated on page load and any time the user clicks "Check now." Rules have a 4-hour rate limit per rule to prevent duplicate firings.

10. Data sources & refresh cadence

The Worker caches scan results in Cloudflare edge cache for 30 seconds, which is why hitting refresh doesn't burn API quota. Individual candidate detail pages fetch fresh option data on each visit.

Data license status. As of this writing, the site runs on Polygon's Individual Use tier. Any commercial or subscription-tier launch is blocked pending business-use licensing.

Current on-demand scan cap: 5 tickers. Polygon's per-minute rate limit on the current data plan makes it infeasible to scan the full 200–300 ticker universes within a single request. The scanner ranks the first 5 names of your chosen universe. A nightly warm-cache (Workers Cron) is the planned fix — it will pre-compute the full universe and store rankings in KV, so users get instant results across all names regardless of Polygon rate limit. Until then, use ?universe=custom&t=NVDA&t=AAPL&t=SPY to scan up to 5 tickers of your choosing.

11. Known limitations & caveats

12. Scoring-version history

leaps-scoring-v1.0.0
Initial launch — 2026-07-15. Weights hand-set from Van-Tharp priors (30/35/10/25 for calls, 35/30/5/30 for puts). Paper trader begins recording. No re-weight yet.

Version log will be updated as the paper-trader validation loop produces enough data to justify re-weighting. Users can subscribe to the Research page for public write-ups of any material change.

Questions or corrections? The full source code for the scoring engine lives at github.com/VYZE-INC/optiontrading under worker/src/leaps-*.js. Weight files, universe lists, and grading logic are all visible and diffable. If you find a bug in the math, open an issue.