I keep coming back to a test I ran on my own strategies a while ago, mostly because it embarrassed me. I had a setup I was proud of. Some volatility filter, a momentum trigger, a couple of conditions that had to line up before it would enter. It backtested green over a long crypto window and I was ready to size it up. Then I did the lazy thing and swapped out the entry rule for a coin flip, kept everything else identical, and ran it a few thousand times. My careful, hand-tuned strategy landed somewhere around the middle of the random pile. The entry logic I had been so pleased with was doing almost nothing.
That is the whole point of the exercise, and it is one of the cheapest sanity checks you can run. People call it the monkey test, because the idea is that a monkey throwing darts at entry timestamps should not be able to keep up with your supposedly clever rule. If it can, you do not have an entry edge. You have market exposure wearing a strategy costume.
Why so many crypto strategies are just long beta
Here is the thing that makes this test so useful specifically in crypto. Most of the assets people trade are heavily correlated to the broad market and they spent a long time in a strong uptrend. If your strategy is long-biased and holds through that kind of regime, almost anything that keeps you in the market for a decent chunk of the time will look good. You could enter on random days, hold for your usual duration, and ride the same beta your strategy is riding. The green equity curve is real, it is just not coming from where you think it is coming from.
So a strategy can be profitable and still have zero entry edge. Those are two separate claims. Profitable means the returns exist. Entry edge means the returns come from your timing rather than from simply being exposed to an asset that went up. The random benchmark pulls those two claims apart, because it holds everything constant except the one thing you are testing.
The recipe, at the level you would actually code it
The mechanic that makes this valid is keeping everything the same except the entries. You are not building a random strategy. You are building a copy of your real strategy with a lobotomized entry rule, so the only variable that changes is entry timing. If you also randomize your exits or your sizing, you have measured nothing, because now three things moved at once and you cannot attribute the result.
Roughly the steps I use:
- Count how many trades your real strategy made over the test window and the average holding period. Those two numbers are your budget.
- Build a shuffled version. Same asset or basket, same total time in market, same exit logic, same position sizing, same fees and slippage assumptions. The only change is that entry timestamps are drawn at random instead of from your signal.
- Match the trade count and average duration to the real strategy as closely as you can. If your real strategy took roughly two hundred trades averaging three days each, every random run should do about the same. Otherwise you are comparing different amounts of exposure and the test is dead on arrival.
- Run it a few thousand times. Each run gives you one final return, or better, one Sharpe or one risk-adjusted number. Collect all of them into a distribution.
- Drop your real strategy's result onto that distribution and read off the percentile. That percentile is the answer.
One detail that trips people up. Match exposure, not just trade count. If your real strategy tends to be in the market during high-volatility stretches and your random entries scatter evenly across calm and wild periods, you have quietly introduced a second difference. The cleaner version of the test draws random entries from the same distribution of market conditions your real strategy actually traded in. It is more work, and it is the version that will not lie to you.
Reading the percentile
The number you care about is where your real strategy falls against the random crowd. If a thousand monkeys beat you and only a handful land above your result, you are near the top of the distribution and your entry timing is doing real work. If half of them beat you, your entries are worth nothing and you are paying attention to a signal that is pure noise.
My rough personal bar is the ninety-fifth percentile. If the real strategy does not clear the top five percent of random entries on a risk-adjusted basis, I do not trust the entry logic, full stop. Somewhere between the eightieth and ninety-fifth is a gray zone where there might be a weak edge that survives in some regimes and dies in others, and I treat those with suspicion rather than affection. Below the eightieth, the entry rule is decoration. The strategy might still make money, but it is making money from exposure, and I should size and think about it as an exposure play, not as a timing edge.
A subtle consequence. A strategy that lands at the fiftieth percentile is not necessarily a bad thing to hold. It just means you have been fooling yourself about what it is. If you accept that it is a long-beta vehicle, you can manage it as one, hedge it as one, and stop optimizing an entry rule that was never the source of returns. The test does not tell you to throw the strategy away. It tells you to stop lying to yourself about why it works.
The failure modes worth naming
The most common way people quietly break this test is by giving the random version a different amount of market exposure than the real one, usually by accident. If your monkeys spend more or less time in the market, they are running a different bet and the percentile is meaningless. Guard the exposure number like it is the whole experiment, because it basically is.
The second failure mode is running too few simulations. A couple hundred random runs gives you a lumpy, unreliable distribution and your percentile will swing depending on the seed. Thousands is cheap on modern hardware and it is what makes the tail behavior stable enough to trust.
The third is testing on one asset in one regime and calling it done. A strategy can clear the ninety-fifth percentile on one coin during one bull leg and completely fall apart on the next asset or the next market phase. If you have the data, run the benchmark across several assets and across at least one drawdown period, and see whether the entry edge holds up when beta is not doing you any favors. That last part is where most edges quietly die.
None of this needs fancy infrastructure. A backtester that lets you swap the entry rule and re-run thousands of times is enough, which is one of the reasons we built the random-benchmark check straight into the strategy tools at Blockcircle rather than treating it as an afterthought. You can wire it up yourself in an afternoon with any engine that already models your fees and exits. The hard part was never the code. It is being willing to run the test on the strategy you like the most and then believe the number it gives you back.