How to Journal Webull Trades
To journal Webull trades, export order history CSV (Account → Orders → Order History → Export), pair buy/sell rows by Order ID, then import into a journal to calculate R-multiple and tag setups.
Buy Now - ₹6,599 for Lifetime Buy Now - $159 for Lifetime7-day money-back guarantee
Fields to Track
Export Date Range
Webull caps each export at 90 days — tracking which ranges you've pulled prevents gaps in your journal history
Order ID
Partial fills on the same order share one Order ID; aggregating by this field gives you the true average fill price
Symbol (OCC Format)
Options symbols encode strike and expiry inline (e.g. SPY 230915P00440000) — misreading this field makes P&L wrong by 100x
Side (BUY/SELL)
Webull lists entries and exits as separate rows; correctly pairing sides is the first step to calculating realized P&L
Average Fill Price
Multi-fill orders need a quantity-weighted average before any P&L math is valid
Setup Tag
Webull's native Performance tab has no setup field — adding this manually during import is what enables setup-level win rate analysis
Stop Price at Entry
Required to calculate R-multiple; Webull never records this, so it must be added manually
R-Multiple
Converts raw dollar P&L into a normalized metric that reveals whether a setup has a positive expected value
Time of Day
Webull exports include timestamps — segmenting performance by session (open, mid-day, close) often reveals a trader's sharpest edge window
Sample Journal Entry
Date: 2026-04-14 (Monday) Ticker: AMD Side: Long equity Entry: "200 shares @ $162.40 — earnings gap-up, first 5-min candle close above pre-market high" Exit: "200 shares @ $167.80 — sold into resistance at prior day high" Gross P&L: +$1,080 ($5.40 x 200 shares) Stop: $160.00 (below gap-fill level) Risk: $480 ($2.40/share x 200) R-Multiple: +2.25R Setup Tag: earnings-momentum Emotion: Confident — entry criteria fully met before size was added Lesson: Gap-up setups with a clean catalyst and above-average volume hold intraday trends better than technical breakouts alone
Review Process
Export CSV — Pull the current 90-day window from Webull desktop (Account → Orders → Order History → Export). Set a calendar reminder to do this quarterly so you never lose data beyond the 90-day limit.
Aggregate partial fills — Group rows by Order ID and calculate a quantity-weighted average fill price before importing. Partial fills on the same order share one Order ID in the raw CSV.
Pair entries to exits — Match BUY and SELL rows by Symbol and chronological order to create complete trade records with a single realized P&L figure.
Decode options symbols — For options rows, parse the OCC-format symbol to extract underlying, expiry, call/put, and strike. Multiply contract P&L by 100 to get dollar value.
Add missing fields — Enter stop price, setup tag, and emotional state for each trade. These fields do not exist in Webull's export and cannot be recovered retroactively.
Calculate R-multiples — Divide realized P&L by initial dollar risk (entry price minus stop, multiplied by shares/contracts) for every trade.
Weekly review — Filter the past week's trades by setup tag in JournalPlus. Compare win rate and average R per setup, then flag any setup with fewer than 3 wins in 10 attempts for reduced size or suspension.
Webull’s zero-commission structure and free Level 2 data have made it the platform of choice for a large cohort of US retail traders, but its native Performance tab stops at net P&L and win/loss count — there is no support for setup labels, R-multiple tracking, psychological tags, or time-of-day analysis. Journaling Webull trades requires an extra step that most other broker guides skip: the raw CSV export contains individual fill rows, not matched trades, so a pairing step is mandatory before any meaningful analysis is possible. Traders who build this workflow correctly gain access to the setup-level statistics that determine whether a trading edge actually exists.
Essential Fields to Track
| Field | Why It Matters |
|---|---|
| Export Date Range | Webull caps each pull at 90 days — logging which ranges you’ve exported prevents permanent data loss |
| Order ID | Partial fills share one Order ID; aggregating by it produces the true average fill price |
| Symbol (OCC Format) | Options symbols encode strike and expiry inline — misreading adds a 100x multiplier error to P&L |
| Side (BUY/SELL) | Each trade appears as two separate rows; pairing them is the prerequisite for any P&L calculation |
| Average Fill Price | Multi-fill orders require a quantity-weighted average before entry or exit price is meaningful |
| Setup Tag | Webull has no setup field — adding this during import is what makes win-rate-by-setup possible |
| Stop Price at Entry | Not recorded by Webull; must be entered manually to enable R-multiple calculation |
| R-Multiple | Normalizes P&L across different position sizes so setups can be compared on equal footing |
| Time of Day | Webull timestamps allow session-level analysis — many traders find their edge concentrated in the first 90 minutes |
The two most critical fields are Setup Tag and Stop Price at Entry. Without the stop price, R-multiple is permanently unavailable for that trade. Without a setup tag, every analytical filter in your journal collapses into an undifferentiated mass of trades.
Sample Journal Entry
Date: April 14, 2026 Ticker: AMD Side: Long equity Entry: 200 shares @ $162.40 — earnings gap-up, first 5-min candle close above pre-market high Exit: 200 shares @ $167.80 — sold into resistance at prior day high Gross P&L: +$1,080 ($5.40 x 200 shares) Stop: $160.00 (below gap-fill level) Risk: $480 ($2.40/share x 200) R-Multiple: +2.25R Setup Tag: earnings-momentum Emotion: Confident — entry criteria fully met before size was added Lesson: Gap-up setups with a clear catalyst hold intraday trends better than pure technical breakouts
In Webull’s raw Order History CSV, this trade appears as exactly two rows: one BUY row (200 shares @ $162.40) and one SELL row (200 shares @ $167.80). The Performance tab records a $1,080 gain but nothing else. Importing into a dedicated journal, pairing the legs, and adding the stop price reveals this is a 2.25R winner — and tagging it “earnings-momentum” allows the pattern to accumulate: over three months this setup shows a 62% win rate and 1.9R average, making it the trader’s highest-expectancy setup.
Review Process
-
Export quarterly — Pull each 90-day window from Webull desktop (Account → Orders → Order History → Export CSV). Schedule this as a recurring calendar event. Missing a window means that history is gone permanently once it rolls off Webull’s servers.
-
Aggregate partial fills — In the raw CSV, group all rows with the same Order ID. Calculate a quantity-weighted average fill price: sum (qty × price) across all fills, divide by total quantity. Treat the aggregated record as a single fill event.
-
Pair entries to exits — For each Symbol, match BUY rows to SELL rows in chronological order. Calculate realized P&L: (exit price − entry price) × shares. For short trades, reverse the sign.
-
Decode options symbols — Parse OCC-format symbols to extract the underlying, expiry date, call/put flag, and strike. For example, SPY 230915P00440000 = SPY Sep 15 2023 $440 Put. Multiply per-contract P&L by 100 to get the dollar value.
-
Add missing fields — Enter stop price, setup tag, and emotional state for each trade immediately after import while memory is fresh. These fields cannot be recovered from the CSV later.
-
Calculate R-multiples — Divide realized P&L by initial dollar risk (entry minus stop, multiplied by shares or contracts × 100 for options) for every trade before running any analysis.
-
Weekly setup review — Filter the past week’s trades by setup tag. For each setup with 10 or more trades, check win rate and average R. Any setup below breakeven expectancy (win rate × avg winner − loss rate × avg loser is less than 0) should be flagged for size reduction or suspension.
Common Mistakes in Webull Journaling
-
Importing each CSV row as a separate trade — Each fill row is not a trade. Treating them as trades inflates trade count, corrupts average fill prices, and makes win rate calculations meaningless. Always aggregate by Order ID before import.
-
Letting the 90-day window expire — Webull does not archive order history beyond what the desktop UI exposes. Traders who wait six months to start journaling discover they cannot recover their earlier trades. Export before each window closes.
-
Leaving stop price blank — Without a recorded stop at the time of the trade, R-multiple cannot be calculated for that record. A journal full of trades with no R data cannot answer whether any given setup has positive expected value.
-
Forgetting the options contract multiplier — The Webull CSV shows options values per contract. Not multiplying by 100 before import understates both gains and losses by exactly 100x, making every options performance metric wrong.
-
Only importing trades after good weeks — Selective import creates survivorship bias in win rate and average R figures. The only meaningful journal is a complete one. Import every trade, including the stops and the mistakes.
How JournalPlus Handles Webull Trades
JournalPlus accepts Webull order history CSVs through the CSV upload tool. The importer recognizes Webull’s column headers — Time, Symbol, Side, Qty, Average Fill Price, Status — and maps them automatically. Partial fills that share an Order ID are flagged during the upload review step, allowing traders to confirm aggregation before matched trades are created. Options symbols in OCC format are parsed to extract underlying, expiry, call/put type, and strike automatically, and the 100x multiplier is applied to contract-level P&L.
After import, each trade opens in an edit view where stop price, setup tag, and emotional state can be added. The setup tag field drives the analytics filters — the weekly review report in JournalPlus segments win rate, average R, payoff ratio, and max consecutive losses by setup tag, which is the analysis that Webull’s Performance tab cannot produce. For traders active across day trading and options strategies, the same import pipeline handles both instrument types in one pass.
For tax preparation, JournalPlus exports matched trade data as a Schedule D-compatible summary. The Webull 1099-B covers realized gains, but traders who take the Trader Tax Status election or trade Section 1256 contracts need the setup-level detail that only a dedicated journal provides.
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
Skipping partial-fill aggregation — Importing each CSV row as a separate trade inflates trade count and produces incorrect average fill prices. Always group by Order ID first.
Ignoring the 90-day export cap — Traders who export only when they remember often discover they've lost several months of history. Set a recurring quarterly export reminder the moment you start journaling.
Omitting the stop price field — Without a recorded stop, R-multiple cannot be calculated. Leaving this field blank means setup-level expected value is permanently unmeasurable for those trades.
Misreading the options contract multiplier — Webull's CSV shows options P&L per contract, not per share. Failing to multiply by 100 understates gains and losses by exactly 100x, distorting every performance metric.
Only importing winning trades — Selectively importing trades biases win rate upward and hides the true drawdown profile of each setup, making it impossible to identify which setups are actually profitable.
Frequently Asked Questions
How do I export my trade history from Webull?
On Webull desktop, go to Account → Orders → Order History, select a date range (maximum 90 days per export), and click Export CSV. Repeat for each 90-day window to cover a full year.
Why does Webull's CSV show two rows per trade instead of one?
Webull records each fill event separately — a buy and a sell appear as individual rows. To calculate realized P&L per trade, you must match the BUY row to its corresponding SELL row by Symbol and timestamp.
How do I read Webull's options symbol format?
Webull uses the OCC standard format — for example, SPY 230915P00440000 means SPY, expiring September 15 2023, Put, strike $440.00. The strike is encoded as the dollar value multiplied by 1,000.
What metrics does Webull's Performance tab not show?
Webull's Performance tab shows net P&L and win/loss count but omits R-multiple, payoff ratio, setup-level win rate, max consecutive losses, and time-of-day performance — the metrics that reveal why you win or lose.
Can I import Webull CSV directly into JournalPlus?
Yes. JournalPlus accepts Webull-format CSVs via the CSV upload tool. The importer maps Webull's column headers automatically and flags partial fills for aggregation before creating matched trade records.
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