+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:
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.
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.
Every hold on one table
| hold | total | annualised | drawdown | sharpe | trades | in market | null p50 | null p95 | beats null |
|---|---|---|---|---|---|---|---|---|---|
| 10 bars | 1382.3% | 58.3% | -29.9% | 1.51 | 463 | 23.7% | 192.8% | 852.0% | yes |
| 20 bars | 957.1% | 49.4% | -44.9% | 1.11 | 372 | 36.3% | 306.1% | 1204.8% | no |
| 40 bars | 1071.4% | 52.0% | -67.3% | 0.98 | 272 | 51.5% | 411.4% | 1660.1% | no |
| 60 bars | 484.8% | 35.1% | -77.5% | 0.80 | 225 | 62.9% | 511.1% | 2082.2% | no |
| 90 bars | 365.8% | 29.9% | -83.4% | 0.72 | 176 | 73.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
By year
| hold | 2020 (09-12) | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 (01-08) |
|---|---|---|---|---|---|---|---|
| 10 bars | 33.1% | 444.5% | -16.1% | 16.5% | 92.5% | 17.3% | -7.3% |
| 20 bars | 36.0% | 449.2% | -29.8% | 78.9% | 50.2% | -3.7% | -22.0% |
| 40 bars | 43.2% | 1108.5% | -36.4% | 56.7% | 76.4% | -26.6% | -47.5% |
| 60 bars | 39.5% | 685.3% | -65.5% | 69.1% | 73.8% | -4.3% | -44.9% |
| 90 bars | 44.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.
- entry — close above the highest high of the prior 20 days, first breakout bar only;
- fill — at the next daily open;
- exit — by time, no stop: the exit laboratory showed stop rules cut the entry's edge;
- capital — 10 equal sleeves compounding inside the sleeve, no rebalancing, no leverage, no short;
- costs — 0.15% per side;
- universe — 10 surviving majors; the window opens 2020-09-23 on the listing date of AVAXUSDT, the youngest name in the basket.
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 →