def format_trades(trades):
    ret_val = []
    for trade in trades:
        sum_trades = [
            t for t in trades if t["symbol"] == trade["symbol"] and
            t["orderId"] == trade["orderId"] and t["price"] == trade["price"]
        ]
        if not sum_trades:
            continue
        amount = sum(Decimal(str(t["qty"])) for t in sum_trades)
        time = sum_trades[-1]["time"]
        commission = sum(Decimal(str(t["commission"])) for t in sum_trades)

        ret_val.append(
            Trade(
                trading_pair=convert_from_exchange_trading_pair(
                    trade["symbol"]),
                side=TradeType.BUY if trade["isBuyer"] else TradeType.SELL,
                price=Decimal(str(trade["price"])),
                amount=amount,
                order_type=None,
                market=convert_from_exchange_trading_pair(trade["symbol"]),
                timestamp=int(time),
                trade_fee=TradeFee(0.0,
                                   [(trade["commissionAsset"], commission)]),
            ))
        trades = [t for t in trades if t not in sum_trades]
    return ret_val
示例#2
0
    async def fetch_binance_trading_pairs(self) -> List[str]:
        try:
            from hummingbot.connector.exchange.binance.binance_utils import convert_from_exchange_trading_pair
            client: aiohttp.ClientSession = self.http_client()
            async with client.get(BINANCE_ENDPOINT,
                                  timeout=API_CALL_TIMEOUT) as response:
                if response.status == 200:
                    data = await response.json()
                    raw_trading_pairs = [
                        d["symbol"] for d in data["symbols"]
                        if d["status"] == "TRADING"
                    ]
                    trading_pair_list: List[str] = []
                    for raw_trading_pair in raw_trading_pairs:
                        converted_trading_pair: Optional[str] = \
                            convert_from_exchange_trading_pair(raw_trading_pair)
                        if converted_trading_pair is not None:
                            trading_pair_list.append(converted_trading_pair)
                        else:
                            self.logger().debug(
                                f"Could not parse the trading pair {raw_trading_pair}, skipping it..."
                            )
                    return trading_pair_list

        except Exception:
            # Do nothing if the request fails -- there will be no autocomplete for binance trading pairs
            pass

        return []
示例#3
0
 async def fetch_kraken_trading_pairs() -> List[str]:
     try:
         async with aiohttp.ClientSession() as client:
             async with client.get(KRAKEN_ENDPOINT,
                                   timeout=API_CALL_TIMEOUT) as response:
                 if response.status == 200:
                     from hummingbot.connector.exchange.kraken.kraken_utils import convert_from_exchange_trading_pair
                     data: Dict[str, Any] = await response.json()
                     raw_pairs = data.get("result", [])
                     converted_pairs: List[str] = []
                     for pair, details in raw_pairs.items():
                         if "." not in pair:
                             try:
                                 wsname = details[
                                     "wsname"]  # pair in format BASE/QUOTE
                                 converted_pairs.append(
                                     convert_from_exchange_trading_pair(
                                         wsname))
                             except IOError:
                                 pass
                     return [item for item in converted_pairs]
     except Exception:
         pass
         # Do nothing if the request fails -- there will be no autocomplete for kraken trading pairs
     return []
示例#4
0
    async def fetch_huobi_trading_pairs(self) -> List[str]:
        try:
            from hummingbot.connector.exchange.huobi.huobi_utils import convert_from_exchange_trading_pair

            client: aiohttp.ClientSession = self.http_client()
            async with client.get(HUOBI_ENDPOINT,
                                  timeout=API_CALL_TIMEOUT) as response:
                if response.status == 200:
                    all_trading_pairs: Dict[str, Any] = await response.json()
                    valid_trading_pairs: list = []
                    for item in all_trading_pairs["data"]:
                        if item["state"] == "online":
                            valid_trading_pairs.append(item["symbol"])
                    trading_pair_list: List[str] = []
                    for raw_trading_pair in valid_trading_pairs:
                        converted_trading_pair: Optional[str] = \
                            convert_from_exchange_trading_pair(raw_trading_pair)
                        if converted_trading_pair is not None:
                            trading_pair_list.append(converted_trading_pair)
                        else:
                            self.logger().debug(
                                f"Could not parse the trading pair {raw_trading_pair}, skipping it..."
                            )
                    return trading_pair_list

        except Exception:
            # Do nothing if the request fails -- there will be no autocomplete for huobi trading pairs
            pass

        return []
示例#5
0
    async def fetch_eterbase_trading_pairs(self) -> List[str]:
        try:
            from hummingbot.connector.exchange.eterbase.eterbase_utils import convert_from_exchange_trading_pair

            client: aiohttp.ClientSession() = self.http_client()
            async with client.get(ETERBASE_ENDPOINT,
                                  timeout=API_CALL_TIMEOUT) as response:
                if response.status == 200:
                    markets = await response.json()
                    raw_trading_pairs: List[str] = list(
                        map(
                            lambda trading_market: trading_market.get('symbol'
                                                                      ),
                            filter(
                                lambda details: details.get('state') ==
                                'Trading', markets)))
                    trading_pair_list: List[str] = []
                    for raw_trading_pair in raw_trading_pairs:
                        converted_trading_pair: Optional[str] = \
                            convert_from_exchange_trading_pair(raw_trading_pair)
                        if converted_trading_pair is not None:
                            trading_pair_list.append(converted_trading_pair)
                        else:
                            self.logger().debug(
                                f"Could not parse the trading pair {raw_trading_pair}, skipping it..."
                            )
                    return trading_pair_list
        except Exception:
            pass
            # Do nothing if the request fails -- there will be no autocomplete for eterbase trading pairs
        return []
示例#6
0
async def get_active_campaigns(exchange: str, trading_pairs: List[str] = []) -> Dict[int, CampaignSummary]:
    campaigns = {}
    async with aiohttp.ClientSession() as client:
        url = f"{PARROT_MINER_BASE_URL}campaigns"
        resp = await client.get(url)
        resp_json = await resp.json()
    for campaign_retval in resp_json:
        for market in campaign_retval["markets"]:
            if market["exchange_name"] != exchange:
                continue
            t_pair = market["trading_pair"]
            # So far we have only 2 exchanges for mining Binance and Kucoin, Kucoin doesn't require conversion.
            # In the future we should create a general approach for this, e.g. move all convert trading pair fn to
            # utils.py and import the function dynamically in hummingbot/client/settings.py
            if exchange == "binance":
                t_pair = convert_from_exchange_trading_pair(t_pair)
            if trading_pairs and t_pair not in trading_pairs:
                continue
            campaign = CampaignSummary()
            campaign.market_id = int(market["id"])
            campaign.trading_pair = t_pair
            campaign.exchange_name = market["exchange_name"]
            campaigns[campaign.market_id] = campaign
        for bounty_period in campaign_retval["bounty_periods"]:
            for payout in bounty_period["payout_parameters"]:
                market_id = int(payout["market_id"])
                if market_id in campaigns:
                    campaigns[market_id].reward_per_wk = Decimal(str(payout["bid_budget"])) + \
                        Decimal(str(payout["ask_budget"]))
                    campaigns[market_id].spread_max = Decimal(str(payout["spread_max"])) / Decimal("100")
                    campaigns[market_id].payout_asset = payout["payout_asset"]
    return campaigns
    async def fetch_trading_pairs(domain="com") -> List[str]:
        try:
            from hummingbot.connector.exchange.binance.binance_utils import convert_from_exchange_trading_pair
            async with aiohttp.ClientSession() as client:
                url = EXCHANGE_INFO_URL.format(domain)
                async with client.get(url, timeout=10) as response:
                    if response.status == 200:
                        data = await response.json()
                        raw_trading_pairs = [
                            d["symbol"] for d in data["symbols"]
                            if d["status"] == "TRADING"
                        ]
                        trading_pair_list: List[str] = []
                        for raw_trading_pair in raw_trading_pairs:
                            converted_trading_pair: Optional[str] = \
                                convert_from_exchange_trading_pair(raw_trading_pair)
                            if converted_trading_pair is not None:
                                trading_pair_list.append(
                                    converted_trading_pair)
                        return trading_pair_list

        except Exception:
            # Do nothing if the request fails -- there will be no autocomplete for binance trading pairs
            pass

        return []
 async def get_all_mid_prices(domain="com") -> Optional[Decimal]:
     from hummingbot.connector.exchange.binance.binance_utils import convert_from_exchange_trading_pair
     async with aiohttp.ClientSession() as client:
         url = "https://api.binance.{}/api/v3/ticker/bookTicker".format(domain)
         resp = await client.get(url)
         resp_json = await resp.json()
         ret_val = {}
         for record in resp_json:
             pair = convert_from_exchange_trading_pair(record["symbol"])
             ret_val[pair] = (Decimal(record.get("bidPrice", "0")) + Decimal(record.get("askPrice", "0"))) / Decimal("2")
         return ret_val
示例#9
0
 async def fetch_crypto_com_trading_pairs() -> List[str]:
     async with aiohttp.ClientSession() as client:
         async with client.get(CRYPTO_COM_ENDPOINT,
                               timeout=API_CALL_TIMEOUT) as response:
             if response.status == 200:
                 from hummingbot.connector.exchange.crypto_com.crypto_com_utils import \
                     convert_from_exchange_trading_pair
                 try:
                     data: Dict[str, Any] = await response.json()
                     return [
                         convert_from_exchange_trading_pair(item["i"])
                         for item in data["result"]["data"]
                     ]
                 except Exception:
                     pass
                     # Do nothing if the request fails -- there will be no autocomplete for kucoin trading pairs
             return []
 async def get_all_mid_prices(domain="com") -> Optional[Decimal]:
     throttler = BinanceAPIOrderBookDataSource._get_throttler_instance()
     async with aiohttp.ClientSession() as client:
         async with throttler.execute_task(
                 limit_id=CONSTANTS.TICKER_PRICE_CHANGE_PATH_URL):
             url = binance_utils.public_rest_url(
                 path_url=CONSTANTS.TICKER_PRICE_CHANGE_PATH_URL,
                 domain=domain)
             resp = await client.get(url)
             resp_json = await resp.json()
             ret_val = {}
             for record in resp_json:
                 pair = binance_utils.convert_from_exchange_trading_pair(
                     record["symbol"])
                 ret_val[pair] = (
                     Decimal(record.get("bidPrice", "0")) +
                     Decimal(record.get("askPrice", "0"))) / Decimal("2")
             return ret_val
    async def fetch_trading_pairs(domain="com") -> List[str]:
        try:
            throttler = BinanceAPIOrderBookDataSource._get_throttler_instance()
            async with aiohttp.ClientSession() as client:
                async with throttler.execute_task(
                        limit_id=CONSTANTS.EXCHANGE_INFO_PATH_URL):
                    url = binance_utils.public_rest_url(
                        path_url=CONSTANTS.EXCHANGE_INFO_PATH_URL,
                        domain=domain)
                    async with client.get(url, timeout=10) as response:
                        if response.status == 200:
                            data = await response.json()
                            # fetch d["symbol"] for binance us/com
                            raw_trading_pairs = [
                                d["symbol"] for d in data["symbols"]
                                if d["status"] == "TRADING"
                            ]
                            trading_pair_targets = [
                                f"{d['baseAsset']}-{d['quoteAsset']}"
                                for d in data["symbols"]
                                if d["status"] == "TRADING"
                            ]
                            trading_pair_list: List[str] = []
                            for raw_trading_pair, pair_target in zip(
                                    raw_trading_pairs, trading_pair_targets):
                                trading_pair: Optional[
                                    str] = binance_utils.convert_from_exchange_trading_pair(
                                        raw_trading_pair)
                                if trading_pair is not None and trading_pair == pair_target:
                                    trading_pair_list.append(trading_pair)
                            return trading_pair_list

        except Exception:
            # Do nothing if the request fails -- there will be no autocomplete for binance trading pairs
            pass

        return []
示例#12
0
 def test_parse_three_letters_base_and_four_letters_quote(self):
     parsed_pair = utils.convert_from_exchange_trading_pair("BTCUSDT")
     self.assertEqual(parsed_pair, "BTC-USDT")
示例#13
0
 def test_parse_three_letters_base_and_three_letters_quote_matching_with_a_four_letters_quote_candidate(self):
     parsed_pair = utils.convert_from_exchange_trading_pair("VETUSD")
     self.assertEqual(parsed_pair, "VET-USD")