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.

rankalgorithmtotalannualiseddrawdownsharpesortinocalmarpfrecoverystagnation, daystime in markettradesprofitablesharpe on the check partDSRcapacitycontrols
1xl-momcs-1d-ls-2+103%+12.7%-33.6%0.590.870.381.093.071073+33%4340+50%0.530.011.00controls failed: DSR, control sanity, sharpe
2xl-smacross-4h-ls+47%+6.7%-15.5%0.620.920.431.293.02767+14%7112+53%0.200.011.00controls failed: DSR, sharpe
3xl-nearhigh-4h-ls+76%+10.0%-34.6%0.560.830.291.272.201426+13%9718+48%0.000.001.00controls failed: DSR, sharpe
4xl-macross-1d-ls+128%+14.9%-35.4%0.560.860.421.263.61962+30%6223+35%0.030.011.00controls failed: DSR, sharpe
5xl-donchian-1d-l+36%+5.3%-26.9%0.460.640.201.721.341816+5%2217+49%-0.120.001.00controls failed: DSR, sharpe
6xl-donchian-4h-l+33%+4.9%-23.7%0.470.690.211.391.401723+5%3774+47%-0.150.001.00controls failed: DSR, sharpe
7xl-momts-4h-ls+72%+9.5%-59.7%0.450.660.161.191.201033+30%9029+39%-0.440.001.00controls failed: DSR, sharpe
8xl-fundingfade-15m-l-2+1%+0.3%-2.2%0.290.520.121.140.60938+0%1832+47%-0.450.001.00controls failed: DSR, sharpe
9xl-volsurge-1d-l+48%+6.8%-67.5%0.370.510.101.680.711739+25%3255+44%-0.560.001.00controls failed: DSR, sharpe
10xl-volsurge-1d-ls+106%+12.9%-55.8%0.540.760.231.251.90962+33%4289+47%-0.630.001.00controls 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.

algorithmfamilybarsidefiltercycle phase
xl-momcs-1d-ls-2momcs1dlong and shortnoa bull-phase algorithm
xl-smacross-4h-lssmacross4hlong and shortyesworks in every phase
xl-nearhigh-4h-lsnearhigh4hlong and shortyesa bull-phase algorithm
xl-macross-1d-lsmacross1dlong and shortnoa bull-phase algorithm
xl-donchian-1d-ldonchian1dlong onlyyesa bull-phase algorithm
xl-donchian-4h-ldonchian4hlong onlyyesa bull-phase algorithm
xl-momts-4h-lsmomts4hlong and shortyesa bull-phase algorithm
xl-fundingfade-15m-l-2fundingfade15mlong onlyyesan accumulation-phase algorithm
xl-volsurge-1d-lvolsurge1dlong onlyyesa bull-phase algorithm
xl-volsurge-1d-lsvolsurge1dlong and shortnoa 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.

familyclasswhat it doesbest phasesharpe in its phasesharpe outside itrules measured
pullbacktrendin a rising market, wait for a short dip and buy itaccumulation1.23-0.156
smacrosstrendprice crossed one long average, sometimes with a slope checkaccumulation1.090.114
rsimrcounter-trendthe overbought index fell low: we buy the bouncebull1.080.116
fundingfadecounter-trendthe funding rate went to an extreme: we stand against the crowdaccumulation0.910.064
macrosstrenda fast average crossed a slow one: the oldest trend rule there isbull0.910.273
nearhightrendprice is right under a multi-month high: we buy strength, not the breakbull0.90-0.884
donchiantrendprice cleared the high of the last N bars: we enter the same waybull0.87-0.203
supertrendtrenda line built from price range flips: the side flips with itaccumulation0.840.444
momcscross-sectionalcompare every name against the others and take the top against the bottombull0.82-0.212 (few)
volsurgeeventvolume jumped far above normal: we follow the move or fade itbull0.81-0.082 (few)
bbfadecounter-trendprice ran far from its own average: we bet on the returnbear0.72-0.422 (few)
ganntrendshort-window highs and lows form a staircase: we follow the staircasebull0.67-0.012 (few)
momtstrendthe instrument's own return over the last K bars left a bandbull0.670.013
squeezeeventprice range shrank to a minimum: we wait for the releasebull0.510.154

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 countedtrials
trials in total29202
of them measured28566
dropped by the enumerator636
trials before this run182
step A19524
step B8140
step C720

Candidates without a row

candidatebarwhy
xl-bbfade-1h-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-donchian-1d-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-fundingfade-1d-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-fundingfade-4h-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-gann-1d-lscontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-macross-1d-ls-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-momts-1d-ls-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-nearhigh-1d-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-nearhigh-1d-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-pullback-1d-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-pullback-1d-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-pullback-4h-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-pullback-4h-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-rsimr-1d-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-rsimr-1d-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-rsimr-1h-lcontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-rsimr-1h-l-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-smacross-1d-lscontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-smacross-1d-ls-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-squeeze-1d-lscontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-squeeze-1d-ls-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-squeeze-4h-ls-2controls exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-supertrend-1d-lscontrols exist but the name is not on the candidate list: the list was rebuilt after the controls step
xl-supertrend-1d-ls-2controls 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 measuredcost per sidewindowtotalannualiseddrawdownsharpe
the owner's 15 names (survivors only), desk costs0.1%2022-03-16 — 2026-08-13+78%+13.9%-23.6%0.73
the owner's 15 names (survivors only), the source's costs0.065%2022-03-16 — 2026-08-13+128%+20.6%-20.9%1.00
top 15 by turnover as of the decision date, desk costs0.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 costs0.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.

linecost per sidewindowtotalannualiseddrawdownsharpe
the owner's 15 names (survivors only), desk costs0.1%2024-03-01 — 2026-08-14+19%+7.3%-22.0%0.45
the owner's 15 names (survivors only), the source's costs0.065%2024-03-01 — 2026-08-14+37%+13.7%-16.4%0.74
the owner's 15 names (survivors only), no costs at all0%2024-03-01 — 2026-08-14+79%+26.8%-13.7%1.28
top 15 by turnover as of the decision date, desk costs0.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 costs0.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 all0%2024-03-01 — 2026-08-14+94%+30.9%-37.7%0.97
the source's own claim — NOT confirmed by the desk0.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 countedvalue
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 charged0.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 againstrunsmedian totalp95 totalp95 sharpethe rule is above
each name trades another name's momentum200-57.3%-18.6%-0.19yes
momentum sign flipped for half the names200-51.5%+32.6%0.44yes
the ranks reshuffled at every rebalance200-95.9%-92.9%-3.42yes
the whole basket 1/N, long only-24.3%0.26yes
BTC bought and held+55.1%0.45yes

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 countedvalue
DSR0.94
floor0.50
trials1
days measured1611