Ejemplo n.º 1
0
    def _try_get_value_of_currency(self, currency, quantity, raise_error):
        """
        try_get_value_of_currency will try to obtain the current value of the currency quantity in reference currency.
        It will try to create the symbol that fit with the exchange logic.
        :return: the value found of this currency quantity, if not found returns 0.
        """
        symbol = symbol_util.merge_currencies(
            currency, self.portfolio_manager.reference_market)
        reversed_symbol = symbol_util.merge_currencies(
            self.portfolio_manager.reference_market, currency)

        try:
            if self.portfolio_manager.exchange_manager.symbol_exists(symbol):
                return self.last_prices_by_trading_pair[symbol] * quantity

            if self.portfolio_manager.exchange_manager.symbol_exists(reversed_symbol) and \
                    self.last_prices_by_trading_pair[reversed_symbol] != 0:
                return quantity / self.last_prices_by_trading_pair[
                    reversed_symbol]

            if currency not in self.missing_currency_data_in_exchange:
                self._inform_no_matching_symbol(currency)
                self.missing_currency_data_in_exchange.add(currency)
        except KeyError as missing_data_exception:
            if not self.portfolio_manager.exchange_manager.is_backtesting:
                self._try_to_ask_ticker_missing_symbol_data(
                    currency, symbol, reversed_symbol)
                if raise_error:
                    raise missing_data_exception
        return 0
    async def _try_get_value_of_currency(self, currency, quantity,
                                         raise_error):
        symbol = merge_currencies(currency, self.reference_market)
        symbol_inverted = merge_currencies(self.reference_market, currency)

        try:
            if self.exchange_manager.symbol_exists(symbol):
                return self.currencies_last_prices[symbol] * quantity

            elif self.exchange_manager.symbol_exists(symbol_inverted) and \
                    self.currencies_last_prices[symbol_inverted] != 0:
                return quantity / self.currencies_last_prices[symbol_inverted]

            self._inform_no_matching_symbol(currency)
            return 0
        except KeyError as e:
            symbols_to_add = []
            if self.exchange_manager.symbol_exists(symbol):
                symbols_to_add = [symbol]
            elif self.exchange_manager.symbol_exists(symbol_inverted):
                symbols_to_add = [symbol_inverted]

            if symbols_to_add:
                await get_chan(
                    TICKER_CHANNEL,
                    self.exchange_manager.id).modify(added_pairs=symbols_to_add
                                                     )
                self.initializing_symbol_prices.add(currency)
            if raise_error:
                raise e
            return 0
    async def _try_get_value_of_currency(self, currency, quantity, raise_error):
        """ try_get_value_of_currency will try to obtain the current value of the currency quantity
        in the reference currency.
        It will try to create the symbol that fit with the exchange logic.
        Returns the value found of this currency quantity, if not found returns 0.
        """
        symbol = merge_currencies(currency, self.reference_market)
        symbol_inverted = merge_currencies(self.reference_market, currency)

        try:
            if self.exchange_manager.symbol_exists(symbol):
                return self.currencies_last_prices[symbol] * quantity

            elif self.exchange_manager.symbol_exists(symbol_inverted) and \
                    self.currencies_last_prices[symbol_inverted] != 0:
                return quantity / self.currencies_last_prices[symbol_inverted]

            self._inform_no_matching_symbol(currency)
            return 0
        except KeyError as e:
            if not self.exchange_manager.is_backtesting:
                symbols_to_add = []
                if self.exchange_manager.symbol_exists(symbol):
                    symbols_to_add = [symbol]
                elif self.exchange_manager.symbol_exists(symbol_inverted):
                    symbols_to_add = [symbol_inverted]

                if symbols_to_add:
                    await get_chan(TICKER_CHANNEL, self.exchange_manager.id).modify(added_pairs=symbols_to_add)
                    self.initializing_symbol_prices.add(currency)
                if raise_error:
                    raise e
            return 0
Ejemplo n.º 4
0
 async def _feed_callback(self, data):
     if not data:
         return
     is_from_channel = data.get(
         services_constants.CONFIG_IS_CHANNEL_MESSAGE, False)
     if is_from_channel:
         sender = data.get(services_constants.CONFIG_MESSAGE_SENDER, "")
         if sender in self.channels_config.keys():
             message = data.get(services_constants.CONFIG_MESSAGE_CONTENT,
                                "")
             channel_data = self.channels_config[sender]
             signal = self._get_signal_message(
                 channel_data[self.SIGNAL_PATTERN_KEY], message)
             if signal is not None:
                 self.eval_note = -1
                 await self.evaluation_completed(
                     signal,
                     symbol_util.merge_currencies(
                         signal, channel_data[self.SIGNAL_MARKET_KEY]),
                     eval_time=self.get_current_exchange_time())
         else:
             self.logger.debug(
                 f"Ignored message : from an unsupported channel ({sender})"
             )
     else:
         self.logger.debug("Ignored message : not a channel message")
Ejemplo n.º 5
0
    def _interpret_file_name(file_name):
        data = path.basename(file_name).split("_")
        try:
            exchange_name = data[0]
            symbol = symbol_util.merge_currencies(data[1], data[2])
            file_ext = LegacyDataConverter.DATA_FILE_EXT
            timestamp = data[3] + data[4].replace(file_ext, "")
        except KeyError:
            exchange_name = None
            symbol = None
            timestamp = None

        return exchange_name, symbol, timestamp
Ejemplo n.º 6
0
def interpret_file_name(file_name):
    data = basename(file_name).split("_")
    try:
        exchange_name = data[0]
        symbol = merge_currencies(data[1], data[2])
        data_type = get_data_type(file_name)
        file_ext = get_file_ending(data_type)
        timestamp = data[3] + data[4].replace(file_ext, "")
    except KeyError:
        exchange_name = None
        symbol = None
        timestamp = None
        data_type = None

    return exchange_name, symbol, timestamp, data_type
Ejemplo n.º 7
0
def test_merge_currencies():
    assert merge_currencies("BTC", "USDT") == "BTC/USDT"