Almost every backtest models trading cost as a single percentage. Subtract 0.1% per round trip,
move on. It is the most common shortcut in the whole discipline, and it is wrong in a way that
does not average out — it is wrong in different directions depending on your order size, your
broker, and the calendar year of your data.
This guide is about building a fee model that is actually right, and what it changes when you do.
The measurement behind it is our own: we priced [36,947 real round trips at four US
brokers](/research/how-much-do-day-trading-commissions-cost-four-us-brokers-36-947-real-t) using
each broker's published schedule on the actual date of the trade.
1. Why a flat percentage cannot be right
A percentage assumes cost scales with the money you trade. Most of the real components do not.
Take the most common US retail schedule that is not free: **$0.005 per share, with a $1.00 minimum
per order and a cap of 1% of trade value.** Three different rules, and which one binds depends
entirely on your order.
A $1,000 order in a $26 stock is 38 shares. At $0.005 per share that is 19 cents — but the minimum
is $1.00, so you pay $1.00. Each side, so $2.00 round trip. As a percentage that is **24 basis
points
. The same schedule on a $5,000 order works out near 11bp**, because the minimum has
stopped binding.
One schedule, one broker, and the percentage moved by more than a factor of two purely from order
size. No single number can represent that. If you pick one, you are choosing which order size to be
correct about.
2. The four things you are actually paying
A fee model that behaves correctly needs these as separate terms, each computed in dollars per
trade, not as a blended percentage.
Commission. Per share, or per order, or zero. If per share, it needs the minimum and the cap:
clamp(rate x shares, minimum, cap x notional). Commission-free brokers make this term zero, which
is why they are worth checking before anything else.
SEC Section 31 fee. Charged on
sale proceeds only, not on buys. A rate per million dollars.
FINRA Trading Activity Fee. Charged
per share sold, with a maximum per order. Also sells
only.
Rounding. Regulatory fees are rounded up to the nearest cent. That sounds too small to model
until you have a lot of small orders: 38 shares of TAF is well under a cent of true cost and still
bills a full cent. Skipping the rounding understates cost on exactly the trades where cost matters
most.
Note what is missing from that list. Nothing here is a percentage of the trade except one small
term, which is why the flat-percentage shortcut breaks.
3. Regulatory fees change with the date
This is the part that surprises people, and it is easy to get wrong in a backtest because the code
usually has one constant in it.
SEC Section 31, on sale proceeds:
| Period | Rate |
| 2024-08-05 to 2025-05-13 | $27.80 per $1M |
| 2025-05-14 to 2026-04-03 | $0 |
| 2026-04-04 onward | $20.60 per $1M |
FINRA TAF, per share sold, capped per order:
| Year | Per share | Cap per order |
| 2024-2025 | $0.000166 | $8.30 |
| 2026 | $0.000195 | $9.79 |
Read the middle row of the first table again.
The SEC fee was zero for nearly eleven months.
57.2% of the trades in our sample fell inside that window.
So if you backtested over that period with a hardcoded SEC fee, you charged your strategy for
something nobody collected. And if you built your model during that window and are still running
it, you are now under-charging, because the fee came back in April 2026.
A fee model needs the date of the trade, not a constant.
4. Order type changes fees on crypto, not on US stocks
A reasonable assumption imported from crypto: limit orders are cheaper because they add liquidity.
On crypto exchanges that is true — maker and taker rates differ and your order type decides which
you pay. Your model needs both rates and needs to know which side of the book each fill landed on.
On US stocks, for commission-free brokers and the fixed per-share plan, **the commission is the
same either way**. Order type changes what you pay the market, not what you pay the broker. The
exception is plans that pass exchange fees and rebates through to you, where adding or removing
liquidity does change the bill — if you are on one of those, check your own schedule rather than
assuming.
Getting this backwards in either direction is a real error: modelling maker/taker on US equities
invents a discount that does not exist, and ignoring it on crypto understates cost on every taker
fill.
5. What this actually changes
Until version 1.2.4, our own app used a single fixed number for US stock fees: roughly **0.13% per
round trip
, regardless of broker. On a commission-free broker the true figure is about 0.004%**.
That is not a rounding difference. Backtests were
overstating costs by more than 30x, which
means every strategy that failed a cost test in the app may have failed against a bill nobody was
sending. We wrote that number ourselves and it was wrong, so this is not a hypothetical failure
mode.
The direction matters too. Overstating cost kills real edges quietly; understating it ships
strategies that lose money live. A wrong fee model does not produce noise, it produces a consistent
bias in one direction, and you cannot tell which until you check.
6. Setting it up in the app
In Settings, selecting your exchange now loads that broker's real schedule: per-share commission
with order minimums and caps for US stocks, SEC and FINRA TAF on sells, and maker/taker rates for
crypto. Every value is editable, and what you save applies identically to backtesting and to
paper and live trading — one number, not two that drift apart.
If you have results from before 1.2.4 that you were relying on, they used the old fixed rate.
Re-run them.
7. What a fee model still does not cover
Fees are the part with a published schedule. They are not the whole cost, and they are usually not
the biggest part.
The spread is not a fee and it is generally larger. A $5,000 market order in a $5-20 stock pays
about 38 basis points one way against
the mid — an order of magnitude more than commission-free fees.
Depth is not a fee either. Beyond the size resting at the quote you pay worse prices, and no
fee schedule describes that.
Price improvement and rebates run the other way and we do not model them, which makes our
figures slightly pessimistic for brokers that pass them back.
Get the fees exactly right anyway. They are the one component you can compute to the cent, and
being precise about the knowable part is what lets you see the size of the parts you have to
estimate.