Merge branch 'develop' into plot-trades
This commit is contained in:
commit
57ff3ff450
@ -196,6 +196,7 @@ class Configuration:
|
|||||||
if self.args.get('exportfilename'):
|
if self.args.get('exportfilename'):
|
||||||
self._args_to_config(config, argname='exportfilename',
|
self._args_to_config(config, argname='exportfilename',
|
||||||
logstring='Storing backtest results to {} ...')
|
logstring='Storing backtest results to {} ...')
|
||||||
|
config['exportfilename'] = Path(config['exportfilename'])
|
||||||
else:
|
else:
|
||||||
config['exportfilename'] = (config['user_data_dir']
|
config['exportfilename'] = (config['user_data_dir']
|
||||||
/ 'backtest_results/backtest-result.json')
|
/ 'backtest_results/backtest-result.json')
|
||||||
|
@ -129,11 +129,16 @@ def load_trades_from_db(db_url: str) -> pd.DataFrame:
|
|||||||
return trades
|
return trades
|
||||||
|
|
||||||
|
|
||||||
def load_trades(source: str, db_url: str, exportfilename: str, skip_trades: bool) -> pd.DataFrame:
|
def load_trades(source: str, db_url: str, exportfilename: Path, skip_trades: bool) -> pd.DataFrame:
|
||||||
"""
|
"""
|
||||||
Based on configuration option "trade_source":
|
Based on configuration option "trade_source":
|
||||||
* loads data from DB (using `db_url`)
|
* loads data from DB (using `db_url`)
|
||||||
* loads data from backtestfile (using `exportfilename`)
|
* loads data from backtestfile (using `exportfilename`)
|
||||||
|
:param source: "DB" or "file" - specify source to load from
|
||||||
|
:param db_url: sqlalchemy formatted url to a database
|
||||||
|
:param exportfilename: Json file generated by backtesting
|
||||||
|
:param skip_trades: Skip using trades, only return backtesting data columns
|
||||||
|
:return: DataFrame containing trades
|
||||||
"""
|
"""
|
||||||
if skip_trades:
|
if skip_trades:
|
||||||
df = pd.DataFrame(columns=BT_DATA_COLUMNS)
|
df = pd.DataFrame(columns=BT_DATA_COLUMNS)
|
||||||
@ -142,7 +147,7 @@ def load_trades(source: str, db_url: str, exportfilename: str, skip_trades: bool
|
|||||||
if source == "DB":
|
if source == "DB":
|
||||||
return load_trades_from_db(db_url)
|
return load_trades_from_db(db_url)
|
||||||
elif source == "file":
|
elif source == "file":
|
||||||
return load_backtest_data(Path(exportfilename))
|
return load_backtest_data(exportfilename)
|
||||||
|
|
||||||
|
|
||||||
def extract_trades_of_period(dataframe: pd.DataFrame, trades: pd.DataFrame) -> pd.DataFrame:
|
def extract_trades_of_period(dataframe: pd.DataFrame, trades: pd.DataFrame) -> pd.DataFrame:
|
||||||
|
@ -421,7 +421,7 @@ class Backtesting:
|
|||||||
for strategy, results in all_results.items():
|
for strategy, results in all_results.items():
|
||||||
|
|
||||||
if self.config.get('export', False):
|
if self.config.get('export', False):
|
||||||
self._store_backtest_result(Path(self.config['exportfilename']), results,
|
self._store_backtest_result(self.config['exportfilename'], results,
|
||||||
strategy if len(self.strategylist) > 1 else None)
|
strategy if len(self.strategylist) > 1 else None)
|
||||||
|
|
||||||
print(f"Result for strategy {strategy}")
|
print(f"Result for strategy {strategy}")
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from arrow import Arrow
|
from arrow import Arrow
|
||||||
from pandas import DataFrame, DateOffset, to_datetime, Timestamp
|
from pandas import DataFrame, DateOffset, Timestamp, to_datetime
|
||||||
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS,
|
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS,
|
||||||
@ -112,7 +113,7 @@ def test_load_trades(default_conf, mocker):
|
|||||||
|
|
||||||
db_mock.reset_mock()
|
db_mock.reset_mock()
|
||||||
bt_mock.reset_mock()
|
bt_mock.reset_mock()
|
||||||
default_conf['exportfilename'] = "testfile.json"
|
default_conf['exportfilename'] = Path("testfile.json")
|
||||||
load_trades("file",
|
load_trades("file",
|
||||||
db_url=default_conf.get('db_url'),
|
db_url=default_conf.get('db_url'),
|
||||||
exportfilename=default_conf.get('exportfilename'),
|
exportfilename=default_conf.get('exportfilename'),
|
||||||
|
@ -224,6 +224,7 @@ def test_setup_bt_configuration_with_arguments(mocker, default_conf, caplog) ->
|
|||||||
assert 'export' in config
|
assert 'export' in config
|
||||||
assert log_has('Parameter --export detected: {} ...'.format(config['export']), caplog)
|
assert log_has('Parameter --export detected: {} ...'.format(config['export']), caplog)
|
||||||
assert 'exportfilename' in config
|
assert 'exportfilename' in config
|
||||||
|
assert isinstance(config['exportfilename'], Path)
|
||||||
assert log_has('Storing backtest results to {} ...'.format(config['exportfilename']), caplog)
|
assert log_has('Storing backtest results to {} ...'.format(config['exportfilename']), caplog)
|
||||||
|
|
||||||
assert 'fee' in config
|
assert 'fee' in config
|
||||||
|
@ -49,7 +49,7 @@ def test_init_plotscript(default_conf, mocker, testdatadir):
|
|||||||
default_conf['trade_source'] = "file"
|
default_conf['trade_source'] = "file"
|
||||||
default_conf['ticker_interval'] = "5m"
|
default_conf['ticker_interval'] = "5m"
|
||||||
default_conf["datadir"] = testdatadir
|
default_conf["datadir"] = testdatadir
|
||||||
default_conf['exportfilename'] = str(testdatadir / "backtest-result_test.json")
|
default_conf['exportfilename'] = testdatadir / "backtest-result_test.json"
|
||||||
ret = init_plotscript(default_conf)
|
ret = init_plotscript(default_conf)
|
||||||
assert "ohlcv" in ret
|
assert "ohlcv" in ret
|
||||||
assert "trades" in ret
|
assert "trades" in ret
|
||||||
@ -318,7 +318,7 @@ def test_start_plot_dataframe(mocker):
|
|||||||
def test_load_and_plot_trades(default_conf, mocker, caplog, testdatadir):
|
def test_load_and_plot_trades(default_conf, mocker, caplog, testdatadir):
|
||||||
default_conf['trade_source'] = 'file'
|
default_conf['trade_source'] = 'file'
|
||||||
default_conf["datadir"] = testdatadir
|
default_conf["datadir"] = testdatadir
|
||||||
default_conf['exportfilename'] = str(testdatadir / "backtest-result_test.json")
|
default_conf['exportfilename'] = testdatadir / "backtest-result_test.json"
|
||||||
default_conf['indicators1'] = ["sma5", "ema10"]
|
default_conf['indicators1'] = ["sma5", "ema10"]
|
||||||
default_conf['indicators2'] = ["macd"]
|
default_conf['indicators2'] = ["macd"]
|
||||||
default_conf['pairs'] = ["ETH/BTC", "LTC/BTC"]
|
default_conf['pairs'] = ["ETH/BTC", "LTC/BTC"]
|
||||||
@ -374,7 +374,7 @@ def test_start_plot_profit_error(mocker):
|
|||||||
def test_plot_profit(default_conf, mocker, testdatadir, caplog):
|
def test_plot_profit(default_conf, mocker, testdatadir, caplog):
|
||||||
default_conf['trade_source'] = 'file'
|
default_conf['trade_source'] = 'file'
|
||||||
default_conf["datadir"] = testdatadir
|
default_conf["datadir"] = testdatadir
|
||||||
default_conf['exportfilename'] = str(testdatadir / "backtest-result_test.json")
|
default_conf['exportfilename'] = testdatadir / "backtest-result_test.json"
|
||||||
default_conf['pairs'] = ["ETH/BTC", "LTC/BTC"]
|
default_conf['pairs'] = ["ETH/BTC", "LTC/BTC"]
|
||||||
|
|
||||||
profit_mock = MagicMock()
|
profit_mock = MagicMock()
|
||||||
|
Loading…
Reference in New Issue
Block a user