diff --git a/docs/telegram-usage.md b/docs/telegram-usage.md index a4145df02..dfab3754c 100644 --- a/docs/telegram-usage.md +++ b/docs/telegram-usage.md @@ -179,7 +179,7 @@ official commands. You can ask at any moment for help with `/help`. | `/count` | Displays number of trades used and available | `/locks` | Show currently locked pairs. | `/unlock ` | Remove the lock for this pair (or for this lock id). -| `/marketdir [long | short | even | none]` | Updates the user managed variable that represents the current market direction. +| `/marketdir [long | short | even | none]` | Updates the user managed variable that represents the current market direction. If no direction is provided, the currently set direction will be displayed. | **Modify Trade states** | | `/forceexit | /fx ` | Instantly exits the given trade (Ignoring `minimum_roi`). | `/forceexit all | /fx all` | Instantly exits all open trades (Ignoring `minimum_roi`). @@ -420,6 +420,12 @@ ARDR/ETH 0.366667 0.143059 -0.01 ### /marketdir -Updates the user managed variable that represents the current market direction. This variable is not set -to any valid market direction on bot startup and must be set by the user. As an example `/marketdir long` -would set the variable to be `long`. +If a market direction is provided the command updates the user managed variable that represents the current market direction. +This variable is not set to any valid market direction on bot startup and must be set by the user. The example below is for `/marketdir long`: +``` +Successfully updated marketdirection from none to long. +``` +If no market direction is provided the command outputs the currently set market directions. The example below is for `/marketdir`: +``` +Currently set marketdirection: even +``` diff --git a/freqtrade/enums/marketstatetype.py b/freqtrade/enums/marketstatetype.py index 8132be74a..5cede32c2 100644 --- a/freqtrade/enums/marketstatetype.py +++ b/freqtrade/enums/marketstatetype.py @@ -8,4 +8,8 @@ class MarketDirection(Enum): LONG = "long" SHORT = "short" EVEN = "even" - NONE = '' + NONE = "none" + + def __str__(self): + # convert to string + return self.value diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index f1e6c15e6..d2e66cfff 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -1206,5 +1206,8 @@ class RPC: 'last_process_ts': int(last_p.timestamp()), } - def _update_market_direction(self, direction: MarketDirection): + def _update_market_direction(self, direction: MarketDirection) -> None: self._freqtrade.strategy.market_direction = direction + + def _get_market_direction(self) -> MarketDirection: + return self._freqtrade.strategy.market_direction diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 5f682b436..050dc3f31 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -129,7 +129,8 @@ class Telegram(RPCHandler): r'/weekly$', r'/weekly \d+$', r'/monthly$', r'/monthly \d+$', r'/forcebuy$', r'/forcelong$', r'/forceshort$', r'/forcesell$', r'/forceexit$', - r'/edge$', r'/health$', r'/help$', r'/version$', r'/marketdir (long|short|even|none)$' + r'/edge$', r'/health$', r'/help$', r'/version$', r'/marketdir (long|short|even|none)$', + r'/marketdir$' ] # Create keys for generation valid_keys_print = [k.replace('$', '') for k in valid_keys] @@ -1495,8 +1496,9 @@ class Telegram(RPCHandler): "*/count:* `Show number of active trades compared to allowed number of trades`\n" "*/edge:* `Shows validated pairs by Edge if it is enabled` \n" "*/health* `Show latest process timestamp - defaults to 1970-01-01 00:00:00` \n" - "*/marketdir [long | short | even | none]:* `Updates the user managed variable" - " that represents the current market direction` \n" + "*/marketdir [long | short | even | none]:* `Updates the user managed variable " + "that represents the current market direction. If no direction is provided `" + "`the currently set market direction will be output.` \n" "_Statistics_\n" "------------\n" @@ -1691,16 +1693,28 @@ class Telegram(RPCHandler): :return: None """ if context.args and len(context.args) == 1: - new_market_dir = context.args[0] - if new_market_dir == "long": - self._rpc._update_market_direction(MarketDirection.LONG) - elif new_market_dir == "short": - self._rpc._update_market_direction(MarketDirection.SHORT) - elif new_market_dir == "even": - self._rpc._update_market_direction(MarketDirection.EVEN) - elif new_market_dir == "none": - self._rpc._update_market_direction(MarketDirection.NONE) + new_market_dir_arg = context.args[0] + old_market_dir = self._rpc._get_market_direction() + new_market_dir = None + if new_market_dir_arg == "long": + new_market_dir = MarketDirection.LONG + elif new_market_dir_arg == "short": + new_market_dir = MarketDirection.SHORT + elif new_market_dir_arg == "even": + new_market_dir = MarketDirection.EVEN + elif new_market_dir_arg == "none": + new_market_dir = MarketDirection.NONE + + if new_market_dir is not None: + self._rpc._update_market_direction(new_market_dir) + self._send_msg("Successfully updated market direction" + f" from *{old_market_dir}* to *{new_market_dir}*.") else: - raise RPCException("Invalid market direction provided") + raise RPCException("Invalid market direction provided. \n" + "Valid market directions: *long, short, even, none*") + elif context.args is not None and len(context.args) == 0: + old_market_dir = self._rpc._get_market_direction() + self._send_msg(f"Currently set market direction: *{old_market_dir}*") else: - raise RPCException("Invalid usage of command /marketdir.") + raise RPCException("Invalid usage of command /marketdir. \n" + "Usage: */marketdir [short | long | even | none]*")