Esempio n. 1
0
 def restore_tracking_states(self, saved_states: Dict[str, any]):
     """
     Restore in-flight orders from saved tracking states, this is st the connector can pick up on where it left off
     when it disconnects.
     :param saved_states: The saved tracking_states.
     """
     self._in_flight_orders.update({
         key: GateIoInFlightOrder.from_json(value)
         for key, value in saved_states.items()
     })
 def get_in_flight_order(
         self,
         client_order_id: str,
         exchange_order_id: str = "someExchId") -> GateIoInFlightOrder:
     order = GateIoInFlightOrder(client_order_id,
                                 exchange_order_id,
                                 self.trading_pair,
                                 OrderType.LIMIT,
                                 TradeType.BUY,
                                 price=Decimal("5.1"),
                                 amount=Decimal("1"),
                                 creation_timestamp=1640001112.0)
     return order
Esempio n. 3
0
 def start_tracking_order(self, order_id: str, exchange_order_id: str,
                          trading_pair: str, trade_type: TradeType,
                          price: Decimal, amount: Decimal,
                          order_type: OrderType):
     """
     Starts tracking an order by simply adding it into _in_flight_orders dictionary.
     """
     self._in_flight_orders[order_id] = GateIoInFlightOrder(
         client_order_id=order_id,
         exchange_order_id=exchange_order_id,
         trading_pair=trading_pair,
         order_type=order_type,
         trade_type=trade_type,
         price=price,
         amount=amount)
Esempio n. 4
0
 def _trigger_order_fill(self, tracked_order: GateIoInFlightOrder,
                         update_msg: Dict[str, Any]):
     self.trigger_event(
         MarketEvent.OrderFilled,
         OrderFilledEvent(
             self.current_timestamp, tracked_order.client_order_id,
             tracked_order.trading_pair, tracked_order.trade_type,
             tracked_order.order_type,
             Decimal(
                 str(
                     update_msg.get("fill_price",
                                    update_msg.get("price", "0")))),
             tracked_order.executed_amount_base,
             AddedToCostTradeFee(flat_fees=[
                 TokenAmount(tracked_order.fee_asset,
                             tracked_order.fee_paid)
             ]), str(update_msg.get("update_time_ms",
                                    update_msg.get("id")))))
     if math.isclose(tracked_order.executed_amount_base, tracked_order.amount) or \
             tracked_order.executed_amount_base >= tracked_order.amount or \
             tracked_order.is_done:
         tracked_order.last_state = "FILLED"
         self.logger().info(
             f"The {tracked_order.trade_type.name} order "
             f"{tracked_order.client_order_id} has completed "
             f"according to order status API.")
         event_tag = MarketEvent.BuyOrderCompleted if tracked_order.trade_type is TradeType.BUY \
             else MarketEvent.SellOrderCompleted
         event_class = BuyOrderCompletedEvent if tracked_order.trade_type is TradeType.BUY \
             else SellOrderCompletedEvent
         self.trigger_event(
             event_tag,
             event_class(self.current_timestamp,
                         tracked_order.client_order_id,
                         tracked_order.base_asset,
                         tracked_order.quote_asset, tracked_order.fee_asset,
                         tracked_order.executed_amount_base,
                         tracked_order.executed_amount_quote,
                         tracked_order.fee_paid, tracked_order.order_type,
                         tracked_order.exchange_order_id))
         self.stop_tracking_order(tracked_order.client_order_id)