mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
Merge pull request #3134 from freqtrade/backtesting_memory
Backtesting memory and dataframe
This commit is contained in:
commit
4d80f52db4
|
@ -149,8 +149,8 @@ class Backtesting:
|
||||||
|
|
||||||
# To avoid using data from future, we use buy/sell signals shifted
|
# To avoid using data from future, we use buy/sell signals shifted
|
||||||
# from the previous candle
|
# from the previous candle
|
||||||
df_analyzed.loc[:, 'buy'] = df_analyzed['buy'].shift(1)
|
df_analyzed.loc[:, 'buy'] = df_analyzed.loc[:, 'buy'].shift(1)
|
||||||
df_analyzed.loc[:, 'sell'] = df_analyzed['sell'].shift(1)
|
df_analyzed.loc[:, 'sell'] = df_analyzed.loc[:, 'sell'].shift(1)
|
||||||
|
|
||||||
df_analyzed.drop(df_analyzed.head(1).index, inplace=True)
|
df_analyzed.drop(df_analyzed.head(1).index, inplace=True)
|
||||||
|
|
||||||
|
|
|
@ -467,8 +467,11 @@ class IStrategy(ABC):
|
||||||
"""
|
"""
|
||||||
Creates a dataframe and populates indicators for given candle (OHLCV) data
|
Creates a dataframe and populates indicators for given candle (OHLCV) data
|
||||||
Used by optimize operations only, not during dry / live runs.
|
Used by optimize operations only, not during dry / live runs.
|
||||||
|
Using .copy() to get a fresh copy of the dataframe for every strategy run.
|
||||||
|
Has positive effects on memory usage for whatever reason - also when
|
||||||
|
using only one strategy.
|
||||||
"""
|
"""
|
||||||
return {pair: self.advise_indicators(pair_data, {'pair': pair})
|
return {pair: self.advise_indicators(pair_data.copy(), {'pair': pair})
|
||||||
for pair, pair_data in data.items()}
|
for pair, pair_data in data.items()}
|
||||||
|
|
||||||
def advise_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
def advise_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
|
|
@ -168,6 +168,19 @@ def test_ohlcvdata_to_dataframe(default_conf, testdatadir) -> None:
|
||||||
assert len(processed['UNITTEST/BTC']) == 102 # partial candle was removed
|
assert len(processed['UNITTEST/BTC']) == 102 # partial candle was removed
|
||||||
|
|
||||||
|
|
||||||
|
def test_ohlcvdata_to_dataframe_copy(mocker, default_conf, testdatadir) -> None:
|
||||||
|
default_conf.update({'strategy': 'DefaultStrategy'})
|
||||||
|
strategy = StrategyResolver.load_strategy(default_conf)
|
||||||
|
aimock = mocker.patch('freqtrade.strategy.interface.IStrategy.advise_indicators')
|
||||||
|
timerange = TimeRange.parse_timerange('1510694220-1510700340')
|
||||||
|
data = load_data(testdatadir, '1m', ['UNITTEST/BTC'], timerange=timerange,
|
||||||
|
fill_up_missing=True)
|
||||||
|
strategy.ohlcvdata_to_dataframe(data)
|
||||||
|
assert aimock.call_count == 1
|
||||||
|
# Ensure that a copy of the dataframe is passed to advice_indicators
|
||||||
|
assert aimock.call_args_list[0][0][0] is not data
|
||||||
|
|
||||||
|
|
||||||
def test_min_roi_reached(default_conf, fee) -> None:
|
def test_min_roi_reached(default_conf, fee) -> None:
|
||||||
|
|
||||||
# Use list to confirm sequence does not matter
|
# Use list to confirm sequence does not matter
|
||||||
|
|
Loading…
Reference in New Issue
Block a user