Merge pull request #2173 from freqtrade/improve/trailing_validation
improve stoploss validation
This commit is contained in:
commit
60bc9f4f5e
@ -68,6 +68,10 @@ def validate_config_consistency(conf: Dict[str, Any]) -> None:
|
|||||||
|
|
||||||
def _validate_trailing_stoploss(conf: Dict[str, Any]) -> None:
|
def _validate_trailing_stoploss(conf: Dict[str, Any]) -> None:
|
||||||
|
|
||||||
|
if conf.get('stoploss') == 0.0:
|
||||||
|
raise OperationalException(
|
||||||
|
'The config stoploss needs to be different from 0 to avoid problems with sell orders.'
|
||||||
|
)
|
||||||
# Skip if trailing stoploss is not activated
|
# Skip if trailing stoploss is not activated
|
||||||
if not conf.get('trailing_stop', False):
|
if not conf.get('trailing_stop', False):
|
||||||
return
|
return
|
||||||
@ -79,12 +83,19 @@ def _validate_trailing_stoploss(conf: Dict[str, Any]) -> None:
|
|||||||
if tsl_only_offset:
|
if tsl_only_offset:
|
||||||
if tsl_positive == 0.0:
|
if tsl_positive == 0.0:
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
f'The config trailing_only_offset_is_reached needs '
|
'The config trailing_only_offset_is_reached needs '
|
||||||
'trailing_stop_positive_offset to be more than 0 in your config.')
|
'trailing_stop_positive_offset to be more than 0 in your config.')
|
||||||
if tsl_positive > 0 and 0 < tsl_offset <= tsl_positive:
|
if tsl_positive > 0 and 0 < tsl_offset <= tsl_positive:
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
f'The config trailing_stop_positive_offset needs '
|
'The config trailing_stop_positive_offset needs '
|
||||||
'to be greater than trailing_stop_positive_offset in your config.')
|
'to be greater than trailing_stop_positive in your config.')
|
||||||
|
|
||||||
|
# Fetch again without default
|
||||||
|
if 'trailing_stop_positive' in conf and float(conf['trailing_stop_positive']) == 0.0:
|
||||||
|
raise OperationalException(
|
||||||
|
'The config trailing_stop_positive needs to be different from 0 '
|
||||||
|
'to avoid problems with sell orders.'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _validate_edge(conf: Dict[str, Any]) -> None:
|
def _validate_edge(conf: Dict[str, Any]) -> None:
|
||||||
|
@ -648,6 +648,12 @@ def test_create_userdata_dir_exists_exception(mocker, default_conf, caplog) -> N
|
|||||||
|
|
||||||
|
|
||||||
def test_validate_tsl(default_conf):
|
def test_validate_tsl(default_conf):
|
||||||
|
default_conf['stoploss'] = 0.0
|
||||||
|
with pytest.raises(OperationalException, match='The config stoploss needs to be different '
|
||||||
|
'from 0 to avoid problems with sell orders.'):
|
||||||
|
validate_config_consistency(default_conf)
|
||||||
|
default_conf['stoploss'] = -0.10
|
||||||
|
|
||||||
default_conf['trailing_stop'] = True
|
default_conf['trailing_stop'] = True
|
||||||
default_conf['trailing_stop_positive'] = 0
|
default_conf['trailing_stop_positive'] = 0
|
||||||
default_conf['trailing_stop_positive_offset'] = 0
|
default_conf['trailing_stop_positive_offset'] = 0
|
||||||
@ -662,13 +668,22 @@ def test_validate_tsl(default_conf):
|
|||||||
default_conf['trailing_stop_positive'] = 0.015
|
default_conf['trailing_stop_positive'] = 0.015
|
||||||
with pytest.raises(OperationalException,
|
with pytest.raises(OperationalException,
|
||||||
match=r'The config trailing_stop_positive_offset needs '
|
match=r'The config trailing_stop_positive_offset needs '
|
||||||
'to be greater than trailing_stop_positive_offset in your config.'):
|
'to be greater than trailing_stop_positive in your config.'):
|
||||||
validate_config_consistency(default_conf)
|
validate_config_consistency(default_conf)
|
||||||
|
|
||||||
default_conf['trailing_stop_positive'] = 0.01
|
default_conf['trailing_stop_positive'] = 0.01
|
||||||
default_conf['trailing_stop_positive_offset'] = 0.015
|
default_conf['trailing_stop_positive_offset'] = 0.015
|
||||||
validate_config_consistency(default_conf)
|
validate_config_consistency(default_conf)
|
||||||
|
|
||||||
|
# 0 trailing stop positive - results in "Order would trigger immediately"
|
||||||
|
default_conf['trailing_stop_positive'] = 0
|
||||||
|
default_conf['trailing_stop_positive_offset'] = 0.02
|
||||||
|
default_conf['trailing_only_offset_is_reached'] = False
|
||||||
|
with pytest.raises(OperationalException,
|
||||||
|
match='The config trailing_stop_positive needs to be different from 0 '
|
||||||
|
'to avoid problems with sell orders'):
|
||||||
|
validate_config_consistency(default_conf)
|
||||||
|
|
||||||
|
|
||||||
def test_validate_edge(edge_conf):
|
def test_validate_edge(edge_conf):
|
||||||
edge_conf.update({"pairlist": {
|
edge_conf.update({"pairlist": {
|
||||||
|
Loading…
Reference in New Issue
Block a user