Position sizing is the only knob you actually turn
Every account I have blown up died the same way: position size drifted upward while the win rate stayed flat. Here is the arithmetic I now run before the London open.
The three numbers
Risk per trade, as a fraction of equity.
Distance to the invalidation level, in points.
Point value for the instrument and lot size.
Two of them are known before the trade. The third is the one you choose, and it is the only one that ever moves.
The sizing function
const lots = (equity * riskFraction) / (stopPoints * pointValue)
if (lots > maxLots) throw new Error("size exceeds the plan")A plan you override once is a plan you have already stopped having.
The throw is not decoration. If the number comes back larger than the plan allows, the correct action is to skip the trade, not to widen the plan. Skipping costs nothing that a wrong-sized entry does not cost more of.