Community contribution: a stochastic sizing layer for keel — Dr. Issam Elhattab's Quant Lab note #432
Replies: 1 comment
Our findingsThank you, Dr. Elhattab. We re-derived the note rather than read it, checked its claims about keel against the source, and then ran its own methods on our real numbers. Everything below is reproducible from the repository and the cached candle data; where a number is an assumption rather than a measurement, it says so. Full write-up: docs/research/2026-08-20-quant-lab-note-cross-verification.md 1. The mathematics holds — all of it
Your claims about keel check out too: four rule families, And a correction on our side. Our first pass reported your 268 / 940 / 49.4 figures as unsourced — we searched 2. Substituting our real costs changes the force of your conclusionYour §3.3 table is illustrative at 25–60 bp per side and says measured costs must replace them. Ours is 120 bp (
At a 5% stop, break-even is 50%, not the 36.7% in the illustrative table. Costs do not shift our threshold; they dominate it. Our live rules use A second consequence of the same formulas: at b=6 and any 3. Applying §5.2 to a scheduled decision — and it changes itWe had a pooled forward-trades review scheduled for 2026-09-30 at n = 100 (#359), treating 100 pooled trades as 100 observations. Your §5.2 warns that naive pooling assumes independence. We measured the correction. Method. Reconstructed our live rule on ONE_HOUR bars with its own parameters — Validation first, because everything downstream depends on it:
Within 6% and 10%. (Omitting the ADX gate gives 70.6 — the gate accounts for the difference.) Result: Signals fire in herds of about eight assets the same day, and those trades then win or lose together. A pooled sample of 100 carries roughly 39 independent observations.
So the September review would have been powered to see only a ~20-point edge, and a non-result there would have been easy to misreport as "no edge" rather than "we could not have seen one." Raising the floor to ~258 makes Caveats we state rather than bury: DEFF 2.58 is a lower bound (clusters are UTC days; these trades span many hours), the ICC comes from backtest outcomes, and 4. The result we did not expect, and it came out of your κOur rail 14 caps monthly BUY notional at the venue's fee-free volume allowance. Trades inside it pay no taker fee. Nobody had put
We treat +0.02% as coincidence — the win rate is a reconstruction and ψ is assumed. What survives the whole plausible spread range is the shape: indistinguishable from break-even inside the fee-free allowance, decisively negative outside it. This reframes the rail. It is not a budget limit; it is the profitability boundary, and your framework is what made that visible. The timeframe interactionBoth of your formulas key on
Outside the allowance, every hourly round trip costs more than one full unit of risk. A 6R target nets 4.96R; a stop-out loses 2.04R. We had published the hourly clock as a 23× acceleration in evidence collection "with zero parameter changes" (#359). The signal count is unchanged — the economics are not, by a factor of 5.8. 5. It found a live defectFollowing the arithmetic exposed something we did not know: neither paper profile has ever recorded a trade. Zero rows in The cause is Fixed by seeding from real broker equity (#430), tracked in #426. The throughput consequence is stark and is not a settings problem: at $500/month, 258 pooled trades is roughly eight years away. 6. Where it overlaps work we had already publishedIn fairness to both: #368 (2026-08-18) analyses the same ten Keeks articles and reaches the same headline. Your §3.1 stake-versus-risk warning, the OptimalF reservation, the streak-sizing reservation and the CPPI gap-risk caveat each have a counterpart there. The overlap is not a problem — independent arrival at the same conclusion is corroboration. What we would ask is that a revision cite it, so a reader can tell deliberate divergence from rediscovery. Three places need reconciling:
7. Disposition
One scope gap to closeThe framework rests on In shortYour §7 says the layer "ne crée pas d'avantage" — it does not create an edge. Correct, and it did something we valued more: it gave us the vocabulary to state precisely how far from provable our position is, how long settling it would take, and which constraint actually binds. Three concrete outcomes — a mis-scoped review, a five-fold cost difference between our two clocks, and a paper pipeline that had silently recorded nothing — came out of applying your arithmetic to our own numbers. Work arising: #426, #427, #430, #431. We would welcome a revision addressing §6 and the DCA scope gap, and we would particularly value your view on |
Uh oh!
There was an error while loading. Please reload this page.
Contributed by Dr. Issam Elhattab (LinkedIn) — a 23-page modelling note proposing a stochastic sizing layer for keel, written to be readable before it is formalised.
📄 Read the full note (PDF, French)
🔍 Our cross-verification — findings summarised in the reply below.
The question it asks
When a signal appears, asking "how much can I win?" is not enough. You also have to ask "how confident am I that this edge exists at all?" The note is about the second question.
That lands squarely on keel's situation. The project's measured result is that no shipped rule family is net-positive at the taker fee actually paid (#304). The note takes that as its starting point rather than working around it, and is explicit that a sizing rule cannot rescue a structurally negative strategy:
What it proposes
Three ideas, each with a formula and a plain-language explanation beside it.
1. Put costs in the same unit as risk. A trade's cost per unit of risk is
κ = 2(φ+ψ)/s— taker fee plus half-spread, both sides, divided by the stop distance. From that, the win rate a rule needs merely to break even:The consequence is counter-intuitive and important: a tighter stop makes the position larger (
f_N = ρ/s), so costs consume a larger share of the risk being taken. Cost, not signal quality, can be what moves a strategy from viable to losing.2. Say out loud how little 100 trades proves. Detecting an edge of
δabove break-even at 80% power needs roughlyn ≈ 1.55/δ²observations:keel's promotion gate uses a 100-trade floor. That floor can detect a ~12-point edge — a very large one. A 3–5 point edge, already worth having in systematic trading, needs several times more data.
3. Report the probability that the edge is real. Instead of a point estimate
p̂, carry a distribution and publish— given the data, how likely is it that this rule is genuinely profitable after costs? The note is careful about the misreading:
π_edge = 0.92means 92% of the posterior sits above break-even, not a 92% chance the next trade wins.It adds a hierarchical layer so products with thin histories borrow strength from the rest, a CUSUM sequential test for edge erosion, and a multi-asset layer.
The boundary it respects
The layer may only ever shrink a position, never widen one, and never touches the fiqh reasoning, the attested screening, or the guards:
And §7 states plainly what it cannot do: it does not create an edge, does not remove costs, does not manufacture observations, and depends on statistical assumptions that have to be measured rather than asserted.
Why we are publishing it
Two reasons.
It is rigorous and honest. We re-derived every formula in it and they hold. It offers no alpha, and says so.
And it is useful to a project whose headline result is a non-result. keel declines to trade because it cannot prove an edge. This note supplies the vocabulary for saying how far from provable, how long until it could be settled, and what would have to change — and applying it to keel's real numbers surfaced things we did not know, including a defect in our own evidence pipeline.
Our findings, with numbers, are in the reply below.
Published with the contributor's work attributed to him. The note is a proposal for discussion, not adopted policy — nothing in it changes keel's rails, its screening, or its measured results.
All reactions