Docs · How fees work
How fees work
How Thesis tracks broker fees on every trade — equity vs. crypto, modeled (paper) vs. broker-reported (live), and where each number shows up in the UI.
Every closed trade in Thesis has a recorded fee alongside its gross P/L. The relationship is always:
Net P/L = Gross P/L − Fee
The fee number’s source depends on the asset class and whether you’re on paper or live.
Equity fees
Alpaca charges $0 commission on US equities today. Thesis records fee = 0 on equity trades, which is the truth.
Starting 2026-06-01, Alpaca introduces a Consolidated Audit Trail (CAT) fee at $0.000003 per share for NMS equities. Thesis models this in the background — on any realistic position it’s sub-penny, but we track it for ledger correctness so your total P/L reconciles to your Alpaca balance cleanly.
You won’t see a meaningful “fee” number on equity trades until CAT activates, and even then it’ll be cents.
Crypto fees — the two regimes
Crypto is where the gross/fee/net distinction actually matters. Alpaca crypto is a spread-based market, not a per-trade commission. The round-trip cost is roughly 0.5% of notional — meaning a $200 position pays around $1.00 to enter and exit.
There are two regimes for how Thesis knows this number:
Modeled (paper mode)
Alpaca’s paper trading API doesn’t return crypto fee rows. So at close time, Thesis estimates the round-trip cost as 0.1875% per side of the notional value at entry and exit.
The 0.1875% rate is calibrated to match what Alpaca’s live spread costs end-to-end. Result: a paper crypto trade shows a fee within a few cents of what the same trade would cost live.
These fees are labeled (modeled) in the UI — Fee breakdown panel header, trade-log subtitle, position detail. The label is your reminder: this is our model output, not a broker-billed number.
Broker-reported (live mode)
On a live Alpaca account, Thesis polls Alpaca’s activity log every few minutes, sums the fee/commission/CAT rows for each closed order, and writes the real broker fee to your trade ledger. That overwrites the initial modeled estimate.
Result: closing a crypto trade live, you’ll see a modeled fee for the first few minutes; then the real broker-billed number lands. The two are typically within $0.05.
The (modeled) label disappears once a live connection is active.
Where you’ll see fees in the UI
| Surface | What you see |
|---|---|
| Trade-log row | −$0.53 net (big) + +$0.83 gross · $1.36 fee (subtitle) |
| Position detail headline | Same shape as trade-log |
| Position detail “Fee breakdown” panel | Three columns: Gross P/L · Fee · Net P/L, plus X% of gross and Y% of notional ratios |
| Exit narrative | Result: −$0.53 net (+$0.83 gross · $1.36 fee). |
| Dashboard open positions | Net P/L only (card is too tight for the breakdown — tap in for detail) |
The format is consistent everywhere: same numbers, same labels, same separator (·).
Why we always show gross AND net
Showing only net hides whether a trade was a strategy win or a fee burden loss. Showing only gross paints rosier numbers than what your account actually realizes. Thesis defaults to net everywhere a single number is shown, with the gross + fee breakdown one click away for transparency.
That’s especially important on small accounts and high-frequency setups, where fees can eat a real percentage of edge. The Fee breakdown panel surfaces two ratios:
- % of gross P/L — what fraction of your move did fees take?
- % of notional — what’s the effective spread rate on this trade?
These are how you spot fee-burden problems before they hide in noise.
What fees do NOT include
- Slippage — the difference between your intended trigger price and the actual fill price. Tracked separately on the position-detail “What happened” narrative as positive/negative slip.
- Funding rates — Thesis doesn’t trade perps, so funding doesn’t apply.
- Taxes — your responsibility. Thesis exports closed trades for your tax software via the trade-log.
- Bid/ask spread on equity — included in your fill price implicitly. Not separately tracked.