mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
timeperiod argument to backtesting and hyperopt
This commit is contained in:
parent
feca87345f
commit
b0f3fd7ffb
|
@ -183,6 +183,13 @@ def build_subcommands(parser: argparse.ArgumentParser) -> None:
|
|||
action='store_true',
|
||||
dest='refresh_pairs',
|
||||
)
|
||||
backtesting_cmd.add_argument(
|
||||
'-tp', '--timeperiod',
|
||||
help='Use the last N ticks of data.',
|
||||
default=None,
|
||||
type=int,
|
||||
dest='timeperiod',
|
||||
)
|
||||
|
||||
# Add hyperopt subcommand
|
||||
hyperopt_cmd = subparsers.add_parser('hyperopt', help='hyperopt module')
|
||||
|
@ -209,6 +216,13 @@ def build_subcommands(parser: argparse.ArgumentParser) -> None:
|
|||
type=int,
|
||||
metavar='INT',
|
||||
)
|
||||
hyperopt_cmd.add_argument(
|
||||
'-tp', '--timeperiod',
|
||||
help='Use the last N ticks of data.',
|
||||
default=None,
|
||||
type=int,
|
||||
dest='timeperiod',
|
||||
)
|
||||
|
||||
|
||||
# Required json-schema for user specified config
|
||||
|
|
|
@ -12,6 +12,13 @@ from freqtrade.analyze import populate_indicators, parse_ticker_dataframe
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def trim_tickerlist(dl, num):
|
||||
new = {}
|
||||
for pair, pair_data in dl.items():
|
||||
new[pair] = pair_data[num:]
|
||||
return new
|
||||
|
||||
|
||||
def load_tickerdata_file(datadir, pair, ticker_interval):
|
||||
"""
|
||||
Load a pair from file,
|
||||
|
@ -61,7 +68,9 @@ def load_data(datadir: str, ticker_interval: int = 5, pairs: Optional[List[str]]
|
|||
return result
|
||||
|
||||
|
||||
def tickerdata_to_dataframe(data):
|
||||
def tickerdata_to_dataframe(data, timeperiod=None):
|
||||
if timeperiod:
|
||||
data = trim_tickerlist(data, timeperiod)
|
||||
preprocessed = preprocess(data)
|
||||
return preprocessed
|
||||
|
||||
|
|
|
@ -176,7 +176,7 @@ def start(args):
|
|||
from freqtrade import main
|
||||
main._CONF = config
|
||||
|
||||
preprocessed = optimize.tickerdata_to_dataframe(data)
|
||||
preprocessed = optimize.tickerdata_to_dataframe(data, timeperiod=args.timeperiod)
|
||||
# Print timeframe
|
||||
min_date, max_date = get_timeframe(preprocessed)
|
||||
logger.info('Measuring data from %s up to %s ...', min_date.isoformat(), max_date.isoformat())
|
||||
|
|
|
@ -231,7 +231,7 @@ def start(args):
|
|||
config = load_config(args.config)
|
||||
pairs = config['exchange']['pair_whitelist']
|
||||
data = optimize.load_data(args.datadir, pairs=pairs, ticker_interval=args.ticker_interval)
|
||||
PROCESSED = optimize.tickerdata_to_dataframe(data)
|
||||
PROCESSED = optimize.tickerdata_to_dataframe(data, timeperiod=args.timeperiod)
|
||||
|
||||
if args.mongodb:
|
||||
logger.info('Using mongodb ...')
|
||||
|
|
|
@ -6,7 +6,7 @@ import pandas as pd
|
|||
from unittest.mock import MagicMock
|
||||
from freqtrade import exchange, optimize
|
||||
from freqtrade.exchange import Bittrex
|
||||
from freqtrade.optimize import preprocess
|
||||
from freqtrade.optimize import preprocess, trim_tickerlist
|
||||
from freqtrade.optimize.backtesting import backtest, generate_text_table, get_timeframe
|
||||
import freqtrade.optimize.backtesting as backtesting
|
||||
|
||||
|
@ -59,16 +59,9 @@ def test_backtest_1min_ticker_interval(default_conf, mocker):
|
|||
assert not results.empty
|
||||
|
||||
|
||||
def trim_dictlist(dl, num):
|
||||
new = {}
|
||||
for pair, pair_data in dl.items():
|
||||
new[pair] = pair_data[num:]
|
||||
return new
|
||||
|
||||
|
||||
def load_data_test(what):
|
||||
data = optimize.load_data(None, ticker_interval=1, pairs=['BTC_UNITEST'])
|
||||
data = trim_dictlist(data, -100)
|
||||
data = trim_tickerlist(data, -100)
|
||||
pair = data['BTC_UNITEST']
|
||||
datalen = len(pair)
|
||||
# Depending on the what parameter we now adjust the
|
||||
|
@ -152,7 +145,7 @@ def test_backtest_pricecontours(default_conf, mocker):
|
|||
def mocked_load_data(datadir, pairs=[], ticker_interval=0, refresh_pairs=False):
|
||||
tickerdata = optimize.load_tickerdata_file(datadir, 'BTC_UNITEST', 1)
|
||||
pairdata = {'BTC_UNITEST': tickerdata}
|
||||
return trim_dictlist(pairdata, -100)
|
||||
return trim_tickerlist(pairdata, -100)
|
||||
|
||||
|
||||
def test_backtest_start(default_conf, mocker, caplog):
|
||||
|
@ -166,6 +159,7 @@ def test_backtest_start(default_conf, mocker, caplog):
|
|||
args.level = 10
|
||||
args.live = False
|
||||
args.datadir = None
|
||||
args.timeperiod = None # needed due to MagicMock malleability
|
||||
backtesting.start(args)
|
||||
# check the logs, that will contain the backtest result
|
||||
exists = ['Using max_open_trades: 1 ...',
|
||||
|
|
|
@ -37,7 +37,7 @@ def create_trials(mocker):
|
|||
|
||||
def test_start_calls_fmin(mocker):
|
||||
mocker.patch('freqtrade.optimize.hyperopt.Trials', return_value=create_trials(mocker))
|
||||
mocker.patch('freqtrade.optimize.preprocess')
|
||||
mocker.patch('freqtrade.optimize.tickerdata_to_dataframe')
|
||||
mocker.patch('freqtrade.optimize.load_data')
|
||||
mock_fmin = mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={})
|
||||
|
||||
|
@ -50,7 +50,7 @@ def test_start_calls_fmin(mocker):
|
|||
def test_start_uses_mongotrials(mocker):
|
||||
mock_mongotrials = mocker.patch('freqtrade.optimize.hyperopt.MongoTrials',
|
||||
return_value=create_trials(mocker))
|
||||
mocker.patch('freqtrade.optimize.preprocess')
|
||||
mocker.patch('freqtrade.optimize.tickerdata_to_dataframe')
|
||||
mocker.patch('freqtrade.optimize.load_data')
|
||||
mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={})
|
||||
|
||||
|
@ -104,7 +104,7 @@ def test_fmin_best_results(mocker, caplog):
|
|||
}
|
||||
|
||||
mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker))
|
||||
mocker.patch('freqtrade.optimize.preprocess')
|
||||
mocker.patch('freqtrade.optimize.tickerdata_to_dataframe')
|
||||
mocker.patch('freqtrade.optimize.load_data')
|
||||
mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value=fmin_result)
|
||||
|
||||
|
@ -126,7 +126,7 @@ def test_fmin_best_results(mocker, caplog):
|
|||
|
||||
def test_fmin_throw_value_error(mocker, caplog):
|
||||
mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker))
|
||||
mocker.patch('freqtrade.optimize.preprocess')
|
||||
mocker.patch('freqtrade.optimize.tickerdata_to_dataframe')
|
||||
mocker.patch('freqtrade.optimize.load_data')
|
||||
mocker.patch('freqtrade.optimize.hyperopt.fmin', side_effect=ValueError())
|
||||
|
||||
|
|
|
@ -174,3 +174,10 @@ def test_load_tickerdata_file():
|
|||
assert not load_tickerdata_file(None, 'BTC_UNITEST', 7)
|
||||
tickerdata = load_tickerdata_file(None, 'BTC_UNITEST', 1)
|
||||
assert _btc_unittest_length == len(tickerdata)
|
||||
|
||||
|
||||
def test_tickerdata_to_dataframe():
|
||||
tick = load_tickerdata_file(None, 'BTC_UNITEST', 1)
|
||||
tickerlist = {'BTC_UNITEST': tick}
|
||||
data = optimize.tickerdata_to_dataframe(tickerlist, timeperiod=-100)
|
||||
assert 100 == len(data['BTC_UNITEST'])
|
||||
|
|
Loading…
Reference in New Issue
Block a user