Rounding error on 32-bit makes Order.size float instead of integer
Discussed in https://github.com/kernc/backtesting.py/discussions/953
Originally posted by IMYin March 31, 2023
My trading target is futures, with a minimum trading size of 1 lot and a minimum unit of 300 per lot. When I trigger a certain signal, I only want to reduce my position instead of closing it completely. However, the parameter in the close function is a proportion value. So, if I hold a position of 7 lots and my size is 2100, the parameter set for self.position.close(portion=6/7), which is not wrong. But the result is that my position is 301, which is incorrect and causes a chain reaction of position errors later on.
The sample shown in the picture is incorrect.
The correct one should look like the following.

So I am wondering if it is possible to adjust the setting of the portion parameter?
https://github.com/kernc/backtesting.py/blob/0ce24d80b1bcb8120d95d31dc3bb351b1052a27d/backtesting/backtesting.py#L555-L560
>>> (1 - 6/7) * 2100
300.0000000000001
>>> from math import copysign
>>> copysign(max(1, round(abs(2100) * (6/7))), -2100)
-1800.0
Looks like a rounding error on your platform. 32-bit OS by chance?