+First time on the top traders desk?
The desk runs its own numbers and publishes its calls next to the account that trades them. The short route:
toptraders · cross-lab v2
Cross-lab v2: what the sweep left standing
trials swept: 29202 · finalists in the table: 10 · window 2020-09-01 to 2026-08-13 · costs 0.1% per side · book $1m
We swept 29 202 variants of trading rules. Not one of them proved it earns for a reason rather than by chance. Below is how we checked, and what we found on the way.
A rule here is a pair: what we enter on and what we leave on. We took a list of entries, a list of exits and a list of filters, multiplied them together and ran every variant on four bars, from daily down to fifteen minutes. The instrument list is built without survivor selection: names delisted from the exchange stayed in it.
The table below holds the best ten. The losers were not removed and are marked by name: a rule that did not hold up is printed the same way as one that worked.
Below, in a section of its own, stands HyperDelta v.1 — a rule that came to us from the outside rather than from the sweep. It is built differently, so we do not put it in the shared table: it has its own section and its own verdict.
Equity curves
How the account would have grown if we traded the rule. Every line starts at 100: different bars have different windows, so the money is not comparable. Hover to see every line on that date. Click a name in the list to hide a line.
The metrics side by side
Ten rules in one table. Click a header to sort it. The last column answers the main question: did the rule prove it is not chance. Only those that did get money and a row in the panel.
| rank | algorithm | total | annualised | drawdown | sharpe | sortino | calmar | pf | recovery | stagnation, days | time in market | trades | profitable | sharpe on the check part | DSR | capacity | controls |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | xl-momcs-1d-ls-2 | +103% | +12.7% | -33.6% | 0.59 | 0.87 | 0.38 | 1.09 | 3.07 | 1073 | +33% | 4340 | +50% | 0.53 | 0.01 | 1.00 | controls failed: DSR, control sanity, sharpe |
| 2 | xl-smacross-4h-ls | +47% | +6.7% | -15.5% | 0.62 | 0.92 | 0.43 | 1.29 | 3.02 | 767 | +14% | 7112 | +53% | 0.20 | 0.01 | 1.00 | controls failed: DSR, sharpe |
| 3 | xl-nearhigh-4h-ls | +76% | +10.0% | -34.6% | 0.56 | 0.83 | 0.29 | 1.27 | 2.20 | 1426 | +13% | 9718 | +48% | 0.00 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 4 | xl-macross-1d-ls | +128% | +14.9% | -35.4% | 0.56 | 0.86 | 0.42 | 1.26 | 3.61 | 962 | +30% | 6223 | +35% | 0.03 | 0.01 | 1.00 | controls failed: DSR, sharpe |
| 5 | xl-donchian-1d-l | +36% | +5.3% | -26.9% | 0.46 | 0.64 | 0.20 | 1.72 | 1.34 | 1816 | +5% | 2217 | +49% | -0.12 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 6 | xl-donchian-4h-l | +33% | +4.9% | -23.7% | 0.47 | 0.69 | 0.21 | 1.39 | 1.40 | 1723 | +5% | 3774 | +47% | -0.15 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 7 | xl-momts-4h-ls | +72% | +9.5% | -59.7% | 0.45 | 0.66 | 0.16 | 1.19 | 1.20 | 1033 | +30% | 9029 | +39% | -0.44 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 8 | xl-fundingfade-15m-l-2 | +1% | +0.3% | -2.2% | 0.29 | 0.52 | 0.12 | 1.14 | 0.60 | 938 | +0% | 1832 | +47% | -0.45 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 9 | xl-volsurge-1d-l | +48% | +6.8% | -67.5% | 0.37 | 0.51 | 0.10 | 1.68 | 0.71 | 1739 | +25% | 3255 | +44% | -0.56 | 0.00 | 1.00 | controls failed: DSR, sharpe |
| 10 | xl-volsurge-1d-ls | +106% | +12.9% | -55.8% | 0.54 | 0.76 | 0.23 | 1.25 | 1.90 | 962 | +33% | 4289 | +47% | -0.63 | 0.00 | 1.00 | controls failed: DSR, sharpe |
What each of them does
One line per rule: what it enters on, which bar it works on and which market phase it lives in.
| algorithm | family | bar | side | filter | cycle phase |
|---|---|---|---|---|---|
| xl-momcs-1d-ls-2 | momcs | 1d | long and short | no | a bull-phase algorithm |
| xl-smacross-4h-ls | smacross | 4h | long and short | yes | works in every phase |
| xl-nearhigh-4h-ls | nearhigh | 4h | long and short | yes | a bull-phase algorithm |
| xl-macross-1d-ls | macross | 1d | long and short | no | a bull-phase algorithm |
| xl-donchian-1d-l | donchian | 1d | long only | yes | a bull-phase algorithm |
| xl-donchian-4h-l | donchian | 4h | long only | yes | a bull-phase algorithm |
| xl-momts-4h-ls | momts | 4h | long and short | yes | a bull-phase algorithm |
| xl-fundingfade-15m-l-2 | fundingfade | 15m | long only | yes | an accumulation-phase algorithm |
| xl-volsurge-1d-l | volsurge | 1d | long only | yes | a bull-phase algorithm |
| xl-volsurge-1d-ls | volsurge | 1d | long and short | no | a bull-phase algorithm |
Sharpe against drawdown
The higher the dot, the smoother the income; the further right, the deeper the rule fell. The good place is the top left. The size of the circle says how much of the paper sharpe is left if the rule trades real size. The number inside is the rank in the table above; the colour belongs to the rule and does not change between runs.
Returns by month
One month, one cell. A green cell is a month in the black, a red one is a month in the red; the brighter, the bigger. Pick the rule from the list; hover a cell for the number.
Not every rule works in every market
A market is in one of three states: it rises, it falls, or it stands still. We marked the window with those three states by one formula and measured every rule inside each of them separately. One line is one family of rules.
The "in its phase" column is how the rule does where it is at home. The "outside it" column is the same thing the rest of the time. We print both: a rule that shows only its own phase is hiding half the window.
| family | class | what it does | best phase | sharpe in its phase | sharpe outside it | rules measured |
|---|---|---|---|---|---|---|
| pullback | trend | in a rising market, wait for a short dip and buy it | accumulation | 1.23 | -0.15 | 6 |
| smacross | trend | price crossed one long average, sometimes with a slope check | accumulation | 1.09 | 0.11 | 4 |
| rsimr | counter-trend | the overbought index fell low: we buy the bounce | bull | 1.08 | 0.11 | 6 |
| fundingfade | counter-trend | the funding rate went to an extreme: we stand against the crowd | accumulation | 0.91 | 0.06 | 4 |
| macross | trend | a fast average crossed a slow one: the oldest trend rule there is | bull | 0.91 | 0.27 | 3 |
| nearhigh | trend | price is right under a multi-month high: we buy strength, not the break | bull | 0.90 | -0.88 | 4 |
| donchian | trend | price cleared the high of the last N bars: we enter the same way | bull | 0.87 | -0.20 | 3 |
| supertrend | trend | a line built from price range flips: the side flips with it | accumulation | 0.84 | 0.44 | 4 |
| momcs | cross-sectional | compare every name against the others and take the top against the bottom | bull | 0.82 | -0.21 | 2 (few) |
| volsurge | event | volume jumped far above normal: we follow the move or fade it | bull | 0.81 | -0.08 | 2 (few) |
| bbfade | counter-trend | price ran far from its own average: we bet on the return | bear | 0.72 | -0.42 | 2 (few) |
| gann | trend | short-window highs and lows form a staircase: we follow the staircase | bull | 0.67 | -0.01 | 2 (few) |
| momts | trend | the instrument's own return over the last K bars left a band | bull | 0.67 | 0.01 | 3 |
| squeeze | event | price range shrank to a minimum: we wait for the release | bull | 0.51 | 0.15 | 4 |
14 families of 15 were measured. Missing: tom — none of its rules reached the phase check, and we will not invent a line for it.
- A falling market eats almost everyone. Median over all measured rules: in a rising market sharpe 0.61, in a flat one 0.39, in a falling one -0.53. A minus here means the rule loses money more steadily than it makes it.
- Most rules are rising-market rules. The best phase for 9 families out of 14 is growth. That is not a property of the market, it is a property of our rules: nearly all of them say "buy what already goes up".
- One idea survives a falling market — betting on the price coming back. Of 14 families, the only ones whose best phase is the fall: bbfade. The rest pay there.
- A flat market is not dead time. 4 families earn more there than in growth, and 3 of them are trend rules. Trends happen inside a range too, they are just shorter. A rule switched off "until the range ends" loses that part of the window entirely.
- The phase matters more than the settings. For 14 families of 14 the result outside their phase is worse than inside it, and for 7 it is negative outside. So a phase check is not decoration on a rule, it is part of the rule: without it the rule spends half its time working against itself.
- Nothing here overturns the verdict. Phases were measured for the 49 rules that reached the check. Not one of them passed the chance test, and the phase split does not save them: it says WHERE to look next time, not what we already found.
The selection funnel
How many rules entered each step, how many fell out and why. We print all of it: a sweep that does not say how many rules it threw away looks exactly like a sweep that searched for nothing.
How many rules we tried in total
The more rules you sweep, the higher the chance one comes out ahead for no reason. So we count every try and divide by it. Understating this number is the one counting error that makes a result look better, which is why we print all of it.
| what is counted | trials |
|---|---|
| trials in total | 29202 |
| of them measured | 28566 |
| dropped by the enumerator | 636 |
| trials before this run | 182 |
| step A | 19524 |
| step B | 8140 |
| step C | 720 |
Candidates without a row
| candidate | bar | why |
|---|---|---|
| xl-bbfade-1h-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-donchian-1d-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-fundingfade-1d-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-fundingfade-4h-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-gann-1d-ls | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-macross-1d-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-momts-1d-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-nearhigh-1d-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-nearhigh-1d-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-pullback-1d-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-pullback-1d-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-pullback-4h-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-pullback-4h-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-rsimr-1d-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-rsimr-1d-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-rsimr-1h-l | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-rsimr-1h-l-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-smacross-1d-ls | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-smacross-1d-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-squeeze-1d-ls | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-squeeze-1d-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-squeeze-4h-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-supertrend-1d-ls | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
| xl-supertrend-1d-ls-2 | — | controls exist but the name is not on the candidate list: the list was rebuilt after the controls step |
HyperDelta v.1 — registered by the owner, outside the sweep
The rule compares the names in the basket against each other by their return over one and the same past window: the top of the list is held long, the tail short, in equal size. The instruments are Binance perps, fifteen of them at a time; the weights sum to zero, so the book stands neither for a rising nor for a falling market as a whole, while the orders it sends are twice the equity. The basket is rebuilt every fixed number of 4h bars, and the weights are left alone in between. The step length, the momentum window and the leg size are not printed publicly — they are what the rule is repeated from, and they live in the internal report.
It is not put into the table of ten, and that is not an oversight. The sweep's finalists hold one position per sleeve of the book and never open both sides at once; here the book is two-sided with weights that sum to zero. A row next to them would compare different things down the same columns. The desk did not search for this rule at all: the owner registered it from someone else's backtest, and the desk's engine recomputed it on the desk's own data.
What the desk measured
Two instrument lines and two cost levels. The first line is the owner's fifteen names: the list knows who survived to 2026, so it is a CEILING, not an estimate. The second takes the first fifteen by turnover on the first day of each quarter, so the membership is known on the decision date and knows nothing of the future. The windows differ between lines and are printed in their own column: the caption has to follow the data.
| what was measured | cost per side | window | total | annualised | drawdown | sharpe |
|---|---|---|---|---|---|---|
| the owner's 15 names (survivors only), desk costs | 0.1% | 2022-03-16 — 2026-08-13 | +78% | +13.9% | -23.6% | 0.73 |
| the owner's 15 names (survivors only), the source's costs | 0.065% | 2022-03-16 — 2026-08-13 | +128% | +20.6% | -20.9% | 1.00 |
| top 15 by turnover as of the decision date, desk costs | 0.1% | 2020-09-01 — 2026-08-13 | +171% | +18.3% | -48.2% | 0.69 |
| top 15 by turnover as of the decision date, the source's costs | 0.065% | 2020-09-01 — 2026-08-13 | +275% | +24.9% | -45.8% | 0.87 |
The source's window and the source's claim
The claim arrived without a method and without a run, so it can be neither reproduced nor refuted — it is printed as somebody else's number and enters no metric of the desk. Next to it stands our recomputation of the same rule over ITS window: first at our costs, then at its costs, then with no costs at all. The last of those puts a ceiling on how much of the gap can be written off to commission; the remainder is not answered by our data, because its basket membership and its price source are unknown to us.
| line | cost per side | window | total | annualised | drawdown | sharpe |
|---|---|---|---|---|---|---|
| the owner's 15 names (survivors only), desk costs | 0.1% | 2024-03-01 — 2026-08-14 | +19% | +7.3% | -22.0% | 0.45 |
| the owner's 15 names (survivors only), the source's costs | 0.065% | 2024-03-01 — 2026-08-14 | +37% | +13.7% | -16.4% | 0.74 |
| the owner's 15 names (survivors only), no costs at all | 0% | 2024-03-01 — 2026-08-14 | +79% | +26.8% | -13.7% | 1.28 |
| top 15 by turnover as of the decision date, desk costs | 0.1% | 2024-03-01 — 2026-08-14 | +31% | +11.6% | -43.0% | 0.49 |
| top 15 by turnover as of the decision date, the source's costs | 0.065% | 2024-03-01 — 2026-08-14 | +50% | +18.0% | -41.2% | 0.66 |
| top 15 by turnover as of the decision date, no costs at all | 0% | 2024-03-01 — 2026-08-14 | +94% | +30.9% | -37.7% | 0.97 |
| the source's own claim — NOT confirmed by the desk | 0.065% | 2024-03-01 — 2026-08-14 | +434% | — | -21.7% | 2.00 |
Funding
The book is a perp book and pays the rate on both sides: half the names pay, half receive. For a basket whose weights sum to zero this term is of the same order as the income, so it is pulled out into a row instead of hidden inside the total. A minus means the book pays for funding.
| what is counted | value |
|---|---|
| funding inside the total | -2.7% |
| costs inside the total | +71.7% |
| total if funding were not charged | +82.7% |
| sharpe if funding were not charged | 0.76 |
| the difference in the total | -5.0% |
Controls
Each band is two hundred random runs over fixed starting points, and the comparison is against the band's p95, not its middle. The first band asks whether the momentum picks NAMES; the second, whether the sign of the momentum carries information or only its size. The third reshuffles the ranks at every rebuild and pays a multiple of the turnover, so it measures how often one trades rather than the rank, and it does NOT enter the verdict. Below are two outside references: the same basket bought whole, and BTC.
| what it is compared against | runs | median total | p95 total | p95 sharpe | the rule is above |
|---|---|---|---|---|---|
| each name trades another name's momentum | 200 | -57.3% | -18.6% | -0.19 | yes |
| momentum sign flipped for half the names | 200 | -51.5% | +32.6% | 0.44 | yes |
| the ranks reshuffled at every rebalance | 200 | -95.9% | -92.9% | -3.42 | yes |
| the whole basket 1/N, long only | — | -24.3% | — | 0.26 | yes |
| BTC bought and held | — | +55.1% | — | 0.45 | yes |
The correction for the number of trials
The rule arrived finished: the desk swept no thresholds, no windows and no variants, so the denominator of trials here is one, and that is said out loud. Such a correction is SOFTER than any correction of a swept finalist, where the denominator counts the whole series. The two values must therefore never be compared against each other.
| what is counted | value |
|---|---|
| DSR | 0.94 |
| floor | 0.50 |
| trials | 1 |
| days measured | 1611 |