예제 #1
0
    def test_update_with_partial_trade_event(self):
        order = LiquidInFlightOrder(client_order_id="OID1",
                                    exchange_order_id="EOID1",
                                    trading_pair=self.trading_pair,
                                    order_type=OrderType.LIMIT,
                                    trade_type=TradeType.BUY,
                                    price=Decimal(10000),
                                    amount=Decimal(1),
                                    creation_timestamp=1640001112.0)

        trade_event_info = self._trade_info(1, 0.1, 10050.0, 10.0)

        update_result = order.update_with_trade_update(trade_event_info)

        self.assertTrue(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(Decimal("0.1"), order.executed_amount_base)
        expected_executed_quote_amount = Decimal("0.1") * Decimal(
            str(trade_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        self.assertEqual(Decimal(trade_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)
예제 #2
0
    def test_update_with_same_or_less_total_filled_amount_is_ignored(self):
        order = LiquidInFlightOrder(client_order_id="OID1",
                                    exchange_order_id="EOID1",
                                    trading_pair=self.trading_pair,
                                    order_type=OrderType.LIMIT,
                                    trade_type=TradeType.BUY,
                                    price=Decimal(10000),
                                    amount=Decimal(1))

        trade_event_info = self._trade_info(1, 0.1, 10050.0, 10.0)

        update_result = order.update_with_trade_update(trade_event_info)

        self.assertTrue(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(Decimal("0.1"), order.executed_amount_base)
        expected_executed_quote_amount = Decimal("0.1") * Decimal(
            str(trade_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        self.assertEqual(Decimal(trade_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)

        new_event_info = self._trade_info(2, 0.09, 10060.0, 50.0)

        update_result = order.update_with_trade_update(new_event_info)

        self.assertFalse(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(Decimal("0.1"), order.executed_amount_base)
        expected_executed_quote_amount = Decimal("0.1") * Decimal(
            str(trade_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        self.assertEqual(Decimal(trade_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)

        new_event_info = self._trade_info(3, 0.1, 10060.0, 50.0)

        update_result = order.update_with_trade_update(new_event_info)

        self.assertFalse(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(Decimal("0.1"), order.executed_amount_base)
        expected_executed_quote_amount = Decimal("0.1") * Decimal(
            str(trade_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        self.assertEqual(Decimal(trade_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)
예제 #3
0
    def test_update_with_full_fill_trade_event(self):
        order = LiquidInFlightOrder(client_order_id="OID1",
                                    exchange_order_id="EOID1",
                                    trading_pair=self.trading_pair,
                                    order_type=OrderType.LIMIT,
                                    trade_type=TradeType.BUY,
                                    price=Decimal(10000),
                                    amount=Decimal(1))

        trade_event_info = self._trade_info(1, 0.1, 10050.0, 10.0)

        update_result = order.update_with_trade_update(trade_event_info)

        self.assertTrue(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(Decimal("0.1"), order.executed_amount_base)
        expected_executed_quote_amount = Decimal("0.1") * Decimal(
            str(trade_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        self.assertEqual(Decimal(trade_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)

        complete_event_info = self._trade_info(2, 1, 10060.0, 50.0)

        update_result = order.update_with_trade_update(complete_event_info)

        self.assertTrue(update_result)
        self.assertFalse(order.is_done)
        self.assertEqual("live", order.last_state)
        self.assertEqual(order.amount, order.executed_amount_base)
        expected_executed_quote_amount += Decimal("0.9") * Decimal(
            str(complete_event_info["price"]))
        self.assertEqual(expected_executed_quote_amount,
                         order.executed_amount_quote)
        # According to Liquid support team they inform fee in a cumulative way
        self.assertEqual(Decimal(complete_event_info["order_fee"]),
                         order.fee_paid)
        self.assertEqual(trade_event_info["funding_currency"], order.fee_asset)