Methodology
What a check actually does.
You bring a name. LevelCheck runs four sequential checks and tells you which check stopped it — or hands you the whole structure when nothing did.
What it checks
History
Whether there are enough daily bars to judge the name at all.
Direction
Whether the stock is actually trending, up or down.
Tradeable
Whether there is a strike you can get into and out of.
Price
Whether any strike is priced better than the target justifies.
They run in that order and the first one that fails ends the check, so a stopped result names exactly one check and the reason is never a blend.
Why those four
- History. With too little price history there is nothing to measure a trend or a stop against, so every figure downstream would be invented.
- Direction. A long option pays for movement in one direction. Sideways is the case where the premium is spent on nothing.
- Tradeable. A wide spread or a thin strike is a cost you pay twice, on the way in and again on the way out, whatever the stock does.
- Price. A real direction on a liquid chain can still be a bad buy if the option already costs more than the move it is paid for.
Technical methodology
The four checks, in order
Every number below is the engine’s own constant. When one changes, this page changes in the same commit.
- 01
History
At least 60 daily bars. Fewer and the check stops: there is not enough price history to say anything about trend or volatility.
Internal identifier: DATA · stop code: INSUFFICIENT_HISTORY
- 02
Direction
The 21-day exponential moving average sits at least 0.1% above the 50-day, and the last close is above the 21-day: that is up. Mirror it for down. Anything else is sideways, and sideways stops the check. A long option needs a direction to pay for its premium.
Internal identifier: TREND · stop code: NO_TREND
- 03
Tradeable
The expiration wanted is at least 30 days out, padded 21 days past the target's expected travel time; the nearest listed one at or past that is used. Those are bounds on what is WANTED, not on what is served: when no listed expiration reaches it, the furthest available is served carrying a short-expiration warning, and when the nearest eligible one sits past 120 days it is served anyway. Every strike on it is tested for liquidity first: a mid of at least $0.05, open interest of at least 100 and a bid-ask spread no wider than 10% of the mid. Then the survivors must fall in the 0.20 to 0.75 delta band. A chain with nothing liquid, or nothing in the band, stops on that chain; when it is a weekly, the standard monthly at or beyond it (third Friday, within the 120-day ceiling) is tested once, and served if it passes. A name that stops on both is stopped. The nearest expiration is served whenever it is liquid; the monthly is never tried for a chain that was liquid but had no positive expected value.
Internal identifier: CHAIN · stop code: ILLIQUID_CHAIN / NO_DELTA_BAND
- 04
Price
For every strike still standing, the option is priced at the price target and blended against what it would simply be worth at spot — its intrinsic value there, with no time value — by how much support or resistance stands in the way, and the mid is subtracted. If no strike comes out positive, the check stops. If one does, the strike with the highest expected value is the plan.
Internal identifier: EV · stop code: NO_POSITIVE_EV
Two more states are not checks but stop a result all the same: a name with no listed options (NO_OPTIONS), and a quote still inside the data embargo (DATA_WARMING). Both say so in plain words.
The expected-value model
The price target. When an analyst consensus exists, it is scaled to the chosen expiration: spot plus the consensus move, times the days to expiration over 365. Without a consensus the target is a two-ATR projection in the trend’s direction. The expiration itself is chosen from how many average daily ranges (ATR, 14 days) the move needs.
The formula. For a strike K with spot S, target M and a support-or-resistance factor sr between 0 and 1:
EV = sr × BlackScholes(M, K) + (1 − sr) × intrinsic(S, K) − mid
Read it as: with probability sr the stock reaches the target and the option is worth its model price there; otherwise the level holds, the stock stalls at spot, and the option is worth only what it is worth right now at expiration. The mid is what you pay. A strike with EV above zero is a candidate; none above zero stops the check. This replaced a version that valued a blocked move at zero, which priced some strikes below the cash already in them.
Support and resistance. Levels come from pivots, prior period highs and lows, and volume nodes on the daily bars, merged into one level whenever they sit within 1% of spot of each other — one window the width of the whole ladder, not 1% of each price. A level between spot and the target lowers sr; the more of them, and the stronger, the lower.
Probability. The probability of finishing in the money is N(d2) from Black-Scholes at the quote’s own implied volatility, not the option’s delta. Delta is the hedge ratio and overstates a call’s odds by about five points on this universe; we measured that on the 140 call quotes in the frozen 09-02-2026 census before switching.
The score. A plan also carries a 0 to 100 quality score: 50 base, 20 for trend alignment, up to 30 on a probability ramp, minus 5 for each warning except RISK_BUDGET_TOO_SMALL, which stopped costing points at scale v7 on 09-15-2026. It decides nothing — no result changes because of it; the signed-in board ranks by it and prints it with its scale. It exists so a locked plan records what the evidence looked like that day, under a version number, and is not comparable across versions.
Every warning the score charges is a fact about the name, the data or the quote. One used not to be: if a single contract would risk more than the budget in the request at the 50% premium stop, the plan carries a RISK_BUDGET_TOO_SMALL warning, and until 09-15-2026 that cost 5 points. Because the nightly census that wrote those scores runs at a fixed $500 budget, and a check here started at $500 until 09-24-2026 (it now starts at $25,000 until you change it), a name whose option costs more than about $10 a share was marked down for its price rather than its evidence. Scale v7 stops charging for it. The warning still fires and still prints on the card, and one contract that exceeds your budget is still blocked - only the score stopped encoding a budget that is not yours. Scores from v6 and v7 are not comparable for any plan that carried that warning.
The exit plan
Written before you enter, the same for every plan, and what the journal grades you against.
Underlying stop
1.0 ATR from the entry trigger, against the trade. The daily ATR is 14 periods.
Premium stop
Close if the option loses 50% of what you paid.
Profit target
Close, or roll by your own rule, at +100% on the premium.
Time stop
Close with 21 days to expiration left, whatever the price. Theta is not your friend past that.
Sizing: contracts are the floor of your budget over the dollar risk per contract at the 50% premium stop, which is the premium times 100 times 0.5 — not the premium itself. If that is zero, the card says zero and lets you change the budget without re-running.
The plan also carries an underlying stop, and the option is often worth more there than this rule assumes. Sizing deliberately does not use that, because a gap can pass through a price level and invalidate any value estimated there, while the 50% premium stop is a fixed number that does not depend on where a gap lands.
The data, and how old it is
Three different things, kept apart on every page. The hold:quotes and chains come from a brokerage data feed, and LevelCheck holds every quote back 15 minutes before using it, so nothing on this site is live. The quote time: each result says when the oldest quote behind it was taken (the check’s time minus that quote’s age, which the engine reports rounded up to the minute). The quote’s age: how long ago that was, counted from now wherever both times are known. A result whose quote is older than 60 minutes is labelled stale and muted, carries a stale-data warning, and cannot be locked into the journal, because by then the entry, the stop and the levels are fiction. Daily bars and the analyst consensus come from a second vendor and are refreshed each session day.
All 685 names we cover are checked after each session close and every result is kept, stopped ones included. The shape of each run is published in aggregate — how many cleared and which check stopped the rest — and the names themselves are not.
What it will not do
- Place orders. Locking a plan writes it to your journal. Nothing here touches your broker except to read fills.
- Personalize. The engine reads no balances, holdings or goals. The same inputs give every visitor the same answer at the same minute.
- Show a backtest. Ours reported an edge on price series built to contain none. It was removed and nothing replaced it.
- Trade spreads. Long calls and long puts only. A spread leg in your broker history is left unscored rather than scored wrong.
Run a check to see all of this on a real name.