Three improvements, tested separately so far

Today’s TFM work found three genuinely independent improvements, each validated on its own against the same 110-stock backtest_core basket:

  1. Reward:risk ratio 3.0 - the profit-maximising point on the full 1.5-through-8.0 ladder, permutation-validated at every point tested.
  2. Second-nearest zone targeting - targeting the second-nearest support/resistance zone instead of the nearest one, a 33% net-profit improvement over the RR 3.0 baseline on its own.
  3. A small-cap exclusion filter - born out of the same post’s grading pilot, which found small-cap trades a net loser (avg R −0.029 across 145 trades) while large-cap trades carried almost the entire run’s profit (avg R 0.175 across 2,334 trades).

Each was found and validated independently, one factor at a time, against the same RR 3.0 baseline - meaning none of them had ever actually been tested running together. Stacked improvements don’t always add up cleanly: two genuinely good changes can still interact badly (one narrowing exactly the trades the other depends on, say) or simply overlap so much that the second adds nothing once the first is already in place. Worth checking rather than assuming.

The result

Configuration Net profit Profit factor Win rate Trades entered
RR 3.0 baseline £12,018 1.23 30.3% 2,862
+ Second-nearest target £16,001 1.25 33.1% 2,806
+ exclude small-cap (all three combined) £16,845 1.27 33.4% 2,650

They stack cleanly. Each step improves net profit, profit factor, and win rate together - not a tradeoff where one measure improves at another’s expense, which is the more common and more suspicious pattern when combining changes. Fewer trades are entered at each step (2,862 → 2,806 → 2,650) as the take-profit and market-cap filters each remove some of the weaker setups, but the trades that remain are consistently better, not just fewer.

The permutation test

RR 3.0 baseline All three combined
Real average R 0.1613 0.1591
Null distribution mean −0.0165 −0.0019
Null distribution range −0.090 to 0.061 −0.078 to 0.071
Real result beats 1,000 / 1,000 shuffles 1,000 / 1,000 shuffles
Percentile 100.0th 100.0th

Both beat every one of 1,000 random direction-shuffles. Real average R is very slightly lower for the combined configuration (0.159 vs 0.161) despite the higher total profit - the same pattern already seen with second-nearest targeting on its own: average R and total profit measure different things, and the combined configuration wins on volume and consistency of favourable trades rather than on the average trade being marginally bigger.

What’s actually running, in full

Entry - TFM’s three same-instrument conditions, unchanged from every other post in this series: short EMA above long EMA (or below, for a SHORT), MACD histogram positive (or negative), and the Stochastic crossed into oversold/overbought and hasn’t reversed since - plus duplicate-entry deduplication and daily re-validation of pending orders, both already covered in the reward:risk ladder post.

New this time - an outright rejection if the traded instrument is small-cap, checked before any trade plan is even created:

entry.excludedMarketCapTiers=SMALL_CAP

Exit - the nearest second-nearest support/resistance zone as the take-profit target (a change from the NEAREST zone used everywhere else on this site so far), with the stop-loss arithmetically backed out from that target at a reward:risk ratio of 3.0, same 14-day expiry window as before.

What’s still worth checking

The small-cap filter’s evidence is still cohort-level, not permutation-tested on its own. The original finding (small-cap trades losing money) came from splitting one run’s trades into groups and comparing outcomes - informative, but a different and weaker kind of validation than the direction-shuffle test the rest of this result relies on. What’s validated here is the combined configuration as a whole, which is the number that actually matters for a real trading decision - but the small-cap filter’s contribution to that combined result hasn’t been isolated and independently permutation-tested on its own.

Every one of today’s TFM results, including this one, still shares the same open caveats already flagged in the reward:risk ladder post - no genuine out-of-sample test yet (everything so far comes from the same 2016-2026 window every lever was also tuned against), and backtest execution is more forgiving than real trading (instant fills at touched prices, no spread). Worth reading alongside this result, not instead of it.