Strategy detection
How the app spots wheels, covered calls, cash-secured puts, LEAPS and more, and how the Strategies page adds up their P&L.
On top of the plain positions described in Trades and positions, the app looks for common option strategies. It does this by itself, every time it recalculates. You see the result in two places:
- On the Trade Log: a detected strategy becomes one row that holds every trade
in it, with a tag such as
WHEELorCOVERED_CALL. - On the Strategies page: one card per strategy with its total P&L.
Detection only uses the automatic groups. Groups you merged or moved yourself are left as you made them (see Your own grouping).
Two kinds of strategies
| Kind | Strategies | What happens on the Trade Log |
|---|---|---|
| Combined | Wheel, covered call | Several positions (a put, shares, calls) become one row. The rows it was built from are hidden so nothing is counted twice |
| Labels | Cash-secured put, LEAPS, dividends | An existing row is marked. Nothing is combined and no number changes, except a cash-secured put's RETURN % |
The wheel
A wheel is: sell a put, get assigned the shares, sell calls on those shares, and finally sell the shares (often when a call gets assigned). The app recognizes it when it finds:
- A sold put that closed at $0, meaning it was assigned (or expired), and
- A share purchase from assignment at the put's strike, in the same account, within three days of the put's expiration or close.
From there it follows those shares to where they were sold, including through transfers to other accounts. Calls you sold on those shares while you held them join the wheel.
Example:
| Step | Trade | Cash |
|---|---|---|
| 1 | Sell 1 put, $50 strike, for $2.00 | +$200 premium |
| 2 | Assigned: buy 100 shares at $50 | −$5,000 |
| 3 | Sell 1 call, $52 strike, for $1.00 | +$100 premium |
| 4 | Call assigned: shares sold at $52 | +$5,200 |
The wheel row shows a result of +$500: $200 + $100 in premiums, plus $200 on the shares.
While you still hold the shares, the row's ENTRY shows the adjusted cost basis: the share
cost minus the premiums collected so far, per share. After step 3 that's $50 − $300 ÷ 100 =
$47. It's your break-even price on the shares.
Good to know:
- Partly sold. If you sold only part of the shares, the wheel shows as two rows: a closed one for the shares sold and an open one for the rest.
- A put that expired worthless with no assignment is not a wheel. It is labeled a cash-secured put instead.
UNKNOWNstatus. When the cost of the shares can't be worked out (for example they moved in from an account you haven't imported), the wheel's status isUNKNOWN.- Each wheel row gets two tags:
WHEELand one with the ticker, such asAAPL_WHEEL_STRAT. That second tag gives each ticker's wheels a card of their own on the Strategies page (see Your own strategies).
Covered calls
A covered call is shares you own plus calls you sold against them. The app looks at each purchase of shares (a lot) that no wheel claimed, and gives it the calls those shares can cover:
- One contract covers 100 shares, and only whole contracts count. A lot of 150 shares covers one call, not one and a half.
- Calls go to the oldest shares first. A call that closed frees its shares for the next one.
- A roll (buying back a call and selling a new one the same day) stays with the same lot.
- Wheels pick their calls first; covered calls get what's left.
Each lot becomes its own COVERED_CALL row. If you think of two lots as one position, merge them
(see Your own grouping). Like the wheel, an open covered call shows the
adjusted cost basis as its ENTRY.
A lot whose cost basis is unknown never becomes a covered call. Its calls stay on their own rows with their premiums, and the shares stay flagged as an issue.
A sold call that no shares in its account could cover gets the UNCOVERED tag and shows under
Show Issues. See Data issues.
Cash-secured puts
Every sold put that isn't part of a wheel is labeled a cash-secured put (tag CSP). The app
doesn't check your cash balance; the label just describes the trade.
For a closed cash-secured put, RETURN % is the return on the cash set aside, not on the
premium: result ÷ (strike × 100 × contracts).
You sell 1 put at a $40 strike for $1.20 and it expires. The result is $120, and RETURN % is
$120 ÷ $4,000 = 3%.
LEAPS
A bought option with more than 300 days between the purchase and the expiration is labeled
LEAPS (tag LEAPS). Nothing else changes.
Dividends
Every row that received at least one dividend counts towards the DIVIDENDS card. It's a label only. How dividends are split between rows is explained in Dividends.
Other combinations you'll see
These also join several rows into one, but have no card on the Strategies page:
- Exercised options. A bought option you exercised, together with the shares it turned into.
- Transfers and journals. A position that moved between accounts, or to another listing of
the same company (for example
Ton the TSX toTUon the NYSE), shown as one row from first buy to final sale. See Transfers between accounts and Journaling shares between listings. - Norbert's Gambit. Buying
DLR, journaling it toDLR.Uand selling it, to convert between Canadian and US dollars. It has its own card, which shows what you saved compared with a bank. See Norbert's Gambit.
Remainder rows
Sometimes a strategy uses only part of a row. You hold 1,000 shares and sold calls on 200 of them; the calls and those 200 shares become a covered call. The original row is then hidden, and its unused part (the other 800 shares) gets a row of its own: the remainder. The strategy plus the remainder add up exactly to the original, so no money is lost or counted twice.
A remainder has no card of its own, but it still gets the CSP, LEAPS or dividends label its
original would have had.
Your own strategies: _STRAT tags
Any tag that ends in _STRAT creates a strategy card. Tag the rows of your earnings plays
EARNINGS_STRAT, and an EARNINGS card appears on the Strategies page with their combined
P&L.
- Put the tag on group rows in the Grouped view. A tag on a single trade inside a group doesn't count.
- A tag on an open row stays on it while it's open. When you sell, the sale becomes a new closed row, which starts without your tag. Tag the closed rows too, or merge them first.
- To drop a card, remove the tag from its rows. That works for the automatic
<TICKER>_WHEEL_STRATtags as well.
See Tags and labels for how tags work in general.
How strategy P&L is counted
Each card on the Strategies page, and each strategy's detail page, adds up its rows like this:
| Figure | How it's worked out |
|---|---|
| Realized P&L | Results already locked in, counted like the Trade Log's Realized P&L: closed rows, each option of a wheel or covered call as it closed (an assigned put's premium counts once, when the put closed), and the dividends the rows received |
| Unrealized P&L | Open rows at the latest stored price (converted to your display currency), against what you paid — premiums already counted as realized don't lower this cost |
| Total P&L (Net Liquidation) | Realized plus unrealized |
| Win Rate | Winning closed rows ÷ all closed rows |
| Trades / Open | Number of rows, and how many of them are open |
| Dividends | Dividends received by the rows |
Also:
- Rows with an unknown cost basis are left out, so a missing purchase can't make a strategy look better or worse than it is. Fix them first (see Data issues).
- Results are before fees.
- A row can count on more than one card, for example a stock row that received dividends and
carries one of your
_STRATtags. - Accounts you hid under Account Filters on Accounts & Data are left out.
- Unrealized figures use prices the app already has stored; they don't fetch new prices.
On a strategy's detail page, the table breaks the totals down per ticker (Ticker, Trades,
Open, Realized P&L, Unrealized P&L, Total P&L, Win Rate, W / L). The Customize
button lets you rename a card, change its description and icon.
Related
- Strategies page: the page itself.
- Transfers between accounts: transfer chains and Norbert's Gambit.
- Journaling shares between listings:
DLR↔DLR.U, TSX ↔ NYSE. - Performance: how results feed the Dashboard and reports.