Learn · Covered calls
Bought 100 shares at $48, sold three calls over five months for $840 total, got called away at $55. What did the campaign make? The answer is one number — but only if you track the two streams separately and let them meet at assignment.
A covered call campaign has two profit streams that live in different parts of your account: the option stream (premiums collected, minus buybacks paid) and the stock stream (what your shares gain or lose). The campaign's true result only resolves when the shares leave:
There's an equivalent way to see the same number, and it's the one that makes covered calls click: premium you collect lowers your real cost basis in the shares.
You buy 100 shares of XYZ at $48 and sell calls against it as they make sense:
| Date | Event | Cash (per share) | Running basis |
|---|---|---|---|
| May 4 | Buy 100 shares | −$48.00 | $48.00 |
| May 4 | Sell Jun $50 call | +$4.40 | $43.60 |
| Jun 20 | Call expires, sell Aug $50 call | +$1.90 | $41.70 |
| Aug 15 | Call expires, sell Oct $55 call | +$2.10 | $39.60 |
| Oct 17 | Shares called away at $55 | +$55.00 | — |
| Campaign profit | +$15.40 | +$1,540 | |
Check it both ways. Stream view: $840 premium + ($55 − $48) × 100 stock gain = $1,540. Basis view: ($55 − $39.60) × 100 = $1,540. Same number, because they're the same arithmetic in different clothes.
On a $4,800 outlay, that's a 32% campaign return in about five months — a number you'll never see if you track the calls and the stock in separate tabs.
Per-share prices. "Total premium kept" = every credit minus every buyback across all calls on this lot.
Own 300 shares, sell 2 calls, get assigned on 200. The remaining 100 shares keep their own basis and their own history — they're a different campaign now. Basis accounting has to live per lot, not per ticker, or the leftover shares inherit a muddled average.
A buyback is negative premium. It raises your real basis. If you rolled up for a net debit of $1.00, your basis just went from $39.60 back to $40.60 — and your max campaign profit dropped by exactly $100. Sheets that log premium as "income" in a separate column never reconcile this.
Cash dividends are a third stream — real income, but not option premium, and they don't change basis. Reinvested dividends create new mini-lots at new prices, each needing coverage tracking of their own. This is where "I'll just average it" goes to die.
Buying another 100 shares at $41 while the first lot sits at $48 basis doesn't merge anything — unless you deliberately pool them. Each lot has its own real basis, its own calls, its own called-away math.
For every covered position, you want five numbers at a glance: purchase price, total premium kept, real basis, current coverage (how many calls against how many shares), and the if-called result at the current strike. If any of those requires opening a spreadsheet, the tracking has already failed — you'll stop doing it in month two, right when the chains get interesting.
That's the exact screen ThetaIQ's covered call tracker is: log the share lot, log each call and roll against it, and the app keeps premium, real basis, and if-called profit current per lot — DRIP lots and partial assignments included. When the shares finally get called away, the $1,540 is already computed; you just get to agree with it.
Free plan, any broker, sixty seconds to set up.
Track your covered calls free →