WheelHouse runs a scan on a fixed schedule and looks at options contracts on a watchlist of stocks. For each one it considers two kinds of trade: a cash secured put, where you agree to buy a stock at a set price and get paid for the promise, and a covered call, where you already own the stock and get paid for agreeing to sell it at a set price.
Every candidate is scored from 0 to 100 on fifteen signals: things like how much premium the contract pays relative to the strike price, how many days remain until expiry, and how liquid the contract is. The score is a summary of how good the setup looks at that moment.
The important part is the order of events. The score is published before anyone knows how the trade turns out. Nothing is scored after the fact, and no past score is ever rewritten. That is the whole point: a track record only means something if the predictions were recorded first.
Each signal adds or subtracts points. Positive signals describe an attractive setup; negative ones are penalties that push a candidate down or out.
| Signal | What it measures | Points | |
|---|---|---|---|
| 1 | Premium % of strike | How much the contract pays relative to the strike price. The single heaviest signal. | up to 40 |
| 2 | Days to expiry | How long until the contract expires. Preferred windows differ for puts and calls. | up to 30 |
| 3 | Capital efficiency | Lower strike prices tie up less collateral for the same structure. | up to 17 |
| 4 | IV rank | How expensive options on this stock are versus their own recent history. | up to 10 |
| 5 | Volume | How actively the contract traded. Thin contracts are harder to exit. | up to 5 |
| 6 | Delta alignment | Whether the contract sits in the intended risk band. | up to 3 |
| 7 | Support levels | Whether the strike sits near a price the stock has held before. | up to +3 |
| 8 | Proven ticker | A bonus for tickers with an established record in this system. | up to +8 |
| 9 | Market conditions | A broad-market adjustment, applied differently to puts and calls. | −10 to +10 |
| 10 | Ticker intelligence | An adjustment from accumulated per-ticker history. | −10 to +10 |
| 11 | Bid/ask spread | Tight spreads are rewarded; wide ones are penalised. | −8 to +3 |
| 12 | Open interest | How many contracts are outstanding. A liquidity check. | −8 to +3 |
| 13 | Covered call momentum | Under review. Currently a penalty: the score is reduced when the stock is in a strong uptrend. The correction below explains why that is the wrong direction for a covered call, and new covered calls have been paused since 31 August 2026 while the scoring is reworked. | 0 to −20 |
| 14 | Earnings proximity | A penalty near earnings, and a hard exclusion if earnings fall inside the contract's life. See section 5. | 0 to −15 |
| 15 | Open position penalty | A penalty only. Discourages stacking more of a ticker already held. | 0 to −25 |
If every positive signal fired at once the total would be 140, not 100. The engine takes the sum and clamps it into the 0–100 range, so a score of 100 means the total hit the cap, not that every signal was perfect. Several different combinations of signals reach 100, and the score alone does not tell you which one you are looking at.
Scoring a setup and acting on it are separate steps. Every setup that scores 90 or above is published on the daily board, but only some are added to the tracked portfolio. The rest are shown with the reason they were held back, because a system that only publishes what it acted on is not a record. It is a highlight reel.
Tracked means the setup was added to the paper portfolio and its outcome will be recorded when it closes or expires. Declined means the engine flagged it but a portfolio rule held it back. These are the reasons:
| Reason | What it means |
|---|---|
| Ranking | The setup scored 90+ but other setups of the same type ranked higher that day. Only the top of each list is tracked. |
| Diversification cap | The portfolio already holds the maximum number of positions in that ticker for the rolling seven-day window. |
| Too many expiries | Two other expiry dates for the same ticker were already added in this scan. Three per ticker per scan is the ceiling. |
| Duplicate | A matching position (same ticker, strike and expiry) already exists in the portfolio. |
| Blacklisted | The ticker is excluded from the portfolio on the basis of its own past results. The engine still surfaces its setups for visibility. |
| Pricing anomaly | The quoted premium and the calculated premium disagreed, so the setup was not tracked rather than tracked on a number that could not be trusted. |
A seventh outcome, below_score, exists in the engine for setups under the tracking threshold. It never appears on the board, because the board only shows setups scoring 90 and above.
These are the things a reader would otherwise have to reverse-engineer from the data. They are stated here because the daily board does not state them.
The tracking threshold has not always been 90. It was raised to 90 on 14 April 2026. Trades recommended before that date ran under a looser rule, and they are excluded from the published track-record figures. Nothing scoring below 90 has been logged since 14 April.
This matters more than it sounds. The pre-14-April trades are a launch-period batch scored under different rules, so any figure that pooled them with current ones would be describing two different engines at once. The published figures describe the engine as it runs today.
Where the site shows a history line for a single ticker (a win rate and a running total), that figure combines cash secured puts and covered calls into one number. They are different trades with different risks, and the per-ticker line does not separate them. Read it as a summary of everything done on that ticker, not as a verdict on either strategy.
A defect in the engine, fixed on 8 June 2026, meant that for earlier trades the premium used to score a setup and the premium recorded when the trade opened were taken from two different prices. The recorded outcome is unaffected, because it was always calculated from the same price the trade used. What changed is the basis of the score itself.
Affected trades are flagged rather than deleted or rescored: 32 as quote_basis_severe (the two prices differed by more than 5%) and 49 as quote_basis_moderate (3–5%). Published scores are never rewritten, because a score that was published before the outcome was known is a matter of record even when the method behind it later improves.
The flag is currently applied when building the signal-performance dataset. It is not applied to the headline track-record figures, which include these trades.
The score describes an options setup, not a company. The engine reads prices, volatility, liquidity and dates. It does not read financial statements, revenue, debt, margins or valuation, and it has no opinion on whether a business is good or a stock is cheap.
A score of 100 means the setup is attractive and nothing in the engine's checks is flagging. It is not a recommendation to own the company. If you would not want to hold a stock, a high score on its options does not change that: with a cash secured put, being assigned means buying the shares.
Two specific limits worth naming:
Earnings are refused outright. If a company reports earnings before the contract expires, the setup is excluded entirely: not penalised, not scored lower, but removed from consideration. A separate penalty applies when earnings fall shortly after expiry. The engine will not take a position across an earnings announcement.
There is no view on direction. The engine does not forecast whether a stock will rise or fall. It assesses whether an options setup is well-priced and well-structured, which is a different question and a narrower one.
All results published on this site are simulated paper trades, not real money.
The fifteen signals and their weights were chosen by judgment, not fitted to data. That is deliberate. An engine tuned on its own history will look good on that history and prove nothing. But it means the weights are a starting hypothesis, and the point of publishing every score before the outcome is to accumulate the evidence that tests them.
The rule is that weights change on evidence, not on hunches. A change requires a stated reason, a measurable prediction of what it should do, and enough closed trades for the measurement to mean anything. Any change is recorded in the corrections section below, with the date and the reasoning. No past score is rewritten to match.
A first review of signal performance was scheduled at 300 closed trades and has begun. What it finds will be published here whether or not it supports the current weights.
Corrections to previously published figures are recorded here, with the date and what changed.
Corrected 5 September 2026.
A covered call is two positions held together: 100 shares of a stock, and a call option sold against those shares. Until now this site recorded only the option half.
That produces a specific error. When the option expired worthless or was bought back cheaply, the trade was recorded as a gain, even in cases where the shares had fallen by more than the premium collected. The position lost money and the record said it made money.
The shares behind a covered call are assumed bought at market when the call is written. They are not shares acquired by assignment from a cash secured put, and the engine does not check whether any shares are held. Every covered call on this site is scored as a standalone buy-write.
Cash secured puts are not affected. A cash secured put has no share position, so the option result is the whole result. Those figures are unchanged.
Measured on closed trades scoring 90 or above, as of 5 September 2026:
| As published | Corrected | |
|---|---|---|
| All closed trades (356) | +$118,262 · 83.7% | +$103,951 · 74.4% |
| Cash secured puts (254) | +$110,272 · 87.4% | Unchanged |
| Covered calls (102) | +$7,990 · 74.5% | -$6,321 · 42.2% |
The entire difference is covered calls. On the corrected basis that book is a loss rather than a profit, and fewer than half of those trades made money.
The correction applies to every covered call in the record, not only those at 90 and above. Trades scoring below 90 also move, and they move upward: those bands were recorded as losses and are profits on the corrected basis.
Those bands are not a fair comparison and should not be read as one. Every trade below 90 was opened between 2 and 14 April 2026, before the scoring floor was raised, so they are a two week window rather than a track record. They also hold a much higher share of covered calls than the 90+ population, which is why the accounting change moves them further. The figures above are scoped to 90 and above because that is what the engine recommends today.
These figures are a snapshot taken on the date above and are not updated here. Current totals are on the receipts page. The correction is being applied across the site one surface at a time, so some pages may still show the old basis for a short period.
On 30 August 2026 new covered calls stopped being added to the tracked portfolio. They are still scored and still appear on the daily board, tagged as paused.
The reason comes from the same analysis. The engine scores a covered call on how well the sold call is likely to perform, and a sold call performs best when the stock goes sideways or falls. So a higher score reliably selected for a weaker stock, and the shares are most of what a covered call is worth. The engine scored the option side heavily, and where it did consider the stock it counted a rising price against the trade, which is the direction a covered call needs. So it was good at one half of a two part position and was working against itself on the other. Cash secured puts are unaffected and continue as normal.
Corrected 11 September 2026.
The header on the receipts page described this as a wheel strategy scoring engine. That is true of the cash secured puts. It is not true of the covered calls, and half the engine's output is covered calls.
In a wheel, you sell a cash secured put, get assigned 100 shares, and write a covered call against those shares. The engine does not do that. It scores covered calls as standalone buy-writes: buy 100 shares at market, write a call against them. It does not check whether any shares are held, and nothing links a covered call to a put that came before it.
Zero of the 210 covered calls in the tracked book follow an assignment. Twenty six were recommended on a ticker that had been assigned earlier, but one assignment on 15 May 2026 sits behind six separate covered calls across eight weeks, and 100 shares can back only one call at a time. Those are ticker coincidences on a 37 name watchlist, not sequences.
The assumption is visible in the stored data. The recorded collateral for a covered call is the entry share price times 100 on all 203 closed ones, which is the cost of buying the shares at market. If they had come from an assignment the basis would be the put's strike.
No figure changes. The results were always the results of buy-writes. What was wrong was the description above them.
A second, smaller correction in the same pass: the covered call momentum signal was listed above as a penalty of 0 to 15 points. The maximum is 20. The tiered penalty reaches 15, and a further 5 is subtracted when the strike sits less than 3 percent above the share price on a rising stock. The table now reads 0 to 20. The wrong number did not start here. It came from a comment in the scoring code that also read 0 to 15, and this page copied it. That comment has been corrected too, so the fix covers the source and not only the page.
Section 6 of this page says that what the signal review finds will be published whether or not it supports the current weights. This is the first thing it found.