Scorefio · case study · BTCUSDT · 222 round tripsbeta

A BTC strategy that looks profitable and is not

222 round trips on BTCUSDT, costed at $10,000 per trade against binance, over 29 Apr 2026 to 29 Aug 2026.

00

What this shows

This is the report that explains why backtests disappoint. The strategy is MACD 12/26/9 on BTCUSDT hourly perpetuals — no optimisation, no curve fitting, a textbook signal anyone can reproduce in an afternoon.

A strategy tester with its default settings reports this in profit. It applies zero commission, zero slippage and a fill at exactly the closing price of the bar that produced the signal. None of those three things is true, and they are not small.

Below is the same trade list costed against what Binance actually charges, the funding actually settled over the holding periods, and the drift between a signal bar's close and a fill some minutes later. Every figure carries the basis it came from. Where we have no basis, the line says Unavailable rather than guessing.

The point is not that this strategy is bad. It is that the version of it you were shown and the version you would have traded are different strategies, and nothing in the tester tells you which one you are looking at. The breakeven line further down says what cost level this signal could survive — which is the number worth having before you fund an account, not after.

This is a real report, not an illustration

Everything below was produced by the same engine that costs an upload, from the same market data, and is rendered by the same template. Upload your own trade list to get one for your strategy.

New to these terms? Open this first
bps
A basis point: one hundredth of one percent. 100 bps = 1%. 10 bps = 0.1%. On a $10,000 trade, 1 bps is $1.
round trip
One complete trade — getting in and getting out. Most costs are charged on both sides, so a 5 bps fee is 10 bps per round trip.
gross / net
Gross is what the strategy made before any cost. Net is what is left after them. Your backtest almost certainly reported gross and called it net.
taker / maker
A taker order crosses the spread and fills immediately, at the higher fee. A maker order rests in the book and waits, at the lower fee. A limit order that crosses is still charged as a taker.
funding
On a perpetual future, a payment between longs and shorts at fixed intervals. Holding a position through one means paying or receiving it. Not every symbol settles every 8 hours — about half do not.
impact / spread at size
What it costs to actually fill your order size by eating through the order book — as opposed to the quoted spread, which only applies to a tiny order.
signal-to-fill drift
How far the price moved between your signal firing and your order actually filling. A backtest assumes these are the same moment. They are not.
breakeven
The cost level at which the strategy's edge disappears. Above it you lose; below it you keep something. This is the number the report is really for.
band
The range the true figure plausibly sits in, given how few trades there are. A band that crosses zero means the result could go either way and the sample cannot tell you which.
containment
Our check that each fill sits inside the price range its bar actually traded. A fill outside it means the wrong symbol, venue, or timezone — or invented data.
in-sample
A rule chosen by looking at the same data it is then scored on. It always looks good in hindsight and rarely survives contact with next month.
01

Verdict

No edge, before any cost

Costs didn't kill this: it loses 3.5 bps per trade before any cost is applied.

Total costs are 11.0 bps, so they are not the problem — your execution setup is fine. The signal has no edge in this period, so the thing to change is the signal, not the venue or the order type. The range on the net figure is -30 to +1, so while the mean is negative the sample alone cannot rule out a small positive edge.

gross, before any cost -3.5 bps
total cost, per round trip −11.0 bps
net per trade, as configured -14.5 bps
net per trade, maker-only -8.5 bps
90% band: -30.4 to +1.2 bps. The band touches zero, so this result is not proven either way — 222 trades cannot separate it from chance. What would settle it is more trades, not a tighter cost model.
Platform promised
−$776
over 222 trades at $10,000 each
As configured you'd have got
−$3,224
same trades, real costs
Difference
$2,448
what finding this out before going live is worth
02

Input validation

containment — fills inside their bar's traded range (ε 0.05%) 100.0% · proceed
bar-close execution fingerprint 100% · signal-to-fill drift applies
sample size 222 trades
  • bar-close execution detected; signal-to-fill drift applies
03

Cost stack

Basis points per round trip, where a negative number is a credit rather than a cost. Every line names the basis it came from; a line with no basis shows no number.

Component bps Band Basis Note
Fees 10.0 Published binance regular taker, round trip — schedule not yet verified against source
Funding 0.0 Published exact, 500 settlement records at 8h intervals
Signal-to-fill drift 0.9 -29.3 … +19.7 Measured a + b*body fit from 93 signals over 45d (sma_cross_1h); this list looks like macd_1h, so the fit is borrowed from a different signal family and the band matters more than the point. No comparison against live fills has been run yet. Adverse selection is a model.
Impact at your size 0.1 Measured your $10,000 order priced at the $25k rung — the nearest depth we sample at or above it, so this is the conservative side. Both sides, median of 8 L2 samples on binance.
Total 11.0 All components have a basis.
04

Funding, per trade

Funding is reported as a distribution because its mean is misleading. Positive means you paid.

p5
-1.7
p25
-0.5
median
+0.0
p75
+0.6
p95
+2.1
largest single
6.0
settlement interval for this symbol every 8h
windows crossed, average per trade 1.6
trades where funding exceeded fees 0.0%
On holds this short funding genuinely is negligible — the tail never reaches the fee line.
05

Breakeven and venues

gross edge per round trip-3.5 bps
fee budget this strategy survives at -4.5 bps rt · -2.3 per side
VenueTaker rtNet / trade Net totalSurvivesMaker netFee source
binance 10.0 -14.5 −$3,224 NO -8.5 Published · unverified
okx 10.0 -14.5 −$3,224 NO -8.5 Published · unverified
kraken 10.0 -14.5 −$3,224 NO -8.5 Published · verified
bybit 11.0 -15.5 −$3,446 NO -8.5 Published · unverified
06

What would change it

Gain is measured against the configuration you uploaded. "Clears" means this lever alone takes the strategy above zero.

LeverWhat it changesGain Net afterClearsBasis
Maker instead of taker fees 10 -> 4 bps rt +6.0 -8.5 no fee catalogue
Best venue at your size (bybit) impact 0.4 -> 0.1 bps rt vs worst venue +0.0 -14.5 no sampler
Exit before window 4 caps funding on 32 trades held > 3 windows +0.0 -14.5 no 05 funding dist
Skip signals on bars > 58 bps body drops 56/222 trades; adverse slope 0.019/bp -5.8 -20.3 no 07 adverse fit
Maker + best venue (combined) the two independent execution levers together +6.0 -8.5 no combined
One of these is not a fix

Skip signals on bars > 58 bps body selects trades using the same data it is scored on. The gain shown is what the filter would have earned in hindsight, which is not what it would earn next month. Treat it as a hypothesis to forward-test, never as a change to make today.

WORTH TESTING · NOT SIZED

Try a slower timeframe

You traded 222 times in 122 days — about 12.7 round trips a week.

This signal loses before any cost, so no execution change rescues it — but a slower chart is a different signal, not a different fill. In our own case studies the same rules on 4-hour bars turned both losing strategies into winning ones.

Re-run the same strategy on a higher timeframe in your platform and upload that trade list too. We will cost it the same way, and you can compare the two directly.

This carries no number on purpose. We receive your trades, not your rules, so we cannot compute what those rules would have done on different bars. Rather than estimate it, we are telling you it is worth testing.

Read this before pulling a lever

This strategy loses before any cost is applied, so no execution lever rescues it — the levers above are shown for completeness. The one exception is a timeframe change, which alters the signal itself rather than how it is filled.

07

Survival and sensitivity

Winners, gross
76 / 222
Winners, after costs
72 / 222
at 10.0 bps round trip
Trades that stopped working
4

Net per trade against assumed round-trip cost

Assumed cost (bps rt)Net per trade (bps)
0 -3.5
5 -8.5
10 -13.5
15 -18.5
20 -23.5
30 -33.5
08

Provenance

What produced this report. If any input is later corrected, this is how we find the reports it affected and tell you.

model version0.1.7
generated03 Sep 2026
adaptergeneric_csv
price databinance-futures-1h
fee schedule versions4 referenced
calibration records adverse:BTCUSDT:sma_cross_1h
fee lines not yet verified against source binance:regular, bybit:regular, okx:regular

An unverified line means we hold the venue's published figure but have not yet confirmed it against the source this month. It is labelled everywhere it is used.

The other studies

Cost your own trade list. Free, no account.