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.

Verdict: 0 rules out of 10 passed the check. We treat none of what follows as proven. A plus in the percentages means only this: sweep enough rules and some of them come out ahead on their own.
how we picked these ten: hard conditions: the rule beats the p95 of a random entry AND the p95 of relabelled instruments, DSR is above its floor, the timing audit is clean, the medians of the two controls are of one order, and the daily sharpe of the holdout is at least 1. Diversity: no more than two per family, and pairwise correlation of daily increments below its floor; an unmeasured correlation counts as correlated

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.

1002003004002020-09-012026-08-13book, % of startxl-momcs-1d-ls-2xl-nearhigh-4h-lsxl-macross-1d-lsxl-volsurge-1d-ls

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.

00.20.40.60204060drawdown, %sharpe12345678910

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.

01020304050607080910111220202021+15+122022+18-17-1620232024+222025+142026

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.

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.

15m: names ranked1 01615m: below the turnover floor34215m: above the floor, not in the basket24715m: never measured15515m: in the basket2721d: names ranked1 0161d: below the turnover floor1001d: above the floor, not in the basket1511d: never measured1541d: in the basket6111h: names ranked1 0161h: below the turnover floor1781h: above the floor, not in the basket2681h: never measured1551h: in the basket4154h: names ranked1 0164h: below the turnover floor1004h: above the floor, not in the basket2144h: never measured1544h: in the basket548step A: killed: sharpe below the floor19 470step A: killed: too few trades30step A: alive24step B: killed: sharpe below the floor7 869step B: killed: too few trades147step B: alive124step C: probe593step C: killed: sharpe below the floor113step C: alive12step C: killed: too few trades2candidates registered25candidates with controls25candidates dropped0DSR: failed49relabelled instruments: failed9relabelled instruments: passed40random entry: failed5random entry: passed44control sanity: failed2control sanity: passed47timing audit: passed49capacity measured25capacity without a ratio0

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
rows that did not clear their controls stay in the table and are marked by name: a negative result is published the same way as a winning one, and only those that passed get an account and a panel row

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.

Verdict: controls failed: sharpe. None of the positive numbers below is treated by the desk as proven. The rule still gets a paper account — that is the owner's decision, and the verdict is printed next to the account, not instead of it.

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
Survivors only: the first line is built from names alive in 2026 and cannot lose on a delisting by construction. The second line gets no such favour, and its drawdown is twice as deep — the gap between the rows is the price of such a list.

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
Who claimed it: truenorth (an external backtest whose method is not disclosed)

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