Simulation and research
Crypto bot backtests: win rate is not the net result
Work through two fictional 100-trade examples, then check average wins and losses, fees, funding and open positions before comparing backtest results.
In this article
An 80% win rate can accompany a losing crypto bot backtest. The missing information is how much each win and loss contributes, and what the reported total includes. Start with an accounting check before comparing strategies.
Coinbase Engineering's October 7 fraud-agent evaluation offers a timely parallel: complementary metrics expose trade-offs that one headline score can hide. Fraud detection is not trading, and Citrine does not use that agent. The useful lesson is to inspect what a measure leaves out.
Define the denominator
Here, win rate means winning closed trades divided by all closed trades: wins, losses and breakevens. There are no breakevens in this example. Elsewhere, check whether zero-result trades are excluded and whether "winning" is measured before or after costs. Open trades, rejected orders and signals are not closed trades; counting them answers a different question.
Two strategies, 100 closed trades each
These are fictional arithmetic examples, not Citrine or customer performance and not a recommendation. Both strategies have 100 closed trades. Assume equal position sizing throughout both, no compounding, and no costs yet.
- Strategy A: 80 wins × +$5
- +$400
- Strategy A: 20 losses × -$25
- -$500
- Strategy A: total before costs
- -$100
- Strategy B: 40 wins × +$20
- +$800
- Strategy B: 60 losses × -$10
- -$600
- Strategy B: total before costs
- +$200
A wins 80/100 = 80%; B wins 40/100 = 40%. A's average win is $5 and average loss magnitude is $25; B's are $20 and $10. Across all closed trades, A averages -$1 per trade and B +$2 before costs. Frequency cannot replace size. Neither example predicts future results.
Reconcile costs and funding
To reconcile a before-cost total, subtract entry and exit fees and funding debits, add funding credits, and account for slippage if not already reflected in prices. Do not subtract any cost twice. A label saying "net" is insufficient: check which costs and funding events it includes. Missing funding data is not verified zero.
Closed trades are not the full run
A closed-trade total excludes unrealized profit or loss on positions still open at the cutoff. Full-run equity change may include that exposure and funding outside closed trades. Compare starting and ending equity on the same basis, separating deposits or withdrawals if present. State whether positions were left open, marked to market or forcibly closed at the end.
Make the comparison fair
- Concentration: check whether a few large wins, one product or one day dominate the result. Inspect loss streaks and drawdown too.
- Sample and dates: 100 trades from one market phase are not 100 independent proofs. Match start/end times, timezone and data coverage.
- Sizing: keep starting capital, quantities and allocation comparable. Different sizing or compounding can explain dollar differences without better signals.
- Selection: include unfavorable periods and untouched test periods. Repeated tuning on the same sample can favor chance.
Inspect the details
Citrine's public backtesting guide emphasizes inspectable detailed results and exports. Use those details to reconcile assumptions, not to treat a headline as proof. Continue with comparing simulations and costs, the product guide and the risk disclosure.
