You sent me the equity curve and the trade log, and asked whether it's too good to be true. Short answer: it's neither obviously real nor obviously fake, and you can find out which in about a day of work. Long answer follows, because the diagnosis matters more than the verdict.
What you have: a 15-minute mean-reversion signal on BTCUSDT and ETHUSDT perps on Binance, z-score of price against a 96-bar mean, fade the tails, hold 2-8 bars. Backtest spans Feb 2024 to Jun 2026. Sharpe 2.9 net of your fee model. And when you bucketed the P&L by minute-of-day, 71% of it landed in the three fifteen-minute buckets that contain 00:00, 08:00 and 16:00 UTC.
You already know why that's suspicious. Let me tell you why it's also, partly, not.
The funding clock is a real thing that really moves price
Binance settles perpetual funding at 00:00, 08:00 and 16:00 UTC. Every position open at the settlement instant pays or receives. That is a hard, scheduled, universally-known cash flow, and it creates genuine order flow around it — not a data artifact, an actual thing traders do.
The flow has a shape. In the ten to thirty minutes before settlement, positions that don't want to pay get closed or hedged. If funding is running at +0.04% for the interval, a long that intends to exit anyway will exit before the mark rather than after, and a basis trader who's short perp will happily hold through. That's asymmetric pressure with a deadline. Then, immediately after settlement, some of that flow comes back — the funding-avoidant longs re-enter — and you get a partial reversal.
So a mean-reversion signal that fires at 23:52 and exits at 00:12 is standing exactly where a predictable liquidity event happens. Some of your edge is probably the reversal of a mechanical, calendar-driven push. That is a real microstructure phenomenon and it has been real for years.
But here's what I'd want to know before believing a number as large as yours.
Six things to check, in the order I'd check them
Start with the cheapest, because most of these strategies die on check two or three.
- Is your funding P&L double-counted? If your fill engine applies funding to open positions and your price series is a mark-price series rather than a last-trade series, you may be paying or earning funding twice — once explicitly and once through the mark's convergence behaviour. Print the raw funding cashflow per trade and eyeball ten of them against the exchange's historical funding endpoint.
- Which timestamp does your funding row carry? Binance's funding-rate history returns a fundingTime that is the settlement instant. Some vendors ship the same row stamped at the start of the interval it applies to. If yours is shifted eight hours, you've been trading a signal that knows the future. This is the single most common way I've seen a fake funding edge appear, and it produces exactly your P&L profile — concentrated at the settlement bars, sign-correct, gorgeous.
- What does the spread do at 00:00:00? Pull the book, not the klines. On a 1-minute bar the spread is invisible; in the seconds around settlement on a mid-tier venue it can widen 3-5x. If your fills are modelled at mid or at close, you're collecting a spread that wasn't there.
- Does it survive on the other two settlements only? Split the three windows. 00:00 UTC has different flow from 08:00 (Asia open-ish) and 16:00 (US afternoon). If all the money is in one of the three, you have roughly 300 events, not 900, and your Sharpe should be recomputed against that.
- Does it survive on a venue with a different clock? This is the good one. Run the identical signal on a venue whose funding settles hourly or on a different schedule. If the effect is funding-driven it should track that venue's clock. If it still fires at 00:00 UTC on a venue that doesn't settle at 00:00 UTC, you've found a midnight artifact in your data pipeline, not a funding effect.
- How much of the P&L is in the first and last 90 seconds? If the whole edge is a sub-two-minute window, your 15-minute bars are far too coarse to be honest about entry price, and you should assume the fill you're modelling is the best one available in that window rather than the one you'd get.
Check five is the one I'd do first if I only had an hour. It's a clean natural experiment and it doesn't need any new infrastructure beyond a second data source.
What the settlement window actually costs you
Assume the effect is real and you survive all six checks. Now price it properly, because the trade you're modelling is not the trade you'd get.
Here's a comparison of what a 20-minute round trip looks like at a quiet hour versus straddling a settlement, on a USDⓈ-M perp with taker entry and taker exit, for a $50k clip:
| Quiet hour (e.g. 03:20 UTC) | Straddling 00:00 UTC | |
|---|---|---|
| Taker fee, round trip | 0.09% | 0.09% |
| Typical spread paid | ~0.4 bp | 1.5-3 bp |
| Slippage at $50k clip | ~0.5 bp | 2-6 bp |
| Funding paid/received | 0 | ±1 to ±4 bp (whole interval) |
| Realistic all-in cost | ~10 bp | 13-19 bp before funding |
The funding row is the interesting one, and it's why I keep pushing on check one. If you hold across the settlement you take the entire interval's funding regardless of how long you held. Twelve seconds of exposure at 23:59:54 costs you a full eight hours of funding. A strategy that averages 20 minutes of hold time and crosses the mark is paying an eight-hour carry on a twenty-minute trade. Your fee model needs to charge it that way, not pro-rate it.
A related trap: if you avoid crossing the settlement entirely — exit at 23:58, re-enter at 00:02 — you've doubled your fee count and you're now running a strategy whose whole thesis is that two extra taker crossings are cheaper than one funding payment. Sometimes true. Compute it explicitly rather than letting the backtest decide for you.
The regime question you haven't asked yet
Your sample is Feb 2024 to Jun 2026. Funding across that span was not one regime. There were long stretches where the 8-hour rate sat pinned at the 0.01% floor and nobody had any reason to reposition around settlement, and there were weeks where it ran 0.05%+ for days and the pre-settlement flow was violent.
Bucket your P&L by the prevailing funding rate at the time of the trade — say four buckets by absolute rate. If the edge is a funding-flow edge, it should be roughly monotonic in |funding|. Near-zero funding, near-zero edge; high funding, high edge. If instead it's flat across buckets, or worse, concentrated in the low-funding bucket, the funding story is a narrative you've attached to something else.
I like this test because it's a falsifiable prediction that follows from your own explanation. You're not asking "does it still work" — you're asking "does it work for the reason I claimed."
What I'd actually do with it
If it passes: shrink it. The honest version of this strategy is not 900 trades a year on a 15-minute grid, it's a few hundred well-chosen events with entry logic specified to the second and a fill model built from book snapshots, not klines. That's a smaller, uglier, more defensible thing. It's also the version that has a chance of matching in paper trading, which is the only place you'll find out whether the fills you assumed exist.
If it fails check two — the timestamp shift — don't be too annoyed. Everyone gets that one at least once. And it's worth reading your loader carefully rather than patching the offset, because if funding is shifted there's a decent chance open interest is too, and you'll want to know that before the next idea.
One more thing, and this is the part people skip. Whatever you find, write down the six checks and their outcomes next to the strategy. Six months from now you or someone else will generate a structurally identical signal, get the same beautiful curve, and have the same argument from scratch. The diagnosis is the durable asset here. The strategy might not be.
← All posts


