def test_build_when_no_updates_raises_exception(self): # Arrange bar_type = TestStubs.bartype_audusd_1min_bid() builder = BarBuilder(AUDUSD_SIM, bar_type) # Act, Assert with pytest.raises(TypeError): builder.build()
def test_build_with_previous_close(self): # Arrange bar_spec = TestStubs.bar_spec_1min_mid() builder = BarBuilder(bar_spec, use_previous_close=True) tick1 = QuoteTick(symbol=AUDUSD_FXCM, bid=Price("1.00001"), ask=Price("1.00004"), bid_size=Quantity(1), ask_size=Quantity(1), timestamp=UNIX_EPOCH) tick2 = QuoteTick(symbol=AUDUSD_FXCM, bid=Price("1.00002"), ask=Price("1.00005"), bid_size=Quantity(1), ask_size=Quantity(1), timestamp=UNIX_EPOCH) tick3 = QuoteTick(symbol=AUDUSD_FXCM, bid=Price("1.00000"), ask=Price("1.00003"), bid_size=Quantity(1), ask_size=Quantity(1), timestamp=UNIX_EPOCH) builder.handle_quote_tick(tick1) builder.handle_quote_tick(tick2) builder.handle_quote_tick(tick3) builder.build() # Act bar = builder.build() # Also resets builder # Assert self.assertEqual(Price("1.000015"), bar.open) self.assertEqual(Price("1.000015"), bar.high) self.assertEqual(Price("1.000015"), bar.low) self.assertEqual(Price("1.000015"), bar.close) self.assertEqual(Quantity(), bar.volume) self.assertEqual(UNIX_EPOCH, bar.timestamp) self.assertEqual(UNIX_EPOCH, builder.last_update) self.assertEqual(0, builder.count)
def test_build_with_previous_close(self): # Arrange bar_spec = TestStubs.bar_spec_1min_mid() builder = BarBuilder(bar_spec, use_previous_close=True) builder.update(Price("1.00001"), Quantity("1.0"), UNIX_EPOCH) builder.build() # This close should become the next open builder.update(Price("1.00000"), Quantity("1.0"), UNIX_EPOCH) builder.update(Price("1.00003"), Quantity("1.0"), UNIX_EPOCH) builder.update(Price("1.00002"), Quantity("1.0"), UNIX_EPOCH) bar2 = builder.build() # Assert self.assertEqual(Price("1.00001"), bar2.open) self.assertEqual(Price("1.00003"), bar2.high) self.assertEqual(Price("1.00000"), bar2.low) self.assertEqual(Price("1.00002"), bar2.close) self.assertEqual(Quantity("3.0"), bar2.volume)
def test_build_when_received_updates_returns_expected_bar(self): # Arrange bar_spec = TestStubs.bar_spec_1min_bid() builder = BarBuilder(bar_spec, use_previous_close=True) builder.update(Price("1.00001"), Quantity("1.0"), UNIX_EPOCH) builder.update(Price("1.00002"), Quantity("1.5"), UNIX_EPOCH) builder.update(Price("1.00000"), Quantity("1.5"), UNIX_EPOCH + timedelta(seconds=1)) # Act bar = builder.build() # Also resets builder # Assert self.assertEqual(Price("1.00001"), bar.open) self.assertEqual(Price("1.00002"), bar.high) self.assertEqual(Price("1.00000"), bar.low) self.assertEqual(Price("1.00000"), bar.close) self.assertEqual(Quantity("4.0"), bar.volume) self.assertEqual(UNIX_EPOCH + timedelta(seconds=1), bar.timestamp) self.assertEqual(UNIX_EPOCH + timedelta(seconds=1), builder.last_timestamp) self.assertEqual(0, builder.count)