Skip to content

nb package

Numba-compiled functions for working with portfolio.

Provides an arsenal of Numba-compiled functions that are used for portfolio simulation, such as generating and filling orders. These only accept NumPy arrays and other Numba-compatible types.

Note

vectorbt treats matrices as first-class citizens and expects input arrays to be 2-dim, unless function has suffix _1d or is meant to be input to another function.

All functions passed as argument must be Numba-compiled.

Records must retain the order they were created in.

Warning

Accumulation of roundoff error possible. See here for explanation.

Rounding errors can cause trades and positions to not close properly:

>>> print('%.50f' % 0.1)  # has positive error
0.10000000000000000555111512312578270211815834045410

>>> # many buy transactions with positive error -> cannot close position
>>> sum([0.1 for _ in range(1000000)]) - 100000
1.3328826753422618e-06

>>> print('%.50f' % 0.3)  # has negative error
0.29999999999999998889776975374843459576368331909180

>>> # many sell transactions with negative error -> cannot close position
>>> 300000 - sum([0.3 for _ in range(1000000)])
5.657668225467205e-06

While vectorbt has implemented tolerance checks when comparing floats for equality, adding/subtracting small amounts large number of times may still introduce a noticable error that cannot be corrected post factum.

To mitigate this issue, avoid repeating lots of micro-transactions of the same sign. For example, reduce by np.inf or position_now to close a long/short position.

See vectorbtpro.utils.math_ for current tolerance values.

Warning

Make sure to use parallel=True only if your columns are independent.


Sub-modules