def get_portfolio_current_value(): simulated_value = 0 real_value = 0 has_real_trader = False has_simulated_trader = False for exchange_manager in interfaces.get_exchange_managers(): if trading_api.is_trader_existing_and_enabled(exchange_manager): current_value = trading_api.get_current_portfolio_value( exchange_manager) # current_value might be 0 if no trades have been made / canceled => use origin value if current_value == 0: current_value = trading_api.get_origin_portfolio_value( exchange_manager) if trading_api.is_trader_simulated(exchange_manager): simulated_value += current_value has_simulated_trader = True else: real_value += current_value has_real_trader = True return has_real_trader, has_simulated_trader, real_value, simulated_value
def _log_global_report(self, exchange_manager): _, profitability, _, market_average_profitability, _ = trading_api.get_profitability_stats( exchange_manager) reference_market = trading_api.get_reference_market( self.backtesting_config) end_portfolio = trading_api.get_portfolio(exchange_manager) end_portfolio_value = trading_api.get_current_portfolio_value( exchange_manager) starting_portfolio = trading_api.get_origin_portfolio(exchange_manager) starting_portfolio_value = trading_api.get_origin_portfolio_value( exchange_manager) self.logger.info( f"[End portfolio] value {round(end_portfolio_value, 5)} {reference_market} " f"Holdings: {pretty_printer.global_portfolio_pretty_print(end_portfolio, ' | ')}" ) self.logger.info( f"[Starting portfolio] value {round(starting_portfolio_value, 5)} {reference_market} " f"Holdings: {pretty_printer.global_portfolio_pretty_print(starting_portfolio, ' | ')}" ) self.logger.info( f"Global market profitability (vs {reference_market}) : " f"{market_average_profitability}% | Octobot : {profitability}%") self.logger.info( f"Simulation lasted " f"{round(backtesting_api.get_backtesting_duration(self.octobot_backtesting.backtesting), 3)} sec" )
def _get_profitability(self): total_origin_values = 0 total_profitability = 0 for exchange_manager in self.exchange_managers: profitability, _, _, _, _ = trading_api.get_profitability_stats( exchange_manager) total_profitability += float(profitability) total_origin_values += float( trading_api.get_current_portfolio_value(exchange_manager)) return total_profitability * 100 / total_origin_values if total_origin_values > 0 else 0
def _get_real_portfolio_value(self): if self.has_real_trader: total_value = 0 for exchange_manager in self.exchange_managers: current_value = trading_api.get_current_portfolio_value( exchange_manager) # current_value might be 0 if no trades have been made / canceled => use origin value if current_value == 0: current_value = trading_api.get_origin_portfolio_value( exchange_manager) total_value += current_value return float(total_value) else: return 0