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
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()