add timeframe to strategy and hyperopt metadata

This commit is contained in:
hroff-1902 2019-06-08 07:09:23 +03:00
parent 92113ce1c9
commit 39230364fd
5 changed files with 12 additions and 11 deletions

View File

@ -47,7 +47,6 @@ class Edge():
self.exchange = exchange self.exchange = exchange
self.strategy = strategy self.strategy = strategy
self.ticker_interval = self.strategy.ticker_interval self.ticker_interval = self.strategy.ticker_interval
self.tickerdata_to_dataframe = self.strategy.tickerdata_to_dataframe
self.advise_sell = self.strategy.advise_sell self.advise_sell = self.strategy.advise_sell
self.advise_buy = self.strategy.advise_buy self.advise_buy = self.strategy.advise_buy
@ -112,7 +111,7 @@ class Edge():
logger.critical("No data found. Edge is stopped ...") logger.critical("No data found. Edge is stopped ...")
return False return False
preprocessed = self.tickerdata_to_dataframe(data) preprocessed = self.strategy.tickerdata_to_dataframe(data, self.ticker_interval)
# Print timeframe # Print timeframe
min_date, max_date = history.get_timeframe(preprocessed) min_date, max_date = history.get_timeframe(preprocessed)
@ -130,8 +129,9 @@ class Edge():
pair_data = pair_data.sort_values(by=['date']) pair_data = pair_data.sort_values(by=['date'])
pair_data = pair_data.reset_index(drop=True) pair_data = pair_data.reset_index(drop=True)
metadata = {'pair': pair, 'timeframe': self.ticker_interval}
ticker_data = self.advise_sell( ticker_data = self.advise_sell(
self.advise_buy(pair_data, {'pair': pair}), {'pair': pair})[headers].copy() self.advise_buy(pair_data, metadata), metadata)[headers].copy()
trades += self._find_trades_for_stoploss_range(ticker_data, pair, self._stoploss_range) trades += self._find_trades_for_stoploss_range(ticker_data, pair, self._stoploss_range)

View File

@ -94,7 +94,6 @@ class Backtesting(object):
self.ticker_interval = self.config.get('ticker_interval') self.ticker_interval = self.config.get('ticker_interval')
self.ticker_interval_mins = timeframe_to_minutes(self.ticker_interval) self.ticker_interval_mins = timeframe_to_minutes(self.ticker_interval)
self.tickerdata_to_dataframe = strategy.tickerdata_to_dataframe
self.advise_buy = strategy.advise_buy self.advise_buy = strategy.advise_buy
self.advise_sell = strategy.advise_sell self.advise_sell = strategy.advise_sell
# Set stoploss_on_exchange to false for backtesting, # Set stoploss_on_exchange to false for backtesting,
@ -219,8 +218,9 @@ class Backtesting(object):
for pair, pair_data in processed.items(): for pair, pair_data in processed.items():
pair_data['buy'], pair_data['sell'] = 0, 0 # cleanup from previous run pair_data['buy'], pair_data['sell'] = 0, 0 # cleanup from previous run
metadata = {'pair': pair, 'timeframe': self.ticker_interval}
ticker_data = self.advise_sell( ticker_data = self.advise_sell(
self.advise_buy(pair_data, {'pair': pair}), {'pair': pair})[headers].copy() self.advise_buy(pair_data, metadata), metadata)[headers].copy()
# to avoid using data from future, we buy/sell with signal from previous candle # to avoid using data from future, we buy/sell with signal from previous candle
ticker_data.loc[:, 'buy'] = ticker_data['buy'].shift(1) ticker_data.loc[:, 'buy'] = ticker_data['buy'].shift(1)
@ -439,7 +439,7 @@ class Backtesting(object):
(max_date - min_date).days (max_date - min_date).days
) )
# need to reprocess data every time to populate signals # need to reprocess data every time to populate signals
preprocessed = self.strategy.tickerdata_to_dataframe(data) preprocessed = self.strategy.tickerdata_to_dataframe(data, self.ticker_interval)
# Execute backtest and print results # Execute backtest and print results
all_results[self.strategy.get_strategy_name()] = self.backtest( all_results[self.strategy.get_strategy_name()] = self.backtest(

View File

@ -105,7 +105,6 @@ class DefaultHyperOpts(IHyperOpt):
""" """
Sell strategy Hyperopt will build and use Sell strategy Hyperopt will build and use
""" """
# print(params)
conditions = [] conditions = []
# GUARDS AND TRENDS # GUARDS AND TRENDS
if 'sell-mfi-enabled' in params and params['sell-mfi-enabled']: if 'sell-mfi-enabled' in params and params['sell-mfi-enabled']:

View File

@ -296,7 +296,7 @@ class Hyperopt(Backtesting):
self.strategy.advise_indicators = \ self.strategy.advise_indicators = \
self.custom_hyperopt.populate_indicators # type: ignore self.custom_hyperopt.populate_indicators # type: ignore
dump(self.strategy.tickerdata_to_dataframe(data), TICKERDATA_PICKLE) dump(self.strategy.tickerdata_to_dataframe(data, self.ticker_interval), TICKERDATA_PICKLE)
# We don't need exchange instance anymore while running hyperopt # We don't need exchange instance anymore while running hyperopt
self.exchange = None # type: ignore self.exchange = None # type: ignore

View File

@ -198,7 +198,7 @@ class IStrategy(ABC):
return False, False return False, False
try: try:
dataframe = self.analyze_ticker(dataframe, {'pair': pair}) dataframe = self.analyze_ticker(dataframe, {'pair': pair, 'timeframe': interval})
except ValueError as error: except ValueError as error:
logger.warning( logger.warning(
'Unable to analyze ticker for pair %s: %s', 'Unable to analyze ticker for pair %s: %s',
@ -362,11 +362,13 @@ class IStrategy(ABC):
return False return False
def tickerdata_to_dataframe(self, tickerdata: Dict[str, List]) -> Dict[str, DataFrame]: def tickerdata_to_dataframe(self, tickerdata: Dict[str, List],
ticker_interval: str) -> Dict[str, DataFrame]:
""" """
Creates a dataframe and populates indicators for given ticker data Creates a dataframe and populates indicators for given ticker data
""" """
return {pair: self.advise_indicators(pair_data, {'pair': pair}) return {pair: self.advise_indicators(pair_data,
{'pair': pair, 'timeframe': ticker_interval})
for pair, pair_data in tickerdata.items()} for pair, pair_data in tickerdata.items()}
def advise_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: def advise_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: