initial commit
This commit is contained in:
parent
b3fbb263ce
commit
a3cc001f1b
26
freqtrade/enums/marketstatetype.py
Normal file
26
freqtrade/enums/marketstatetype.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class MarketDirection(Enum):
|
||||||
|
"""
|
||||||
|
Enum for various market directions.
|
||||||
|
"""
|
||||||
|
LONG = "long"
|
||||||
|
SHORT = "short"
|
||||||
|
EVEN = "even"
|
||||||
|
NONE = ''
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def string_to_enum(label : str) -> str:
|
||||||
|
match label:
|
||||||
|
case "long":
|
||||||
|
return MarketDirection.LONG
|
||||||
|
case "short":
|
||||||
|
return MarketDirection.SHORT
|
||||||
|
case "even":
|
||||||
|
return MarketDirection.EVEN
|
||||||
|
case 'none':
|
||||||
|
return MarketDirection.NONE
|
||||||
|
case _:
|
||||||
|
return None
|
||||||
|
|
@ -25,7 +25,7 @@ from telegram.utils.helpers import escape_markdown
|
|||||||
|
|
||||||
from freqtrade.__init__ import __version__
|
from freqtrade.__init__ import __version__
|
||||||
from freqtrade.constants import DUST_PER_COIN, Config
|
from freqtrade.constants import DUST_PER_COIN, Config
|
||||||
from freqtrade.enums import RPCMessageType, SignalDirection, TradingMode
|
from freqtrade.enums import MarketDirection, RPCMessageType, SignalDirection, TradingMode
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.misc import chunks, plural, round_coin_value
|
from freqtrade.misc import chunks, plural, round_coin_value
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
@ -129,7 +129,7 @@ class Telegram(RPCHandler):
|
|||||||
r'/weekly$', r'/weekly \d+$', r'/monthly$', r'/monthly \d+$',
|
r'/weekly$', r'/weekly \d+$', r'/monthly$', r'/monthly \d+$',
|
||||||
r'/forcebuy$', r'/forcelong$', r'/forceshort$',
|
r'/forcebuy$', r'/forcelong$', r'/forceshort$',
|
||||||
r'/forcesell$', r'/forceexit$',
|
r'/forcesell$', r'/forceexit$',
|
||||||
r'/edge$', r'/health$', r'/help$', r'/version$'
|
r'/edge$', r'/health$', r'/help$', r'/version$', r'/marketdir$'
|
||||||
]
|
]
|
||||||
# Create keys for generation
|
# Create keys for generation
|
||||||
valid_keys_print = [k.replace('$', '') for k in valid_keys]
|
valid_keys_print = [k.replace('$', '') for k in valid_keys]
|
||||||
@ -197,6 +197,7 @@ class Telegram(RPCHandler):
|
|||||||
CommandHandler('health', self._health),
|
CommandHandler('health', self._health),
|
||||||
CommandHandler('help', self._help),
|
CommandHandler('help', self._help),
|
||||||
CommandHandler('version', self._version),
|
CommandHandler('version', self._version),
|
||||||
|
CommandHandler('marketdir', self._changemarketdir)
|
||||||
]
|
]
|
||||||
callbacks = [
|
callbacks = [
|
||||||
CallbackQueryHandler(self._status_table, pattern='update_status_table'),
|
CallbackQueryHandler(self._status_table, pattern='update_status_table'),
|
||||||
@ -1677,3 +1678,18 @@ class Telegram(RPCHandler):
|
|||||||
'TelegramError: %s! Giving up on that message.',
|
'TelegramError: %s! Giving up on that message.',
|
||||||
telegram_err.message
|
telegram_err.message
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@authorized_only
|
||||||
|
def _changemarketdir(self, update: Update, context: CallbackContext) -> None:
|
||||||
|
"""
|
||||||
|
Handler for /marketdir.
|
||||||
|
Updates the bot's market_direction
|
||||||
|
:param bot: telegram bot
|
||||||
|
:param update: message update
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
if context.args and len(context.args) == 1:
|
||||||
|
market_dir = MarketDirection.string_to_enum(context.args[0])
|
||||||
|
if market_dir:
|
||||||
|
self._rpc._freqtrade.strategy.market_direction = market_dir
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ from pandas import DataFrame
|
|||||||
|
|
||||||
from freqtrade.constants import Config, IntOrInf, ListPairsWithTimeframes
|
from freqtrade.constants import Config, IntOrInf, ListPairsWithTimeframes
|
||||||
from freqtrade.data.dataprovider import DataProvider
|
from freqtrade.data.dataprovider import DataProvider
|
||||||
from freqtrade.enums import (CandleType, ExitCheckTuple, ExitType, RunMode, SignalDirection,
|
from freqtrade.enums import (CandleType, ExitCheckTuple, ExitType, MarketDirection, RunMode, SignalDirection,
|
||||||
SignalTagType, SignalType, TradingMode)
|
SignalTagType, SignalType, TradingMode)
|
||||||
from freqtrade.exceptions import OperationalException, StrategyError
|
from freqtrade.exceptions import OperationalException, StrategyError
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_next_date, timeframe_to_seconds
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_next_date, timeframe_to_seconds
|
||||||
@ -122,6 +122,9 @@ class IStrategy(ABC, HyperStrategyMixin):
|
|||||||
# Definition of plot_config. See plotting documentation for more details.
|
# Definition of plot_config. See plotting documentation for more details.
|
||||||
plot_config: Dict = {}
|
plot_config: Dict = {}
|
||||||
|
|
||||||
|
# A self set parameter that represents the market direction. filled from configuration
|
||||||
|
market_direction: MarketDirection = MarketDirection.NONE
|
||||||
|
|
||||||
def __init__(self, config: Config) -> None:
|
def __init__(self, config: Config) -> None:
|
||||||
self.config = config
|
self.config = config
|
||||||
# Dict to determine if analysis is necessary
|
# Dict to determine if analysis is necessary
|
||||||
|
Loading…
Reference in New Issue
Block a user