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 WHEEL or COVERED_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

    KindStrategiesWhat happens on the Trade Log
    CombinedWheel, covered callSeveral positions (a put, shares, calls) become one row. The rows it was built from are hidden so nothing is counted twice
    LabelsCash-secured put, LEAPS, dividendsAn 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:

    1. A sold put that closed at $0, meaning it was assigned (or expired), and
    2. 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:

    StepTradeCash
    1Sell 1 put, $50 strike, for $2.00+$200 premium
    2Assigned: buy 100 shares at $50−$5,000
    3Sell 1 call, $52 strike, for $1.00+$100 premium
    4Call 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.
    • UNKNOWN status. 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 is UNKNOWN.
    • Each wheel row gets two tags: WHEEL and one with the ticker, such as AAPL_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 T on the TSX to TU on 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 to DLR.U and 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_STRAT tags 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:

    FigureHow it's worked out
    Realized P&LResults 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&LOpen 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 RateWinning closed rows ÷ all closed rows
    Trades / OpenNumber of rows, and how many of them are open
    DividendsDividends 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 _STRAT tags.
    • 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.