From eed29a6b8af3a1746c16cb142f6e418072ce6042 Mon Sep 17 00:00:00 2001 From: creslinux Date: Mon, 16 Jul 2018 13:16:18 +0000 Subject: [PATCH] update --- freqtrade/optimize/backtesting.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 2629ed5fa..d17b7b246 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -24,6 +24,7 @@ from freqtrade.persistence import Trade from profilehooks import profile from collections import OrderedDict import timeit +from time import sleep logger = logging.getLogger(__name__) @@ -191,7 +192,14 @@ class Backtesting(object): return btr return None - @profile + def s(self): + st = timeit.default_timer() + return st + + def f(self, st): + return (timeit.default_timer() - st) + + def backtest(self, args: Dict) -> DataFrame: """ Implements backtesting functionality @@ -207,21 +215,31 @@ class Backtesting(object): realistic: do we try to simulate realistic trades? (default: True) :return: DataFrame """ + debug_timing = False + headers = ['date', 'buy', 'open', 'close', 'sell', 'high', 'low'] processed = args['processed'] max_open_trades = args.get('max_open_trades', 0) realistic = args.get('realistic', False) trades = [] trade_count_lock: Dict = {} + ########################### Call out BSlap instead of using FT bslap_results: list = [] - last_bslap_results: list = [] + for pair, pair_data in processed.items(): + if debug_timing: # Start timer + fl = self.s() + ticker_data = self.populate_sell_trend( self.populate_buy_trend(pair_data))[headers].copy() ticker_data.drop(ticker_data.head(1).index, inplace=True) + if debug_timing: # print time taken + flt = self.f(fl) + print("populate_buy_trend:", pair, round(flt, 10)) + st = self.st() # #dump same DFs to disk for offline testing in scratch # f_pair:str = pair @@ -234,11 +252,18 @@ class Backtesting(object): last_bslap_results = bslap_results bslap_results = last_bslap_results + bslap_pair_results + if debug_timing: # print time taken + tt = self.f(st) + print("Time to Back Slap :", pair, round(tt,10)) + print("-----------------------") + + # Switch List of Trade Dicts (bslap_results) to Dataframe # Fill missing, calculable columns, profit, duration , abs etc. bslap_results_df = DataFrame(bslap_results) bslap_results_df['open_time'] = to_datetime(bslap_results_df['open_time']) bslap_results_df['close_time'] = to_datetime(bslap_results_df['close_time']) + ### don't use this, itll drop exit type field # bslap_results_df = DataFrame(bslap_results, columns=BacktestResult._fields)