Why Position-Size Math Needs a Rounding Step, Not Just Division
1 October 2026, 08:30
0
2
The arithmetic behind position sizing looks simple: decide how much money a stop is allowed to cost, divide that number by what one lot costs at that stop distance, and the result is the volume to trade. In practice the result of that division is a number like 0.4856 lots, and no broker will let you send it. Every symbol has a volume step, and the terminal will reject an order whose size is not a multiple of it. The division answers the question "what size makes the math exact"; the broker answers a different question, "what sizes exist at all", and the two answers almost never coincide. Rounding to the nearest step doesn't fix this, because rounding has a direction, and here the direction is not a matter of preference. If a calculated volume of 0.4856 lots rounds up to 0.49 (on a 0.01 step) or to 0.5 (on a 0.1 step), the position now costs more, at the same stop distance, than the number that went into the calculation. Whatever amount was budgeted for the trade, the order sitting in the market risks more than that. Rounding down to 0.48 or 0.4 has the opposite property: the position costs less than the budget, never more. The unused fraction of the budget is not lost, it simply was never large enough to buy another full step of size. Rounding down is the only direction that keeps the number typed into the risk field an upper bound rather than an estimate. Doing this by hand, or inside any Expert Advisor, is three steps. First, get the symbol's volume step, minimum and maximum from the platform; every symbol publishes them, and they differ between symbols and between brokers, so a step size copied from one instrument and reused on another is itself a way to reintroduce this same error. Second, divide the risk budget by the cost of one lot at the current stop distance, then floor-divide that raw number by the step and multiply back: floor(raw / step) * step. Never round to nearest, never ceiling. Third, check the result against the broker's maximum and minimum. The maximum is not guaranteed to be a multiple of the step either, so a volume that lands above it needs the same floor operation applied to the maximum, not a straight clamp to the maximum's raw value. Below the minimum there is no valid volume to send at all; the honest answer is to say so, not to round up to the minimum and quietly risk more than was asked for. One detail breaks this arithmetic if it's skipped: floating-point numbers don't store decimal fractions exactly, so a step of 0.01 or a raw volume that should be exactly 0.3 can come out as something like 0.30000000000000004 once it's gone through a division. A floor operation run directly on that value can silently drop or add a whole step, which is a real order-size error, not a rounding nicety. Two things fix it: add a very small tolerance before the floor, so a value that's a hair below a step boundary purely because of representation error still counts as being on it, and normalize the final result to the number of decimal digits the step itself implies, rather than trusting whatever the division produced. Skipping either one means the size that gets sent occasionally differs from the size that was calculated by exactly one step, for reasons that have nothing to do with the market. None of this requires any particular tool. It is arithmetic anyone can run against numbers their own broker already publishes for every symbol: the step, the minimum, the maximum, and whatever the platform reports as the cost of one lot at a given distance. One way to see the result of that arithmetic without running it by hand on every trade is Trade Risk Desk, a panel that reads those figures from the account and applies the same floor-down rounding automatically. The arithmetic above is what it is doing; the panel just saves the manual step.


