def size_to_qty(position_size: float, entry_price: float, precision: int = 3, fee_rate: float = 0) -> float: """ converts position-size to quantity example: requesting $100 at the entry_price of %50 would return 2 :param position_size: float :param entry_price: float :param precision: int :param fee_rate: :return: float """ if math.isnan(position_size) or math.isnan(entry_price): raise TypeError() if fee_rate != 0: position_size = position_size * (1 - fee_rate * 3) return jh.floor_with_precision(position_size / entry_price, precision)
def test_floor_with_precision(): assert jh.floor_with_precision(1.123) == 1 assert jh.floor_with_precision(1.123, 1) == 1.1 assert jh.floor_with_precision(1.123, 2) == 1.12 assert jh.floor_with_precision(1.123, 3) == 1.123 assert jh.floor_with_precision(1.123, 4) == 1.123