コード例 #1
0
    def load_config(self) -> Dict[str, Any]:
        """
        Extract information for sys.argv and load the bot configuration
        :return: Configuration dictionary
        """
        # Load all configs
        config: Dict[str, Any] = Configuration.from_files(self.args.config)

        self._process_common_options(config)

        self._process_optimize_options(config)

        self._process_plot_options(config)

        self._process_runmode(config)

        # Check if the exchange set by the user is supported
        check_exchange(
            config,
            config.get('experimental', {}).get('block_bad_exchanges', True))

        self._resolve_pairs_list(config)

        validate_config_consistency(config)

        return config
コード例 #2
0
    def load_config(self) -> Dict[str, Any]:
        """
        Extract information for sys.argv and load the bot configuration
        :return: Configuration dictionary
        """
        # Load all configs
        config: Dict[str,
                     Any] = self.load_from_files(self.args.get("config", []))

        # Keep a copy of the original configuration file
        config['original_config'] = deepcopy(config)

        self._process_runmode(config)

        self._process_common_options(config)

        self._process_trading_options(config)

        self._process_optimize_options(config)

        self._process_plot_options(config)

        # Check if the exchange set by the user is supported
        check_exchange(
            config,
            config.get('experimental', {}).get('block_bad_exchanges', True))

        self._resolve_pairs_list(config)

        process_temporary_deprecated_settings(config)

        validate_config_consistency(config)

        return config
コード例 #3
0
    def run_backtest():
        from freqtrade.optimize.optimize_reports import generate_backtest_stats
        from freqtrade.resolvers import StrategyResolver
        asyncio.set_event_loop(asyncio.new_event_loop())
        try:
            # Reload strategy
            lastconfig = ApiServer._bt_last_config
            strat = StrategyResolver.load_strategy(btconfig)
            validate_config_consistency(btconfig)

            if (not ApiServer._bt
                    or lastconfig.get('timeframe') != strat.timeframe
                    or lastconfig.get('timeframe_detail') !=
                    btconfig.get('timeframe_detail')
                    or lastconfig.get('timerange') != btconfig['timerange']):
                from freqtrade.optimize.backtesting import Backtesting
                ApiServer._bt = Backtesting(btconfig)
                if ApiServer._bt.timeframe_detail:
                    ApiServer._bt.load_bt_data_detail()
            else:
                ApiServer._bt.config = btconfig
                ApiServer._bt.init_backtest()
            # Only reload data if timeframe changed.
            if (not ApiServer._bt_data or not ApiServer._bt_timerange
                    or lastconfig.get('timeframe') != strat.timeframe
                    or lastconfig.get('timerange') != btconfig['timerange']):
                ApiServer._bt_data, ApiServer._bt_timerange = ApiServer._bt.load_bt_data(
                )

            lastconfig['timerange'] = btconfig['timerange']
            lastconfig['timeframe'] = strat.timeframe
            lastconfig['protections'] = btconfig.get('protections', [])
            lastconfig['enable_protections'] = btconfig.get(
                'enable_protections')
            lastconfig['dry_run_wallet'] = btconfig.get('dry_run_wallet')

            ApiServer._bt.abort = False
            min_date, max_date = ApiServer._bt.backtest_one_strategy(
                strat, ApiServer._bt_data, ApiServer._bt_timerange)

            ApiServer._bt.results = generate_backtest_stats(
                ApiServer._bt_data,
                ApiServer._bt.all_results,
                min_date=min_date,
                max_date=max_date)
            logger.info("Backtest finished.")

        except DependencyException as e:
            logger.info(f"Backtesting caused an error: {e}")
            pass
        finally:
            ApiServer._bgtask_running = False
コード例 #4
0
    def run_backtest():
        from freqtrade.optimize.optimize_reports import (
            generate_backtest_stats, store_backtest_stats)
        from freqtrade.resolvers import StrategyResolver
        asyncio.set_event_loop(asyncio.new_event_loop())
        try:
            # Reload strategy
            lastconfig = ApiServer._bt_last_config
            strat = StrategyResolver.load_strategy(btconfig)
            validate_config_consistency(btconfig)

            if (not ApiServer._bt
                    or lastconfig.get('timeframe') != strat.timeframe
                    or lastconfig.get('timeframe_detail') !=
                    btconfig.get('timeframe_detail')
                    or lastconfig.get('timerange') != btconfig['timerange']):
                from freqtrade.optimize.backtesting import Backtesting
                ApiServer._bt = Backtesting(btconfig)
                if ApiServer._bt.timeframe_detail:
                    ApiServer._bt.load_bt_data_detail()
            else:
                ApiServer._bt.config = btconfig
                ApiServer._bt.init_backtest()
            # Only reload data if timeframe changed.
            if (not ApiServer._bt_data or not ApiServer._bt_timerange
                    or lastconfig.get('timeframe') != strat.timeframe
                    or lastconfig.get('timerange') != btconfig['timerange']):
                ApiServer._bt_data, ApiServer._bt_timerange = ApiServer._bt.load_bt_data(
                )

            lastconfig['timerange'] = btconfig['timerange']
            lastconfig['timeframe'] = strat.timeframe
            lastconfig['protections'] = btconfig.get('protections', [])
            lastconfig['enable_protections'] = btconfig.get(
                'enable_protections')
            lastconfig['dry_run_wallet'] = btconfig.get('dry_run_wallet')

            ApiServer._bt.results = {}
            ApiServer._bt.load_prior_backtest()

            ApiServer._bt.abort = False
            if (ApiServer._bt.results and strat.get_strategy_name()
                    in ApiServer._bt.results['strategy']):
                # When previous result hash matches - reuse that result and skip backtesting.
                logger.info(
                    f'Reusing result of previous backtest for {strat.get_strategy_name()}'
                )
            else:
                min_date, max_date = ApiServer._bt.backtest_one_strategy(
                    strat, ApiServer._bt_data, ApiServer._bt_timerange)

                ApiServer._bt.results = generate_backtest_stats(
                    ApiServer._bt_data,
                    ApiServer._bt.all_results,
                    min_date=min_date,
                    max_date=max_date)

            if btconfig.get('export', 'none') == 'trades':
                store_backtest_stats(btconfig['exportfilename'],
                                     ApiServer._bt.results)

            logger.info("Backtest finished.")

        except DependencyException as e:
            logger.info(f"Backtesting caused an error: {e}")
            pass
        finally:
            ApiServer._bgtask_running = False