def test_update_order_status_notifies_on_order_filled(self, mocked_api):
        url = KUCOIN_ROOT_API + CONSTANTS.ORDERS_PATH_URL
        regex_url = re.compile(f"^{url}")
        resp = self.get_order_response_mock(size=2, filled=2)
        mocked_api.get(regex_url, body=json.dumps(resp))

        clock = Clock(
            ClockMode.BACKTEST,
            start_time=self.exchange.UPDATE_ORDERS_INTERVAL,
            end_time=self.exchange.UPDATE_ORDERS_INTERVAL * 2,
        )
        TimeIterator.start(self.exchange, clock)
        order_id = "someId"
        exchange_id = "someExchangeId"
        self.exchange.in_flight_orders[
            order_id] = self.get_in_flight_order_mock(order_id, exchange_id)
        order = self.exchange.in_flight_orders[order_id]

        self.async_run_with_timeout(self.exchange._update_order_status())

        orders_filled_events = self.order_filled_logger.event_log
        order_completed_events = self.buy_order_completed_logger.event_log

        self.assertTrue(order.is_done)
        self.assertEqual(1, len(order_completed_events))
        self.assertEqual(1, len(orders_filled_events))
        self.assertEqual(order_id, order_completed_events[0].order_id)
        self.assertEqual(order_id, orders_filled_events[0].order_id)
    def test_update_order_status_skips_if_order_no_longer_tracked(
            self, mocked_api):
        order_id = "someId"
        exchange_id = "someExchangeId"

        url = KUCOIN_ROOT_API + CONSTANTS.ORDERS_PATH_URL
        regex_url = re.compile(f"^{url}")
        resp = self.get_order_response_mock(size=2, filled=2)
        mocked_api.get(
            regex_url,
            body=json.dumps(resp),
            callback=lambda *_, **__: self.exchange.stop_tracking_order(
                order_id),
        )

        clock = Clock(
            ClockMode.BACKTEST,
            start_time=self.exchange.UPDATE_ORDERS_INTERVAL,
            end_time=self.exchange.UPDATE_ORDERS_INTERVAL * 2,
        )
        TimeIterator.start(self.exchange, clock)
        self.exchange.in_flight_orders[
            order_id] = self.get_in_flight_order_mock(order_id, exchange_id)

        self.async_run_with_timeout(self.exchange._update_order_status())

        orders_filled_events = self.order_filled_logger.event_log
        order_completed_events = self.buy_order_completed_logger.event_log

        self.assertEqual(0, len(order_completed_events))
        self.assertEqual(0, len(orders_filled_events))
예제 #3
0
    def test_add_iterator(self):
        self.assertEqual(0, len(self.clock_realtime.child_iterators))
        self.assertEqual(0, len(self.clock_backtest.child_iterators))

        time_iterator: TimeIterator = TimeIterator()
        self.clock_realtime.add_iterator(time_iterator)
        self.clock_backtest.add_iterator(time_iterator)

        self.assertEqual(1, len(self.clock_realtime.child_iterators))
        self.assertEqual(time_iterator, self.clock_realtime.child_iterators[0])
        self.assertEqual(1, len(self.clock_backtest.child_iterators))
        self.assertEqual(time_iterator, self.clock_backtest.child_iterators[0])
예제 #4
0
 def setUp(self):
     self.time_iterator = TimeIterator()
     self.clock = Clock(ClockMode.BACKTEST, self.tick_size, self.start_timestamp, self.end_timestamp)
     self.clock.add_iterator(self.time_iterator)
예제 #5
0
class TimeIteratorUnitTest(unittest.TestCase):

    start_timestamp: float = pd.Timestamp("2021-01-01", tz="UTC").timestamp()
    end_timestamp: float = pd.Timestamp("2022-01-01 01:00:00", tz="UTC").timestamp()
    tick_size: int = 10

    def setUp(self):
        self.time_iterator = TimeIterator()
        self.clock = Clock(ClockMode.BACKTEST, self.tick_size, self.start_timestamp, self.end_timestamp)
        self.clock.add_iterator(self.time_iterator)

    def test_current_timestamp(self):
        # On initialization, current_timestamp should be NaN
        self.assertTrue(math.isnan(self.time_iterator.current_timestamp))

        self.time_iterator.start(self.clock)
        self.clock.backtest_til(self.start_timestamp)
        self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp)

    def test_clock(self):
        # On initialization, clock should be None
        self.assertTrue(self.time_iterator.clock is None)

        self.time_iterator.start(self.clock)
        self.assertEqual(self.clock, self.time_iterator.clock)

    def test_start(self):
        self.time_iterator.start(self.clock)
        self.assertEqual(self.clock, self.time_iterator.clock)
        self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp)

    def test_stop(self):
        self.time_iterator.start(self.clock)
        self.assertEqual(self.clock, self.time_iterator.clock)
        self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp)

        self.time_iterator.stop(self.clock)
        self.assertTrue(math.isnan(self.time_iterator.current_timestamp))
        self.assertTrue(self.time_iterator.clock is None)

    def test_tick(self):
        self.time_iterator.start(self.clock)
        self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp)

        # c_tick is called within Clock
        self.clock.backtest_til(self.start_timestamp + self.tick_size)
        self.assertEqual(self.start_timestamp + self.tick_size, self.time_iterator.current_timestamp)