2018-11-14 18:14:34 +00:00
|
|
|
# pragma pylint: disable=missing-docstring, C0103, C0330
|
|
|
|
# pragma pylint: disable=protected-access, too-many-lines, invalid-name, too-many-arguments
|
|
|
|
|
2019-04-24 19:24:00 +00:00
|
|
|
from unittest.mock import MagicMock
|
|
|
|
|
2020-01-26 12:33:13 +00:00
|
|
|
from freqtrade.commands.optimize_commands import setup_optimize_configuration, start_edge
|
2021-06-08 19:20:35 +00:00
|
|
|
from freqtrade.enums import RunMode
|
2019-05-25 18:06:18 +00:00
|
|
|
from freqtrade.optimize.edge_cli import EdgeCli
|
2022-03-20 08:01:18 +00:00
|
|
|
from tests.conftest import get_args, log_has, patch_exchange, patched_configuration_load_config_file
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
|
2020-01-26 12:33:13 +00:00
|
|
|
def test_setup_optimize_configuration_without_arguments(mocker, default_conf, caplog) -> None:
|
2019-07-14 22:44:25 +00:00
|
|
|
patched_configuration_load_config_file(mocker, default_conf)
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
args = [
|
2019-09-14 11:19:40 +00:00
|
|
|
'edge',
|
2018-11-14 18:14:34 +00:00
|
|
|
'--config', 'config.json',
|
2021-08-26 05:25:53 +00:00
|
|
|
'--strategy', 'StrategyTestV2',
|
2018-11-14 18:14:34 +00:00
|
|
|
]
|
|
|
|
|
2020-01-26 12:33:13 +00:00
|
|
|
config = setup_optimize_configuration(get_args(args), RunMode.EDGE)
|
2019-05-28 17:25:01 +00:00
|
|
|
assert config['runmode'] == RunMode.EDGE
|
2018-12-25 13:35:48 +00:00
|
|
|
|
2018-11-14 18:14:34 +00:00
|
|
|
assert 'max_open_trades' in config
|
|
|
|
assert 'stake_currency' in config
|
|
|
|
assert 'stake_amount' in config
|
|
|
|
assert 'exchange' in config
|
|
|
|
assert 'pair_whitelist' in config['exchange']
|
|
|
|
assert 'datadir' in config
|
2019-08-11 18:16:52 +00:00
|
|
|
assert log_has('Using data directory: {} ...'.format(config['datadir']), caplog)
|
2020-06-01 18:33:26 +00:00
|
|
|
assert 'timeframe' in config
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
assert 'timerange' not in config
|
|
|
|
assert 'stoploss_range' not in config
|
|
|
|
|
|
|
|
|
2019-01-01 13:07:40 +00:00
|
|
|
def test_setup_edge_configuration_with_arguments(mocker, edge_conf, caplog) -> None:
|
2019-07-14 22:44:25 +00:00
|
|
|
patched_configuration_load_config_file(mocker, edge_conf)
|
2019-07-11 22:41:09 +00:00
|
|
|
mocker.patch(
|
2019-07-12 00:26:27 +00:00
|
|
|
'freqtrade.configuration.configuration.create_datadir',
|
|
|
|
lambda c, x: x
|
2019-07-11 22:41:09 +00:00
|
|
|
)
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
args = [
|
2019-09-14 11:19:40 +00:00
|
|
|
'edge',
|
2018-11-14 18:14:34 +00:00
|
|
|
'--config', 'config.json',
|
2021-08-26 05:25:53 +00:00
|
|
|
'--strategy', 'StrategyTestV2',
|
2018-11-14 18:14:34 +00:00
|
|
|
'--datadir', '/foo/bar',
|
2020-06-01 18:33:26 +00:00
|
|
|
'--timeframe', '1m',
|
2018-11-14 18:14:34 +00:00
|
|
|
'--timerange', ':100',
|
|
|
|
'--stoplosses=-0.01,-0.10,-0.001'
|
|
|
|
]
|
|
|
|
|
2020-01-26 12:33:13 +00:00
|
|
|
config = setup_optimize_configuration(get_args(args), RunMode.EDGE)
|
2018-11-14 18:14:34 +00:00
|
|
|
assert 'max_open_trades' in config
|
|
|
|
assert 'stake_currency' in config
|
|
|
|
assert 'stake_amount' in config
|
|
|
|
assert 'exchange' in config
|
|
|
|
assert 'pair_whitelist' in config['exchange']
|
|
|
|
assert 'datadir' in config
|
2019-05-28 17:25:01 +00:00
|
|
|
assert config['runmode'] == RunMode.EDGE
|
2019-08-11 18:16:52 +00:00
|
|
|
assert log_has('Using data directory: {} ...'.format(config['datadir']), caplog)
|
2020-06-01 18:33:26 +00:00
|
|
|
assert 'timeframe' in config
|
|
|
|
assert log_has('Parameter -i/--timeframe detected ... Using timeframe: 1m ...',
|
2019-08-11 18:16:52 +00:00
|
|
|
caplog)
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
assert 'timerange' in config
|
2019-08-11 18:16:52 +00:00
|
|
|
assert log_has('Parameter --timerange detected: {} ...'.format(config['timerange']), caplog)
|
2018-11-14 18:14:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_start(mocker, fee, edge_conf, caplog) -> None:
|
|
|
|
start_mock = MagicMock()
|
|
|
|
mocker.patch('freqtrade.exchange.Exchange.get_fee', fee)
|
|
|
|
patch_exchange(mocker)
|
2018-11-15 09:31:56 +00:00
|
|
|
mocker.patch('freqtrade.optimize.edge_cli.EdgeCli.start', start_mock)
|
2019-07-14 22:44:25 +00:00
|
|
|
patched_configuration_load_config_file(mocker, edge_conf)
|
2019-07-11 21:39:42 +00:00
|
|
|
|
2018-11-14 18:14:34 +00:00
|
|
|
args = [
|
2019-09-14 11:19:40 +00:00
|
|
|
'edge',
|
2018-11-14 18:14:34 +00:00
|
|
|
'--config', 'config.json',
|
2021-08-26 05:25:53 +00:00
|
|
|
'--strategy', 'StrategyTestV2',
|
2018-11-14 18:14:34 +00:00
|
|
|
]
|
2020-02-10 09:35:48 +00:00
|
|
|
pargs = get_args(args)
|
|
|
|
start_edge(pargs)
|
2019-08-11 18:16:52 +00:00
|
|
|
assert log_has('Starting freqtrade in Edge mode', caplog)
|
2018-11-14 18:14:34 +00:00
|
|
|
assert start_mock.call_count == 1
|
|
|
|
|
|
|
|
|
|
|
|
def test_edge_init(mocker, edge_conf) -> None:
|
|
|
|
patch_exchange(mocker)
|
2019-06-15 11:04:15 +00:00
|
|
|
edge_conf['stake_amount'] = 20
|
2018-11-14 18:14:34 +00:00
|
|
|
edge_cli = EdgeCli(edge_conf)
|
|
|
|
assert edge_cli.config == edge_conf
|
2019-06-15 11:04:15 +00:00
|
|
|
assert edge_cli.config['stake_amount'] == 'unlimited'
|
2018-11-14 18:14:34 +00:00
|
|
|
assert callable(edge_cli.edge.calculate)
|
|
|
|
|
|
|
|
|
2019-10-05 13:34:31 +00:00
|
|
|
def test_edge_init_fee(mocker, edge_conf) -> None:
|
|
|
|
patch_exchange(mocker)
|
|
|
|
edge_conf['fee'] = 0.1234
|
|
|
|
edge_conf['stake_amount'] = 20
|
|
|
|
fee_mock = mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.5))
|
|
|
|
edge_cli = EdgeCli(edge_conf)
|
|
|
|
assert edge_cli.edge.fee == 0.1234
|
|
|
|
assert fee_mock.call_count == 0
|
2020-08-06 07:22:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_edge_start(mocker, edge_conf) -> None:
|
|
|
|
mock_calculate = mocker.patch('freqtrade.edge.edge_positioning.Edge.calculate',
|
|
|
|
return_value=True)
|
|
|
|
table_mock = mocker.patch('freqtrade.optimize.edge_cli.generate_edge_table')
|
|
|
|
|
|
|
|
patch_exchange(mocker)
|
|
|
|
edge_conf['stake_amount'] = 20
|
|
|
|
|
|
|
|
edge_cli = EdgeCli(edge_conf)
|
|
|
|
edge_cli.start()
|
|
|
|
assert mock_calculate.call_count == 1
|
|
|
|
assert table_mock.call_count == 1
|