Beispiel #1
0
    def test_floor_with_ten_ones_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        for _i in range(20):
            floored_atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act, Assert
        assert floored_atr.value == 5e-05
Beispiel #2
0
    def test_floor_with_exponentially_decreasing_high_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        high = 1.00020
        low = 1.00000
        close = 1.00000

        for _i in range(20):
            high -= (high - low) / 2
            floored_atr.update_raw(high, low, close)

        # Act, Assert
        assert floored_atr.value == 5e-05
class AverageTrueRangeTests(unittest.TestCase):
    def setUp(self):
        # Fixture Setup
        self.atr = AverageTrueRange(10)

    def test_name_returns_expected_string(self):
        # Arrange
        # Act
        # Assert
        self.assertEqual("AverageTrueRange", self.atr.name)

    def test_str_repr_returns_expected_string(self):
        # Arrange
        # Act
        # Assert
        self.assertEqual("AverageTrueRange(10, SIMPLE, True, 0.0)",
                         str(self.atr))
        self.assertEqual("AverageTrueRange(10, SIMPLE, True, 0.0)",
                         repr(self.atr))

    def test_period(self):
        # Arrange
        # Act
        # Assert
        self.assertEqual(10, self.atr.period)

    def test_initialized_without_inputs_returns_false(self):
        # Arrange
        # Act
        # Assert
        self.assertEqual(False, self.atr.initialized)

    def test_initialized_with_required_inputs_returns_true(self):
        # Arrange
        # Act
        for _i in range(10):
            self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Assert
        self.assertEqual(True, self.atr.initialized)

    def test_handle_bar_updates_indicator(self):
        # Arrange
        indicator = AverageTrueRange(10)

        bar = TestStubs.bar_5decimal()

        # Act
        indicator.handle_bar(bar)

        # Assert
        self.assertTrue(indicator.has_inputs)
        self.assertEqual(2.999999999997449e-05, indicator.value)

    def test_value_with_no_inputs_returns_zero(self):
        # Arrange
        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_epsilon_input(self):
        # Arrange
        epsilon = sys.float_info.epsilon
        self.atr.update_raw(epsilon, epsilon, epsilon)

        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_one_ones_input(self):
        # Arrange
        self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_one_input(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act
        # Assert
        self.assertAlmostEqual(0.00020, self.atr.value)

    def test_value_with_three_inputs(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act
        # Assert
        self.assertAlmostEqual(0.00020, self.atr.value)

    def test_value_with_close_on_high(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high += 0.00010
            low += 0.00010
            close = high
            self.atr.update_raw(high, low, close)

        # Assert
        self.assertAlmostEqual(0.00010, self.atr.value, 2)

    def test_value_with_close_on_low(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high -= 0.00010
            low -= 0.00010
            close = low
            self.atr.update_raw(high, low, close)

        # Assert
        self.assertAlmostEqual(0.00010, self.atr.value)

    def test_floor_with_ten_ones_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        for _i in range(20):
            floored_atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act
        # Assert
        self.assertEqual(5e-05, floored_atr.value)

    def test_floor_with_exponentially_decreasing_high_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        high = 1.00020
        low = 1.00000
        close = 1.00000

        for _i in range(20):
            high -= (high - low) / 2
            floored_atr.update_raw(high, low, close)

        # Act
        # Assert
        self.assertEqual(5e-05, floored_atr.value)

    def test_reset_successfully_returns_indicator_to_fresh_state(self):
        # Arrange
        for _i in range(1000):
            self.atr.update_raw(1.00010, 1.00000, 1.00005)

        # Act
        self.atr.reset()

        # Assert
        self.assertFalse(self.atr.initialized)
        self.assertEqual(0, self.atr.value)
Beispiel #4
0
class AverageTrueRangeTests(unittest.TestCase):

    # Fixture Setup
    def setUp(self):
        # Arrange
        self.atr = AverageTrueRange(10)

    def test_name(self):
        # Act
        # Assert
        self.assertEqual('AverageTrueRange', self.atr.name)

    def test_str(self):
        # Act
        # Assert
        self.assertEqual('AverageTrueRange(10, SIMPLE, True, 0.0)', str(self.atr))

    def test_repr(self):
        # Act
        # Assert
        self.assertTrue(repr(self.atr).startswith('<AverageTrueRange(10, SIMPLE, True, 0.0) object at'))
        self.assertTrue(repr(self.atr).endswith('>'))

    def test_period(self):
        # Act
        # Assert
        self.assertEqual(10, self.atr.period)

    def test_initialized_without_inputs_returns_false(self):
        # Act
        # Assert
        self.assertEqual(False, self.atr.initialized)

    def test_initialized_with_required_inputs_returns_true(self):
        # Act
        for _i in range(10):
            self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Assert
        self.assertEqual(True, self.atr.initialized)

    def test_value_with_no_inputs_returns_zero(self):
        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_epsilon_input(self):
        # Arrange
        epsilon = sys.float_info.epsilon
        self.atr.update_raw(epsilon, epsilon, epsilon)

        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_one_ones_input(self):
        # Arrange
        self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act
        # Assert
        self.assertEqual(0.0, self.atr.value)

    def test_value_with_one_input(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act
        # Assert
        self.assertAlmostEqual(0.00020, self.atr.value)

    def test_value_with_three_inputs(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act
        # Assert
        self.assertAlmostEqual(0.00020, self.atr.value)

    def test_value_with_close_on_high(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high += 0.00010
            low += 0.00010
            close = high
            self.atr.update_raw(high, low, close)

        # Assert
        self.assertAlmostEqual(0.00010, self.atr.value, 2)

    def test_value_with_close_on_low(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high -= 0.00010
            low -= 0.00010
            close = low
            self.atr.update_raw(high, low, close)

        # Assert
        self.assertAlmostEqual(0.00010, self.atr.value)

    def test_floor_with_ten_ones_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        for _i in range(20):
            floored_atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act
        # Assert
        self.assertEqual(5e-05, floored_atr.value)

    def test_floor_with_exponentially_decreasing_high_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        high = 1.00020
        low = 1.00000
        close = 1.00000

        for _i in range(20):
            high -= (high - low) / 2
            floored_atr.update_raw(high, low, close)

        # Act
        # Assert
        self.assertEqual(5e-05, floored_atr.value)

    def test_reset_successfully_returns_indicator_to_fresh_state(self):
        # Arrange
        for _i in range(1000):
            self.atr.update_raw(1.00010, 1.00000, 1.00005)

        # Act
        self.atr.reset()

        # Assert
        self.assertEqual(0.0, self.atr.value)  # No assertion errors.

    def test_with_battery_signal(self):
        # Arrange
        battery_signal = BatterySeries.create()
        output = []

        # Act
        for point in BatterySeries.create():
            self.atr.update_raw(point, sys.float_info.epsilon, sys.float_info.epsilon)
            output.append(self.atr.value)

        # Assert
        self.assertEqual(len(battery_signal), len(output))
Beispiel #5
0
class TestAverageTrueRange:
    def setup(self):
        # Fixture Setup
        self.atr = AverageTrueRange(10)

    def test_name_returns_expected_string(self):
        # Arrange, Act, Assert
        assert self.atr.name == "AverageTrueRange"

    def test_str_repr_returns_expected_string(self):
        # Arrange, Act, Assert
        assert str(self.atr) == "AverageTrueRange(10, SIMPLE, True, 0.0)"
        assert repr(self.atr) == "AverageTrueRange(10, SIMPLE, True, 0.0)"

    def test_period(self):
        # Arrange, Act, Assert
        assert self.atr.period == 10

    def test_initialized_without_inputs_returns_false(self):
        # Arrange, Act, Assert
        assert self.atr.initialized is False

    def test_initialized_with_required_inputs_returns_true(self):
        # Arrange, Act
        for _i in range(10):
            self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Assert
        assert self.atr.initialized is True

    def test_handle_bar_updates_indicator(self):
        # Arrange
        indicator = AverageTrueRange(10)

        bar = TestDataStubs.bar_5decimal()

        # Act
        indicator.handle_bar(bar)

        # Assert
        assert indicator.has_inputs
        assert indicator.value == 2.999999999997449e-05

    def test_value_with_no_inputs_returns_zero(self):
        # Arrange, Act, Assert
        assert self.atr.value == 0.0

    def test_value_with_epsilon_input(self):
        # Arrange
        epsilon = sys.float_info.epsilon
        self.atr.update_raw(epsilon, epsilon, epsilon)

        # Act, Assert
        assert self.atr.value == 0.0

    def test_value_with_one_ones_input(self):
        # Arrange
        self.atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act, Assert
        assert self.atr.value == 0.0

    def test_value_with_one_input(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act, Assert
        assert self.atr.value == pytest.approx(0.00020)

    def test_value_with_three_inputs(self):
        # Arrange
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)
        self.atr.update_raw(1.00020, 1.00000, 1.00010)

        # Act, Assert
        assert self.atr.value == pytest.approx(0.00020)

    def test_value_with_close_on_high(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high += 0.00010
            low += 0.00010
            close = high
            self.atr.update_raw(high, low, close)

        # Assert
        assert self.atr.value == pytest.approx(0.00010, 2)

    def test_value_with_close_on_low(self):
        # Arrange
        high = 1.00010
        low = 1.00000

        # Act
        for _i in range(1000):
            high -= 0.00010
            low -= 0.00010
            close = low
            self.atr.update_raw(high, low, close)

        # Assert
        assert self.atr.value == pytest.approx(0.00010)

    def test_floor_with_ten_ones_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        for _i in range(20):
            floored_atr.update_raw(1.00000, 1.00000, 1.00000)

        # Act, Assert
        assert floored_atr.value == 5e-05

    def test_floor_with_exponentially_decreasing_high_inputs(self):
        # Arrange
        floor = 0.00005
        floored_atr = AverageTrueRange(10, value_floor=floor)

        high = 1.00020
        low = 1.00000
        close = 1.00000

        for _i in range(20):
            high -= (high - low) / 2
            floored_atr.update_raw(high, low, close)

        # Act, Assert
        assert floored_atr.value == 5e-05

    def test_reset_successfully_returns_indicator_to_fresh_state(self):
        # Arrange
        for _i in range(1000):
            self.atr.update_raw(1.00010, 1.00000, 1.00005)

        # Act
        self.atr.reset()

        # Assert
        assert not self.atr.initialized
        assert self.atr.value == 0