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.
When a cash secured put finishes below its strike it is assigned, and 100 shares are bought at the strike price. This site records the premium as kept in full and counts the trade as a win. It does not record the shares.
That is the wrong result. The premium is genuinely kept, but the position becomes 100 shares bought above the market price, and the share loss is usually larger than the premium. A trade that lost money is recorded as a full win.
17 of the 327 closed cash secured puts scoring 90 or above carry this, about 5.2 percent. Those 327 are the puts inside the published track-record figures, and they are the population the receipts page points at. Across all 440 closed puts at every score the count is the same 17, because every affected put scores 90 or above. They closed between 17 April and 16 October 2026. Measured against the closing price on the day of assignment, 14 of the 17 were real losses. The largest is a put recorded as a gain of $1,190 that was a loss of about $1,112. Counts and the table below are as of 17 October 2026, and they grow with each new assignment. The receipts page counts them live.
Covered call assignments are not affected. Those have been recorded on both legs since 5 September 2026, and the three in the book are correct as published.
Both populations, so the summary on the receipts page resolves to a superset of itself rather than to a different number:
| As published | Assignment corrected | |
|---|---|---|
| Win rate, the 327 scoring 90 or above (receipts) | 82.3% | 78.0% |
| Win rate, all 440 closed puts | 83.6% | 80.5% |
| Mean return on collateral, the 327 (receipts) | 0.0072 | 0.0026 |
| Mean return on collateral, all 440 | 0.0079 | 0.0046 |
The 327 row is the one the receipts strip summarises, because those are the trades inside the figures on that page. It is also the less flattering of the two, and that is the reason to lead with it.
Read the second column as a bound, not as a corrected figure. It assumes the shares were sold at the closing price on the day of assignment, and the record does not say what actually happened to them. Shares held and recovered would make the loss smaller. Shares that fell further would make it larger.
There is a second reason it is only a bound. It measures the assignments that happened, and those are the milder cases. A put that falls a long way below its strike triples in price and is closed at the stop loss weeks before expiry, which is recorded correctly. Only a put that drifts slightly below its strike survives to assignment. So this table does not measure what assignment costs this strategy. It measures what these 17 cost.
Seventeen rows in 327 is a small share of the book. The figures above move by about four points, while the record of those 17 individual trades is flatly wrong. Both are true and neither should be read without the other.
This is not fixed and is not scheduled. A correct record needs the engine to track share positions, which it does not do at all today, and whether it should is an open product decision about what this engine is for. Until that is settled, every figure on this site includes these trades on the published basis. When it is settled this section will say what changed.
Since 31 August 2026 no new covered call has been added to the tracked portfolio. They are still scored, still ranked, and still published on the daily board, marked as paused. The reason is in section 7, under What changed because of it.
Two things stopped, and they stopped on different dates. New entries stopped on 31 August 2026. Outcomes ran on through September: the covered calls entered before that date kept closing, and the last two closed on 18 September 2026, both by assignment. All 210 covered calls in the tracked book are now closed, so the covered call figures are final and will not move again unless the pause is lifted. The trade log at the bottom of the receipts page, filtered to CC, shows this.
Outcomes for the paused picks are still being simulated and recorded, but not in the tracked book, so they are not in the published figures. Measured, but not in the tracked record. Covered calls are not being dropped: they stay in the engine and on the board, and the tracked record resumes when the scoring rework ships, though that work does not have a date yet. Cash secured puts are unaffected and continue as normal.
Those two final assignments are recorded correctly. A covered call assignment has been booked on both legs since 5 September 2026, which is the difference between it and the cash secured put assignments described above.
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 by this correction. A cash secured put has no share position while the option is open, so the option result is the whole result, and these figures are unchanged here. There is one exception, and it is a separate issue that is still open: a put that is assigned does acquire shares, and those are not recorded. See Assigned puts are recorded at the option premium only in the disclosures above.
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 by this correction |
| Covered calls (102) | +$7,990 · 74.5% | -$6,321 · 42.2% |
The cash secured put row is unchanged by this correction, which was about covered calls. That is not a statement that those figures are correct. A separate and still open issue affects 14 of them: see Assigned puts are recorded at the option premium only. The 254 count and both figures are a snapshot of closed puts scoring 90 or above with a close date on or before 5 September 2026, the date above, and they are not refreshed here.
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 31 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.