Remove Strategy fallback to default strategy (#490)

* Remove Strategy fallback to default strategy
This commit is contained in:
Gérald LONLAS 2018-02-02 01:01:09 -08:00 committed by Janne Sinivirta
parent 0f041b424d
commit d24cd89304
5 changed files with 28 additions and 8 deletions

View File

@ -24,7 +24,7 @@ python3 ./freqtrade/main.py --strategy awesome_strategy
## Change your strategy ## Change your strategy
The bot includes a default strategy file. However, we recommend you to The bot includes a default strategy file. However, we recommend you to
use your own file to not have to lose your parameters everytime the default use your own file to not have to lose your parameters every time the default
strategy file will be updated on Github. Put your custom strategy file strategy file will be updated on Github. Put your custom strategy file
into the folder `user_data/strategies`. into the folder `user_data/strategies`.

View File

@ -32,7 +32,7 @@ optional arguments:
--dry-run-db Force dry run to use a local DB --dry-run-db Force dry run to use a local DB
"tradesv3.dry_run.sqlite" instead of memory DB. Work "tradesv3.dry_run.sqlite" instead of memory DB. Work
only if dry_run is enabled. only if dry_run is enabled.
-dd PATH, --datadir PATH --datadir PATH
path to backtest data (default freqdata/tests/testdata path to backtest data (default freqdata/tests/testdata
--dynamic-whitelist [INT] --dynamic-whitelist [INT]
dynamically generate and update whitelist based on 24h dynamically generate and update whitelist based on 24h
@ -65,8 +65,8 @@ load it:
python3 ./freqtrade/main.py --strategy my_awesome_strategy python3 ./freqtrade/main.py --strategy my_awesome_strategy
``` ```
If the bot does not find your strategy file, it will fallback to the If the bot does not find your strategy file, it will display in an error
`default_strategy`. message the reason (File not found, or errors in your code).
Learn more about strategy file in [optimize your bot](https://github.com/gcarq/freqtrade/blob/develop/docs/bot-optimization.md). Learn more about strategy file in [optimize your bot](https://github.com/gcarq/freqtrade/blob/develop/docs/bot-optimization.md).

View File

@ -163,7 +163,7 @@ def common_args_parser(description: str):
'-s', '--strategy', '-s', '--strategy',
help='specify strategy file (default: freqtrade/strategy/default_strategy.py)', help='specify strategy file (default: freqtrade/strategy/default_strategy.py)',
dest='strategy', dest='strategy',
default='.default_strategy', default='default_strategy',
type=str, type=str,
metavar='PATH', metavar='PATH',
) )

View File

@ -95,8 +95,16 @@ class Strategy(object):
self.custom_strategy = self._load_class(path + strategy_name) self.custom_strategy = self._load_class(path + strategy_name)
# Fallback to the default strategy # Fallback to the default strategy
except (ImportError, TypeError): except (ImportError, TypeError) as error:
self.custom_strategy = self._load_class('.' + self.DEFAULT_STRATEGY) self.logger.error(
"Impossible to load Strategy 'user_data/strategies/%s.py'. This file does not exist"
" or contains Python code errors",
strategy_name
)
self.logger.error(
"The error is:\n%s.",
error
)
def _load_class(self, filename: str) -> IStrategy: def _load_class(self, filename: str) -> IStrategy:
""" """

View File

@ -32,7 +32,7 @@ def test_load_strategy(result):
strategy.logger = logging.getLogger(__name__) strategy.logger = logging.getLogger(__name__)
assert not hasattr(Strategy, 'custom_strategy') assert not hasattr(Strategy, 'custom_strategy')
strategy._load_strategy('default_strategy') strategy._load_strategy('test_strategy')
assert not hasattr(Strategy, 'custom_strategy') assert not hasattr(Strategy, 'custom_strategy')
@ -40,6 +40,18 @@ def test_load_strategy(result):
assert 'adx' in strategy.populate_indicators(result) assert 'adx' in strategy.populate_indicators(result)
def test_load_not_found_strategy(caplog):
strategy = Strategy()
strategy.logger = logging.getLogger(__name__)
assert not hasattr(Strategy, 'custom_strategy')
strategy._load_strategy('NotFoundStrategy')
error_msg = "Impossible to load Strategy 'user_data/strategies/{}.py'. This file does not " \
"exist or contains Python code errors".format('NotFoundStrategy')
assert ('test_strategy', logging.ERROR, error_msg) in caplog.record_tuples
def test_strategy(result): def test_strategy(result):
strategy = Strategy() strategy = Strategy()
strategy.init({'strategy': 'default_strategy'}) strategy.init({'strategy': 'default_strategy'})