Пример #1
0
def get_exchange_holdings_per_symbol():
    holdings_per_symbol = {}
    for exchange_manager in interfaces_util.get_exchange_managers():
        if trading_api.is_trader_existing_and_enabled(exchange_manager):
            portfolio = trading_api.get_portfolio(exchange_manager)
            _add_exchange_portfolio(portfolio, trading_api.get_exchange_name(exchange_manager), holdings_per_symbol)
    return holdings_per_symbol
Пример #2
0
def get_exchange_time_frames(exchange_id):
    try:
        exchange_manager = trading_api.get_exchange_manager_from_exchange_id(
            exchange_id)
        return trading_api.get_watched_timeframes(
            exchange_manager), trading_api.get_exchange_name(exchange_manager)
    except KeyError:
        return [], ""
Пример #3
0
    def _get_exchanges_report(self, reference_market, trading_mode):
        SYMBOL_REPORT = "symbol_report"
        BOT_REPORT = "bot_report"
        CHART_IDENTIFIERS = "chart_identifiers"
        ERRORS_COUNT = "errors_count"
        report = {
            SYMBOL_REPORT: [],
            BOT_REPORT: {},
            CHART_IDENTIFIERS: [],
            ERRORS_COUNT: logging.get_backtesting_errors_count()
        }
        profitabilities = {}
        market_average_profitabilities = {}
        starting_portfolios = {}
        end_portfolios = {}
        for exchange_id in self.octobot_backtesting.exchange_manager_ids:
            exchange_manager = trading_api.get_exchange_manager_from_exchange_id(
                exchange_id)
            _, profitability, _, market_average_profitability, _ = trading_api.get_profitability_stats(
                exchange_manager)
            min_timeframe = time_frame_manager.find_min_time_frame(
                trading_api.get_watched_timeframes(exchange_manager))
            exchange_name = trading_api.get_exchange_name(exchange_manager)
            for symbol in self.symbols_to_create_exchange_classes[
                    exchange_name]:
                market_delta = self._get_market_delta(symbol, exchange_manager,
                                                      min_timeframe)
                report[SYMBOL_REPORT].append({symbol: market_delta * 100})
                report[CHART_IDENTIFIERS].append({
                    "symbol":
                    symbol,
                    "exchange_id":
                    exchange_id,
                    "exchange_name":
                    exchange_name,
                    "time_frame":
                    min_timeframe.value
                })
            profitabilities[exchange_name] = profitability
            market_average_profitabilities[
                exchange_name] = market_average_profitability
            starting_portfolios[
                exchange_name] = trading_api.get_origin_portfolio(
                    exchange_manager)
            end_portfolios[exchange_name] = trading_api.get_portfolio(
                exchange_manager)

        report[BOT_REPORT] = {
            "profitability": profitabilities,
            "market_average_profitability": market_average_profitabilities,
            "reference_market": reference_market,
            "end_portfolio": end_portfolios,
            "starting_portfolio": starting_portfolios,
            "trading_mode": trading_mode
        }
        return report
Пример #4
0
def get_exchanges_load():
    return {
        trading_api.get_exchange_name(exchange_manager): {
            "load": trading_api.get_currently_handled_pair_with_time_frame(exchange_manager),
            "max_load": trading_api.get_max_handled_pair_with_time_frame(exchange_manager),
            "overloaded": trading_api.is_overloaded(exchange_manager),
            "has_websocket": trading_api.get_has_websocket(exchange_manager)
        }
        for exchange_manager in interfaces_util.get_exchange_managers()
    }
 async def _subscribe_exchange_id_mark_price(self, exchange_id):
     await exchanges_channel.get_chan(trading_constants.MARK_PRICE_CHANNEL,
                                      exchange_id).new_consumer(
                                          self._mark_price_callback,
                                          symbol=self.trading_mode.symbol)
     registered_exchange_name = trading_api.get_exchange_name(
         trading_api.get_exchange_manager_from_exchange_id(exchange_id))
     self.logger.info(
         f"Arbitrage trading for {self.trading_mode.symbol} on {self.exchange_name}: registered "
         f"{registered_exchange_name} exchange as price data feed reference to identify arbitrage opportunities."
     )
Пример #6
0
    def log_report(self):
        self.logger.info(" **** Backtesting report ****")
        for exchange_id in self.octobot_backtesting.exchange_manager_ids:
            exchange_manager = trading_api.get_exchange_manager_from_exchange_id(exchange_id)
            exchange_name = trading_api.get_exchange_name(exchange_manager)
            self.logger.info(f" ========= Trades on {exchange_name} =========")
            self._log_trades_history(exchange_manager, exchange_name)

            self.logger.info(f" ========= Prices evolution on {exchange_name} =========")
            min_timeframe = time_frame_manager.find_min_time_frame(trading_api.get_watched_timeframes(exchange_manager))
            for symbol in self.symbols_to_create_exchange_classes[exchange_name]:
                self._log_symbol_report(symbol, exchange_manager, min_timeframe)

            self.logger.info(" ========= Octobot end state =========")
            self._log_global_report(exchange_manager)
Пример #7
0
 def _get_supports(self):
     supporting_exchanges = []
     for exchange_manager in self.exchange_managers:
         exchange_name = trading_api.get_exchange_name(exchange_manager)
         if self.has_real_trader \
            and trading_api.is_sponsoring(exchange_name) \
            and trading_api.is_valid_account(exchange_manager):
             supporting_exchanges.append(exchange_name)
     supports = self.octobot_api.get_community_auth().supports
     return {
         community_fields.CommunityFields.EXCHANGES.value:
         supporting_exchanges,
         community_fields.CommunityFields.ROLES.value:
         [supports.support_role],
         community_fields.CommunityFields.DONATIONS.value:
         [str(donation) for donation in supports.donations]
     }
Пример #8
0
async def test_finalize():
    try:
        currency = "BTC"
        symbol = "BTC/USDT"
        producer, consumer, trader = await _get_tools()
        matrix_id = evaluators_api.create_matrix()

        await producer.finalize(trading_api.get_exchange_name(trader.exchange_manager), matrix_id, currency, symbol)
        assert producer.final_eval == commons_constants.INIT_EVAL_NOTE

        await producer._set_state(currency, symbol, trading_enums.EvaluatorStates.SHORT)
        assert producer.state == trading_enums.EvaluatorStates.SHORT
        # let both other be created
        await asyncio_tools.wait_asyncio_next_cycle()
        await asyncio.create_task(_check_open_orders_count(trader, 2))  # has stop loss

        await producer._set_state(currency, symbol, trading_enums.EvaluatorStates.SHORT)
        await asyncio.create_task(
            _check_open_orders_count(trader, 2))  # ensure did not change orders because neutral state

    finally:
        await _stop(trader)
Пример #9
0
def get_currencies_with_status():
    evaluations_by_exchange_by_pair = {}
    for exchange_manager in interfaces.get_exchange_managers():
        trading_modes = trading_api.get_trading_modes(exchange_manager)
        for pair in trading_api.get_trading_pairs(exchange_manager):
            if pair not in evaluations_by_exchange_by_pair:
                evaluations_by_exchange_by_pair[pair] = {}
            status_explanation = "N/A"
            status = "N/A"
            for trading_mode in trading_modes:
                if trading_api.get_trading_mode_symbol(trading_mode) == pair:
                    status_explanation, status = trading_api.get_trading_mode_current_state(
                        trading_mode)
                    try:
                        status = round(status, 3)
                    except TypeError:
                        pass
                    break
            evaluations_by_exchange_by_pair[pair][trading_api.get_exchange_manager_id(exchange_manager)] = \
                [status_explanation.replace("_", " "), status,
                 trading_api.get_exchange_name(exchange_manager).capitalize()]
    return evaluations_by_exchange_by_pair
Пример #10
0
def _get_first_exchange_identifiers():
    for exchange_manager in interfaces_util.get_exchange_managers():
        return exchange_manager, trading_api.get_exchange_name(
            exchange_manager), trading_api.get_exchange_manager_id(
                exchange_manager)
    raise KeyError("No exchange to be found")