Пример #1
0
 def get_open_orders(self):
     orders = self.connection.get_open_orders()
     general_orders = []
     for o in orders:
         quantityPart = self.get_part(o['symbol'], o["origQty"], o['price'], o['side'])
         general_orders.append(
             Order(o['price'], o["origQty"], quantityPart, o['orderId'], o['symbol'], o['side'], o['type'],
                   self.exchange_name))
     return general_orders
Пример #2
0
    def process_event(self, event):
        # return event in generic type from websocket

        # if this event in general type it was send from start function and need call firs_copy
        if 'exchange' in event:
            return event

        if event['e'] == 'outboundAccountPosition':
            self.is_last_order_event_completed = True

        if event['e'] == 'executionReport':
            if event['X'] == 'FILLED':
                return
            elif event['x'] == 'CANCELED':
                return Actions.ActionCancel(
                    event['s'],
                    event['p'],
                    event['i'],
                    self.exchange_name,
                    event
                )
            self.last_order_event = event  # store event order_event coz we need in outboundAccountInfo event
            # sometimes can came event executionReport x == filled and x == new together so we need flag
            self.is_last_order_event_completed = False
            return

        elif event['e'] == 'outboundAccountInfo':
            if self.is_last_order_event_completed:
                return

            order_event = self.last_order_event

            if order_event['s'] not in self.pairs:
                return

            if order_event['o'] == 'MARKET':  # if market order, we haven't price and cant calculate quantity
                order_event['p'] = self.connection.get_ticker(symbol=order_event['s'])['lastPrice']

            # part = self.get_part(order_event['s'], order_event['q'], order_event['p'], order_event['S'])

            self.on_balance_update(event)

            # shortcut mean https://github.com/binance-exchange/binance-official-api-docs/blob/master/user-data-stream.md#order-update
            order = Order(order_event['p'],
                          order_event['q'],
                          self.get_part(order_event['s'], order_event['q'], order_event['p'], order_event['S']),
                          order_event['i'],
                          order_event['s'],
                          order_event['S'],
                          order_event['o'],
                          self.exchange_name,
                          order_event['P'])
            return Actions.ActionNewOrder(order,
                                          self.exchange_name,
                                          event)
    def _self_order_to_global(self, o) -> Order:
        if 'stopPx' not in o:
            o['stopPx'] = 0
        if o['price'] is None:
            o['price'] = self.socket[o['symbol']].get_instrument()['midPrice']

        return Order(o['price'], o["orderQty"],
                     self.get_part(o['symbol'], o["orderQty"], self.socket['XBTUSD'].get_instrument()['midPrice']),
                     o['orderID'],
                     self.translate(o['symbol']),
                     o['side'].upper(),
                     self.translate(o['ordType']),
                     self.exchange_name,
                     stop=o['stopPx'])