示例#1
0
    def run(self):
        """
        Calculates and stores dataset
        """
        info_text = 'Starting generating data for Blueprint ' + self.blueprint.name + ' :back-days ' + \
                    self.blueprint_days + ' (This might take several hours/days,.so please stay back and relax)'
        print(colored(info_text, 'yellow'))
        dot_counter = 0
        while True:
            # Get new dataset
            df = self.exchange.get_offline_ticker(self.ticker_epoch,
                                                  self.pairs)

            # Check if the simulation is finished
            if self.ticker_epoch >= self.blueprint_end_time:
                self.write_to_file()
                return

            # Store df to buffer
            if not self.df_buffer.empty:
                df = df[list(self.df_buffer)]
                self.df_buffer = self.df_buffer.append(df, ignore_index=True)
            else:
                self.df_buffer = self.df_buffer.append(df, ignore_index=True)
            self.df_buffer = common.handle_buffer_limits(
                self.df_buffer, self.max_buffer_size)

            scan_df = self.blueprint.scan(self.df_buffer, self.ticker_size)
            if not scan_df.empty:
                dot_counter = self.print_progress_dot(dot_counter)
                self.df_blueprint = self.df_blueprint.append(scan_df,
                                                             ignore_index=True)

            self.ticker_epoch += self.ticker_size * 60
示例#2
0
    def run(self):
        """
        This is the main simulation loop
        """
        if self.bot is None:
            print(colored('The bots type is NOT specified. You need to choose one action (--sim, --paper, --trade)', 'red'))
            exit(0)

        print(colored('Starting simulation: ' + str(self.trade_mode) + ', Strategy: ' + self.config_strategy_name, 'yellow'))

        # Prefetch Buffer Data (if enabled in config)
        if self.prefetch:
            self.history = self.bot.prefetch(self.strategy.get_min_history_ticks(), self.interval)
            self.look_back = self.history.copy()

        try:
            while True:
                # Get next ticker
                new_ticker = self.bot.get_next(self.interval)
                # print('new_ticker____:', new_ticker)
                if self.simulation_finished(new_ticker):
                    print("No more data,..simulation done,. quitting")
                    exit(0)

                self.ticker = new_ticker

                # Check if ticker is valid
                if not self.validate_ticker(self.ticker):
                    print(colored('Received invalid ticker, will have to skip it! Details:\n' + str(self.ticker), 'red'))
                    continue

                # Save ticker to buffer
                self.history = self.history.append(self.ticker, ignore_index=True)
                self.look_back = self.look_back.append(self.ticker, ignore_index=True)

                # Check if buffer is not overflown
                self.look_back = common.handle_buffer_limits(self.look_back, self.max_lookback_size)

                if self.first_ticker is None or self.first_ticker.empty:
                    self.first_ticker = self.ticker.copy()
                self.last_valid_ticker = self.ticker.copy()

                # Get next actions
                self.actions = self.strategy.calculate(self.look_back, self.wallet)

                # Set trade
                self.actions = self.bot.trade(self.actions,
                                              self.wallet.current_balance,
                                              self.trades)

                # Get wallet balance
                self.wallet.current_balance = self.bot.get_balance()

                # Write report
                self.report.calc_stats(self.ticker, self.wallet)

        except KeyboardInterrupt:
            self.on_simulation_done()

        except SystemExit:
            self.on_simulation_done()