How to Journal thinkorswim Trades
To journal thinkorswim trades, export via Monitor → Account Statement → CSV, then import into a dedicated journal to auto-group multi-leg options and apply futures multipliers.
Buy Now - ₹6,599 for Lifetime Buy Now - $159 for Lifetime7-day money-back guarantee
Fields to Track
Exec Time
ToS exports MM/DD/YYYY HH:MM:SS timestamps — essential for reconstructing trade sequence and matching partial fills to the correct parent trade
Side (BTO/STO/BTC/STC)
Distinguishes opening from closing transactions; critical for pairing legs in spreads without a grouping column in the CSV
Symbol / Exp / Strike / Type
The four columns that uniquely identify an options leg — you must match all four across open and close rows to calculate realized P&L
Qty
Partial fills split across multiple rows; summing Qty per leg confirms you fully closed a position before calculating net P&L
Net Price
Reflects the actual fill price after fees for that row — use this, not Price, when calculating per-leg cost basis
Futures Multiplier
Not included in the CSV — must be applied manually: /ES = $50/pt, /MNQ = $2/pt, /CL = $1,000/contract; missing this inflates or deflates P&L by orders of magnitude
Strategy Tag
Absent from the ToS export; add it manually so you can filter iron condors vs verticals vs naked options in your review
Paper vs Live
Paper trading accounts export as separate files; tagging source prevents simulated trades from polluting live performance stats
Emotional State
Not captured by any broker export; recording it at entry and exit reveals whether ToS paper trading builds the same discipline as live trading
Setup / Thesis
The CSV contains no notes fields — adding a one-sentence thesis at import time is the only way to review whether your read on the market was correct
Sample Journal Entry
Date: 2026-04-10 Account: Live (thinkorswim / Schwab) Strategy: Iron Condor — SPY weekly expiry Open: "STO 1 SPY 480C @ $1.20 + STO 1 SPY 460P @ $1.10 / BTO 1 SPY 485C @ $0.40 + BTO 1 SPY 455P @ $0.35" Net Credit: $1.55 ($155 per spread) Max Risk: $345 (spread width $5.00 - $1.55 credit) Days in Trade: 14 Close: "BTC all legs @ $0.60 net debit ($60 total)" Realized P&L: +$95 (+27.5% return on risk) ToS CSV Rows: 8 rows (4 open legs + 4 close legs, no grouping) Emotional State: Calm at entry; mild anxiety on day 7 when SPY spiked near 478 Lesson: Hold through first test of short strike if IV is still elevated — closing early on day 7 would have cost $40 of the $95 profit
Review Process
Export CSV weekly — Monitor tab → Account Statement → set Monday-to-Friday date range → click the camera/export icon → save as CSV. In the post-Schwab migration interface, the same path is labeled Statements under the Accounts menu.
Reformat the Exec Time column — MM/DD/YYYY HH:MM:SS does not sort correctly in Excel or Google Sheets without converting to ISO format (YYYY-MM-DD) first.
Group multi-leg trades manually or via import — sort by Symbol, Exp, Strike, Type, then pair BTO/STO rows with matching BTC/STC rows. Flag any row where Qty does not match your intended position size, which indicates a partial fill.
Apply futures multipliers before calculating dollar P&L — /ES: price difference × $50; /MNQ: price difference × $2; /CL: price difference × $1,000. A 10-point /ES move on 1 contract = $500, not $10.
Tag each grouped trade with strategy, setup, and market condition — these fields are absent from the CSV and must be added at review time to support any meaningful pattern analysis.
Review win rate and return-on-risk by strategy tag monthly — iron condors and verticals have structurally different P&L distributions; mixing them in a single win-rate metric produces misleading results.
Compare paper trading vs live results quarterly — export both accounts separately and run the same metrics to identify if simulated performance overstates live edge.
thinkorswim (ToS), now operated by Charles Schwab following its $26 billion acquisition of TD Ameritrade in October 2020, serves an estimated 11 million-plus brokerage accounts — a large share of which are active options and futures traders. Despite its institutional-grade charting and paper trading tools, ToS has no native journal. Every trade analysis workflow starts with a CSV export, and that export has specific quirks — multi-leg row fragmentation, missing futures multipliers, and post-Schwab UI changes — that make manual journaling error-prone at scale.
Essential Fields to Track
| Field | Why It Matters |
|---|---|
| Exec Time | MM/DD/YYYY HH:MM:SS format — must reformat before sorting; essential for sequencing partial fills |
| Side (BTO/STO/BTC/STC) | Only signal that distinguishes opening from closing transactions; no grouping column exists |
| Symbol / Exp / Strike / Type | All four must match to pair an open leg with its closing leg in options spreads |
| Qty | Partial fills produce multiple rows; summing Qty confirms complete position closure |
| Net Price | Reflects actual fill after fees — more accurate than the raw Price column for P&L calculation |
| Futures Multiplier | Absent from CSV; /ES = $50/pt, /MNQ = $2/pt, /CL = $1,000/contract — apply before logging dollar P&L |
| Strategy Tag | Not in the export; add at import to enable filtering by structure (vertical, condor, naked) |
| Paper vs Live | Export source must be tagged to keep simulated and live results separate |
| Emotional State | No broker captures this; log at import while the trade context is fresh |
| Setup / Thesis | CSV has no notes fields; one sentence added at import is all that separates useful review from raw data |
The two most critical fields for thinkorswim traders are Side and Net Price. Side is the only column that lets you reconstruct which rows belong to the same trade; Net Price is the only column that gives you accurate cost basis after commissions. Both are frequently misused when traders work directly in spreadsheets.
Sample Journal Entry
Date: April 10, 2026 Account: Live (thinkorswim / Schwab) Strategy: Iron Condor — SPY 14-day expiry Open: STO 1 SPY 480C @ $1.20 + STO 1 SPY 460P @ $1.10 / BTO 1 SPY 485C @ $0.40 + BTO 1 SPY 455P @ $0.35 Net Credit: $1.55 ($155 per spread) Max Risk: $345 (spread width $5.00 minus $1.55 credit) ToS CSV Rows at Open: 4 rows, no grouping Close: BTC all legs @ $0.60 net debit ($60 total) — 8 rows total across open and close Realized P&L: +$95 (+27.5% return on risk) Days in Trade: 14 Emotional State: Calm at entry; mild anxiety on day 7 when SPY spiked to 477.80 Lesson: Short strike tested but IV remained elevated — holding through the spike was correct; exiting early on day 7 would have surrendered $40 of the $95 profit
Review Process
-
Export weekly — Monitor tab → Account Statement → set Monday-to-Friday date range → camera/export icon → CSV. In the post-Schwab migration interface (2024–2025), navigate to Accounts → Statements to find the equivalent export. Paper money accounts require a separate export from the same path while logged into the paper trading session.
-
Reformat timestamps — The Exec Time column uses MM/DD/YYYY HH:MM:SS. In Excel, apply
TEXT(A2,"YYYY-MM-DD HH:MM:SS")to convert; in Google Sheets useTEXT(A2,"yyyy-mm-dd hh:mm:ss"). Skip this step and your sort order will be wrong, breaking partial-fill matching. -
Group multi-leg trades — Sort by Symbol, then Exp, then Strike, then Type. Pair each BTO/STO row with its matching BTC/STC row. For the SPY iron condor example above, you will match 8 rows (4 open + 4 close) to reconstruct a single trade. Flag rows where Qty totals do not match your intended contract count — those are partial fills that need sub-grouping.
-
Apply futures multipliers — Before recording any futures dollar P&L, multiply price difference by the contract multiplier. A 10-point gain on one /ES contract at open 5,200 and close 5,210 = 10 × $50 = $500. The CSV will show a $10 price change, not $500 — any spreadsheet that skips this step will misstate P&L by 50x on /ES.
-
Add strategy tags and thesis — The CSV has no notes, tags, or strategy fields. Add a one-line setup description and strategy tag (e.g., “iron condor — range-bound SPY ahead of FOMC”) immediately at import while recall is accurate.
-
Review return-on-risk by strategy monthly — Iron condors and credit spreads have different win-rate and P&L distributions. A blended win rate across structures is not actionable. Filter by strategy tag and review average return-on-risk, max adverse excursion, and days-in-trade separately for each structure.
-
Compare paper vs live quarterly — Run identical metrics on each export source. If paper trading win rate exceeds live win rate by more than 5 percentage points, investigate execution slippage, emotional discipline differences, or position sizing inconsistencies.
Common Mistakes in thinkorswim Journaling
-
Using Price instead of Net Price — The ToS CSV includes both columns. Price is the raw execution price; Net Price reflects commissions. On a 10-contract options trade with $0.65/contract fees, the difference is $6.50 per leg — material on short-dated options where credits are $0.50 or less.
-
Treating each CSV row as a complete trade — The export produces one row per execution event, not one row per trade. An iron condor with 4 legs generates 4 rows at open. If any leg fills in two partial executions, open rows jump to 6. Journaling rows individually makes net P&L impossible to calculate and inflates apparent trade count.
-
Skipping the futures multiplier — Because ToS exports price per point, not dollar P&L, every futures trade logged without applying the multiplier is wrong by the full multiplier factor. /ES at $50/point means a 20-point loss on 2 contracts is $2,000 — not $40.
-
Omitting paper trading from the review — ToS paper money is a separate account with a separate export. Traders who use it for strategy testing but never journal the results are running experiments with no data. Importing paper trades into a separate journal account and running the same metrics as live trading is the only way to validate whether a setup has real edge.
-
Waiting until the monthly review to add trade notes — The CSV contains no thesis, no market context, and no emotional data. Waiting weeks to annotate trades means reconstructing intent from memory. Adding a one-sentence thesis at the time of import — even “SPY range-bound into FOMC, selling premium” — makes monthly reviews 10x more useful.
How JournalPlus Handles thinkorswim Trades
JournalPlus accepts the ToS account statement CSV directly. On import, it parses the BTO/STO/BTC/STC side codes and groups rows by symbol, expiration, strike, and type into unified trade entries. The SPY iron condor example — 8 CSV rows across open and close — becomes a single journal entry with net credit ($1.55), max risk ($345), realized P&L (+$95), return-on-risk (27.5%), and days-in-trade (14) calculated automatically. No manual row-matching required.
For futures trades, JournalPlus applies contract multipliers automatically on import — /ES at $50/point, /MNQ at $2/point, /CL at $1,000/contract — so dollar P&L is correct without spreadsheet formulas. The thinkorswim integration page covers the exact import steps, including how to handle the post-Schwab migration export path and how to import paper trading exports into a separate practice account within the same JournalPlus workspace.
The how to journal options trades guide and how to journal futures trades guide cover the field-level documentation practices in detail. For tax reporting, the journaling for tax reporting guide explains how properly grouped trade entries map to Schedule D and Form 8949 — a particular concern for ToS users who trade both equities and Section 1256 futures contracts in the same account.
Not tax or financial advice. Tax rules change yearly and individual situations vary. Consult a CPA familiar with active-trader tax rules before applying any of this to your filing.
Common Journaling Mistakes
Using the Price column instead of Net Price — ToS CSV includes both; Price is the raw fill, Net Price reflects commissions. Using Price overstates profits on high-frequency or multi-leg trades.
Treating each CSV row as a trade — the export produces one row per execution, not one row per trade. An iron condor with 4 legs that partially fills across 2 executions per leg generates 8 rows for the open alone. Journaling each row separately makes P&L calculations impossible.
Skipping the futures multiplier column — because ToS exports price per point rather than dollar P&L, a trader who records /ES trades without applying the $50 multiplier will see a 10-point winning trade logged as +$10 instead of +$500.
Ignoring paper trading exports — ToS paper money accounts export separately and are easy to skip. Traders who use paper trading to test strategies but never journal those results miss the feedback loop that validates whether a setup works before risking real capital.
Not recording the thesis at import time — waiting until the weekly review to add trade notes means relying on memory to reconstruct why a position was opened. Adding a one-sentence thesis immediately after import, while the trade is fresh, produces far more actionable review data.
Frequently Asked Questions
How do I export my trade history from thinkorswim?
In the ToS desktop app, go to Monitor tab → Account Statement → set your date range → click the camera icon to export as CSV. In the post-Schwab migration interface (2024–2025), the equivalent path is Accounts → Statements. The CSV includes execution time, side, quantity, symbol, expiration, strike, type, price, and net price.
Why does my thinkorswim CSV show multiple rows for one options trade?
ToS exports one row per execution leg, not per trade. A four-leg iron condor generates four rows at open and four more at close — eight total — with no grouping column. You must match legs manually by symbol, expiration, strike, and type to reconstruct the full trade and calculate net P&L.
How do I calculate futures P&L from a thinkorswim export?
The ToS CSV exports price per point, not dollar P&L. Multiply the price difference by the contract multiplier: /ES = $50 per point, /MNQ = $2 per point, /CL = $1,000 per contract. A 10-point gain on one /ES contract is $500, not $10.
Can I journal thinkorswim paper trading separately from live trades?
Yes. ToS paper money accounts export separately from live accounts via the same Monitor → Account Statement path. Import both into your journal and tag each trade's source account to prevent simulated results from distorting live performance metrics.
Does thinkorswim have a built-in trade journal?
No. thinkorswim has no native journal feature. The platform provides powerful charting, scanning, and paper trading tools, but trade documentation requires exporting the account statement CSV and importing it into a dedicated journal application.
Start Journaling Your Trades
Stop guessing, start tracking. JournalPlus makes it easy to journal every trade and find your edge.
Buy Now - ₹6,599 for Lifetime Buy Now - $159 for Lifetime7-day money-back guarantee