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)
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)
def test_creation_from_json(self): order_info = { "client_order_id": "OID1", "exchange_order_id": "EOID1", "trading_pair": self.trading_pair, "order_type": OrderType.LIMIT.name, "trade_type": TradeType.BUY.name, "price": "1000", "amount": "1", "executed_amount_base": "0.5", "executed_amount_quote": "500", "fee_asset": "USDT", "fee_paid": "5", "last_state": "closed", } order = LiquidInFlightOrder.from_json(order_info) self.assertEqual(order_info["client_order_id"], order.client_order_id) self.assertEqual(order_info["exchange_order_id"], order.exchange_order_id) self.assertEqual(order_info["trading_pair"], order.trading_pair) self.assertEqual(OrderType.LIMIT, order.order_type) self.assertEqual(TradeType.BUY, order.trade_type) self.assertEqual(Decimal(order_info["price"]), order.price) self.assertEqual(Decimal(order_info["amount"]), order.amount) self.assertEqual(order_info["last_state"], order.last_state) self.assertEqual(Decimal(order_info["executed_amount_base"]), order.executed_amount_base) self.assertEqual(Decimal(order_info["executed_amount_quote"]), order.executed_amount_quote) self.assertEqual(Decimal(order_info["fee_paid"]), order.fee_paid) self.assertEqual(order_info["fee_asset"], order.fee_asset) self.assertEqual(order_info, order.to_json())
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)