Methodology Notes
Edge cases, data-quality decisions, and how the engine behaves under unusual conditions. This is the addendum to Methodology for readers who want the deeper picture. We still don't publish exact parameter values, but we'll be specific about how the engine handles the awkward stuff.
Why we don't trade weekly options
Weekly options — contracts that expire in seven days or less — look attractive on paper. The annualized premium yield can appear higher because you're collecting premium more frequently. In practice, three things make them a bad fit for our product.
First, the bid-ask spread on most weekly options is wider relative to the premium collected, eroding the actual yield once you account for execution. A premium that looks like $0.50 on the screen is often $0.40 by the time you actually sell it.
Second, weeklies require more attention. The whole product is designed around a weekly Friday rhythm — read your analysis, place the trade, move on. A position with a weekly call on it is a position you have to think about every Friday morning, every Friday afternoon when the call expires or doesn't, and every Monday when you decide what to do next. That's not the product we're building.
Third, the premium-per-day on weeklies is often lower than the premium-per-day on monthly options once you account for the assignment-risk profile. The math doesn't consistently favor weeklies for our framework, even though it sometimes looks like it should at first glance.
When option chains are thin or illiquid
Some stocks — typically smaller-cap names or stocks with low options volume — have option chains where the bid-ask spread is wide, open interest is low, or both. The engine has rules to handle this:
- If the bid-ask spread on the strike we'd otherwise pick is too wide as a percentage of the mid price, we widen the search to nearby strikes and expirations to find a more liquid contract — even if it's not the perfect match for the assignment probability we're targeting.
- If no contract within a reasonable window has acceptable liquidity, the engine surfaces a skip for that position for the week. Forcing a trade on a thin option chain is how retail covered-call traders get bad fills. Better to wait.
- If a position has persistently thin liquidity across multiple weeks, the engine flags it for your attention. Some stocks just aren't good covered-call candidates, and you may want to think about whether to keep them in your covered-call universe or trade calls only on your other positions.
Stale or missing market data
Our analyses run on third-party financial data. The data is good — these providers are the same ones professional desks use — but no data feed is perfect. A few things can happen:
- An option chain is missing or incomplete. If we can't find an expected strike or expiration, the engine retries on the next data refresh. If the data is still missing when we generate the Friday batch, the position gets a skip with a brief note about why.
- Implied volatility looks wrong. If a stock's IV reading deviates sharply from its recent history in a way that suggests a data error rather than a real volatility shift, we flag it and re-fetch. If the reading still looks wrong, we err toward skipping rather than acting on suspect data.
- End-of-day prices are delayed. Friday analyses are generated Thursday night using Thursday's closing data, which has been the case as long as we've operated. If a market event occurs Friday morning before you read the email — a major move on overnight news, for example — the analysis is reflecting Thursday's reality, not Friday's. Always verify the live quote at your broker before placing a trade.
Dividends, ex-dates, and early assignment risk
Dividends create the most common reason a covered call gets exercised early. The mechanic: if a stock is about to pay a dividend, and you're short an in-the-money call, the call holder may exercise the day before the ex-dividend date to capture the dividend. You wake up the morning of the ex-date and your shares are gone — assigned at the strike, the night before.
The engine accounts for this in two ways. When picking a strike for a dividend-paying stock, we factor in the upcoming dividend amount and ex-date when evaluating assignment probability — a strike that looks comfortably out of the money before the dividend may not be after. And when monitoring open positions, we flag positions where an in-the-money call sits across an upcoming ex-date as elevated assignment risk.
You can't fully prevent early assignment around dividends. You can be aware of it and not be surprised when it happens.
Splits and corporate actions
When a stock splits, options contracts are adjusted by the Options Clearing Corporation to preserve their economic value. Strike prices and contract multipliers change. The engine handles standard splits automatically — when our data provider reports a split has occurred, positions and any open calls are updated accordingly, and the next analysis reflects the post-split picture.
Less standard corporate actions — special dividends, mergers, spin-offs, exchanges — can affect option contracts in ways that aren't always cleanly handled by automation. When the engine detects a non-standard adjustment to a position with an open call, it flags the position for explicit attention rather than continuing to generate analyses against it. You should review the position and confirm the situation before the engine resumes normal analyses.
Account types: taxable, IRA, joint
You can mark each position in your portfolio as held in a taxable account, an IRA (or other tax-advantaged account), or a joint account. The engine uses this information to adjust how it presents analyses:
- Taxable accounts get full cost-basis treatment in the analysis. We surface short-term vs. long-term holding period, since assignment in a taxable account creates a taxable event whose treatment depends on how long you've held the shares.
- IRA and other tax-advantaged accounts don't surface holding-period or wash-sale concerns, since assignment within these accounts doesn't create a taxable event in the same way. The analyses themselves are otherwise identical to taxable accounts.
- Joint accounts are treated as taxable for purposes of cost-basis and holding-period surfacing. The engine doesn't try to allocate gains across owners; that's an accounting question between you, your joint owner, and your tax professional.
The engine's strike picking doesn't change based on account type. The account type changes what we surface in the rationale — not the trade itself.
Wash-sale awareness
The wash-sale rule disallows claiming a loss on a security if you buy back a "substantially identical" security within 30 days before or after the sale. Selling a covered call and having the shares assigned at a loss can interact with the wash-sale rule if you re-establish the position shortly afterward.
For positions in taxable accounts where the engine sees an unrealized loss, we surface a note when assignment would create a wash-sale concern. We don't try to tell you what to do about it — wash-sale handling is genuinely complex, depends on your full tax picture across all accounts, and is a place where you need a real tax professional rather than a software footnote. But we want you to know the concern exists before the trade happens, not after.
Strike protection logic
Strike protection is a state the engine flags when an open call you sold has moved meaningfully against you — meaning the underlying stock has rallied well past your strike — in a way that exposes you to a larger-than-expected loss on assignment.
When strike protection triggers, the engine doesn't treat the position as a routine roll candidate. Instead it flags the position for explicit decision-making: depending on how far past the strike the stock has moved, your options may be different from a normal roll. Sometimes the best move is to let assignment happen and accept the gain. Sometimes it's to roll up and out at a net debit (paying to preserve the position). Sometimes it's to close the call early. The engine's analysis lays out the tradeoffs; the choice is yours.
Strike protection is not a guarantee that you won't lose money on a covered call position. It's a process for making sure unusually adverse moves get explicit attention rather than being run through the routine roll logic, which is calibrated for normal-market conditions.
Adding a position with an open call already on it
If you add a position to Income Factory that already has a covered call written against it at your broker — sold before you signed up, or sold on your own without using the platform — you can record the open call when you add the position. The engine treats it the same as a call we recommended: it monitors expiration, tracks assignment probability, and surfaces roll or skip analyses as expiration approaches.
We don't second-guess the original strike choice. The trade is what it is; what we can help with is what to do next as it approaches expiration.
Engine versioning and what changes mean
The engine evolves. We refine rules, fix issues, add handling for situations we hadn't seen before, and occasionally rework whole sections of how decisions get made. When the engine changes in a way that would meaningfully affect the analyses you receive, we publish a note explaining what changed and why.
Past analyses are not retroactively edited. If the engine recommended a trade last week under the old rules and today's rules would have produced a different trade, the historical record shows what was actually recommended at the time. We don't rewrite history.
For the change log, see Updates in your account, where engine-behavior changes are noted alongside other product news.