It converts a third of the trades from scratches into small winners, and pays for it by halving the big ones. Over two years the two almost exactly cancel.
Safe to build. Flat on raw expectancy, mildly positive once drawdown is accounted for — sell it as a risk change, not a profit one.
The partial does not change when the runner exits, so the proposal takes the identical 10,687 trades as the current engine, in the same order, on the same bars. That makes this an exactly paired comparison — every difference below comes from the exit split alone, not from a different trade list.
| Per contract | Trades | Win % | PF | Expectancy | Total | Max DD | Ret ÷ DD |
|---|---|---|---|---|---|---|---|
| M3 today — 1 lot, BE30 / TP150 / SL250 | 10,687 | 26.2% | 1.30 | +4.04 | 43,200 | −2,247 | 19.2 |
| Proposal — 2 lots, 1 @ +30, runner BE | 10,687 | 60.4% | 1.28 | +3.74 | 40,010 | −1,946 | 20.6 |
| Reversal exit only (no stop, no target) | 6,883 | 37.8% | 1.24 | +4.93 | 33,934 | −3,405 | 10.0 |
No — that combination never happens, and it is the easiest thing to misread here because two different comparisons are in play.
Per contract, profit falls 7.4% and drawdown falls 13.4%. Less of both. As two lots, profit rises 85% and drawdown rises 73%. More of both. It is not a profit-for-risk trade at all: taking money off the table earlier shrinks the winners and shortens the losing runs.
Which makes the real question: size each model to the same drawdown, then who makes more?
| Sized to M3-today's drawdown | Own max DD | Size | Profit at equal risk | Sharpe |
|---|---|---|---|---|
| M3 today — 1 lot | −2,247 | 1.00× | 43,200 | 4.31 |
| Proposal — partial @ +30, runner BE | −1,946 | 1.15× | 46,199 | 4.96 |
| Partial @ +75, runner BE | −1,793 | 1.25× | 53,263 | 4.82 |
| Partial @ +30, runner locks +30 | −1,582 | 1.42× | 68,536 | 5.63 |
So the proposal is a small improvement once risk is held constant, not the wash the raw −3,190 suggests. The same adjustment points much harder at the +30-lock variant — see finding B.
Because the trade list is identical, the difference decomposes exactly. Three buckets change, and they nearly cancel.
Change in total points per contract, by exit type
The remaining 0.9% of trades hit the −250 disaster stop before reaching +30, so both contracts exit there and nothing changes for them.
Read plainly: the scale-out buys back the trades that used to finish flat, and pays for them by cutting the winners in half. At +30 those two are the same size. Everything else in the sweep is a variation on that trade-off.
Moving the partial further out costs less — but only because it fires less often. By +100 it barely happens, and by then you have most of the current engine back.
| Partial taken at | Fires on | Win % | Expectancy | vs. M3 today | 90% CI | |
|---|---|---|---|---|---|---|
| +20 points | 66.5% | 63.7% | +3.47 | −6,092 | [−10,132, −1,917] | worse |
| +30 points — as asked | 56.3% | 60.4% | +3.74 | −3,190 | [−6,743, +359] | no effect |
| +40 points | 41.9% | 48.8% | +3.87 | −1,806 | [−5,105, +1,441] | no effect |
| +50 points | 32.8% | 41.3% | +3.85 | −2,041 | [−5,230, +1,033] | no effect |
| +75 points | 20.8% | 32.4% | +3.98 | −699 | [−3,213, +1,754] | no effect |
| +100 points | 14.3% | 28.7% | +3.98 | −618 | [−2,556, +1,367] | no effect |
Keep the partial but leave the runner's stop at −250, and the model measures −13,921 against the current engine — significantly worse. This repeats the earlier finding that breakeven at +30 is the one exit rule with real support behind it. Whatever gets built, the ratchet stays.
Same 2 lots, same partial at +30 — but the runner's stop goes to +30 instead of entry. It is the only variant in the sweep with a positive point estimate (+5,053, CI [−862, +10,827]), the best return-to-drawdown in the table at 30.5 against 19.2, and the highest total. It wins partly by ending trades sooner and freeing the one-position slot for the next signal. worth a decision
Every alternative is significantly worse: removing the target −5,970, widening to +200 −4,352, to +300 −5,076, or replacing it with a 100-point trail −5,899. The +150 exit is not the part to reopen.
The extra fill is not an extra cost. Splitting one 2-lot exit into two 1-lot exits leaves the number of legs per contract unchanged, and futures commission, exchange fees and slippage are all charged per contract. The scale-out is cost-neutral — which is not true of most exit changes, and is a genuine point in its favour.
What does change is exposure to fill quality on the partial. It fires on 56% of trades, and the engine sends a market order the moment the brick's high touches +30, so the +30 leg is the one most sensitive to a bad fill. The model charges half a point; if live fills come in worse than that on the partial specifically, the already-marginal result moves against you.
BarCloseTime — the instant the Renko brick completes and the
signal first exists — filled at the 1-second market price then, plus half a point
of slippage. No look-ahead, and no signal screened out by what it did next.Breakeven: Allow Same-Bar Exit = No.research/r35_scaleout.py · research/payload_scale.json ·
research/r35_out.txt.Two limits worth stating. Where +30 and the final exit land inside the same one-second bar, the partial is dropped and the whole position is booked at the final level — rare, and it flatters the result slightly.
And this measures the exit rule on today's signal and permission layers. The M2 slope thresholds are still uncalibrated, so every number here moves if that changes.