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:

LAB REPORT ·

How long to hold: the account disagrees with the table

The exit laboratory ranks a 90-bar exit above a 10-bar one on profit factor. It is right about what it measures: one position at a time, overlapping trades, no capital. This run puts the same question to an account — same 10 sleeves, same entry, same costs — and the order inverts.

total
1382.3%
annualised
58.3%
drawdown
-29.9%
sharpe
1.51
trades
463
win rate
52.9%

Tiles belong to the hold with the best sharpe (10 bars). The control is not a tile; it has its own column.

The answer

The longer the hold, the worse every axis gets at once: drawdown widens from -29.9% to -83.4%, sharpe falls from 1.51 to 0.72, and the total shrinks from 1382.3% to 365.8%. Nothing reverses in between — this is a direction, not two points.

The reason sits in the "in market" column. A 90-bar hold is in a position 73.0% of the time, which is very nearly holding the basket — drawdown included (944.8% for the basket over the same window). A rule that is almost always in the market has stopped being an entry rule and become a basket with costs.

The control agrees. Each hold has its own null: a random entry holding 90 days earns more than one holding 10, simply by sitting longer in a rising market. Adjusted for that, the only hold to beat its own p95 is 10 bars. At 90 the total is 365.8% against a random median of 725.8% — below the coin flip.

Every hold on one table

holdtotalannualiseddrawdownsharpetradesin marketnull p50null p95beats null
10 bars1382.3%58.3%-29.9%1.5146323.7%192.8%852.0%yes
20 bars957.1%49.4%-44.9%1.1137236.3%306.1%1204.8%no
40 bars1071.4%52.0%-67.3%0.9827251.5%411.4%1660.1%no
60 bars484.8%35.1%-77.5%0.8022562.9%511.1%2082.2%no
90 bars365.8%29.9%-83.4%0.7217673.0%725.8%2350.3%no

Click a header to sort. "Null" is a random entry through the same engine, 5 holds, 200 seeds each.

Equity

1x2x5x10x2020-092022-092024-082026-0810 bars · 90 bars
Log scale. Upper curve is 10 bars, lower is 90. Hovering shows both on one date.

By year

hold2020 (09-12)202120222023202420252026 (01-08)
10 bars33.1%444.5%-16.1%16.5%92.5%17.3%-7.3%
20 bars36.0%449.2%-29.8%78.9%50.2%-3.7%-22.0%
40 bars43.2%1108.5%-36.4%56.7%76.4%-26.6%-47.5%
60 bars39.5%685.3%-65.5%69.1%73.8%-4.3%-44.9%
90 bars44.9%1229.7%-70.1%90.5%63.8%-48.0%-50.1%

The complete rules

Entry and capital model are the same on every row; only the hold changes — the constant HOLD_BARS in tools/indicators/bt_time_exit.py. The spec a bot imports exists for the winning hold: data/algo/donchian-time-20-10.json.

What this does not prove

The universe is a survivor sample, so every row here is an upper bound, not an expectation. The window holds one bear year against the 2020-21 bull and the 2023-26 recovery: it contains no bear market of comparable length, and a long-only rule structurally flatters itself on such a window. There is exactly one entry — a channel breakout; the conclusion about hold length is tested on it and does not transfer to other entries without a run.

A research note, not investment advice. A measured past is not a promise of returns. Back to the lab →