Backtesting

Volume Rounding in cTrader Backtests

Volume rounding can make a cTrader backtest risk more or less than its sizing rule intended. Record the executable volume, not just the target.

Volume rounding can make a cTrader backtest risk more or less than the sizing rule intended. If the test records only a target such as 1% risk, rather than the volume that could actually be traded, it has not verified the risk it reports.

That gap is easy to miss because the equity curve still looks tidy. It matters most at small balances, wide stops and symbols whose permitted volume increments are coarse. For a prop trader, a repeatable mismatch between intended and actual exposure is not cosmetic: it changes the path that has to stay inside the account rules.

A calculated size is not an executable size

A sizing formula produces a desired volume. A trading platform has to turn that number into a volume the symbol accepts. cTrader exposes each symbol's minimum, maximum and volume step, and its NormalizeVolumeInUnits method is explicitly for rounding a volume to an amount suitable for a trade. Its QuantityToVolumeInUnits and VolumeInUnitsToQuantity methods also make clear that lots and base-currency units are separate representations. See the cTrader Symbol API reference.

That is why a backtest needs two fields, not one:

FieldMeaning
Intended volumeThe raw result of the risk formula before platform constraints
Executable volumeThe normalized quantity the strategy would submit

The rounding rule changes the risk

With a fixed stop and a fixed per-unit loss assumption, the difference is arithmetic: actual risk divided by intended risk equals executable volume divided by intended volume. That relationship is a calculation, not a promise that every instrument has identical pip-value behaviour; the symbol specification and the platform's own risk methods remain the source of truth.

Rounding down can quietly under-size the trade

Suppose a formula requests 12,600 units and the permitted step is 1,000 units. Rounding down produces 12,000 units; rounding up produces 13,000 units. The first outcome risks less than the formula planned and the second risks more. Neither is inherently correct. The test needs the same declared choice as the cBot, then needs to calculate the resulting cash risk from that choice.

Rounding down is often treated as automatically conservative. It may be conservative for one trade, but a strategy whose smaller trades are repeatedly clipped can end up with a different distribution of exposure from the one whose expectancy was studied. A smooth result based on raw sizes is not a substitute for a result based on submitted sizes.

Rounding up needs an explicit budget

Rounding up is not merely a technical convenience. It can turn a risk ceiling into a risk overshoot. If the strategy permits it, the overshoot should be visible in the trade log and included in every daily-loss and portfolio-heat calculation. If it does not permit it, the rule should round down or skip the trade rather than assume the extra exposure is harmless.

cTrader also provides AmountRisked and fixed-risk helper methods in the same API reference. Use the platform calculation to check the amount associated with the normalized volume and stop, instead of assuming a lot conversion preserves the original cash risk.

The minimum volume is a decision point

The awkward case is not ordinary rounding. It is a raw size below the symbol minimum. A desired 200 units on a symbol with a 1,000-unit minimum cannot be made equivalent by tidy reporting: entering the minimum would create 5 times the intended volume under the same unit-risk assumption.

There are two defensible behaviours, and they describe different strategies:

  • Skip the trade and record that the account could not express the requested risk.
  • Trade the minimum and record the resulting risk as an exception to the sizing rule.

What does not work is silently promoting the order to the minimum while presenting the original target as if it happened. This is one reason the minimum-lot-size backtest belongs beside position-sizing results, and why changing a symbol specification deserves a fresh cBot test.

Make volume rounding part of the test record

The audit is small enough to be mechanical. For every attempted entry, retain the inputs and the platform result:

raw_volume = risk_budget / estimated_loss_per_unit
executable_volume = normalize(raw_volume, chosen_rounding_mode)

if executable_volume is below symbol_minimum:
    record_skip_or_exception()
else:
    actual_risk = platform_amount_risked(executable_volume, stop_distance)
    record(raw_volume, executable_volume, actual_risk, rounding_mode)

The point is not to impose a universal rounding mode. It is to make the chosen mode falsifiable. Review the largest positive and negative differences between intended and actual risk, then inspect whether they cluster in particular symbols, balances or stop distances. Averages can conceal the boundary cases that matter to a constrained account.

This belongs in the same evidence trail as pip-value drift in cTrader backtests. The published methodology and funding model are useful context: a result is only as reproducible as its data, execution assumptions and account constraints. They do not turn a backtest into a live record or guarantee a future result.

Frequently asked

Does cTrader automatically make every calculated volume valid?

cTrader provides symbol volume limits and a normalization method for a tradable volume, but a strategy still has to declare how it handles rounding and a raw size below the minimum. A backtest should record that decision and its resulting risk.

Is rounding down always safer in a prop-firm backtest?

It reduces the exposure of that individual trade under the same unit-risk assumption. It can still change the strategy's realised exposure pattern, so it is safer only in the narrow sense of that order; the full backtest must use the same rule.

Should a cBot submit the minimum volume when the calculated size is smaller?

Not by default. Submitting the minimum changes the stated sizing rule. The test should define whether that case is skipped or allowed as a logged exception, then measure the actual risk rather than calling it the target risk.

The stubborn takeaway: if volume is rounded after your risk calculation, the rounded volume—not the calculation—is the position your backtest has to defend.

Published Sep 08, 2026 · realbacktesting · Educational content and market commentary — not financial advice. Trading involves risk; past performance does not guarantee future results.