Home › Templates › Wheel strategy tracker

Wheel Strategy Tracker

A free wheel strategy spreadsheet for Excel and Google Sheets: log every cash-secured put and covered call, group them into cycles, and the sheet works out net premium, collateral, days in trade, return on collateral, simple annualized return, adjusted cost basis per share, the stock gain or loss when shares are called away, realized P/L and the capital tied up now, with totals by ticker and by month.

Download Excel template (.xlsx) 217 KB · no macros · Excel 2016+ and Google Sheets · v1.0, 2 Nov 2026

Use it in Google Sheets: choose File → Import → Upload in Sheets and pick the .xlsx, or upload it to Google Drive and open it with Google Sheets. No sign-up, no broker connection: you type each leg from your trade confirmations.

Preview: the Example Cycles and Example Summary tabs (fictional tickers EXMPL, SAMPL and FICTN), as of 2 Nov 2026. Adjusted basis = (stock cost − net premium from every leg) ÷ shares. Return = realized P/L ÷ capital; annualized = return × 365 ÷ days.
$2,401.15realized P/L: $2,151.15 premium + $250.00 stock
$2,374.20net premium, all 21 legs (after buy-backs and fees)
$10,400capital tied up now: 1 open put + 200 shares
23.8%closed cycles, annualized (capital-weighted, simple)
CycleStatusSharesStock cost/shAdj. basis/shNet premiumStock gainRealized P/LCapitalDaysReturnAnnualized
EXMPL-1Closed100$50.00$45.39$461.10$300.00$761.10$5,00013715.2%40.6%
EXMPL-2Closed100$51.00$46.39$461.10−$400.00$61.10$5,2001371.2%3.1%
SAMPL-1Holding + open option200$29.00$23.55$1,089.60$0.00$960.90$6,00024416.0%24.0%
FICTN-1Closed100$80.00$77.32$268.05$350.00$618.05$8,0001027.7%27.6%
EXMPL-3Open put0––$94.35$0.00$0.00$4,60070.0%0.0%
Total (5 cycles)$2,374.20$250.00$2,401.15
Example Summary: realized P/L by month in 2026, net option premium (purple) plus stock gain or loss (amber). Jan $119.35; Feb $134.35; Mar $89.35; Apr $231.75; May $761.75; Jun $602.40; Jul $223.05; Aug $178.05; Sep $233.05; Oct −$171.95; Nov $0.00; Dec $0.00.−$600−$400−$200$0$200$400$600$800Jan119Feb134Mar89Apr232May762Jun602Jul223Aug178Sep233Oct−172NovDecNet premium, closed legsStock gain/loss (called away or sold)

Chart: the Example Summary monthly table for 2026, drawn from the same file. In the workbook it is a native stacked column chart, next to a bar chart of realized P/L by ticker.

What's inside the spreadsheet

TabWhat you typeWhat it calculates
Start hereNothingSteps, every formula in plain words, assignment notes from the Options Industry Council and Investor.gov, limits, disclaimer
CyclesOne row per wheel (up to 50): cycle ID and ticker; optional shares bought directly (count, price, date), a manual sale (price, date) and a current priceLegs, start and end date, shares acquired, stock cost, adjusted cost basis per share, shares called away / sold / held, stock gain or loss, realized P/L, unrealized stock P/L, status, days, capital tied up, return and annualized return, a check on every row
TradesOne row per option leg (up to 200): cycle (dropdown), CSP or CC, open date, expiration, strike, contracts, premium per share, open fees, close date, close cost per share, close fees, outcome (Open, Expired, Closed, Rolled, Assigned, Called away), notes; shares per contract in B5 (default 100); optional "today" in B3Shares, premium received, close cost, net premium, collateral, days in trade, return on collateral, simple annualized return, stock gain or loss on a called-away call, a check on every row
SummaryOptional year for the monthly tableLegs and cycles, net and realized premium, realized stock gain/loss, realized P/L, capital tied up now, unrealized P/L, closed-cycle annualized return, legs by outcome, a table by ticker, a table by month, two native charts
Example Trades, Example Cycles, Example SummaryAlready filled21 fictional legs in 5 cycles, including a roll, an early assignment, a loss on the shares, 2 contracts, a cycle that starts with bought shares and an open put
ListsNothingLeg types and outcomes for the dropdowns

For single options trades that are not part of a wheel, the options trading journal fits better. If you only write calls on shares you already hold, see the covered call tracker.

How the wheel works

The wheel: sell a cash-secured put; if it expires or is bought back, sell another put; if it is assigned, you own the shares; sell covered calls on them; if a call expires or is bought back, sell another call; if a call is assigned, the shares are called away and the cycle ends.1. Sell a putcash = strike × 1002. Assignedbuy 100 shares/contract3. Sell a callcovered by the sharesexpired / bought back: sell againexpired / rolled: sell again4. Called away: shares sold at the call strike, cycle closed, start a new one

The Options Industry Council (OIC) describes the first step this way: "The cash-secured put involves writing a put option and simultaneously setting aside the cash to buy the stock if assigned." If that happens, "The effective purchase would be even lower: strike price less the premium received." Its cash-secured put page also names the main risk: "The investor must be comfortable with the strike price as an acceptable long-term acquisition price, no matter how low the market goes."

For the second half, the OIC's covered call page says: "If the stock price rallies above the call's strike price, the stock is increasingly likely to be called away." It lists the maximum gain as "Strike price - stock purchase price + premium received" and warns that "The only sure way to avoid assignment is to close out the position."

The tracker follows the same sequence. A cycle is everything from the first put to the moment the shares are gone: every put (expired, closed, rolled or assigned), the shares, and every call until the last one is called away.

How to use it

  1. Open Cycles and type a cycle ID (for example ABC-1) and the ticker. Use a new ID each time a cycle ends and you start again on the same stock.
  2. Open Trades. For each option you sell, pick the cycle, choose CSP or CC, and type the open date, expiration, strike, contracts, premium per share and the opening fees. Enter legs in date order.
  3. When a leg ends, type the close date and pick the outcome. Expired and Assigned/Called away have a close cost of 0. Closed and Rolled need the buy-back price per share and its fees. A roll is two rows: the old leg as Rolled and the new leg on the next row.
  4. If a put is assigned early, use the assignment date as the close date. Put any assignment fee in Close fees.
  5. If a cycle starts with shares you already bought, type the shares, buy price and buy date on Cycles. If you sell the shares yourself instead of being called away, type the sale price and date there.
  6. Check Summary: capital tied up, realized P/L, results by ticker and month. Column X on Trades and column AE on Cycles say OK when a row is complete.

Leave Trades!B3 blank and the sheet uses today's date (it is only used for the days of open cycles and the Summary year). Trades!B5 holds the shares per contract; leave it at 100 unless a contract was adjusted.

Assignment, early assignment and the 100-share multiplier

Assignment is what moves a wheel from one stage to the next, and it does not always wait for expiration. The OIC's Exercising Options page says: "The holder of an American-style option contract can exercise the option at any time before expiration. Therefore, an option writer may be assigned an exercise notice on a short option position at any time before expiration." It adds: "It is extremely important to realize that assignment of exercise notices can occur early, days or weeks in advance of expiration day."

Multiplier. The SEC's Investor.gov bulletin "An Introduction to Options" says "An option contract generally represents 100 shares of the underlying stock" and gives the arithmetic: "a premium of $2.20 represents a payment of $220 per option contract ($2.20 x 100 shares)." FINRA's options page says the same: "A standard-size options contract is equal to 100 shares of the underlying security." That is why the tracker asks for the premium per share and multiplies by Trades!B5.

Risk. Investor.gov notes that "Option writers may carry an even higher level of risk since certain types of options contracts can expose writers to unlimited potential losses." A cash-secured put or a covered call is not unlimited, but the loss on the shares can be large: the OIC lists the covered call's maximum loss as "Stock purchase price - premium received (substantial)". FINRA adds that "Trading options requires specific approval from an investor’s brokerage firm" and: "Before trading options, read the Characteristics and Risks of Standardized Options disclosure provided by your firm." The OCC publishes that document on its Options Disclosure Document page.

The formulas, explained

Exact formulas from the file (row 8). On Trades, A is the cycle ID, C the type, D the open date, E the expiration, F the strike, H the premium per share, I and L the fees, J the close date, K the close cost per share and M the outcome; $B$5 holds shares per contract. Grey columns are helpers: AA is the stock cost of an assigned put (strike × shares), AB the put's collateral, AC the cycle's stock cost per share, AD the input check.

FieldFormula
Trades: shares (O)=IF(AD8<>"OK","",G8*$B$5)
Trades: premium received (P)=IF(O8="","",N(H8)*O8)
Trades: net premium (R)=IF(O8="","",P8-Q8-N(I8)-N(L8))
Trades: collateral (S)=IF(X8<>"OK","",IF(C8="CSP",F8*O8,O8*AC8))
Trades: days in trade (T)=IF(X8<>"OK","",MAX(1,IF(ISNUMBER(J8),J8,IF(ISNUMBER(E8),E8,$B$4))-D8))
Trades: return on collateral (U)=IF(OR(S8="",N(S8)=0),"",R8/S8)
Trades: annualized, simple (V)=IF(U8="","",U8*365/T8)
Trades: stock gain/loss when called away (W)=IF(AND(C8="CC",M8="Called away",N(AC8)>0,N(O8)>0),(F8-N(AC8))*O8,"")
Cycles: shares acquired (M)=IF(A8="","",SUMIFS(Trades!$O$8:$O$207,Trades!$A$8:$A$207,A8,Trades!$C$8:$C$207,"CSP",Trades!$M$8:$M$207,"Assigned")+N(C8))
Cycles: stock cost (N)=IF(A8="","",SUMIFS(Trades!$AA$8:$AA$207,Trades!$A$8:$A$207,A8)+N(C8)*N(D8))
Cycles: stock cost per share (O)=IF(N(M8)=0,"",N8/M8)
Cycles: net premium, all legs (P)=IF(A8="","",SUMIFS(Trades!$R$8:$R$207,Trades!$A$8:$A$207,A8))
Cycles: adjusted cost basis per share (Q)=IF(O8="","",(N8-P8)/M8)
Cycles: stock gain/loss realized (U)=IF(A8="","",SUMIFS(Trades!$W$8:$W$207,Trades!$A$8:$A$207,A8)+IF(S8>0,(F8-O8)*S8,0))
Cycles: realized premium, closed legs (V)=IF(A8="","",SUMIFS(Trades!$R$8:$R$207,Trades!$A$8:$A$207,A8,Trades!$Y$8:$Y$207,1))
Cycles: capital tied up (AB)=IF(A8="","",MAX(N8,SUMPRODUCT(MAX((Trades!$A$8:$A$207=A8)*Trades!$AB$8:$AB$207))))
Cycles: return on capital (AC)=IF(OR(A8="",N(AB8)=0),"",W8/AB8)
Cycles: annualized return (AD)=IF(OR(AC8="",AA8=""),"",AC8*365/AA8)
Summary: capital tied up now (B16)=SUMIFS(Trades!$S$8:$S$207,Trades!$M$8:$M$207,"Open",Trades!$C$8:$C$207,"CSP")+SUM(Cycles!$AF$8:$AF$57)
Summary: closed cycles annualized (B20)=IF(N(B19)=0,"",B18/B19*365)
Summary: realized premium in a month (K8)=SUMIFS(Trades!$R$8:$R$207,Trades!$Y$8:$Y$207,1,Trades!$J$8:$J$207,">="&J8,Trades!$J$8:$J$207,"<="&EOMONTH(J8,0))

Collateral. A put ties up strike × shares in cash. A covered call ties up the shares, valued at the cycle's stock cost per share (what you paid, not today's price). Return on collateral = net premium ÷ collateral. Annualized (simple) = return × 365 ÷ days in trade; it is not compounded. For an open leg, days run from the open date to expiration, as if it is held to expiry.

Adjusted cost basis per share = (stock cost − net premium from every leg of the cycle) ÷ shares acquired. With one assigned put this is the strike minus the net premium per share; puts that expired before assignment and calls sold afterwards lower it further. It shows the price the shares must stay above for the whole cycle to break even, before taxes.

Cycle capital = the larger of the stock cost and the biggest put collateral in the cycle; cycle return = realized P/L ÷ capital. The Summary's closed-cycle annualized return weights every closed cycle by capital × days: sum of realized P/L ÷ sum of (capital × days) × 365. That avoids averaging percentages from cycles of very different size and length. Capital uses SUMPRODUCT(MAX(...)), which works without Ctrl+Shift+Enter in Excel, Google Sheets and LibreOffice.

Worked example from the sample data

All tickers, prices and dates are made up. Fees are $0.65 per contract to open and to buy back, nothing on expiry or assignment.

EXMPL-1: a full wheel

CycleTypeOpenClosedStrikePremium/shClose cost/shFeesOutcomeNet premiumCollateralDaysAnnualized
EXMPL-1CSP5 Jan 202630 Jan 2026$50.00$1.20$0.00$0.65Expired$119.35$5,0002534.9%
EXMPL-1CSP2 Feb 202627 Feb 2026$50.00$1.35$0.00$0.65Assigned$134.35$5,0002539.2%
EXMPL-1CC2 Mar 202627 Mar 2026$52.00$0.90$0.00$0.65Expired$89.35$5,0002526.1%
EXMPL-1CC30 Mar 202622 Apr 2026$52.00$0.85$1.60$1.30Rolled−$76.30$5,00023−24.2%
EXMPL-1CC22 Apr 202622 May 2026$53.00$1.95$0.00$0.65Called away$194.35$5,0003047.3%

The first put expired: $120.00 received − $0.65 fee = $119.35 on $5,000 of collateral for 25 days, 2.39% or 34.9% annualized. The second put was assigned, so the cycle bought 100 shares for $5,000.00. The call sold on 30 Mar 2026 was rolled: bought back at $0.02 per share for $160.00, a net −$76.30 on that leg, and replaced by a $53.00 call that was called away.

Net premium over five legs: $461.10. Adjusted basis: ($5,000.00 − $461.10) ÷ 100 = $45.389 per share. Stock gain when called away: ($53.00 − $50.00) × 100 = $300.00. Realized P/L $761.10 on $5,000 of capital over 137 days (5 Jan 2026 to 22 May 2026): 15.22%, or 40.6% annualized.

EXMPL-2: early assignment and a loss on the shares

CycleTypeOpenClosedStrikePremium/shClose cost/shFeesOutcomeNet premiumCollateralDaysAnnualized
EXMPL-2CSP1 Jun 202615 Jun 2026$52.00$1.10$0.25$1.30Closed$83.70$5,2001442.0%
EXMPL-2CSP22 Jun 202610 Jul 2026$51.00$1.05$0.00$0.65Assigned$104.35$5,1001841.5%
EXMPL-2CC13 Jul 202621 Aug 2026$48.00$0.70$0.00$0.65Expired$69.35$5,1003912.7%
EXMPL-2CC24 Aug 202618 Sep 2026$48.00$0.95$0.00$0.65Expired$94.35$5,1002527.0%
EXMPL-2CC21 Sep 202616 Oct 2026$47.00$1.10$0.00$0.65Called away$109.35$5,1002531.3%

The first put was bought back early at $0.25. The second was assigned a week before expiry at $51.00. The stock then fell, and the calls were sold below cost; the last one was called away at $47.00, a stock loss of −$400.00. Net premium was $461.10, so the cycle still ended $61.10 up: 1.18% on $5,200 (the $52.00 put's collateral is the largest in the cycle). The adjusted basis of $46.389 was above the $47.00 call strike, which is why the stock loss nearly cancelled the premium.

SAMPL-1: 2 contracts, still holding

Three puts on 2 contracts; the third was assigned at $29.00, so the cycle holds 200 shares costing $5,800.00. Net premium so far $1,089.60 lowers the adjusted basis to $23.552. A $30.00 call is still open. With a current price of $28.40 typed on Cycles, the unrealized stock P/L is −$120.00; realized premium is $960.90.

FICTN-1: started with shares, sold by hand

100 shares bought directly at $80.00 on 2 Mar 2026. Two calls brought $268.05 net (one bought back at $0.20). The shares were then sold at $83.50 on 12 Jun 2026: a $350.00 stock gain and $618.05 realized P/L over 102 days.

EXMPL-3 and the Summary

A new $46.00 put opened on 26 Oct 2026 is still open: it ties up $4,600 and shows $94.35 of premium that is not yet realized. Capital tied up now = $4,600 + 200 SAMPL shares × $29.00 = $10,400.

TickerLegsNet premiumRealized premiumStock gain/lossRealized P/LShares held
EXMPL11$1,016.55$922.20−$100.00$822.200
SAMPL8$1,089.60$960.90$0.00$960.90200
FICTN2$268.05$268.05$350.00$618.050

3 of 5 cycles are closed. Their realized P/L is $1,440.25 on 2,213,400 capital-days, so the capital-weighted annualized return is $1,440.25 ÷ 2,213,400 × 365 = 23.8%. October shows $228.05 of premium but −$400.00 on stock, the EXMPL-2 call-away. By outcome: open 2, expired 11, closed 2, rolled 1, assigned 3, called away 2 legs.

Common mistakes

Limits

FAQ

What is the wheel strategy in options?

It is a repeating cycle of two covered option sales. You sell a cash-secured put and set aside the cash to buy the shares. If the put expires, you keep the premium and can sell another. If it is assigned, you buy the shares at the strike and then sell covered calls against them. When a call is assigned, the shares are sold at the call strike (called away) and the cycle starts again. Each step can lose money if the stock falls: the Options Industry Council describes the cash-secured put's maximum loss as "Strike price - premium received (substantial)".

How do you calculate cost basis on the wheel strategy?

Start with what you paid for the shares (the put strike × 100 per assigned contract), then subtract the net premium from every leg in the cycle: premium received minus buy-back costs and fees. Divide by the shares acquired. In the example, EXMPL-1 was assigned at $50.00 and collected $461.10 net over five legs, so the adjusted basis is ($5,000.00 − $461.10) ÷ 100 = $45.389 per share. Your broker and tax forms may show a different basis, because premium from expired puts is not usually added to the share cost there.

How do you calculate the annualized return on a cash-secured put?

Divide the net premium by the collateral (strike × shares) to get the return for the trade, then multiply by 365 and divide by the days in the trade. In the example, the first EXMPL put kept $119.35 on $5,000 of collateral for 25 days: 2.39% × 365 ÷ 25 = 34.9%. That is a simple, not compounded, annualization. It only describes that one trade and does not predict what the next one will earn.

Can a cash-secured put or covered call be assigned early?

Yes, for American-style options such as US equity options. The Options Industry Council says "an option writer may be assigned an exercise notice on a short option position at any time before expiration" and that "Call writers should be aware of dividend dates and the possibility of early assignment." Log the assignment date as the close date; the tracker then counts the shares from that day.

How many shares does one options contract cover?

Usually 100. Investor.gov says "An option contract generally represents 100 shares of the underlying stock." FINRA says "A standard-size options contract is equal to 100 shares of the underlying security." The tracker keeps this number in one cell (Trades B5), so a contract with a different size after an adjustment can be handled by changing it.

Can I use this wheel strategy tracker in Google Sheets?

Yes. In Google Sheets choose File → Import → Upload and pick the .xlsx, or upload it to Google Drive and open it with Google Sheets. The formulas use IF, IFERROR, AND, OR, N, ISNUMBER, INDEX, MATCH, SMALL, ROWS, ROW, SUM, SUMIFS, COUNT, COUNTA, COUNTIF, COUNTIFS, SUMPRODUCT, MAX, MIN, DATE, YEAR, EOMONTH and TODAY. No macros, no dynamic arrays, no XLOOKUP.

Related tools and templates

Educational template only, not financial, tax or investment advice. Options involve risk and are not suitable for every investor. Example data is fictional: the tickers, prices, dates and results are made up to show the formulas and say nothing about future returns. OIC, Investor.gov, FINRA and OCC material was retrieved on 2 November 2026.