How to record options trades in a trading journal

A spread imported as legs is scored as four trades, and an expiry often has no row. Which journals rebuild the position, and what you still fix by hand.

Export fills and the separate expirations-and-assignments record from the broker, import both, then check that the journal grouped the legs into one position. TradesViz groups spreads and links assignments to the stock; TraderSync closes unreported expiries itself; TradingDiary Pro and Tradervue leave grouping and closing to you. What breaks is the rows the broker never sends, the roll split across two symbols, and the 100 multiplier.

The short way

Get two things out of the broker, not one: the trade history, and the record of what happened to contracts that were never traded out — expirations, assignments, exercises. Then import both into a journal that understands options, and check one multi-leg position by hand before trusting anything it reports.

The two-records part is what most people miss. An expiry is not a fill, so it is often not in the trade export at all; Tradervue's help page puts it plainly: "Some brokers and platforms do not provide data for expired or exercised/assigned options in their export files." Interactive Brokers keeps them in a Flex Query section of their own, Option Exercises, Assignments and Expirations, listing assignment, exercise and expiration activity with the underlying for each contract. TradesViz's Interactive Brokers instructions tell you to tick that section beside Trades, and TradingDiary Pro's list of required Flex sections includes it too. Getting the trade file itself is covered in exporting broker trade history.

Of the journals here, TradesViz does the most on import: it groups legs into spreads, can add the expiry executions and links an assignment or exercise to the stock position it created. Options are a Pro feature at $19.99 a month; the free plan imports stocks only.

What the options are

A journal that rebuilds the position. TradesViz's import settings guide, updated 31 August 2026, has an option to "attempt advanced grouping of options" across what it says are 30-plus strategies, a setting to "group spreads and other strategies even if individual option legs are closed separately", and one to split multi-strike strategies the broker fused into one. Its options page says assignment and exercise events are linked to the underlying stock position. When grouping guesses wrong, its trade-management FAQ lets you shift-click trades on the same underlying and merge them, or split executions out of one.

A journal that closes what the broker forgot. TraderSync's support pages say it closes an expired contract when the broker reports the expiry, and otherwise closes it itself two business days after the expiration date, so the settlement price is in. Its Auto Spread Detection, which groups legs into one trade, is described on its support pages as an Elite-plan setting ($79.95 a month), roughly 80% accurate, and applied only to trades imported after you switch it on — so switch it on before importing a year of history, or that year stays as legs.

A journal that detects and lets you assign. TradingDiary Pro is Windows desktop software at $149 once. Its own options page says it straight: "By default, importing trades creates separate positions for each of the four legs, each with its own P&L." Tools → Assign Options Strategies then lists the strategies it detected, more than 25 kinds, and you tick the ones to combine; a right-click Adjust attaches new legs to an existing strategy and recalculates its P&L, which is how a roll stays one position.

A journal where you close it yourself. Tradervue has no automatic handling of expiry or assignment. Its Manage Options button, on the Silver and Gold plans, opens an execution editor pre-filled with the contract and the quantity needed to close the leg; you set the price to zero for an expiry, or to what the assignment implied, and the date. Slow, and exact, because you typed it.

Tax software, which answers a different question. TradeLog implements the IRS treatment of exercise and assignment: the option shows no profit or loss, and its premium adjusts the stock's cost basis or sale proceeds instead. From its Adjustments menu, Exercise lists the options waiting to be matched. That is the right record for Form 8949 and the wrong one for asking how a strategy performed, which is why it sits beside a journal rather than replacing one.

Your own code. SnapTrade's activities endpoint types each row, and the types include OPTIONEXPIRATION, OPTIONASSIGNMENT and OPTIONEXERCISE alongside BUY and SELL. Each option row carries the OCC symbol, a strike, an expiration, a call or put, and an is_mini_option flag. SnapTrade says it does "a best effort to categorize brokerage transaction types into a common set of values", so the event types are only as complete as what each broker sends it.

If none of these fits, Trademetria can merge legs and report them as a spread, and Stonk Journal keeps manually entered multi-leg fills under one parent trade for free; the field is trading journal software.

Where this breaks

A spread imported as legs is four trades. An iron condor arrives as four positions with four P&Ls, and every statistic downstream counts them: the win rate, the average winner, the number of trades, the P&L by symbol. Whatever the position did, its legs show up as winners and losers of their own, and the summary describes something you did not trade. Spread detection exists to fix this, and none of the vendors claims it is perfect — TraderSync's own figure is about 80%. Check one known spread after every import format change.

The expiry and the assignment have no trade row. A contract that expired worthless was not sold, so a trade export may simply stop mentioning it, and the journal keeps it open forever, with an open-position count and an unrealised P&L that never go away. An assignment is worse: a short option disappears and shares appear, and an importer reading only Trades sees a stock purchase with no option closing against it. The fix is the second record from the broker, or a journal that closes unreported expiries itself, or closing each one by hand.

A roll is two symbols. Rolling closes one contract and opens another with a different expiry or strike, often in one order, and to the journal those are two unrelated instruments — a closed trade with a realised result and a new trade from zero. Any grouping keyed on symbol splits them; TradesViz's default setting, by its own description, splits a trade when the position in that symbol goes flat. Merge them, or adjust the strategy, after import.

The broker's symbol is not the clearing symbol. The OCC symbol is 21 characters: the root padded to six, the expiry as YYMMDD, C or P, and the strike times 1,000 in eight digits — SnapTrade's documented example is AAPL 261218C00240000, a 240 call expiring 18 December 2026. Brokers display their own versions. Fidelity's published format strings the same fields together with no padding and a decimal strike, so a 27.50 Microsoft call reads -MSFT110122C27.5. A journal fed from two sources has to normalise one into the other, or the same contract becomes two positions. Adjusted contracts after a split or a special dividend add a digit to the root — Fidelity's example is -MSFT1110122C25 — to mark a non-standard contract, whose deliverable a journal cannot infer from the symbol alone. See symbology.

The multiplier lives outside the price. An option quote is per share; a standard US equity contract is 100 shares, and SnapTrade's schema flags mini options at 10. A CSV mapped by hand, or an importer that does not recognise a row as an option, books a 2.50 premium as 2.50 dollars rather than 250, and every P&L figure for that contract is out by a factor of 100.

The assigned shares carry two different costs. A journal records the short put closing at assignment and a stock purchase at the strike, and the two rows add up to the right total. IRS Publication 550 records the same event differently: when a put you wrote is exercised, you "decrease your basis in the stock by the amount you received for the put", and when a call you wrote is exercised, you increase the amount realised on the stock by the premium. Neither is wrong, but a journal's stock basis will not match the tax basis, and a later sale of those shares will show a different gain in each. For the tax version, the record to keep is cost basis after the adjustment, and wash sales across accounts make it worse.

If you outgrow this

When the question is tax rather than review, a journal's P&L is not a filing record: TradeLog rebuilds the year from raw fills with the exercise and assignment adjustments applied, and wash sales are the reason it exists.

When several accounts or brokers feed one journal, the symbol problem and the missing-row problem multiply by the number of brokers. An aggregation API such as SnapTrade puts every broker into one schema with typed option events, at the price of writing the journal logic yourself.

When the journal choice is still open, TradesViz against Edgewonk and Tradervue, TraderSync and TradeZella compare the products on more than options, and the trading journal cost calculator prices them for your number of accounts.

The tools that do this

In the order this page recommends trying them. Paid placement does not affect this order.

  1. TradesViz

    Groups 30-plus strategies on import, even when legs close separately, and links assignment and exercise to the stock. Options need Pro, $19.99 a month.

    The analytics-heavy journal: 150+ base charts across seven instrument types.

    $19.99/moFree tier

  2. TraderSync

    Closes an expired contract itself two business days after expiry when the broker sends no row. Its auto spread detection is an Elite setting.

    Trade journal with options spread detection on Elite and market replay down to 250ms.

    $29.95/mo

  3. TradingDiary Pro

    Windows, $149 once. Imports each leg as its own position, then groups detected strategies and attaches roll legs through Adjust, by hand.

    A Windows trade journal you buy once, with broker statement import and a local MCP server.

    $49/yr

  4. Tradervue

    Nothing automatic. Manage Options pre-fills the closing execution for an expired or assigned leg, which you price and date. Silver, $29.95 a month.

    The category's oldest journal, 81 supported brokers, and a free tier that still works.

    $29.95/moFree tier

  5. TradeLog

    The tax record. Exercise and assignment book no gain or loss on the option and move the premium into the stock's basis or proceeds. From $219 a year.

    Wash sales and Form 8949 rebuilt from raw broker trade history, not from the 1099-B.

    $219/yr

  6. SnapTrade

    The API route. Activities typed OPTIONEXPIRATION, OPTIONASSIGNMENT and OPTIONEXERCISE, with the 21-character OCC symbol on each option row.

    One API for reading brokerage holdings and placing orders at supported brokers.

    $100/moFree tier

FAQ

Why does my journal show an option I let expire as still open?

Because the broker's trade file has no row for it. An expiry is not a trade, so many exports leave it out, and Tradervue's help says so directly. At Interactive Brokers it lives in a separate Flex Query section, Option Exercises, Assignments and Expirations, which has to be ticked alongside Trades. Otherwise close it by hand at zero on the expiry date.

Should an assigned put show a loss on the option and a separate stock trade?

In a journal, that is usually how it lands, and the total across the two rows is right. For US tax, IRS Publication 550 treats it differently — the premium of a written put that is exercised reduces the basis of the shares you buy, and the option itself shows no gain or loss. TradeLog follows that rule; review-first journals generally do not.

How do I keep a roll as one trade?

Merge it after import. A roll closes one contract and opens another with a different expiry or strike, which is a different symbol, so a journal that groups by symbol sees two trades. TradesViz merges selected trades on the same underlying; TradingDiary Pro adds the new legs to an existing strategy through Adjust. Neither does it on its own.

Why is my option P&L out by a factor of 100?

Because option prices are quoted per share and a standard US equity contract covers 100 shares. SnapTrade's documentation, for one, gives the option price per share and describes mini options as 10 shares per contract. A journal that does not know a row is an option, or a CSV mapped by hand without a multiplier, books one contract at a premium of 2.50 as 2.50 dollars rather than 250.

Sources

  1. Option Exercises/Assignments/Expirations — Flex Query Reference — Interactive Brokers,
  2. Managing Option Positions — Tradervue Help — Tradervue,
  3. Complete guide to import settings in TradesViz — TradesViz,
  4. How to auto-import Interactive Brokers trades — TradesViz,
  5. TradesViz: Options Trading Journal — TradesViz, read
  6. Trade Management FAQs — TradesViz, read
  7. How TraderSync Creates Automatic Expiration Orders — TraderSync, read
  8. How can I activate the auto-spread detection? — TraderSync, read
  9. Options Trading Journal — TradingDiary Pro (Sword Tech Kft.), read
  10. Creating flex queries (Interactive Brokers) — TradingDiary Pro Help — TradingDiary Pro (Sword Tech Kft.), read
  11. Option Exercise / Assign — TradeLog Support — TradeLog, read
  12. Account Information — getAccountActivities — SnapTrade, read
  13. Option Symbology Initiative (OSI) — Fidelity Investments, read
  14. Publication 550 (2025), Investment Income and Expenses — Internal Revenue Service, read

The catalogue next door

This page names a handful of cards. The rest of them are in Trading Journal Software, each filled in against the same schema, with the fields to narrow it yourself.

Last updated . Corrected in place: this is a reference page, not a dated post.

Report an error on this page

Quote the line and say what it should be.

The vendor’s page, filing or documentation that says otherwise.

Only if you want to hear back. Never published.

Read by a person. It fixes a fact and moves nothing else.