Esempio n. 1
0
    def get_trades(self, pair: Pair, page_number: int = 1) -> List[Trade]:
        assert(isinstance(pair, Pair))
        assert(isinstance(page_number, int))
        assert(page_number == 1)

        orders = self._http_authenticated("GET", "/v0/user_history", {})

        # filter orders by our pair
        orders = list(filter(lambda item: Address(item['baseTokenAddress']) == pair.sell_token and
                                          Address(item['quoteTokenAddress']) == pair.buy_token, orders))

        trades = []

        for order in orders:
            is_sell = order['side'] == 'sell'
            price = Wad.from_number(order['price'])
            events = order['timeline']

            for fill in filter(lambda event: event['action'] == 'filled', events):
                amount = Wad(int(fill['amount']))
                timestamp = int(fill['timestamp'])
                intent_id = fill['intentID']

                is_settled = any(event['action'] == 'settled' and event['intentID'] == intent_id for event in events)

                if is_settled:
                    trades.append(Trade(trade_id=order['orderHash'] + "_" + intent_id,
                                        timestamp=timestamp,
                                        pair=pair,
                                        is_sell=is_sell,
                                        price=price,
                                        amount=amount))

        return sort_trades(trades)
Esempio n. 2
0
    def get_trades(self, pair: str, page_number: int = 1) -> List[Trade]:
        assert (isinstance(pair, str))
        assert (isinstance(page_number, int))
        assert (page_number == 1)

        result = self._http_post("/api2/1/private/tradeHistory",
                                 {'currencyPair': pair})['trades']

        trades = list(
            map(
                lambda item: Trade(trade_id=int(item['tradeID']),
                                   order_id=int(item['orderNumber']),
                                   timestamp=int(item['time_unix']),
                                   pair=item['pair'],
                                   is_sell=item['type'] == 'sell',
                                   price=Wad.from_number(item['rate']),
                                   amount=Wad.from_number(item['amount']),
                                   amount_symbol=item['pair'].split('_')[0],
                                   money=Wad.from_number(item['total']),
                                   money_symbol=item['pair'].split('_')[1]),
                result))

        # gate.io API sometimes returns dodgy trades, so we remove them
        trades = list(
            filter(
                lambda trade: trade.money > Wad(0) and trade.amount > Wad(0),
                trades))

        return sort_trades(trades)
Esempio n. 3
0
    def get_trades(self, pair: str, page_number: int = 1) -> List[Trade]:
        assert(isinstance(pair, str))
        assert(isinstance(page_number, int))

        per_page = 100
        page_filter = f"page={page_number}&per_page={per_page}"
        result = self._http_get_signed(f"/v2/markets/{pair}/trades/mine?{page_filter}", {})['data']
        totalPages = result['totalPages']
        currentPage = result['currentPage']
        self.logger.debug(f'totalPages={totalPages};currentPage={currentPage}')

        # Oldest trades are on first page

        trades  = result['trades']
        trades = list(filter(lambda item: item['status'] == 'successful', trades))

        trades = list(map(lambda item: Trade(trade_id=item['transactionId'],
                                             timestamp=int(item['executedAt']/1000),
                                             pair=pair,
                                             is_sell= Address(item['buyer']) != Address(self.web3.eth.defaultAccount),
                                             price=Wad.from_number(item['price']),
                                             amount=Wad.from_number(item['amount']),
                                             createdAt=int(item['createdAt']/1000)), trades))

        return sort_trades(trades)
Esempio n. 4
0
    def get_trades(self, pair: str, **kwargs) -> List[Trade]:
        assert (isinstance(pair, str))

        result = self._http_post("/v0/trades", {'market': pair})

        result = filter(lambda item: item['completedAt'] is not None, result)
        trades = list(
            map(
                lambda item: Trade(trade_id=int(item['id']),
                                   timestamp=int(
                                       dateutil.parser.parse(item[
                                           'completedAt']).timestamp()),
                                   pair=pair,
                                   is_sell=item['type'] == 'sell',
                                   price=Wad.from_number(item['price']),
                                   amount=Wad.from_number(item['amount']),
                                   amount_symbol=item['baseToken'],
                                   money=Wad.from_number(item['amount']) * Wad.
                                   from_number(item['price']),
                                   money_symbol=item['quoteToken'],
                                   base_fee=Wad.from_number(item['baseFee']),
                                   trading_fee=Wad.from_number(item[
                                       'tradingFee'])), result))

        trades = sort_trades(trades)
        trades = filter_trades(trades, **kwargs)

        return trades
Esempio n. 5
0
    def get_trades(self, pair: str, page_number: int = 1) -> List[Trade]:
        assert (isinstance(pair, str))
        assert (isinstance(page_number, int))

        result = self._http_post("/v0/trades", {
            'market': pair,
            'page': page_number,
            'per_page': 100
        })['trades']

        result = filter(lambda item: item['state'] == 'confirmed', result)

        trades = list(
            map(
                lambda item: Trade(
                    trade_id=int(item['id']),
                    timestamp=int(
                        dateutil.parser.parse(item['createdAt']).timestamp()),
                    pair=pair,
                    is_sell=item['type'] == 'sell',
                    price=Wad.from_number(item['price']),
                    amount=Wad.from_number(item['amount']),
                    money=Wad.from_number(item['amount']) * Wad.from_number(
                        item['price'])), result))

        return sort_trades(trades)
Esempio n. 6
0
    def get_trades(self, pair: str, retry: bool = False) -> List[Trade]:
        assert (isinstance(pair, str))
        assert (isinstance(retry, bool))

        result = self._request(
            '/v1/orderpending', {
                "cmd": "orderpending/orderHistoryList",
                "body": {
                    "pair": pair,
                    "account_type": 0,
                    "page": 1,
                    "size": 200
                }
            }, retry)['items']

        # We are interested in limit orders only ("order_type":2)
        trades = list(filter(lambda item: item['order_type'] == 2, result))

        trades = list(
            map(
                lambda item: Trade(trade_id=item['id'],
                                   timestamp=int(item['createdAt'] / 1000),
                                   pair=pair,
                                   is_sell=True
                                   if item['order_side'] == 2 else False,
                                   price=Wad.from_number(item['price']),
                                   amount=Wad.from_number(item['amount']),
                                   amount_symbol=item['coin_symbol'],
                                   money=Wad.from_number(item['money']),
                                   money_symbol=item['currency_symbol'],
                                   fee=Wad.from_number(item['fee'])), trades))

        return sort_trades(trades)
Esempio n. 7
0
    def get_trades(self, pair: str, **kwargs) -> List[Trade]:
        assert (isinstance(pair, str))

        trades = self.sync_trades(pair)
        trades = sort_trades(trades)
        trades = filter_trades(trades, **kwargs)

        return trades
Esempio n. 8
0
    def get_trades(self,
                   pair: str,
                   retry: bool = False,
                   retry_count: int = MAX_RETRIES,
                   **kwargs) -> List[Trade]:
        assert (isinstance(pair, str))
        assert (isinstance(retry, bool))
        assert (isinstance(retry_count, int))

        trades = self.sync_trades(pair, retry, retry_count)
        trades = sort_trades(trades)
        trades = filter_trades(trades, **kwargs)

        return trades
Esempio n. 9
0
    def get_trades(self, pair: str, page_number: int = 1) -> List[Trade]:
        assert(isinstance(pair, str))
        assert(isinstance(page_number, int))
        assert(page_number == 1)

        result = self._http_get("/trades", f"trading-pair-name={pair}")

        trades = list(map(lambda item: Trade(trade_id=int(item['id']),
                                             timestamp=int(dateutil.parser.parse(item['timestamp']).timestamp()),
                                             pair=str(item['tradingPairName']),
                                             is_sell=item['side'] == 'sell',
                                             price=Wad.from_number(item['price']),
                                             amount=Wad.from_number(item['baseAmount'])), result))

        return sort_trades(trades)
Esempio n. 10
0
    def get_trades(self, pair: str, page_number: int = 1) -> List[Trade]:
        assert (isinstance(pair, str))
        assert (isinstance(page_number, int))

        page_number = page_number - 1  # page offset start at 0
        per_page = 100
        page_filter = f"symbol={pair}&limit={per_page}&offset={page_number}"
        result = self._auth_get(f"/api/2/history/trades?{page_filter}")

        trades = list(
            map(
                lambda item: Trade(
                    trade_id=item['id'],
                    order_id=item['clientOrderId'],
                    timestamp=self._date_to_timestamp(item['timestamp']),
                    pair=item['symbol'],
                    is_sell=item['side'] == 'sell',
                    price=Wad.from_number(item['price']),
                    amount=Wad.from_number(item['quantity'])), result))

        return sort_trades(trades)