proper validation of freqai config parameters
This commit is contained in:
parent
7ff3258607
commit
7486d9d9e2
@ -85,6 +85,7 @@ def validate_config_consistency(conf: Dict[str, Any], preliminary: bool = False)
|
|||||||
_validate_unlimited_amount(conf)
|
_validate_unlimited_amount(conf)
|
||||||
_validate_ask_orderbook(conf)
|
_validate_ask_orderbook(conf)
|
||||||
validate_migrated_strategy_settings(conf)
|
validate_migrated_strategy_settings(conf)
|
||||||
|
_validate_freqai(conf)
|
||||||
|
|
||||||
# validate configuration before returning
|
# validate configuration before returning
|
||||||
logger.info('Validating configuration ...')
|
logger.info('Validating configuration ...')
|
||||||
@ -163,6 +164,21 @@ def _validate_edge(conf: Dict[str, Any]) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _validate_freqai(conf: Dict[str, Any]) -> None:
|
||||||
|
"""
|
||||||
|
Freqai param validator
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not conf.get('freqai', {}):
|
||||||
|
return
|
||||||
|
|
||||||
|
for param in constants.SCHEMA_FREQAI_REQUIRED:
|
||||||
|
if param not in conf.get('freqai', {}):
|
||||||
|
raise OperationalException(
|
||||||
|
f'{param} not found in Freqai config'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _validate_whitelist(conf: Dict[str, Any]) -> None:
|
def _validate_whitelist(conf: Dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
Dynamic whitelist does not require pair_whitelist to be set - however StaticWhitelist does.
|
Dynamic whitelist does not require pair_whitelist to be set - however StaticWhitelist does.
|
||||||
|
@ -515,6 +515,17 @@ SCHEMA_MINIMAL_REQUIRED = [
|
|||||||
'dataformat_trades',
|
'dataformat_trades',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
SCHEMA_FREQAI_REQUIRED = [
|
||||||
|
'timeframes',
|
||||||
|
'train_period',
|
||||||
|
'backtest_period',
|
||||||
|
'identifier',
|
||||||
|
'corr_pairlist',
|
||||||
|
'feature_parameters',
|
||||||
|
'data_split_parameters',
|
||||||
|
'model_training_parameters'
|
||||||
|
]
|
||||||
|
|
||||||
CANCEL_REASON = {
|
CANCEL_REASON = {
|
||||||
"TIMEOUT": "cancelled due to timeout",
|
"TIMEOUT": "cancelled due to timeout",
|
||||||
"PARTIALLY_FILLED_KEEP_OPEN": "partially filled - keeping order open",
|
"PARTIALLY_FILLED_KEEP_OPEN": "partially filled - keeping order open",
|
||||||
|
@ -15,10 +15,9 @@ class RunMode(Enum):
|
|||||||
UTIL_NO_EXCHANGE = "util_no_exchange"
|
UTIL_NO_EXCHANGE = "util_no_exchange"
|
||||||
PLOT = "plot"
|
PLOT = "plot"
|
||||||
WEBSERVER = "webserver"
|
WEBSERVER = "webserver"
|
||||||
FREQAI = "freqai"
|
|
||||||
OTHER = "other"
|
OTHER = "other"
|
||||||
|
|
||||||
|
|
||||||
TRADING_MODES = [RunMode.LIVE, RunMode.DRY_RUN]
|
TRADING_MODES = [RunMode.LIVE, RunMode.DRY_RUN]
|
||||||
OPTIMIZE_MODES = [RunMode.BACKTEST, RunMode.EDGE, RunMode.HYPEROPT, RunMode.FREQAI]
|
OPTIMIZE_MODES = [RunMode.BACKTEST, RunMode.EDGE, RunMode.HYPEROPT]
|
||||||
NON_UTIL_MODES = TRADING_MODES + OPTIMIZE_MODES
|
NON_UTIL_MODES = TRADING_MODES + OPTIMIZE_MODES
|
||||||
|
@ -44,7 +44,6 @@ class FreqaiDataKitchen:
|
|||||||
self.data: Dict[Any, Any] = {}
|
self.data: Dict[Any, Any] = {}
|
||||||
self.data_dictionary: Dict[Any, Any] = {}
|
self.data_dictionary: Dict[Any, Any] = {}
|
||||||
self.config = config
|
self.config = config
|
||||||
self.assert_config(self.config, live)
|
|
||||||
self.freqai_config = config["freqai"]
|
self.freqai_config = config["freqai"]
|
||||||
self.predictions: npt.ArrayLike = np.array([])
|
self.predictions: npt.ArrayLike = np.array([])
|
||||||
self.do_predict: npt.ArrayLike = np.array([])
|
self.do_predict: npt.ArrayLike = np.array([])
|
||||||
@ -72,28 +71,6 @@ class FreqaiDataKitchen:
|
|||||||
|
|
||||||
self.data_drawer = data_drawer
|
self.data_drawer = data_drawer
|
||||||
|
|
||||||
def assert_config(self, config: Dict[str, Any], live: bool) -> None:
|
|
||||||
if not config.get('freqai'):
|
|
||||||
logger.error('No Freqai parameters found in config file.')
|
|
||||||
|
|
||||||
# assert config.get('freqai'), "No Freqai parameters found in config file."
|
|
||||||
# assert config.get('freqai', {}).get('train_period'), ("No Freqai train_period found in"
|
|
||||||
# "config file.")
|
|
||||||
# assert type(config.get('freqai', {})
|
|
||||||
# .get('train_period')) is int, ('Can only train on full day period.'
|
|
||||||
# 'No fractional days permitted.')
|
|
||||||
# assert config.get('freqai', {}).get('backtest_period'), ("No Freqai backtest_period found"
|
|
||||||
# "in config file.")
|
|
||||||
# if not live:
|
|
||||||
# assert type(config.get('freqai', {})
|
|
||||||
# .get('backtest_period')) is int, ('Can only backtest on full day'
|
|
||||||
# 'backtest_period. Only live/dry mode'
|
|
||||||
# 'allows fractions of days')
|
|
||||||
# assert config.get('freqai', {}).get('identifier'), ("No Freqai identifier found in config"
|
|
||||||
# "file.")
|
|
||||||
# assert config.get('freqai', {}).get('feature_parameters'), ("No Freqai feature_parameters"
|
|
||||||
# "found in config file.")
|
|
||||||
|
|
||||||
def set_paths(self, metadata: dict, trained_timestamp: int = None,) -> None:
|
def set_paths(self, metadata: dict, trained_timestamp: int = None,) -> None:
|
||||||
self.full_path = Path(self.config['user_data_dir'] /
|
self.full_path = Path(self.config['user_data_dir'] /
|
||||||
"models" /
|
"models" /
|
||||||
|
@ -13,6 +13,7 @@ from pandas import DataFrame
|
|||||||
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
from freqtrade.enums import RunMode
|
from freqtrade.enums import RunMode
|
||||||
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.freqai.data_drawer import FreqaiDataDrawer
|
from freqtrade.freqai.data_drawer import FreqaiDataDrawer
|
||||||
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
|
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
|
||||||
from freqtrade.strategy.interface import IStrategy
|
from freqtrade.strategy.interface import IStrategy
|
||||||
@ -57,18 +58,11 @@ class IFreqaiModel(ABC):
|
|||||||
self.config['exchange']['pair_whitelist'])
|
self.config['exchange']['pair_whitelist'])
|
||||||
|
|
||||||
def assert_config(self, config: Dict[str, Any]) -> None:
|
def assert_config(self, config: Dict[str, Any]) -> None:
|
||||||
if not config.get('freqai'):
|
|
||||||
logger.error('No Freqai parameters found in config file.')
|
if not config.get('freqai', {}):
|
||||||
# assert config.get('freqai'), "No Freqai parameters found in config file."
|
raise OperationalException(
|
||||||
# assert config.get('freqai', {}).get('data_split_parameters'), ("No Freqai"
|
"No freqai parameters found in configuration file."
|
||||||
# "data_split_parameters"
|
)
|
||||||
# "in config file.")
|
|
||||||
# assert config.get('freqai', {}).get('model_training_parameters'), ("No Freqai"
|
|
||||||
# "modeltrainingparameters"
|
|
||||||
# "found in config file.")
|
|
||||||
# assert config.get('freqai', {}).get('feature_parameters'), ("No Freqai"
|
|
||||||
# "feature_parameters found in"
|
|
||||||
# "config file.")
|
|
||||||
|
|
||||||
def start(self, dataframe: DataFrame, metadata: dict, strategy: IStrategy) -> DataFrame:
|
def start(self, dataframe: DataFrame, metadata: dict, strategy: IStrategy) -> DataFrame:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user