Skip to content
URIAH CLEMMER
$ cat blog/the-fees-were-the-strategy.md

The fees were the strategy

INVESTING FEES 7 min read

Sixty-four cents of every dollar the paper account lost was commission. I wrote that sentence in the Kerdoos write-up and promised the arithmetic behind it, so here it is — starting with the fact that for seven weeks the system reported the fee bill at half its size, and why that was not a rounding error but two row shapes it had never been taught to read.

Two shapes of fee row

The broker charges a commission on crypto trades and publishes every charge as a row in an activity feed, which the ledger pulls nightly and attributes to trades. Stocks are different — there is no commission, only the regulatory fees, which came to 33 cents a trade across 789 of them — so for the stock book the ledger was always right and always boring. The crypto rows were neither.

The buy-side fee is charged in the coin. Its row carries the symbol as ETHUSD, no slash, where every other crypto row in the system says ETH/USD; its dollar field reads literally "0"; and the charge sits in a quantity field with a per-unit price next to it, described as a "Coin Pair Transaction Fee (Non USD)". The ledger's amount reader took the first numeric field it found, which was the zero. Its pair detector looked for a slash, which was absent. So the row was filed as a fee of $0.00 on an instrument it did not recognise — 818 times, for $11,693.

The sell-side fee is charged in dollars and arrives with no symbol at all. It was priced correctly, but the attributor that spreads a day's fees across that day's trades skipped any row without a symbol, since it had nothing to join on. So the sell-side fee landed in the ledger total and never reached a single trade. Every trade's fees_usd stayed null, every "net" figure on the performance page was gross, and the cooldown brake — which pauses a symbol after a run of net losses — was keyed to a number that did not include the one cost that mattered. It was blind in exactly the case it was built for.

ONE DOLLAR OF LOSS, SPLIT the whole book · $37,028 36.2 ¢ on price 63.8 ¢ in fees the crypto book alone · $28,203 17.2 ¢ 82.8 ¢ in fees · $23,352 to lose $4,851 408 crypto trades · $57 of commission each, on average 789 stock trades · 33 ¢ of regulatory fees each paper account · Alpaca fee ledger, corrected 2026-09-03

With both shapes read properly and the ledger re-run from July, the total went from $11,788 to $23,611, attributed across 1,202 trades, and the account reconciled: net after fees −$36,687 against the broker's own equity change of −$37,463, the $776 difference being open positions marked at the moment of capture. That reconciliation is the test I should have had from the first week. A fee ledger that does not sum to the account is not a ledger; it is an estimate with a database behind it.

What a 0.37 % round trip does

Here is the part that is not about my code. A crypto round trip through this broker costs about 0.37 % of the position: roughly 0.18 % to get in and 0.18 % to get out. On a $5,000 position that is $18.50, which sounds like nothing. It is not nothing, because the question is never "how much is the fee" but "how much of the trade's edge is the fee", and the trade's edge is the distance between its target and its stop.

Take a trade with a target 1 % above entry and a stop 0.5 % below — a two-to-one payoff, the book's standard geometry. With no fee it breaks even when one trade in three wins: p = S ÷ (T + S) = 0.5 ÷ 1.5 = 33 %. The fee is paid win or lose, so it subtracts from every outcome, and the break-even moves to p = (S + f) ÷ (T + S) = 0.87 ÷ 1.5 = 58 %. The fee did not change the odds of the trade. It changed how often I had to be right, from one time in three to more than one in two.

TargetStopBreak-even win rate, no feeWith a 0.37 % round trip
1 %0.5 %33 %58 %
2 %1 %33 %46 %
1 %1 %50 %69 %
0.5 %0.5 %50 %87 %
WIN RATE NEEDED TO BREAK EVEN · 0.37 % ROUND TRIP 0 %25 %50 %75 %100 % target 1 % · stop 0.5 % target 2 % · stop 1 % target 1 % · stop 1 % target 0.5 % · stop 0.5 % 33 %58 % 33 %46 % 50 %69 % 50 %87 % no fee · p = S ÷ (T + S) with fee f · p = (S + f) ÷ (T + S)

Two things to read off that table. The fee hurts in proportion to how tight the trade is: the same 0.37 % that moves a 2 %/1 % trade from 33 to 46 moves a 0.5 %/0.5 % trade from 50 to 87, because the fee is a larger fraction of a smaller distance. And a day-trading strategy is, by definition, a tight one — it is trying to take half a percent to a percent out of a five-minute chart, many times a day. The tighter the geometry, the more of each trade belongs to the broker before the market has said anything.

Now look at what the book actually did. The crypto strategies lost $4,851 on price across 408 trades — about twelve dollars a trade, which is noise, the kind of result you would expect from a coin flip with a small drift. They paid $23,352 in fees to produce it, fifty-seven dollars a trade. After the fifth of August, with a 0.5 % floor under every stop, the crypto book was −$4,091 on ninety trades with fees twenty-three times the price result: the strategies were losing about $170 on price and $3,900 to the toll booth. There was no trading problem to solve. The strategies were roughly break-even on the chart, and the chart was not where the money was going.

What changed

In the ledger: zero is never an amount; a fee row carrying a coin quantity is priced from quantity times price, falling back to the day's close; ETHUSD is a pair; and a symbol-less fee pools over that day's crypto legs, while the regulatory rows pool over the equity legs, so every fee now lands on a trade. A backfill command re-attributed the history, three tests pin the three shapes, and the ledger-to-account reconciliation is checked rather than hoped for.

In the configuration: crypto entries are off for every strategy, which is one line per strategy and is reversed the same way. The condition for reversing it is written down — a backtest that charges fees and slippage and still clears the 0.37 % round trip by a wide margin, out of sample. None has. It is worth being plain that this is not a verdict on crypto; it is a verdict on taking half-percent moves out of an instrument that charges a third of a percent to try.

The general shape

The lesson I would carry to any system that trades, or any spreadsheet that models one, is that the fee belongs on the trade, not in a footnote. A total at the bottom of a page is easy to produce and tells you nothing about which trades were worth taking; a fee attributed to each trade changes the sign of eighty-eight of them. And the number should come from the broker's ledger, not from a rate you typed in — my blended estimate of 0.183 % per side turned out to be close, and it was still the wrong source, because the estimate could not tell me that half the rows were being read as zero.

This is a paper account, and it is not advice. The win-rate arithmetic is just arithmetic — it applies to any trade with a target, a stop and a cost, in any market — but what to do with it depends on things about your own situation that I do not know. What I know is that for two months a machine paid a broker to flip coins, and reported the coins as the problem.

#kerdoos #trading #fees #crypto
CONTINUE? Questions about this one? Say hello →