Split protection-notification into global and per-pair
This commit is contained in:
parent
a0fb43c6ca
commit
dd0db7ee5d
@ -149,7 +149,9 @@
|
|||||||
},
|
},
|
||||||
"sell_fill": "on",
|
"sell_fill": "on",
|
||||||
"buy_cancel": "on",
|
"buy_cancel": "on",
|
||||||
"sell_cancel": "on"
|
"sell_cancel": "on",
|
||||||
|
"protection_trigger": "off",
|
||||||
|
"protection_trigger_global": "on"
|
||||||
},
|
},
|
||||||
"reload": true,
|
"reload": true,
|
||||||
"balance_dust_level": 0.01
|
"balance_dust_level": 0.01
|
||||||
|
@ -93,7 +93,9 @@ Example configuration showing the different settings:
|
|||||||
"buy_cancel": "silent",
|
"buy_cancel": "silent",
|
||||||
"sell_cancel": "on",
|
"sell_cancel": "on",
|
||||||
"buy_fill": "off",
|
"buy_fill": "off",
|
||||||
"sell_fill": "off"
|
"sell_fill": "off",
|
||||||
|
"protection_trigger": "off",
|
||||||
|
"protection_trigger_global": "on"
|
||||||
},
|
},
|
||||||
"reload": true,
|
"reload": true,
|
||||||
"balance_dust_level": 0.01
|
"balance_dust_level": 0.01
|
||||||
|
@ -12,6 +12,7 @@ class RPCMessageType(Enum):
|
|||||||
SELL_FILL = 'sell_fill'
|
SELL_FILL = 'sell_fill'
|
||||||
SELL_CANCEL = 'sell_cancel'
|
SELL_CANCEL = 'sell_cancel'
|
||||||
PROTECTION_TRIGGER = 'protection_trigger'
|
PROTECTION_TRIGGER = 'protection_trigger'
|
||||||
|
PROTECTION_TRIGGER_GLOBAL = 'protection_trigger_global'
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.value
|
return self.value
|
||||||
|
@ -1309,7 +1309,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
|
|
||||||
prot_trig_glb = self.protections.global_stop()
|
prot_trig_glb = self.protections.global_stop()
|
||||||
if prot_trig_glb:
|
if prot_trig_glb:
|
||||||
msg = {'type': RPCMessageType.PROTECTION_TRIGGER, }
|
msg = {'type': RPCMessageType.PROTECTION_TRIGGER_GLOBAL, }
|
||||||
msg.update(prot_trig_glb.to_json())
|
msg.update(prot_trig_glb.to_json())
|
||||||
self.rpc.send_msg(msg)
|
self.rpc.send_msg(msg)
|
||||||
|
|
||||||
|
@ -286,7 +286,11 @@ class Telegram(RPCHandler):
|
|||||||
"*Protection* triggered due to {reason}. "
|
"*Protection* triggered due to {reason}. "
|
||||||
"{pair} will be locked until {lock_end_time}."
|
"{pair} will be locked until {lock_end_time}."
|
||||||
).format(**msg)
|
).format(**msg)
|
||||||
|
elif msg_type == RPCMessageType.PROTECTION_TRIGGER_GLOBAL:
|
||||||
|
message = (
|
||||||
|
"*Protection* triggered due to {reason}. "
|
||||||
|
"All pairs will be locked until {lock_end_time}."
|
||||||
|
).format(**msg)
|
||||||
elif msg_type == RPCMessageType.STATUS:
|
elif msg_type == RPCMessageType.STATUS:
|
||||||
message = '*Status:* `{status}`'.format(**msg)
|
message = '*Status:* `{status}`'.format(**msg)
|
||||||
|
|
||||||
|
@ -1326,6 +1326,19 @@ def test_send_msg_protection_notification(default_conf, mocker, time_machine) ->
|
|||||||
assert (msg_mock.call_args[0][0] == "*Protection* triggered due to randreason. "
|
assert (msg_mock.call_args[0][0] == "*Protection* triggered due to randreason. "
|
||||||
"ETH/BTC will be locked until 2021-09-01 05:10:00.")
|
"ETH/BTC will be locked until 2021-09-01 05:10:00.")
|
||||||
|
|
||||||
|
msg_mock.reset_mock()
|
||||||
|
# Test global protection
|
||||||
|
|
||||||
|
msg = {
|
||||||
|
'type': RPCMessageType.PROTECTION_TRIGGER_GLOBAL,
|
||||||
|
}
|
||||||
|
lock = PairLocks.lock_pair('*', arrow.utcnow().shift(minutes=100).datetime, 'randreason')
|
||||||
|
msg.update(lock.to_json())
|
||||||
|
telegram.send_msg(msg)
|
||||||
|
assert (msg_mock.call_args[0][0] == "*Protection* triggered due to randreason. "
|
||||||
|
"All pairs will be locked until 2021-09-01 06:45:00.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_send_msg_buy_fill_notification(default_conf, mocker) -> None:
|
def test_send_msg_buy_fill_notification(default_conf, mocker) -> None:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user